summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYork Sun <york.sun@nxp.com>2017-09-07 17:12:32 (GMT)
committerPrabhakar Kushwaha <prabhakar.kushwaha@nxp.com>2017-10-30 03:12:22 (GMT)
commit0ca9091106ab16f8a8df624d6ae42146eedf3872 (patch)
tree4a6f6db2ebbbd5cdf07e7742d3f286055659936a
parentfbedf04c1bad675eadbac86febdcf759441a02af (diff)
downloadu-boot-0ca9091106ab16f8a8df624d6ae42146eedf3872.tar.xz
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>
-rw-r--r--arch/arm/cpu/armv8/fsl-layerscape/cpu.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
index 25cd8d7..c906a32 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
@@ -632,13 +632,22 @@ void efi_reset_system_init(void)
#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 ram_top = ram_size;
#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. */
- ram_top -= mc_get_dram_block_size();
ram_top &= ~(CONFIG_SYS_MC_RSV_MEM_ALIGN - 1);
#endif
@@ -682,8 +691,8 @@ phys_size_t get_effective_memsize(void)
/* Check if we have enough memory for MC */
if (rem < board_reserve_ram_top(rem)) {
/* Not enough memory in high region to reserve */
- if (ea_size > board_reserve_ram_top(rem))
- ea_size -= board_reserve_ram_top(rem);
+ if (ea_size > board_reserve_ram_top(ea_size))
+ ea_size -= board_reserve_ram_top(ea_size);
else
printf("Error: No enough space for reserved memory.\n");
}