if ARCH_ROCKCHIP

config ROCKCHIP_PX30
	bool "Support Rockchip PX30"
	select ARM64
	select SUPPORT_SPL
	select SUPPORT_TPL
	select SPL
	select TPL
	select TPL_TINY_FRAMEWORK if TPL
	select TPL_NEEDS_SEPARATE_TEXT_BASE if SPL
	select TPL_NEEDS_SEPARATE_STACK if TPL
	imply SPL_SEPARATE_BSS
	select SPL_SERIAL
	select TPL_SERIAL
	select DEBUG_UART_BOARD_INIT
	imply ROCKCHIP_COMMON_BOARD
	imply SPL_ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip PX30 is a ARM-based SoC with a quad-core Cortex-A35
	  including NEON and GPU, Mali-400 graphics, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.

config ROCKCHIP_RK3036
	bool "Support Rockchip RK3036"
	select CPU_V7A
	select SUPPORT_SPL
	select SPL
	imply USB_FUNCTION_ROCKUSB
	imply CMD_ROCKUSB
	imply ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip RK3036 is a ARM-based SoC with a dual-core Cortex-A7
	  including NEON and GPU, Mali-400 graphics, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.

config ROCKCHIP_RK3128
	bool "Support Rockchip RK3128"
	select CPU_V7A
	imply ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip RK3128 is a ARM-based SoC with a quad-core Cortex-A7
	  including NEON and GPU, Mali-400 graphics, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.

config ROCKCHIP_RK3188
	bool "Support Rockchip RK3188"
	select CPU_V7A
	select SPL_BOARD_INIT if SPL
	select SUPPORT_SPL
	select SPL
	select SPL_CLK
	select SPL_REGMAP
	select SPL_SYSCON
	select SPL_RAM
	select SPL_DRIVERS_MISC
	select SPL_ROCKCHIP_EARLYRETURN_TO_BROM
	select SPL_ROCKCHIP_BACK_TO_BROM
	select BOARD_LATE_INIT
	imply ROCKCHIP_COMMON_BOARD
	imply SPL_ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip RK3188 is a ARM-based SoC with a quad-core Cortex-A9
	  including NEON and GPU, 512KB L2 cache, Mali-400 graphics, two
	  video interfaces, several memory options and video codec support.
	  Peripherals include Fast Ethernet, USB2 host and OTG, SDIO, I2S,
	  UART, SPI, I2C and PWMs.

config ROCKCHIP_RK322X
	bool "Support Rockchip RK3228/RK3229"
	select CPU_V7A
	select SUPPORT_SPL
	select SUPPORT_TPL
	select SPL
	select SPL_DM
	select SPL_OF_LIBFDT
	select TPL
	select TPL_DM
	select TPL_OF_LIBFDT
	select TPL_NEEDS_SEPARATE_TEXT_BASE if SPL
	select TPL_NEEDS_SEPARATE_STACK if TPL
	select SPL_DRIVERS_MISC
	imply ROCKCHIP_COMMON_BOARD
	imply SPL_SERIAL
	imply SPL_ROCKCHIP_COMMON_BOARD
	imply TPL_SERIAL
	imply TPL_ROCKCHIP_COMMON_BOARD
	select TPL_LIBCOMMON_SUPPORT
	select TPL_LIBGENERIC_SUPPORT
	help
	  The Rockchip RK3229 is a ARM-based SoC with a dual-core Cortex-A7
	  including NEON and GPU, Mali-400 graphics, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UART, SPI, I2C and PWMs.

