[U-Boot] [PATCH] rockchip: set scan_dev_for_boot_part env for rockchip SoC

Eddie Cai eddie.cai.linux at gmail.com
Fri Feb 17 07:57:02 UTC 2017


Auto write GPT table if fail to get GPT table when scan_dev_for_boot_part

Signed-off-by: Eddie Cai <eddie.cai.linux at gmail.com>
---
 arch/arm/mach-rockchip/rk3036-board.c | 20 ++++++++++++++-
 arch/arm/mach-rockchip/rk3288-board.c | 20 ++++++++++++++-
 arch/arm/mach-rockchip/rk3399-board.c | 46 +++++++++++++++++++++++++++++++++++
 3 files changed, 84 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/mach-rockchip/rk3399-board.c

diff --git a/arch/arm/mach-rockchip/rk3036-board.c b/arch/arm/mach-rockchip/rk3036-board.c
index bf2b268..e9aeaff 100644
--- a/arch/arm/mach-rockchip/rk3036-board.c
+++ b/arch/arm/mach-rockchip/rk3036-board.c
@@ -51,7 +51,25 @@ __weak int rk_board_late_init(void)
 int board_late_init(void)
 {
 	setup_boot_mode();
-
+	setenv("scan_dev_for_boot_part",
+			"part list ${devtype} ${devnum} -bootable test; "
+			"if env exists test; then "
+			       "echo Found valid partition table; "
+			"else "
+	               "echo No valid partition table, write the original partition table; "
+			       "gpt write ${devtype} ${devnum} ${partitions}; "
+			       "mmc rescan;"
+			"fi;"
+			"part list ${devtype} ${devnum} -bootable devplist; "
+			"env exists devplist || setenv devplist 1; "
+			"for distro_bootpart in ${devplist}; do "
+			    "if fstype ${devtype} "
+			            "${devnum}:${distro_bootpart} "
+			            "bootfstype; then "
+			        "run scan_dev_for_boot; "
+			      "fi; "
+			"done\0"
+	);
 	return rk_board_late_init();
 }
 
diff --git a/arch/arm/mach-rockchip/rk3288-board.c b/arch/arm/mach-rockchip/rk3288-board.c
index 9894a25..386b155 100644
--- a/arch/arm/mach-rockchip/rk3288-board.c
+++ b/arch/arm/mach-rockchip/rk3288-board.c
@@ -74,7 +74,25 @@ int board_late_init(void)
 {
 	setup_boot_mode();
 	rk3288_qos_init();
-
+	setenv("scan_dev_for_boot_part",
+			"part list ${devtype} ${devnum} -bootable test; "
+			"if env exists test; then "
+			       "echo Found valid partition table; "
+			"else "
+	               "echo No valid partition table, write the original partition table; "
+			       "gpt write ${devtype} ${devnum} ${partitions}; "
+			       "mmc rescan;"
+			"fi;"
+			"part list ${devtype} ${devnum} -bootable devplist; "
+			"env exists devplist || setenv devplist 1; "
+			"for distro_bootpart in ${devplist}; do "
+			    "if fstype ${devtype} "
+			            "${devnum}:${distro_bootpart} "
+			            "bootfstype; then "
+			        "run scan_dev_for_boot; "
+			      "fi; "
+			"done\0"
+	);
 	return rk_board_late_init();
 }
 
diff --git a/arch/arm/mach-rockchip/rk3399-board.c b/arch/arm/mach-rockchip/rk3399-board.c
new file mode 100644
index 0000000..3777643
--- /dev/null
+++ b/arch/arm/mach-rockchip/rk3399-board.c
@@ -0,0 +1,46 @@
+/*
+ * (C) Copyright 2017 ockchip Electronics Co., Ltd
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+#include <common.h>
+#include <clk.h>
+#include <dm.h>
+#include <ram.h>
+#include <syscon.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/periph.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+__weak int rk_board_late_init(void)
+{
+	return 0;
+}
+
+int board_late_init(void)
+{
+	setenv("scan_dev_for_boot_part",
+			"part list ${devtype} ${devnum} -bootable test; "
+			"if env exists test; then "
+			       "echo Found valid partition table; "
+			"else "
+	               "echo No valid partition table, write the original partition table; "
+			       "gpt write ${devtype} ${devnum} ${partitions}; "
+			       "mmc rescan;"
+			"fi;"
+			"part list ${devtype} ${devnum} -bootable devplist; "
+			"env exists devplist || setenv devplist 1; "
+			"for distro_bootpart in ${devplist}; do "
+			    "if fstype ${devtype} "
+			            "${devnum}:${distro_bootpart} "
+			            "bootfstype; then "
+			        "run scan_dev_for_boot; "
+			      "fi; "
+			"done\0"
+	);
+	return rk_board_late_init();
+}
+
-- 
2.7.4



More information about the U-Boot mailing list