menu "Remoteproc drivers"

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

if REMOTEPROC

config OMAP_REMOTEPROC
	tristate "OMAP remoteproc support"
	depends on HAS_DMA
	depends on ARCH_OMAP4 || SOC_OMAP5
	depends on OMAP_IOMMU
	depends on REMOTEPROC
	select MAILBOX
	select OMAP2PLUS_MBOX
	select RPMSG_VIRTIO
	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
	depends on REMOTEPROC
	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 REMOTEPROC
	select CMA if MMU
	select RPMSG_VIRTIO
	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 QCOM_ADSP_PIL
	tristate "Qualcomm ADSP Peripheral Image Loader"
	depends on OF && ARCH_QCOM
	depends on REMOTEPROC
	depends on QCOM_SMEM
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=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 REMOTEPROC
	depends on RPMSG_QCOM_SMD || (COMPILE_TEST && RPMSG_QCOM_SMD=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_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 QCOM_SMEM
	depends on REMOTEPROC
	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
	depends on REMOTEPROC
	select MAILBOX
	select STI_MBOX
	select RPMSG_VIRTIO
	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
	depends on REMOTEPROC

endif # REMOTEPROC

endmenu