config ROCKCHIP_RK3288
	bool "Support Rockchip RK3288"
	select CPU_V7A
	select OF_BOARD_SETUP
	select SKIP_LOWLEVEL_INIT_ONLY
	select SUPPORT_SPL
	select SPL
	select SUPPORT_TPL
	imply PRE_CONSOLE_BUFFER
	imply ROCKCHIP_COMMON_BOARD
	imply SPL_ROCKCHIP_COMMON_BOARD
	imply TPL_CLK
	imply TPL_DM
	imply TPL_DRIVERS_MISC
	imply TPL_LIBCOMMON_SUPPORT
	imply TPL_LIBGENERIC_SUPPORT
	imply TPL_NEEDS_SEPARATE_TEXT_BASE
	imply TPL_NEEDS_SEPARATE_STACK
	imply TPL_OF_CONTROL
	imply TPL_OF_PLATDATA
	imply TPL_RAM
	imply TPL_REGMAP
	imply TPL_ROCKCHIP_COMMON_BOARD
	imply TPL_SERIAL
	imply TPL_SYSCON
	imply USB_FUNCTION_ROCKUSB
	imply CMD_ROCKUSB
	help
	  The Rockchip RK3288 is a ARM-based SoC with a quad-core Cortex-A17
	  including NEON and GPU, 1MB L2 cache, Mali-T7 graphics, two
	  video interfaces supporting HDMI and eDP, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs.

config ROCKCHIP_RK3308
	bool "Support Rockchip RK3308"
	select ARM64
	select DEBUG_UART_BOARD_INIT
	select SUPPORT_SPL
	select SUPPORT_TPL
	select SPL
	select SPL_ATF
	select SPL_ATF_NO_PLATFORM_PARAM
	select SPL_LOAD_FIT
	imply ROCKCHIP_COMMON_BOARD
	imply SPL_ROCKCHIP_COMMON_BOARD
	imply SPL_CLK
	imply SPL_REGMAP
	imply SPL_SYSCON
	imply SPL_RAM
	imply SPL_SERIAL
	imply TPL_SERIAL
	imply SPL_SEPARATE_BSS
	help
	  The Rockchip RK3308 is a ARM-based Soc which embedded with quad
	  Cortex-A35 and highly integrated audio interfaces.

config ROCKCHIP_RK3328
	bool "Support Rockchip RK3328"
	select ARM64
	select SUPPORT_SPL
	select SPL
	select SUPPORT_TPL
	select TPL
	select TPL_NEEDS_SEPARATE_TEXT_BASE if TPL
	select TPL_NEEDS_SEPARATE_STACK if TPL
	imply ROCKCHIP_COMMON_BOARD
	imply ROCKCHIP_SDRAM_COMMON
	imply SPL_ROCKCHIP_COMMON_BOARD
	imply SPL_SERIAL
	imply TPL_SERIAL
	imply SPL_SEPARATE_BSS
	select ENABLE_ARM_SOC_BOOT0_HOOK
	select DEBUG_UART_BOARD_INIT
	select SYS_NS16550
	help
	  The Rockchip RK3328 is a ARM-based SoC with a quad-core Cortex-A53.
	  including NEON and GPU, 1MB L2 cache, Mali-T7 graphics, two
	  video interfaces supporting HDMI and eDP, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs.

config ROCKCHIP_RK3368
	bool "Support Rockchip RK3368"
	select ARM64
	select SUPPORT_SPL
	select SUPPORT_TPL
	select TPL_NEEDS_SEPARATE_TEXT_BASE if SPL
	select TPL_NEEDS_SEPARATE_STACK if TPL
	imply ROCKCHIP_COMMON_BOARD
	imply SPL_ROCKCHIP_COMMON_BOARD
	imply SPL_SEPARATE_BSS
	imply SPL_SERIAL
	imply TPL_SERIAL
	imply TPL_ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip RK3368 is a ARM-based SoC with a octa-core (organised
	  into a big and little cluster with 4 cores each) Cortex-A53 including
	  AdvSIMD, 512KB L2 cache (for the big cluster) and 256 KB L2 cache
	  (for the little cluster), PowerVR G6110 based graphics, one video
	  output processor supporting LVDS/HDMI/eDP, several DDR3 options and
	  video codec support.

	  On-chip peripherals include Gigabit Ethernet, USB2 host and OTG, SDIO,
	  I2S, UARTs, SPI, I2C and PWMs.

