
Hi Joshue,
On Wed, 23 Aug 2023 at 10:48, Joshua Watt jpewhacker@gmail.com wrote:
Adds an additional variable called gpt_partition_bootable that indicates if the given partition is bootable or not.
Signed-off-by: Joshua Watt JPEWhacker@gmail.com
cmd/gpt.c | 9 +++++++-- doc/usage/cmd/gpt.rst | 3 +++ test/py/tests/test_gpt.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/cmd/gpt.c b/cmd/gpt.c index e6f7b0319a..7a8990e400 100644 --- a/cmd/gpt.c +++ b/cmd/gpt.c @@ -723,7 +723,7 @@ static int gpt_enumerate(struct blk_desc *desc)
- gpt_setenv_part_variables() - setup partition environmental variables
- Setup the gpt_partition_name, gpt_partition_entry, gpt_partition_addr
- and gpt_partition_size environment variables.
- and gpt_partition_size, gpt_partition_bootable environment variables.
- @pinfo: pointer to disk partition
- @i: partition entry
@@ -750,6 +750,10 @@ static int gpt_setenv_part_variables(struct disk_partition *pinfo, int i) if (ret) goto fail;
ret = env_set_ulong("gpt_partition_bootable", !!(pinfo->bootable & PART_BOOTABLE));
if (ret)
goto fail;
return 0;
fail: @@ -1057,7 +1061,8 @@ U_BOOT_CMD(gpt, CONFIG_SYS_MAXARGS, 1, do_gpt, " gpt setenv mmc 0 $name\n" " - setup environment variables for partition $name:\n" " gpt_partition_addr, gpt_partition_size,\n"
" gpt_partition_name, gpt_partition_entry\n"
" gpt_partition_name, gpt_partition_entry,\n"
" gpt_partition_bootable\n"
Please use single quotes except for the """ for function headers.
" gpt enumerate mmc 0\n" " - store list of partitions to gpt_partition_list environment variable\n" " gpt guid <interface> <dev>\n"
diff --git a/doc/usage/cmd/gpt.rst b/doc/usage/cmd/gpt.rst index ea2cf73a60..c9d15b2cba 100644 --- a/doc/usage/cmd/gpt.rst +++ b/doc/usage/cmd/gpt.rst @@ -85,6 +85,7 @@ information about a particular partition. The variables are:
- gpt_partition_size (the size of the partition, in hexadecimal blocks)
- gpt_partition_name (the name of the partition)
- gpt_partition_entry (the partition number in the table, e.g. 1, 2, 3, etc.)
+* gpt_partition_bootable (1 if the partition is marked as bootable, 0 if not)
To get the information about the partition named 'rootfs', issue the following command: @@ -99,6 +100,8 @@ command: rootfs => echo ${gpt_partition_entry} 2
- => echo ${gpt_partition_bootable}
- 0
The 'gpt enumerate' command will set the variable 'gpt_partition_list' with the list of partition names on the device. For example: diff --git a/test/py/tests/test_gpt.py b/test/py/tests/test_gpt.py index 339468bc12..1537ceb8c8 100644 --- a/test/py/tests/test_gpt.py +++ b/test/py/tests/test_gpt.py @@ -49,6 +49,7 @@ class GptTestDiskImage(object): u_boot_utils.run_and_log(u_boot_console, cmd) # part1 offset 1MB size 1MB cmd = ('sgdisk', '--new=1:2048:4095', '--change-name=1:part1',
'-A 1:set:2', persistent) # part2 offset 2MB size 1.5MB u_boot_utils.run_and_log(u_boot_console, cmd)
@@ -117,6 +118,38 @@ def test_gpt_guid(state_disk_image, u_boot_console): output = u_boot_console.run_command('gpt guid host 0') assert '375a56f7-d6c9-4e81-b5f0-09d41ca89efe' in output
+@pytest.mark.boardspec('sandbox') +@pytest.mark.buildconfigspec('cmd_gpt') +@pytest.mark.requiredtool('sgdisk') +def test_gpt_setenv(state_disk_image, u_boot_console):
- """Test the gpt setenv command."""
- u_boot_console.run_command('host bind 0 ' + state_disk_image.path)
- output = u_boot_console.run_command('gpt setenv host 0 part1')
- assert 'success!' in output
- output = u_boot_console.run_command('echo ${gpt_partition_addr}')
- assert output.rstrip() == '800'
- output = u_boot_console.run_command('echo ${gpt_partition_size}')
- assert output.rstrip() == '800'
- output = u_boot_console.run_command('echo ${gpt_partition_name}')
- assert output.rstrip() == 'part1'
- output = u_boot_console.run_command('echo ${gpt_partition_entry}')
- assert output.rstrip() == "1"
- output = u_boot_console.run_command('echo ${gpt_partition_bootable}')
- assert output.rstrip() == "1"
- output = u_boot_console.run_command('gpt setenv host 0 part2')
- assert 'success!' in output
- output = u_boot_console.run_command('echo ${gpt_partition_addr}')
- assert output.rstrip() == '1000'
- output = u_boot_console.run_command('echo ${gpt_partition_size}')
- assert output.rstrip() == 'c00'
- output = u_boot_console.run_command('echo ${gpt_partition_name}')
- assert output.rstrip() == 'part2'
- output = u_boot_console.run_command('echo ${gpt_partition_entry}')
- assert output.rstrip() == "2"
- output = u_boot_console.run_command('echo ${gpt_partition_bootable}')
- assert output.rstrip() == "0"
@pytest.mark.boardspec('sandbox') @pytest.mark.buildconfigspec('cmd_gpt') @pytest.mark.requiredtool('sgdisk') -- 2.33.0
Regards, Simon