# SPDX-License-Identifier: GPL-2.0
#
# QCOM Soc drivers
#
menu "Qualcomm SoC drivers"
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_MEM_OFFLINE
	bool "Dynamic Memory Region Offline driver"
	depends on MEMORY_HOTPLUG
	help
	  Add support for DDR Self-Refresh power management through the dynamic
	  memory offline framework. This driver interfaces between the memory
	  hotplug subsystem and AOP which hot adds or removes memory blocks and
	  controls the start/stop of self-refresh of these DDR regions. This
	  helps reduce power consumption during idle mode of the system.
	  If unsure, say N

config BUG_ON_HW_MEM_ONLINE_FAIL
	bool "Trigger a BUG when HW memory online fails"
	depends on QCOM_MEM_OFFLINE
	help
	  Select this option if kernel should BUG when the hardware
	  onlining of memory hotplug blocks fails. This helps to catch
	  online failures much quicker and avoids the later side effects
	  of such memory online failures.
	  If unsure, say N

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 OVERRIDE_MEMORY_LIMIT
	bool "Override memory limit set by the kernel boot parameter"
	depends on QCOM_MEM_OFFLINE
	help
	  Override any memory limit set by the kernel boot parameter with
	  limit set by mem-offline dt entry so that memory offline framework
	  can initialize remaining memory with movable pages for memory
	  hot-plugging.
	  If unsure, say N

config QCOM_GLINK_SSR
	tristate "Qualcomm Glink SSR driver"
	depends on RPMSG
	depends on QCOM_RPROC_COMMON
	help
	  Say y here to enable GLINK SSR support. The GLINK SSR driver
	  implements the SSR protocol for notifying the remote processor about
	  neighboring subsystems going up or down.

config QCOM_CPUSS_DUMP
	bool "CPU Subsystem Dumping support"
	help
	  Add support to dump various hardware entities such as the instruction
	  and data tlb's as well as the unified tlb, which are a part of the
	  cpu subsystem to an allocated buffer. This allows for analysis of the
	  the entities if corruption is suspected.
	  If unsure, say N

config QCOM_RUN_QUEUE_STATS
       bool "Enable collection and exporting of QTI Run Queue stats to userspace"
       help
        This option enables the driver to periodically collecting the statistics
        of kernel run queue information and calculate the load of the system.
        This information is exported to usespace via sysfs entries and userspace
        algorithms uses info and decide when to turn on/off the cpu cores.

config MSM_QBT_HANDLER
	bool "Event Handler for QTI Ultrasonic Fingerprint Sensor"
	help
	  This driver acts as a interrupt handler, where the interrupt is generated
	  by the QTI Ultrasonic Fingerprint Sensor. It queues the events for each
	  interrupt in an event queue and notifies the userspace to read the events
	  from the queue. It also creates an input device to send key events such as
	  KEY_POWER, KEY_HOME.

config QCOM_GSBI
        tristate "QCOM General Serial Bus Interface"
        depends on ARCH_QCOM
        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_IPCC
	tristate "Qualcomm Technologies, Inc. IPCC driver"
	depends on MAILBOX
	help
	  Qualcomm Technologies, Inc. IPCC driver for MSM devices. The drivers
	  acts as an interrupt controller for the clients interested in
	  talking to the IPCC (inbound-communication). On the other hand, the
	  driver also provides a mailbox channel for outbound-communications.
	  Say Y here to compile the driver as a part of kernel or M to compile
	  as a module.

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

config QCOM_KONA_LLCC
	tristate "Qualcomm Technologies, Inc. KONA LLCC driver"
	depends on QCOM_LLCC
	help
	  Say yes here to enable the LLCC driver for KONA. This provides
	  data required to configure LLCC so that clients can start using the
	  LLCC slices.

config QCOM_LITO_LLCC
	tristate "Qualcomm Technologies, Inc. LITO LLCC driver"
	depends on QCOM_LLCC
	help
	  Say yes here to enable the LLCC driver for LITO. This provides
	  data required to configure LLCC so that clients can start using the
	  LLCC slices.

