[PATCH 2/2] boot: extlinux: Fix unaligned buffer for reading data from file system

Simon Glass sjg at chromium.org
Thu Nov 7 14:44:30 CET 2024


Hi Nam,

On Wed, 6 Nov 2024 at 09:34, Nam Cao <namcao at linutronix.de> wrote:
>
> extlinux_read_bootflow() allocates a buffer to read from file system
> without any alignment.
>
> But for some block devices which transfer data via DMA, ARCH_DMA_MINALIGN
> alignment is required. For example, due to misaligned buffer, the below
> boot failure is observed.
>
> => boot
> CACHE: Misaligned operation at range [9efa25f8, 9efa27f8]
> CACHE: Misaligned operation at range [9efa25f8, 9efa27f8]
> CACHE: Misaligned operation at range [9efa25f8, 9efa27f8]
> CACHE: Misaligned operation at range [9efa25f8, 9efa27f8]
> ** Booting bootflow 'mmc at 2194000.bootdev.part_1' with extlinux
> Ignoring unknown command: �D���D��
> Boot failed (err=-14)
>
> Change the alignment to default (which is ARCH_DMA_MINALIGN).
>
> Fixes: 31aefaf89a5b ("bootstd: Add an implementation of distro boot")
> Signed-off-by: Nam Cao <namcao at linutronix.de>
> Tested-by: Javier Fernandez Pastrana <javier.pastrana at linutronix.de>
> ---
>  boot/bootmeth_extlinux.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/boot/bootmeth_extlinux.c b/boot/bootmeth_extlinux.c
> index ae0ad1d53e3..5424d179bf8 100644
> --- a/boot/bootmeth_extlinux.c
> +++ b/boot/bootmeth_extlinux.c
> @@ -127,7 +127,7 @@ static int extlinux_read_bootflow(struct udevice *dev, struct bootflow *bflow)
>                 return log_msg_ret("try", ret);
>         size = bflow->size;
>
> -       ret = bootmeth_alloc_file(bflow, 0x10000, 1);
> +       ret = bootmeth_alloc_file(bflow, 0x10000, 0);

Can you please use ARCH_DMA_MINALIGN here? Either that or update
bootmeth_script to do the same  as here.

>         if (ret)
>                 return log_msg_ret("read", ret);
>
> --
> 2.39.5
>

Regards,
Simon


More information about the U-Boot mailing list