Merge branch 'master' of git://git.denx.de/u-boot-rockchip

lime2-spi
Tom Rini 6 years ago
commit 83853366e3
  1. 7
      arch/arm/mach-rockchip/rk3188-board.c
  2. 26
      arch/arm/mach-rockchip/rk3288-board.c
  3. 50
      arch/arm/mach-rockchip/rk3399-board-spl.c
  4. 2
      board/rockchip/evb_rk3399/README
  5. 74
      board/theobroma-systems/puma_rk3399/puma-rk3399.c
  6. 12
      common/spl/spl.c
  7. 1
      configs/chromebit_mickey_defconfig
  8. 1
      configs/chromebook_jerry_defconfig
  9. 1
      configs/chromebook_minnie_defconfig
  10. 1
      configs/evb-px5_defconfig
  11. 1
      configs/evb-rk3036_defconfig
  12. 1
      configs/evb-rk3128_defconfig
  13. 1
      configs/evb-rk3229_defconfig
  14. 1
      configs/evb-rk3288_defconfig
  15. 1
      configs/evb-rk3328_defconfig
  16. 1
      configs/evb-rk3399_defconfig
  17. 1
      configs/evb-rv1108_defconfig
  18. 1
      configs/fennec-rk3288_defconfig
  19. 1
      configs/firefly-rk3288_defconfig
  20. 1
      configs/firefly-rk3399_defconfig
  21. 1
      configs/geekbox_defconfig
  22. 1
      configs/kylin-rk3036_defconfig
  23. 1
      configs/lion-rk3368_defconfig
  24. 1
      configs/miqi-rk3288_defconfig
  25. 1
      configs/phycore-rk3288_defconfig
  26. 1
      configs/popmetal-rk3288_defconfig
  27. 1
      configs/puma-rk3399_defconfig
  28. 1
      configs/rock2_defconfig
  29. 1
      configs/rock_defconfig
  30. 1
      configs/sheep-rk3368_defconfig
  31. 1
      configs/smartweb_defconfig
  32. 1
      configs/tinker-rk3288_defconfig
  33. 1
      configs/vyasa-rk3288_defconfig
  34. 8
      doc/README.rockchip
  35. 10
      doc/device-tree-bindings/chosen.txt
  36. 94
      drivers/i2c/rk_i2c.c
  37. 2
      include/configs/lion_rk3368.h
  38. 1
      include/configs/rk3036_common.h
  39. 1
      include/configs/rk3128_common.h
  40. 1
      include/configs/rk3188_common.h
  41. 1
      include/configs/rk322x_common.h
  42. 2
      include/configs/rk3288_common.h
  43. 1
      include/configs/rk3328_common.h
  44. 1
      include/configs/rk3368_common.h
  45. 2
      include/configs/rk3399_common.h
  46. 7
      include/spl.h

@ -17,6 +17,11 @@
#include <asm/gpio.h>
#include <dm/pinctrl.h>
__weak int rk_board_late_init(void)
{
return 0;
}
int board_late_init(void)
{
struct rk3188_grf *grf;
@ -32,7 +37,7 @@ int board_late_init(void)
NOC_REMAP_MASK << NOC_REMAP_SHIFT);
}
return 0;
return rk_board_late_init();
}
int board_init(void)

@ -122,6 +122,22 @@ static int veyron_init(void)
if (IS_ERR_VALUE(ret))
return ret;
ret = regulator_get_by_platname("vcc33_sd", &dev);
if (ret) {
debug("Cannot get regulator name\n");
return ret;
}
ret = regulator_set_value(dev, 3300000);
if (ret)
return ret;
ret = regulators_enable_boot_on(false);
if (ret) {
debug("%s: Cannot enable boot on regulators\n", __func__);
return ret;
}
return 0;
}
#endif
@ -301,10 +317,10 @@ U_BOOT_CMD(
""
);
#define GRF_SOC_CON2 0xff77024c
int board_early_init_f(void)
{
const uintptr_t GRF_SOC_CON0 = 0xff770244;
const uintptr_t GRF_SOC_CON2 = 0xff77024c;
struct udevice *pinctrl;
struct udevice *dev;
int ret;
@ -333,5 +349,11 @@ int board_early_init_f(void)
}
rk_setreg(GRF_SOC_CON2, 1 << 0);
/*
* Disable JTAG on sdmmc0 IO. The SDMMC won't work until this bit is
* cleared
*/
rk_clrreg(GRF_SOC_CON0, 1 << 12);
return 0;
}

@ -57,6 +57,54 @@ u32 spl_boot_device(void)
return boot_device;
}
const char *spl_decode_boot_device(u32 boot_device)
{
int i;
static const struct {
u32 boot_device;
const char *ofpath;
} spl_boot_devices_tbl[] = {
{ BOOT_DEVICE_MMC1, "/dwmmc@fe320000" },
{ BOOT_DEVICE_MMC2, "/sdhci@fe330000" },
{ BOOT_DEVICE_SPI, "/spi@ff1d0000" },
};
for (i = 0; i < ARRAY_SIZE(spl_boot_devices_tbl); ++i)
if (spl_boot_devices_tbl[i].boot_device == boot_device)
return spl_boot_devices_tbl[i].ofpath;
return NULL;
}
void spl_perform_fixups(struct spl_image_info *spl_image)
{
void *blob = spl_image->fdt_addr;
const char *boot_ofpath;
int chosen;
/*
* Inject the ofpath of the device the full U-Boot (or Linux in
* Falcon-mode) was booted from into the FDT, if a FDT has been
* loaded at the same time.
*/
if (!blob)
return;
boot_ofpath = spl_decode_boot_device(spl_image->boot_device);
if (!boot_ofpath) {
pr_err("%s: could not map boot_device to ofpath\n", __func__);
return;
}
chosen = fdt_find_or_add_subnode(blob, 0, "chosen");
if (chosen < 0) {
pr_err("%s: could not find/create '/chosen'\n", __func__);
return;
}
fdt_setprop_string(blob, chosen,
"u-boot,spl-boot-device", boot_ofpath);
}
#define TIMER_CHN10_BASE 0xff8680a0
#define TIMER_END_COUNT_L 0x00
#define TIMER_END_COUNT_H 0x04
@ -124,7 +172,7 @@ void board_init_f(ulong dummy)
* printascii("string");
*/
debug_uart_init();
printascii("U-Boot SPL board init");
printascii("U-Boot SPL board init\n");
#endif
ret = spl_early_init();

@ -65,7 +65,7 @@ Compile the U-Boot
Compile the rkdeveloptool
=======================
Follow instructions in latest README
> cd ../rkflashtool
> cd ../rkdeveloptool
> autoreconf -i
> ./configure
> make

@ -196,11 +196,85 @@ static void setup_iodomain(void)
rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_GPIO4CD_SHIFT);
}
/*
* Swap mmc0 and mmc1 in boot_targets if booted from SD-Card.
*
* If bootsource is uSD-card we can assume that we want to use the
* SD-Card instead of the eMMC as first boot_target for distroboot.
* We only want to swap the defaults and not any custom environment a
* user has set. We exit early if a changed boot_targets environment
* is detected.
*/
static int setup_boottargets(void)
{
const char *boot_device =
ofnode_get_chosen_prop("u-boot,spl-boot-device");
char *env_default, *env;
if (!boot_device) {
debug("%s: /chosen/u-boot,spl-boot-device not set\n",
__func__);
return -1;
}
debug("%s: booted from %s\n", __func__, boot_device);
env_default = env_get_default("boot_targets");
env = env_get("boot_targets");
if (!env) {
debug("%s: boot_targets does not exist\n", __func__);
return -1;
}
debug("%s: boot_targets current: %s - default: %s\n",
__func__, env, env_default);
if (strcmp(env_default, env) != 0) {
debug("%s: boot_targets not default, don't change it\n",
__func__);
return 0;
}
/*
* Only run, if booting from mmc1 (i.e. /dwmmc@fe320000) and
* only consider cases where the default boot-order first
* tries to boot from mmc0 (eMMC) and then from mmc1
* (i.e. external SD).
*
* In other words: the SD card will be moved to earlier in the
* order, if U-Boot was also loaded from the SD-card.
*/
if (!strcmp(boot_device, "/dwmmc@fe320000")) {
char *mmc0, *mmc1;
debug("%s: booted from SD-Card\n", __func__);
mmc0 = strstr(env, "mmc0");
mmc1 = strstr(env, "mmc1");
if (!mmc0 || !mmc1) {
debug("%s: only one mmc boot_target found\n", __func__);
return -1;
}
/*
* If mmc0 comes first in the boot order, we need to change
* the strings to make mmc1 first.
*/
if (mmc0 < mmc1) {
mmc0[3] = '1';
mmc1[3] = '0';
debug("%s: set boot_targets to: %s\n", __func__, env);
env_set("boot_targets", env);
}
}
return 0;
}
int misc_init_r(void)
{
setup_serial();
setup_macaddr();
setup_iodomain();
setup_boottargets();
return 0;
}

