
Hi Eddie,
On 17 February 2017 at 00:57, Eddie Cai eddie.cai.linux@gmail.com wrote:
Auto write GPT table if fail to get GPT table when scan_dev_for_boot_part
Signed-off-by: Eddie Cai eddie.cai.linux@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"
What is the purpose of this setenv()?
);
return rk_board_late_init();
+}
-- 2.7.4
Regards, Simon