diff mbox series

[v4] mmc: Update environment variable with active partition

Message ID 1620944143-112667-1-git-send-email-reuben.dowle@4rf.com
State Accepted
Commit 5c2beda545dde4d27c0e893e97c74740ff27ff2f
Delegated to: Peng Fan
Headers show
Series [v4] mmc: Update environment variable with active partition | expand

Commit Message

Reuben Dowle May 13, 2021, 10:15 p.m. UTC
This patch allows uboot scripts make choices about where to boot from based
on the active mmc boot partition. This allows having two copies of kernel,
filesystems etc, and choosing which to boot from based off of the active
bootloader partition.

Signed-off-by: Reuben Dowle <reuben.dowle@4rf.com>
---
 cmd/mmc.c         | 14 +++++++++-----
 doc/usage/mmc.rst |  4 +++-
 2 files changed, 12 insertions(+), 6 deletions(-)

Comments

Jaehoon Chung May 13, 2021, 11:20 p.m. UTC | #1
On 5/14/21 7:15 AM, Reuben Dowle wrote:
> This patch allows uboot scripts make choices about where to boot from based
> on the active mmc boot partition. This allows having two copies of kernel,
> filesystems etc, and choosing which to boot from based off of the active
> bootloader partition.
> 
> Signed-off-by: Reuben Dowle <reuben.dowle@4rf.com>

Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>

Best Regards,
Jaehoon Chung

