mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-10-01 00:50:43 +09:00
armv8: fsl-layerscape: Fix MC reserved memory calculation
In case high region memory doesn't have enough space for Management Complex (MC), the return value should indicate a failure so the caller can handle it accordingly. Signed-off-by: York Sun <york.sun@nxp.com> Reported-by: Ebony Zhu <ebony.zhu@nxp.com>
This commit is contained in:
parent
0e8a4264ec
commit
e9303a4146
@ -619,13 +619,22 @@ void efi_reset_system_init(void)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate reserved memory with given memory bank
|
||||||
|
* Return aligned memory size on success
|
||||||
|
* Return (ram_size + needed size) for failure
|
||||||
|
*/
|
||||||
phys_size_t board_reserve_ram_top(phys_size_t ram_size)
|
phys_size_t board_reserve_ram_top(phys_size_t ram_size)
|
||||||
{
|
{
|
||||||
phys_size_t ram_top = ram_size;
|
phys_size_t ram_top = ram_size;
|
||||||
|
|
||||||
#if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
|
#if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
|
||||||
|
ram_top = mc_get_dram_block_size();
|
||||||
|
if (ram_top > ram_size)
|
||||||
|
return ram_size + ram_top;
|
||||||
|
|
||||||
|
ram_top = ram_size - ram_top;
|
||||||
/* The start address of MC reserved memory needs to be aligned. */
|
/* The start address of MC reserved memory needs to be aligned. */
|
||||||
ram_top -= mc_get_dram_block_size();
|
|
||||||
ram_top &= ~(CONFIG_SYS_MC_RSV_MEM_ALIGN - 1);
|
ram_top &= ~(CONFIG_SYS_MC_RSV_MEM_ALIGN - 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -669,8 +678,8 @@ phys_size_t get_effective_memsize(void)
|
|||||||
/* Check if we have enough memory for MC */
|
/* Check if we have enough memory for MC */
|
||||||
if (rem < board_reserve_ram_top(rem)) {
|
if (rem < board_reserve_ram_top(rem)) {
|
||||||
/* Not enough memory in high region to reserve */
|
/* Not enough memory in high region to reserve */
|
||||||
if (ea_size > board_reserve_ram_top(rem))
|
if (ea_size > board_reserve_ram_top(ea_size))
|
||||||
ea_size -= board_reserve_ram_top(rem);
|
ea_size -= board_reserve_ram_top(ea_size);
|
||||||
else
|
else
|
||||||
printf("Error: No enough space for reserved memory.\n");
|
printf("Error: No enough space for reserved memory.\n");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user