[U-Boot] [PATCH] rockchip: Add basic support for phyCORE-RK3288 SoM based carrier board
Simon Glass
sjg at chromium.org
Mon May 15 03:02:31 UTC 2017
Hi,
On 8 May 2017 at 07:18, Wadim Egorov <w.egorov at phytec.de> wrote:
> The phyCORE-RK3288 is a SoM (System on Module) containing a RK3288 SoC.
> The module can be connected to different carrier boards.
> It can be also equipped with different RAM, SPI flash and eMMC variants.
> The Rapid Development Kit option is using the following setup:
>
> - 1 GB DDR3 RAM (2 Banks)
> - 1x 4 KB EEPROM
> - DP83867 Gigabit Ethernet PHY
> - 16 MB SPI Flash
> - 4 GB eMMC Flash
>
> Add basic support for the PCM-947 carrier board, a RK3288 based development
> board made by PHYTEC. This board works in a combination with
> the phyCORE-RK3288 System on Module.
>
> Signed-off-by: Wadim Egorov <w.egorov at phytec.de>
> ---
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/rk3288-phycore-rdk.dts | 289 +++++++++++++++
> arch/arm/dts/rk3288-phycore-som.dtsi | 503 +++++++++++++++++++++++++++
> arch/arm/mach-rockchip/rk3288-board-spl.c | 33 +-
> arch/arm/mach-rockchip/rk3288/Kconfig | 11 +
> board/phytec/phycore_rk3288/Kconfig | 15 +
> board/phytec/phycore_rk3288/MAINTAINERS | 6 +
> board/phytec/phycore_rk3288/Makefile | 8 +
> board/phytec/phycore_rk3288/phycore-rk3288.c | 16 +
> configs/phycore-rk3288_defconfig | 69 ++++
> include/configs/phycore_rk3288.h | 23 ++
> 11 files changed, 973 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/dts/rk3288-phycore-rdk.dts
> create mode 100644 arch/arm/dts/rk3288-phycore-som.dtsi
> create mode 100644 board/phytec/phycore_rk3288/Kconfig
> create mode 100644 board/phytec/phycore_rk3288/MAINTAINERS
> create mode 100644 board/phytec/phycore_rk3288/Makefile
> create mode 100644 board/phytec/phycore_rk3288/phycore-rk3288.c
> create mode 100644 configs/phycore-rk3288_defconfig
> create mode 100644 include/configs/phycore_rk3288.h
Reviewed-by: Simon Glass <sjg at chromium.org>
But a few comments below.
[..]
> diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c
> index 74f3379..d1cdc91 100644
> --- a/arch/arm/mach-rockchip/rk3288-board-spl.c
> +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c
> @@ -8,6 +8,7 @@
> #include <debug_uart.h>
> #include <dm.h>
> #include <fdtdec.h>
> +#include <i2c.h>
> #include <led.h>
> #include <malloc.h>
> #include <ram.h>
> @@ -25,6 +26,7 @@
> #include <dm/test.h>
> #include <dm/util.h>
> #include <power/regulator.h>
> +#include <power/rk8xx_pmic.h>
>
> DECLARE_GLOBAL_DATA_PTR;
>
> @@ -162,7 +164,10 @@ void board_init_f(ulong dummy)
> struct udevice *pinctrl;
> struct udevice *dev;
> int ret;
> -
> +#if defined(CONFIG_TARGET_PHYCORE_RK3288)
> + struct udevice *pmic;
> + uint reg;
> +#endif
> /* Example code showing how to enable the debug UART on RK3288 */
> #ifdef EARLY_UART
> #include <asm/arch/grf_rk3288.h>
> @@ -206,6 +211,32 @@ void board_init_f(ulong dummy)
> return;
> }
>
> +#if defined(CONFIG_TARGET_PHYCORE_RK3288)
Can you please put all of this in a separate function? Also does it
bloat the code too much to use of_machine_is_compatible() instead of
#ifdef?
> + ret = uclass_get_device(UCLASS_I2C, 0, &dev);
> + if (ret) {
> + debug("I2C init failed: %d\n", ret);
> + return;
> + }
> +
> + ret = i2c_get_chip(dev, 0x1c, 1, &pmic);
> + if (ret) {
> + debug("Cannot find RK818: %d\n", ret);
> + return;
> + }
> +
> + reg = dm_i2c_reg_read(pmic, REG_USB_CTRL);
> +
> + /*
> + * Increase USB input current selection to 2A and close charger
> + * when usb lower then 3.4V.
> + */
> + reg |= 0x77;
> + ret = dm_i2c_reg_write(pmic, REG_USB_CTRL, reg);
> + if (ret) {
> + debug("Unable to set RK818 REG_USB_CTRL: %d\n", ret);
> + return;
> + }
> +#endif
> ret = uclass_get_device(UCLASS_RAM, 0, &dev);
> if (ret) {
> debug("DRAM init failed: %d\n", ret);
> diff --git a/arch/arm/mach-rockchip/rk3288/Kconfig b/arch/arm/mach-rockchip/rk3288/Kconfig
> index 8e7355e..796d731 100644
> --- a/arch/arm/mach-rockchip/rk3288/Kconfig
> +++ b/arch/arm/mach-rockchip/rk3288/Kconfig
> @@ -66,6 +66,15 @@ config TARGET_MIQI_RK3288
> has 1 or 2 GiB SDRAM. Expansion connectors provide access to
> I2C, SPI, UART, GPIOs and fan control.
>
> +config TARGET_PHYCORE_RK3288
> + bool "phyCORE-RK3288"
> + select BOARD_LATE_INIT
> + help
> + Add basic support for the PCM-947 carrier board, a RK3288 based
> + development board made by PHYTEC. This board works in a combination
> + with the phyCORE-RK3288 System on Module.
> +
> +
> config TARGET_POPMETAL_RK3288
> bool "PopMetal-RK3288"
> select BOARD_LATE_INIT
> @@ -129,6 +138,8 @@ source "board/google/veyron/Kconfig"
>
> source "board/mqmaker/miqi_rk3288/Kconfig"
>
> +source "board/phytec/phycore_rk3288/Kconfig"
> +
> source "board/radxa/rock2/Kconfig"
>
> source "board/rockchip/evb_rk3288/Kconfig"
> diff --git a/board/phytec/phycore_rk3288/Kconfig b/board/phytec/phycore_rk3288/Kconfig
> new file mode 100644
> index 0000000..57cd8e2
> --- /dev/null
> +++ b/board/phytec/phycore_rk3288/Kconfig
> @@ -0,0 +1,15 @@
> +if TARGET_PHYCORE_RK3288
> +
> +config SYS_BOARD
> + default "phycore_rk3288"
> +
> +config SYS_VENDOR
> + default "phytec"
> +
> +config SYS_CONFIG_NAME
> + default "phycore_rk3288"
> +
> +config BOARD_SPECIFIC_OPTIONS # dummy
> + def_bool y
> +
> +endif
> diff --git a/board/phytec/phycore_rk3288/MAINTAINERS b/board/phytec/phycore_rk3288/MAINTAINERS
> new file mode 100644
> index 0000000..9c0de3c
> --- /dev/null
> +++ b/board/phytec/phycore_rk3288/MAINTAINERS
> @@ -0,0 +1,6 @@
> +phyCORE-RK3288
> +M: Wadim Egorov <w.egorov at phytec.de>
> +S: Maintained
> +F: board/phytec/phycore_rk3288
> +F: include/configs/phycore_rk3288.h
> +F: configs/phycore-rk3288_defconfig
> diff --git a/board/phytec/phycore_rk3288/Makefile b/board/phytec/phycore_rk3288/Makefile
> new file mode 100644
> index 0000000..f379fbe
> --- /dev/null
> +++ b/board/phytec/phycore_rk3288/Makefile
> @@ -0,0 +1,8 @@
> +#
> +# Copyright (C) 2017 PHYTEC Messtechnik GmbH
> +# Author: Wadim Egorov <w.egorov at phytec.de>
> +#
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +
> +obj-y += phycore-rk3288.o
> diff --git a/board/phytec/phycore_rk3288/phycore-rk3288.c b/board/phytec/phycore_rk3288/phycore-rk3288.c
> new file mode 100644
> index 0000000..c8c24e8
> --- /dev/null
> +++ b/board/phytec/phycore_rk3288/phycore-rk3288.c
> @@ -0,0 +1,16 @@
> +/*
> + * Copyright (C) 2017 PHYTEC Messtechnik GmbH
> + * Author: Wadim Egorov <w.egorov at phytec.de>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <spl.h>
> +
> +void board_boot_order(u32 *spl_boot_list)
> +{
> + /* eMMC prior to sdcard. */
> + spl_boot_list[0] = BOOT_DEVICE_MMC2;
> + spl_boot_list[1] = BOOT_DEVICE_MMC1;
> +}
For this, can you use the device tree and spl_boot_device() ?
> diff --git a/configs/phycore-rk3288_defconfig b/configs/phycore-rk3288_defconfig
> new file mode 100644
> index 0000000..2c608d1
> --- /dev/null
> +++ b/configs/phycore-rk3288_defconfig
> @@ -0,0 +1,69 @@
> +CONFIG_ARM=y
> +CONFIG_ARCH_ROCKCHIP=y
> +CONFIG_SYS_MALLOC_F_LEN=0x2000
> +CONFIG_ROCKCHIP_RK3288=y
> +CONFIG_ROCKCHIP_SPL_BACK_TO_BROM=y
> +CONFIG_TARGET_PHYCORE_RK3288=y
> +CONFIG_SPL_STACK_R_ADDR=0x80000
> +CONFIG_DEFAULT_DEVICE_TREE="rk3288-phycore-rdk"
> +CONFIG_SILENT_CONSOLE=y
> +CONFIG_CONSOLE_MUX=y
> +# CONFIG_DISPLAY_CPUINFO is not set
> +CONFIG_SPL_STACK_R=y
> +CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x2000
> +# CONFIG_CMD_IMLS is not set
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_SF=y
> +CONFIG_CMD_SPI=y
> +CONFIG_CMD_I2C=y
> +CONFIG_CMD_USB=y
> +CONFIG_CMD_GPIO=y
> +# CONFIG_CMD_SETEXPR is not set
> +CONFIG_CMD_CACHE=y
> +CONFIG_CMD_TIME=y
> +CONFIG_CMD_PMIC=y
> +CONFIG_CMD_REGULATOR=y
> +# CONFIG_SPL_DOS_PARTITION is not set
> +# CONFIG_SPL_ISO_PARTITION is not set
> +# CONFIG_SPL_EFI_PARTITION is not set
> +CONFIG_SPL_PARTITION_UUIDS=y
> +CONFIG_SPL_OF_CONTROL=y
> +CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents"
> +CONFIG_REGMAP=y
> +CONFIG_SPL_REGMAP=y
> +CONFIG_SYSCON=y
> +CONFIG_SPL_SYSCON=y
> +CONFIG_SPL_I2C_SUPPORT=y
> +# CONFIG_SPL_SIMPLE_BUS is not set
> +CONFIG_CLK=y
> +CONFIG_SPL_CLK=y
> +CONFIG_ROCKCHIP_GPIO=y
> +CONFIG_SYS_I2C_ROCKCHIP=y
> +CONFIG_MMC_DW=y
> +CONFIG_MMC_DW_ROCKCHIP=y
> +CONFIG_DM_ETH=y
> +CONFIG_ETH_DESIGNWARE=y
> +CONFIG_GMAC_ROCKCHIP=y
> +CONFIG_PINCTRL=y
> +CONFIG_SPL_PINCTRL=y
> +# CONFIG_SPL_PINCTRL_FULL is not set
> +CONFIG_PINCTRL_ROCKCHIP_RK3288=y
> +CONFIG_DM_PMIC=y
> +CONFIG_PMIC_RK8XX=y
> +CONFIG_DM_REGULATOR_FIXED=y
> +CONFIG_REGULATOR_RK8XX=y
> +CONFIG_PWM_ROCKCHIP=y
> +CONFIG_RAM=y
> +CONFIG_SPL_RAM=y
> +CONFIG_DEBUG_UART=y
> +CONFIG_DEBUG_UART_BASE=0xff690000
> +CONFIG_DEBUG_UART_CLOCK=24000000
> +CONFIG_DEBUG_UART_SHIFT=2
> +CONFIG_SYS_NS16550=y
> +CONFIG_SYSRESET=y
> +CONFIG_USB=y
> +CONFIG_USB_STORAGE=y
> +CONFIG_USE_TINY_PRINTF=y
> +CONFIG_CMD_DHRYSTONE=y
> +CONFIG_ERRNO_STR=y
> diff --git a/include/configs/phycore_rk3288.h b/include/configs/phycore_rk3288.h
> new file mode 100644
> index 0000000..aab43ed
> --- /dev/null
> +++ b/include/configs/phycore_rk3288.h
> @@ -0,0 +1,23 @@
> +/*
> + * Copyright (C) 2017 PHYTEC Messtechnik GmbH
> + * Author: Wadim Egorov <w.egorov at phytec.de>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> +#define ROCKCHIP_DEVICE_SETTINGS
> +#include <configs/rk3288_common.h>
> +
> +#undef BOOT_TARGET_DEVICES
> +
> +#define BOOT_TARGET_DEVICES(func) \
> + func(MMC, mmc, 0) \
> + func(MMC, mmc, 1)
> +
> +#define CONFIG_ENV_IS_IN_MMC
> +#define CONFIG_SYS_MMC_ENV_DEV 1
> +
> +#endif
> --
> 1.9.1
>
Regards,
Simon
More information about the U-Boot
mailing list