# SPDX-License-Identifier: GPL-2.0-only
menuconfig MAILBOX
	bool "Mailbox Hardware Support"
	help
	  Mailbox is a framework to control hardware communication between
	  on-chip processors through queued messages and interrupt driven
	  signals. Say Y if your platform supports hardware mailboxes.

if MAILBOX

config ARM_MHU
	tristate "ARM MHU Mailbox"
	depends on ARM_AMBA
	help
	  Say Y here if you want to build the ARM MHU controller driver.
	  The controller has 3 mailbox channels, the last of which can be
	  used in Secure mode only.

config ARM_MHU_V2
	tristate "ARM MHUv2 Mailbox"
	depends on ARM_AMBA
	help
	  Say Y here if you want to build the ARM MHUv2 controller driver,
	  which provides unidirectional mailboxes between processing elements.

config ARM_MHU_V3
	tristate "ARM MHUv3 Mailbox"
	depends on ARM64 || COMPILE_TEST
	depends on HAS_IOMEM || COMPILE_TEST
	depends on OF
	help
	  Say Y here if you want to build the ARM MHUv3 controller driver,
	  which provides unidirectional mailboxes between processing elements.

	  ARM MHUv3 controllers can implement a varying number of extensions
	  that provides different means of transports: supported extensions
	  will be discovered and possibly managed at probe-time.

config AST2700_MBOX
	tristate "ASPEED AST2700 IPC driver"
	depends on ARCH_ASPEED || COMPILE_TEST
	help
	  Mailbox driver implementation for ASPEED AST27XX SoCs. This driver
	  can be used to send message between different processors in SoC.
	  The driver provides mailbox support for sending interrupts to the
	  clients. Say Y here if you want to build this driver.

config CV1800_MBOX
	tristate "cv1800 mailbox"
	depends on ARCH_SOPHGO || COMPILE_TEST
	help
	  Mailbox driver implementation for Sophgo CV18XX SoCs. This driver
	  can be used to send message between different processors in SoC. Any
	  processer can write data in a channel, and set co-responding register
	  to raise interrupt to notice another processor, and it is allowed to
	  send data to itself.

config EXYNOS_MBOX
	tristate "Exynos Mailbox"
	depends on ARCH_EXYNOS || COMPILE_TEST
	help
	  Say Y here if you want to build the Samsung Exynos Mailbox controller
	  driver. The controller has 16 flag bits for hardware interrupt
	  generation and a shared register for passing mailbox messages.
	  When the controller is used by the ACPM interface the shared register
	  is ignored and the mailbox controller acts as a doorbell that raises
	  the interrupt to the ACPM firmware.

config IMX_MBOX
	tristate "i.MX Mailbox"
	depends on ARCH_MXC || COMPILE_TEST
	help
	  Mailbox implementation for i.MX Messaging Unit (MU).

config PLATFORM_MHU
	tristate "Platform MHU Mailbox"
	depends on OF
	depends on HAS_IOMEM
	help
	  Say Y here if you want to build a platform specific variant MHU
	  controller driver.
	  The controller has a maximum of 3 mailbox channels, the last of
	  which can be used in Secure mode only.

config PL320_MBOX
	bool "ARM PL320 Mailbox"
	depends on ARM_AMBA
	help
	  An implementation of the ARM PL320 Interprocessor Communication
	  Mailbox (IPCM), tailored for the Calxeda Highbank. It is used to
	  send short messages between Highbank's A9 cores and the EnergyCore
	  Management Engine, primarily for cpufreq. Say Y here if you want
	  to use the PL320 IPCM support.

config ARMADA_37XX_RWTM_MBOX
	tristate "Armada 37xx rWTM BIU Mailbox"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on OF
	help
	  Mailbox implementation for communication with the the firmware
	  running on the Cortex-M3 rWTM secure processor of the Armada 37xx
	  SOC. Say Y here if you are building for such a device (for example
	  the Turris Mox router).

config OMAP2PLUS_MBOX
	tristate "OMAP2+ Mailbox framework support"
	depends on ARCH_OMAP2PLUS || ARCH_K3 || COMPILE_TEST
	help
	  Mailbox implementation for OMAP family chips with hardware for
	  interprocessor communication involving DSP, IVA1.0 and IVA2 in
	  OMAP2/3; or IPU, IVA HD and DSP in OMAP4/5. Say Y here if you
	  want to use OMAP2+ Mailbox framework support.

config ROCKCHIP_MBOX
	bool "Rockchip Soc Integrated Mailbox Support"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	help
	  This driver provides support for inter-processor communication
	  between CPU cores and MCU processor on Some Rockchip SOCs.
	  Please check it that the Soc you use have Mailbox hardware.
	  Say Y here if you want to use the Rockchip Mailbox support.

config PCC
	bool "Platform Communication Channel Driver"
	depends on ACPI
	default n
	help
	  ACPI 5.0+ spec defines a generic mode of communication
	  between the OS and a platform such as the BMC. This medium
	  (PCC) is typically used by CPPC (ACPI CPU Performance management),
	  RAS (ACPI reliability protocol) and MPST (ACPI Memory power
	  states). Select this driver if your platform implements the
	  PCC clients mentioned above.

