summaryrefslogtreecommitdiff
path: root/board/theobroma-systems
diff options
context:
space:
mode:
authorQuentin Schulz <quentin.schulz@theobroma-systems.com>2024-01-17 18:59:09 +0100
committerKever Yang <kever.yang@rock-chips.com>2024-01-19 10:57:36 +0800
commit6fdcf006051db7f7b3b373b6ae18e83454e3ae0a (patch)
treea431f94e6ae47d7d84ec44a38dbb222213799356 /board/theobroma-systems
parent796bc7d0f3eb6830f6362477edf4b05d49c48313 (diff)
downloadu-boot-6fdcf006051db7f7b3b373b6ae18e83454e3ae0a.tar.gz
u-boot-6fdcf006051db7f7b3b373b6ae18e83454e3ae0a.tar.bz2
u-boot-6fdcf006051db7f7b3b373b6ae18e83454e3ae0a.zip
rockchip: puma-rk3399: do not hardcode MMC controller paths
To prepare to put the similar logic around storage medium selection for Ringneck PX30 and Puma RK3399 in common, let's not use hardcoded paths but use uclass functions instead to find udevice based on their DT node full path. Cc: Quentin Schulz <foss+uboot@0leil.net> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
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 "