# SPDX-License-Identifier: GPL-2.0-only
#
# QCOM Soc drivers
#
menu "Qualcomm SoC drivers"

config QCOM_AOSS_QMP
	tristate "Qualcomm AOSS Driver"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on MAILBOX
	depends on COMMON_CLK && PM
	select PM_GENERIC_DOMAINS
	help
	  This driver provides the means of communicating with and controlling
	  the low-power state for resources related to the remoteproc
	  subsystems as well as controlling the debug clocks exposed by the Always On
	  Subsystem (AOSS) using Qualcomm Messaging Protocol (QMP).

config QCOM_COMMAND_DB
	tristate "Qualcomm Command DB"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on OF_RESERVED_MEM
	help
	  Command DB queries shared memory by key string for shared system
	  resources. Platform drivers that require to set state of a shared
	  resource on a RPM-hardened platform must use this database to get
	  SoC specific identifier and information for the shared resources.

config QCOM_GENI_SE
	tristate "QCOM GENI Serial Engine Driver"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  This driver is used to manage Generic Interface (GENI) firmware based
	  Qualcomm Technologies, Inc. Universal Peripheral (QUP) Wrapper. This
	  driver is also used to manage the common aspects of multiple Serial
	  Engines present in the QUP.

config QCOM_GSBI
	tristate "QCOM General Serial Bus Interface"
	depends on ARCH_QCOM || COMPILE_TEST
	select MFD_SYSCON
	help
	  Say y here to enable GSBI support.  The GSBI provides control
	  functions for connecting the underlying serial UART, SPI, and I2C
	  devices to the output pins.

config QCOM_LLCC
	tristate "Qualcomm Technologies, Inc. LLCC driver"
	depends on ARCH_QCOM || COMPILE_TEST
	select REGMAP_MMIO
	help
	  Qualcomm Technologies, Inc. platform specific
	  Last Level Cache Controller(LLCC) driver for platforms such as,
	  SDM845. This provides interfaces to clients that use the LLCC.
	  Say yes here to enable LLCC slice driver.

config QCOM_KRYO_L2_ACCESSORS
	bool
	depends on (ARCH_QCOM || COMPILE_TEST) && ARM64

config QCOM_MDT_LOADER
	tristate
	select QCOM_SCM

config QCOM_OCMEM
	tristate "Qualcomm On Chip Memory (OCMEM) driver"
	depends on ARCH_QCOM
	select QCOM_SCM
	help
	  The On Chip Memory (OCMEM) allocator allows various clients to
	  allocate memory from OCMEM based on performance, latency and power
	  requirements. This is typically used by the GPU, camera/video, and
	  audio components on some Snapdragon SoCs.

config QCOM_PD_MAPPER
	tristate "Qualcomm Protection Domain Mapper"
	select QCOM_QMI_HELPERS
	select QCOM_PDR_MSG
	select AUXILIARY_BUS
	depends on NET && QRTR && (ARCH_QCOM || COMPILE_TEST)
	default QCOM_RPROC_COMMON
	help
	  The Protection Domain Mapper maps registered services to the domains
	  and instances handled by the remote DSPs. This is a kernel-space
	  implementation of the service. It is a simpler alternative to the
	  userspace daemon.

config QCOM_PDR_HELPERS
	tristate
	select QCOM_QMI_HELPERS
	select QCOM_PDR_MSG
	depends on NET

config QCOM_PDR_MSG
	tristate

config QCOM_PMIC_PDCHARGER_ULOG
	tristate "Qualcomm PMIC PDCharger ULOG driver"
	depends on RPMSG
	depends on EVENT_TRACING
	help
	  The Qualcomm PMIC PDCharger ULOG driver provides access to logs of
	  the ADSP firmware PDCharger module in charge of Battery and Power
	  Delivery on modern systems.

	  Say yes here to support PDCharger ULOG event tracing on modern
	  Qualcomm platforms.

config QCOM_PMIC_GLINK
	tristate "Qualcomm PMIC GLINK driver"
	depends on RPMSG
	depends on TYPEC
	depends on DRM
	depends on NET
	depends on OF
	select AUXILIARY_BUS
	select QCOM_PDR_HELPERS
	select DRM_AUX_HPD_BRIDGE
	help
	  The Qualcomm PMIC GLINK driver provides access, over GLINK, to the
	  USB and battery firmware running on one of the coprocessors in
	  several modern Qualcomm platforms.

	  Say yes here to support USB-C and battery status on modern Qualcomm
	  platforms.

config QCOM_QMI_HELPERS
	tristate
	depends on NET

config QCOM_RAMP_CTRL
	tristate "Qualcomm Ramp Controller driver"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  The Ramp Controller is used to program the sequence ID for pulse
	  swallowing, enable sequence and link sequence IDs for the CPU
	  cores on some Qualcomm SoCs.
	  Say y here to enable support for the ramp controller.

config QCOM_RMTFS_MEM
	tristate "Qualcomm Remote Filesystem memory driver"
	depends on ARCH_QCOM
	select QCOM_SCM
	help
	  The Qualcomm remote filesystem memory driver is used for allocating
	  and exposing regions of shared memory with remote processors for the
	  purpose of exchanging sector-data between the remote filesystem
	  service and its clients.

	  Say y here if you intend to boot the modem remoteproc.

