# SPDX-License-Identifier: GPL-2.0-only
#
# NXP/Freescale QorIQ series SOC drivers
#

menu "NXP/Freescale QorIQ SoC drivers"

source "drivers/soc/fsl/qbman/Kconfig"
source "drivers/soc/fsl/qe/Kconfig"

config FSL_GUTS
	bool
	select SOC_BUS
	help
	  The global utilities block controls power management, I/O device
	  enabling, power-onreset(POR) configuration monitoring, alternate
	  function selection for multiplexed signals,and clock control.
	  This driver is to manage and access global utilities block.
	  Initially only reading SVR and registering soc device are supported.
	  Other guts accesses, such as reading RCW, should eventually be moved
	  into this driver as well.

config FSL_MC_DPIO
        tristate "QorIQ DPAA2 DPIO driver"
        depends on FSL_MC_BUS
        select SOC_BUS
        help
	  Driver for the DPAA2 DPIO object.  A DPIO provides queue and
	  buffer management facilities for software to interact with
	  other DPAA2 objects. This driver does not expose the DPIO
	  objects individually, but groups them under a service layer
	  API.

config DPAA2_CONSOLE
	tristate "QorIQ DPAA2 console driver"
	depends on OF && (ARCH_LAYERSCAPE || COMPILE_TEST)
	default y
	help
	  Console driver for DPAA2 platforms. Exports 2 char devices,
	  /dev/dpaa2_mc_console and /dev/dpaa2_aiop_console,
	  which can be used to dump the Management Complex and AIOP
	  firmware logs.

config FSL_RCPM
	bool "Freescale RCPM support"
	depends on PM_SLEEP && (ARM || ARM64)
	help
	  The NXP QorIQ Processors based on ARM Core have RCPM module
	  (Run Control and Power Management), which performs all device-level
	  tasks associated with power management, such as wakeup source control.
	  Note that currently this driver will not support PowerPC based
	  QorIQ processor.
endmenu
