Skip to content

[Bug]: Total Ram detection in XF40H less than og stock fw reported. #459

Description

@Luizardoh

Pre-submission checklist

  • I am using the latest version of the project
  • I have searched existing issues to make sure this is not a duplicate
  • I have provided a screenshot from the DTB detection tool at https://lcdyk0517.github.io/dtbTools.html
  • I have described which DTB I selected in the issue

Firmware Type

arkos4clone

Version

ArkOS4Clone-08152026

DTB File

rk3326-xf40h-linux.dtb

DTB Detection Screenshot

Image

Console Output / Error

Bug Description

I bought an XF40H knowing I could put ArkOS4Clone on it, because I use PortMaster a lot and I don't like EmuELEC. However, I was surprised to see that the console reports quite a bit less RAM than when it runs with EmuELEC (whether the one on the eMMC it shipped with, or a second SD I flashed with its same stock image). In ArkOS it reports 611MB, with about 400 available to use, while the stock CFW reports a maximum of 975MB of RAM, with 321 free while in RetroArch (I know that firmware isn't the best at resource optimization anyway). But I was wondering what this difference in detection is due to.

For reference, the stock CFW runs kernel 5.11, while ArkOS uses kernel 4.4 — in case the kernel version matters at all for this.

I've done some tests but none have panned out:

I've seen that no DTB (arkos xf40h, emuelec rf3640g4ka, odroidgo2) declares a /memory node → the size is set by u-boot, not the dtb.
No mem= in bootargs; ARM64 uses the tree's /memory node (it doesn't add RAM via mem=).
I compared the boot regions byte by byte: the DDR firmware differs — ArkOS DDR fwver v2.12 vs stock DDR V2.08 20220817, same 333 MHz training clock; u-boot builds differ (arkos4clone 2026 vs pangjianwen 2025).
Test A — swapped the full stock boot region: it didn't boot ArkOS (my mistake: I didn't account for the partition table being rewritten + the stock u-boot uses extlinux, not boot.ini). Reverted.
Test B — spliced the DDR bin v2.08 into ArkOS's idbloader: it booted, but RAM stayed at 661, so the DDR blob at 0x8800 isn't the deciding factor.
Test C — full stock u-boot + an extlinux.conf pointing at the ArkOS kernel: booted ArkOS, but RAM still showed 661/758 MB physical → the SD bootloader isn't the deciding factor.
I analyzed reserved-memory, chosen, and dmc in the DTBs: only ~1 MB of reservations, none affecting the total.
Test max_ddrfreq=333: no change (rules out frequency).
As a loose idea I'm not sure about: maybe the total RAM is decided by u-boot's DDR training during boot, and over SD it only ever trains ~758MB no matter which SD bootloader is used — while the full 1GB (975MB) only appears through the sealed eMMC boot path. If that were true, it would be something baked into the boot/branding rather than something fixable through the SD. I can't access the eMMC's bootloader to confirm, though.
P.D. — I've included the photos from EmuELEC instead ssh ss reports because EmuELEC doesn't allow SSH access in my case, neither on its stock eMMC version nor on the copy I flashed to an SD card. As a cross-check, RetroArch inside ArkOS reports the same RAM figure I obtained over SSH, so the measurement method doesn't skew the result.

Steps to Reproduce

Expected Behavior (Optional)

No response

Screenshots / Video / Logs (Optional)

Image RAM reported by ArkOS4Clone over SSH

==========

Image

Retroarch in Emuelec reporting 975mb Ram

=======

Image Emuelec version in eMMC (same version in the another sd)

Additional Context (Optional)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions