* [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds
@ 2022-09-09 15:32 Pali Rohár
2022-09-09 15:32 ` [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED Pali Rohár
` (9 more replies)
0 siblings, 10 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
This patch series fixes U-Boot code to correctly handle RAM size larger
than 2 GB and then fixes fsl ddr driver to do not crash U-Boot when 4 GB
DDR module is detected when U-Boot operates in 32-bit mode (as opposite
of the 36-bit mode).
With this patch series it is possible to boot 32-bit U-Boot with 4 GB
SODIMM DDR3 module without crashes. U-Boot will still use just
CONFIG_MAX_MEM_MAPPED amount of RAM, but it is better than crashing due
to the truncating of 4GB value to 32-bit number (which is zero).
I tested this patch series on powerpc P2020 based board but only with
U-Boot v2022.04 because U-Boot master branch is still broken on P2020.
Pali Rohár (9):
common/memsize.c: Fix get_effective_memsize() to always check for
CONFIG_MAX_MEM_MAPPED
common/memsize.c: Fix get_effective_memsize() to check for overflow
board_f: Fix types for board_get_usable_ram_top()
board_f: Fix printing gd->ram_size and gd->ram_top
ddr: fsl: Fix checking for maximal mappable memory
ddr: fsl: Fix fsl_ddr_sdram_size() for 4GB modules with 32-bit
phys_size_t
ddr: fsl: Allow to detect 4 GB DDR modules in 32-bit mode
ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds
powerpc/mpc85xx: Explain TLB unmapped memory message
arch/arm/mach-imx/imx8m/soc.c | 2 +-
arch/arm/mach-mvebu/arm64-common.c | 2 +-
arch/arm/mach-rockchip/sdram.c | 2 +-
arch/arm/mach-stm32mp/dram_init.c | 2 +-
arch/arm/mach-sunxi/board.c | 2 +-
arch/arm/mach-tegra/board2.c | 2 +-
arch/mips/mach-jz47xx/jz4780/jz4780.c | 2 +-
arch/mips/mach-octeon/dram.c | 2 +-
arch/powerpc/cpu/mpc85xx/tlb.c | 2 +-
arch/riscv/cpu/fu540/dram.c | 2 +-
arch/riscv/cpu/fu740/dram.c | 2 +-
arch/riscv/cpu/generic/dram.c | 2 +-
arch/x86/cpu/broadwell/sdram.c | 2 +-
arch/x86/cpu/coreboot/sdram.c | 2 +-
arch/x86/cpu/efi/payload.c | 2 +-
arch/x86/cpu/efi/sdram.c | 2 +-
arch/x86/cpu/intel_common/mrc.c | 4 ++--
arch/x86/cpu/ivybridge/sdram.c | 2 +-
arch/x86/cpu/qemu/dram.c | 2 +-
arch/x86/cpu/quark/dram.c | 2 +-
arch/x86/cpu/slimbootloader/sdram.c | 2 +-
arch/x86/cpu/tangier/sdram.c | 2 +-
arch/x86/include/asm/mrc_common.h | 2 +-
arch/x86/include/asm/u-boot-x86.h | 2 +-
arch/x86/lib/fsp1/fsp_dram.c | 2 +-
arch/x86/lib/fsp2/fsp_dram.c | 2 +-
board/broadcom/bcmns3/ns3.c | 2 +-
board/imgtec/boston/ddr.c | 2 +-
board/menlo/m53menlo/m53menlo.c | 2 +-
board/raspberrypi/rpi/rpi.c | 2 +-
board/ti/am65x/evm.c | 2 +-
board/ti/j721e/evm.c | 2 +-
board/ti/j721s2/evm.c | 2 +-
board/xilinx/zynqmp/zynqmp.c | 2 +-
common/board_f.c | 6 ++---
common/memsize.c | 20 ++++++++++++----
drivers/ddr/fsl/lc_common_dimm_params.c | 3 +++
drivers/ddr/fsl/main.c | 31 ++++++++++++++++++++-----
drivers/video/fsl_dcu_fb.c | 2 +-
include/init.h | 2 +-
40 files changed, 84 insertions(+), 50 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-23 22:48 ` Tom Rini
2022-09-09 15:32 ` [PATCH 2/9] common/memsize.c: Fix get_effective_memsize() to check for overflow Pali Rohár
` (8 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
CONFIG_MAX_MEM_MAPPED when defined specifies upper memory mapped limit.
So check for it always, and not only when CONFIG_VERY_BIG_RAM is defined.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
common/memsize.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/memsize.c b/common/memsize.c
index d5d13d51bf1f..31884acca0df 100644
--- a/common/memsize.c
+++ b/common/memsize.c
@@ -94,7 +94,7 @@ long get_ram_size(long *base, long maxsize)
phys_size_t __weak get_effective_memsize(void)
{
-#ifndef CONFIG_VERY_BIG_RAM
+#ifndef CONFIG_MAX_MEM_MAPPED
return gd->ram_size;
#else
/* limit stack to what we can reasonable map */
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 2/9] common/memsize.c: Fix get_effective_memsize() to check for overflow
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
2022-09-09 15:32 ` [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 15:32 ` [PATCH 3/9] board_f: Fix types for board_get_usable_ram_top() Pali Rohár
` (7 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
Ensure that top of RAM can be represented by phys_size_t type. If RAM is
too large or RAM base address is too upper then limit RAM size to prevent
address space overflow.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
common/memsize.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/common/memsize.c b/common/memsize.c
index 31884acca0df..d11ed67632fb 100644
--- a/common/memsize.c
+++ b/common/memsize.c
@@ -94,11 +94,23 @@ long get_ram_size(long *base, long maxsize)
phys_size_t __weak get_effective_memsize(void)
{
+ phys_size_t ram_size = gd->ram_size;
+
+ /*
+ * Check for overflow and limit ram size to some representable value.
+ * It is required that ram_base + ram_size must be representable by
+ * phys_size_t type and must be aligned by direct access, therefore
+ * calculate it from last 4kB sector which should work as alignment
+ * on any platform.
+ */
+ if (gd->ram_base + ram_size < gd->ram_base)
+ ram_size = ((phys_size_t)~0xfffULL) - gd->ram_base;
+
#ifndef CONFIG_MAX_MEM_MAPPED
- return gd->ram_size;
+ return ram_size;
#else
/* limit stack to what we can reasonable map */
- return ((gd->ram_size > CONFIG_MAX_MEM_MAPPED) ?
- CONFIG_MAX_MEM_MAPPED : gd->ram_size);
+ return ((ram_size > CONFIG_MAX_MEM_MAPPED) ?
+ CONFIG_MAX_MEM_MAPPED : ram_size);
#endif
}
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/9] board_f: Fix types for board_get_usable_ram_top()
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
2022-09-09 15:32 ` [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED Pali Rohár
2022-09-09 15:32 ` [PATCH 2/9] common/memsize.c: Fix get_effective_memsize() to check for overflow Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 18:21 ` Simon Glass
2022-09-09 15:32 ` [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top Pali Rohár
` (6 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
Commit 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
changed type of ram_top member from ulong to phys_addr_t but did not
changed types in board_get_usable_ram_top() function which returns value
for ram_top.
So change ulong to phys_addr_t type also in board_get_usable_ram_top()
signature and implementations.
Fixes: 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
Signed-off-by: Pali Rohár <pali@kernel.org>
---
arch/arm/mach-imx/imx8m/soc.c | 2 +-
arch/arm/mach-mvebu/arm64-common.c | 2 +-
arch/arm/mach-rockchip/sdram.c | 2 +-
arch/arm/mach-stm32mp/dram_init.c | 2 +-
arch/arm/mach-sunxi/board.c | 2 +-
arch/arm/mach-tegra/board2.c | 2 +-
arch/mips/mach-jz47xx/jz4780/jz4780.c | 2 +-
arch/mips/mach-octeon/dram.c | 2 +-
arch/riscv/cpu/fu540/dram.c | 2 +-
arch/riscv/cpu/fu740/dram.c | 2 +-
arch/riscv/cpu/generic/dram.c | 2 +-
arch/x86/cpu/broadwell/sdram.c | 2 +-
arch/x86/cpu/coreboot/sdram.c | 2 +-
arch/x86/cpu/efi/payload.c | 2 +-
arch/x86/cpu/efi/sdram.c | 2 +-
arch/x86/cpu/intel_common/mrc.c | 4 ++--
arch/x86/cpu/ivybridge/sdram.c | 2 +-
arch/x86/cpu/qemu/dram.c | 2 +-
arch/x86/cpu/quark/dram.c | 2 +-
arch/x86/cpu/slimbootloader/sdram.c | 2 +-
arch/x86/cpu/tangier/sdram.c | 2 +-
arch/x86/include/asm/mrc_common.h | 2 +-
arch/x86/include/asm/u-boot-x86.h | 2 +-
arch/x86/lib/fsp1/fsp_dram.c | 2 +-
arch/x86/lib/fsp2/fsp_dram.c | 2 +-
board/broadcom/bcmns3/ns3.c | 2 +-
board/imgtec/boston/ddr.c | 2 +-
board/menlo/m53menlo/m53menlo.c | 2 +-
board/raspberrypi/rpi/rpi.c | 2 +-
board/ti/am65x/evm.c | 2 +-
board/ti/j721e/evm.c | 2 +-
board/ti/j721s2/evm.c | 2 +-
board/xilinx/zynqmp/zynqmp.c | 2 +-
common/board_f.c | 2 +-
drivers/video/fsl_dcu_fb.c | 2 +-
include/init.h | 2 +-
36 files changed, 37 insertions(+), 37 deletions(-)
diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c
index 1a5a391443de..895b447ccc15 100644
--- a/arch/arm/mach-imx/imx8m/soc.c
+++ b/arch/arm/mach-imx/imx8m/soc.c
@@ -309,7 +309,7 @@ phys_size_t get_effective_memsize(void)
#endif
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
ulong top_addr = PHYS_SDRAM + gd->ram_size;
diff --git a/arch/arm/mach-mvebu/arm64-common.c b/arch/arm/mach-mvebu/arm64-common.c
index 5357aa554db4..3dd94e7dde6b 100644
--- a/arch/arm/mach-mvebu/arm64-common.c
+++ b/arch/arm/mach-mvebu/arm64-common.c
@@ -30,7 +30,7 @@ DECLARE_GLOBAL_DATA_PTR;
*/
#define USABLE_RAM_SIZE 0x80000000
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
if (gd->ram_size > USABLE_RAM_SIZE)
return USABLE_RAM_SIZE;
diff --git a/arch/arm/mach-rockchip/sdram.c b/arch/arm/mach-rockchip/sdram.c
index 705ec7ba6450..12f1d7ee5637 100644
--- a/arch/arm/mach-rockchip/sdram.c
+++ b/arch/arm/mach-rockchip/sdram.c
@@ -205,7 +205,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
unsigned long top = CONFIG_SYS_SDRAM_BASE + SDRAM_MAX_SIZE;
diff --git a/arch/arm/mach-stm32mp/dram_init.c b/arch/arm/mach-stm32mp/dram_init.c
index 920b99bb68f2..9346fa8546d2 100644
--- a/arch/arm/mach-stm32mp/dram_init.c
+++ b/arch/arm/mach-stm32mp/dram_init.c
@@ -40,7 +40,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
phys_size_t size;
phys_addr_t reg;
diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c
index 9a7673d82dc1..5af037df4bd4 100644
--- a/arch/arm/mach-sunxi/board.c
+++ b/arch/arm/mach-sunxi/board.c
@@ -65,7 +65,7 @@ static struct mm_region sunxi_mem_map[] = {
};
struct mm_region *mem_map = sunxi_mem_map;
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
/* Some devices (like the EMAC) have a 32-bit DMA limit. */
if (gd->ram_top > (1ULL << 32))
diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c
index 8950e678a619..1994db0e15f5 100644
--- a/arch/arm/mach-tegra/board2.c
+++ b/arch/arm/mach-tegra/board2.c
@@ -401,7 +401,7 @@ int dram_init_banksize(void)
* This function is called before dram_init_banksize(), so we can't simply
* return gd->bd->bi_dram[1].start + gd->bd->bi_dram[1].size.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
ulong ram_top;
diff --git a/arch/mips/mach-jz47xx/jz4780/jz4780.c b/arch/mips/mach-jz47xx/jz4780/jz4780.c
index fefba12873b8..a57ec7802bbf 100644
--- a/arch/mips/mach-jz47xx/jz4780/jz4780.c
+++ b/arch/mips/mach-jz47xx/jz4780/jz4780.c
@@ -76,7 +76,7 @@ void board_init_f(ulong dummy)
}
#endif /* CONFIG_SPL_BUILD */
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return CONFIG_SYS_SDRAM_BASE + (256 * 1024 * 1024);
}
diff --git a/arch/mips/mach-octeon/dram.c b/arch/mips/mach-octeon/dram.c
index 4679260f17ad..9c5789b1c8eb 100644
--- a/arch/mips/mach-octeon/dram.c
+++ b/arch/mips/mach-octeon/dram.c
@@ -77,7 +77,7 @@ phys_size_t get_effective_memsize(void)
return UBOOT_RAM_SIZE_MAX;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
if (IS_ENABLED(CONFIG_RAM_OCTEON)) {
/* Map a maximum of 256MiB - return not size but address */
diff --git a/arch/riscv/cpu/fu540/dram.c b/arch/riscv/cpu/fu540/dram.c
index 1fdc7837b864..44e11bd56c5d 100644
--- a/arch/riscv/cpu/fu540/dram.c
+++ b/arch/riscv/cpu/fu540/dram.c
@@ -21,7 +21,7 @@ int dram_init_banksize(void)
return fdtdec_setup_memory_banksize();
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
/*
* Ensure that we run from first 4GB so that all
diff --git a/arch/riscv/cpu/fu740/dram.c b/arch/riscv/cpu/fu740/dram.c
index 1dc77efeca55..d6d4a41d25e3 100644
--- a/arch/riscv/cpu/fu740/dram.c
+++ b/arch/riscv/cpu/fu740/dram.c
@@ -20,7 +20,7 @@ int dram_init_banksize(void)
return fdtdec_setup_memory_banksize();
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
#ifdef CONFIG_64BIT
/*
diff --git a/arch/riscv/cpu/generic/dram.c b/arch/riscv/cpu/generic/dram.c
index 1fdc7837b864..44e11bd56c5d 100644
--- a/arch/riscv/cpu/generic/dram.c
+++ b/arch/riscv/cpu/generic/dram.c
@@ -21,7 +21,7 @@ int dram_init_banksize(void)
return fdtdec_setup_memory_banksize();
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
/*
* Ensure that we run from first 4GB so that all
diff --git a/arch/x86/cpu/broadwell/sdram.c b/arch/x86/cpu/broadwell/sdram.c
index c104a849a545..1295121ae5b6 100644
--- a/arch/x86/cpu/broadwell/sdram.c
+++ b/arch/x86/cpu/broadwell/sdram.c
@@ -25,7 +25,7 @@
#include <asm/arch/pei_data.h>
#include <asm/arch/pm.h>
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return mrc_common_board_get_usable_ram_top(total_size);
}
diff --git a/arch/x86/cpu/coreboot/sdram.c b/arch/x86/cpu/coreboot/sdram.c
index 4a256bad4458..f4ee4cdf5d8c 100644
--- a/arch/x86/cpu/coreboot/sdram.c
+++ b/arch/x86/cpu/coreboot/sdram.c
@@ -27,7 +27,7 @@ unsigned int install_e820_map(unsigned int max_entries,
* address, and how far U-Boot is moved by relocation are set in the global
* data structure.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
uintptr_t dest_addr = 0;
int i;
diff --git a/arch/x86/cpu/efi/payload.c b/arch/x86/cpu/efi/payload.c
index b7778565b19e..1c28a43778ec 100644
--- a/arch/x86/cpu/efi/payload.c
+++ b/arch/x86/cpu/efi/payload.c
@@ -27,7 +27,7 @@ DECLARE_GLOBAL_DATA_PTR;
* the relocation address, and how far U-Boot is moved by relocation are
* set in the global data structure.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
struct efi_mem_desc *desc, *end;
struct efi_entry_memmap *map;
diff --git a/arch/x86/cpu/efi/sdram.c b/arch/x86/cpu/efi/sdram.c
index af65982fd0c0..f3086db42c49 100644
--- a/arch/x86/cpu/efi/sdram.c
+++ b/arch/x86/cpu/efi/sdram.c
@@ -11,7 +11,7 @@
DECLARE_GLOBAL_DATA_PTR;
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return (ulong)efi_get_ram_base() + gd->ram_size;
}
diff --git a/arch/x86/cpu/intel_common/mrc.c b/arch/x86/cpu/intel_common/mrc.c
index a97b0b7ceb41..a4918fbad61a 100644
--- a/arch/x86/cpu/intel_common/mrc.c
+++ b/arch/x86/cpu/intel_common/mrc.c
@@ -25,7 +25,7 @@ static const char *const ecc_decoder[] = {
"active"
};
-ulong mrc_common_board_get_usable_ram_top(ulong total_size)
+phys_size_t mrc_common_board_get_usable_ram_top(phys_size_t total_size)
{
struct memory_info *info = &gd->arch.meminfo;
uintptr_t dest_addr = 0;
@@ -50,7 +50,7 @@ ulong mrc_common_board_get_usable_ram_top(ulong total_size)
dest_addr = largest->start + largest->size;
- return (ulong)dest_addr;
+ return (phys_size_t)dest_addr;
}
void mrc_common_dram_init_banksize(void)
diff --git a/arch/x86/cpu/ivybridge/sdram.c b/arch/x86/cpu/ivybridge/sdram.c
index dd6b8753de68..1a0ec433e654 100644
--- a/arch/x86/cpu/ivybridge/sdram.c
+++ b/arch/x86/cpu/ivybridge/sdram.c
@@ -44,7 +44,7 @@ DECLARE_GLOBAL_DATA_PTR;
#define CMOS_OFFSET_MRC_SEED_S3 156
#define CMOS_OFFSET_MRC_SEED_CHK 160
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return mrc_common_board_get_usable_ram_top(total_size);
}
diff --git a/arch/x86/cpu/qemu/dram.c b/arch/x86/cpu/qemu/dram.c
index c1745501294c..595c397d4a4f 100644
--- a/arch/x86/cpu/qemu/dram.c
+++ b/arch/x86/cpu/qemu/dram.c
@@ -71,7 +71,7 @@ int dram_init_banksize(void)
* the relocation address, and how far U-Boot is moved by relocation are
* set in the global data structure.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return qemu_get_low_memory_size();
}
diff --git a/arch/x86/cpu/quark/dram.c b/arch/x86/cpu/quark/dram.c
index 2287dce12b52..8b1ee2d5ae57 100644
--- a/arch/x86/cpu/quark/dram.c
+++ b/arch/x86/cpu/quark/dram.c
@@ -184,7 +184,7 @@ int dram_init_banksize(void)
* the relocation address, and how far U-Boot is moved by relocation are
* set in the global data structure.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return gd->ram_size;
}
diff --git a/arch/x86/cpu/slimbootloader/sdram.c b/arch/x86/cpu/slimbootloader/sdram.c
index c6f10e22e315..d748d5c7d469 100644
--- a/arch/x86/cpu/slimbootloader/sdram.c
+++ b/arch/x86/cpu/slimbootloader/sdram.c
@@ -48,7 +48,7 @@ static struct sbl_memory_map_info *get_memory_map_info(void)
* @total_size: The memory size that u-boot occupies
* Return: : The top available memory address lower than 4GB
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
struct sbl_memory_map_info *data;
int i;
diff --git a/arch/x86/cpu/tangier/sdram.c b/arch/x86/cpu/tangier/sdram.c
index afb08476ed3b..8a4b1c5d2d72 100644
--- a/arch/x86/cpu/tangier/sdram.c
+++ b/arch/x86/cpu/tangier/sdram.c
@@ -204,7 +204,7 @@ unsigned int install_e820_map(unsigned int max_entries,
* address, and how far U-Boot is moved by relocation are set in the global
* data structure.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
struct sfi_table_simple *sb;
struct sfi_mem_entry *mentry;
diff --git a/arch/x86/include/asm/mrc_common.h b/arch/x86/include/asm/mrc_common.h
index 3d7f00c9f92b..a7f260a7079a 100644
--- a/arch/x86/include/asm/mrc_common.h
+++ b/arch/x86/include/asm/mrc_common.h
@@ -47,7 +47,7 @@ int mrc_add_memory_area(struct memory_info *info, uint64_t start,
* the relocation address, and how far U-Boot is moved by relocation are
* set in the global data structure.
*/
-ulong mrc_common_board_get_usable_ram_top(ulong total_size);
+phys_size_t mrc_common_board_get_usable_ram_top(phys_size_t total_size);
void mrc_common_dram_init_banksize(void);
diff --git a/arch/x86/include/asm/u-boot-x86.h b/arch/x86/include/asm/u-boot-x86.h
index a1655e1cea5c..4cf41e935416 100644
--- a/arch/x86/include/asm/u-boot-x86.h
+++ b/arch/x86/include/asm/u-boot-x86.h
@@ -77,7 +77,7 @@ int x86_cleanup_before_linux(void);
void x86_enable_caches(void);
void x86_disable_caches(void);
int x86_init_cache(void);
-ulong board_get_usable_ram_top(ulong total_size);
+phys_size_t board_get_usable_ram_top(phys_size_t total_size);
int default_print_cpuinfo(void);
/* Set up a UART which can be used with printch(), printhex8(), etc. */
diff --git a/arch/x86/lib/fsp1/fsp_dram.c b/arch/x86/lib/fsp1/fsp_dram.c
index cfd9b9f48c34..5825221d1e5d 100644
--- a/arch/x86/lib/fsp1/fsp_dram.c
+++ b/arch/x86/lib/fsp1/fsp_dram.c
@@ -34,7 +34,7 @@ int dram_init(void)
* the relocation address, and how far U-Boot is moved by relocation are
* set in the global data structure.
*/
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return fsp_get_usable_lowmem_top(gd->arch.hob_list);
}
diff --git a/arch/x86/lib/fsp2/fsp_dram.c b/arch/x86/lib/fsp2/fsp_dram.c
index 42d3892b7626..f9ea1ab3baad 100644
--- a/arch/x86/lib/fsp2/fsp_dram.c
+++ b/arch/x86/lib/fsp2/fsp_dram.c
@@ -77,7 +77,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
if (!ll_boot_init())
return gd->ram_size;
diff --git a/board/broadcom/bcmns3/ns3.c b/board/broadcom/bcmns3/ns3.c
index 88036c16c951..26652e8f7733 100644
--- a/board/broadcom/bcmns3/ns3.c
+++ b/board/broadcom/bcmns3/ns3.c
@@ -183,7 +183,7 @@ int dram_init_banksize(void)
}
/* Limit RAM used by U-Boot to the DDR first bank End region */
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return BCM_NS3_MEM_END;
}
diff --git a/board/imgtec/boston/ddr.c b/board/imgtec/boston/ddr.c
index 182f79b9182d..5b245cb44734 100644
--- a/board/imgtec/boston/ddr.c
+++ b/board/imgtec/boston/ddr.c
@@ -23,7 +23,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
DECLARE_GLOBAL_DATA_PTR;
diff --git a/board/menlo/m53menlo/m53menlo.c b/board/menlo/m53menlo/m53menlo.c
index 9545e633a3dc..7f3a1d8f7630 100644
--- a/board/menlo/m53menlo/m53menlo.c
+++ b/board/menlo/m53menlo/m53menlo.c
@@ -42,7 +42,7 @@ DECLARE_GLOBAL_DATA_PTR;
static u32 mx53_dram_size[2];
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
/*
* WARNING: We must override get_effective_memsize() function here
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 17b8108cc88f..00afb352bd1e 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -335,7 +335,7 @@ static void set_fdt_addr(void)
/*
* Prevent relocation from stomping on a firmware provided FDT blob.
*/
-unsigned long board_get_usable_ram_top(unsigned long total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
if ((gd->ram_top - fw_dtb_pointer) > SZ_64M)
return gd->ram_top;
diff --git a/board/ti/am65x/evm.c b/board/ti/am65x/evm.c
index 7182a8cad1a4..bda0fae80b1f 100644
--- a/board/ti/am65x/evm.c
+++ b/board/ti/am65x/evm.c
@@ -61,7 +61,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
#ifdef CONFIG_PHYS_64BIT
/* Limit RAM used by U-Boot to the DDR low region */
diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c
index e6ff54c065de..e6dd2b73d6a5 100644
--- a/board/ti/j721e/evm.c
+++ b/board/ti/j721e/evm.c
@@ -57,7 +57,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
#ifdef CONFIG_PHYS_64BIT
/* Limit RAM used by U-Boot to the DDR low region */
diff --git a/board/ti/j721s2/evm.c b/board/ti/j721s2/evm.c
index 3c75ecfc0fe4..e09adc8ad34e 100644
--- a/board/ti/j721s2/evm.c
+++ b/board/ti/j721s2/evm.c
@@ -46,7 +46,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
#ifdef CONFIG_PHYS_64BIT
/* Limit RAM used by U-Boot to the DDR low region */
diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
index 70b3c81f1284..c20d8e71ef1d 100644
--- a/board/xilinx/zynqmp/zynqmp.c
+++ b/board/xilinx/zynqmp/zynqmp.c
@@ -511,7 +511,7 @@ int dram_init(void)
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
phys_size_t size;
phys_addr_t reg;
diff --git a/common/board_f.c b/common/board_f.c
index ac7e2d65694c..15e442a0cf33 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -302,7 +302,7 @@ __weak int mach_cpu_init(void)
}
/* Get the top of usable RAM */
-__weak ulong board_get_usable_ram_top(ulong total_size)
+__weak phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
#if defined(CONFIG_SYS_SDRAM_BASE) && CONFIG_SYS_SDRAM_BASE > 0
/*
diff --git a/drivers/video/fsl_dcu_fb.c b/drivers/video/fsl_dcu_fb.c
index dc5b24c98bb8..9c04f0685af1 100644
--- a/drivers/video/fsl_dcu_fb.c
+++ b/drivers/video/fsl_dcu_fb.c
@@ -372,7 +372,7 @@ int fsl_dcu_init(struct fb_info *fbinfo, unsigned int xres,
return 0;
}
-ulong board_get_usable_ram_top(ulong total_size)
+phys_size_t board_get_usable_ram_top(phys_size_t total_size)
{
return gd->ram_top - CONFIG_VIDEO_FSL_DCU_MAX_FB_SIZE_MB;
}
diff --git a/include/init.h b/include/init.h
index 20c3976af09a..a83c0b148924 100644
--- a/include/init.h
+++ b/include/init.h
@@ -290,7 +290,7 @@ int show_board_info(void);
*
* @param total_size Size of U-Boot (unused?)
*/
-ulong board_get_usable_ram_top(ulong total_size);
+phys_size_t board_get_usable_ram_top(phys_size_t total_size);
int board_early_init_f(void);
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (2 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 3/9] board_f: Fix types for board_get_usable_ram_top() Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 18:20 ` Simon Glass
2022-09-09 15:32 ` [PATCH 5/9] ddr: fsl: Fix checking for maximal mappable memory Pali Rohár
` (5 subsequent siblings)
9 siblings, 1 reply; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
Members gd->ram_size and gd->ram_top are of type phys_addr_t which does not
have to fit into ulong type. So cast them into unsigned long long.
Fixes: 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
Signed-off-by: Pali Rohár <pali@kernel.org>
---
common/board_f.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/board_f.c b/common/board_f.c
index 15e442a0cf33..9e34fbee147e 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -325,7 +325,7 @@ static int setup_dest_addr(void)
/*
* Ram is setup, size stored in gd !!
*/
- debug("Ram size: %08lX\n", (ulong)gd->ram_size);
+ debug("Ram size: %08llX\n", (unsigned long long)gd->ram_size);
#if defined(CONFIG_SYS_MEM_TOP_HIDE)
/*
* Subtract specified amount of memory to hide so that it won't
@@ -345,7 +345,7 @@ static int setup_dest_addr(void)
gd->ram_top = gd->ram_base + get_effective_memsize();
gd->ram_top = board_get_usable_ram_top(gd->mon_len);
gd->relocaddr = gd->ram_top;
- debug("Ram top: %08lX\n", (ulong)gd->ram_top);
+ debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top);
#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
/*
* We need to make sure the location we intend to put secondary core
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 5/9] ddr: fsl: Fix checking for maximal mappable memory
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (3 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 15:32 ` [PATCH 6/9] ddr: fsl: Fix fsl_ddr_sdram_size() for 4GB modules with 32-bit phys_size_t Pali Rohár
` (4 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
Check needs to be done against CONFIG_MAX_MEM_MAPPED macro and not fixed
size 4GB (as CONFIG_MAX_MEM_MAPPED can be lower and for example for e500
cores it is just 2GB). Also fix printf re-align, which should be applied
only for non-SPL builds, during init_dram() call.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/ddr/fsl/main.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/ddr/fsl/main.c b/drivers/ddr/fsl/main.c
index f389e5ef9524..ec040f265da2 100644
--- a/drivers/ddr/fsl/main.c
+++ b/drivers/ddr/fsl/main.c
@@ -856,13 +856,22 @@ phys_size_t __fsl_ddr_sdram(fsl_ddr_info_t *pinfo)
debug("total_memory by %s = %llu\n", __func__, total_memory);
#if !defined(CONFIG_PHYS_64BIT)
- /* Check for 4G or more. Bad. */
- if ((first_ctrl == 0) && (total_memory >= (1ull << 32))) {
+ /* Check for more than max memory. Bad. */
+ if ((first_ctrl == 0) && (total_memory > CONFIG_MAX_MEM_MAPPED)) {
puts("Detected ");
print_size(total_memory, " of memory\n");
- printf(" This U-Boot only supports < 4G of DDR\n");
- printf(" You could rebuild it with CONFIG_PHYS_64BIT\n");
- printf(" "); /* re-align to match init_dram print */
+#ifndef CONFIG_SPL_BUILD
+ puts(" "); /* re-align to match init_dram print */
+#endif
+ puts("This U-Boot only supports <= ");
+ print_size(CONFIG_MAX_MEM_MAPPED, " of DDR\n");
+#ifndef CONFIG_SPL_BUILD
+ puts(" "); /* re-align to match init_dram print */
+#endif
+ puts("You could rebuild it with CONFIG_PHYS_64BIT\n");
+#ifndef CONFIG_SPL_BUILD
+ puts(" "); /* re-align to match init_dram print */
+#endif
total_memory = CONFIG_MAX_MEM_MAPPED;
}
#endif
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 6/9] ddr: fsl: Fix fsl_ddr_sdram_size() for 4GB modules with 32-bit phys_size_t
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (4 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 5/9] ddr: fsl: Fix checking for maximal mappable memory Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 15:32 ` [PATCH 7/9] ddr: fsl: Allow to detect 4 GB DDR modules in 32-bit mode Pali Rohár
` (3 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
Function fsl_ddr_compute() always return size in unsigned long long type,
but function fsl_ddr_sdram_size() returns size in phys_size_t type.
When 36-bit addressing mode is not enabled then phys_size_t type is only
32-bit and thus it cannot store value 4GB (0x100000000). Function
fsl_ddr_sdram_size() in this case returns truncated value 0x0.
Fix this issue by returning the highest representable value, which is
0xffffffff (4GB - 1 byte).
This change fixes crashing of proper U-Boot because it detected 4 GB module
as RAM with zero size.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/ddr/fsl/main.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/ddr/fsl/main.c b/drivers/ddr/fsl/main.c
index ec040f265da2..dd55e61a7a73 100644
--- a/drivers/ddr/fsl/main.c
+++ b/drivers/ddr/fsl/main.c
@@ -949,5 +949,9 @@ fsl_ddr_sdram_size(void)
/* Compute it once normally. */
total_memory = fsl_ddr_compute(&info, STEP_GET_SPD, 1);
+ /* Ensure that total_memory does not overflow on return */
+ if (total_memory > (phys_size_t)~0ULL)
+ total_memory = (phys_size_t)~0ULL;
+
return total_memory;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 7/9] ddr: fsl: Allow to detect 4 GB DDR modules in 32-bit mode
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (5 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 6/9] ddr: fsl: Fix fsl_ddr_sdram_size() for 4GB modules with 32-bit phys_size_t Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 15:32 ` [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds Pali Rohár
` (2 subsequent siblings)
9 siblings, 0 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
U-Boot core code already handles the case when RAM size is bigger than
CONFIG_MAX_MEM_MAPPED. So there is no need to do duplicate check in fsl ddr
driver for CONFIG_MAX_MEM_MAPPED. Instead simplify code to just check if
RAM size can be representable in phys_size_t type. And avoid printing
warning if phys_size_t is just 1 byte smaller than RAM size, which is the
typical situation with 4 GB DDR module.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/ddr/fsl/main.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/ddr/fsl/main.c b/drivers/ddr/fsl/main.c
index dd55e61a7a73..577ca569b042 100644
--- a/drivers/ddr/fsl/main.c
+++ b/drivers/ddr/fsl/main.c
@@ -856,15 +856,18 @@ phys_size_t __fsl_ddr_sdram(fsl_ddr_info_t *pinfo)
debug("total_memory by %s = %llu\n", __func__, total_memory);
#if !defined(CONFIG_PHYS_64BIT)
- /* Check for more than max memory. Bad. */
- if ((first_ctrl == 0) && (total_memory > CONFIG_MAX_MEM_MAPPED)) {
+ /*
+ * Show warning about big DDR moodules. But avoid warning for 4 GB DDR
+ * modules when U-Boot supports RAM of maximal size 4 GB - 1 byte.
+ */
+ if ((first_ctrl == 0) && (total_memory - 1 > (phys_size_t)~0ULL)) {
puts("Detected ");
print_size(total_memory, " of memory\n");
#ifndef CONFIG_SPL_BUILD
puts(" "); /* re-align to match init_dram print */
#endif
puts("This U-Boot only supports <= ");
- print_size(CONFIG_MAX_MEM_MAPPED, " of DDR\n");
+ print_size((unsigned long long)((phys_size_t)~0ULL)+1, " of DDR\n");
#ifndef CONFIG_SPL_BUILD
puts(" "); /* re-align to match init_dram print */
#endif
@@ -872,10 +875,13 @@ phys_size_t __fsl_ddr_sdram(fsl_ddr_info_t *pinfo)
#ifndef CONFIG_SPL_BUILD
puts(" "); /* re-align to match init_dram print */
#endif
- total_memory = CONFIG_MAX_MEM_MAPPED;
}
#endif
+ /* Ensure that total_memory does not overflow on return */
+ if (total_memory > (phys_size_t)~0ULL)
+ total_memory = (phys_size_t)~0ULL;
+
return total_memory;
}
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (6 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 7/9] ddr: fsl: Allow to detect 4 GB DDR modules in 32-bit mode Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-09 18:21 ` Simon Glass
2022-09-09 15:32 ` [PATCH 9/9] powerpc/mpc85xx: Explain TLB unmapped memory message Pali Rohár
2022-09-11 9:29 ` [PATCH 10/9] powerpc/mpc85xx: Fix re-align of unmapped DDR memory message for non-SPL builds Pali Rohár
9 siblings, 1 reply; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
During init_dram() is called also compute_lowest_common_dimm_parameters()
function which prints multi-line detailed output. So print also re-aligning
filler after "Detected ?DIMM" line to have "DRAM: " output aligned.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/ddr/fsl/lc_common_dimm_params.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/ddr/fsl/lc_common_dimm_params.c b/drivers/ddr/fsl/lc_common_dimm_params.c
index d738ae3a7c66..5e4ad56f0714 100644
--- a/drivers/ddr/fsl/lc_common_dimm_params.c
+++ b/drivers/ddr/fsl/lc_common_dimm_params.c
@@ -422,6 +422,9 @@ compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
dimm_params[i].mpart);
#endif
}
+#ifndef CONFIG_SPL_BUILD
+ puts(" ");
+#endif
}
}
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 9/9] powerpc/mpc85xx: Explain TLB unmapped memory message
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (7 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds Pali Rohár
@ 2022-09-09 15:32 ` Pali Rohár
2022-09-11 9:29 ` [PATCH 10/9] powerpc/mpc85xx: Fix re-align of unmapped DDR memory message for non-SPL builds Pali Rohár
9 siblings, 0 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 15:32 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
Currently U-Boot SPL prints just generic message "2 GiB left unmapped".
Change it to more detailed "2 GiB of DDR memory left unmapped in U-Boot".
This is just U-Boot configuration and operating system may map more (or
also less) memory.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
arch/powerpc/cpu/mpc85xx/tlb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/cpu/mpc85xx/tlb.c b/arch/powerpc/cpu/mpc85xx/tlb.c
index 550d45da0efa..6107a91ecd3c 100644
--- a/arch/powerpc/cpu/mpc85xx/tlb.c
+++ b/arch/powerpc/cpu/mpc85xx/tlb.c
@@ -311,7 +311,7 @@ unsigned int setup_ddr_tlbs_phys(phys_addr_t p_addr,
if (size || memsize > CONFIG_MAX_MEM_MAPPED) {
print_size(memsize > CONFIG_MAX_MEM_MAPPED ?
memsize - CONFIG_MAX_MEM_MAPPED + size : size,
- " left unmapped\n");
+ " of DDR memory left unmapped in U-Boot\n");
}
return memsize_in_meg;
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top
2022-09-09 15:32 ` [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top Pali Rohár
@ 2022-09-09 18:20 ` Simon Glass
2022-09-09 21:46 ` Pali Rohár
0 siblings, 1 reply; 20+ messages in thread
From: Simon Glass @ 2022-09-09 18:20 UTC (permalink / raw)
To: Pali Rohár; +Cc: U-Boot Mailing List, Marek Behún, Peng Fan, Tom Rini
Hi Pali,
On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
>
> Members gd->ram_size and gd->ram_top are of type phys_addr_t which does not
> have to fit into ulong type. So cast them into unsigned long long.
Which board does this break?
>
> Fixes: 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
> Signed-off-by: Pali Rohár <pali@kernel.org>
> ---
> common/board_f.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/common/board_f.c b/common/board_f.c
> index 15e442a0cf33..9e34fbee147e 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -325,7 +325,7 @@ static int setup_dest_addr(void)
> /*
> * Ram is setup, size stored in gd !!
> */
> - debug("Ram size: %08lX\n", (ulong)gd->ram_size);
> + debug("Ram size: %08llX\n", (unsigned long long)gd->ram_size);
> #if defined(CONFIG_SYS_MEM_TOP_HIDE)
> /*
> * Subtract specified amount of memory to hide so that it won't
> @@ -345,7 +345,7 @@ static int setup_dest_addr(void)
> gd->ram_top = gd->ram_base + get_effective_memsize();
> gd->ram_top = board_get_usable_ram_top(gd->mon_len);
> gd->relocaddr = gd->ram_top;
> - debug("Ram top: %08lX\n", (ulong)gd->ram_top);
> + debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top);
> #if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
> /*
> * We need to make sure the location we intend to put secondary core
> --
> 2.20.1
>
Reviewed-by: Simon Glass <sjg@chromium.org>
This seems OK, as it still only shows 8 digits in most cases.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/9] board_f: Fix types for board_get_usable_ram_top()
2022-09-09 15:32 ` [PATCH 3/9] board_f: Fix types for board_get_usable_ram_top() Pali Rohár
@ 2022-09-09 18:21 ` Simon Glass
0 siblings, 0 replies; 20+ messages in thread
From: Simon Glass @ 2022-09-09 18:21 UTC (permalink / raw)
To: Pali Rohár; +Cc: U-Boot Mailing List, Marek Behún, Peng Fan, Tom Rini
On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
>
> Commit 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
> changed type of ram_top member from ulong to phys_addr_t but did not
> changed types in board_get_usable_ram_top() function which returns value
> for ram_top.
>
> So change ulong to phys_addr_t type also in board_get_usable_ram_top()
> signature and implementations.
>
> Fixes: 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
> Signed-off-by: Pali Rohár <pali@kernel.org>
> ---
> arch/arm/mach-imx/imx8m/soc.c | 2 +-
> arch/arm/mach-mvebu/arm64-common.c | 2 +-
> arch/arm/mach-rockchip/sdram.c | 2 +-
> arch/arm/mach-stm32mp/dram_init.c | 2 +-
> arch/arm/mach-sunxi/board.c | 2 +-
> arch/arm/mach-tegra/board2.c | 2 +-
> arch/mips/mach-jz47xx/jz4780/jz4780.c | 2 +-
> arch/mips/mach-octeon/dram.c | 2 +-
> arch/riscv/cpu/fu540/dram.c | 2 +-
> arch/riscv/cpu/fu740/dram.c | 2 +-
> arch/riscv/cpu/generic/dram.c | 2 +-
> arch/x86/cpu/broadwell/sdram.c | 2 +-
> arch/x86/cpu/coreboot/sdram.c | 2 +-
> arch/x86/cpu/efi/payload.c | 2 +-
> arch/x86/cpu/efi/sdram.c | 2 +-
> arch/x86/cpu/intel_common/mrc.c | 4 ++--
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds
2022-09-09 15:32 ` [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds Pali Rohár
@ 2022-09-09 18:21 ` Simon Glass
2022-09-09 19:08 ` Tom Rini
0 siblings, 1 reply; 20+ messages in thread
From: Simon Glass @ 2022-09-09 18:21 UTC (permalink / raw)
To: Pali Rohár; +Cc: U-Boot Mailing List, Marek Behún, Peng Fan, Tom Rini
Hi,
On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
>
> During init_dram() is called also compute_lowest_common_dimm_parameters()
> function which prints multi-line detailed output. So print also re-aligning
> filler after "Detected ?DIMM" line to have "DRAM: " output aligned.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
> ---
> drivers/ddr/fsl/lc_common_dimm_params.c | 3 +++
> 1 file changed, 3 insertions(+)
At some point could this move to drivers/ram ?
Regards,
Simon
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds
2022-09-09 18:21 ` Simon Glass
@ 2022-09-09 19:08 ` Tom Rini
2022-09-09 19:39 ` Simon Glass
0 siblings, 1 reply; 20+ messages in thread
From: Tom Rini @ 2022-09-09 19:08 UTC (permalink / raw)
To: Simon Glass
Cc: Pali Rohár, U-Boot Mailing List, Marek Behún, Peng Fan
[-- Attachment #1: Type: text/plain, Size: 707 bytes --]
On Fri, Sep 09, 2022 at 12:21:11PM -0600, Simon Glass wrote:
> Hi,
>
> On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
> >
> > During init_dram() is called also compute_lowest_common_dimm_parameters()
> > function which prints multi-line detailed output. So print also re-aligning
> > filler after "Detected ?DIMM" line to have "DRAM: " output aligned.
> >
> > Signed-off-by: Pali Rohár <pali@kernel.org>
> > ---
> > drivers/ddr/fsl/lc_common_dimm_params.c | 3 +++
> > 1 file changed, 3 insertions(+)
>
> At some point could this move to drivers/ram ?
Depends on if we're keeping / making drivers/ram mean uses uclass and
drivers/ddr does not, I think.
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds
2022-09-09 19:08 ` Tom Rini
@ 2022-09-09 19:39 ` Simon Glass
2022-09-09 21:05 ` Tom Rini
0 siblings, 1 reply; 20+ messages in thread
From: Simon Glass @ 2022-09-09 19:39 UTC (permalink / raw)
To: Tom Rini; +Cc: Pali Rohár, U-Boot Mailing List, Marek Behún, Peng Fan
Hi Tom,
On Fri, 9 Sept 2022 at 13:08, Tom Rini <trini@konsulko.com> wrote:
>
> On Fri, Sep 09, 2022 at 12:21:11PM -0600, Simon Glass wrote:
> > Hi,
> >
> > On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
> > >
> > > During init_dram() is called also compute_lowest_common_dimm_parameters()
> > > function which prints multi-line detailed output. So print also re-aligning
> > > filler after "Detected ?DIMM" line to have "DRAM: " output aligned.
> > >
> > > Signed-off-by: Pali Rohár <pali@kernel.org>
> > > ---
> > > drivers/ddr/fsl/lc_common_dimm_params.c | 3 +++
> > > 1 file changed, 3 insertions(+)
> >
> > At some point could this move to drivers/ram ?
>
> Depends on if we're keeping / making drivers/ram mean uses uclass and
> drivers/ddr does not, I think.
Yes, except for Altera:
$ git grep UCLASS_RAM drivers/ddr
drivers/ddr/altera/sdram_gen5.c: .id = UCLASS_RAM,
drivers/ddr/altera/sdram_soc64.c: .id = UCLASS_RAM,
Regards,
Simon
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds
2022-09-09 19:39 ` Simon Glass
@ 2022-09-09 21:05 ` Tom Rini
0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2022-09-09 21:05 UTC (permalink / raw)
To: Simon Glass
Cc: Pali Rohár, U-Boot Mailing List, Marek Behún, Peng Fan
[-- Attachment #1: Type: text/plain, Size: 1255 bytes --]
On Fri, Sep 09, 2022 at 01:39:25PM -0600, Simon Glass wrote:
> Hi Tom,
>
> On Fri, 9 Sept 2022 at 13:08, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Fri, Sep 09, 2022 at 12:21:11PM -0600, Simon Glass wrote:
> > > Hi,
> > >
> > > On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
> > > >
> > > > During init_dram() is called also compute_lowest_common_dimm_parameters()
> > > > function which prints multi-line detailed output. So print also re-aligning
> > > > filler after "Detected ?DIMM" line to have "DRAM: " output aligned.
> > > >
> > > > Signed-off-by: Pali Rohár <pali@kernel.org>
> > > > ---
> > > > drivers/ddr/fsl/lc_common_dimm_params.c | 3 +++
> > > > 1 file changed, 3 insertions(+)
> > >
> > > At some point could this move to drivers/ram ?
> >
> > Depends on if we're keeping / making drivers/ram mean uses uclass and
> > drivers/ddr does not, I think.
>
> Yes, except for Altera:
>
> $ git grep UCLASS_RAM drivers/ddr
> drivers/ddr/altera/sdram_gen5.c: .id = UCLASS_RAM,
> drivers/ddr/altera/sdram_soc64.c: .id = UCLASS_RAM,
Then we should move those over to drivers/ram/altera/ and leave the rest
as-is. And of course, totally outside the scope of this series.
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top
2022-09-09 18:20 ` Simon Glass
@ 2022-09-09 21:46 ` Pali Rohár
2022-09-12 13:33 ` Simon Glass
0 siblings, 1 reply; 20+ messages in thread
From: Pali Rohár @ 2022-09-09 21:46 UTC (permalink / raw)
To: Simon Glass; +Cc: U-Boot Mailing List, Marek Behún, Peng Fan, Tom Rini
On Friday 09 September 2022 12:20:57 Simon Glass wrote:
> Hi Pali,
>
> On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
> >
> > Members gd->ram_size and gd->ram_top are of type phys_addr_t which does not
> > have to fit into ulong type. So cast them into unsigned long long.
>
> Which board does this break?
Uff.. I'm not sure right now as I have this patch for months. Anyway,
looking at it I think the issue is with 36-bit powerpc stuff where
phys_addr_t is 64-bit, ulong is 32-bit and therefore ram_size can be up
to 64 GB. Of course addressable RAM maximally 4 GB. Anyway, there should
not be any break, this is just debug output.
> >
> > Fixes: 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
> > Signed-off-by: Pali Rohár <pali@kernel.org>
> > ---
> > common/board_f.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/common/board_f.c b/common/board_f.c
> > index 15e442a0cf33..9e34fbee147e 100644
> > --- a/common/board_f.c
> > +++ b/common/board_f.c
> > @@ -325,7 +325,7 @@ static int setup_dest_addr(void)
> > /*
> > * Ram is setup, size stored in gd !!
> > */
> > - debug("Ram size: %08lX\n", (ulong)gd->ram_size);
> > + debug("Ram size: %08llX\n", (unsigned long long)gd->ram_size);
> > #if defined(CONFIG_SYS_MEM_TOP_HIDE)
> > /*
> > * Subtract specified amount of memory to hide so that it won't
> > @@ -345,7 +345,7 @@ static int setup_dest_addr(void)
> > gd->ram_top = gd->ram_base + get_effective_memsize();
> > gd->ram_top = board_get_usable_ram_top(gd->mon_len);
> > gd->relocaddr = gd->ram_top;
> > - debug("Ram top: %08lX\n", (ulong)gd->ram_top);
> > + debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top);
> > #if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
> > /*
> > * We need to make sure the location we intend to put secondary core
> > --
> > 2.20.1
> >
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> This seems OK, as it still only shows 8 digits in most cases.
No? IIRC %08 prints at least 8 digits (not at most).
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 10/9] powerpc/mpc85xx: Fix re-align of unmapped DDR memory message for non-SPL builds
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
` (8 preceding siblings ...)
2022-09-09 15:32 ` [PATCH 9/9] powerpc/mpc85xx: Explain TLB unmapped memory message Pali Rohár
@ 2022-09-11 9:29 ` Pali Rohár
9 siblings, 0 replies; 20+ messages in thread
From: Pali Rohár @ 2022-09-11 9:29 UTC (permalink / raw)
To: u-boot, Marek Behún, Peng Fan, Tom Rini
During init_dram() is called also setup_ddr_tlbs_phys() function which may
print message about unmapped DDR memory. So in this case print also
re-aligning filler after unmapped DDR memory message.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
arch/powerpc/cpu/mpc85xx/tlb.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/powerpc/cpu/mpc85xx/tlb.c b/arch/powerpc/cpu/mpc85xx/tlb.c
index 6107a91ecd3c..723ee1d599fd 100644
--- a/arch/powerpc/cpu/mpc85xx/tlb.c
+++ b/arch/powerpc/cpu/mpc85xx/tlb.c
@@ -312,6 +312,9 @@ unsigned int setup_ddr_tlbs_phys(phys_addr_t p_addr,
print_size(memsize > CONFIG_MAX_MEM_MAPPED ?
memsize - CONFIG_MAX_MEM_MAPPED + size : size,
" of DDR memory left unmapped in U-Boot\n");
+#ifndef CONFIG_SPL_BUILD
+ puts(" ");
+#endif
}
return memsize_in_meg;
--
2.20.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top
2022-09-09 21:46 ` Pali Rohár
@ 2022-09-12 13:33 ` Simon Glass
0 siblings, 0 replies; 20+ messages in thread
From: Simon Glass @ 2022-09-12 13:33 UTC (permalink / raw)
To: Pali Rohár; +Cc: U-Boot Mailing List, Marek Behún, Peng Fan, Tom Rini
Hi Pali,
On Fri, 9 Sept 2022 at 15:46, Pali Rohár <pali@kernel.org> wrote:
>
> On Friday 09 September 2022 12:20:57 Simon Glass wrote:
> > Hi Pali,
> >
> > On Fri, 9 Sept 2022 at 09:34, Pali Rohár <pali@kernel.org> wrote:
> > >
> > > Members gd->ram_size and gd->ram_top are of type phys_addr_t which does not
> > > have to fit into ulong type. So cast them into unsigned long long.
> >
> > Which board does this break?
>
> Uff.. I'm not sure right now as I have this patch for months. Anyway,
> looking at it I think the issue is with 36-bit powerpc stuff where
> phys_addr_t is 64-bit, ulong is 32-bit and therefore ram_size can be up
> to 64 GB. Of course addressable RAM maximally 4 GB. Anyway, there should
> not be any break, this is just debug output.
OK
>
> > >
> > > Fixes: 37dc958947ed ("global_data.h: Change ram_top type to phys_addr_t")
> > > Signed-off-by: Pali Rohár <pali@kernel.org>
> > > ---
> > > common/board_f.c | 4 ++--
> > > 1 file changed, 2 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/common/board_f.c b/common/board_f.c
> > > index 15e442a0cf33..9e34fbee147e 100644
> > > --- a/common/board_f.c
> > > +++ b/common/board_f.c
> > > @@ -325,7 +325,7 @@ static int setup_dest_addr(void)
> > > /*
> > > * Ram is setup, size stored in gd !!
> > > */
> > > - debug("Ram size: %08lX\n", (ulong)gd->ram_size);
> > > + debug("Ram size: %08llX\n", (unsigned long long)gd->ram_size);
> > > #if defined(CONFIG_SYS_MEM_TOP_HIDE)
> > > /*
> > > * Subtract specified amount of memory to hide so that it won't
> > > @@ -345,7 +345,7 @@ static int setup_dest_addr(void)
> > > gd->ram_top = gd->ram_base + get_effective_memsize();
> > > gd->ram_top = board_get_usable_ram_top(gd->mon_len);
> > > gd->relocaddr = gd->ram_top;
> > > - debug("Ram top: %08lX\n", (ulong)gd->ram_top);
> > > + debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top);
> > > #if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
> > > /*
> > > * We need to make sure the location we intend to put secondary core
> > > --
> > > 2.20.1
> > >
> >
> > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > This seems OK, as it still only shows 8 digits in most cases.
>
> No? IIRC %08 prints at least 8 digits (not at most).
Yes we are saying the same thing. It is %016x that I would object to.
Regards,
Simon
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED
2022-09-09 15:32 ` [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED Pali Rohár
@ 2022-09-23 22:48 ` Tom Rini
0 siblings, 0 replies; 20+ messages in thread
From: Tom Rini @ 2022-09-23 22:48 UTC (permalink / raw)
To: Pali Rohár; +Cc: u-boot, Marek Behún, Peng Fan
[-- Attachment #1: Type: text/plain, Size: 329 bytes --]
On Fri, Sep 09, 2022 at 05:32:38PM +0200, Pali Rohár wrote:
> CONFIG_MAX_MEM_MAPPED when defined specifies upper memory mapped limit.
> So check for it always, and not only when CONFIG_VERY_BIG_RAM is defined.
>
> Signed-off-by: Pali Rohár <pali@kernel.org>
For the series, applied to u-boot/next, thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2022-09-23 22:48 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-09 15:32 [PATCH 0/9] Support for 4 GB DDR modules for 32-bit U-Boot builds Pali Rohár
2022-09-09 15:32 ` [PATCH 1/9] common/memsize.c: Fix get_effective_memsize() to always check for CONFIG_MAX_MEM_MAPPED Pali Rohár
2022-09-23 22:48 ` Tom Rini
2022-09-09 15:32 ` [PATCH 2/9] common/memsize.c: Fix get_effective_memsize() to check for overflow Pali Rohár
2022-09-09 15:32 ` [PATCH 3/9] board_f: Fix types for board_get_usable_ram_top() Pali Rohár
2022-09-09 18:21 ` Simon Glass
2022-09-09 15:32 ` [PATCH 4/9] board_f: Fix printing gd->ram_size and gd->ram_top Pali Rohár
2022-09-09 18:20 ` Simon Glass
2022-09-09 21:46 ` Pali Rohár
2022-09-12 13:33 ` Simon Glass
2022-09-09 15:32 ` [PATCH 5/9] ddr: fsl: Fix checking for maximal mappable memory Pali Rohár
2022-09-09 15:32 ` [PATCH 6/9] ddr: fsl: Fix fsl_ddr_sdram_size() for 4GB modules with 32-bit phys_size_t Pali Rohár
2022-09-09 15:32 ` [PATCH 7/9] ddr: fsl: Allow to detect 4 GB DDR modules in 32-bit mode Pali Rohár
2022-09-09 15:32 ` [PATCH 8/9] ddr: fsl: Fix re-align of verbose DRAM information for non-SPL builds Pali Rohár
2022-09-09 18:21 ` Simon Glass
2022-09-09 19:08 ` Tom Rini
2022-09-09 19:39 ` Simon Glass
2022-09-09 21:05 ` Tom Rini
2022-09-09 15:32 ` [PATCH 9/9] powerpc/mpc85xx: Explain TLB unmapped memory message Pali Rohár
2022-09-11 9:29 ` [PATCH 10/9] powerpc/mpc85xx: Fix re-align of unmapped DDR memory message for non-SPL builds Pali Rohár
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).