# 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 || 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_PDR_HELPERS
	tristate
	select QCOM_QMI_HELPERS
	depends on NET

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

config QCOM_INLINE_CRYPTO_ENGINE
	tristate
	select QCOM_SCM

endmenu