config ALTERA_MBOX
	tristate "Altera Mailbox"
	depends on HAS_IOMEM
	help
	  An implementation of the Altera Mailbox soft core. It is used
	  to send message between processors. Say Y here if you want to use the
	  Altera mailbox support.

config BCM2835_MBOX
	tristate "BCM2835 Mailbox"
	depends on ARCH_BCM2835
	help
	  An implementation of the BCM2385 Mailbox.  It is used to invoke
	  the services of the Videocore. Say Y here if you want to use the
	  BCM2835 Mailbox.

config STI_MBOX
	tristate "STI Mailbox framework support"
	depends on ARCH_STI && OF
	help
	  Mailbox implementation for STMicroelectonics family chips with
	  hardware for interprocessor communication.

config TI_MESSAGE_MANAGER
	tristate "Texas Instruments Message Manager Driver"
	depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST
	default ARCH_K3
	help
	  An implementation of Message Manager slave driver for Keystone
	  and K3 architecture SoCs from Texas Instruments. Message Manager
	  is a communication entity found on few of Texas Instrument's keystone
	  and K3 architecture SoCs. These may be used for communication between
	  multiple processors within the SoC. Select this driver if your
	  platform has support for the hardware block.

config HI3660_MBOX
	tristate "Hi3660 Mailbox" if EXPERT
	depends on (ARCH_HISI || COMPILE_TEST)
	depends on OF
	default ARCH_HISI
	help
	  An implementation of the hi3660 mailbox. It is used to send message
	  between application processors and other processors/MCU/DSP. Select
	  Y here if you want to use Hi3660 mailbox controller.

config HI6220_MBOX
	tristate "Hi6220 Mailbox" if EXPERT
	depends on (ARCH_HISI || COMPILE_TEST)
	depends on OF
	default ARCH_HISI
	help
	  An implementation of the hi6220 mailbox. It is used to send message
	  between application processors and MCU. Say Y here if you want to
	  build Hi6220 mailbox controller driver.

config MAILBOX_TEST
	tristate "Mailbox Test Client"
	depends on OF
	depends on HAS_IOMEM
	help
	  Test client to help with testing new Controller driver
	  implementations.

config POLARFIRE_SOC_MAILBOX
	tristate "PolarFire SoC (MPFS) Mailbox"
	depends on HAS_IOMEM
	depends on MFD_SYSCON
	depends on ARCH_MICROCHIP || COMPILE_TEST
	help
	  This driver adds support for the PolarFire SoC (MPFS) mailbox controller.

	  To compile this driver as a module, choose M here. the
	  module will be called mailbox-mpfs.

	  If unsure, say N.

config MCHP_SBI_IPC_MBOX
	tristate "Microchip Inter-processor Communication (IPC) SBI driver"
	depends on RISCV_SBI
	depends on ARCH_MICROCHIP || COMPILE_TEST
	help
	  Mailbox implementation for Microchip devices with an
	  Inter-process communication (IPC) controller.

	  To compile this driver as a module, choose M here. the
	  module will be called mailbox-mchp-ipc-sbi.

	  If unsure, say N.

config QCOM_APCS_IPC
	tristate "Qualcomm APCS IPC driver"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  Say y here to enable support for the APCS IPC mailbox driver,
	  providing an interface for invoking the inter-process communication
	  signals from the application processor to other masters.

config TEGRA_HSP_MBOX
	bool "Tegra HSP (Hardware Synchronization Primitives) Driver"
	depends on ARCH_TEGRA
	help
	  The Tegra HSP driver is used for the interprocessor communication
	  between different remote processors and host processors on Tegra186
	  and later SoCs. Say Y here if you want to have this support.
	  If unsure say N.

config XGENE_SLIMPRO_MBOX
	tristate "APM SoC X-Gene SLIMpro Mailbox Controller"
	depends on ARCH_XGENE
	help
	  An implementation of the APM X-Gene Interprocessor Communication
	  Mailbox (IPCM) between the ARM 64-bit cores and SLIMpro controller.
	  It is used to send short messages between ARM64-bit cores and
	  the SLIMpro Management Engine, primarily for PM. Say Y here if you
	  want to use the APM X-Gene SLIMpro IPCM support.

config BCM_PDC_MBOX
	tristate "Broadcom FlexSparx DMA Mailbox"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	help
	  Mailbox implementation for the Broadcom FlexSparx DMA ring manager,
	  which provides access to various offload engines on Broadcom
	  SoCs, including FA2/FA+ on Northstar Plus and PDC on Northstar 2.

config BCM_FLEXRM_MBOX
	tristate "Broadcom FlexRM Mailbox"
	depends on ARM64
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	select GENERIC_MSI_IRQ
	default m if ARCH_BCM_IPROC
	help
	  Mailbox implementation of the Broadcom FlexRM ring manager,
	  which provides access to various offload engines on Broadcom
	  SoCs. Say Y here if you want to use the Broadcom FlexRM.

