Merge changes from topic "io_stm32image" into integration

* changes:
  fix(io_stm32image): invalidate cache on local buf
  refactor(io_stm32image): add header size variable
  fix(io_stm32image): uninitialized variable warning
This commit is contained in:
Madhukar Pappireddy 2021-06-18 15:40:20 +02:00 committed by TrustedFirmware Code Review
commit 7cfe5999be
1 changed files with 11 additions and 10 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2018-2021, ARM Limited and Contributors. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -246,10 +246,11 @@ static int stm32image_partition_size(io_entity_t *entity, size_t *length)
static int stm32image_partition_read(io_entity_t *entity, uintptr_t buffer, static int stm32image_partition_read(io_entity_t *entity, uintptr_t buffer,
size_t length, size_t *length_read) size_t length, size_t *length_read)
{ {
int result; int result = -EINVAL;
uint8_t *local_buffer; uint8_t *local_buffer;
boot_api_image_header_t *header = boot_api_image_header_t *header =
(boot_api_image_header_t *)first_lba_buffer; (boot_api_image_header_t *)first_lba_buffer;
size_t hdr_sz = sizeof(boot_api_image_header_t);
assert(entity != NULL); assert(entity != NULL);
assert(buffer != 0U); assert(buffer != 0U);
@ -286,16 +287,13 @@ static int stm32image_partition_read(io_entity_t *entity, uintptr_t buffer,
} }
/* Part of image already loaded with the header */ /* Part of image already loaded with the header */
memcpy(local_buffer, (uint8_t *)first_lba_buffer + memcpy(local_buffer, (uint8_t *)first_lba_buffer + hdr_sz,
sizeof(boot_api_image_header_t), MAX_LBA_SIZE - hdr_sz);
MAX_LBA_SIZE - sizeof(boot_api_image_header_t)); local_buffer += MAX_LBA_SIZE - hdr_sz;
local_buffer += MAX_LBA_SIZE - sizeof(boot_api_image_header_t);
offset = MAX_LBA_SIZE; offset = MAX_LBA_SIZE;
/* New image length to be read */ /* New image length to be read */
local_length = round_up(length - local_length = round_up(length - ((MAX_LBA_SIZE) - hdr_sz),
((MAX_LBA_SIZE) -
sizeof(boot_api_image_header_t)),
stm32image_dev.lba_size); stm32image_dev.lba_size);
if ((header->load_address != 0U) && if ((header->load_address != 0U) &&
@ -326,7 +324,7 @@ static int stm32image_partition_read(io_entity_t *entity, uintptr_t buffer,
local_length, length_read); local_length, length_read);
/* Adding part of size already read from header */ /* Adding part of size already read from header */
*length_read += MAX_LBA_SIZE - sizeof(boot_api_image_header_t); *length_read += MAX_LBA_SIZE - hdr_sz;
if (result != 0) { if (result != 0) {
ERROR("%s: io_read (%i)\n", __func__, result); ERROR("%s: io_read (%i)\n", __func__, result);
@ -348,6 +346,9 @@ static int stm32image_partition_read(io_entity_t *entity, uintptr_t buffer,
return result; return result;
} }
inv_dcache_range(round_up((uintptr_t)(local_buffer + length - hdr_sz),
CACHE_WRITEBACK_GRANULE), *length_read - length + hdr_sz);
io_close(backend_handle); io_close(backend_handle);
} }