RPi4B only allocates 1GB instead of 4GB

Mark Millard marklmi at yahoo.com
Tue Aug 11 20:57:11 UTC 2020



On 2020-Aug-11, at 12:47, Gordon Bergling <gbe at freebsd.org> wrote:

> I am currently working on an issue [1] of FreeBSD regarding the memory allocation
> on the RPi4B. I have a 4GB model running a very recent version of -CURRENT,
> but FreeBSD only recognizes 1GB instead of the installed 4GB of memory.
> 
> I spent some time today looking through the general determination of physical 
> memory in FreeBSD in sys/vm/vm_phys.c, but my initial try to simply the issue
> by building a kernel without NUMA support wasn't that successful.
> 
> The next part I was thinking about was the firmware -> kernel interface, lets
> say UEFI vs. 'plain u-boot'. But after the study of information I found on the
> net, that is a far different story, compared to read C-sources.
> 
> Has anyone a RPi4 or RPi4B with memory != 1GB, who could verify that issue?
> 
> I found some information on a chinese website where somebody posted a dmesg
> output of FreeBSD 13-CURRENT on an RPi4B (8 GB version) where the memory
> allocation was correct.
> 

I've access to both 4 GiBYTe and 8 GiByte RPi4B's. I've
had no trouble with RAM size being recognized at any
time. As stands, I've got head -r363590 in use.

But, be warned, FreeBSD does not correctly handle DMA
for > 3 GiByte yet. The only stable environment I've
had for FreeBSD has been UEFI/ACPI with the selection
to limit RAM to 3 GiBytes.

For 4 GiByte+ I would have various 4K pages written to
the USB SSD that had the wrong content. Copying a huge
file and then diffing the copies seemed to be guaranteed
to fail. (I generally picked "huge" to be more than then
amount of RAM.) Both UEFI/ACPI and u-boot for this.

I'll note that I do some cross-checking by also running
NetBSD (also via UEFI/ACPI). In that context I've had
no troubles with allowing the actual RAM size.

For the FreeBSD UEFI/ACPI boots, I use a USB Ethernet
device, not the built in. The built-in and the sdcard
slot are ignored still for the UEFI/ACPI context. (They
work on NetBSD.)

From your dmesg report:

                   Type     Physical      Virtual   #Pages Attr
               Reserved 000000000000            0 00000002 WB 
     ConventionalMemory 000000002000         2000 00007ef0 WB 
       BootServicesData 000007ef2000      7ef2000 0000001c WB 
     ConventionalMemory 000007f0e000      7f0e000 00029f81 WB 
       BootServicesData 000031e8f000     31e8f000 00000001 WB 
             LoaderData 000031e90000     31e90000 00008001 WB 
             LoaderCode 000039e91000     39e91000 000000aa WB 
               Reserved 000039f3b000     39f3b000 00000007 WB 
       BootServicesData 000039f42000     39f42000 00000001 WB 
               Reserved 000039f43000     39f43000 00000002 WB 
    RuntimeServicesData 000039f45000     39f45000 00000001 WB RUNTIME
               Reserved 000039f46000     39f46000 00000001 WB 
       BootServicesData 000039f47000     39f47000 00000002 WB 
    RuntimeServicesData 000039f49000     39f49000 00000002 WB RUNTIME
             LoaderData 000039f4b000     39f4b000 00001405 WB 
    RuntimeServicesCode 00003b350000     3b350000 00000010 WB RUNTIME
             LoaderData 00003b360000     3b360000 000000a0 WB 
         MemoryMappedIO 0000fe100000     fe100000 00000001 RUNTIME
Physical memory chunk(s):
  0x00002000 - 0x39f3afff,   927 MB ( 237369 pages)
  0x39f42000 - 0x39f42fff,     0 MB (      1 pages)
  0x39f45000 - 0x39f45fff,     0 MB (      1 pages)
  0x39f47000 - 0x3b34ffff,    20 MB (   5129 pages)
  0x3b360000 - 0x3b3fffff,     0 MB (    160 pages)
Excluded memory regions:
  0x00000000 - 0x00001fff,     0 MB (      2 pages) NoAlloc 
  0x32000000 - 0x33392fff,    19 MB (   5011 pages) NoAlloc 
  0x39f3b000 - 0x39f41fff,     0 MB (      7 pages) NoAlloc 
  0x39f43000 - 0x39f46fff,     0 MB (      4 pages) NoAlloc 
  0x39f49000 - 0x39f4afff,     0 MB (      2 pages) NoAlloc 
  0x3b350000 - 0x3b35ffff,     0 MB (     16 pages) NoAlloc 
  0x3e513000 - 0x3ebebfff,     6 MB (   1753 pages) NoAlloc 
  0xfe100000 - 0xfe100fff,     0 MB (      1 pages) NoAlloc 

That means that nothing later in FreeBSD is going to
see more RAM.

May be u-boot or UEFI can report the amount of RAM it
finds? If it is 1 GiByte at such an early stage, later
stages are not likely to find more. If UEFI/ACPI finds
1 GiByte, a NetBSD test would likely agree. (Same type
of staging issue.)

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-arm mailing list