#
# QCOM Soc drivers
#
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 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_LLCC
	tristate "Qualcomm Technologies, Inc. LLCC driver"
	depends on ARCH_QCOM
	help
	  Qualcomm Technologies, Inc. platform specific LLCC driver for Last
	  Level Cache. This provides interfaces to client's that use the LLCC.
	  Say yes here to enable LLCC slice driver.

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 is provides
	  data required to configure LLCC so that clients can start using the
	  LLCC slices.

config QCOM_SDM670_LLCC
	tristate "Qualcomm Technologies, Inc. SDM670 LLCC driver"
	depends on QCOM_LLCC
	help
	  This provides Last level cache controller driver for SDM670.
	  This driver provides data required to configure LLCC, so that clients
	  can start using the LLCC slices.
	  Say yes here to enable llcc driver for SDM670.


config QCOM_LLCC_AMON
	tristate "Qualcomm Technologies, Inc. LLCC Activity Monitor(AMON) driver"
	depends on QCOM_LLCC
	help
	  This option enables a activity monitor driver for last level cache
	  controller. This driver configures the activity monitor as
	  deadlock detector and dumps the AMON registers upon detection of
	  deadlock.

config QCOM_LLCC_AMON_PANIC
	tristate "Panic on detecting LLCC Activity Monitor(AMON) error"
	depends on QCOM_LLCC_AMON
	help
	  This option enables panic upon detection of LLCC Activity Monitor(AMON)
	  errors. Say yes here to enable deadlock detection mode of AMON. In
	  deadlock detection mode AMON will trigger an interrupt if some LLCC request
	  ages out.

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_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 MSM_SERVICE_LOCATOR
	bool "Service Locator"
	depends on MSM_QMI_INTERFACE
	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 QCOM_SMD
	tristate "Qualcomm Shared Memory Driver (SMD)"
	depends on QCOM_SMEM
	help
	  Say y here to enable support for the Qualcomm Shared Memory Driver
	  providing communication channels to remote processors in Qualcomm
	  platforms.

config QCOM_SMD_RPM
	tristate "Qualcomm Resource Power Manager (RPM) over SMD"
	depends on QCOM_SMD && 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 QCOM_SCM
	bool "Secure Channel Manager (SCM) support"
	default n

config QCOM_SMEM_STATE
	bool

config QCOM_SMP2P
	tristate "Qualcomm Shared Memory Point to Point support"
	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 QCOM_SMD
	help
	  Client driver for the WCNSS_CTRL SMD channel, used to download nv
	  firmware to a newly booted WCNSS chip.

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

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_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_WATCHDOG_V2
	bool "Qualcomm 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 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_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 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 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 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 MSM_SMEM
	depends on ARCH_QCOM
	depends on REMOTE_SPINLOCK_MSM
	bool "MSM Shared Memory (SMEM)"
	help
	  Support for the shared memory interface between the various
	  processors in the System on a Chip (SoC) which allows basic
	  inter-processor communication.

config MSM_GLINK
	bool "Generic Link (G-Link)"
	help
	  G-Link is a generic link transport that replaces SMD.  It is used
	  within a System-on-Chip (SoC) for communication between both internal
	  processors and external peripherals.  The actual physical transport
	  is handled by transport plug-ins that can be individually enabled and
	  configured separately.

config MSM_GLINK_LOOPBACK_SERVER
	bool "Generic Link (G-Link) Loopback Server"
	help
	  G-Link Loopback Server that enable loopback test framework to test
	  and validate the G-Link protocol stack. It support both local and
	  remote clients to configure the loopback server and echo back the
	  data received from the clients.

config MSM_GLINK_SMEM_NATIVE_XPRT
	depends on MSM_SMEM
	depends on MSM_GLINK
	bool "Generic Link (G-Link) SMEM Native Transport"
	help
	  G-Link SMEM Native Transport is a G-Link Transport plug-in.  It allows
	  G-Link communication to remote entities through a shared memory
	  physical transport.  The nature of shared memory limits this G-Link
	  transport to only connecting with entities internal to the
	  System-on-Chip.

config MSM_GLINK_SPI_XPRT
	depends on MSM_GLINK
	tristate "Generic Link (G-Link) SPI Transport"
	help
	  G-Link SPI Transport is a Transport plug-in developed over SPI
	  bus. This transport plug-in performs marshaling of G-Link
	  commands & data to the appropriate SPI bus wire format and
	  allows for G-Link communication with remote subsystems that are
	  external to the System-on-Chip.

config MSM_SPCOM
	depends on MSM_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 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 TRACER_PKT
	bool "Tracer Packet"
	help
	  Tracer Packet helps in profiling the performance of inter-
	  processor communication protocols. The profiling information
	  can be logged into the tracer packet itself.

config QTI_RPMH_API
	bool "QTI RPMH (h/w accelerators) Communication API"
	select MAILBOX
	select QTI_RPMH_MBOX
	select QTI_SYSTEM_PM
	help
	  This option enables RPMH hardware communication for making shared
	  resource requests on Qualcomm Technologies Inc SoCs.

config QTI_SYSTEM_PM
	bool

config MSM_SMP2P
	bool "SMSM Point-to-Point (SMP2P)"
	depends on MSM_SMEM
	help
	  Provide point-to-point remote signaling support.
	  SMP2P enables transferring 32-bit values between
	  the local and a remote system using shared
	  memory and interrupts. A client can open multiple
	  32-bit values by specifying a unique string and
	  remote processor ID.

