From: Fabio Estevam <[email protected]> The ROC-RK3399-PC has an MP8859 regulator on I2C7 at address 0x66, while the ROC-RK3399-PC-PLUS does not. Probe for the regulator in SPL and use the result to select the matching devicetree from the U-Boot FIT. Fall back to the original board if the I2C bus cannot be probed.
Build both devicetrees from the existing roc-pc-rk3399_defconfig and enable the XMC SPI NOR driver used by the Plus variant. Set fdtfile from the selected U-Boot devicetree so the matching Linux devicetree is used as well. Signed-off-by: Fabio Estevam <[email protected]> --- Changes since v3: - Explicitly sets fdtfile for both PC and PC-PLUS. arch/arm/dts/rk3399-roc-pc-plus-u-boot.dtsi | 3 ++ arch/arm/dts/rk3399-roc-pc-u-boot.dtsi | 8 +++++ board/firefly/roc-pc-rk3399/roc-pc-rk3399.c | 39 +++++++++++++++++++++ configs/roc-pc-rk3399_defconfig | 3 ++ doc/board/rockchip/rockchip.rst | 2 +- 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 arch/arm/dts/rk3399-roc-pc-plus-u-boot.dtsi diff --git a/arch/arm/dts/rk3399-roc-pc-plus-u-boot.dtsi b/arch/arm/dts/rk3399-roc-pc-plus-u-boot.dtsi new file mode 100644 index 000000000000..c80529a62b97 --- /dev/null +++ b/arch/arm/dts/rk3399-roc-pc-plus-u-boot.dtsi @@ -0,0 +1,3 @@ +// SPDX-License-Identifier: GPL-2.0+ + +#include "rk3399-roc-pc-u-boot.dtsi" diff --git a/arch/arm/dts/rk3399-roc-pc-u-boot.dtsi b/arch/arm/dts/rk3399-roc-pc-u-boot.dtsi index a85e9549c83e..e7e4a2c89072 100644 --- a/arch/arm/dts/rk3399-roc-pc-u-boot.dtsi +++ b/arch/arm/dts/rk3399-roc-pc-u-boot.dtsi @@ -12,6 +12,14 @@ }; }; +&i2c7 { + bootph-pre-ram; +}; + +&i2c7_xfer { + bootph-pre-ram; +}; + &gpio4 { bootph-pre-ram; }; diff --git a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c index 6937a27176f9..a12180e65573 100644 --- a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c +++ b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c @@ -5,14 +5,24 @@ #include <dm.h> #include <env.h> +#include <fdtdec.h> +#include <i2c.h> +#include <image.h> #include <log.h> #include <spl_gpio.h> +#include <asm/global_data.h> #include <asm/io.h> #include <asm/arch-rockchip/cru.h> #include <asm/arch-rockchip/gpio.h> #include <asm/arch-rockchip/grf_rk3399.h> +#define ROC_PC_MP8859_BUS "i2c@ff160000" +#define ROC_PC_MP8859_ADDR 0x66 +#define ROC_PC_PLUS_FDTFILE "rockchip/rk3399-roc-pc-plus.dtb" + +DECLARE_GLOBAL_DATA_PTR; + #ifdef CONFIG_XPL_BUILD #define PMUGRF_BASE 0xff320000 @@ -54,4 +64,33 @@ void led_setup(void) spl_gpio_output(gpio0, GPIO(BANK_B, 5), 1); } +static bool is_roc_pc_plus(void) +{ + struct udevice *bus, *dev; + + if (uclass_get_device_by_name(UCLASS_I2C, ROC_PC_MP8859_BUS, &bus)) + return false; + + return dm_i2c_probe(bus, ROC_PC_MP8859_ADDR, 0, &dev); +} + +int board_fit_config_name_match(const char *name) +{ + if (is_roc_pc_plus()) + return strcmp(name, ROC_PC_PLUS_FDTFILE); + + return strcmp(name, CONFIG_DEFAULT_FDT_FILE); +} + #endif + +int rk_board_late_init(void) +{ + if (!fdt_node_check_compatible(gd->fdt_blob, 0, + "firefly,roc-rk3399-pc-plus")) + env_set("fdtfile", ROC_PC_PLUS_FDTFILE); + else + env_set("fdtfile", CONFIG_DEFAULT_FDT_FILE); + + return 0; +} diff --git a/configs/roc-pc-rk3399_defconfig b/configs/roc-pc-rk3399_defconfig index 1df5cb03adbb..53182dc8251b 100644 --- a/configs/roc-pc-rk3399_defconfig +++ b/configs/roc-pc-rk3399_defconfig @@ -26,6 +26,7 @@ CONFIG_DISPLAY_BOARDINFO_LATE=y CONFIG_SPL_MAX_SIZE=0x40000 # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set CONFIG_SPL_ENV_SUPPORT=y +CONFIG_SPL_I2C=y CONFIG_SPL_SPI_LOAD=y CONFIG_SYS_SPI_U_BOOT_OFFS=0xE0000 CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y @@ -37,6 +38,7 @@ CONFIG_CMD_USB=y # CONFIG_CMD_SETEXPR is not set CONFIG_CMD_TIME=y CONFIG_SPL_OF_CONTROL=y +CONFIG_OF_LIST="rockchip/rk3399-roc-pc rockchip/rk3399-roc-pc-plus" CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" CONFIG_ENV_IS_IN_SPI_FLASH=y CONFIG_ENV_RELOC_GD_ENV_ADDR=y @@ -49,6 +51,7 @@ CONFIG_MMC_SDHCI_SDMA=y CONFIG_MMC_SDHCI_ROCKCHIP=y CONFIG_SPI_FLASH_SFDP_SUPPORT=y CONFIG_SPI_FLASH_WINBOND=y +CONFIG_SPI_FLASH_XMC=y CONFIG_DM_ETH_PHY=y CONFIG_ETH_DESIGNWARE=y CONFIG_GMAC_ROCKCHIP=y diff --git a/doc/board/rockchip/rockchip.rst b/doc/board/rockchip/rockchip.rst index 9351a5b8eae7..b565aea311e9 100644 --- a/doc/board/rockchip/rockchip.rst +++ b/doc/board/rockchip/rockchip.rst @@ -81,7 +81,7 @@ List of mainline supported Rockchip boards: - 96boards RK3399 Ficus (ficus-rk3399) - 96boards Rock960 (rock960-rk3399) - Firefly-RK3399 (firefly_rk3399) - - Firefly ROC-RK3399-PC + - Firefly ROC-RK3399-PC/ROC-RK3399-PC-PLUS (roc-pc-rk3399) - FriendlyElec NanoPC-T4 (nanopc-t4-rk3399) - FriendlyElec NanoPi M4 (nanopi-m4-rk3399) - FriendlyElec NanoPi M4B (nanopi-m4b-rk3399) -- 2.43.0