config ROCKCHIP_RK3399
	bool "Support Rockchip RK3399"
	select ARM64
	select SUPPORT_SPL
	select SUPPORT_TPL
	select SPL
	select SPL_ATF
	select SPL_BOARD_INIT if SPL
	select SPL_LOAD_FIT
	select SPL_CLK if SPL
	select SPL_PINCTRL if SPL
	select SPL_RAM if SPL
	select SPL_REGMAP if SPL
	select SPL_SYSCON if SPL
	select TPL_NEEDS_SEPARATE_TEXT_BASE if TPL
	select TPL_NEEDS_SEPARATE_STACK if TPL
	select SPL_SEPARATE_BSS
	select SPL_SERIAL
	select SPL_DRIVERS_MISC
	select CLK
	select FIT
	select PINCTRL
	select RAM
	select REGMAP
	select SYSCON
	select DM_PMIC
	select DM_REGULATOR_FIXED
	select BOARD_LATE_INIT
	imply PRE_CONSOLE_BUFFER
	imply ROCKCHIP_COMMON_BOARD
	imply ROCKCHIP_SDRAM_COMMON
	imply SPL_ATF_NO_PLATFORM_PARAM if SPL_ATF
	imply SPL_ROCKCHIP_COMMON_BOARD
	imply TPL_SERIAL
	imply TPL_LIBCOMMON_SUPPORT
	imply TPL_LIBGENERIC_SUPPORT
	imply TPL_SYS_MALLOC_SIMPLE
	imply TPL_DRIVERS_MISC
	imply TPL_OF_CONTROL
	imply TPL_DM
	imply TPL_REGMAP
	imply TPL_SYSCON
	imply TPL_RAM
	imply TPL_CLK
	imply TPL_TINY_MEMSET
	imply TPL_ROCKCHIP_COMMON_BOARD
	imply SYS_BOOTCOUNT_SINGLEWORD if BOOTCOUNT_LIMIT
	imply CMD_BOOTCOUNT if BOOTCOUNT_LIMIT
	help
	  The Rockchip RK3399 is a ARM-based SoC with a dual-core Cortex-A72
	  and quad-core Cortex-A53.
	  including NEON and GPU, 1MB L2 cache, Mali-T7 graphics, two
	  video interfaces supporting HDMI and eDP, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs.

config ROCKCHIP_RK3568
	bool "Support Rockchip RK3568"
	select ARM64
	select CLK
	select PINCTRL
	select RAM
	select REGMAP
	select SYSCON
	select BOARD_LATE_INIT
	imply ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip RK3568 is a ARM-based SoC with quad-core Cortex-A55,
	  including NEON and GPU, 512K L3 cache, Mali-G52 based graphics,
	  two video interfaces supporting HDMI and eDP, several DDR3 options
	  and video codec support. Peripherals include Gigabit Ethernet,
	  USB2 host and OTG, SDIO, I2S, UARTs, SPI, I2C and PWMs.

config ROCKCHIP_RV1108
	bool "Support Rockchip RV1108"
	select CPU_V7A
	imply ROCKCHIP_COMMON_BOARD
	help
	  The Rockchip RV1108 is a ARM-based SoC with a single-core Cortex-A7
	  and a DSP.

config ROCKCHIP_USB_UART
	bool "Route uart output to usb pins"
	help
	  Rockchip SoCs have the ability to route the signals of the debug
	  uart through the d+ and d- pins of a specific usb phy to enable
	  some form of closed-case debugging. With this option supported
	  SoCs will enable this routing as a debug measure.

config SPL_ROCKCHIP_BACK_TO_BROM
	bool "SPL returns to bootrom"
	default y if ROCKCHIP_RK3036
	select ROCKCHIP_BROM_HELPER
	select SPL_BOOTROM_SUPPORT
	depends on SPL
	help
	  Rockchip SoCs have ability to load SPL & U-Boot binary. If enabled,
          SPL will return to the boot rom, which will then load the U-Boot
          binary to keep going on.

config TPL_ROCKCHIP_BACK_TO_BROM
	bool "TPL returns to bootrom"
	default y
	select ROCKCHIP_BROM_HELPER
	select TPL_BOOTROM_SUPPORT
	depends on TPL
	help
	  Rockchip SoCs have ability to load SPL & U-Boot binary. If enabled,
          SPL will return to the boot rom, which will then load the U-Boot
          binary to keep going on.

config ROCKCHIP_COMMON_BOARD
	bool "Rockchip common board file"
	help
	  Rockchip SoCs have similar boot process, Common board file is mainly
	  in charge of common process of board_init() and board_late_init() for
	  U-Boot proper.

config SPL_ROCKCHIP_COMMON_BOARD
	bool "Rockchip SPL common board file"
	depends on SPL
	help
	  Rockchip SoCs have similar boot process, SPL is mainly in charge of
	  load and boot Trust ATF/U-Boot firmware, and DRAM init if there is
	  no TPL for the board.

config TPL_ROCKCHIP_COMMON_BOARD
	bool "Rockchip TPL common board file"
	depends on TPL
	help
	  Rockchip SoCs have similar boot process, prefer to use TPL for DRAM
	  init and back to bootrom, and SPL as Trust ATF/U-Boot loader. TPL
	  common board is a basic TPL board init which can be shared for most
	  of SoCs to avoid copy-paste for different SoCs.

config ROCKCHIP_BOOT_MODE_REG
	hex "Rockchip boot mode flag register address"
	help
	  The Soc will enter to different boot mode(defined in asm/arch-rockchip/boot_mode.h)
	  according to the value from this register.

config ROCKCHIP_SPL_RESERVE_IRAM
	hex "Size of IRAM reserved in SPL"
	default 0
	help
	  SPL may need reserve memory for firmware loaded by SPL, whose load
	  address is in IRAM and may overlay with SPL text area if not
	  reserved.

config ROCKCHIP_BROM_HELPER
	bool

config SPL_ROCKCHIP_EARLYRETURN_TO_BROM
        bool "SPL requires early-return (for RK3188-style BROM) to BROM"
	depends on SPL && ENABLE_ARM_SOC_BOOT0_HOOK
	help
	  Some Rockchip BROM variants (e.g. on the RK3188) load the
	  first stage in segments and enter multiple times. E.g. on
	  the RK3188, the first 1KB of the first stage are loaded
	  first and entered; after returning to the BROM, the
	  remainder of the first stage is loaded, but the BROM
	  re-enters at the same address/to the same code as previously.

	  This enables support code in the BOOT0 hook for the SPL stage
	  to allow multiple entries.

config TPL_ROCKCHIP_EARLYRETURN_TO_BROM
        bool "TPL requires early-return (for RK3188-style BROM) to BROM"
	depends on TPL && ENABLE_ARM_SOC_BOOT0_HOOK
	help
	  Some Rockchip BROM variants (e.g. on the RK3188) load the
	  first stage in segments and enter multiple times. E.g. on
	  the RK3188, the first 1KB of the first stage are loaded
	  first and entered; after returning to the BROM, the
	  remainder of the first stage is loaded, but the BROM
	  re-enters at the same address/to the same code as previously.

	  This enables support code in the BOOT0 hook for the TPL stage
	  to allow multiple entries.

config SPL_MMC
	default y if !SPL_ROCKCHIP_BACK_TO_BROM

config ROCKCHIP_SPI_IMAGE
	bool "Build a SPI image for rockchip"
	depends on HAS_ROM
	help
	  Some Rockchip SoCs support booting from SPI flash. Enable this
	  option to produce a 4MB SPI-flash image (called u-boot.rom)
	  containing U-Boot. The image is built by binman. U-Boot sits near
	  the start of the image.

source "arch/arm/mach-rockchip/px30/Kconfig"
source "arch/arm/mach-rockchip/rk3036/Kconfig"
source "arch/arm/mach-rockchip/rk3128/Kconfig"
source "arch/arm/mach-rockchip/rk3188/Kconfig"
source "arch/arm/mach-rockchip/rk322x/Kconfig"
source "arch/arm/mach-rockchip/rk3288/Kconfig"
source "arch/arm/mach-rockchip/rk3308/Kconfig"
source "arch/arm/mach-rockchip/rk3328/Kconfig"
source "arch/arm/mach-rockchip/rk3368/Kconfig"
source "arch/arm/mach-rockchip/rk3399/Kconfig"
source "arch/arm/mach-rockchip/rk3568/Kconfig"
source "arch/arm/mach-rockchip/rv1108/Kconfig"
endif
