[PATCH] fpga: versalpl: Fix unaligned buffer handling
Michal Simek
michal.simek at amd.com
Mon May 11 09:23:05 CEST 2026
On 5/7/26 13:33, Pranav Tilak wrote:
> When fpga load is called with a misaligned buffer address, the
> versal_align_dma_buffer() function shifts the pointer forward to the
> next aligned boundary and uses memcpy() to copy the data. Since the
> destination is ahead of the source and the regions overlap, memcpy()
> produces undefined behavior; in practice U-Boot's generic memcpy()
> copies forward, repeating the first ARCH_DMA_MINALIGN-aligned chunk
> throughout the buffer.
>
> Replace memcpy() with memmove() which correctly handles overlapping
> regions by copying backwards when the destination is ahead of the
> source.
>
> Fixes: 26e054c943a7 ("arm64: versal: fpga: Add PL bit stream load support")
> Signed-off-by: Pranav Tilak <pranav.vinaytilak at amd.com>
> ---
> drivers/fpga/versalpl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/fpga/versalpl.c b/drivers/fpga/versalpl.c
> index 630d1ecfea3..3cb56cc0dc9 100644
> --- a/drivers/fpga/versalpl.c
> +++ b/drivers/fpga/versalpl.c
> @@ -17,7 +17,7 @@ static ulong versal_align_dma_buffer(ulong *buf, u32 len)
>
> if ((ulong)buf != ALIGN((ulong)buf, ARCH_DMA_MINALIGN)) {
> new_buf = (ulong *)ALIGN((ulong)buf, ARCH_DMA_MINALIGN);
> - memcpy(new_buf, buf, len);
> + memmove(new_buf, buf, len);
> buf = new_buf;
> }
>
Applied.
M
More information about the U-Boot
mailing list