diff mbox series

[U-Boot,2/5] sunxi: add Kconfig option for the maximum accessible DRAM

Message ID 20180207193526.48434-3-icenowy@aosc.io
State Changes Requested
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series Add 3GiB DRAM support to 64-bit Allwinner SoCs | expand

Commit Message

Icenowy Zheng Feb. 7, 2018, 7:35 p.m. UTC
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.

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.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
---
 arch/arm/mach-sunxi/Kconfig | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Andre Przywara Feb. 8, 2018, 12:35 a.m. UTC | #1
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.

> 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.

But maybe we should not get carried away by something that doesn't
really exist.

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
>
Chen-Yu Tsai Feb. 8, 2018, 2:14 a.m. UTC | #2
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.
>
>> 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.
>
> 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.
Icenowy Zheng Feb. 8, 2018, 6:43 a.m. UTC | #3
在 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.
diff mbox series

Patch

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