# 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 APPLE_MAILBOX
	tristate "Apple Mailbox driver"
	depends on ARCH_APPLE || (ARM64 && COMPILE_TEST)
	default ARCH_APPLE
	help
	  Apple SoCs have various co-processors required for certain
	  peripherals to work (NVMe, display controller, etc.). This
	  driver adds support for the mailbox controller used to
	  communicate with those.

	  Say Y here if you have a Apple SoC.

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 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
	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 OMAP_MBOX_KFIFO_SIZE
	int "Mailbox kfifo default buffer size (bytes)"
	depends on OMAP2PLUS_MBOX
	default 256
	help
	  Specify the default size of mailbox's kfifo buffers (bytes).
	  This can also be changed at runtime (via the mbox_kfifo_size
	  module parameter).

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
	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 SOC_MICROCHIP_POLARFIRE || 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 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 ZYNQMP_IPI_MBOX
	bool "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_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.

endif
