# 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_CPR
	tristate "QCOM Core Power Reduction (CPR) support"
	depends on ARCH_QCOM && HAS_IOMEM
	select PM_OPP
	select REGMAP
	help
	  Say Y here to enable support for the CPR hardware found on Qualcomm
	  SoCs like QCS404.

	  This driver populates CPU OPPs tables and makes adjustments to the
	  tables based on feedback from the CPR hardware. If you want to do
	  CPUfrequency scaling say Y here.

	  To compile this driver as a module, choose M here: the module will
	  be called qcom-cpr

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 && ARM64 || COMPILE_TEST

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_PDR_HELPERS
	tristate
	select QCOM_QMI_HELPERS

config QCOM_QMI_HELPERS
	tristate
	depends on NET

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_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_RPMHPD
	tristate "Qualcomm RPMh Power domain driver"
	depends on QCOM_RPMH && QCOM_COMMAND_DB
	help
	  QCOM RPMh Power domain driver to support power-domains with
	  performance states. The driver communicates a performance state
	  value to RPMh which then translates it into corresponding voltage
	  for the voltage rail.

config QCOM_RPMPD
	tristate "Qualcomm RPM Power domain driver"
	depends on PM && OF
	depends on QCOM_SMD_RPM
	select PM_GENERIC_DOMAINS
	select PM_GENERIC_DOMAINS_OF
	help
	  QCOM RPM Power domain driver to support power-domains with
	  performance states. The driver communicates a performance state
	  value to RPM which then translates it into corresponding voltage
	  for the voltage rail.

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
	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 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
	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.

endmenu