config QCOM_LAGOON_LLCC
	tristate "Qualcomm Technologies, Inc. LAGOON LLCC driver"
	depends on QCOM_LLCC
	help
	  Qualcomm Technologies, Inc. platform specific LLCC driver for LAGOON.
	  Say yes here to enable the LLCC driver for LAGOON. This provides
	  data required to configure LLCC so that clients can start using the
	  LLCC slices.

config QCOM_SDM845_LLCC
	tristate "Qualcomm Technologies, Inc. SDM845 LLCC driver"
	depends on QCOM_LLCC
	help
	  Say yes here to enable the LLCC driver for SDM845. This provides
	  data required to configure LLCC so that clients can start using the
	  LLCC slices.

config QCOM_LLCC_PERFMON
	tristate "Qualcomm Technologies, Inc. LLCC Perfmon driver"
	depends on QCOM_LLCC
	help
	  This option enables driver for LLCC Performance monitor block. Using
	  this various events in different LLCC sub ports can be monitored.
	  This is used for performance and debug activity and exports sysfs
	  interface. sysfs interface is used to configure and dump the LLCC
	  performance events.

config QCOM_MDT_LOADER
	tristate "Qualcomm Technologies, Inc. Firmware parser for MDT format"
	select QCOM_SCM
	help
	   Firmware parser driver parsers the MDT format and loads peripheral
	   images into pre-allocated buffers. It uses the firmware loader
	   framework available for loading firmware.

config QPNP_PBS
	tristate "PBS trigger support for QPNP PMIC"
	depends on SPMI
	help
	  This driver supports configuring software PBS trigger event through PBS
	  RAM on Qualcomm Technologies, Inc. QPNP PMICs. This module provides
	  the APIs to the client drivers that wants to send the PBS trigger
	  event to the PBS RAM.

config QCOM_PM
	bool "Qualcomm Power Management"
	depends on ARCH_QCOM && !ARM64
	select ARM_CPU_SUSPEND
	select QCOM_SCM
	help
	  QCOM Platform specific power driver to manage cores and L2 low power
	  modes. It interface with various system drivers to put the cores in
	  low power modes.

config QCOM_QMI_HELPERS
	bool "QTI QMI Helpers"
	depends on QRTR
	help
	  Helper library for handling QMI encoded messages.  QMI encoded
	  messages are used in communication between the majority of QRTR
	  clients and this helpers provide the common functionality needed for
	  doing this from a kernel driver.

config QCOM_QMI_RMNET
	bool "QTI QMI Rmnet Helpers"
	depends on QCOM_QMI_HELPERS
	depends on RMNET
	help
	  Helper for handling interfaces between kernel clients and rmnet
	  driver. It enables the rmnet driver to create/delete DFC/WDA
	  clients and provides the common functionality for data flow control
	  and power save features.

config QCOM_QMI_DFC
	bool "Enable burst mode flow control"
	depends on QCOM_QMI_RMNET
	help
	  Say y here to enable support for burst mode data flow control.
	  DFC client provides an interface to the modem dfc service and
	  does burst mode flow control. It enables the flow on receiving flow
	  status indication and disables flows while grant size is reached.
	  If unsure or not use burst mode flow control, say 'N'.

source "drivers/soc/qcom/rmnet_ctl/Kconfig"

config QCOM_QMI_POWER_COLLAPSE
	bool "Enable power save features"
	depends on QCOM_QMI_RMNET
	help
	  Say y here to enable support for power save features.
	  It provides an interface to offload uplink flow control based on
	  detected flow status.
	  If unsure or not use power save feature, say 'N'.


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 && ARM64 && OF || COMPILE_TEST
	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
	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
	depends on RPMSG && OF
	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 MSM_SPM
        bool "Driver support for SPM and AVS wrapper hardware"
        help
          Enables the support for SPM and AVS wrapper hardware on MSMs. SPM
          hardware is used to manage the processor power during sleep. The
          driver allows configuring SPM to allow different low power modes for
          both core and L2.

config MSM_L2_SPM
        bool "SPM support for L2 cache"
        help
          Enable SPM driver support for L2 cache. Some MSM chipsets allow
          control of L2 cache low power mode with a Subsystem Power manager.
          Enabling this driver allows configuring L2 SPM for low power modes
          on supported chipsets.

