Skip to content

Instantly share code, notes, and snippets.

@N1kroks
Last active November 9, 2025 16:09
Show Gist options
  • Select an option

  • Save N1kroks/0b3942a951a2d4504efe82ab82bc7a50 to your computer and use it in GitHub Desktop.

Select an option

Save N1kroks/0b3942a951a2d4504efe82ab82bc7a50 to your computer and use it in GitHub Desktop.
import argparse
import re
import typing
from pyfdt.pyfdt import FdtBlobParse, Fdt, FdtNode, FdtProperty
CONFIG_PARAMETERS_BLACKLIST = [
"ConfigParameterCount",
"MaxCount",
"StrMaxCount"
]
MEMORY_MAP_DTB_PATH = "/soc/memorymap/"
REG_MAP_DTB_PATH = "/soc/registermap/"
CONFIG_MAP_DTB_PATH = "/sw/uefi/"
HOB_DICT = {
0x0: "AddMem",
0x4: "NoHob",
0x5: "AddDev",
0x9: "NoMap",
0xA: "AddMem" # AddDynamicMem
}
RESOURCE_TYPE_DICT = {
0x0: "SYS_MEM",
0x1: "MMAP_IO",
0x5: "MEM_RES"
}
RESOURCE_ATTRIBUTE_DICT = {
0x02: "INITIALIZED",
0x400: "UNCACHEABLE",
0x703C07: "SYS_MEM_CAP"
}
MEMORY_TYPE_DICT = {
0x0: "Reserv",
0x4: "BsData",
0x7: "Conv",
0xB: "MmIO"
}
CACHE_ATTRIBUTE_DICT = {
0x02: "WRITE_BACK",
0x09: "NS_DEVICE",
0x20: "WRITE_THROUGH_XN",
0x22: "WRITE_BACK_XN",
0x25: "UNCACHED_UNBUFFERED_XN"
}
def ParseArgs():
parser = argparse.ArgumentParser()
parser.add_argument('files', nargs="+")
parser.add_argument('-i', '--ignore-gaps', action='store_true')
return parser.parse_args()
class MemoryRegion:
def __init__(self, name: str, space: int, base: int, size: int, hob_option: str, resource_attribute: str, arm_attribute: str, resource_type: str, cache_type: str):
self.name = name
self.space = space
self.base = base
self.size = size
self.hob_option = hob_option
self.resource_attribute = resource_attribute
self.arm_attribute = arm_attribute
self.resource_type = resource_type
self.cache_type = cache_type
def __str__(self) -> str:
return "{{{},{}0x{:08X}, 0x{:08X}, {}, {}, {}, {}, {}}},".format(self.name, " " * self.space, self.base, self.size, self.hob_option, self.resource_attribute, self.arm_attribute, self.resource_type, self.cache_type)
class ConfigurationParameter:
def __init__(self, name: str, value: int):
self.name = name
self.value = value
def __str__(self) -> str:
return "{{\"{}\", 0x{:0x}}},".format(self.name, self.value)
def ParseLineToMemoryRegion(line: str) -> MemoryRegion:
if line[-1] == "\n":
line = line[0:-1]
base, size, name, hob, resource_attribute, arm_attribute, resource_type, cache_type = line.split(',')
while name[0] == " ":
name = name[1:]
while resource_attribute[0] == " ":
resource_attribute = resource_attribute[1:]
while arm_attribute[0] == " ":
arm_attribute = arm_attribute[1:]
while resource_type[0] == " ":
resource_type = resource_type[1:]
while cache_type[0] == " ":
cache_type = cache_type[1:]
space_count = hob.count(' ')
hob = hob[(space_count):]
return MemoryRegion(name, space_count, int(base, 16), int(size, 16), hob, resource_attribute, arm_attribute, resource_type, cache_type)
# Needed because SoCs newer than sm8650 use snake_case named props instead of CamelCase
def camel_to_snake(name: str) -> str:
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1-\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1-\2', s1).lower()
def GetMemoryNodeProp(dtb: Fdt, path: str, name: str) -> FdtProperty:
prop = dtb.resolve_path(path + name)
if prop is None:
prop = dtb.resolve_path(path + camel_to_snake(name))
return prop
def MemoryNodeToMemoryRegion(dtb: Fdt, path: str, addr_cells: int, size_cells: int) -> MemoryRegion:
reg = GetMemoryNodeProp(dtb, path, "reg")
base = reg[0] if addr_cells == 1 else (reg[0] << 32) + reg[1]
size = reg[1] if size_cells == 1 else (reg[2] << 32) + reg[3]
name = GetMemoryNodeProp(dtb, path, "MemLabel")[0]
hob = HOB_DICT.get(GetMemoryNodeProp(dtb, path, "BuildHob")[0], "UNK")
resource_type = RESOURCE_TYPE_DICT.get(GetMemoryNodeProp(dtb, path, "ResourceType")[0], "UNK")
resource_attribute = RESOURCE_ATTRIBUTE_DICT.get(GetMemoryNodeProp(dtb, path, "ResourceAttribute")[0], "UNK")
memory_type = MEMORY_TYPE_DICT.get(GetMemoryNodeProp(dtb, path, "MemoryType")[0], "UNK")
cache_attribute = CACHE_ATTRIBUTE_DICT.get(GetMemoryNodeProp(dtb, path, "CacheAttributes")[0], "UNK")
if name == "NOMAP":
return None
return MemoryRegion("\"{}\"".format(name), 18 - len(name), base, size, hob, resource_type, resource_attribute, memory_type, cache_attribute)
def GapChecker(regions: list[MemoryRegion]) -> list[MemoryRegion]:
if len(regions) == 0:
return regions
result = regions.copy()
descriptors = regions.copy()
last_desc = descriptors[0]
descriptors.pop(0)
for desc in descriptors:
if last_desc.base + last_desc.size < desc.base:
ram_region = MemoryRegion("\"RAM Partition\"", 5, "0x0", "0x0", "AddMem", "SYS_MEM", "SYS_MEM_CAP", "Conv", "WRITE_BACK_XN")
ram_region.base = last_desc.base + last_desc.size
ram_region.size = desc.base - (last_desc.base + last_desc.size)
if ram_region.size:
result.append(ram_region)
last_desc = desc
result.sort(key=lambda r: r.base)
return result
def ParseLineToConfig(line: str) -> str:
if line[-1] == "\n":
line = line[0:-1]
name, value = line.split(' = ')
while name[-1] == " ":
name = name[:-1]
while value[-1] == " ":
value = value[:-1]
if value[0] == '\"':
return None
if name in CONFIG_PARAMETERS_BLACKLIST:
return None
return ConfigurationParameter(name, int(value, 0))
def ParseMapToRegions(file: typing.TextIO) -> typing.Tuple[str, list[MemoryRegion]]:
regions = []
while True:
this_line = file.readline()
if this_line == '' or this_line[0] == '[':
break
if this_line[0] == '\n' or this_line[0] == '#' and this_line[0:2] != '#-':
continue
if this_line[0] == "#":
continue
while this_line[-1] == " " or this_line[-1] == "\n":
this_line = this_line[:-1]
regions.append(ParseLineToMemoryRegion(this_line))
return this_line, regions
def Main(files: list[str], ignore_gaps: bool):
this_line = None
uefi_plat = None
dtb = None
for filename in files:
if filename.endswith(".dtb"):
dtb = FdtBlobParse(open(filename, "rb")).to_fdt()
elif filename.endswith(".cfg"):
uefi_plat = open(filename, "r")
else:
print("Unknown file")
return
ddr_regions = []
reg_regions = []
config_params = []
if uefi_plat is not None:
while True:
this_line = uefi_plat.readline()
if this_line == '':
break
if this_line[0] == "#":
continue
if this_line == "[MemoryMap]\n":
this_line, ddr_regions = ParseMapToRegions(uefi_plat)
if this_line == "[RegisterMap]\n":
this_line, reg_regions = ParseMapToRegions(uefi_plat)
if this_line == "[ConfigParameters]\n":
while True:
this_line = uefi_plat.readline()
if this_line == '' or this_line[0] == '[':
break
if this_line[0] == '\n' or this_line[0] == '#' and this_line[0:2] != '#-':
continue
while this_line[-1] == " " or this_line[-1] == "\n":
this_line = this_line[:-1]
config = ParseLineToConfig(this_line)
if config is None:
continue
config_params.append(config)
if len(ddr_regions) == 0 and len(reg_regions) == 0:
if dtb == None:
print("Provided UEFI Plat does not have 'MemoryMap' and 'RegisterMap', if SoC is newer than sm8550 they are in XBLConfig, so you need to provide dtb extracted from XBLConfig")
else:
addr_cells = dtb.resolve_path(MEMORY_MAP_DTB_PATH + "#address-cells")[0]
size_cells = dtb.resolve_path(MEMORY_MAP_DTB_PATH + "#size-cells")[0]
nodes = dtb.resolve_path(MEMORY_MAP_DTB_PATH)
for node in nodes:
if isinstance(node, FdtNode):
region = MemoryNodeToMemoryRegion(dtb, MEMORY_MAP_DTB_PATH + node.name + "/", addr_cells, size_cells, )
if region is None:
continue
ddr_regions.append(region)
addr_cells = dtb.resolve_path(REG_MAP_DTB_PATH + "#address-cells")[0]
size_cells = dtb.resolve_path(REG_MAP_DTB_PATH + "#size-cells")[0]
nodes = dtb.resolve_path(REG_MAP_DTB_PATH)
for node in nodes:
if isinstance(node, FdtNode):
region = MemoryNodeToMemoryRegion(dtb, REG_MAP_DTB_PATH + node.name + "/", addr_cells, size_cells)
if region is None:
continue
reg_regions.append(region)
if len(config_params) == 0:
if dtb == None:
print("Provided UEFI Plat does not have 'ConfigParameters', if SoC is newer than sm8650 they are in XBLConfig, so you need to provide dtb extracted from XBLConfig")
else:
configs = dtb.resolve_path(CONFIG_MAP_DTB_PATH + "int_param")
if isinstance(configs, FdtNode):
for c in configs:
if isinstance(c, FdtProperty):
if c.name in CONFIG_PARAMETERS_BLACKLIST:
continue
config_params.append(ConfigurationParameter(c.name, c[0] << 32 | c[1]))
else:
print("Provided DTB Does not have 'int_param' node, if SoC is older than sm8750 they are in UEFI Plat config, so you need to provide UEFI Plat config extracted from XBL")
# Sort regions by base
ddr_regions.sort(key=lambda r: r.base)
if ignore_gaps != True:
ddr_regions = GapChecker(ddr_regions)
if len(ddr_regions) > 0:
print("// DDR Regions")
for region in ddr_regions:
print(region)
if len(reg_regions) > 0:
print("\n// Register Regions")
for region in reg_regions:
print(region)
if len(config_params) > 0:
print("\n// Configuration Map")
for config in config_params:
print(config)
if len(ddr_regions) > 0:
print("\nDynamic RAM Start Address: 0x{:08X}".format(ddr_regions[-1].base + ddr_regions[-1].size))
if uefi_plat is not None:
uefi_plat.close()
if __name__ == '__main__':
Main(**vars(ParseArgs()))
@N1kroks
Copy link
Author