@ -80,6 +80,11 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
}
#endif
/* Weak default function for arch/board-specific fixups to the spl_image_info */
void __weak spl_perform_fixups(struct spl_image_info *spl_image)
{
}
void spl_fixup_fdt(void)
{
#if defined(CONFIG_SPL_OF_LIBFDT) && defined(CONFIG_SYS_SPL_ARGS_ADDR)
@ -445,8 +450,10 @@ static int boot_from_devices(struct spl_image_info *spl_image,
else
puts("SPL: Unsupported Boot Device!\n");
#endif
if (loader && !spl_load_image(spl_image, loader))
if (loader && !spl_load_image(spl_image, loader)) {
spl_image->boot_device = spl_boot_list[i];
return 0;
}
}
return -ENODEV;
@ -498,6 +505,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
#ifdef CONFIG_SYS_SPL_ARGS_ADDR
spl_image.arg = (void *)CONFIG_SYS_SPL_ARGS_ADDR;
#endif
spl_image.boot_device = BOOT_DEVICE_NONE;
board_boot_order(spl_boot_list);
if (boot_from_devices(&spl_image, spl_boot_list,
@ -506,6 +514,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
hang();
}
spl_perform_fixups(&spl_image);
#ifdef CONFIG_CPU_V7M
spl_image.entry_point |= 0x1;
#endif

@ -13,6 +13,7 @@ CONFIG_SPL_SPI_SUPPORT=y
CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-mickey"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-mickey.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -14,6 +14,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-jerry"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-jerry.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_BOARD_EARLY_INIT_F=y

@ -14,6 +14,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3288-veyron-minnie"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-veyron-minnie.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -9,6 +9,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEFAULT_DEVICE_TREE="rk3368-px5-evb"
CONFIG_DEBUG_UART=y
CONFIG_ANDROID_BOOT_IMAGE=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3368-px5-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_ARCH_EARLY_INIT_R=y

@ -13,6 +13,7 @@ CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3036-sdk"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_DEFAULT_FDT_FILE="rk3036-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
# CONFIG_SPL_FRAMEWORK is not set

@ -7,6 +7,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEFAULT_DEVICE_TREE="rk3128-evb"
CONFIG_DEBUG_UART=y
CONFIG_FIT=y
CONFIG_DEFAULT_FDT_FILE="rk3128-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_CMD_GPT=y

@ -12,6 +12,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3229-evb"
CONFIG_DEBUG_UART=y
CONFIG_DEFAULT_FDT_FILE="rk3229-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -12,6 +12,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3288-evb"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-evb-rk808.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -8,6 +8,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3328-evb"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_FIT=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3328-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_CMD_BOOTZ=y

@ -14,6 +14,7 @@ CONFIG_DEBUG_UART=y
CONFIG_FIT=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.py"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -8,6 +8,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEFAULT_DEVICE_TREE="rv1108-evb"
CONFIG_DEBUG_UART=y
# CONFIG_USE_BOOTCOMMAND is not set
CONFIG_DEFAULT_FDT_FILE="rv1108-evb.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_RANDOM_UUID=y

@ -13,6 +13,7 @@ CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_CONSOLE_MUX=y
CONFIG_DEFAULT_FDT_FILE="rk3288-fennec.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -12,6 +12,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3288-firefly"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-firefly.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -14,6 +14,7 @@ CONFIG_DEBUG_UART=y
CONFIG_FIT=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_atf.py"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-firefly.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -8,6 +8,7 @@ CONFIG_DEBUG_UART_BASE=0xFF690000
CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEFAULT_DEVICE_TREE="rk3368-geekbox"
CONFIG_DEBUG_UART=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3368-geekbox.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_REGMAP=y

@ -10,6 +10,7 @@ CONFIG_SPL_SYS_MALLOC_F_LEN=0x0
CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3036-sdk"
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_DEFAULT_FDT_FILE="rk3036-kylin.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
# CONFIG_SPL_FRAMEWORK is not set

@ -27,6 +27,7 @@ CONFIG_BOOTSTAGE=y
CONFIG_SPL_BOOTSTAGE=y
CONFIG_BOOTSTAGE_REPORT=y
CONFIG_BOOTSTAGE_FDT=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3368-lion-haikou.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_ARCH_EARLY_INIT_R=y

@ -12,6 +12,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3288-miqi"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-miqi.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -13,6 +13,7 @@ CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_CONSOLE_MUX=y
CONFIG_DEFAULT_FDT_FILE="rk3288-phycore-rdk.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -13,6 +13,7 @@ CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_CONSOLE_MUX=y
CONFIG_DEFAULT_FDT_FILE="rk3288-popmetal.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -18,6 +18,7 @@ CONFIG_DEBUG_UART=y
CONFIG_FIT=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_SPL_FIT_SOURCE="board/theobroma-systems/puma_rk3399/fit_spl_atf.its"
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-puma-haikou.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_BOARD_INIT=y

@ -12,6 +12,7 @@ CONFIG_DEFAULT_DEVICE_TREE="rk3288-rock2-square"
CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-rock2-square.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -12,6 +12,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_SPL_STACK_R_ADDR=0x60080000
CONFIG_DEFAULT_DEVICE_TREE="rk3188-radxarock"
CONFIG_DEBUG_UART=y
CONFIG_DEFAULT_FDT_FILE="rk3188-radxarock.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -9,6 +9,7 @@ CONFIG_DEBUG_UART_CLOCK=24000000
CONFIG_DEFAULT_DEVICE_TREE="rk3368-sheep"
CONFIG_DEBUG_UART=y
CONFIG_ANDROID_BOOT_IMAGE=y
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3368-sheep.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_CMD_MMC=y

@ -54,4 +54,5 @@ CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_USB_HOST_ETHER=y
CONFIG_USB_ETHER_ASIX=y
CONFIG_USB_ETHER_MCS7830=y
CONFIG_SPL_TINY_MEMSET=y
# CONFIG_EFI_LOADER is not set

@ -13,6 +13,7 @@ CONFIG_DEBUG_UART=y
# CONFIG_ANDROID_BOOT_IMAGE is not set
CONFIG_SILENT_CONSOLE=y
CONFIG_CONSOLE_MUX=y
CONFIG_DEFAULT_FDT_FILE="rk3288-tinker.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -12,6 +12,7 @@ CONFIG_SPL_STACK_R_ADDR=0x80000
CONFIG_DEFAULT_DEVICE_TREE="rk3288-vyasa"
CONFIG_DEBUG_UART=y
CONFIG_SILENT_CONSOLE=y
CONFIG_DEFAULT_FDT_FILE="rk3288-vyasa.dtb"
# CONFIG_DISPLAY_CPUINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_SPL_STACK_R=y

@ -124,11 +124,11 @@ something like:
=>
The rockchip bootrom can load and boot an initial spl, then continue to
load a second-level bootloader(ie. U-BOOT) as soon as it returns to bootrom.
Therefore RK3288 has another loading sequence like RK3036. The option of
U-Boot is controlled with this setting in U-Boot:
load a second-stage bootloader (ie. U-Boot) as soon as the control is returned
to the bootrom. Both the RK3288 and the RK3036 use this special boot sequence.
The configuration option enabling this is:
#define CONFIG_SPL_ROCKCHIP_BACK_TO_BROM
CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y
You can create the image via the following operations:

@ -73,3 +73,13 @@ Example
u-boot,spl-boot-order = "same-as-spl", &sdmmc, "/sdhci@fe330000";
};
};
u-boot,spl-boot-device property
-------------------------------
This property is a companion-property to the u-boot,spl-boot-order and
will be injected automatically by the SPL stage to notify a later stage
of where said later stage was booted from.
You should not define this property yourself in the device-tree, as it
may be overwritten without warning.

