# 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_NEED_DEBUGFS
	bool
	help
	  This declares whether at least one SCMI facility is configured
	  which needs debugfs support. When selected causess the creation
	  of a common SCMI debugfs root directory.

config ARM_SCMI_RAW_MODE_SUPPORT
	bool "Enable support for SCMI Raw transmission mode"
	depends on DEBUG_FS
	select ARM_SCMI_NEED_DEBUGFS
	help
	  Enable support for SCMI Raw transmission mode.

	  If enabled allows the direct injection and snooping of SCMI bare
	  messages through a dedicated debugfs interface.
	  It is meant to be used by SCMI compliance/testing suites.

	  When enabled regular SCMI drivers interactions are inhibited in
	  order to avoid unexpected interactions with the SCMI Raw message
	  flow. If unsure say N.

config ARM_SCMI_RAW_MODE_SUPPORT_COEX
	bool "Allow SCMI Raw mode coexistence with normal SCMI stack"
	depends on ARM_SCMI_RAW_MODE_SUPPORT
	help
	  Allow SCMI Raw transmission mode to coexist with normal SCMI stack.

	  This will allow regular SCMI drivers to register with the core and
	  operate normally, thing which could make an SCMI test suite using the
	  SCMI Raw mode support unreliable. If unsure, say N.

config ARM_SCMI_DEBUG_COUNTERS
	bool "Enable SCMI communication debug metrics tracking"
	select ARM_SCMI_NEED_DEBUGFS
	depends on DEBUG_FS
	default n
	help
	  Enables tracking of some key communication metrics for debug
	  purposes. It may track metrics like how many messages were sent
	  or received, were there any failures, what kind of failures, ..etc.

	  Enable this option to create a new debugfs directory which contains
	  such useful debug counters. This can be helpful for debugging and
	  SCMI monitoring.

source "drivers/firmware/arm_scmi/transports/Kconfig"
source "drivers/firmware/arm_scmi/vendors/imx/Kconfig"

endif #ARM_SCMI_PROTOCOL

config ARM_SCMI_POWER_CONTROL
	tristate "SCMI system power control driver"
	depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF)
	help
	  This enables System Power control logic which binds system shutdown or
	  reboot actions to SCMI System Power notifications generated by SCP
	  firmware.

	  This driver can also be built as a module.  If so, the module will be
	  called scmi_power_control. Note this may needed early in boot to catch
	  early shutdown/reboot SCMI requests.

endmenu
