mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 01:24:27 +00:00
Merge "fix(qemu): fix RMM manifest checksum calculation" into integration
This commit is contained in:
commit
c53087e73e
1 changed files with 22 additions and 3 deletions
|
@ -258,6 +258,23 @@ static void plat_get_memory_node(int index, struct ns_dram_bank *bank_ptr)
|
||||||
}
|
}
|
||||||
#endif /* PLAT_qemu */
|
#endif /* PLAT_qemu */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate checksum of 64-bit words @buffer, of @size bytes
|
||||||
|
*/
|
||||||
|
static uint64_t checksum_calc(uint64_t *buffer, size_t size)
|
||||||
|
{
|
||||||
|
uint64_t sum = 0UL;
|
||||||
|
|
||||||
|
assert(((uintptr_t)buffer & (sizeof(uint64_t) - 1UL)) == 0UL);
|
||||||
|
assert((size & (sizeof(uint64_t) - 1UL)) == 0UL);
|
||||||
|
|
||||||
|
for (unsigned long i = 0UL; i < (size / sizeof(uint64_t)); i++) {
|
||||||
|
sum += buffer[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
int plat_rmmd_load_manifest(struct rmm_manifest *manifest)
|
int plat_rmmd_load_manifest(struct rmm_manifest *manifest)
|
||||||
{
|
{
|
||||||
int i, last;
|
int i, last;
|
||||||
|
@ -352,10 +369,12 @@ int plat_rmmd_load_manifest(struct rmm_manifest *manifest)
|
||||||
last = num_banks - 1;
|
last = num_banks - 1;
|
||||||
for (i = 0; i < num_banks; i++) {
|
for (i = 0; i < num_banks; i++) {
|
||||||
plat_get_memory_node(i, &bank_ptr[last]);
|
plat_get_memory_node(i, &bank_ptr[last]);
|
||||||
checksum += bank_ptr[last].base + bank_ptr[last].size;
|
|
||||||
last--;
|
last--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checksum += checksum_calc((uint64_t *)bank_ptr,
|
||||||
|
num_banks * sizeof(*bank_ptr));
|
||||||
|
|
||||||
/* Checksum must be 0 */
|
/* Checksum must be 0 */
|
||||||
manifest->plat_dram.checksum = ~checksum + 1UL;
|
manifest->plat_dram.checksum = ~checksum + 1UL;
|
||||||
|
|
||||||
|
@ -373,8 +392,8 @@ int plat_rmmd_load_manifest(struct rmm_manifest *manifest)
|
||||||
strlcpy(console_ptr[0].name, "pl011", sizeof(console_ptr[0].name));
|
strlcpy(console_ptr[0].name, "pl011", sizeof(console_ptr[0].name));
|
||||||
|
|
||||||
/* Update checksum */
|
/* Update checksum */
|
||||||
checksum += console_ptr[0].base + console_ptr[0].map_pages +
|
checksum += checksum_calc((uint64_t *)console_ptr,
|
||||||
console_ptr[0].clk_in_hz + console_ptr[0].baud_rate;
|
num_consoles * sizeof(*console_ptr));
|
||||||
|
|
||||||
/* Checksum must be 0 */
|
/* Checksum must be 0 */
|
||||||
manifest->plat_console.checksum = ~checksum + 1UL;
|
manifest->plat_console.checksum = ~checksum + 1UL;
|
||||||
|
|
Loading…
Add table
Reference in a new issue