config QCOM_RPM_MASTER_STATS
	tristate "Qualcomm RPM Master stats"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  The RPM Master sleep stats driver provides detailed per-subsystem
	  sleep/wake data, read from the RPM message RAM. It can be used to
	  assess whether all the low-power modes available are entered as
	  expected or to check which part of the SoC prevents it from sleeping.

	  Say y here if you intend to debug or monitor platform sleep.

config QCOM_RPMH
	tristate "Qualcomm RPM-Hardened (RPMH) Communication"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on (QCOM_COMMAND_DB || !QCOM_COMMAND_DB)
	help
	  Support for communication with the hardened-RPM blocks in
	  Qualcomm Technologies Inc (QTI) SoCs. RPMH communication uses an
	  internal bus to transmit state requests for shared resources. A set
	  of hardware components aggregate requests for these resources and
	  help apply the aggregated state on the resource.

config QCOM_SMEM
	tristate "Qualcomm Shared Memory Manager (SMEM)"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on HWSPINLOCK
	help
	  Say y here to enable support for the Qualcomm Shared Memory Manager.
	  The driver provides an interface to items in a heap shared among all
	  processors in a Qualcomm platform.

config QCOM_SMD_RPM
	tristate "Qualcomm Resource Power Manager (RPM) over SMD"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on RPMSG
	depends on RPMSG_QCOM_SMD || RPMSG_QCOM_SMD=n
	help
	  If you say yes to this option, support will be included for the
	  Resource Power Manager system found in the Qualcomm 8974 based
	  devices.

	  This is required to access many regulators, clocks and bus
	  frequencies controlled by the RPM on these devices.

	  Say M here if you want to include support for the Qualcomm RPM as a
	  module. This will build a module called "qcom-smd-rpm".

config QCOM_SMEM_STATE
	bool

config QCOM_SMP2P
	tristate "Qualcomm Shared Memory Point to Point support"
	depends on MAILBOX
	depends on QCOM_SMEM
	select QCOM_SMEM_STATE
	select IRQ_DOMAIN
	help
	  Say yes here to support the Qualcomm Shared Memory Point to Point
	  protocol.

config QCOM_SMSM
	tristate "Qualcomm Shared Memory State Machine"
	depends on MAILBOX
	depends on QCOM_SMEM
	select QCOM_SMEM_STATE
	select IRQ_DOMAIN
	help
	  Say yes here to support the Qualcomm Shared Memory State Machine.
	  The state machine is represented by bits in shared memory.

config QCOM_SOCINFO
	tristate "Qualcomm socinfo driver"
	depends on QCOM_SMEM
	select SOC_BUS
	help
	 Say yes here to support the Qualcomm socinfo driver, providing
	 information about the SoC to user space.

config QCOM_SPM
	tristate "Qualcomm Subsystem Power Manager (SPM)"
	depends on ARCH_QCOM || COMPILE_TEST
	select QCOM_SCM
	help
	  Enable the support for the Qualcomm Subsystem Power Manager, used
	  to manage cores, L2 low power modes and to configure the internal
	  Adaptive Voltage Scaler parameters, where supported.

config QCOM_STATS
	tristate "Qualcomm Technologies, Inc. (QTI) Sleep stats driver"
	depends on (ARCH_QCOM && DEBUG_FS) || COMPILE_TEST
	depends on QCOM_SMEM
	depends on QCOM_AOSS_QMP || QCOM_AOSS_QMP=n
	help
	  Qualcomm Technologies, Inc. (QTI) Sleep stats driver to read
	  the shared memory exported by the remote processor related to
	  various SoC level low power modes statistics and export to debugfs
	  interface.

config QCOM_WCNSS_CTRL
	tristate "Qualcomm WCNSS control driver"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on RPMSG
	help
	  Client driver for the WCNSS_CTRL SMD channel, used to download nv
	  firmware to a newly booted WCNSS chip.

config QCOM_APR
	tristate "Qualcomm APR/GPR Bus (Asynchronous/Generic Packet Router)"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on RPMSG
	depends on NET
	select QCOM_PDR_HELPERS
	help
	  Enable APR IPC protocol support between
	  application processor and QDSP6. APR is
	  used by audio driver to configure QDSP6
	  ASM, ADM and AFE modules.

config QCOM_ICC_BWMON
	tristate "QCOM Interconnect Bandwidth Monitor driver"
	depends on ARCH_QCOM || COMPILE_TEST
	select PM_OPP
	select REGMAP_MMIO
	help
	  Sets up driver monitoring bandwidth on various interconnects and
	  based on that voting for interconnect bandwidth, adjusting their
	  speed to current demand.
	  Current implementation brings support for BWMON v4, used for example
	  on SDM845 to measure bandwidth between CPU (gladiator_noc) and Last
	  Level Cache (memnoc).  Usage of this BWMON allows to remove some of
	  the fixed bandwidth votes from cpufreq (CPU nodes) thus achieve high
	  memory throughput even with lower CPU frequencies.

config QCOM_INLINE_CRYPTO_ENGINE
	tristate
	select QCOM_SCM

config QCOM_PBS
	tristate "PBS trigger support for Qualcomm Technologies, Inc. PMICS"
	depends on SPMI
	help
	  This driver supports configuring software programmable boot sequencer (PBS)
	  trigger event through PBS RAM on Qualcomm Technologies, Inc. PMICs.
	  This module provides the APIs to the client drivers that wants to send the
	  PBS trigger event to the PBS RAM.

endmenu