N1kroks commented Jun 2, 2024

It will print memory map and configuration map
Examples:

$ python MemoryMapGenerator.py post-ddr-palawan-1.0.dtb
Provided DTB Does not have 'int_param' node, if SoC is older than sm8750 they are in UEFI Plat config, so you need to provide UEFI Plat config extracted from XBL

// DDR Regions
{"RSRV0",             0x816E0000, 0x00320000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"XBL DT",            0x81A00000, 0x00040000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"XBL Ramdump",       0x81A40000, 0x001C0000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"AOP",               0x81C00000, 0x000A0000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x81CA0000, 0x00044000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"UEFI Log",          0x81CE4000, 0x00010000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x81CF4000, 0x0000C000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"SMEM",              0x81D00000, 0x00200000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x81F00000, 0x005A0000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"PvmFw",             0x824A0000, 0x00100000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"RAM Partition",     0x825A0000, 0x09660000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"PIL Reserved",      0x8BC00000, 0x16E00000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"DBI Dump",          0xA2A00000, 0x00F00000, NoHob, MMAP_IO, INITIALIZED, Conv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0xA3900000, 0x03700000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"UEFI FD",           0xA7000000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"UEFI FD Reserved",  0xA7400000, 0x00200000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"CPU_Vectors",       0xA7600000, 0x00001000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"Info Blk",          0xA7601000, 0x00001000, AddMem, SYS_MEM, SYS_MEM_CAP, UNK, WRITE_BACK_XN},
{"MMU PageTables",    0xA7602000, 0x00003000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Log Buffer",        0xA7605000, 0x00008000, AddMem, SYS_MEM, SYS_MEM_CAP, UNK, WRITE_BACK_XN},
{"UEFI Stack",        0xA760D000, 0x00040000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"SEC Heap",          0xA764D000, 0x0008C000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Sched Heap",        0xA76D9000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"FV Region",         0xA7AD9000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"UEFI RESV",         0xA7ED9000, 0x00127000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Kernel",            0xA8000000, 0x10000000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"DXE Heap",          0xB8000000, 0x1BA00000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"Display Demura",    0xD3A00000, 0x02B00000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_THROUGH_XN},
{"RAM Partition",     0xD6500000, 0x02300000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"TZApps Reserved",   0xD8800000, 0x093B0000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0xE1BB0000, 0x01D90000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"Display Reserved",  0xE3940000, 0x02B00000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_THROUGH_XN},
{"DXE Heap1",         0xE6440000, 0x0CDC0000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},

// Register Regions
{"IMEM Base",         0x14680000, 0x0002A000, NoHob, MMAP_IO, INITIALIZED, Conv, NS_DEVICE},
{"IMEM Cookie Base",  0x146AA000, 0x00016000, AddDev, MMAP_IO, INITIALIZED, Conv, NS_DEVICE},
{"IPC ROUTER TOP",    0x00400000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"SECURITY CONTROL",  0x00780000, 0x00007000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"QUP",               0x00800000, 0x00300000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"PRNG CFG PRNG",     0x010C0000, 0x0000C000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"CRYPTO0 CRYPTO",    0x01DC0000, 0x00040000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"CLK TCSR TCSR REGS",0x01F00000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"PERIPH SS",         0x08800000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"USB",               0x0A600000, 0x00200000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"AOSS",              0x0B000000, 0x04000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"TLMM",              0x0F000000, 0x01000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"SMMU",              0x15000000, 0x00200000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"APSS HM",           0x17000000, 0x02000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},

Dynamic RAM Start Address: 0xF3200000
$ python MemoryMapGenerator.py bale_uefiplat.cfg
Provided UEFI Plat does not have 'MemoryMap' and 'RegisterMap', if SoC is newer than sm8550 they are in XBLConfig, so you need to provide dtb extracted from XBLConfig

// Configuration Map
{"EnableShell", 0x1},
{"SecPagePoolCount", 0x1800},
{"SharedIMEMBaseAddr", 0x14680000},
{"DloadCookieAddr", 0x1fd9000},
{"DloadCookieValue", 0x10},
{"SkipDBISetup", 0x0},
{"PilSubsysDbgCookieAddr", 0x146806dc},
{"PilSubsysDbgCookieVal", 0x53444247},
{"NumCpus", 0x8},
{"NumActiveCores", 0x8},
{"MaxLogFileSize", 0x400000},
{"UefiMemUseThreshold", 0xe1},
{"USBHS1_Config", 0x0},
{"UsbFnIoRevNum", 0x10001},
{"PwrBtnShutdownFlag", 0x0},
{"Sdc1GpioConfigOn", 0x1e92},
{"Sdc2GpioConfigOn", 0x1e92},
{"Sdc1GpioConfigOff", 0xa00},
{"Sdc2GpioConfigOff", 0xa00},
{"EnableSDHCSwitch", 0x1},
{"EnableUfsIOC", 0x1},
{"UfsSmmuConfigForOtherBootDev", 0x1},
{"SecurityFlag", 0xc4},
{"DetectRetailUserAttentionHotkey", 0x0},
{"DetectRetailUserAttentionHotkeyCode", 0x17},
{"EnableOEMSetupAppInRetail", 0x0},
{"EnableLogFsSyncInRetail", 0x0},
{"EnableSecurityHoleForSplashPartition", 0x1},
{"ShmBridgememSize", 0xa00000},
{"EnableMultiThreading", 0x1},
{"EarlyInitCoreCnt", 0x2},
{"EnableUefiSecAppDebugLogDump", 0x0},
{"AllowNonPersistentVarsInRetail", 0x1},
{"EnableDisplayThread", 0x1},
{"EnableDisplayImageFv", 0x0},
{"DDRInfoNotifyFlag", 0x0},
{"EnableMultiCoreFvDecompression", 0x1},
{"EnableVariablePolicyEngine", 0x0},
{"EnableACPIFallback", 0x0},
{"DRAM_CLK_PERIOD_ADDR", 0x240ba050},
$ python MemoryMapGenerator.py post-ddr-palawan-1.0.dtb bale_uefiplat.cfg
// DDR Regions
{"RSRV0",             0x816E0000, 0x00320000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"XBL DT",            0x81A00000, 0x00040000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"XBL Ramdump",       0x81A40000, 0x001C0000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"AOP",               0x81C00000, 0x000A0000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x81CA0000, 0x00044000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"UEFI Log",          0x81CE4000, 0x00010000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x81CF4000, 0x0000C000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"SMEM",              0x81D00000, 0x00200000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x81F00000, 0x005A0000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"PvmFw",             0x824A0000, 0x00100000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"RAM Partition",     0x825A0000, 0x09660000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"PIL Reserved",      0x8BC00000, 0x16E00000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"DBI Dump",          0xA2A00000, 0x00F00000, NoHob, MMAP_IO, INITIALIZED, Conv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0xA3900000, 0x03700000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"UEFI FD",           0xA7000000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"UEFI FD Reserved",  0xA7400000, 0x00200000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"CPU_Vectors",       0xA7600000, 0x00001000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"Info Blk",          0xA7601000, 0x00001000, AddMem, SYS_MEM, SYS_MEM_CAP, UNK, WRITE_BACK_XN},
{"MMU PageTables",    0xA7602000, 0x00003000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Log Buffer",        0xA7605000, 0x00008000, AddMem, SYS_MEM, SYS_MEM_CAP, UNK, WRITE_BACK_XN},
{"UEFI Stack",        0xA760D000, 0x00040000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"SEC Heap",          0xA764D000, 0x0008C000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Sched Heap",        0xA76D9000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"FV Region",         0xA7AD9000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"UEFI RESV",         0xA7ED9000, 0x00127000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Kernel",            0xA8000000, 0x10000000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"DXE Heap",          0xB8000000, 0x1BA00000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"Display Demura",    0xD3A00000, 0x02B00000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_THROUGH_XN},
{"RAM Partition",     0xD6500000, 0x02300000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"TZApps Reserved",   0xD8800000, 0x093B0000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0xE1BB0000, 0x01D90000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"Display Reserved",  0xE3940000, 0x02B00000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_THROUGH_XN},
{"DXE Heap1",         0xE6440000, 0x0CDC0000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},

// Register Regions
{"IMEM Base",         0x14680000, 0x0002A000, NoHob, MMAP_IO, INITIALIZED, Conv, NS_DEVICE},
{"IMEM Cookie Base",  0x146AA000, 0x00016000, AddDev, MMAP_IO, INITIALIZED, Conv, NS_DEVICE},
{"IPC ROUTER TOP",    0x00400000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"SECURITY CONTROL",  0x00780000, 0x00007000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"QUP",               0x00800000, 0x00300000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"PRNG CFG PRNG",     0x010C0000, 0x0000C000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"CRYPTO0 CRYPTO",    0x01DC0000, 0x00040000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"CLK TCSR TCSR REGS",0x01F00000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"PERIPH SS",         0x08800000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"USB",               0x0A600000, 0x00200000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"AOSS",              0x0B000000, 0x04000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"TLMM",              0x0F000000, 0x01000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"SMMU",              0x15000000, 0x00200000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"APSS HM",           0x17000000, 0x02000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},

// Configuration Map
{"EnableShell", 0x1},
{"SecPagePoolCount", 0x1800},
{"SharedIMEMBaseAddr", 0x14680000},
{"DloadCookieAddr", 0x1fd9000},
{"DloadCookieValue", 0x10},
{"SkipDBISetup", 0x0},
{"PilSubsysDbgCookieAddr", 0x146806dc},
{"PilSubsysDbgCookieVal", 0x53444247},
{"NumCpus", 0x8},
{"NumActiveCores", 0x8},
{"MaxLogFileSize", 0x400000},
{"UefiMemUseThreshold", 0xe1},
{"USBHS1_Config", 0x0},
{"UsbFnIoRevNum", 0x10001},
{"PwrBtnShutdownFlag", 0x0},
{"Sdc1GpioConfigOn", 0x1e92},
{"Sdc2GpioConfigOn", 0x1e92},
{"Sdc1GpioConfigOff", 0xa00},
{"Sdc2GpioConfigOff", 0xa00},
{"EnableSDHCSwitch", 0x1},
{"EnableUfsIOC", 0x1},
{"UfsSmmuConfigForOtherBootDev", 0x1},
{"SecurityFlag", 0xc4},
{"DetectRetailUserAttentionHotkey", 0x0},
{"DetectRetailUserAttentionHotkeyCode", 0x17},
{"EnableOEMSetupAppInRetail", 0x0},
{"EnableLogFsSyncInRetail", 0x0},
{"EnableSecurityHoleForSplashPartition", 0x1},
{"ShmBridgememSize", 0xa00000},
{"EnableMultiThreading", 0x1},
{"EarlyInitCoreCnt", 0x2},
{"EnableUefiSecAppDebugLogDump", 0x0},
{"AllowNonPersistentVarsInRetail", 0x1},
{"EnableDisplayThread", 0x1},
{"EnableDisplayImageFv", 0x0},
{"DDRInfoNotifyFlag", 0x0},
{"EnableMultiCoreFvDecompression", 0x1},
{"EnableVariablePolicyEngine", 0x0},
{"EnableACPIFallback", 0x0},
{"DRAM_CLK_PERIOD_ADDR", 0x240ba050},

Dynamic RAM Start Address: 0xF3200000
$ python MemoryMapGenerator.py alioth_uefiplat.cfg
// DDR Regions
{"IPC SHM",           0x805D0000, 0x00020000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"RAM Partition",     0x805F0000, 0x00010000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"MPSS EFS",          0x80600000, 0x00100000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"BOOT INFO",         0x80700000, 0x00100000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"RAM Partition",     0x80800000, 0x00060000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"AOP CMD DB",        0x80860000, 0x00020000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x80880000, 0x00004000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"XBL Log Buffer",    0x80884000, 0x00010000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"RAM Partition",     0x80894000, 0x0006C000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"SMEM",              0x80900000, 0x00200000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x80B00000, 0x01900000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"TZApps Reserved",   0x82400000, 0x09600000, HobOnlyNoCacheSetting, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x8BA00000, 0x00200000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"PIL Reserved",      0x8BC00000, 0x12E00000, AddMem, MEM_RES, UNCACHEABLE, Reserv, UNCACHED_UNBUFFERED_XN},
{"DXE Heap",          0x98900000, 0x03300000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"Sched Heap",        0x9BC00000, 0x00400000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"Display Reserved",  0x9C000000, 0x02400000, AddMem, MEM_RES, SYS_MEM_CAP, Reserv, WRITE_THROUGH_XN},
{"DBI Dump",          0x9E400000, 0x00F00000, NoHob, MMAP_IO, INITIALIZED, Conv, UNCACHED_UNBUFFERED_XN},
{"RAM Partition",     0x9F300000, 0x00500000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"FV Region",         0x9F800000, 0x00200000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"ABOOT FV",          0x9FA00000, 0x00200000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},
{"UEFI FD",           0x9FC00000, 0x00300000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"SEC Heap",          0x9FF00000, 0x0008C000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"CPU Vectors",       0x9FF8C000, 0x00001000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK},
{"MMU PageTables",    0x9FF8D000, 0x00003000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"UEFI Stack",        0x9FF90000, 0x00040000, AddMem, SYS_MEM, SYS_MEM_CAP, BsData, WRITE_BACK_XN},
{"RAM Partition",     0x9FFD0000, 0x00027000, AddMem, SYS_MEM, SYS_MEM_CAP, Conv, WRITE_BACK_XN},
{"Log Buffer",        0x9FFF7000, 0x00008000, AddMem, SYS_MEM, SYS_MEM_CAP, RtData, WRITE_BACK_XN},
{"Info Blk",          0x9FFFF000, 0x00001000, AddMem, SYS_MEM, SYS_MEM_CAP, RtData, WRITE_BACK_XN},
{"Kernel",            0xA0000000, 0x10000000, AddMem, SYS_MEM, SYS_MEM_CAP, Reserv, WRITE_BACK_XN},

// Register Regions
{"IMEM Base",          0x14680000, 0x00040000, NoHob, MMAP_IO, INITIALIZED, Conv, NS_DEVICE},
{"IMEM Cookie Base",   0x146BF000, 0x00001000, AddDev, MMAP_IO, INITIALIZED, Conv, NS_DEVICE},
{"IPC_ROUTER_TOP",     0x00400000, 0x00100000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"SECURITY CONTROL",   0x00780000, 0x00007000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"QUPV3_2_GSI",        0x00800000, 0x000D0000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"QUPV3_0_GSI",        0x00900000, 0x000D0000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"QUPV3_1_GSI",        0x00A00000, 0x000D0000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"PRNG_CFG_PRNG",      0x00790000, 0x00010000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"CRYPTO0 CRYPTO",     0x01DC0000, 0x00040000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"TCSR_TCSR_REGS",     0x01FC0000, 0x00030000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"GPU_GMU_CX_BLK",     0x02C7D000, 0x00002000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"GPU_CC",             0x02C90000, 0x0000A000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"QUPV3_SSC_GSI",      0x05A00000, 0x000D0000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"PERIPH_SS",          0x08800000, 0x00200000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"USB30_PRIM",         0x0A600000, 0x0011B000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"USB_RUMI",           0x0A720000, 0x00010000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"USB30_SEC",          0x0A800000, 0x0011B000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"AOSS",               0x0B000000, 0x04000000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"TLMM_WEST",          0x0F100000, 0x00300000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"TLMM_SOUTH",         0x0F500000, 0x00300000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"TLMM_NORTH",         0x0F900000, 0x00300000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"SMMU",               0x15000000, 0x000D0000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},
{"APSS_HM",            0x17800000, 0x0D981000, AddDev, MMAP_IO, UNCACHEABLE, MmIO, NS_DEVICE},

// Configuration Map
{"NumCpusFuseAddr", 0x5c04c},
{"EnableShell", 0x1},
{"EUDEnableAddr", 0x88e2000},
{"SecPagePoolCount", 0x800},
{"SharedIMEMBaseAddr", 0x146bf000},
{"DloadCookieAddr", 0x1fd3000},
{"DloadCookieValue", 0x10},
{"NumCpus", 0x8},
{"NumActiveCores", 0x8},
{"MaxLogFileSize", 0x400000},
{"UefiMemUseThreshold", 0x77},
{"USBHS1_Config", 0x0},
{"UsbFnIoRevNum", 0x10001},
{"PwrBtnShutdownFlag", 0x0},
{"Sdc1GpioConfigOn", 0x1e92},
{"Sdc2GpioConfigOn", 0x1e92},
{"Sdc1GpioConfigOff", 0xa00},
{"Sdc2GpioConfigOff", 0xa00},
{"EnableSDHCSwitch", 0x1},
{"EnableUfsIOC", 0x0},
{"UfsSmmuConfigForOtherBootDev", 0x1},
{"SecurityFlag", 0xc4},
{"EnableLogFsSyncInRetail", 0x1},
{"ShmBridgememSize", 0xa00000},
{"EnableMultiThreading", 0x1},
{"MaxCoreCnt", 0x8},
{"EarlyInitCoreCnt", 0x1},
{"EnableUefiSecAppDebugLogDump", 0x0},
{"AllowNonPersistentVarsInRetail", 0x1},
{"EnableDisplayThread", 0x1},
{"EnableDisplayImageFv", 0x0},

Dynamic RAM Start Address: 0xB0000000

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment