
在 2018-02-08 10:14,Chen-Yu Tsai 写道:
On Thu, Feb 8, 2018 at 8:35 AM, André Przywara andre.przywara@arm.com wrote:
On 07/02/18 19:35, Icenowy Zheng wrote:
Allwinner 64-bit SoCs can use 4GiB DRAM chip, however their memory map has only allocated 3GiB for DRAM, so only 3GiB of the DRAM is accessible.
Add a Kconfig option for the maximum accessible DRAM.
That looks fine to me, but have you checked CONFIG_MAX_MEM_MAPPED? get_effective_memsize() in common/memsize.c looks like it's solving this very problem.
get_effective_memsize() restricts memory size from gd->ram_size. gd->ram_size is defined as phys_size_t, which should be 32-bit on Allwinner SoCs except A80. (Although currently CONFIG_ARM64 selects CONFIG_PHYS_64BIT which makes phys_size_t 64-bit, the high 32-bit doesn't physically exist on those SoCs, and it's possible for a 32-bit SoC with 3GiB DRAM space to appear).
A 32-bit data type cannot store a size of 4GiB. This is the first reason that I doesn't rely on get_effective_memsize().
For A80 it should be a much higher value (8GiB), but as I have no A80 device to test and originally U-Boot only supports 2GiB DRAM on A80, it currently still falls under the 2GiB situation.
Well, that depends on how we will use SUNXI_DRAM_SIZE. If that's to limit the size we eventually report in the DT, that should be indeed 8GB on the A80. But U-Boot itself can't use more than 3GB on sunxi/ARMv7 (due to the static 1:1 mapping). I think we should separate those two numbers (actual DRAM size and U-Boot's own DRAM size), if we really want to support >3GB on the A80.
Yes, and the CONFIG_MAX_MEM_MAPPED should be used in A80 case, and the CONFIG_PHYS_64BIT option should be selected, as the internal bus of A80 is bigger than 4GiB.
So that the meaning of CONFIG_MAX_MEM_MAPPED is "maximum memory mapped in U-Boot", in A80 case only 3.5G is mapped in U-Boot, but Linux can use the other 4.5G.
(In this case another U-Boot stage code that doesn't scan DRAM size but calculate it from memory controller is needed.)
In A64/H5/H6 case the whole 3G accessible memory is mapped to U-Boot, and there's no memory that U-Boot cannot access but some other software can. So the gd->ram_size should be restricted at 3GiB. (The 1GiB is installed to the system, but it's not part of the system memory due to it's totally not accessible.)
But maybe we should not get carried away by something that doesn't really exist.
That was the first thing that popped up in my mind after seeing this series. A80 supports LPAE. However, the A80 is out of production, and no one produced any boards with more than 2GB of RAM. So >3GB on sunxi is going to go untested for a long time, if not forever.
ChenYu
Thanks, Andre.
Signed-off-by: Icenowy Zheng icenowy@aosc.io
arch/arm/mach-sunxi/Kconfig | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index 1fededd0a3..32739e0f33 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig @@ -63,6 +63,13 @@ config MACH_SUNXI_H3_H5 select SUNXI_GEN_SUN6I select SUPPORT_SPL
+# TODO: try out A80's 8GiB DRAM space +config SUNXI_DRAM_MAX_SIZE
hex
default 0xC0000000 if MACH_SUN50I
default 0xC0000000 if MACH_SUN50I_H5
default 0x80000000
choice prompt "Sunxi SoC Variant" optional
-- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout.