[U-Boot] [PATCH] [RFC] memsize.c: adapt get_ram_size() for address spaces >32 bit

Scott Wood scottwood at freescale.com
Thu May 27 22:06:37 CEST 2010


On 05/27/2010 02:44 PM, Wolfgang Denk wrote:
> Dear Timur Tabi,
>
> In message<AANLkTilrFhTwnQgQX9NVmplaBl8HpISZY97HKK73-ncz at mail.gmail.com>  you wrote:
>> On Thu, May 27, 2010 at 1:11 PM, Wolfgang Denk<wd at denx.de>  wrote:
>>> get_ram_size() used to use "long" data types for addresses and data,
>>> which in limited it to systems with less than 4 GiB memory. As more
>>> and more systems are coming up with bigger memory resources, we adapt
>>> the code to use phys_addr_t / phys_size_t data types instead.
>>>
>>> Signed-off-by: Wolfgang Denk<wd at denx.de>
>>> Cc: Timur Tabi<timur at freescale.com>
>>> ---
>>
>> The problem is that on all of our PowerPC boards, the TLBs only map
>> the lower 2GB of memory, regardless as to how much is present.  So we
>> still can't use get_ram_size() to determine how much memory is in the
>> system, because any attempt to access memory higher than 2GB will
>> fail.
>
> Now this is your problem, then, and you should kno how to fix it.

Not using get_ram_size(), which is of minimal utility when you know the 
actual size (and is an unsafe approach to the problem when you don't, 
unless you know a lot about where I/O is mapped and how the system 
responds to accessing memory that doesn't exist -- not exactly the sort 
of thing you want to make a mandate for any board to be accepted), seems 
like a good way to "fix it".

>> And even if we did have TLBs for all of memory, an attempt to access
>> RAM that doesn't exist will cause a machine check, which will hang
>> U-Boot.  So we still couldn't use get_ram_size() to determine how much
>> RAM actually exists.
>
> Please see how it's done on all other PowerPC systems, and do similar.

"All other PowerPC systems" is a ridiculous overstatement.  I see 
exactly *one* Freescale board that uses this thing, and it's an ARM board.

-Scott


More information about the U-Boot mailing list