On 6/20/22 3:01 AM, Joel Stanley wrote: > The documentation above the DEFINE_ALIGN_BUFFER says it's for use > outside functions, but we're inside one. > > Instead use ALLOC_CACHE_ALIGN_BUFFER, the stack based macro, which also > includes the cache alignment. > > Fixes: b583348ca8c8 ("image: fit: Align hash output buffers") > Signed-off-by: Joel Stanley <j...@jms.id.au> > --- > This fixes booting the ast2600-evb image in qemu, which was getting all > zeroes for the output of the FIT hash check. > > The 'static' buffer was in BSS but the output image didn't contain a BSS > section. The pointer was left pointing to the text, so the code was > trying to write to the (read only?) text area in SPI NOR memory space. > > tools/mkimage.h | 3 +-- > boot/image-fit.c | 3 +-- > 2 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/tools/mkimage.h b/tools/mkimage.h > index 7652c8b001c3..f5ca65e2edfd 100644 > --- a/tools/mkimage.h > +++ b/tools/mkimage.h > @@ -41,8 +41,7 @@ static inline ulong map_to_sysmem(void *ptr) > return (ulong)(uintptr_t)ptr; > } > > -#define ARCH_DMA_MINALIGN 1 > -#define DEFINE_ALIGN_BUFFER(type, name, size, alugn) type name[size] > +#define ALLOC_CACHE_ALIGN_BUFFER(type, name, size) type name[size] > > #define MKIMAGE_TMPFILE_SUFFIX ".tmp" > #define MKIMAGE_MAX_TMPFILE_LEN 256 > diff --git a/boot/image-fit.c b/boot/image-fit.c > index f57d97f55229..df3e5df8836a 100644 > --- a/boot/image-fit.c > +++ b/boot/image-fit.c > @@ -1264,8 +1264,7 @@ int calculate_hash(const void *data, int data_len, > const char *name, > static int fit_image_check_hash(const void *fit, int noffset, const void > *data, > size_t size, char **err_msgp) > { > - DEFINE_ALIGN_BUFFER(uint8_t, value, FIT_MAX_HASH_LEN, > - ARCH_DMA_MINALIGN); > + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, value, FIT_MAX_HASH_LEN); > int value_len; > const char *algo; > uint8_t *fit_value; >
Reviewed-by: Sean Anderson <sean.ander...@seco.com>