# 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 || COMPILE_TEST
	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

config QCOM_UBWC_CONFIG
	tristate
	help
	  Most Qualcomm SoCs feature a number of Universal Bandwidth Compression
	  (UBWC) engines across various IP blocks, which need to be initialized
	  with coherent configuration data. This module functions as a single
	  source of truth for that information.
