[PATCH v2] cmd: bcb: select user(0) hwpart in __bcb_load()
Sean Anderson
sean.anderson at seco.com
Thu Oct 13 17:24:41 CEST 2022
On 10/13/22 8:25 AM, Mattijs Korpershoek wrote:
> For some blk operations, it's possible that a different hw partition
> gets selected via blk_dselect_hwpart().
> In that case, only the region of the device covered by that partition
> is accessible.
>
> This breaks "bcb load" which attempts to read the gpt and assumes it's
> on the user(0) hw partition:
>
> => bcb load 2 misc
> GUID Partition Table Header signature is wrong: 0xDE7B17AD07D9E5D6 != 0x5452415020494645
> find_valid_gpt: *** ERROR: Invalid GPT ***
> GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645
> find_valid_gpt: *** ERROR: Invalid Backup GPT ***
> Error: mmc 2:misc read failed (-2)
>
> Add a fail-safe in __bcb_load() to ensure we will always read from the
> user(0) hwpartition.
>
> This fixes the following fastboot sequence:
>
> $ fastboot erase mmc2boot1 # switch to hwpart1
> $ fastboot reboot bootloader # switch to hwpart0, then reads GPT
>
> Signed-off-by: Mattijs Korpershoek <mkorpershoek at baylibre.com>
> ---
> Changes in v2:
>
> * Move hwpart selection into the bcb command instead of fb_mmc.c
> * Link to v1: https://lore.kernel.org/r/20221010-switch-hwpart-v1-0-52cbd34c72b7@baylibre.com
> ---
> cmd/bcb.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/cmd/bcb.c b/cmd/bcb.c
> index 1622a90c97f0..02d0c70d87e2 100644
> --- a/cmd/bcb.c
> +++ b/cmd/bcb.c
> @@ -14,6 +14,7 @@
> #include <part.h>
> #include <malloc.h>
> #include <memalign.h>
> +#include <linux/err.h>
>
> enum bcb_cmd {
> BCB_CMD_LOAD,
> @@ -128,6 +129,16 @@ static int __bcb_load(int devnum, const char *partp)
> goto err_read_fail;
> }
>
> + /*
> + * always select the USER mmc hwpart in case another
> + * blk operation selected a different hwpart
> + */
> + ret = blk_dselect_hwpart(desc, 0);
> + if (IS_ERR_VALUE(ret)) {
> + ret = -ENODEV;
> + goto err_read_fail;
> + }
> +
> part = simple_strtoul(partp, &endp, 0);
> if (*endp == '\0') {
> ret = part_get_info(desc, part, &info);
>
> ---
> base-commit: c4c32e359662aa95d9dbda2bd1272181bd9cb830
> change-id: 20221011-usb-hwpart-599c278980b3
>
> Best regards,
>
Reviewed-by: Sean Anderson <sean.anderson at seco.com>
More information about the U-Boot
mailing list