config QCOM_SCM
	bool "Secure Channel Manager (SCM) support"
	default n
	help
	  Say y here to enable Secure Channel Mananger(SCM) support for SoC.
	  SCM provides communication channel to communicate with secure
	  world(EL2 and EL3) by using smc call.
	  SCM driver provides the support for atomic scm calls also.

config QCOM_EARLY_RANDOM
	bool "Initialize random pool very early"
	help
	 The standard random pool may not initialize until late in the boot
	 process which means that any calls to get random numbers before then
	 may not be truly random. Select this option to make an early call
	 to get some random data to put in the pool. If unsure, say N.

config QCOM_MEMORY_DUMP_V2
	bool "QCOM Memory Dump V2 Support"
	help
	  This enables memory dump feature. It allows various client
	  subsystems to register respective dump regions. At the time
	  of deadlocks or cpu hangs these dump regions are captured to
	  give a snapshot of the system at the time of the crash.

config MSM_DEBUG_LAR_UNLOCK
	bool "MSM Debug LAR Unlock Support"
	depends on QCOM_MEMORY_DUMP_V2
	help
	  This allows unlocking Core Debug lock to allow capture
	  of upper 32 bits of program counter at the time of
	  system crash. This is useful in getting correct crash
	  location.

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
	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
	help
	  Say yes here to support the Qualcomm Shared Memory State Machine.
	  The state machine is represented by bits in shared memory.

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

config MSM_PIL_MSS_QDSP6V5
	tristate "MSS QDSP6v5 (Hexagon) Boot Support"
	depends on MSM_PIL && MSM_SUBSYSTEM_RESTART
	help
	 Support for booting and shutting down QDSP6v5 (Hexagon) processors
	 in modem subsystems. If you would like to make or receive phone
	 calls then say Y here.
	 If unsure, say N.

config SETUP_SSR_NOTIF_TIMEOUTS
	bool "Set timeouts on SSR sysmon notifications and notifier callbacks"
	help
	  Setup timers prior to initiating communication between
	  subsystems through sysmon, and prior to sending notifications
	  to drivers in the kernel that have registered callbacks with the
	  subsystem notifier framework for a particular subsystem. This
	  is a debugging feature.

config SSR_SYSMON_NOTIF_TIMEOUT
	depends on SETUP_SSR_NOTIF_TIMEOUTS
	int "SSR Sysmon notifications timeout in ms"
	default 10000
	help
	  The amount of time, in milliseconds, that should elapse between
	  the start and end of sysmon SSR notifications, before a warning
	  is emitted.

config SSR_SUBSYS_NOTIF_TIMEOUT
	depends on SETUP_SSR_NOTIF_TIMEOUTS
	int "SSR Subsystem notifier timeout in ms"
	default 10000
	help
	  The amount of time, in milliseconds, that should elapse between
	  the start and end of SSR notifications through the subsystem
	  notifier, before a warning is emitted.

config PANIC_ON_SSR_NOTIF_TIMEOUT
	bool "Trigger kernel panic when notification timeout expires"
	depends on SETUP_SSR_NOTIF_TIMEOUTS
	help
	  Trigger a kernel panic when communication between subsystems
	  through sysmon is taking too long. Also trigger a kernel panic
	  if invoking the callbacks registered with a particular subsystem's
	  notifications by the subsystem notifier framework is taking too long.
	  This is a debugging feature.

config QCOM_SECURE_BUFFER
	bool "Helper functions for securing buffers through TZ"
	help
	 Say 'Y' here for targets that need to call into TZ to secure
	 memory buffers. This ensures that only the correct clients can
	 use this memory and no unauthorized access is made to the
	 buffer

config MSM_REMOTEQDSS
	bool "Allow debug tools to enable events on other processors"
	depends on QCOM_SCM && DEBUG_FS
	help
	  Other onchip processors/execution environments may support debug
	  events. Provide a sysfs interface for debug tools to dynamically
	  enable/disable these events. Interface located in
	  /sys/class/remoteqdss.

config MSM_TZ_SMMU
	depends on ARCH_MSM8953 || ARCH_QCS405 || ARCH_MSM8917 || ARCH_MSM8937
	bool "Helper functions for SMMU configuration through TZ"
	help
	  Say 'Y' here for targets that need to call into TZ to configure
	  SMMUs for any reason (for example, for errata workarounds or
	  configuration of SMMU virtualization).

	  If unsure, say N.

config MSM_SERVICE_LOCATOR
	bool "Service Locator"
	depends on QCOM_QMI_HELPERS
	help
	  The Service Locator provides a library to retrieve location
	  information given a service identifier. Location here translates
	  to what process domain exports the service, and which subsystem
	  that process domain will execute in.

config MSM_SERVICE_NOTIFIER
	bool "Service Notifier"
	depends on MSM_SERVICE_LOCATOR && MSM_SUBSYSTEM_RESTART
	help
	  The Service Notifier provides a library for a kernel client to
	  register for state change notifications regarding a remote service.
	  A remote service here refers to a process providing certain services
	  like audio, the identifier for which is provided by the service
	  locator.

config MSM_SUBSYSTEM_RESTART
	bool "MSM Subsystem Restart"
	help
	  This option enables the MSM subsystem restart framework.
	
	  The MSM subsystem restart framework provides support to boot,
	  shutdown, and restart subsystems with a reference counted API.
	  It also notifies userspace of transitions between these states via
	  sysfs.

config MSM_PIL
	bool "Peripheral image loading"
	select FW_LOADER
	default n
	help
	  Some peripherals need to be loaded into memory before they can be
	  brought out of reset.
	
	  Say yes to support these devices.

config MSM_SYSMON_GLINK_COMM
	bool "MSM System Monitor communication support using GLINK transport"
	depends on MSM_GLINK && MSM_SUBSYSTEM_RESTART
	help
	  This option adds support for MSM System Monitor APIs using the GLINK
	  transport layer. The APIs provided may be used for notifying
	  subsystems within the SoC about other subsystems' power-up/down
	  state-changes.

config MSM_SYSMON_QMI_COMM
       bool "MSM System Monitor communication support using QMI transport"
       depends on QCOM_QMI_HELPERS && MSM_SUBSYSTEM_RESTART
       help
         This option adds support for MSM System Monitor APIs using the
         QMI layer. The APIs provided may be used for notifying
         subsystems within the SoC about other subsystems' power-up/down
         state-changes.

config MSM_PIL_SSR_GENERIC
	tristate "MSM Subsystem Boot Support"
	depends on MSM_PIL && MSM_SUBSYSTEM_RESTART
	help
	  Support for booting and shutting down MSM Subsystem processors.
	  This driver also monitors the SMSM status bits and the watchdog
	  interrupt for the subsystem and restarts it on a watchdog bite
	  or a fatal error. Subsystems include LPASS, Venus, VPU, WCNSS and
	  BCSS.
config MSM_BOOT_STATS
	bool "Use MSM boot stats reporting"
	help
	  Use this to report msm boot stats such as bootloader throughput,
	  display init, total boot time.
	  This figures are reported in mpm sleep clock cycles and have a
	  resolution of 31 bits as 1 bit is used as an overflow check.

config QCOM_DCC_V2
       bool "Qualcomm Technologies Data Capture and Compare enigne support for V2"
       help
         This option enables driver for Data Capture and Compare engine. DCC
         driver provides interface to configure DCC block and read back
         captured data from DCC's internal SRAM.

config QCOM_EUD
	tristate "QTI Embedded USB Debugger (EUD)"
	depends on ARCH_QCOM
	select SERIAL_CORE
	help
	  The EUD (Embedded USB Debugger) is a mini-USB hub implemented
	  on chip to support the USB-based debug and trace capabilities.
	  This module enables support for Qualcomm Technologies, Inc.
	  Embedded USB Debugger (EUD).
	  If unsure, say N.

config QCOM_MINIDUMP
	bool "QCOM Minidump Support"
	depends on QCOM_SMEM && POWER_RESET_QCOM
	help
	  This enables minidump feature. It allows various clients to
	  register to dump their state at system bad state (panic/WDT,etc.,).
	  Minidump would dump all registered entries, only when DLOAD mode
	  is enabled.