> ---
>  cmd/mmc.c         | 14 +++++++++-----
>  doc/usage/mmc.rst |  4 +++-
>  2 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/cmd/mmc.c b/cmd/mmc.c
> index a10f137..b942576 100644
> --- a/cmd/mmc.c
> +++ b/cmd/mmc.c
> @@ -808,7 +808,7 @@ static int do_mmc_boot_resize(struct cmd_tbl *cmdtp, int flag,
>  	return CMD_RET_SUCCESS;
>  }
>  
> -static int mmc_partconf_print(struct mmc *mmc)
> +static int mmc_partconf_print(struct mmc *mmc, const char *varname)
>  {
>  	u8 ack, access, part;
>  
> @@ -821,6 +821,9 @@ static int mmc_partconf_print(struct mmc *mmc)
>  	ack = EXT_CSD_EXTRACT_BOOT_ACK(mmc->part_config);
>  	part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config);
>  
> +	if(varname)
> +		env_set_hex(varname, part);
> +
>  	printf("EXT_CSD[179], PARTITION_CONFIG:\n"
>  		"BOOT_ACK: 0x%x\n"
>  		"BOOT_PARTITION_ENABLE: 0x%x\n"
> @@ -836,7 +839,7 @@ static int do_mmc_partconf(struct cmd_tbl *cmdtp, int flag,
>  	struct mmc *mmc;
>  	u8 ack, part_num, access;
>  
> -	if (argc != 2 && argc != 5)
> +	if (argc != 2 && argc != 3 && argc != 5)
>  		return CMD_RET_USAGE;
>  
>  	dev = simple_strtoul(argv[1], NULL, 10);
> @@ -850,8 +853,8 @@ static int do_mmc_partconf(struct cmd_tbl *cmdtp, int flag,
>  		return CMD_RET_FAILURE;
>  	}
>  
> -	if (argc == 2)
> -		return mmc_partconf_print(mmc);
> +	if (argc == 2 || argc == 3)
> +		return mmc_partconf_print(mmc, argc == 3 ? argv[2] : NULL);
>  
>  	ack = simple_strtoul(argv[2], NULL, 10);
>  	part_num = simple_strtoul(argv[3], NULL, 10);
> @@ -1061,8 +1064,9 @@ U_BOOT_CMD(
>  	" - 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"
> +	"mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]\n"
>  	" - Show or change the bits of the PARTITION_CONFIG field of the specified device\n"
> +	"   If showing the bits, optionally store the boot_partition field into varname\n"
>  	"mmc rst-function <dev> <value>\n"
>  	" - Change the RST_n_FUNCTION field of the specified device\n"
>  	"   WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values.\n"
> diff --git a/doc/usage/mmc.rst b/doc/usage/mmc.rst
> index 57284ed..b72e5f8 100644
> --- a/doc/usage/mmc.rst
> +++ b/doc/usage/mmc.rst
> @@ -19,7 +19,7 @@ Synopsis
>      mmc wp
>      mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
>      mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
> -    mmc partconf <dev> [boot_ack boot_partition partition_access]
> +    mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]
>      mmc rst-function <dev> <value>
>  
>  Description
> @@ -92,6 +92,8 @@ The 'mmc bootbus' command sets the BOOT_BUS_WIDTH field. (*Refer to eMMC specifi
>  
>  The 'mmc partconf' command shows or changes PARTITION_CONFIG field.
>  
> +    varname
> +        When showing the PARTITION_CONFIG, an optional environment variable to store the current boot_partition value into.
>      boot_ack
>          boot acknowledge value
>      boot_partition
>
diff mbox series

Patch

diff --git a/cmd/mmc.c b/cmd/mmc.c
index a10f137..b942576 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -808,7 +808,7 @@  static int do_mmc_boot_resize(struct cmd_tbl *cmdtp, int flag,
 	return CMD_RET_SUCCESS;
 }
 
-static int mmc_partconf_print(struct mmc *mmc)
+static int mmc_partconf_print(struct mmc *mmc, const char *varname)
 {
 	u8 ack, access, part;
 
@@ -821,6 +821,9 @@  static int mmc_partconf_print(struct mmc *mmc)
 	ack = EXT_CSD_EXTRACT_BOOT_ACK(mmc->part_config);
 	part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config);
 
+	if(varname)
+		env_set_hex(varname, part);
+
 	printf("EXT_CSD[179], PARTITION_CONFIG:\n"
 		"BOOT_ACK: 0x%x\n"
 		"BOOT_PARTITION_ENABLE: 0x%x\n"
@@ -836,7 +839,7 @@  static int do_mmc_partconf(struct cmd_tbl *cmdtp, int flag,
 	struct mmc *mmc;
 	u8 ack, part_num, access;
 
-	if (argc != 2 && argc != 5)
+	if (argc != 2 && argc != 3 && argc != 5)
 		return CMD_RET_USAGE;
 
 	dev = simple_strtoul(argv[1], NULL, 10);
@@ -850,8 +853,8 @@  static int do_mmc_partconf(struct cmd_tbl *cmdtp, int flag,
 		return CMD_RET_FAILURE;
 	}
 
-	if (argc == 2)
-		return mmc_partconf_print(mmc);
+	if (argc == 2 || argc == 3)
+		return mmc_partconf_print(mmc, argc == 3 ? argv[2] : NULL);
 
 	ack = simple_strtoul(argv[2], NULL, 10);
 	part_num = simple_strtoul(argv[3], NULL, 10);
@@ -1061,8 +1064,9 @@  U_BOOT_CMD(
 	" - 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"
+	"mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]\n"
 	" - Show or change the bits of the PARTITION_CONFIG field of the specified device\n"
+	"   If showing the bits, optionally store the boot_partition field into varname\n"
 	"mmc rst-function <dev> <value>\n"
 	" - Change the RST_n_FUNCTION field of the specified device\n"
 	"   WARNING: This is a write-once field and 0 / 1 / 2 are the only valid values.\n"
diff --git a/doc/usage/mmc.rst b/doc/usage/mmc.rst
index 57284ed..b72e5f8 100644
--- a/doc/usage/mmc.rst
+++ b/doc/usage/mmc.rst
@@ -19,7 +19,7 @@  Synopsis
     mmc wp
     mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
     mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
-    mmc partconf <dev> [boot_ack boot_partition partition_access]
+    mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]
     mmc rst-function <dev> <value>
 
 Description
@@ -92,6 +92,8 @@  The 'mmc bootbus' command sets the BOOT_BUS_WIDTH field. (*Refer to eMMC specifi
 
 The 'mmc partconf' command shows or changes PARTITION_CONFIG field.
 
+    varname
+        When showing the PARTITION_CONFIG, an optional environment variable to store the current boot_partition value into.
     boot_ack
         boot acknowledge value
     boot_partition