config MSM_SMP2P_TEST
	bool "SMSM Point-to-Point Test"
	depends on MSM_SMP2P
	help
	  Enables loopback and unit testing support for
	  SMP2P. Loopback support is used by other
	  processors to do unit testing. Unit tests
	  are used to verify the local and remote
	  implementations.

config MSM_IPC_ROUTER_SMD_XPRT
	depends on MSM_SMD
	depends on IPC_ROUTER
	bool "MSM SMD XPRT Layer"
	help
	  SMD Transport Layer that enables IPC Router communication within
	  a System-on-Chip(SoC). When the SMD channels become available,
	  this layer registers a transport with IPC Router and enable
	  message exchange.

config MSM_IPC_ROUTER_HSIC_XPRT
	depends on USB_QCOM_IPC_BRIDGE
	depends on IPC_ROUTER
	bool "MSM HSIC XPRT Layer"
	help
	  HSIC Transport Layer that enables off-chip communication of
	  IPC Router. When the HSIC endpoint becomes available, this layer
	  registers the transport with IPC Router and enable message
	  exchange.

config MSM_IPC_ROUTER_MHI_XPRT
	depends on MSM_MHI
	depends on IPC_ROUTER
	bool "MSM MHI XPRT Layer"
	help
	  MHI Transport Layer that enables off-chip communication of
	  IPC Router. When the MHI endpoint becomes available, this layer
	  registers the transport with IPC Router and enable message
	  exchange.

config MSM_IPC_ROUTER_GLINK_XPRT
	depends on MSM_GLINK
	depends on IPC_ROUTER
	bool "MSM GLINK XPRT Layer"
	help
	  GLINK Transport Layer that enables IPC Router communication within
	  a System-on-Chip(SoC). When the GLINK channels become available,
	  this layer registers a transport with IPC Router and enable
	  message exchange.

config MSM_QMI_INTERFACE
	depends on IPC_ROUTER
	depends on QMI_ENCDEC
	bool "MSM QMI Interface Library"
	help
	  Library to send and receive QMI messages over IPC Router.
	  This library provides interface functions to the kernel drivers
	  to perform QMI message marshaling and transport them over IPC
	  Router.

config MSM_GLINK_PKT
	bool "Enable device interface for GLINK packet channels"
	depends on MSM_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 MSM_SYSTEM_HEALTH_MONITOR
	bool "System Health Monitor"
	depends on MSM_QMI_INTERFACE && MSM_SUBSYSTEM_RESTART
	help
	  System Health Monitor (SHM) passively monitors the health of the
	  peripherals connected to the application processor. Software
	  components in the application processor that experience
	  communication failure can request the SHM to perform a system-wide
	  health check. If any failures are detected during the health-check,
	  then a subsystem restart will be triggered for the failed subsystem.

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_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_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 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 QCOM_COMMAND_DB
	bool "Command DB"
	help
	  Command DB queries shared memory by key string for shared system
	  resources

config MSM_PERFORMANCE
	tristate "msm performacne driver to support userspace hotplug requests"
	default n
	help
	  This driver is used to provide CPU hotplug support to userspace.
	  It ensures that no more than a user specified number of CPUs stay
	  online at any given point in time. This module can also restrict
	  max freq or min freq of cpu cluster

config MSM_PERFORMANCE_HOTPLUG_ON
	bool "Hotplug functionality through msm_performance turned on"
	depends on MSM_PERFORMANCE
	default y
	help
	  If some other core-control driver is present turn off the core-control
	  capability of msm_performance driver. Setting this flag to false will
	  compile out the nodes needed for core-control functionality through
	  msm_performance.

config MSM_CDSP_LOADER
	tristate "CDSP loader support"
	depends on MSM_GLINK
	help
	  Enable CDSP image loader.
	  The CDSP loader brings CDSP out of reset
	  for platforms that have compute DSP.
	  Say M if you want to enable this module.

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
	bool "Qualcomm platform specific PM driver"
	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.

config MSM_NOPM
	default y if !PM
	bool
	help
	  This enables bare minimum support of power management at platform level.
	  i.e WFI

config MSM_QBT1000
	bool "QBT1000 Ultrasonic Fingerprint Sensor"
	help
	  This driver provides services for configuring the fingerprint
	  sensor hardware and for communicating with the trusted app which
	  uses it. It enables clocks and provides commands for loading
	  trusted apps, unloading them and marshalling buffers to the
	  trusted fingerprint app.

config APSS_CORE_EA
	depends on CPU_FREQ && PM_OPP
	bool "Qualcomm Technology Inc specific power aware driver"
	help
	  Platform specific power aware driver to provide power
	  and temperature information to the scheduler.

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 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 QTI_RPM_STATS_LOG
	bool "Qualcomm Technologies RPM Stats Driver"
	depends on SYSFS
	default n
	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 debugfs node.

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 QMP_DEBUGFS_CLIENT
	bool "Debugfs Client to communicate with AOP using QMP protocol"
	depends on DEBUG_FS
	default n
	help
	  This options enables a driver which allows clients to send messages
	  to Alway On processor using QMP transport.

source "drivers/soc/qcom/memshare/Kconfig"

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 QSEE_IPC_IRQ_BRIDGE
	tristate "QSEE IPC Interrupt Bridge"
	help
	  This module enables bridging an Inter-Processor Communication(IPC)
	  interrupt from a remote subsystem directed towards Qualcomm
	  Technologies, Inc. Secure Execution Environment(QSEE).

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.
