MilkV Pioneer only sees 16 GB of RAM after booting
U-Boot only sees 16 GB of the 128 installed in kestrel and that persists into the booted Linux instance, despite all other devices appearing normally. On RISC-V, the first stage boot loader ("ZSBL" in this case, or U-Boot SPL in others, potentially) is responsible for modifying memory maps in the FDT. U-Boot loads its own FDT for the SG2042 evaluation board which only exposes one DRAM bank. U-Boot might also do some FDT "fixups" relating to memory maps according to these settings:
CONFIG_OF_BOARD_FIXUP=y
CONFIG_ARCH_FIXUP_FDT_MEMORY=y
CONFIG_EFI_DT_FIXUP=y
Despite trying many different combinations of configs to avoid passing any modified FDT to Linux, only 16 GB is ever visible. Workaround is to use u-root.
U-Boot 2023.10-rc2-gf463d41310-dirty (Feb 25 2024 - 18:18:39 -0500)
CPU: rv64imafdc
Model: Sophgo SG2042 A00
DRAM: 16 GiB
Core: 19 devices, 11 uclasses, devicetree: separate
MMC: sdhc@704002B000: 0
Loading Environment from nowhere... OK
In: uart@7040000000
Out: uart@7040000000
Err: uart@7040000000
Model: Sophgo SG2042 A00
Net: ERROR: No phy could be detected
at drivers/net/dwc_eth_qos.c:1544/eqos_mdio_register()
ERROR: eqos_mdio_register() failed: -67
at drivers/net/dwc_eth_qos.c:1869/eqos_probe()
No ethernet found.
Hit any key to stop autoboot: 0
[Sophgo]# fdt addr $fdt_addr_fixed
Working FDT set to 20000000
[Sophgo]# fdt print
/ {
model = "Sophgo Mango";
compatible = "sophgo,mango";
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
dma-noncoherent;
cpus {
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
timebase-frequency = <0x02faf080>;
cpu-map {
socket0 {
cluster0 {
core0 {
cpu = <0x00000001>;
};
core1 {
cpu = <0x00000002>;
};
core2 {
cpu = <0x00000003>;
};
core3 {
cpu = <0x00000004>;
};
};
...