config STM32_IPCC
	tristate "STM32 IPCC Mailbox"
	depends on MACH_STM32MP157 || COMPILE_TEST
	help
	  Mailbox implementation for STMicroelectonics STM32 family chips
	  with hardware for Inter-Processor Communication Controller (IPCC)
	  between processors. Say Y here if you want to have this support.

config MTK_ADSP_MBOX
	tristate "MediaTek ADSP Mailbox Controller"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
          Say yes here to add support for MediaTek ADSP Mailbox Controller.
          This mailbox driver is used to send notification or short message
          between processors with ADSP. It will place the message to share
	  buffer and will access the ipc control.

config MTK_CMDQ_MBOX
	tristate "MediaTek CMDQ Mailbox Support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select MTK_INFRACFG
	help
	  Say yes here to add support for the MediaTek Command Queue (CMDQ)
	  mailbox driver. The CMDQ is used to help read/write registers with
	  critical time limitation, such as updating display configuration
	  during the vblank.

config MTK_GPUEB_MBOX
	tristate "MediaTek GPUEB Mailbox Support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  The MediaTek GPUEB mailbox is used to communicate with the embedded
	  controller in charge of GPU frequency and power management on some
	  MediaTek SoCs, such as the MT8196.
	  Say Y or m here if you want to support the MT8196 SoC in your kernel
	  build.

config MTK_VCP_MBOX
	tristate "MediaTek VCP Mailbox Support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  Say yes here to add support for the MediaTek VCP mailbox driver.
	  The mailbox implementation provides access from the application
	  processor to Video Companion Processor Unit.
	  If unsure say N.

config ZYNQMP_IPI_MBOX
	tristate "Xilinx ZynqMP IPI Mailbox"
	depends on ARCH_ZYNQMP && OF
	help
	  Say yes here to add support for Xilinx IPI mailbox driver.
	  This mailbox driver is used to send notification or short message
	  between processors with Xilinx ZynqMP IPI. It will place the
	  message to the IPI buffer and will access the IPI control
	  registers to kick the other processor or enquire status.

config SUN6I_MSGBOX
	tristate "Allwinner sun6i/sun8i/sun9i/sun50i Message Box"
	depends on ARCH_SUNXI || COMPILE_TEST
	default ARCH_SUNXI
	help
	  Mailbox implementation for the hardware message box present in
	  various Allwinner SoCs. This mailbox is used for communication
	  between the application CPUs and the power management coprocessor.

config SPRD_MBOX
	tristate "Spreadtrum Mailbox"
	depends on ARCH_SPRD || COMPILE_TEST
	help
	  Mailbox driver implementation for the Spreadtrum platform. It is used
	  to send message between application processors and MCU. Say Y here if
	  you want to build the Spreatrum mailbox controller driver.

config QCOM_CPUCP_MBOX
	tristate "Qualcomm Technologies, Inc. CPUCP mailbox driver"
	depends on (ARCH_QCOM || COMPILE_TEST) && 64BIT
	help
	  Qualcomm Technologies, Inc. CPUSS Control Processor (CPUCP) mailbox
	  controller driver enables communication between AP and CPUCP. Say
	  Y here if you want to build this driver.

config QCOM_IPCC
	tristate "Qualcomm Technologies, Inc. IPCC driver"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  Qualcomm Technologies, Inc. Inter-Processor Communication Controller
	  (IPCC) driver for MSM devices. The driver provides mailbox support for
	  sending interrupts to the clients. On the other hand, the driver also
	  acts as an interrupt controller for receiving interrupts from clients.
	  Say Y here if you want to build this driver.

config THEAD_TH1520_MBOX
	tristate "T-head TH1520 Mailbox"
	depends on ARCH_THEAD || COMPILE_TEST
	help
	  Mailbox driver implementation for the Thead TH-1520 platform. Enables
	  two cores within the SoC to communicate and coordinate by passing
	  messages. Could be used to communicate between E910 core, on which the
	  kernel is running, and E902 core used for power management among other
	  things.

config CIX_MBOX
        tristate "CIX Mailbox"
        depends on ARCH_CIX || COMPILE_TEST
        depends on OF
        help
          Mailbox implementation for CIX IPC system. The controller supports
          11 mailbox channels with different operating mode and every channel
          is unidirectional. Say Y here if you want to use the CIX Mailbox
          support.

config BCM74110_MAILBOX
	tristate "Brcmstb BCM74110 Mailbox"
	depends on ARCH_BRCMSTB || COMPILE_TEST
	default ARCH_BRCMSTB
	help
	  Broadcom STB mailbox driver present starting with brcmstb bcm74110
	  SoCs. The mailbox is a communication channel between the host
	  processor and coprocessor that handles various power management task
	  and more.

config RISCV_SBI_MPXY_MBOX
	tristate "RISC-V SBI Message Proxy (MPXY) Mailbox"
	depends on RISCV_SBI
	default RISCV
	help
	  Mailbox driver implementation for RISC-V SBI Message Proxy (MPXY)
	  extension. This mailbox driver is used to send messages to the
	  remote processor through the SBI implementation (M-mode firmware
	  or HS-mode hypervisor). Say Y here, unless you are sure you do not
	  need this.

endif
