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(...);