@ -31,6 +31,18 @@ struct rk_i2c {
unsigned int speed;
};
enum {
RK_I2C_LEGACY,
RK_I2C_NEW,
};
/**
* @controller_type: i2c controller type
*/
struct rk_i2c_soc_data {
int controller_type;
};
static inline void rk_i2c_get_div(int div, int *divh, int *divl)
{
*divl = div / 2;
@ -378,9 +390,38 @@ static int rockchip_i2c_ofdata_to_platdata(struct udevice *bus)
static int rockchip_i2c_probe(struct udevice *bus)
{
struct rk_i2c *priv = dev_get_priv(bus);
struct rk_i2c_soc_data *soc_data;
struct udevice *pinctrl;
int bus_nr;
int ret;
priv->regs = dev_read_addr_ptr(bus);
soc_data = (struct rk_i2c_soc_data*)dev_get_driver_data(bus);
if (soc_data->controller_type == RK_I2C_LEGACY) {
ret = dev_read_alias_seq(bus, &bus_nr);
if (ret < 0) {
debug("%s: Could not get alias for %s: %d\n",
__func__, bus->name, ret);
return ret;
}
ret = uclass_get_device(UCLASS_PINCTRL, 0, &pinctrl);
if (ret) {
debug("%s: Cannot find pinctrl device\n", __func__);
return ret;
}
/* pinctrl will switch I2C to new type */
ret = pinctrl_request_noflags(pinctrl, PERIPH_ID_I2C0 + bus_nr);
if (ret) {
debug("%s: Failed to switch I2C to new type %s: %d\n",
__func__, bus->name, ret);
return ret;
}
}
return 0;
}
@ -389,12 +430,55 @@ static const struct dm_i2c_ops rockchip_i2c_ops = {
.set_bus_speed = rockchip_i2c_set_bus_speed,
};
static const struct rk_i2c_soc_data rk3066_soc_data = {
.controller_type = RK_I2C_LEGACY,
};
static const struct rk_i2c_soc_data rk3188_soc_data = {
.controller_type = RK_I2C_LEGACY,
};
static const struct rk_i2c_soc_data rk3228_soc_data = {
.controller_type = RK_I2C_NEW,
};
static const struct rk_i2c_soc_data rk3288_soc_data = {
.controller_type = RK_I2C_NEW,
};
static const struct rk_i2c_soc_data rk3328_soc_data = {
.controller_type = RK_I2C_NEW,
};
static const struct rk_i2c_soc_data rk3399_soc_data = {
.controller_type = RK_I2C_NEW,
};
static const struct udevice_id rockchip_i2c_ids[] = {
{ .compatible = "rockchip,rk3066-i2c" },
{ .compatible = "rockchip,rk3188-i2c" },
{ .compatible = "rockchip,rk3288-i2c" },
{ .compatible = "rockchip,rk3328-i2c" },
{ .compatible = "rockchip,rk3399-i2c" },
{
.compatible = "rockchip,rk3066-i2c",
.data = (ulong)&rk3066_soc_data,
},
{
.compatible = "rockchip,rk3188-i2c",
.data = (ulong)&rk3188_soc_data,
},
{
.compatible = "rockchip,rk3228-i2c",
.data = (ulong)&rk3228_soc_data,
},
{
.compatible = "rockchip,rk3288-i2c",
.data = (ulong)&rk3288_soc_data,
},
{
.compatible = "rockchip,rk3328-i2c",
.data = (ulong)&rk3328_soc_data,
},
{
.compatible = "rockchip,rk3399-i2c",
.data = (ulong)&rk3399_soc_data,
},
{ }
};

@ -12,5 +12,7 @@
#define KERNEL_LOAD_ADDR 0x280000
#define DTB_LOAD_ADDR 0x5600000
#define INITRD_LOAD_ADDR 0x5bf0000
/* PHY needs longer aneg time at 1G */
#define PHY_ANEG_TIMEOUT 8000
#endif

@ -56,6 +56,7 @@
/* Linux fails to load the fdt if it's loaded above 512M on a evb-rk3036 board,
* so limit the fdt reallocation to that */
#define CONFIG_EXTRA_ENV_SETTINGS \
"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
"fdt_high=0x7fffffff\0" \
"partitions=" PARTS_DEFAULT \
ENV_MEM_LAYOUT_SETTINGS \

@ -53,6 +53,7 @@
#include <config_distro_bootcmd.h>
#define CONFIG_EXTRA_ENV_SETTINGS \
ENV_MEM_LAYOUT_SETTINGS \
"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
"partitions=" PARTS_DEFAULT \
BOOTENV

@ -61,6 +61,7 @@
/* Linux fails to load the fdt if it's loaded above 256M on a Rock board,
* so limit the fdt reallocation to that */
#define CONFIG_EXTRA_ENV_SETTINGS \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
"fdt_high=0x6fffffff\0" \
"initrd_high=0x6fffffff\0" \
"partitions=" PARTS_DEFAULT \

@ -52,6 +52,7 @@
/* Linux fails to load the fdt if it's loaded above 512M on a evb-rk3036 board,
* so limit the fdt reallocation to that */
#define CONFIG_EXTRA_ENV_SETTINGS \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
"fdt_high=0x7fffffff\0" \
"partitions=" PARTS_DEFAULT \
ENV_MEM_LAYOUT_SETTINGS \

@ -69,7 +69,7 @@
#define CONFIG_EXTRA_ENV_SETTINGS \
"fdt_high=0x0fffffff\0" \
"initrd_high=0x0fffffff\0" \
"fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
"partitions=" PARTS_DEFAULT \
ENV_MEM_LAYOUT_SETTINGS \
ROCKCHIP_DEVICE_SETTINGS \

@ -46,6 +46,7 @@
#include <config_distro_bootcmd.h>
#define CONFIG_EXTRA_ENV_SETTINGS \
ENV_MEM_LAYOUT_SETTINGS \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
"partitions=" PARTS_DEFAULT \
BOOTENV

@ -46,6 +46,7 @@
#include <config_distro_bootcmd.h>
#define CONFIG_EXTRA_ENV_SETTINGS \
"fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
ENV_MEM_LAYOUT_SETTINGS \
BOOTENV

@ -55,7 +55,7 @@
#include <config_distro_bootcmd.h>
#define CONFIG_EXTRA_ENV_SETTINGS \
ENV_MEM_LAYOUT_SETTINGS \
"fdtfile=rockchip/" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
"partitions=" PARTS_DEFAULT \
BOOTENV

@ -29,6 +29,7 @@ struct spl_image_info {
#if CONFIG_IS_ENABLED(LOAD_FIT)
void *fdt_addr;
#endif
u32 boot_device;
u32 size;
u32 flags;
void *arg;
@ -296,4 +297,10 @@ void spl_invoke_atf(struct spl_image_info *spl_image);
* can implement 'board_return_to_bootrom'.
*/
void board_return_to_bootrom(void);
/**
* spl_perform_fixups() - arch/board-specific callback before processing
* the boot-payload
*/
void spl_perform_fixups(struct spl_image_info *spl_image);
#endif

Loading…
Cancel
Save