menu "Remoteproc drivers"

config REMOTEPROC
	tristate "Support for Remote Processor subsystem"
	depends on HAS_DMA
	select CRC32
	select FW_LOADER
	select VIRTIO
	select WANT_DEV_COREDUMP
	help
	  Support for remote processors (such as DSP coprocessors). These
	  are mainly used on embedded systems.

if REMOTEPROC

config IMX_REMOTEPROC
	tristate "IMX6/7 remoteproc support"
	depends on SOC_IMX6SX || SOC_IMX7D
	help
	  Say y here to support iMX's remote processors (Cortex M4
	  on iMX7D) via the remote processor framework.

	  It's safe to say N here.

config OMAP_REMOTEPROC
	tristate "OMAP remoteproc support"
	depends on HAS_DMA
	depends on ARCH_OMAP4 || SOC_OMAP5
	depends on OMAP_IOMMU
	select MAILBOX
	select OMAP2PLUS_MBOX
	help
	  Say y here to support OMAP's remote processors (dual M3
	  and DSP on OMAP4) via the remote processor framework.

	  Currently only supported on OMAP4.

	  Usually you want to say Y here, in order to enable multimedia
	  use-cases to run on your platform (multimedia codecs are
	  offloaded to remote DSP processors using this framework).

	  It's safe to say N here if you're not interested in multimedia
	  offloading or just want a bare minimum kernel.

config WKUP_M3_RPROC
	tristate "AMx3xx Wakeup M3 remoteproc support"
	depends on SOC_AM33XX || SOC_AM43XX
	help
	  Say y here to support Wakeup M3 remote processor on TI AM33xx
	  and AM43xx family of SoCs.

	  Required for Suspend-to-RAM on AM33xx and AM43xx SoCs. Also needed
	  for deep CPUIdle states on AM33xx SoCs. Allows for loading of the
	  firmware onto these remote processors.
	  If unsure say N.

config DA8XX_REMOTEPROC
	tristate "DA8xx/OMAP-L13x remoteproc support"
	depends on ARCH_DAVINCI_DA8XX
	depends on DMA_CMA
	help
	  Say y here to support DA8xx/OMAP-L13x remote processors via the
	  remote processor framework.

	  You want to say y here in order to enable AMP
	  use-cases to run on your platform (multimedia codecs are
	  offloaded to remote DSP processors using this framework).

	  This module controls the name of the firmware file that gets
	  loaded on the DSP.  This file must reside in the /lib/firmware
	  directory.  It can be specified via the module parameter
	  da8xx_fw_name=<filename>, and if not specified will default to
	  "rproc-dsp-fw".

	  It's safe to say n here if you're not interested in multimedia
	  offloading.

config KEYSTONE_REMOTEPROC
	tristate "Keystone Remoteproc support"
	depends on ARCH_KEYSTONE
	help
	  Say Y here here to support Keystone remote processors (DSP)
	  via the remote processor framework.

	  It's safe to say N here if you're not interested in the Keystone
	  DSPs or just want to use a bare minimum kernel.

config QCOM_ADSP_PIL
	tristate "Qualcomm ADSP Peripheral Image Loader"
	depends on OF && ARCH_QCOM
	depends on QCOM_SMEM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on QCOM_SYSMON || QCOM_SYSMON=n
	select MFD_SYSCON
	select QCOM_MDT_LOADER
	select QCOM_RPROC_COMMON
	select QCOM_SCM
	help
	  Say y here to support the TrustZone based Peripherial Image Loader
	  for the Qualcomm ADSP remote processors.

config QCOM_RPROC_COMMON
	tristate

config QCOM_Q6V5_PIL
	tristate "Qualcomm Hexagon V5 Peripherial Image Loader"
	depends on OF && ARCH_QCOM
	depends on QCOM_SMEM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on QCOM_SYSMON || QCOM_SYSMON=n
	select MFD_SYSCON
	select QCOM_RPROC_COMMON
	select QCOM_SCM
	help
	  Say y here to support the Qualcomm Peripherial Image Loader for the
	  Hexagon V5 based remote processors.

config QCOM_SYSMON
	tristate "Qualcomm sysmon driver"
	depends on RPMSG
	depends on ARCH_QCOM
	depends on NET
	select QCOM_QMI_HELPERS
	help
	  The sysmon driver implements a sysmon QMI client and a handler for
	  the sys_mon SMD and GLINK channel, which are used for graceful
	  shutdown, retrieving failure information and propagating information
	  about other subsystems being shut down.

	  Say y here if your system runs firmware on any other subsystems, e.g.
	  modem or DSP.

config QCOM_WCNSS_PIL
	tristate "Qualcomm WCNSS Peripheral Image Loader"
	depends on OF && ARCH_QCOM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=n)
	depends on RPMSG_QCOM_GLINK_SMEM || RPMSG_QCOM_GLINK_SMEM=n
	depends on QCOM_SMEM
	depends on QCOM_SYSMON || QCOM_SYSMON=n
	select QCOM_MDT_LOADER
	select QCOM_RPROC_COMMON
	select QCOM_SCM
	help
	  Say y here to support the Peripheral Image Loader for the Qualcomm
	  Wireless Connectivity Subsystem.

config ST_REMOTEPROC
	tristate "ST remoteproc support"
	depends on ARCH_STI
	select MAILBOX
	select STI_MBOX
	help
	  Say y here to support ST's adjunct processors via the remote
	  processor framework.
	  This can be either built-in or a loadable module.

config ST_SLIM_REMOTEPROC
	tristate

endif # REMOTEPROC

endmenu