config QCOM_DYN_MINIDUMP_STACK
	bool "QTI Dynamic Minidump Stack Registration Support"
	depends on QCOM_MINIDUMP
	help
	  This enables minidump dynamic current stack registration feature.
	  It allows current task stack to be available in minidump, for cases
	  where CPU is unable to register it from IPI_CPU_STOP. The stack data
	  can be used to unwind stack frames.

config MINIDUMP_MAX_ENTRIES
	int "Minidump Maximum num of entries"
	default 200
	depends on QCOM_MINIDUMP
	help
	  This defines maximum number of entries to be allocated for application
	  subsytem in Minidump table.

config QCOM_APR
	tristate "Qualcomm APR Bus (Asynchronous Packet Router)"
	depends on ARCH_QCOM
	depends on RPMSG
	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 MSM_CORE_HANG_DETECT
	tristate "MSM Core Hang Detection Support"
	help
	  This enables the core hang detection module. It causes SoC
	  reset on core hang detection and collects the core context
	  for hang. By using sysfs entries core hang detection can be
	  enabled or disabled dynamically.

config MSM_GLADIATOR_HANG_DETECT
	tristate "MSM Gladiator Hang Detection Support"
	help
	  This enables the gladiator hang detection module.
	  If the configured threshold is reached, it causes SoC reset on
	  gladiator hang detection and collects the context for the
	  gladiator hang.

config MSM_GLADIATOR_ERP
	tristate "GLADIATOR coherency interconnect error reporting driver"
	help
	  Support dumping debug information for the GLADIATOR
	  cache interconnect in the error interrupt handler.
	  Meant to be used for debug scenarios only.

	  If unsure, say N.

config PANIC_ON_GLADIATOR_ERROR
	depends on MSM_GLADIATOR_ERP
	bool "Panic on GLADIATOR error report"
	help
	  Panic upon detection of an Gladiator coherency interconnect error
	  in order to support dumping debug information.
	  Meant to be used for debug scenarios only.

	  If unsure, say N.

config QCOM_FSA4480_I2C
	bool "Fairchild FSA4480 chip with I2C"
	select REGMAP_I2C
	depends on I2C
	help
	  Support for the Fairchild FSA4480 IC switch chip controlled
	  using I2C. This driver provides common support
	  for accessing the device, switching between USB and Audio
	  modes, changing orientation.

config QCOM_WATCHDOG_V2
	bool "QTI Watchdog Support"
	depends on ARCH_QCOM
	help
	  This enables the watchdog module. It causes kernel panic if the
	  watchdog times out. It allows for detection of cpu hangs and
	  deadlocks. It does not run during the bootup process, so it will
	  not catch any early lockups.

config QCOM_INITIAL_LOGBUF
	bool "QCOM save initial log_buf"
	depends on QCOM_WATCHDOG_V2
	help
	  This enables to keep copy of initial log_buf at 100 second from
	  bootup.It can help in debugging issues which are manifestation of
	  failure during initial bootup.

config QCOM_FORCE_WDOG_BITE_ON_PANIC
	bool "QCOM force watchdog bite"
	depends on QCOM_WATCHDOG_V2
	help
	  This forces a watchdog bite when the device restarts due to a
	  kernel panic. On certain MSM SoCs, this provides us
	  additional debugging information.


config QCOM_WDOG_IPI_ENABLE
	bool "Qcom WDT pet optimization"
	depends on QCOM_WATCHDOG_V2
	default n
	help
	  When this option is enabled, watchdog sends IPI to cores in low power
	  mode also. For power optimizations, by default watchdog don't ping
	  cores in low power mode at pettime.

	  To track CPUs health on LPM, or on debug builds enable it.

config QCOM_BUS_SCALING
	bool "Bus scaling driver"
	help
	This option enables bus scaling on MSM devices.  Bus scaling
	allows devices to request the clocks be set to rates sufficient
	for the active devices needs without keeping the clocks at max
	frequency when a slower speed is sufficient.

config  QCOM_BUS_CONFIG_RPMH
	bool "RPMH Bus scaling driver"
	depends on QCOM_BUS_SCALING
	help
	  This option enables bus scaling using QCOM specific hardware
	  accelerators. It enables the translation of bandwidth requests
	  from logical nodes to hardware nodes controlled by the BCM (Bus
	  Clock Manager)

