diff options
Diffstat (limited to 'board/theobroma-systems')
-rw-r--r-- | board/theobroma-systems/puma_rk3399/puma-rk3399.c | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/board/theobroma-systems/puma_rk3399/puma-rk3399.c b/board/theobroma-systems/puma_rk3399/puma-rk3399.c index 614a60ee8f..b8b718da24 100644 --- a/board/theobroma-systems/puma_rk3399/puma-rk3399.c +++ b/board/theobroma-systems/puma_rk3399/puma-rk3399.c @@ -82,33 +82,36 @@ static int setup_boottargets(void) * was used to load U-Boot proper. If SPI-NOR flash was used, keep * original default order. */ - if (strcmp(boot_device, "/spi@ff1d0000/flash@0")) { - bool sd_booted = !strcmp(boot_device, "/mmc@fe320000"); - char *mmc0, *mmc1; - - debug("%s: booted from %s\n", __func__, - sd_booted ? "SD-Card" : "eMMC"); - 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 and U-Boot proper was - * loaded from mmc1, swap mmc0 and mmc1 in the list. - * If mmc1 comes first in the boot order and U-Boot proper was - * loaded from mmc0, swap mmc0 and mmc1 in the list. - */ - if ((mmc0 < mmc1 && sd_booted) || - (mmc0 > mmc1 && !sd_booted)) { - mmc0[3] = '1'; - mmc1[3] = '0'; - debug("%s: set boot_targets to: %s\n", __func__, env); - env_set("boot_targets", env); - } + struct udevice *devp; + + if (uclass_find_device_by_ofnode(UCLASS_MMC, ofnode_path(boot_device), &devp)) { + debug("%s: not reordering boot_targets, bootdev %s != MMC\n", + __func__, boot_device); + return 0; + } + + char *mmc0, *mmc1; + + 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 and U-Boot proper was + * loaded from mmc1, swap mmc0 and mmc1 in the list. + * If mmc1 comes first in the boot order and U-Boot proper was + * loaded from mmc0, swap mmc0 and mmc1 in the list. + */ + if ((mmc0 < mmc1 && devp->seq_ == 1) || + (mmc0 > mmc1 && devp->seq_ == 0)) { + mmc0[3] = '1'; + mmc1[3] = '0'; + debug("%s: set boot_targets to: %s\n", __func__, env); + env_set("boot_targets", env); } return 0; @@ -118,28 +121,37 @@ int mmc_get_env_dev(void) { const char *boot_device = ofnode_read_chosen_string("u-boot,spl-boot-device"); + struct udevice *devp; if (!boot_device) { debug("%s: /chosen/u-boot,spl-boot-device not set\n", __func__); +#ifdef CONFIG_SYS_MMC_ENV_DEV return CONFIG_SYS_MMC_ENV_DEV; +#else + return 0; +#endif } debug("%s: booted from %s\n", __func__, boot_device); - if (!strcmp(boot_device, "/mmc@fe320000")) - return 1; - - if (!strcmp(boot_device, "/mmc@fe330000")) + if (uclass_find_device_by_ofnode(UCLASS_MMC, ofnode_path(boot_device), &devp)) +#ifdef CONFIG_SYS_MMC_ENV_DEV + return CONFIG_SYS_MMC_ENV_DEV; +#else return 0; +#endif + + debug("%s: get MMC ENV from mmc%d\n", __func__, devp->seq_); - return CONFIG_SYS_MMC_ENV_DEV; + return devp->seq_; } enum env_location arch_env_get_location(enum env_operation op, int prio) { const char *boot_device = ofnode_read_chosen_string("u-boot,spl-boot-device"); + struct udevice *devp; if (prio > 0) return ENVL_UNKNOWN; @@ -153,12 +165,11 @@ enum env_location arch_env_get_location(enum env_operation op, int prio) debug("%s: booted from %s\n", __func__, boot_device); if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH) && - !strcmp(boot_device, "/spi@ff1d0000/flash@0")) + !uclass_find_device_by_ofnode(UCLASS_SPI_FLASH, ofnode_path(boot_device), &devp)) return ENVL_SPI_FLASH; if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC) && - (!strcmp(boot_device, "/mmc@fe320000") || - !strcmp(boot_device, "/mmc@fe330000"))) + !uclass_find_device_by_ofnode(UCLASS_MMC, ofnode_path(boot_device), &devp)) return ENVL_MMC; printf("%s: No environment available: booted from %s but U-Boot " |