# SPDX-License-Identifier: GPL-2.0-only
menu "ARM System Control and Management Interface Protocol"

config ARM_SCMI_PROTOCOL
	tristate "ARM System Control and Management Interface (SCMI) Message Protocol"
	depends on ARM || ARM64 || COMPILE_TEST
	help
	  ARM System Control and Management Interface (SCMI) protocol is a
	  set of operating system-independent software interfaces that are
	  used in system management. SCMI is extensible and currently provides
	  interfaces for: Discovery and self-description of the interfaces
	  it supports, Power domain management which is the ability to place
	  a given device or domain into the various power-saving states that
	  it supports, Performance management which is the ability to control
	  the performance of a domain that is composed of compute engines
	  such as application processors and other accelerators, Clock
	  management which is the ability to set and inquire rates on platform
	  managed clocks and Sensor management which is the ability to read
	  sensor data, and be notified of sensor value.

	  This protocol library provides interface for all the client drivers
	  making use of the features offered by the SCMI.

if ARM_SCMI_PROTOCOL

config ARM_SCMI_HAVE_TRANSPORT
	bool
	help
	  This declares whether at least one SCMI transport has been configured.
	  Used to trigger a build bug when trying to build SCMI without any
	  configured transport.

config ARM_SCMI_HAVE_SHMEM
	bool
	help
	  This declares whether a shared memory based transport for SCMI is
	  available.

config ARM_SCMI_HAVE_MSG
	bool
	help
	  This declares whether a message passing based transport for SCMI is
	  available.

config ARM_SCMI_TRANSPORT_MAILBOX
	bool "SCMI transport based on Mailbox"
	depends on MAILBOX
	select ARM_SCMI_HAVE_TRANSPORT
	select ARM_SCMI_HAVE_SHMEM
	default y
	help
	  Enable mailbox based transport for SCMI.

	  If you want the ARM SCMI PROTOCOL stack to include support for a
	  transport based on mailboxes, answer Y.

config ARM_SCMI_TRANSPORT_SMC
	bool "SCMI transport based on SMC"
	depends on HAVE_ARM_SMCCC_DISCOVERY
	select ARM_SCMI_HAVE_TRANSPORT
	select ARM_SCMI_HAVE_SHMEM
	default y
	help
	  Enable SMC based transport for SCMI.

	  If you want the ARM SCMI PROTOCOL stack to include support for a
	  transport based on SMC, answer Y.

config ARM_SCMI_TRANSPORT_VIRTIO
	bool "SCMI transport based on VirtIO"
	depends on VIRTIO=y || VIRTIO=ARM_SCMI_PROTOCOL
	select ARM_SCMI_HAVE_TRANSPORT
	select ARM_SCMI_HAVE_MSG
	help
	  This enables the virtio based transport for SCMI.

	  If you want the ARM SCMI PROTOCOL stack to include support for a
	  transport based on VirtIO, answer Y.

config QTI_SCMI_PMU_PROTOCOL
        tristate "Qualcomm Technologies, Inc. SCMI PMU vendor Protocol"
        depends on ARM || ARM64 || COMPILE_TEST
        depends on ARM_SCMI_PROTOCOL && QCOM_RIMPS
        help
          System Control and Management Interface (SCMI) pmu vendor protocol.
          This protocol provides interface to communicate with micro controller
          which maintains the PMU configuration for multiple clients.

          This driver defines the comands or message ID's used for this
          communication and also exposes the ops used by clients.

config QTI_SCMI_C1DCVS_PROTOCOL
        tristate "Qualcomm Technologies, Inc. SCMI C1DCVS vendor Protocol"
        depends on ARM || ARM64 || COMPILE_TEST
        depends on ARM_SCMI_PROTOCOL && QCOM_RIMPS
        help
          System Control and Management Interface (SCMI) c1dcvs vendor protocol.
          This protocol provides interface to communicate with micro controller
          which maintains the c1dcvs algorithm.

          This driver defines the comands or message ID's used for this
          communication and also exposes the ops used by clients.

config QTI_SCMI_MEMLAT_PROTOCOL
	tristate "Qualcomm Technologies, Inc. SCMI MEMLAT vendor Protocol"
	depends on ARM || ARM64 || COMPILE_TEST
	depends on ARM_SCMI_PROTOCOL && QCOM_RIMPS
	help
	  System Control and Management Interface (SCMI) memlat vendor protocol
	  this protocol provides interface to communicate with micro controller
	  which is executing the hw memlat governor

config QTI_SCMI_CPUFREQ_STATS_PROTOCOL
        tristate "Qualcomm Technologies, Inc. CPUFREQ STATS vendor Protocol"
        depends on ARM || ARM64
        depends on ARM_SCMI_PROTOCOL && QCOM_RIMPS
        help
          System Control and Management Interface (SCMI) SCMI CPUFREQ STATS vendor protocol.
          This protocol provides interface to communicate with micro controller
          which maintains the CPU FREQ stats.

          This driver defines the comands or message ID's used for this
          communication and also exposes the ops used by clients.

config QTI_SCMI_PLH_PROTOCOL
	tristate "Qualcomm Technologies, Inc. SCMI PLH vendor Protocol"
	depends on ARM_SCMI_PROTOCOL && QCOM_RIMPS
	help
	  System Control and Management Interface (SCMI) plh vendor protocol
	  this protocol provides interface to communicate with micro controller
	  which is executing the plh algorithm.

	  This driver defines the comands or message ID's used for this
	  communication and also exposes the ops used by clients.

endif #ARM_SCMI_PROTOCOL

config ARM_SCMI_POWER_DOMAIN
	tristate "SCMI power domain driver"
	depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
	default y
	select PM_GENERIC_DOMAINS if PM
	help
	  This enables support for the SCMI power domains which can be
	  enabled or disabled via the SCP firmware

	  This driver can also be built as a module.  If so, the module
	  will be called scmi_pm_domain. Note this may needed early in boot
	  before rootfs may be available.

endmenu
