Device Tree and memory nodes - notro/rpi-firmware GitHub Wiki
Linux kernel handling of /memory/reg and /memreserve/
start_kernel
|
`--> setup_arch
|
|--> setup_machine_fdt
| |
| |--> pr_info("Machine: %s, model: %s\n", mdesc_best->name, model);
| |
| `--> of_scan_flat_dt
| |
| `--> early_init_dt_scan_memory (/memory/reg)
| |
| |--> pr_debug("memory scan node %s, reg size %ld, data: %x %x %x %x,\n", ...);
| |
| +--> early_init_dt_add_memory_arch (register memory banks)
| |
| `--> arm_add_memory
|
`--> arm_memblock_init
|
|--> memblock_add (Add memory banks)
|
|--> memblock_reserve (Reserve kernel)
| |
| `--> memblock_dbg("memblock_reserve: [%#016llx-%#016llx] %pF\n", ...);
| |
| `--> if('memblock=debug') printk(...);
|
|--> arm_mm_memblock_reserve (Reserve the page tables)
| |
| `--> memblock_reserve
|
|--> arm_dt_memblock_reserve (Reserve the dtb region and Process the reserve map: /memreserve/)
| |
| `--> memblock_reserve
|
|--> mdesc->reserve
|
`--> memblock_dump_all (commandline: memblock=debug)
|
`--> __memblock_dump_all
|
`--> pr_info("MEMBLOCK configuration:\n");
pr_info(...);