[U-Boot] [PATCH 1/2] board: engicam: Handle mmc recovery partition, root

From: Jagan Teki jagan@amarulasolutions.com
Since i.CoreM6 support recovery boot via bootcount, update the mmcpart and mmcroot dynamically based on used mmc partition layout instead statically defined in include/configs.
Tested-by: Shyam Saini shyam.saini@amarulasolutions.com Signed-off-by: Jagan Teki jagan@amarulasolutions.com --- board/engicam/common/board.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/board/engicam/common/board.c b/board/engicam/common/board.c index 7486f0ac2d..571d36fc63 100644 --- a/board/engicam/common/board.c +++ b/board/engicam/common/board.c @@ -19,12 +19,20 @@ static void mmc_late_init(void) { char cmd[32]; char mmcblk[32]; + unsigned long bootcount = bootcount_load() + 1; + unsigned long bootlimit = env_get_ulong("bootlimit", 10, 0); u32 dev_no = mmc_get_env_dev(); + u32 mmcpart = 1;
env_set_ulong("mmcdev", dev_no);
+ if (bootlimit && bootcount > bootlimit) + mmcpart = 3; + + env_set_ulong("mmcpart", mmcpart); + /* Set mmcblk env */ - sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", dev_no); + sprintf(mmcblk, "/dev/mmcblk%dp%d rootwait rw", dev_no, mmcpart + 1); env_set("mmcroot", mmcblk);
sprintf(cmd, "mmc dev %d", dev_no);

From: Jagan Teki jagan@amarulasolutions.com
Since recovery boot on mmc can get the mmcpart and mmcroot dynamically, drop the static definitions and handle it properly.
Tested-by: Shyam Saini shyam.saini@amarulasolutions.com Signed-off-by: Jagan Teki jagan@amarulasolutions.com --- include/configs/imx6-engicam.h | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/include/configs/imx6-engicam.h b/include/configs/imx6-engicam.h index 571852d803..56b3c7503e 100644 --- a/include/configs/imx6-engicam.h +++ b/include/configs/imx6-engicam.h @@ -43,30 +43,20 @@ "fdt_addr=" FDT_ADDR "\0" \ "boot_fdt=try\0" \ "mmcpart=1\0" \ - "recovery_device=0\0" \ - "recovery_part=2\0" \ - "recovery_root=/dev/mmcblk0p2 rootwait rw\0" \ "nandroot=ubi0:rootfs rootfstype=ubifs\0" \ "mmcautodetect=yes\0" \ "mmcargs=setenv bootargs console=${console},${baudrate} " \ "root=${mmcroot}\0" \ - "recovery_mmcargs= setenv bootargs console=${console},${baudrate} "\ - "root=${recovery_root}\0" \ "ubiargs=setenv bootargs console=${console},${baudrate} " \ "ubi.mtd=5 root=${nandroot} ${mtdparts}\0" \ "loadbootscript=" \ "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \ "bootscript=echo Running bootscript from mmc ...; " \ "source\0" \ - "recovery_loadimage=ext2load mmc ${recovery_device}:${recovery_part} ${loadaddr} ${image}\0" \ - "recovery_loadfdt=ext2load mmc ${recovery_device}:${recovery_part} ${fdt_addr} ${fdt_file}\0" \ "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ "loadfit=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${fit_image}\0" \ - "altbootcmd=run recovery_boot\0"\ - "recovery_boot=echo Recovery Boot from mmc ...; " \ - "run recovery_loadimage ; run recovery_loadfdt; run recovery_mmcargs; "\ - "bootm ${loadaddr} - ${fdt_addr}\0" \ + "altbootcmd=run recoveryboot\0"\ "fitboot=echo Booting FIT image from mmc ...; " \ "run mmcargs; " \ "bootm ${loadaddr}\0" \ @@ -108,7 +98,12 @@ "run ubiargs; " \ "nand read ${loadaddr} kernel 0x800000; " \ "nand read ${fdt_addr} dtb 0x100000; " \ - "bootm ${loadaddr} - ${fdt_addr}\0" + "bootm ${loadaddr} - ${fdt_addr}\0" \ + "recoveryboot=if test ${modeboot} = mmcboot; then " \ + "run mmcboot; " \ + "else " \ + "run nandboot; " \ + "fi\0"
#define CONFIG_BOOTCOMMAND "run $modeboot"

From: Jagan Teki jagan@amarulasolutions.com Since recovery boot on mmc can get the mmcpart and mmcroot dynamically, drop the static definitions and handle it properly. Tested-by: Shyam Saini shyam.saini@amarulasolutions.com Signed-off-by: Jagan Teki jagan@amarulasolutions.com
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic

Hi Shyam, Jagan,
On 26/04/19 11:01, Shyam Saini wrote:
From: Jagan Teki jagan@amarulasolutions.com
Since i.CoreM6 support recovery boot via bootcount, update the mmcpart and mmcroot dynamically based on used mmc partition layout instead statically defined in include/configs.
Tested-by: Shyam Saini shyam.saini@amarulasolutions.com Signed-off-by: Jagan Teki jagan@amarulasolutions.com
board/engicam/common/board.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/board/engicam/common/board.c b/board/engicam/common/board.c index 7486f0ac2d..571d36fc63 100644 --- a/board/engicam/common/board.c +++ b/board/engicam/common/board.c @@ -19,12 +19,20 @@ static void mmc_late_init(void) { char cmd[32]; char mmcblk[32];
- unsigned long bootcount = bootcount_load() + 1;
Does it work ? I cannot build with this set because bootcount_load is not defined.
unsigned long bootlimit = env_get_ulong("bootlimit", 10, 0); u32 dev_no = mmc_get_env_dev();
u32 mmcpart = 1;
env_set_ulong("mmcdev", dev_no);
if (bootlimit && bootcount > bootlimit)
mmcpart = 3;
env_set_ulong("mmcpart", mmcpart);
/* Set mmcblk env */
- sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", dev_no);
- sprintf(mmcblk, "/dev/mmcblk%dp%d rootwait rw", dev_no, mmcpart + 1);
Maybe I repeat myself - this is your board, and fine for me if you do in this way. But is not much more flexible to do this with a script instead of hard code into the board file ?
env_set("mmcroot", mmcblk);
sprintf(cmd, "mmc dev %d", dev_no);
Best regards, Stefano Babic
participants (3)
-
sbabic@denx.de
-
Shyam Saini
-
Stefano Babic