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

Signed-off-by: Eddie Cai <eddie.cai.li...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to