summaryrefslogtreecommitdiff
path: root/board/theobroma-systems
diff options
context:
space:
mode:
Diffstat (limited to 'board/theobroma-systems')
-rw-r--r--board/theobroma-systems/puma_rk3399/puma-rk3399.c81
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 "