Skip to content
Snippets Groups Projects
Commit 18956cd4 authored by Gary Bisson's avatar Gary Bisson Committed by Stefano Babic
Browse files

cmd: bcb: fix bcb struct alignment issue


Without this patch the bcb struct could be located at an odd address
which resulted in data not being copied to the buffer.

Here was the repro steps (from Mattijs):
=> mmc dev 1
=> bcb load 1 misc
=> bcb dump command
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=> part start mmc 1 misc misc_start
=> mmc read ${loadaddr} ${misc_start} 4
=> bcb load 1 misc
=> bcb dump command
00000000: 62 6f 6f 74 6f 6e 63 65 2d 62 6f 6f 74 6c 6f 61
00000010: 64 65 72 00 00 00 00 00 00 00 00 00 00 00 00 00

This behavior was observed on an Amlogic A311D (ARM64) platform with a
recent GCC toolchain (11.2.0) but is most likely affecting other
platforms.

To avoid issues the structure is aligned on DMA minimum alignment value
as it is passed directly to the read function.

Signed-off-by: default avatarGary Bisson <gary.bisson@boundarydevices.com>
Tested-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> # on khadas vim3
parent f8a5cda5
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,7 @@
#include <log.h>
#include <part.h>
#include <malloc.h>
#include <memalign.h>
enum bcb_cmd {
BCB_CMD_LOAD,
......@@ -24,7 +25,7 @@ enum bcb_cmd {
static int bcb_dev = -1;
static int bcb_part = -1;
static struct bootloader_message bcb = { { 0 } };
static struct bootloader_message bcb __aligned(ARCH_DMA_MINALIGN) = { { 0 } };
static int bcb_cmd_get(char *cmd)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment