diff mbox

[U-Boot,v2,1/6] x86: Support machines with >4GB of RAM

Message ID 1425325255-6267-1-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass March 2, 2015, 7:40 p.m. UTC
Some systems have more than 4GB of RAM. U-Boot can only place things below
4GB so any memory above that should not be used. Ignore any such memory so
that the memory size will not exceed the maximum.

This prevents gd->ram_size exceeding 4GB which causes problems for PCI
devices which use DMA.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---

Changes in v2: None

 arch/x86/cpu/coreboot/sdram.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Ɓukasz Majewski March 3, 2015, 7:56 a.m. UTC | #1
Hi Simon,

> Some systems have more than 4GB of RAM. U-Boot can only place things
> below 4GB so any memory above that should not be used. Ignore any
> such memory so that the memory size will not exceed the maximum.
> 
> This prevents gd->ram_size exceeding 4GB which causes problems for PCI
> devices which use DMA.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> ---
> 
> Changes in v2: None
> 
>  arch/x86/cpu/coreboot/sdram.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/cpu/coreboot/sdram.c
> b/arch/x86/cpu/coreboot/sdram.c index e98a230..9c3ab81 100644
> --- a/arch/x86/cpu/coreboot/sdram.c
> +++ b/arch/x86/cpu/coreboot/sdram.c
> @@ -90,7 +90,8 @@ int dram_init(void)
>  		struct memrange *memrange = &lib_sysinfo.memrange[i];
>  		unsigned long long end = memrange->base +
> memrange->size; 
> -		if (memrange->type == CB_MEM_RAM && end > ram_size)
> +		if (memrange->type == CB_MEM_RAM && end > ram_size &&
> +		    memrange->base < (1ULL << 32))
>  			ram_size = end;
>  	}
>  	gd->ram_size = ram_size;
> @@ -108,7 +109,8 @@ void dram_init_banksize(void)
>  		for (i = 0, j = 0; i < lib_sysinfo.n_memranges; i++)
> { struct memrange *memrange = &lib_sysinfo.memrange[i];
>  
> -			if (memrange->type == CB_MEM_RAM) {
> +			if (memrange->type == CB_MEM_RAM &&
> +			    memrange->base < (1ULL << 32)) {
>  				gd->bd->bi_dram[j].start =
> memrange->base; gd->bd->bi_dram[j].size = memrange->size;
>  				j++;

Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
Simon Glass March 20, 2015, 11:12 p.m. UTC | #2
On 3 March 2015 at 00:56, Lukasz Majewski <l.majewski@samsung.com> wrote:
> Hi Simon,
>
>> Some systems have more than 4GB of RAM. U-Boot can only place things
>> below 4GB so any memory above that should not be used. Ignore any
>> such memory so that the memory size will not exceed the maximum.
>>
>> This prevents gd->ram_size exceeding 4GB which causes problems for PCI
>> devices which use DMA.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>> ---
>>
>> Changes in v2: None
>>
>>  arch/x86/cpu/coreboot/sdram.c | 6 ++++--
>>  1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/x86/cpu/coreboot/sdram.c
>> b/arch/x86/cpu/coreboot/sdram.c index e98a230..9c3ab81 100644
>> --- a/arch/x86/cpu/coreboot/sdram.c
>> +++ b/arch/x86/cpu/coreboot/sdram.c
>> @@ -90,7 +90,8 @@ int dram_init(void)
>>               struct memrange *memrange = &lib_sysinfo.memrange[i];
>>               unsigned long long end = memrange->base +
>> memrange->size;
>> -             if (memrange->type == CB_MEM_RAM && end > ram_size)
>> +             if (memrange->type == CB_MEM_RAM && end > ram_size &&
>> +                 memrange->base < (1ULL << 32))
>>                       ram_size = end;
>>       }
>>       gd->ram_size = ram_size;
>> @@ -108,7 +109,8 @@ void dram_init_banksize(void)
>>               for (i = 0, j = 0; i < lib_sysinfo.n_memranges; i++)
>> { struct memrange *memrange = &lib_sysinfo.memrange[i];
>>
>> -                     if (memrange->type == CB_MEM_RAM) {
>> +                     if (memrange->type == CB_MEM_RAM &&
>> +                         memrange->base < (1ULL << 32)) {
>>                               gd->bd->bi_dram[j].start =
>> memrange->base; gd->bd->bi_dram[j].size = memrange->size;
>>                               j++;
>
> Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>

Applied to u-boot-dm/next.
diff mbox

Patch

diff --git a/arch/x86/cpu/coreboot/sdram.c b/arch/x86/cpu/coreboot/sdram.c
index e98a230..9c3ab81 100644
--- a/arch/x86/cpu/coreboot/sdram.c
+++ b/arch/x86/cpu/coreboot/sdram.c
@@ -90,7 +90,8 @@  int dram_init(void)
 		struct memrange *memrange = &lib_sysinfo.memrange[i];
 		unsigned long long end = memrange->base + memrange->size;
 
-		if (memrange->type == CB_MEM_RAM && end > ram_size)
+		if (memrange->type == CB_MEM_RAM && end > ram_size &&
+		    memrange->base < (1ULL << 32))
 			ram_size = end;
 	}
 	gd->ram_size = ram_size;
@@ -108,7 +109,8 @@  void dram_init_banksize(void)
 		for (i = 0, j = 0; i < lib_sysinfo.n_memranges; i++) {
 			struct memrange *memrange = &lib_sysinfo.memrange[i];
 
-			if (memrange->type == CB_MEM_RAM) {
+			if (memrange->type == CB_MEM_RAM &&
+			    memrange->base < (1ULL << 32)) {
 				gd->bd->bi_dram[j].start = memrange->base;
 				gd->bd->bi_dram[j].size = memrange->size;
 				j++;