SPL: Add CONFIG_SUPPORT_EMMC_BOOT support to CONFIG_SPL_FRAMEWORK
Subsystems (2)
PATCH v3 1/8 SPL: Add CONFIG_SUPPORT_EMMC_BOOT support to CONFIG_SPL_FRAMEWORK
We use the switch CONFIG_SUPPORT_EMMC_BOOT today to enable some additional features of the eMMC boot partitions. Add support for being told that we have booted from one of these partitions to the spl framework and implement this on TI OMAP/related.
---
Changes in v3:
- Rework eMMC boot detect logic for TI platforms, in the eMMC boot case we rely on non-FAT/RAW values being in bootmode.
--- arch/arm/cpu/armv7/omap-common/boot-common.c | 13 ++++++++++++- common/spl/spl_mmc.c | 24 ++++++++++++++++++++++++ include/spl.h | 1 + 3 files changed, 37 insertions(+), 1 deletion(-)
arch/arm/cpu/armv7/omap-common/boot-common.c +12 -1
@@ -66,7 +66,18 @@ u32 spl_boot_device(void)u32 spl_boot_mode (void ) { -return gd->arch.omap_boot_params.omap_bootmode; +u32 val = gd->arch.omap_boot_params.omap_bootmode; + +if (val ==MMCSD_MODE_RAW ) +return MMCSD_MODE_RAW ; +else if (val ==MMCSD_MODE_FAT ) +return MMCSD_MODE_FAT ; + else +#ifdef CONFIG_SUPPORT_EMMC_BOOT +return MMCSD_MODE_EMMCBOOT ; +#else +return MMCSD_MODE_UNDEFINED ; +#endif }void spl_board_init (void )
common/spl/spl_mmc.c +24 -0
@@ -111,6 +111,30 @@ void spl_mmc_load_image(void)CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION , CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);#endif +#ifdef CONFIG_SUPPORT_EMMC_BOOT + }else if (boot_mode ==MMCSD_MODE_EMMCBOOT ) { +/* +* We need to check what the partition is configured to. +* 1 and 2 match up to boot0 / boot1 and 7 is user data +* which is the first physical partition (0). +*/ +int part = (mmc->part_config >>3 ) &PART_ACCESS_MASK ; + +if (part ==7 ) + part =0 ; + +if (mmc_switch_part (0 , part)) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT +puts ("MMC partition switch failed\n" ); +#endif +hang (); + } +#ifdef CONFIG_SPL_OS_BOOT +if (spl_start_uboot () ||mmc_load_image_raw_os (mmc)) +#endif + err =mmc_load_image_raw (mmc, +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR ); +#endif }else {#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT puts ("spl: wrong MMC boot mode\n" );
include/spl.h +1 -0
@@ -16,6 +16,7 @@#define MMCSD_MODE_UNDEFINED 0#define MMCSD_MODE_RAW 1#define MMCSD_MODE_FAT 2 +#define MMCSD_MODE_EMMCBOOT 3struct spl_image_info {const char *name;
Signature · 1 line
1.7.9.5
PATCH v3 2/8 cmd_mmc.c: Change 'bootpart' code to match normal coding style
--- common/cmd_mmc.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
common/cmd_mmc.c +11 -4
@@ -314,11 +314,18 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) }else if (strcmp (argv[1 ],"bootpart" ) ==0 ) {int dev; - dev =simple_strtoul (argv[2 ],NULL ,10 ); + struct *mmc; +u32 bootsize, rpmbsize; -u32 bootsize =simple_strtoul (argv[3 ],NULL ,10 ); -u32 rpmbsize =simple_strtoul (argv[4 ],NULL ,10 ); -struct mmc *mmc =find_mmc_device (dev); +if (argc ==5 ) { + dev =simple_strtoul (argv[2 ],NULL ,10 ); + bootsize =simple_strtoul (argv[3 ],NULL ,10 ); + rpmbsize =simple_strtoul (argv[4 ],NULL ,10 ); + }else { +return CMD_RET_USAGE ; + } + + mmc =find_mmc_device (dev);if (!mmc) {printf ("no mmc device at slot %x\n" , dev);return 1 ;
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 2/8 cmd_mmc.c: Change 'bootpart' code to match normal coding style
Hi Tom,
Quoted 35 lines · Tom Rini
Acked-by Jaehoon Chung <[email protected]>Signed-off-by Tom Rini <[email protected]>---
common/cmd_mmc.c| 15 +++++++++++----1 file changed, 11 insertions(+), 4 deletions(-)common/cmd_mmc.c +11
-4@@ -314,11 +314,18 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) }else if (strcmp (argv[1 ],"bootpart" ) ==0 ) {int dev; - dev =simple_strtoul (argv[2 ],NULL ,10 ); + struct *mmc; +u32 bootsize, rpmbsize; -u32 bootsize =simple_strtoul (argv[3 ],NULL ,10 ); -u32 rpmbsize =simple_strtoul (argv[4 ],NULL ,10 ); -struct mmc *mmc =find_mmc_device (dev); +if (argc ==5 ) { + dev =simple_strtoul (argv[2 ],NULL ,10 ); + bootsize =simple_strtoul (argv[3 ],NULL ,10 ); + rpmbsize =simple_strtoul (argv[4 ],NULL ,10 ); + }else { +return CMD_RET_USAGE ; + } + + mmc =find_mmc_device (dev);if (!mmc) {printf ("no mmc device at slot %x\n" , dev);return 1 ;Signature · 1 line
1.7.9.5
Applied. Thanks.
PATCH v3 3/8 cmd_mmc.c: Rename 'bootpart' to 'bootpart-resize'
In reply to Tom RiniRename 'bootpart' to 'bootpart-resize' to better reflect what this command is for.
--- common/cmd_mmc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
common/cmd_mmc.c +4 -4
@@ -312,9 +312,9 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])/* acknowledge to be sent during boot operation */ return boot_part_access (mmc,1 , part_num, access); - }else if (strcmp (argv[1 ],"bootpart" ) ==0 ) { + }else if (strcmp (argv[1 ],"bootpart-resize" ) ==0 ) {int dev; - struct *mmc; +struct mmc *mmc;u32 bootsize, rpmbsize;if (argc ==5 ) {
@@ -449,8 +449,8 @@ U_BOOT_CMD(" - Enable boot_part for booting and enable R/W access of boot_part\n" "mmc close <dev> <boot_partition>\n" " - Enable boot_part for booting and disable access to boot_part\n" -"mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n" - " - change sizes of boot and RPMB partitions of specified device\n" +"mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" + " - Change sizes of boot and RPMB partitions of specified device\n"#endif "mmc setdsr - set DSR register value\n" );
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 3/8 cmd_mmc.c: Rename 'bootpart' to 'bootpart-resize'
Hi Tom,
Quoted 38 lines · Tom Rini
Rename 'bootpart' to 'bootpart-resize' to better reflect what this command is for.
Acked-by Jaehoon Chung <[email protected]>Signed-off-by Tom Rini <[email protected]>---
common/cmd_mmc.c| 8 ++++----1 file changed, 4 insertions(+), 4 deletions(-)common/cmd_mmc.c +4
-4@@ -312,9 +312,9 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])/* acknowledge to be sent during boot operation */ return boot_part_access (mmc,1 , part_num, access); - }else if (strcmp (argv[1 ],"bootpart" ) ==0 ) { + }else if (strcmp (argv[1 ],"bootpart-resize" ) ==0 ) {int dev; - struct *mmc; +struct mmc *mmc;u32 bootsize, rpmbsize;if (argc ==5 ) {@@ -449,8 +449,8 @@ U_BOOT_CMD(" - Enable boot_part for booting and enable R/W access of boot_part\n" "mmc close <dev> <boot_partition>\n" " - Enable boot_part for booting and disable access to boot_part\n" -"mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n" - " - change sizes of boot and RPMB partitions of specified device\n" +"mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" + " - Change sizes of boot and RPMB partitions of specified device\n"#endif "mmc setdsr - set DSR register value\n" );Signature · 1 line
1.7.9.5
Applied. Thanks.
PATCH v3 4/8 cmd_mmc.c: Add 'partconf' command to mmc
In reply to Tom RiniAdd a partconf sub-command to the mmc command to allow for setting the boot_ack, boot_partition and partition_access fields of PARTITION_CONFIG (formerly BOOT_CONFIG, EXT_CSD[179]). Part of this requires changing the check for 'part' from an strncmp to a strcmp, like the rest of the sub-commands.
--- common/cmd_mmc.c | 30 +++++++++++++++++++++++++++++- drivers/mmc/mmc.c | 21 +++++++++++++++++++++ include/mmc.h | 2 ++ 3 files changed, 52 insertions(+), 1 deletion(-)
common/cmd_mmc.c +29 -1
@@ -195,7 +195,7 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])return 1 ; else return 0; - }else if (strncmp (argv[1 ],"part" ,4 ) ==0 ) { + }else if (strcmp (argv[1 ],"part" ) ==0 ) {block_dev_desc_t *mmc_dev;struct mmc *mmc;
@@ -311,7 +311,33 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])/* acknowledge to be sent during boot operation */ return boot_part_access (mmc,1 , part_num, access); + }else if (strcmp (argv[1 ],"partconf" ) ==0 ) { +int dev; +struct mmc *mmc; +u8 ack, part_num, access; + +if (argc ==6 ) { + dev =simple_strtoul (argv[2 ],NULL ,10 ); + ack =simple_strtoul (argv[3 ],NULL ,10 ); + part_num =simple_strtoul (argv[4 ],NULL ,10 ); + access =simple_strtoul (argv[5 ],NULL ,10 ); + }else { +return CMD_RET_USAGE ; + } + + mmc =find_mmc_device (dev); +if (!mmc) { +printf ("no mmc device at slot %x\n" , dev); +return 1 ; + } +if (IS_SD (mmc)) { +puts ("PARTITION_CONFIG only exists on eMMC\n" ); +return 1 ; + } + +/* acknowledge to be sent during boot operation */ +return mmc_set_part_conf (mmc, ack, part_num, access); }else if (strcmp (argv[1 ],"bootpart-resize" ) ==0 ) {int dev;struct mmc *mmc;
@@ -451,6 +477,8 @@ U_BOOT_CMD(" - Enable boot_part for booting and disable access to boot_part\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" " - Change sizes of boot and RPMB partitions of specified device\n" +"mmc partconf dev boot_ack boot_partition partition_access\n" + " - Change the bits of the PARTITION_CONFIG field of the specified device\n"#endif "mmc setdsr - set DSR register value\n" );
drivers/mmc/mmc.c +21 -0
@@ -1505,4 +1505,25 @@ int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access) }return 0 ; } + +/* +* Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG) +* based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and +* PARTITION_ACCESS. +* +* Returns 0 on success. +*/ +int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access) +{ +int err; + + err =mmc_switch (mmc,EXT_CSD_CMD_SET_NORMAL ,EXT_CSD_PART_CONF , +EXT_CSD_BOOT_ACK (ack) | +EXT_CSD_BOOT_PART_NUM (part_num) | +EXT_CSD_PARTITION_ACCESS (access)); + +if (err) +return err; +return 0 ; +}#endif
include/mmc.h +2 -0
@@ -312,6 +312,8 @@ int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize, unsigned long rpmbsize);/* Function to send commands to open/close the specified boot partition */ int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access); +/* Function to modify the PARTITION_CONFIG field of EXT_CSD */ +int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/** * Start device initialization and return immediately; it does not block on
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 4/8 cmd_mmc.c: Add 'partconf' command to mmc
Hi Tom,
Quoted 118 lines · Tom Rini
Add a partconf sub-command to the mmc command to allow for setting the
boot_ack,boot_partitionandpartition_accessfields ofPARTITION_CONFIG(formerlyBOOT_CONFIG, EXT_CSD[179]). Part of this requires changing the check for 'part' from an strncmp to a strcmp, like the rest of the sub-commands.Cc Andy Fleming <[email protected]>Cc Pantelis Antoniou <[email protected]>Acked-by Jaehoon Chung <[email protected]>Signed-off-by Tom Rini <[email protected]>---
common/cmd_mmc.c | 30 +++++++++++++++++++++++++++++- drivers/mmc/mmc.c | 21 +++++++++++++++++++++ include/mmc.h | 2 ++ 3 files changed, 52 insertions(+), 1 deletion(-)common/cmd_mmc.c +29
-1@@ -195,7 +195,7 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])return 1 ; else return 0; - }else if (strncmp (argv[1 ],"part" ,4 ) ==0 ) { + }else if (strcmp (argv[1 ],"part" ) ==0 ) {block_dev_desc_t *mmc_dev;struct mmc *mmc;@@ -311,7 +311,33 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])/* acknowledge to be sent during boot operation */ return boot_part_access (mmc,1 , part_num, access); + }else if (strcmp (argv[1 ],"partconf" ) ==0 ) { +int dev; +struct mmc *mmc; +u8 ack, part_num, access; + +if (argc ==6 ) { + dev =simple_strtoul (argv[2 ],NULL ,10 ); + ack =simple_strtoul (argv[3 ],NULL ,10 ); + part_num =simple_strtoul (argv[4 ],NULL ,10 ); + access =simple_strtoul (argv[5 ],NULL ,10 ); + }else { +return CMD_RET_USAGE ; + } + + mmc =find_mmc_device (dev); +if (!mmc) { +printf ("no mmc device at slot %x\n" , dev); +return 1 ; + } +if (IS_SD (mmc)) { +puts ("PARTITION_CONFIG only exists on eMMC\n" ); +return 1 ; + } + +/* acknowledge to be sent during boot operation */ +return mmc_set_part_conf (mmc, ack, part_num, access); }else if (strcmp (argv[1 ],"bootpart-resize" ) ==0 ) {int dev;struct mmc *mmc;@@ -451,6 +477,8 @@ U_BOOT_CMD(" - Enable boot_part for booting and disable access to boot_part\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" " - Change sizes of boot and RPMB partitions of specified device\n" +"mmc partconf dev boot_ack boot_partition partition_access\n" + " - Change the bits of the PARTITION_CONFIG field of the specified device\n"#endif "mmc setdsr - set DSR register value\n" );drivers/mmc/mmc.c +21
-0@@ -1505,4 +1505,25 @@ int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access) }return 0 ; } + +/* +* Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG) +* based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and +* PARTITION_ACCESS. +* +* Returns 0 on success. +*/ +int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access) +{ +int err; + + err =mmc_switch (mmc,EXT_CSD_CMD_SET_NORMAL ,EXT_CSD_PART_CONF , +EXT_CSD_BOOT_ACK (ack) | +EXT_CSD_BOOT_PART_NUM (part_num) | +EXT_CSD_PARTITION_ACCESS (access)); + +if (err) +return err; +return 0 ; +}#endif include/mmc.h +2
-0@@ -312,6 +312,8 @@ int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize, unsigned long rpmbsize);/* Function to send commands to open/close the specified boot partition */ int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access); +/* Function to modify the PARTITION_CONFIG field of EXT_CSD */ +int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/** * Start device initialization and return immediately; it does not block on Signature · 1 line
1.7.9.5
Applied. Thanks.
PATCH v3 5/8 cmd_mmc.c: Add bootbus mmc sub-command
In reply to Tom RiniAdd a bootbus sub-command to the mmc command to allow for setting the boot_bus_width, reset_boot_bus_width and boot_mode fields of BOOT_BUS_WIDTH (EXT_CSD[177]).
--- common/cmd_mmc.c | 29 +++++++++++++++++++++++++++++ drivers/mmc/mmc.c | 21 +++++++++++++++++++++ include/mmc.h | 5 +++++ 3 files changed, 55 insertions(+)
common/cmd_mmc.c +29 -0
@@ -338,6 +338,33 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])/* acknowledge to be sent during boot operation */ return mmc_set_part_conf (mmc, ack, part_num, access); + }else if (strcmp (argv[1 ],"bootbus" ) ==0 ) { +int dev; +struct mmc *mmc; +u8 width, reset, mode; + +if (argc ==6 ) { + dev =simple_strtoul (argv[2 ],NULL ,10 ); + width =simple_strtoul (argv[3 ],NULL ,10 ); + reset =simple_strtoul (argv[4 ],NULL ,10 ); + mode =simple_strtoul (argv[5 ],NULL ,10 ); + }else { +return CMD_RET_USAGE ; + } + + mmc =find_mmc_device (dev); +if (!mmc) { +printf ("no mmc device at slot %x\n" , dev); +return 1 ; + } + +if (IS_SD (mmc)) { +puts ("BOOT_BUS_WIDTH only exists on eMMC\n" ); +return 1 ; + } + +/* acknowledge to be sent during boot operation */ +return mmc_set_boot_bus_width (mmc, width, reset, mode); }else if (strcmp (argv[1 ],"bootpart-resize" ) ==0 ) {int dev;struct mmc *mmc;
@@ -475,6 +502,8 @@ U_BOOT_CMD(" - Enable boot_part for booting and enable R/W access of boot_part\n" "mmc close <dev> <boot_partition>\n" " - Enable boot_part for booting and disable access to boot_part\n" +"mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode\n" +" - Set the BOOT_BUS_WIDTH field of the specified device\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" " - Change sizes of boot and RPMB partitions of specified device\n" "mmc partconf dev boot_ack boot_partition partition_access\n"
drivers/mmc/mmc.c +21 -0
@@ -1507,6 +1507,27 @@ int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access) }/* +* Modify EXT_CSD[177] which is BOOT_BUS_WIDTH +* based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH +* and BOOT_MODE. +* +* Returns 0 on success. +*/ +int mmc_set_boot_bus_width (struct mmc *mmc,u8 width,u8 reset,u8 mode) +{ +int err; + + err =mmc_switch (mmc,EXT_CSD_CMD_SET_NORMAL ,EXT_CSD_BOOT_BUS_WIDTH , +EXT_CSD_BOOT_BUS_WIDTH_MODE (mode) | +EXT_CSD_BOOT_BUS_WIDTH_RESET (reset) | +EXT_CSD_BOOT_BUS_WIDTH_WIDTH (width)); + +if (err) +return err; +return 0 ; +} + +/* * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG) * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and * PARTITION_ACCESS.
include/mmc.h +5 -0
@@ -187,6 +187,9 @@#define EXT_CSD_BOOT_PART_NUM (x) (x << 3)#define EXT_CSD_PARTITION_ACCESS (x) (x << 0) +#define EXT_CSD_BOOT_BUS_WIDTH_MODE (x) (x << 3) +#define EXT_CSD_BOOT_BUS_WIDTH_RESET (x) (x << 2) +#define EXT_CSD_BOOT_BUS_WIDTH_WIDTH (x) (x)#define R1_ILLEGAL_COMMAND (1 << 22)#define R1_APP_CMD (1 << 5)
@@ -314,6 +317,8 @@ int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/* Function to modify the PARTITION_CONFIG field of EXT_CSD */ int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access); +/* Function to modify the BOOT_BUS_WIDTH field of EXT_CSD */ +int mmc_set_boot_bus_width (struct mmc *mmc,u8 width,u8 reset,u8 mode);/** * Start device initialization and return immediately; it does not block on
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 5/8 cmd_mmc.c: Add bootbus mmc sub-command
Hi Tom,
Quoted 116 lines · Tom Rini
Add a bootbus sub-command to the mmc command to allow for setting the
boot_bus_width,reset_boot_bus_widthandboot_modefields ofBOOT_BUS_WIDTH(EXT_CSD[177]).Acked-by Jaehoon Chung <[email protected]>Signed-off-by Tom Rini <[email protected]>---
common/cmd_mmc.c | 29 +++++++++++++++++++++++++++++ drivers/mmc/mmc.c | 21 +++++++++++++++++++++ include/mmc.h | 5 +++++ 3 files changed, 55 insertions(+)common/cmd_mmc.c +29
-0@@ -338,6 +338,33 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])/* acknowledge to be sent during boot operation */ return mmc_set_part_conf (mmc, ack, part_num, access); + }else if (strcmp (argv[1 ],"bootbus" ) ==0 ) { +int dev; +struct mmc *mmc; +u8 width, reset, mode; + +if (argc ==6 ) { + dev =simple_strtoul (argv[2 ],NULL ,10 ); + width =simple_strtoul (argv[3 ],NULL ,10 ); + reset =simple_strtoul (argv[4 ],NULL ,10 ); + mode =simple_strtoul (argv[5 ],NULL ,10 ); + }else { +return CMD_RET_USAGE ; + } + + mmc =find_mmc_device (dev); +if (!mmc) { +printf ("no mmc device at slot %x\n" , dev); +return 1 ; + } + +if (IS_SD (mmc)) { +puts ("BOOT_BUS_WIDTH only exists on eMMC\n" ); +return 1 ; + } + +/* acknowledge to be sent during boot operation */ +return mmc_set_boot_bus_width (mmc, width, reset, mode); }else if (strcmp (argv[1 ],"bootpart-resize" ) ==0 ) {int dev;struct mmc *mmc;@@ -475,6 +502,8 @@ U_BOOT_CMD(" - Enable boot_part for booting and enable R/W access of boot_part\n" "mmc close <dev> <boot_partition>\n" " - Enable boot_part for booting and disable access to boot_part\n" +"mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode\n" +" - Set the BOOT_BUS_WIDTH field of the specified device\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" " - Change sizes of boot and RPMB partitions of specified device\n" "mmc partconf dev boot_ack boot_partition partition_access\n" drivers/mmc/mmc.c +21
-0@@ -1507,6 +1507,27 @@ int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access) }/* +* Modify EXT_CSD[177] which is BOOT_BUS_WIDTH +* based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH +* and BOOT_MODE. +* +* Returns 0 on success. +*/ +int mmc_set_boot_bus_width (struct mmc *mmc,u8 width,u8 reset,u8 mode) +{ +int err; + + err =mmc_switch (mmc,EXT_CSD_CMD_SET_NORMAL ,EXT_CSD_BOOT_BUS_WIDTH , +EXT_CSD_BOOT_BUS_WIDTH_MODE (mode) | +EXT_CSD_BOOT_BUS_WIDTH_RESET (reset) | +EXT_CSD_BOOT_BUS_WIDTH_WIDTH (width)); + +if (err) +return err; +return 0 ; +} + +/* * Modify EXT_CSD[179] which is PARTITION_CONFIG (formerly BOOT_CONFIG) * based on the passed in values for BOOT_ACK, BOOT_PARTITION_ENABLE and * PARTITION_ACCESS. include/mmc.h +5
-0@@ -187,6 +187,9 @@#define EXT_CSD_BOOT_PART_NUM (x) (x << 3)#define EXT_CSD_PARTITION_ACCESS (x) (x << 0) +#define EXT_CSD_BOOT_BUS_WIDTH_MODE (x) (x << 3) +#define EXT_CSD_BOOT_BUS_WIDTH_RESET (x) (x << 2) +#define EXT_CSD_BOOT_BUS_WIDTH_WIDTH (x) (x)#define R1_ILLEGAL_COMMAND (1 << 22)#define R1_APP_CMD (1 << 5)@@ -314,6 +317,8 @@ int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/* Function to modify the PARTITION_CONFIG field of EXT_CSD */ int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access); +/* Function to modify the BOOT_BUS_WIDTH field of EXT_CSD */ +int mmc_set_boot_bus_width (struct mmc *mmc,u8 width,u8 reset,u8 mode);/** * Start device initialization and return immediately; it does not block on Signature · 1 line
1.7.9.5
Applied. Thanks.
PATCH v3 6/8 cmd_mmc.c: Drop open/close mmc sub-commands
In reply to Tom RiniThe open and close mmc sub-commands implement a hard-coded set of values specific to the SMDK5250 platform. Remove these commands as what they did can be done instead with a series of mmc dev / bootpart / bootbus commands instead now.
--- common/cmd_mmc.c | 72 ----------------------------------------------------- drivers/mmc/mmc.c | 65 ----------------------------------------------- include/mmc.h | 2 -- 3 files changed, 139 deletions(-)
common/cmd_mmc.c +0 -72
@@ -131,36 +131,6 @@ U_BOOT_CMD("- display info of the current MMC device" ); -#ifdef CONFIG_SUPPORT_EMMC_BOOT -static int boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access) -{ -int err; - err =mmc_boot_part_access (mmc, ack, part_num, access); - -if ((err ==0 ) && (access !=0 )) { -printf ("\t\t\t!!!Notice!!!\n" ); - -printf ("!You must close EMMC boot Partition" ); -printf ("after all images are written\n" ); - -printf ("!EMMC boot partition has continuity" ); -printf ("at image writing time.\n" ); - -printf ("!So, do not close the boot partition" ); -printf ("before all images are written.\n" ); -return 0 ; - }else if ((err ==0 ) && (access ==0 )) -return 0 ; -else if ((err !=0 ) && (access !=0 )) { -printf ("EMMC boot partition-%d OPEN Failed.\n" , part_num); -return 1 ; - }else { -printf ("EMMC boot partition-%d CLOSE Failed.\n" , part_num); -return 1 ; - } -} -#endif -static int do_mmcops (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[]) {enum mmc_state state;
@@ -273,44 +243,6 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])return 0 ; #ifdef CONFIG_SUPPORT_EMMC_BOOT - }else if ((strcmp (argv[1 ],"open" ) ==0 ) || - (strcmp (argv[1 ],"close" ) ==0 )) { -int dev; -struct mmc *mmc; -u8 part_num, access =0 ; - -if (argc ==4 ) { - dev =simple_strtoul (argv[2 ],NULL ,10 ); - part_num =simple_strtoul (argv[3 ],NULL ,10 ); - }else { -return CMD_RET_USAGE ; - } - - mmc =find_mmc_device (dev); -if (!mmc) { -printf ("no mmc device at slot %x\n" , dev); -return 1 ; - } - -if (IS_SD (mmc)) { -printf ("SD device cannot be opened/closed\n" ); -return 1 ; - } - -if ((part_num <=0 ) || (part_num >MMC_NUM_BOOT_PARTITION )) { -printf ("Invalid boot partition number:\n" ); -printf ("Boot partition number cannot be <= 0\n" ); -printf ("EMMC44 supports only 2 boot partitions\n" ); -return 1 ; - } - -if (strcmp (argv[1 ],"open" ) ==0 ) - access = part_num;/* enable R/W access to boot part*/ -else - access =0 ;/* No access to boot partition */ - -/* acknowledge to be sent during boot operation */ -return boot_part_access (mmc,1 , part_num, access); }else if (strcmp (argv[1 ],"partconf" ) ==0 ) {int dev;struct mmc *mmc;
@@ -498,10 +430,6 @@ U_BOOT_CMD("mmc dev [dev] [part] - show or set current mmc device [partition]\n" "mmc list - lists available devices\n" #ifdef CONFIG_SUPPORT_EMMC_BOOT -"mmc open <dev> <boot_partition>\n" -" - Enable boot_part for booting and enable R/W access of boot_part\n" -"mmc close <dev> <boot_partition>\n" -" - Enable boot_part for booting and disable access to boot_part\n" "mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode\n" " - Set the BOOT_BUS_WIDTH field of the specified device\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n"
drivers/mmc/mmc.c +0 -65
71 lines not on this page · raw message
include/mmc.h +0 -2
@@ -313,8 +313,6 @@ int mmc_set_dsr(struct mmc *mmc, u16 val);/* Function to change the size of boot partition and rpmb partitions */ int mmc_boot_partition_size_change (struct mmc *mmc,unsigned long bootsize,unsigned long rpmbsize); -/* Function to send commands to open/close the specified boot partition */ -int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/* Function to modify the PARTITION_CONFIG field of EXT_CSD */ int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/* Function to modify the BOOT_BUS_WIDTH field of EXT_CSD */
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 6/8 cmd_mmc.c: Drop open/close mmc sub-commands
Hi Tom,
Quoted 203 lines · Tom Rini
The open and close mmc sub-commands implement a hard-coded set of values specific to the SMDK5250 platform. Remove these commands as what they did can be done instead with a series of mmc dev / bootpart / bootbus commands instead now.
Cc Amar <[email protected]>Cc Minkyu Kang <[email protected]>Acked-by Jaehoon Chung <[email protected]>Signed-off-by Tom Rini <[email protected]>---
common/cmd_mmc.c | 72 ----------------------------------------------------- drivers/mmc/mmc.c | 65 ----------------------------------------------- include/mmc.h | 2 -- 3 files changed, 139 deletions(-)common/cmd_mmc.c +0
-72@@ -131,36 +131,6 @@ U_BOOT_CMD("- display info of the current MMC device" ); -#ifdef CONFIG_SUPPORT_EMMC_BOOT -static int boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access) -{ -int err; - err =mmc_boot_part_access (mmc, ack, part_num, access); - -if ((err ==0 ) && (access !=0 )) { -printf ("\t\t\t!!!Notice!!!\n" ); - -printf ("!You must close EMMC boot Partition" ); -printf ("after all images are written\n" ); - -printf ("!EMMC boot partition has continuity" ); -printf ("at image writing time.\n" ); - -printf ("!So, do not close the boot partition" ); -printf ("before all images are written.\n" ); -return 0 ; - }else if ((err ==0 ) && (access ==0 )) -return 0 ; -else if ((err !=0 ) && (access !=0 )) { -printf ("EMMC boot partition-%d OPEN Failed.\n" , part_num); -return 1 ; - }else { -printf ("EMMC boot partition-%d CLOSE Failed.\n" , part_num); -return 1 ; - } -} -#endif -static int do_mmcops (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[]) {enum mmc_state state;@@ -273,44 +243,6 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])return 0 ; #ifdef CONFIG_SUPPORT_EMMC_BOOT - }else if ((strcmp (argv[1 ],"open" ) ==0 ) || - (strcmp (argv[1 ],"close" ) ==0 )) { -int dev; -struct mmc *mmc; -u8 part_num, access =0 ; - -if (argc ==4 ) { - dev =simple_strtoul (argv[2 ],NULL ,10 ); - part_num =simple_strtoul (argv[3 ],NULL ,10 ); - }else { -return CMD_RET_USAGE ; - } - - mmc =find_mmc_device (dev); -if (!mmc) { -printf ("no mmc device at slot %x\n" , dev); -return 1 ; - } - -if (IS_SD (mmc)) { -printf ("SD device cannot be opened/closed\n" ); -return 1 ; - } - -if ((part_num <=0 ) || (part_num >MMC_NUM_BOOT_PARTITION )) { -printf ("Invalid boot partition number:\n" ); -printf ("Boot partition number cannot be <= 0\n" ); -printf ("EMMC44 supports only 2 boot partitions\n" ); -return 1 ; - } - -if (strcmp (argv[1 ],"open" ) ==0 ) - access = part_num;/* enable R/W access to boot part*/ -else - access =0 ;/* No access to boot partition */ - -/* acknowledge to be sent during boot operation */ -return boot_part_access (mmc,1 , part_num, access); }else if (strcmp (argv[1 ],"partconf" ) ==0 ) {int dev;struct mmc *mmc;@@ -498,10 +430,6 @@ U_BOOT_CMD("mmc dev [dev] [part] - show or set current mmc device [partition]\n" "mmc list - lists available devices\n" #ifdef CONFIG_SUPPORT_EMMC_BOOT -"mmc open <dev> <boot_partition>\n" -" - Enable boot_part for booting and enable R/W access of boot_part\n" -"mmc close <dev> <boot_partition>\n" -" - Enable boot_part for booting and disable access to boot_part\n" "mmc bootbus dev boot_bus_width reset_boot_bus_width boot_mode\n" " - Set the BOOT_BUS_WIDTH field of the specified device\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size MB>\n" drivers/mmc/mmc.c +0
-65@@ -1442,71 +1442,6 @@ int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize, }/* -* This function shall form and send the commands to open / close the -* boot partition specified by user. -* -* Input Parameters: -* ack: 0x0 - No boot acknowledge sent (default) -* 0x1 - Boot acknowledge sent during boot operation -* part_num: User selects boot data that will be sent to master -* 0x0 - Device not boot enabled (default) -* 0x1 - Boot partition 1 enabled for boot -* 0x2 - Boot partition 2 enabled for boot -* access: User selects partitions to access -* 0x0 : No access to boot partition (default) -* 0x1 : R/W boot partition 1 -* 0x2 : R/W boot partition 2 -* 0x3 : R/W Replay Protected Memory Block (RPMB) -* -* Returns 0 on success. -*/ -int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access) -{ -int err; -struct mmc_cmd cmd; - -/* Boot ack enable, boot partition enable , boot partition access */ - cmd.cmdidx =MMC_CMD_SWITCH ; - cmd.resp_type = MMC_RSP_R1b; - - cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE <<24 ) | - (EXT_CSD_PART_CONF <<16 ) | - ((EXT_CSD_BOOT_ACK (ack) | -EXT_CSD_BOOT_PART_NUM (part_num) | -EXT_CSD_PARTITION_ACCESS (access)) <<8 ); - - err =mmc_send_cmd (mmc, &cmd,NULL ); -if (err) { -if (access) { -debug ("mmc boot partition#%d open fail:Error1 = %d\n" , - part_num, err); - }else { -debug ("mmc boot partition#%d close fail:Error = %d\n" , - part_num, err); - } -return err; - } - -if (access) { -/* 4bit transfer mode at booting time. */ - cmd.cmdidx =MMC_CMD_SWITCH ; - cmd.resp_type = MMC_RSP_R1b; - - cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE <<24 ) | - (EXT_CSD_BOOT_BUS_WIDTH <<16 ) | - ((1 <<0 ) <<8 ); - - err =mmc_send_cmd (mmc, &cmd,NULL ); -if (err) { -debug ("mmc boot partition#%d open fail:Error2 = %d\n" , - part_num, err); -return err; - } - } -return 0 ; -} - -/* * Modify EXT_CSD[177] which is BOOT_BUS_WIDTH * based on the passed in values for BOOT_BUS_WIDTH, RESET_BOOT_BUS_WIDTH * and BOOT_MODE. include/mmc.h +0
-2@@ -313,8 +313,6 @@ int mmc_set_dsr(struct mmc *mmc, u16 val);/* Function to change the size of boot partition and rpmb partitions */ int mmc_boot_partition_size_change (struct mmc *mmc,unsigned long bootsize,unsigned long rpmbsize); -/* Function to send commands to open/close the specified boot partition */ -int mmc_boot_part_access (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/* Function to modify the PARTITION_CONFIG field of EXT_CSD */ int mmc_set_part_conf (struct mmc *mmc,u8 ack,u8 part_num,u8 access);/* Function to modify the BOOT_BUS_WIDTH field of EXT_CSD */ Signature · 1 line
1.7.9.5
Applied. Thanks.
PATCH v3 7/8 omap5_uevm: Add CONFIG_SUPPORT_EMMC_BOOT, document usage
In reply to Tom RiniAdd a README to the board which lists the commands required to enable booting from the eMMC boot partitions found on the board.
--- board/ti/omap5_uevm/README | 25 +++++++++++++++++++++++++ include/configs/omap5_uevm.h | 1 + 2 files changed, 26 insertions(+) create mode 100644 board/ti/omap5_uevm/README
board/ti/omap5_uevm/README new file +25 -0
@@ -0,0 +1,25 @@ +Summary +======= + +This document covers various features of the 'omap5_uevm' build and some +related uses. + +eMMC boot partition use +======================= + +It is possible, depending on SYSBOOT configuration to boot from the eMMC +boot partitions using (name depending on documentation referenced) +Alternative Boot operation mode or Boot Sequence Option 1/2. In this +example we load MLO and u-boot.img from the build into DDR and then use +'mmc bootbus' to set the required rate (see TRM) and 'mmc partconfig' to +set boot0 as the boot device. +U-Boot # setenv autoload no +U-Boot # usb start +U-Boot # dhcp +U-Boot # mmc dev 1 1 +U-Boot # tftp ${loadaddr} omap5uevm/MLO +U-Boot # mmc write ${loadaddr} 0 100 +U-Boot # tftp ${loadaddr} omap5uevm/u-boot.img +U-Boot # mmc write ${loadaddr} 300 400 +U-Boot # mmc bootbus 1 2 0 2 +U-Boot # mmc partconf 1 1 1 0
include/configs/omap5_uevm.h +1 -0
@@ -37,6 +37,7 @@#define CONFIG_PARTITION_UUIDS #define CONFIG_CMD_PART #define CONFIG_HSMMC2_8BIT +#define CONFIG_SUPPORT_EMMC_BOOT /* Required support for the TCA642X GPIO we have on the uEVM */ #define CONFIG_TCA642X
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 7/8 omap5_uevm: Add CONFIG_SUPPORT_EMMC_BOOT, document usage
Hi Tom,
Quoted 55 lines · Tom Rini
Add a README to the board which lists the commands required to enable booting from the eMMC boot partitions found on the board.
Signed-off-by Tom Rini <[email protected]>---
board/ti/omap5_uevm/README | 25 +++++++++++++++++++++++++include/configs/omap5_uevm.h| 1 +2 files changed, 26 insertions(+)create mode 100644 board/ti/omap5_uevm/README
board/ti/omap5_uevm/README new file +25
-0@@ -0,0 +1,25 @@ +Summary +======= + +This document covers various features of the 'omap5_uevm' build and some +related uses. + +eMMC boot partition use +======================= + +It is possible, depending on SYSBOOT configuration to boot from the eMMC +boot partitions using (name depending on documentation referenced) +Alternative Boot operation mode or Boot Sequence Option 1/2. In this +example we load MLO and u-boot.img from the build into DDR and then use +'mmc bootbus' to set the required rate (see TRM) and 'mmc partconfig' to +set boot0 as the boot device. +U-Boot # setenv autoload no +U-Boot # usb start +U-Boot # dhcp +U-Boot # mmc dev 1 1 +U-Boot # tftp ${loadaddr} omap5uevm/MLO +U-Boot # mmc write ${loadaddr} 0 100 +U-Boot # tftp ${loadaddr} omap5uevm/u-boot.img +U-Boot # mmc write ${loadaddr} 300 400 +U-Boot # mmc bootbus 1 2 0 2 +U-Boot # mmc partconf 1 1 1 0include/configs/omap5_uevm.h +1
-0@@ -37,6 +37,7 @@#define CONFIG_PARTITION_UUIDS #define CONFIG_CMD_PART #define CONFIG_HSMMC2_8BIT +#define CONFIG_SUPPORT_EMMC_BOOT /* Required support for the TCA642X GPIO we have on the uEVM */ #define CONFIG_TCA642X Signature · 1 line
1.7.9.5
Applied. Thanks.
PATCH v3 8/8 dra7xx_evm: Add CONFIG_SUPPORT_EMMC_BOOT, document usage
In reply to Tom RiniAdd a README to the board which lists the commands required to enable booting from the eMMC boot partitions found on the board.
--- board/ti/dra7xx/README | 25 +++++++++++++++++++++++++ include/configs/dra7xx_evm.h | 2 ++ 2 files changed, 27 insertions(+) create mode 100644 board/ti/dra7xx/README
board/ti/dra7xx/README new file +25 -0
@@ -0,0 +1,25 @@ +Summary +======= + +This document covers various features of the 'dra7xx_evm' build and some +related uses. + +eMMC boot partition use +======================= + +It is possible, depending on SYSBOOT configuration to boot from the eMMC +boot partitions using (name depending on documentation referenced) +Alternative Boot operation mode or Boot Sequence Option 1/2. In this +example we load MLO and u-boot.img from the build into DDR and then use +'mmc bootbus' to set the required rate (see TRM) and 'mmc partconfig' to +set boot0 as the boot device. +U-Boot # setenv autoload no +U-Boot # usb start +U-Boot # dhcp +U-Boot # mmc dev 1 1 +U-Boot # tftp ${loadaddr} dra7xx/MLO +U-Boot # mmc write ${loadaddr} 0 100 +U-Boot # tftp ${loadaddr} dra7xx/u-boot.img +U-Boot # mmc write ${loadaddr} 300 400 +U-Boot # mmc bootbus 1 2 0 2 +U-Boot # mmc partconf 1 1 1 0
include/configs/dra7xx_evm.h +2 -0
@@ -73,6 +73,8 @@#define CONFIG_SPL_SPI_CS 0#define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000 +#define CONFIG_SUPPORT_EMMC_BOOT +/* USB xHCI HOST */ #define CONFIG_CMD_USB #define CONFIG_USB_HOST
Signature · 1 line
1.7.9.5
Pantelis Antoniou
AppliedPATCH v3 8/8 dra7xx_evm: Add CONFIG_SUPPORT_EMMC_BOOT, document usage
Hi Tom,
Quoted 57 lines · Tom Rini
Add a README to the board which lists the commands required to enable booting from the eMMC boot partitions found on the board.
Cc Lokesh Vutla <[email protected]>Signed-off-by Tom Rini <[email protected]>---
board/ti/dra7xx/README | 25 +++++++++++++++++++++++++include/configs/dra7xx_evm.h| 2 ++2 files changed, 27 insertions(+)create mode 100644 board/ti/dra7xx/README
board/ti/dra7xx/README new file +25
-0@@ -0,0 +1,25 @@ +Summary +======= + +This document covers various features of the 'dra7xx_evm' build and some +related uses. + +eMMC boot partition use +======================= + +It is possible, depending on SYSBOOT configuration to boot from the eMMC +boot partitions using (name depending on documentation referenced) +Alternative Boot operation mode or Boot Sequence Option 1/2. In this +example we load MLO and u-boot.img from the build into DDR and then use +'mmc bootbus' to set the required rate (see TRM) and 'mmc partconfig' to +set boot0 as the boot device. +U-Boot # setenv autoload no +U-Boot # usb start +U-Boot # dhcp +U-Boot # mmc dev 1 1 +U-Boot # tftp ${loadaddr} dra7xx/MLO +U-Boot # mmc write ${loadaddr} 0 100 +U-Boot # tftp ${loadaddr} dra7xx/u-boot.img +U-Boot # mmc write ${loadaddr} 300 400 +U-Boot # mmc bootbus 1 2 0 2 +U-Boot # mmc partconf 1 1 1 0include/configs/dra7xx_evm.h +2
-0@@ -73,6 +73,8 @@#define CONFIG_SPL_SPI_CS 0#define CONFIG_SYS_SPI_U_BOOT_OFFS 0x20000 +#define CONFIG_SUPPORT_EMMC_BOOT +/* USB xHCI HOST */ #define CONFIG_CMD_USB #define CONFIG_USB_HOST Signature · 1 line
1.7.9.5
Applied. Thanks.
Pantelis Antoniou
AppliedPATCH v3 1/8 SPL: Add CONFIG_SUPPORT_EMMC_BOOT support to CONFIG_SPL_FRAMEWORK
In reply to Tom RiniHi Tom,
Quoted 90 lines · Tom Rini
We use the switch
CONFIG_SUPPORT_EMMC_BOOTtoday to enable some additional features of the eMMC boot partitions. Add support for being told that we have booted from one of these partitions to the spl framework and implement this on TI OMAP/related.Cc Pantelis Antoniou <[email protected]>Signed-off-by Tom Rini <[email protected]>---
Changes in v3:
- Rework eMMC boot detect logic for TI platforms, in the eMMC boot case we rely on non-FAT/RAW values being in bootmode.
---arch/arm/cpu/armv7/omap-common/boot-common.c | 13 ++++++++++++- common/spl/spl_mmc.c | 24 ++++++++++++++++++++++++ include/spl.h | 1 + 3 files changed, 37 insertions(+), 1 deletion(-)arch/arm/cpu/armv7/omap-common/boot-common.c +12
-1@@ -66,7 +66,18 @@ u32 spl_boot_device(void)u32 spl_boot_mode (void ) { -return gd->arch.omap_boot_params.omap_bootmode; +u32 val = gd->arch.omap_boot_params.omap_bootmode; + +if (val ==MMCSD_MODE_RAW ) +return MMCSD_MODE_RAW ; +else if (val ==MMCSD_MODE_FAT ) +return MMCSD_MODE_FAT ; + else +#ifdef CONFIG_SUPPORT_EMMC_BOOT +return MMCSD_MODE_EMMCBOOT ; +#else +return MMCSD_MODE_UNDEFINED ; +#endif }void spl_board_init (void )common/spl/spl_mmc.c +24
-0@@ -111,6 +111,30 @@ void spl_mmc_load_image(void)CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION , CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME);#endif +#ifdef CONFIG_SUPPORT_EMMC_BOOT + }else if (boot_mode ==MMCSD_MODE_EMMCBOOT ) { +/* +* We need to check what the partition is configured to. +* 1 and 2 match up to boot0 / boot1 and 7 is user data +* which is the first physical partition (0). +*/ +int part = (mmc->part_config >>3 ) &PART_ACCESS_MASK ; + +if (part ==7 ) + part =0 ; + +if (mmc_switch_part (0 , part)) { +#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT +puts ("MMC partition switch failed\n" ); +#endif +hang (); + } +#ifdef CONFIG_SPL_OS_BOOT +if (spl_start_uboot () ||mmc_load_image_raw_os (mmc)) +#endif + err =mmc_load_image_raw (mmc, +CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR ); +#endif }else {#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT puts ("spl: wrong MMC boot mode\n" );include/spl.h +1
-0@@ -16,6 +16,7 @@#define MMCSD_MODE_UNDEFINED 0#define MMCSD_MODE_RAW 1#define MMCSD_MODE_FAT 2 +#define MMCSD_MODE_EMMCBOOT 3struct spl_image_info {const char *name;Signature · 1 line
1.7.9.5
Applied. Thanks.