config MSM_SPCOM
	depends on QCOM_GLINK
	bool "Secure Processor Communication over GLINK"
	help
	  spcom driver allows loading Secure Processor Applications and
	  sending messages to Secure Processor Applications.
	  spcom provides interface to both user space app and kernel driver.
	  It is using glink as the transport layer, which provides multiple
	  logical channels over single physical channel.
	  The physical layer is based on shared memory and interrupts.
	  spcom provides clients/server API, although currently only one client
	  or server is allowed per logical channel.

config QSEE_IPC_IRQ
	bool "QSEE interrupt manager"
	help
	  The QSEE IPC IRQ controller manages the interrupts from the QTI
	  secure execution environment. This interrupt controller will use
	  the registers in the spcs region to mask and clear interrupts.
	  Clients can use this driver to avoid adding common interrupt handling
	  code.

config MSM_SPSS_UTILS
	depends on MSM_PIL
	bool "Secure Processor Utilities"
	help
	  spss-utils driver selects Secure Processor firmware file name.
	  The firmware file name for dev, test or production is selected
	  based on two fuses.
	  Different file name is used for differnt SPSS HW versions,
	  because the SPSS firmware size is too small to support multiple
	  HW versions.

config QSEE_IPC_IRQ_BRIDGE
	tristate "QSEE IPC Interrupt Bridge"
	select QSEE_IPC_IRQ
	help
	  This module enables bridging an Inter-Processor Communication(IPC)
	  interrupt from a remote subsystem directed towards
	  Qualcomm Technologies, Inc. Secure Execution Environment(QSEE) to
	  userspace. The interrupt will be propagated through a character device
	  that userspace clients can poll on.

config QCOM_GLINK
	tristate "GLINK Probe Helper"
	depends on RPMSG_QCOM_GLINK_SMEM
	help
	  This enables the GLINK Probe module. The GLINK RPMSG Plugin is
	  currently designed to plugin with the remote proc framework as a
	  subdev. This module is responsible for creating the glink transports
	  when remote proc is disabled.

config QCOM_GLINK_PKT
	tristate "Enable device interface for GLINK packet channels"
	depends on QCOM_GLINK
	help
	  G-link packet driver provides the interface for the userspace
	  clients to communicate over G-Link via device nodes.
	  This enable the userspace clients to read and write to
	  some glink packets channel.

config QCOM_SMP2P_SLEEPSTATE
	bool "SMP2P Sleepstate notifier"
	depends on QCOM_SMP2P
	help
	  When this option is enabled, notifications are sent to remote procs
	  for the power state changes on the local processor. The notifications
	  are sent through the smp2p framework. This driver can also receive
	  notifications from the remote to prevent suspend on the local
	  processor.

config QCOM_QDSS_BRIDGE
	bool "Configure bridge driver for QTI/Qualcomm Technologies, Inc. MDM"
	depends on MHI_BUS
	help
	  The driver will help route diag traffic from modem side over the QDSS
	  sub-system to USB on APSS side. The driver acts as a bridge between the
	  MHI and USB interface.
	  If unsure, say N.

config MSM_CDSP_LOADER
	tristate "CDSP loader support"
	help
	  This enables the CDSP loader driver that loads the CDSP
	  firmware images and brings the compute DSP out of reset
	  for platforms that have one.
	  Say M if you want to enable this module.

config QTI_SYSTEM_PM
	bool

config QCOM_SMCINVOKE
	bool "Secure QSEE Support"
	help
	 Enable SMCInvoke driver which supports capability based secure
	 communication between QTI Secure Execution Environment (QSEE)
	 and high level operating system. It exposes APIs for both
	 userspace and kernel clients.

config MSM_EVENT_TIMER
	bool "Event timer"
        help
	  This option enables a modules that manages a list of event timers
	  that need to be monitored by the PM. The enables the PM code to
	  monitor events that require the core to be awake and ready to
	  handle the event.

config MSM_PM
	depends on PM
	select MSM_IDLE_STATS if DEBUG_FS
	select CPU_IDLE_MULTIPLE_DRIVERS
	select QTI_SYSTEM_PM if QCOM_RPMH
	bool "Qualcomm Technologies, Inc. (QTI) Power Management Drivers"
	help
	  Platform specific power driver to manage cores and l2 low power
	  modes. It interface with various system driver and put the cores
	  into low power modes. It implements OS initiated scheme and
	  determines last CPU to call into PSCI for cluster Low power
	  modes.

if MSM_PM
menuconfig MSM_IDLE_STATS
	bool "Collect idle statistics"
	help
	  Collect cores various low power mode idle statistics
	  and export them in proc/msm_pm_stats. User can read
	  this data and determine what low power modes and how
	  many times cores have entered into LPM modes.

if MSM_IDLE_STATS

config MSM_IDLE_STATS_FIRST_BUCKET
	int "First bucket time"
	default 62500
	help
	  Upper time limit in nanoseconds of first bucket.

config MSM_IDLE_STATS_BUCKET_SHIFT
	int "Bucket shift"
	default 2

config MSM_IDLE_STATS_BUCKET_COUNT
	int "Bucket count"
	default 10

config MSM_SUSPEND_STATS_FIRST_BUCKET
	int "First bucket time for suspend"
	default 1000000000
	help
	  Upper time limit in nanoseconds of first bucket of the
	  histogram.  This is for collecting statistics on suspend.

endif # MSM_IDLE_STATS
endif # MSM_PM

config QTI_L2_REUSE
	bool "Qualcomm Technologies Inc (QTI) L2 reuse"
	depends on ARCH_QCOM
	help
	  This module allows to configure the L2 reuse feature dynamically
	  to let the power collapsed cluster's L2 cache usage by the active
	  cluster cpu. Use sysfs interface to control enabling this feature.

config QCOM_DCC
	bool "QCOM Data Capture and Compare engine support"
	help
	  This option enables driver for Data Capture and Compare engine. DCC
	  driver provides interface to configure DCC block and read back
	  captured data from DCC's internal SRAM.

config QTI_RPM_STATS_LOG
	bool "Qualcomm Technologies RPM Stats Driver"
	depends on QCOM_RPMH || MSM_RPM_SMD
	help
	  This option enables a driver which reads RPM messages from a shared
	  memory location. These messages provide statistical information about
	  the low power modes that RPM enters. The drivers outputs the message
	  via a sysfs node.

config QTI_DDR_STATS_LOG
	tristate "Qualcomm Technologies Inc (QTI) DDR Stats Driver"
	depends on QCOM_RPMH
	help
	  This option enables a driver which reads DDR statistical information
	  from AOP shared memory location such as DDR low power modes and DDR
	  frequency residency and counts. The driver outputs information using
	  sysfs.

config MSM_JTAGV8
	bool "Debug and ETM trace support across power collapse for ARMv8"
	default y if CORESIGHT_SOURCE_ETM4X
	help
	  Enables support for debugging (specifically breakpoints) and ETM
	  processor tracing across power collapse both for JTag and OS hosted
	  software running on ARMv8 target. Enabling this will ensure debug
	  and ETM registers are saved and restored across power collapse.
	  If unsure, say 'N' here to avoid potential power, performance and
	  memory penalty.
config QTEE_SHM_BRIDGE
	bool "QTI TEE shared memory bridge"
	help
	  QTEE shared memory bridge driver provides kernel APIs to share
	  memory between trustzone & other VMs through shared memory bridge.
	  It allows kernel clients to create bridge, delete bridge, and do
	  memory sub-allocation and free from the default kernel bridge
	  created by bridge driver.

source "drivers/soc/qcom/memshare/Kconfig"
config MSM_PERFORMANCE
	tristate "msm performance driver to support userspace fmin/fmax request"
	default n
	help
	This driver can restrict max freq or min freq of cpu cluster
	when requested by the userspace by changing the cpufreq policy
	fmin and fmax. The user space can request  the cpu freq change by
	writing cpu#:freq values
config QMP_DEBUGFS_CLIENT
	bool "Debugfs Client to communicate with AOP using QMP protocol"
	depends on DEBUG_FS
	help
	  This options enables a driver which allows clients to send messages
	  to Alway On processor using QMP transport.

config QCOM_CDSP_RM
	bool "CDSP request manager"
	depends on QCOM_GLINK
	help
	  This driver serves CDSP requests for CPU L3 clock and CPU QoS thus
	  improving CDSP performance. Using this driver, CDSP can set appropriate
	  CPU L3 clock for improving IO-Coherent throughput and opt for QoS mode
	  to improve RPC latency. The driver also registers cooling devices for
	  CDSP subsystem and implements Cx ipeak limit management.

config QCOM_QHEE_ENABLE_MEM_PROTECTION
	bool "QHEE enable kernel memory protection"
	depends on QCOM_SCM
	help
	  When this option is enabled, an SCM call will be invoked to enable
	  kernel memory protection in stage 2 memory mappings on kernel boot.
	  This is part of a security feature in QHEE and need to be enabled by
	  default.

config QCOM_CX_IPEAK
	bool "Common driver to handle Cx iPeak limitation"
	help
	  Cx ipeak HW module is used to limit the current drawn by various
	  subsystem blocks on Cx power rail. Each client needs to set their
	  bit in tcsr register if it is going to cross its own threshold.
	  If all clients are going to cross their thresholds then Cx ipeak
	  hw module will raise an interrupt to cDSP block to throttle cDSP fmax.

config QTI_CRYPTO_COMMON
	tristate "Enable common crypto functionality used for FBE"
	depends on BLK_INLINE_ENCRYPTION
	help
	 Say 'Y' to enable the common crypto implementation to be used by
	 different storage layers such as UFS and EMMC for file based hardware
	 encryption. This library implements API to program and evict
	 keys using Trustzone or Hardware Key Manager.

config QTI_CRYPTO_TZ
	tristate "Enable Trustzone to be used for FBE"
	depends on QTI_CRYPTO_COMMON
	help
	 Say 'Y' to enable routing crypto requests to Trustzone while
	 performing hardware based file encryption. This means keys are
	 programmed and managed through SCM calls to TZ where ICE driver
	 will configure keys.

config MSM_BAM_DMUX
	bool "BAM Data Mux Driver"
	depends on SPS
	help
	 Support Muxed Data Channels over BAM interface.
	 BAM has a limited number of pipes.  This driver
	 provides a means to support more logical channels
	 via muxing than BAM could without muxing.

endmenu

config QCOM_HYP_CORE_CTL
	bool "CPU reservation scheme for Hypervisor"
	depends on OKL4_GUEST
	help
	  This driver reserve the specified CPUS by isolating them. The reserved
	  CPUs can be assigned to the other guest OS by the hypervisor.
	  An offline CPU is considered as a reserved CPU since this OS can't use
	  it.

config QTI_HW_KEY_MANAGER
	tristate "Enable QTI Hardware Key Manager for storage encryption"
	default n
	help
	 Say 'Y' to enable the hardware key manager driver used to operate
	 and access key manager hardware block. This is used to interface with
	 HWKM hardware to perform key operations from the kernel which will
	 be used for storage encryption.

source "drivers/soc/qcom/icnss2/Kconfig"

config ICNSS
	tristate "Platform driver for Q6 integrated connectivity"
	select CNSS_UTILS
	help
	  This module adds support for Q6 integrated WLAN connectivity
	  subsystem. This module is responsible for communicating WLAN on/off
	  control messages to FW over QMI channel. It is also responsible for
	  handling WLAN PD restart notifications.

config ICNSS_DEBUG
	bool "ICNSS debug support"
	depends on ICNSS
	help
	  Say 'Y' here to enable ICNSS driver debug support. Debug support
	  primarily consists of logs consisting of information related to
	  hardware register access and enabling BUG_ON for certain cases to aid
	  the debugging.

config ICNSS_QMI
	bool "ICNSS QMI support"
	depends on ICNSS
	help
	  Say 'Y' here to enable ICNSS QMI support. ICNSS driver will use
	  QMI framework to communicate with WLAN FW. It will send coldboot
	  handshake messages to WLAN FW, which includes hardware capabilities
	  and configurations. It also send WLAN on/off control message to FW
	  over QMI channel.

source "drivers/soc/qcom/wcnss/Kconfig"
