Message ID | 20200213032737.3284-1-yamada.masahiro@socionext.com |
---|---|
State | Accepted |
Commit | ef5c7d6d5c5cfe146c848e67e042bab6ba150d43 |
Headers | show |
Series | ARM: uniphier: add sdscript, sdboot, sdupdate environment variables | expand |
On Thu, Feb 13, 2020 at 12:28 PM Masahiro Yamada <yamada.masahiro at socionext.com> wrote: > > Add handy macros: > > - sdscript: source boot.scr in the file system of the SD media > - sdboot : boot the kernel using the images in the file system > of the SD media > - sdscript: update the boot firmware in the SD media > (in raw block sectors) > > Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com> > --- Applied to u-boot-uniphier. > > arch/arm/mach-uniphier/mmc-first-dev.c | 27 ++++++++++++++++++++++---- > include/configs/uniphier.h | 11 +++++++++++ > 2 files changed, 34 insertions(+), 4 deletions(-) > > diff --git a/arch/arm/mach-uniphier/mmc-first-dev.c b/arch/arm/mach-uniphier/mmc-first-dev.c > index 149e662070ff..e2f4f4eb5c7a 100644 > --- a/arch/arm/mach-uniphier/mmc-first-dev.c > +++ b/arch/arm/mach-uniphier/mmc-first-dev.c > @@ -9,13 +9,14 @@ > #include <mmc.h> > #include <linux/errno.h> > > -static int find_first_mmc_device(void) > +static int find_first_mmc_device(bool is_sd) > { > struct mmc *mmc; > int i; > > for (i = 0; (mmc = find_mmc_device(i)); i++) { > - if (!mmc_init(mmc) && IS_MMC(mmc)) > + if (!mmc_init(mmc) && > + ((is_sd && IS_SD(mmc)) || (!is_sd && IS_MMC(mmc)))) > return i; > } > > @@ -24,14 +25,14 @@ static int find_first_mmc_device(void) > > int mmc_get_env_dev(void) > { > - return find_first_mmc_device(); > + return find_first_mmc_device(false); > } > > static int do_mmcsetn(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > { > int dev; > > - dev = find_first_mmc_device(); > + dev = find_first_mmc_device(false); > if (dev < 0) > return CMD_RET_FAILURE; > > @@ -44,3 +45,21 @@ U_BOOT_CMD( > "Set the first MMC (not SD) dev number to \"mmc_first_dev\" environment", > "" > ); > + > +static int do_sdsetn(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > +{ > + int dev; > + > + dev = find_first_mmc_device(true); > + if (dev < 0) > + return CMD_RET_FAILURE; > + > + env_set_ulong("sd_first_dev", dev); > + return CMD_RET_SUCCESS; > +} > + > +U_BOOT_CMD( > + sdsetn, 1, 1, do_sdsetn, > + "Set the first SD dev number to \"sd_first_dev\" environment", > + "" > +); > diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h > index b95fb9c93fa9..55fa85ed6256 100644 > --- a/include/configs/uniphier.h > +++ b/include/configs/uniphier.h > @@ -160,6 +160,7 @@ > "emmcboot=mmcsetn && run bootcmd_mmc${mmc_first_dev}\0" \ > "nandboot=run bootcmd_ubifs0\0" \ > "norboot=run tftpboot\0" \ > + "sdboot=sdsetn && run bootcmd_mmc${sd_first_dev}\0" \ > "usbboot=run bootcmd_usb0\0" \ > "emmcscript=setenv devtype mmc && " \ > "mmcsetn && " \ > @@ -170,6 +171,10 @@ > "ubifsmount ubi0:boot && " \ > "ubifsload ${loadaddr} ${script} && " \ > "source $loadaddr\0" \ > + "sdscript=setenv devtype mmc && " \ > + "sdsetn && " \ > + "setenv devnum ${sd_first_dev} && " \ > + "run loadscript_fat\0" \ > "norscript=echo Running ${script} from tftp ... && " \ > "tftpboot ${script} &&" \ > "source $loadaddr\0" \ > @@ -196,6 +201,12 @@ > "nand write $loadaddr 0 0x00020000 && " \ > "tftpboot $third_image && " \ > "nand write $loadaddr 0x00020000 0x001e0000\0" \ > + "sdupdate=sdsetn &&" \ > + "mmc dev $sd_first_dev &&" \ > + "tftpboot $second_image && " \ > + "mmc write $loadaddr 0 100 && " \ > + "tftpboot $third_image && " \ > + "mmc write $loadaddr 100 f00\0" \ > "usbupdate=usb start &&" \ > "tftpboot $second_image && " \ > "usb write $loadaddr 0 100 && " \ > -- > 2.17.1 >
diff --git a/arch/arm/mach-uniphier/mmc-first-dev.c b/arch/arm/mach-uniphier/mmc-first-dev.c index 149e662070ff..e2f4f4eb5c7a 100644 --- a/arch/arm/mach-uniphier/mmc-first-dev.c +++ b/arch/arm/mach-uniphier/mmc-first-dev.c @@ -9,13 +9,14 @@ #include <mmc.h> #include <linux/errno.h> -static int find_first_mmc_device(void) +static int find_first_mmc_device(bool is_sd) { struct mmc *mmc; int i; for (i = 0; (mmc = find_mmc_device(i)); i++) { - if (!mmc_init(mmc) && IS_MMC(mmc)) + if (!mmc_init(mmc) && + ((is_sd && IS_SD(mmc)) || (!is_sd && IS_MMC(mmc)))) return i; } @@ -24,14 +25,14 @@ static int find_first_mmc_device(void) int mmc_get_env_dev(void) { - return find_first_mmc_device(); + return find_first_mmc_device(false); } static int do_mmcsetn(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int dev; - dev = find_first_mmc_device(); + dev = find_first_mmc_device(false); if (dev < 0) return CMD_RET_FAILURE; @@ -44,3 +45,21 @@ U_BOOT_CMD( "Set the first MMC (not SD) dev number to \"mmc_first_dev\" environment", "" ); + +static int do_sdsetn(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + int dev; + + dev = find_first_mmc_device(true); + if (dev < 0) + return CMD_RET_FAILURE; + + env_set_ulong("sd_first_dev", dev); + return CMD_RET_SUCCESS; +} + +U_BOOT_CMD( + sdsetn, 1, 1, do_sdsetn, + "Set the first SD dev number to \"sd_first_dev\" environment", + "" +); diff --git a/include/configs/uniphier.h b/include/configs/uniphier.h index b95fb9c93fa9..55fa85ed6256 100644 --- a/include/configs/uniphier.h +++ b/include/configs/uniphier.h @@ -160,6 +160,7 @@ "emmcboot=mmcsetn && run bootcmd_mmc${mmc_first_dev}\0" \ "nandboot=run bootcmd_ubifs0\0" \ "norboot=run tftpboot\0" \ + "sdboot=sdsetn && run bootcmd_mmc${sd_first_dev}\0" \ "usbboot=run bootcmd_usb0\0" \ "emmcscript=setenv devtype mmc && " \ "mmcsetn && " \ @@ -170,6 +171,10 @@ "ubifsmount ubi0:boot && " \ "ubifsload ${loadaddr} ${script} && " \ "source $loadaddr\0" \ + "sdscript=setenv devtype mmc && " \ + "sdsetn && " \ + "setenv devnum ${sd_first_dev} && " \ + "run loadscript_fat\0" \ "norscript=echo Running ${script} from tftp ... && " \ "tftpboot ${script} &&" \ "source $loadaddr\0" \ @@ -196,6 +201,12 @@ "nand write $loadaddr 0 0x00020000 && " \ "tftpboot $third_image && " \ "nand write $loadaddr 0x00020000 0x001e0000\0" \ + "sdupdate=sdsetn &&" \ + "mmc dev $sd_first_dev &&" \ + "tftpboot $second_image && " \ + "mmc write $loadaddr 0 100 && " \ + "tftpboot $third_image && " \ + "mmc write $loadaddr 100 f00\0" \ "usbupdate=usb start &&" \ "tftpboot $second_image && " \ "usb write $loadaddr 0 100 && " \
Add handy macros: - sdscript: source boot.scr in the file system of the SD media - sdboot : boot the kernel using the images in the file system of the SD media - sdscript: update the boot firmware in the SD media (in raw block sectors) Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com> --- arch/arm/mach-uniphier/mmc-first-dev.c | 27 ++++++++++++++++++++++---- include/configs/uniphier.h | 11 +++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-)