May 5, 2026

Allwinner H5 -- A new pagetable with the new U-boot

The old page table was simple. One level with 512 entries. All but the first 4 of those were zero.

The new (circa 2026.4) U-boot has a fancier setup. Let's look at it.

The level 1 table has 512 entries, all of which are zero except for the first 4 (that should sound familiar).

PTE-7fff0000  0000000000000401
PTE-7fff0008  000000007fff2003
PTE-7fff0010  000000007fff2401
PTE-7fff0018  000000007fff2401
PTE-7fff0020  0000000000000000
....
PTE-7fff0ff0  0000000000000000
PTE-7fff0ff8  0000000000000000
This gets followed by a second table, the so called "emergency table". And this table is the same as the simple 4 entry table in the old U-boot.
PTE-7fff1000  0000000000000401
PTE-7fff1008  0000000040000711
PTE-7fff1010  0000000080000711
PTE-7fff1018  00000000c0000711
PTE-7fff1020  0000000000000000
PTE-7fff1028  0000000000000000
...
PTE-7fff1ff0  0000000000000000
PTE-7fff1ff8  0000000000000000
Then we get the level 2 table referenced in the "main" level 1 table above:
PTE-7fff2000  0000000040000711
PTE-7fff2008  0000000040200711
PTE-7fff2010  0000000040400711
PTE-7fff2018  0000000040600711
PTE-7fff2020  0000000040800711
PTE-7fff2028  0000000040a00711
PTE-7fff2030  0000000040c00711
PTE-7fff2038  0000000040e00711
PTE-7fff2040  0000000041000711
....
....
PTE-7fff2f68  000000007da00711
PTE-7fff2f70  000000007dc00711
PTE-7fff2f78  000000007fff3003
PTE-7fff2f80  000000007e000711
PTE-7fff2f88  000000007e200711
PTE-7fff2f90  000000007e400711
PTE-7fff2f98  000000007e600711
PTE-7fff2fa0  000000007e800711
PTE-7fff2fa8  000000007ea00711
PTE-7fff2fb0  000000007ec00711
PTE-7fff2fb8  000000007ee00711
PTE-7fff2fc0  000000007f000711
PTE-7fff2fc8  000000007f200711
PTE-7fff2fd0  000000007f400711
PTE-7fff2fd8  000000007f600711
PTE-7fff2fe0  000000007f800711
PTE-7fff2fe8  000000007fa00711
PTE-7fff2ff0  000000007fc00711
PTE-7fff2ff8  000000007fe00711
Note the strange entry at PTE address PTE-7fff2f78. It points to a level 3 table. This table wil have 4K entries (i.e. pages).
PTE-7fff3000  000000007de00713
PTE-7fff3008  000000007de01713
PTE-7fff3010  000000007de02713
PTE-7fff3018  000000007de03713
...
...
PTE-7fff3fe0  004000007dffc713
PTE-7fff3fe8  004000007dffd713
PTE-7fff3ff0  004000007dffe713
PTE-7fff3ff8  004000007dfff713
After this address is just rubbish in RAM. So, why all of this? There must be something special among those 4K page entries that is not obvious glancing at 512 values fly past on the screen.


Have any comments? Questions? Drop me a line!

Tom's software pages / tom@mmto.org