Enabling 8 GB RAM on Banana Pi BPI‑R4

Work in Progress – testing ongoing
Director: AKADATA LIMITED
Source thread: https://forum.banana-pi.org/t/bpi-r4-frank-w-bpi-r4-u-boot-build-flash-nand/23112
Frank Wunderlich’s repositories supply the base code and build scripts referenced below.
Status
- Verification currently under way on two production boards.
- Once both units pass cold‑boot and 24‑hour memory‑stress, pre‑built images, checksums, and a one‑line installer will be published here.
- Feedback from additional testers is welcomed in the forum thread above.
Prerequisites
Item | Notes |
---|---|
Linux build host | Ubuntu 22.04 LTS or newer, 10 GB free disk, 4 GB RAM |
Toolchains | gcc-aarch64-linux-gnu , build-essential , device-tree-compiler , vim |
Two Git trees | u-boot-r4 and mtk-atf-2025 (both from Frank Wonderlich) |
Serial console | Mandatory — boards have no built‑in display; serial output is the only diagnostic channel |
1 Clone sources
# All paths are relative to $HOME/bpir4-wip
mkdir -p $HOME/bpir4-wip && cd $_
# Frank's current branches
git clone https://github.com/frank-w/u-boot -b 2025-04-bpi u-boot-r4 # U‑Boot
git clone https://github.com/frank-w/u-boot -b mtk-atf-2025 mtk-atf-2025 # ATF/BL2
Inline comments clarify each command.
Lines beginning with #
are safe to copy; bash ignores them.
2 Prepare configuration files
2.1 build.conf
for both trees
cat > build.conf <<'EOF'
board=bpi-r4
device=spi-nand
extraflags=DDR4_4BG_MODE=1 # enables 8 GB training
EOF
The same three‑line file lives in the root of each repository.
2.2 Add 8 GB size to ATF’s DRAM list
vim mtk-atf-2025/plat/mediatek/mt7988/drivers/dram/dram-configs.mk
Inside dram-configs.mk
locate:
AVAIL_DRAM_SIZE := 1024 2048
…and extend it to:
AVAIL_DRAM_SIZE := 1024 2048 4096 # 4096 MB × 2 ranks = 8 GB
Removing DRAM_USE_COMB=1
(if present) avoids detection stalls.
3 Build artefacts
3.1 U‑Boot
cd u-boot-r4
./build.sh importconfig # loads board defaults
./build.sh build # ~3 min on Ryzen 5
./build.sh rename # creates u-boot-r4_2025.04-arm64-spi-nand.bin
3.2 ATF / BL2
cd ../mtk-atf-2025
./build.sh build # outputs bl2.img and fip.bin
4 Flash BL2 & FIP to SPI‑NAND
Important: This step changes the boot ROM hand‑off; keep a serial cable attached.
# At the U‑Boot prompt; USB stick on port 0 holds the new binaries
usb start # initialise storage
mtd erase spi-nand0 # full wipe
load usb 0:5 ${loadaddr} bl2.img # BL2 at offset 0x0
mtd write spi-nand0 ${loadaddr} 0x0 0x100000
load usb 0:5 ${loadaddr} fip.bin # FIP at offset 0x580000
mtd write spi-nand0 ${loadaddr} 0x580000 0x200000
reset
Inline offsets follow Frank’s original layout; adjust when booting from eMMC.
5 Confirm 8 GB detection
During the early BL2 log the UART should display:
NOTICE: EMI: DDR4 4BG mode
NOTICE: EMI: Detected DRAM size: 8192 MB
Linux, once started, reports approximately 7.7 GiB:
free -h
total used free shared buff/cache available
Mem: 7.7Gi 76Mi 7.4Gi 16Mi 132Mi 7.4Gi
Swap: 0B 0B 0B
Absence of the 8192 MB
line indicates the size flag or DRAM list is still missing.
6 Rollback procedure
setenv skip_bl2 1 # ignore BL2 on next boot
saveenv
reset
The board falls back to the previous loader stored in on‑chip ROM.
Use this only for recovery; remove skip_bl2
once the fix is applied.
7 Next steps
- Automation: A single
install-8g.sh
is being drafted to wrap steps 2‑5. - Binary releases: Pre‑built
bl2.img
andfip.bin
will be hosted in the same forum thread with SHA‑256 sums. - Documentation merge: After double‑confirmation, this article’s commands will enter the mainline BPI‑R4 wiki.
Community collaboration is appreciated. Questions and test reports belong in the forum link cited above.
Changelog
Date (UTC) | Change |
---|---|
2025‑07‑04 | Initial public draft – testing on units Alpha and Beta |
t.b.d. | Add eMMC offsets, integrate automation script |
End of document — work in progress.