From 2582b6021cc152b1484cfe5b189dd8100c5bf668 Mon Sep 17 00:00:00 2001 From: lgs2007m Date: Thu, 11 May 2023 11:27:51 +0800 Subject: [PATCH] Add meta-tools --- meta-tools/ipq40xx/bootconfig/bootconfig.xml | 39 + meta-tools/ipq40xx/cdt/128M16.xml | 118 + meta-tools/ipq40xx/cdt/256M16.xml | 118 + meta-tools/ipq40xx/cdt/64M16.xml | 118 + meta-tools/ipq40xx/config.xml | 136 + .../flash_partition/emmc-partition.xml | 187 ++ .../flash_partition/nand-partition.xml | 167 ++ .../ipq40xx/flash_partition/nor-partition.xml | 125 + .../flash_partition/norplusemmc-partition.xml | 103 + .../flash_partition/norplusnand-partition.xml | 116 + meta-tools/ipq5018/bootconfig/bootconfig.xml | 50 + meta-tools/ipq5018/cdt/128M16_DDR3.xml | 177 ++ meta-tools/ipq5018/cdt/256M16_DDR3.xml | 158 ++ meta-tools/ipq5018/cdt/2M512M8_DDR3.xml | 158 ++ meta-tools/ipq5018/cdt/512M16_DDR3.xml | 158 ++ meta-tools/ipq5018/config.xml | 284 ++ .../flash_partition/emmc-partition.xml | 309 +++ .../flash_partition/ipq5018-ubinize.cfg | 57 + .../flash_partition/ipq5018-ubinize_64.cfg | 58 + .../flash_partition/nand-4k-partition.xml | 212 ++ .../flash_partition/nand-partition.xml | 202 ++ .../ipq5018/flash_partition/nor-partition.xml | 152 ++ .../flash_partition/norplusemmc-partition.xml | 166 ++ .../norplusnand-4k-partition.xml | 164 ++ .../flash_partition/norplusnand-partition.xml | 204 ++ .../tiny-nor-debug-partition.xml | 109 + .../flash_partition/tiny-nor-partition.xml | 98 + .../ipq6018/bootconfig/bootconfig-audio.xml | 40 + meta-tools/ipq6018/bootconfig/bootconfig.xml | 50 + meta-tools/ipq6018/cdt/1024M32_DDR4.xml | 172 ++ meta-tools/ipq6018/cdt/128M16_DDR3.xml | 172 ++ meta-tools/ipq6018/cdt/128M32_DDR3.xml | 172 ++ meta-tools/ipq6018/cdt/256M16_DDR3.xml | 172 ++ meta-tools/ipq6018/cdt/256M32_DDR3.xml | 172 ++ meta-tools/ipq6018/cdt/256M32_DDR4.xml | 172 ++ meta-tools/ipq6018/cdt/512M16_DDR3.xml | 172 ++ meta-tools/ipq6018/cdt/512M16_DDR4.xml | 172 ++ meta-tools/ipq6018/cdt/512M32_DDR4.xml | 172 ++ meta-tools/ipq6018/config.xml | 160 ++ .../flash_partition/emmc-partition.xml | 291 ++ .../flash_partition/ipq6018-ubinize-audio.cfg | 57 + .../flash_partition/ipq6018-ubinize.cfg | 45 + .../ipq6018-ubinize_64-audio.cfg | 59 + .../flash_partition/ipq6018-ubinize_64.cfg | 46 + .../flash_partition/nand-4k-partition.xml | 220 ++ .../nand-audio-4k-partition.xml | 210 ++ .../flash_partition/nand-audio-partition.xml | 210 ++ .../flash_partition/nand-partition.xml | 220 ++ .../ipq6018/flash_partition/nor-partition.xml | 150 ++ .../flash_partition/norplusemmc-partition.xml | 187 ++ .../norplusnand-4k-partition.xml | 212 ++ .../flash_partition/norplusnand-partition.xml | 212 ++ .../flash_partition/tiny-nor-partition.xml | 150 ++ .../tiny-norplusemmc-partition.xml | 60 + .../tiny-norplusnand-partition.xml | 85 + meta-tools/ipq806x/bootconfig/bootconfig.xml | 50 + meta-tools/ipq806x/cdt/AK01_1XX-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP145-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP145_1XX-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP148-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP148_1XX-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP160-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP160_2XX-cdt.xml | 147 + meta-tools/ipq806x/cdt/AP161-cdt.xml | 147 + meta-tools/ipq806x/cdt/DB147-cdt.xml | 117 + meta-tools/ipq806x/cdt/DB149-cdt.xml | 147 + meta-tools/ipq806x/cdt/DB149_1XX-cdt.xml | 147 + meta-tools/ipq806x/cdt/DB149_2XX-cdt.xml | 147 + meta-tools/ipq806x/cdt/RUMI3-cdt.xml | 83 + meta-tools/ipq806x/cdt/TB725-cdt.xml | 117 + meta-tools/ipq806x/cdt/TB726-cdt.xml | 117 + meta-tools/ipq806x/config.xml | 142 + .../flash_partition/emmc-partition.xml | 244 ++ .../flash_partition/nand-partition.xml | 263 ++ .../ipq806x/flash_partition/nor-partition.xml | 148 + .../flash_partition/norplusemmc-partition.xml | 126 + .../flash_partition/norplusnand-partition.xml | 240 ++ meta-tools/ipq807x/bootconfig/bootconfig.xml | 54 + meta-tools/ipq807x/cdt/1024M16_DDR4.xml | 158 ++ meta-tools/ipq807x/cdt/1024M32_DDR4.xml | 158 ++ meta-tools/ipq807x/cdt/128M32_DDR3.xml | 158 ++ meta-tools/ipq807x/cdt/256M16_4L_DDR3.xml | 158 ++ meta-tools/ipq807x/cdt/256M16_DDR3.xml | 158 ++ meta-tools/ipq807x/cdt/256M32_4L_DDR3.xml | 158 ++ meta-tools/ipq807x/cdt/256M32_DDR3.xml | 158 ++ meta-tools/ipq807x/cdt/256M32_DDR4.xml | 158 ++ meta-tools/ipq807x/cdt/512M16_DDR4.xml | 158 ++ meta-tools/ipq807x/cdt/512M32_DDR3.xml | 158 ++ meta-tools/ipq807x/cdt/512M32_DDR4.xml | 158 ++ meta-tools/ipq807x/config.xml | 246 ++ .../flash_partition/emmc-partition.xml | 312 +++ .../flash_partition/ipq807x-ubinize.cfg | 33 + .../flash_partition/ipq807x-ubinize_64.cfg | 33 + .../flash_partition/nand-4k-partition.xml | 263 ++ .../nand-partition-qcn9000.xml | 263 ++ .../flash_partition/nand-partition.xml | 263 ++ .../ipq807x/flash_partition/nor-partition.xml | 162 ++ .../flash_partition/norplusemmc-partition.xml | 218 ++ .../norplusnand-4k-partition.xml | 265 ++ .../norplusnand-partition-qcn9000.xml | 265 ++ .../flash_partition/norplusnand-partition.xml | 265 ++ .../flash_partition/tiny-nor-partition.xml | 96 + .../tiny-norplusemmc-partition.xml | 60 + .../tiny-norplusnand-partition.xml | 87 + meta-tools/ipq9048/bootconfig/bootconfig.xml | 50 + meta-tools/ipq9048/cdt/1024M32_DDR4.xml | 172 ++ meta-tools/ipq9048/cdt/128M16_DDR3.xml | 172 ++ meta-tools/ipq9048/cdt/128M32_DDR3.xml | 172 ++ meta-tools/ipq9048/cdt/256M16_DDR3.xml | 172 ++ meta-tools/ipq9048/cdt/256M32_DDR3.xml | 172 ++ meta-tools/ipq9048/cdt/256M32_DDR4.xml | 172 ++ meta-tools/ipq9048/cdt/512M16_DDR3.xml | 172 ++ meta-tools/ipq9048/cdt/512M16_DDR4.xml | 172 ++ meta-tools/ipq9048/cdt/512M32_DDR4.xml | 172 ++ meta-tools/ipq9048/config.xml | 99 + .../flash_partition/emmc-partition.xml | 332 +++ .../flash_partition/ipq9048-ubinize.cfg | 45 + .../flash_partition/ipq9048-ubinize_64.cfg | 46 + .../flash_partition/nand-4k-partition.xml | 271 ++ .../flash_partition/nand-partition.xml | 271 ++ .../ipq9048/flash_partition/nor-partition.xml | 171 ++ .../flash_partition/norplusemmc-partition.xml | 228 ++ .../norplusnand-4k-partition.xml | 253 ++ .../flash_partition/norplusnand-partition.xml | 253 ++ meta-tools/mkimage | Bin 0 -> 152096 bytes meta-tools/pack.py | 2363 ++++++++++++++++ meta-tools/prepareSingleImage.py | 368 +++ meta-tools/scripts/cdt_generator.py | 364 +++ meta-tools/scripts/createxbl.py | 838 ++++++ meta-tools/scripts/elftombn.py | 102 + meta-tools/scripts/gen_bootconfig_bin.py | 123 + meta-tools/scripts/gen_bootldr_bin.py | 220 ++ meta-tools/scripts/gen_cdt_bin.py | 199 ++ meta-tools/scripts/gen_flash_partition_bin.py | 668 +++++ meta-tools/scripts/ipq5018/gen_bootldr.sh | 57 + meta-tools/scripts/ipq5018/gen_bootldr1.sh | 15 + meta-tools/scripts/mbn_tools.py | 2371 +++++++++++++++++ meta-tools/scripts/msp.py | 1863 +++++++++++++ meta-tools/scripts/nand_mbn_generator.py | 178 ++ meta-tools/scripts/pil-splitter.py | 198 ++ meta-tools/scripts/ptool.py | 2227 ++++++++++++++++ 141 files changed, 31763 insertions(+) create mode 100644 meta-tools/ipq40xx/bootconfig/bootconfig.xml create mode 100644 meta-tools/ipq40xx/cdt/128M16.xml create mode 100644 meta-tools/ipq40xx/cdt/256M16.xml create mode 100644 meta-tools/ipq40xx/cdt/64M16.xml create mode 100644 meta-tools/ipq40xx/config.xml create mode 100644 meta-tools/ipq40xx/flash_partition/emmc-partition.xml create mode 100644 meta-tools/ipq40xx/flash_partition/nand-partition.xml create mode 100644 meta-tools/ipq40xx/flash_partition/nor-partition.xml create mode 100644 meta-tools/ipq40xx/flash_partition/norplusemmc-partition.xml create mode 100644 meta-tools/ipq40xx/flash_partition/norplusnand-partition.xml create mode 100644 meta-tools/ipq5018/bootconfig/bootconfig.xml create mode 100644 meta-tools/ipq5018/cdt/128M16_DDR3.xml create mode 100644 meta-tools/ipq5018/cdt/256M16_DDR3.xml create mode 100644 meta-tools/ipq5018/cdt/2M512M8_DDR3.xml create mode 100644 meta-tools/ipq5018/cdt/512M16_DDR3.xml create mode 100644 meta-tools/ipq5018/config.xml create mode 100644 meta-tools/ipq5018/flash_partition/emmc-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/ipq5018-ubinize.cfg create mode 100644 meta-tools/ipq5018/flash_partition/ipq5018-ubinize_64.cfg create mode 100644 meta-tools/ipq5018/flash_partition/nand-4k-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/nand-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/nor-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/norplusemmc-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/norplusnand-4k-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/norplusnand-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/tiny-nor-debug-partition.xml create mode 100644 meta-tools/ipq5018/flash_partition/tiny-nor-partition.xml create mode 100644 meta-tools/ipq6018/bootconfig/bootconfig-audio.xml create mode 100644 meta-tools/ipq6018/bootconfig/bootconfig.xml create mode 100644 meta-tools/ipq6018/cdt/1024M32_DDR4.xml create mode 100644 meta-tools/ipq6018/cdt/128M16_DDR3.xml create mode 100644 meta-tools/ipq6018/cdt/128M32_DDR3.xml create mode 100644 meta-tools/ipq6018/cdt/256M16_DDR3.xml create mode 100644 meta-tools/ipq6018/cdt/256M32_DDR3.xml create mode 100644 meta-tools/ipq6018/cdt/256M32_DDR4.xml create mode 100644 meta-tools/ipq6018/cdt/512M16_DDR3.xml create mode 100644 meta-tools/ipq6018/cdt/512M16_DDR4.xml create mode 100644 meta-tools/ipq6018/cdt/512M32_DDR4.xml create mode 100644 meta-tools/ipq6018/config.xml create mode 100644 meta-tools/ipq6018/flash_partition/emmc-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/ipq6018-ubinize-audio.cfg create mode 100644 meta-tools/ipq6018/flash_partition/ipq6018-ubinize.cfg create mode 100644 meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64-audio.cfg create mode 100644 meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64.cfg create mode 100644 meta-tools/ipq6018/flash_partition/nand-4k-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/nand-audio-4k-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/nand-audio-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/nand-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/nor-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/norplusemmc-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/norplusnand-4k-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/norplusnand-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/tiny-nor-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/tiny-norplusemmc-partition.xml create mode 100644 meta-tools/ipq6018/flash_partition/tiny-norplusnand-partition.xml create mode 100644 meta-tools/ipq806x/bootconfig/bootconfig.xml create mode 100644 meta-tools/ipq806x/cdt/AK01_1XX-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP145-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP145_1XX-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP148-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP148_1XX-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP160-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP160_2XX-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/AP161-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/DB147-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/DB149-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/DB149_1XX-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/DB149_2XX-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/RUMI3-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/TB725-cdt.xml create mode 100644 meta-tools/ipq806x/cdt/TB726-cdt.xml create mode 100644 meta-tools/ipq806x/config.xml create mode 100644 meta-tools/ipq806x/flash_partition/emmc-partition.xml create mode 100644 meta-tools/ipq806x/flash_partition/nand-partition.xml create mode 100644 meta-tools/ipq806x/flash_partition/nor-partition.xml create mode 100644 meta-tools/ipq806x/flash_partition/norplusemmc-partition.xml create mode 100644 meta-tools/ipq806x/flash_partition/norplusnand-partition.xml create mode 100644 meta-tools/ipq807x/bootconfig/bootconfig.xml create mode 100644 meta-tools/ipq807x/cdt/1024M16_DDR4.xml create mode 100644 meta-tools/ipq807x/cdt/1024M32_DDR4.xml create mode 100644 meta-tools/ipq807x/cdt/128M32_DDR3.xml create mode 100644 meta-tools/ipq807x/cdt/256M16_4L_DDR3.xml create mode 100644 meta-tools/ipq807x/cdt/256M16_DDR3.xml create mode 100644 meta-tools/ipq807x/cdt/256M32_4L_DDR3.xml create mode 100644 meta-tools/ipq807x/cdt/256M32_DDR3.xml create mode 100644 meta-tools/ipq807x/cdt/256M32_DDR4.xml create mode 100644 meta-tools/ipq807x/cdt/512M16_DDR4.xml create mode 100644 meta-tools/ipq807x/cdt/512M32_DDR3.xml create mode 100644 meta-tools/ipq807x/cdt/512M32_DDR4.xml create mode 100644 meta-tools/ipq807x/config.xml create mode 100644 meta-tools/ipq807x/flash_partition/emmc-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/ipq807x-ubinize.cfg create mode 100644 meta-tools/ipq807x/flash_partition/ipq807x-ubinize_64.cfg create mode 100644 meta-tools/ipq807x/flash_partition/nand-4k-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/nand-partition-qcn9000.xml create mode 100644 meta-tools/ipq807x/flash_partition/nand-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/nor-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/norplusemmc-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/norplusnand-4k-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/norplusnand-partition-qcn9000.xml create mode 100644 meta-tools/ipq807x/flash_partition/norplusnand-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/tiny-nor-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/tiny-norplusemmc-partition.xml create mode 100644 meta-tools/ipq807x/flash_partition/tiny-norplusnand-partition.xml create mode 100644 meta-tools/ipq9048/bootconfig/bootconfig.xml create mode 100644 meta-tools/ipq9048/cdt/1024M32_DDR4.xml create mode 100644 meta-tools/ipq9048/cdt/128M16_DDR3.xml create mode 100644 meta-tools/ipq9048/cdt/128M32_DDR3.xml create mode 100644 meta-tools/ipq9048/cdt/256M16_DDR3.xml create mode 100644 meta-tools/ipq9048/cdt/256M32_DDR3.xml create mode 100644 meta-tools/ipq9048/cdt/256M32_DDR4.xml create mode 100644 meta-tools/ipq9048/cdt/512M16_DDR3.xml create mode 100644 meta-tools/ipq9048/cdt/512M16_DDR4.xml create mode 100644 meta-tools/ipq9048/cdt/512M32_DDR4.xml create mode 100644 meta-tools/ipq9048/config.xml create mode 100644 meta-tools/ipq9048/flash_partition/emmc-partition.xml create mode 100644 meta-tools/ipq9048/flash_partition/ipq9048-ubinize.cfg create mode 100644 meta-tools/ipq9048/flash_partition/ipq9048-ubinize_64.cfg create mode 100644 meta-tools/ipq9048/flash_partition/nand-4k-partition.xml create mode 100644 meta-tools/ipq9048/flash_partition/nand-partition.xml create mode 100644 meta-tools/ipq9048/flash_partition/nor-partition.xml create mode 100644 meta-tools/ipq9048/flash_partition/norplusemmc-partition.xml create mode 100644 meta-tools/ipq9048/flash_partition/norplusnand-4k-partition.xml create mode 100644 meta-tools/ipq9048/flash_partition/norplusnand-partition.xml create mode 100644 meta-tools/mkimage create mode 100644 meta-tools/pack.py create mode 100644 meta-tools/prepareSingleImage.py create mode 100644 meta-tools/scripts/cdt_generator.py create mode 100644 meta-tools/scripts/createxbl.py create mode 100644 meta-tools/scripts/elftombn.py create mode 100644 meta-tools/scripts/gen_bootconfig_bin.py create mode 100644 meta-tools/scripts/gen_bootldr_bin.py create mode 100644 meta-tools/scripts/gen_cdt_bin.py create mode 100644 meta-tools/scripts/gen_flash_partition_bin.py create mode 100644 meta-tools/scripts/ipq5018/gen_bootldr.sh create mode 100644 meta-tools/scripts/ipq5018/gen_bootldr1.sh create mode 100644 meta-tools/scripts/mbn_tools.py create mode 100644 meta-tools/scripts/msp.py create mode 100644 meta-tools/scripts/nand_mbn_generator.py create mode 100644 meta-tools/scripts/pil-splitter.py create mode 100644 meta-tools/scripts/ptool.py diff --git a/meta-tools/ipq40xx/bootconfig/bootconfig.xml b/meta-tools/ipq40xx/bootconfig/bootconfig.xml new file mode 100644 index 0000000..dfc3604 --- /dev/null +++ b/meta-tools/ipq40xx/bootconfig/bootconfig.xml @@ -0,0 +1,39 @@ + + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:QSEE + 0 + + + 0:CDT + 0 + + + 0:APPSBL + 0 + + + 0:HLOS + 0 + + + rootfs + 0 + + + + + diff --git a/meta-tools/ipq40xx/cdt/128M16.xml b/meta-tools/ipq40xx/cdt/128M16.xml new file mode 100644 index 0000000..04d9616 --- /dev/null +++ b/meta-tools/ipq40xx/cdt/128M16.xml @@ -0,0 +1,118 @@ + + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + 0x02, 0x08, 0x01, 0x00, 0x00, end + + + 1 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + 0 + 0 + 6 + 1600 + 375 + 700000 + 525 + 320 + 39000 + 1700 + 75 + 75 + 150 + 100 + 150 + 57 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 8 + 6 + 500 + 75 + 4800 + 1200 + 512 + 100 + 100 + 240 + 20 + 85 + 220 + 0 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + diff --git a/meta-tools/ipq40xx/cdt/256M16.xml b/meta-tools/ipq40xx/cdt/256M16.xml new file mode 100644 index 0000000..2942607 --- /dev/null +++ b/meta-tools/ipq40xx/cdt/256M16.xml @@ -0,0 +1,118 @@ + + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + 0x02, 0x08, 0x01, 0x00, 0x00, end + + + 1 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + 0 + 0 + 6 + 2600 + 375 + 700000 + 525 + 320 + 39000 + 2700 + 75 + 75 + 150 + 100 + 150 + 57 + 150 + 4 + 15 + 10 + 8 + 0 + 0 + 0 + 16 + 8 + 6 + 500 + 75 + 4800 + 1200 + 512 + 100 + 100 + 240 + 20 + 85 + 220 + 0 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + diff --git a/meta-tools/ipq40xx/cdt/64M16.xml b/meta-tools/ipq40xx/cdt/64M16.xml new file mode 100644 index 0000000..99ecf57 --- /dev/null +++ b/meta-tools/ipq40xx/cdt/64M16.xml @@ -0,0 +1,118 @@ + + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + 0x02, 0x08, 0x01, 0x00, 0x00, end + + + 1 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + 0 + 0 + 6 + 1100 + 375 + 700000 + 525 + 320 + 39000 + 1200 + 75 + 75 + 150 + 100 + 150 + 57 + 150 + 4 + 13 + 10 + 8 + 0 + 0 + 0 + 16 + 8 + 6 + 500 + 75 + 4800 + 1200 + 512 + 100 + 100 + 240 + 20 + 85 + 220 + 0 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + diff --git a/meta-tools/ipq40xx/config.xml b/meta-tools/ipq40xx/config.xml new file mode 100644 index 0000000..66eaf1a --- /dev/null +++ b/meta-tools/ipq40xx/config.xml @@ -0,0 +1,136 @@ + + + + + + ipq40xx + + + + 256 + 256 + 256 + + + + 2048 + 64 + 4096 + + + + 7634944 + gpt_main0.bin + gpt_backup0.bin + + + + 256 + 256 + 256 + + + + 256 + 512 + 256 + 256 + gpt_main1.bin + gpt_backup1.bin + + + + + 0x8010000 + AP-DK01.1-C1 + false + 128M16 + + + 0x8010100 + AP-DK01.1-C2 + true + 128M16 + + + 0x8010001 + AP-DK04.1-C1 + false + 128M16 + + + 0x8010101 + AP-DK04.1-C2 + false + 128M16 + + + 0x8010201 + AP-DK04.1-C3 + false + 128M16 + + + 0x8010301 + AP-DK04.1-C4 + false + 128M16 + + + 0x8010007 + AP-DK05.1-C1 + true + 128M16 + + + 0x8010005 + AP-DK06.1-C1 + false + 128M16 + + + 0x8010006 + AP-DK07.1-C1 + false + 128M16 + + + 0x1010002 + DB.DK01.1-C1 + true + 128M16 + + + 0x1010003 + DB.DK02.1-C1 + true + 128M16 + + + + + + /boot_images/build/ms/bin/40xx/nor/sbl1_nor.mbn + /boot_images/build/ms/bin/40xx/nand/sbl1_nand.mbn + /boot_images/build/ms/bin/40xx/emmc/sbl1_emmc.mbn + /boot_images/build/ms/bin/40xx/misc/tools/bootconfig_tool + /boot_images/build/ms/bin/40xx/misc/tools/partition_tool + + + /trustzone_images/build/ms/bin/MAZAANAA/tz.mbn + + + /apss_proc/out/ipq40xx/openwrt-ipq40xx-u-boot-stripped.elf + /apss_proc/out/ipq40xx/openwrt-ipq-ipq40xx-squashfs-root.img + /apss_proc/out/ipq40xx/openwrt-ipq-ipq40xx-qcom-ipq40xx-ap.dkxx-fit-uImage.itb + /apss_proc/out/ipq40xx/openwrt-ipq-ipq40xx-ubi-root.img + /apss_proc/out/pack.py + + + diff --git a/meta-tools/ipq40xx/flash_partition/emmc-partition.xml b/meta-tools/ipq40xx/flash_partition/emmc-partition.xml new file mode 100644 index 0000000..ccdc5a8 --- /dev/null +++ b/meta-tools/ipq40xx/flash_partition/emmc-partition.xml @@ -0,0 +1,187 @@ + + + + + + + + WRITE_PROTECT_BOUNDARY_IN_KB = 65536 + GROW_LAST_PARTITION_TO_FILL_DISK= false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta-tools/ipq40xx/flash_partition/nand-partition.xml b/meta-tools/ipq40xx/flash_partition/nand-partition.xml new file mode 100644 index 0000000..326dd2a --- /dev/null +++ b/meta-tools/ipq40xx/flash_partition/nand-partition.xml @@ -0,0 +1,167 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nand.mbn + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq40xx.bin + + + 0:BOOTCONFIG + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 1024 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq40xx-u-boot-stripped.elf + + + 0:APPSBL_1 + 1024 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 65536 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq40xx-ubi-root.img + + + rootfs_1 + 51200 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq40xx/flash_partition/nor-partition.xml b/meta-tools/ipq40xx/flash_partition/nor-partition.xml new file mode 100644 index 0000000..38380dd --- /dev/null +++ b/meta-tools/ipq40xx/flash_partition/nor-partition.xml @@ -0,0 +1,125 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + nor-system-partition-ipq40xx.bin + + + 0:QSEE + 384 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:DDRPARAMS + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq40xx-u-boot-stripped.elf + + + 0:ART + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 4096 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq40xx-qcom-ipq40xx-ap.dkxx-fit-uImage.itb + + + rootfs + 22528 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq40xx-squashfs-root.img + + + diff --git a/meta-tools/ipq40xx/flash_partition/norplusemmc-partition.xml b/meta-tools/ipq40xx/flash_partition/norplusemmc-partition.xml new file mode 100644 index 0000000..4821b19 --- /dev/null +++ b/meta-tools/ipq40xx/flash_partition/norplusemmc-partition.xml @@ -0,0 +1,103 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusemmc-system-partition-ipq40xx.bin + + + 0:QSEE + 384 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:DDRPARAMS + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq40xx-u-boot-stripped.elf + + + 0:ART + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq40xx/flash_partition/norplusnand-partition.xml b/meta-tools/ipq40xx/flash_partition/norplusnand-partition.xml new file mode 100644 index 0000000..606632c --- /dev/null +++ b/meta-tools/ipq40xx/flash_partition/norplusnand-partition.xml @@ -0,0 +1,116 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq40xx.bin + + + 0:QSEE + 384 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:DDRPARAMS + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq40xx-u-boot-stripped.elf + + + 0:ART + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + rootfs + 65536 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq40xx-ubi-root.img + + + diff --git a/meta-tools/ipq5018/bootconfig/bootconfig.xml b/meta-tools/ipq5018/bootconfig/bootconfig.xml new file mode 100644 index 0000000..35515ad --- /dev/null +++ b/meta-tools/ipq5018/bootconfig/bootconfig.xml @@ -0,0 +1,50 @@ + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:QSEE + 0 + + + 0:DEVCFG + 0 + + + 0:CDT + 0 + + + 0:APPSBL + 0 + + + 0:HLOS + 0 + + + rootfs + 0 + + + 0:WIFIFW + 0 + + + 0:BTFW + 0 + + + + + diff --git a/meta-tools/ipq5018/cdt/128M16_DDR3.xml b/meta-tools/ipq5018/cdt/128M16_DDR3.xml new file mode 100644 index 0000000..b3e9b83 --- /dev/null +++ b/meta-tools/ipq5018/cdt/128M16_DDR3.xml @@ -0,0 +1,177 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 16 + 14 + 10 + 8 + 0 + 1 + 256 + 0 + 16 + 160000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 2147483699 + 33590869 + 1968136 + 34 + 0 + 0 + 32 + 0 + 7500 + 8 + 10 + 0 + 8 + 63 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 16 + 14 + 10 + 8 + 0 + 1 + 256 + 0 + 16 + 160000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 2147483699 + 33590869 + 1968136 + 34 + 0 + 0 + 32 + 0 + 7500 + 8 + 10 + 0 + 8 + 63 + 0 + 0 + + + 16076 + + + + + diff --git a/meta-tools/ipq5018/cdt/256M16_DDR3.xml b/meta-tools/ipq5018/cdt/256M16_DDR3.xml new file mode 100644 index 0000000..94dbc84 --- /dev/null +++ b/meta-tools/ipq5018/cdt/256M16_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 16 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 51 + 33590869 + 1968136 + 34 + 0 + 0 + 0 + 0 + 7500 + 8 + 10 + 0 + 8 + 42 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 16 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 51 + 33590869 + 1968136 + 34 + 0 + 0 + 0 + 0 + 7500 + 8 + 10 + 0 + 8 + 42 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq5018/cdt/2M512M8_DDR3.xml b/meta-tools/ipq5018/cdt/2M512M8_DDR3.xml new file mode 100644 index 0000000..73117ec --- /dev/null +++ b/meta-tools/ipq5018/cdt/2M512M8_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 16 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 51 + 33590869 + 1968136 + 34 + 0 + 0 + 0 + 0 + 7500 + 8 + 10 + 0 + 8 + 42 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 16 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 51 + 33590869 + 1968136 + 34 + 0 + 0 + 0 + 0 + 7500 + 8 + 10 + 0 + 8 + 42 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq5018/cdt/512M16_DDR3.xml b/meta-tools/ipq5018/cdt/512M16_DDR3.xml new file mode 100644 index 0000000..06f091d --- /dev/null +++ b/meta-tools/ipq5018/cdt/512M16_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 16 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 6000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 4 + 6000 + 0 + 51 + 33590869 + 1968136 + 34 + 0 + 0 + 0 + 0 + 7500 + 8 + 10 + 0 + 8 + 42 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 16 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 6000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 4 + 6000 + 0 + 51 + 33590869 + 1968136 + 34 + 0 + 0 + 0 + 0 + 7500 + 8 + 10 + 0 + 8 + 42 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq5018/config.xml b/meta-tools/ipq5018/config.xml new file mode 100644 index 0000000..99901af --- /dev/null +++ b/meta-tools/ipq5018/config.xml @@ -0,0 +1,284 @@ + + + + + + ipq5018 + + + + 256 + 256 + 256 + + + + + 2048 + 64 + 4096 + + + 4096 + 64 + 4096 + + + + + 15269888 + gpt_main0.bin + gpt_backup0.bin + + + + 256 + 256 + 256 + + + + 256 + 512 + 256 + 256 + gpt_main1.bin + gpt_backup1.bin + + + + + 0xF040000 + MP-EMU + false + 256M16_DDR3 + false + false + + + 0x8040000 + AP-MP02.1 + false + 128M16_DDR3 + true + true + true + 1 + + + 0x8040001 + AP-MP03.1 + false + 256M16_DDR3 + true + false + false + 2 + + + 0x8040101 + AP-MP03.1-C2 + false + 256M16_DDR3 + false + false + 2 + + + 0x8040201 + AP-MP03.1-C3 + false + 256M16_DDR3 + false + false + 2 + + + 0x8040002 + AP-MP03.3 + false + 512M16_DDR3 + false + true + 3 + + + 0x8040102 + AP-MP03.3-C2 + false + 512M16_DDR3 + false + true + 3 + + + 0x8040202 + AP-MP03.3-C3 + false + 512M16_DDR3 + false + true + 3 + + + 0x8040005 + AP-MP03.4-C1 + false + 512M16_DDR3 + false + false + 2 + + + 0x8040105 + AP-MP03.4-C2 + false + 512M16_DDR3 + false + false + 2 + + + 0x8040004 + AP-MP03.5-C1 + false + 512M16_DDR3 + true + true + 1 + + + 0x8040104 + AP-MP03.5-C2 + false + 512M16_DDR3 + true + true + 1 + + + 0x8040003 + AP-MP03.6-C1 + false + 512M16_DDR3 + false + false + 2 + + + 0x8040103 + AP-MP03.6-C2 + false + 512M16_DDR3 + false + false + 2 + + + 0x1040003 + DB-MP02.1 + false + 128M16_DDR3 + true + true + true + 1 + + + 0x1040004 + DB-MP03.1 + false + 256M16_DDR3 + false + false + 2 + + + 0x1040104 + DB-MP03.1-C2 + false + 256M16_DDR3 + false + false + 2 + + + 0x1040005 + DB-MP03.3 + false + 512M16_DDR3 + false + true + 3 + + + 0x1040105 + DB-MP03.3-C2 + false + 512M16_DDR3 + false + true + 3 + + + 0x1040006 + TB-MP04 + false + 2M512M8_DDR3 + false + true + 3 + + + + + + /boot_images/core/boot/secboot3/hw/ipq5018/sbl1/SBL1_tiny_nor.elf + /boot_images/build/ms/bin/5018/nor/sbl1_nor.mbn + /boot_images/build/ms/bin/5018/nand/sbl1_nand.mbn + /boot_images/build/ms/bin/5018/emmc/sbl1_emmc.mbn + /boot_images/build/ms/bin/5018/flashless/sbl1_flashless.mbn + /boot_images/core/bsp/tools/flash/partition_tool_exe/build/partition_tool + /boot_images/core/bsp/tools/flash/bootconfig_exe/build/bootconfig_tool + + + /trustzone_images/build/ms/bin/SAOAANAY/tz.mbn + /trustzone_images/build/ms/bin/SAOAANAY/devcfg.mbn + /trustzone_images/core/bsp/monitor/build/SAOAANAY/tiny_mon.elf + /trustzone_images/core/bsp/qsee/build/SAOAANAY/tiny_qsee.elf + /trustzone_images/core/bsp/devcfg/build/SAOAANAY/devcfg.elf + + + /apss_proc/out/ipq50xx/openwrt-ipq5018_tiny-u-boot.elf + /apss_proc/out/ipq50xx/openwrt-ipq5018-u-boot.elf + /apss_proc/out/ipq50xx/openwrt-ipq-ipq50xx-squashfs-root.img + /apss_proc/out/ipq50xx/openwrt-ipq-ipq50xx-qcom-ipq50xx-mpxx-fit-uImage.itb + /apss_proc/out/ipq50xx/openwrt-ipq-ipq50xx-ubi-root.img + /apss_proc/out/pack.py + + + /apss_proc/out/ipq50xx/openwrt-ipq5018_tiny-u-boot.elf + /apss_proc/out/ipq50xx/openwrt-ipq5018-u-boot.elf + /apss_proc/out/ipq50xx_64/openwrt-ipq-ipq50xx_64-squashfs-root.img + /apss_proc/out/ipq50xx_64/openwrt-ipq-ipq50xx_64-qcom-ipq50xx-mpxx-fit-uImage.itb + /apss_proc/out/ipq50xx_64/openwrt-ipq-ipq50xx_64-ubi-root.img + /apss_proc/out/pack.py + + + /wlan_proc/build/ms/bin/5018.wlanfw.eval/FW_IMAGES/wifi_fw_ipq5018_squashfs.img + /wlan_proc/build/ms/bin/5018.wlanfw.eval/FW_IMAGES/wifi_fw_ipq5018_qcn9000_squashfs.img + /wlan_proc/build/ms/bin/5018.wlanfw2.map_spruce_eval/FW_IMAGES/wifi_fw_ipq5018_qcn9000_qcn6122_squashfs.img + /wlan_proc/build/ms/bin/5018.wlanfw2.map_spr_spr_eval_cs/FW_IMAGES/wifi_fw_ipq5018_qcn6122cs_squashfs.img + + + /btfw_proc/maple/bsp/patch/build/SCAMBAF/FW_IMAGES/bt_fw_patch_squashfs.img + /btfw_proc/maple/bsp/patch/build/SCAMBAF/FW_IMAGES/bt_fw_patch_ubi.img + + + diff --git a/meta-tools/ipq5018/flash_partition/emmc-partition.xml b/meta-tools/ipq5018/flash_partition/emmc-partition.xml new file mode 100644 index 0000000..29bc382 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/emmc-partition.xml @@ -0,0 +1,309 @@ + + + + + + + + WRITE_PROTECT_BOUNDARY_IN_KB = 65536 + GROW_LAST_PARTITION_TO_FILL_DISK= false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta-tools/ipq5018/flash_partition/ipq5018-ubinize.cfg b/meta-tools/ipq5018/flash_partition/ipq5018-ubinize.cfg new file mode 100644 index 0000000..26c6960 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/ipq5018-ubinize.cfg @@ -0,0 +1,57 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq50xx-qcom-ipq50xx-mpxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_ipq5018_qcn9000_squashfs.img +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[bt_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=bt_fw_patch_squashfs.img +vol_size=256KiB +vol_type=static +# Volume ID in UBI image +vol_id=2 +# Volume name +vol_name=bt_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq50xx-squashfs-root.img +# Volume ID in UBI image +vol_id=3 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=4 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize diff --git a/meta-tools/ipq5018/flash_partition/ipq5018-ubinize_64.cfg b/meta-tools/ipq5018/flash_partition/ipq5018-ubinize_64.cfg new file mode 100644 index 0000000..9cbea01 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/ipq5018-ubinize_64.cfg @@ -0,0 +1,58 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq50xx_64-qcom-ipq50xx-mpxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_ipq5018_qcn9000_squashfs.img +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[bt_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=bt_fw_patch_squashfs.img +vol_size=256KiB +vol_type=static +# Volume ID in UBI image +vol_id=2 +# Volume name +vol_name=bt_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq50xx_64-squashfs-root.img +# Volume ID in UBI image +vol_id=3 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=4 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize + diff --git a/meta-tools/ipq5018/flash_partition/nand-4k-partition.xml b/meta-tools/ipq5018/flash_partition/nand-4k-partition.xml new file mode 100644 index 0000000..5cef4c6 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/nand-4k-partition.xml @@ -0,0 +1,212 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nand.mbn + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq5018-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq5018-u-boot.mbn + + + 0:APPSBL_1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 85504 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq50xx_64-ubi-root-m4096-p256KiB.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + wifi_fw_ipq5018_qcn9000_squashfs.img + wifi_fw_ipq5018_qcn9000_qcn6122_squashfs.img + + + rootfs_1 + 85504 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq5018/flash_partition/nand-partition.xml b/meta-tools/ipq5018/flash_partition/nand-partition.xml new file mode 100644 index 0000000..6c9fc64 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/nand-partition.xml @@ -0,0 +1,202 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nand.mbn + + + 0:MIBIB + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq5018.bin + + + 0:BOOTCONFIG + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 1024 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq5018-u-boot.mbn + + + 0:APPSBL_1 + 1024 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TRAINING + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 59136 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-ubi-root.img + openwrt-ipq-ipq50xx_64-ubi-root.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + wifi_fw_ipq5018_qcn9000_squashfs.img + wifi_fw_ipq5018_qcn9000_qcn6122_squashfs.img + + + rootfs_1 + 59136 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq5018/flash_partition/nor-partition.xml b/meta-tools/ipq5018/flash_partition/nor-partition.xml new file mode 100644 index 0000000..7acfa7f --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/nor-partition.xml @@ -0,0 +1,152 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 32 + 0xFF + nor-system-partition-ipq5018.bin + + + 0:QSEE + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq5018-u-boot.mbn + + + 0:ART + 448 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 5120 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-qcom-ipq50xx-mpxx-fit-uImage.itb + openwrt-ipq-ipq50xx_64-qcom-ipq50xx-mpxx-fit-uImage.itb + + + rootfs + 20480 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-squashfs-root.img + openwrt-ipq-ipq50xx_64-squashfs-root.img + + + 0:WIFIFW + 4096 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ipq5018_qcn9000_squashfs.img + wifi_fw_ipq5018_qcn9000_qcn6122_squashfs.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + + + 0:BTFW + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bt_fw_patch_squashfs.img + + + diff --git a/meta-tools/ipq5018/flash_partition/norplusemmc-partition.xml b/meta-tools/ipq5018/flash_partition/norplusemmc-partition.xml new file mode 100644 index 0000000..89bc726 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/norplusemmc-partition.xml @@ -0,0 +1,166 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 4 + 0xFF + norplusemmc-system-partition-ipq5018.bin + + + 0:BOOTCONFIG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq5018-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 448 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq5018/flash_partition/norplusnand-4k-partition.xml b/meta-tools/ipq5018/flash_partition/norplusnand-4k-partition.xml new file mode 100644 index 0000000..cd74fe7 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/norplusnand-4k-partition.xml @@ -0,0 +1,164 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq5018-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq5018-u-boot.mbn + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 85504 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq50xx_64-ubi-root-m4096-p256KiB.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + wifi_fw_ipq5018_qcn9000_squashfs.img + wifi_fw_ipq5018_qcn9000_qcn6122_squashfs.img + + + rootfs_1 + 85504 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq5018/flash_partition/norplusnand-partition.xml b/meta-tools/ipq5018/flash_partition/norplusnand-partition.xml new file mode 100644 index 0000000..67f1cd8 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/norplusnand-partition.xml @@ -0,0 +1,204 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 4 + 0xFF + norplusnand-system-partition-ipq5018.bin + + + 0:BOOTCONFIG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq5018-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 448 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + 0:TRAINING + 256 + 256 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 63232 + 256 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-ubi-root.img + openwrt-ipq-ipq50xx_64-ubi-root.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + wifi_fw_ipq5018_qcn9000_squashfs.img + wifi_fw_ipq5018_qcn9000_qcn6122_squashfs.img + + + rootfs_1 + 63232 + 256 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq5018/flash_partition/tiny-nor-debug-partition.xml b/meta-tools/ipq5018/flash_partition/tiny-nor-debug-partition.xml new file mode 100644 index 0000000..e9ed355 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/tiny-nor-debug-partition.xml @@ -0,0 +1,109 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:BOOTLDR1 + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1_nor.mbn + + + 0:BOOTLDR2 + 384 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootldr2_nor.mbn + bootldr2_atf_nor.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 2624 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-qcom-ipq50xx-mpxx-fit-uImage.itb + openwrt-ipq-ipq50xx_64-qcom-ipq50xx-mpxx-fit-uImage.itb + + + rootfs + 8832 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-squashfs-root.img + openwrt-ipq-ipq50xx_64-squashfs-root.img + + + 0:WIFIFW + 3712 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ipq5018_squashfs.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + wifi_fw_ipq5018_qcn9000_squashfs.img + + + 0:BTFW + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bt_fw_patch_squashfs.img + + + diff --git a/meta-tools/ipq5018/flash_partition/tiny-nor-partition.xml b/meta-tools/ipq5018/flash_partition/tiny-nor-partition.xml new file mode 100644 index 0000000..b98f499 --- /dev/null +++ b/meta-tools/ipq5018/flash_partition/tiny-nor-partition.xml @@ -0,0 +1,98 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:BOOTLDR1 + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1_nor.mbn + + + 0:BOOTLDR2 + 384 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootldr2_nor.mbn + bootldr2_atf_nor.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 1920 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-qcom-ipq50xx-mpxx-fit-uImage.itb + openwrt-ipq-ipq50xx_64-qcom-ipq50xx-mpxx-fit-uImage.itb + + + rootfs + 10112 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq50xx-squashfs-root.img + openwrt-ipq-ipq50xx_64-squashfs-root.img + + + 0:WIFIFW + 3712 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ipq5018_squashfs.img + wifi_fw_ipq5018_qcn6122cs_squashfs.img + wifi_fw_ipq5018_qcn9000_squashfs.img + + + diff --git a/meta-tools/ipq6018/bootconfig/bootconfig-audio.xml b/meta-tools/ipq6018/bootconfig/bootconfig-audio.xml new file mode 100644 index 0000000..50b096c --- /dev/null +++ b/meta-tools/ipq6018/bootconfig/bootconfig-audio.xml @@ -0,0 +1,40 @@ + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:QSEE + 0 + + + 0:DEVCFG + 0 + + + 0:RPM + 0 + + + 0:CDT + 0 + + + 0:APPSBL + 0 + + + 0:WIFIFW + 0 + + + diff --git a/meta-tools/ipq6018/bootconfig/bootconfig.xml b/meta-tools/ipq6018/bootconfig/bootconfig.xml new file mode 100644 index 0000000..7e10b2f --- /dev/null +++ b/meta-tools/ipq6018/bootconfig/bootconfig.xml @@ -0,0 +1,50 @@ + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:QSEE + 0 + + + 0:DEVCFG + 0 + + + 0:RPM + 0 + + + 0:CDT + 0 + + + 0:APPSBL + 0 + + + 0:HLOS + 0 + + + rootfs + 0 + + + 0:WIFIFW + 0 + + + + + diff --git a/meta-tools/ipq6018/cdt/1024M32_DDR4.xml b/meta-tools/ipq6018/cdt/1024M32_DDR4.xml new file mode 100644 index 0000000..13d6afa --- /dev/null +++ b/meta-tools/ipq6018/cdt/1024M32_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 16 + 0 + 16 + 10 + 8 + 0 + 1 + 4096 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 2 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 16 + 0 + 16 + 10 + 8 + 0 + 1 + 4096 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 2 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/128M16_DDR3.xml b/meta-tools/ipq6018/cdt/128M16_DDR3.xml new file mode 100644 index 0000000..164fb33 --- /dev/null +++ b/meta-tools/ipq6018/cdt/128M16_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 1 + 14 + 10 + 8 + 0 + 1 + 256 + 0 + 16 + 160000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 1 + 14 + 10 + 8 + 0 + 1 + 256 + 0 + 16 + 160000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/128M32_DDR3.xml b/meta-tools/ipq6018/cdt/128M32_DDR3.xml new file mode 100644 index 0000000..1822be0 --- /dev/null +++ b/meta-tools/ipq6018/cdt/128M32_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 0 + 14 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 160000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 1 + 14 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 160000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/256M16_DDR3.xml b/meta-tools/ipq6018/cdt/256M16_DDR3.xml new file mode 100644 index 0000000..d6a1eb9 --- /dev/null +++ b/meta-tools/ipq6018/cdt/256M16_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/256M32_DDR3.xml b/meta-tools/ipq6018/cdt/256M32_DDR3.xml new file mode 100644 index 0000000..f14ec49 --- /dev/null +++ b/meta-tools/ipq6018/cdt/256M32_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 0 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/256M32_DDR4.xml b/meta-tools/ipq6018/cdt/256M32_DDR4.xml new file mode 100644 index 0000000..1fa7042 --- /dev/null +++ b/meta-tools/ipq6018/cdt/256M32_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 15 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 15 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/512M16_DDR3.xml b/meta-tools/ipq6018/cdt/512M16_DDR3.xml new file mode 100644 index 0000000..1c3c88a --- /dev/null +++ b/meta-tools/ipq6018/cdt/512M16_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 6000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 4 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 6000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 4 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/512M16_DDR4.xml b/meta-tools/ipq6018/cdt/512M16_DDR4.xml new file mode 100644 index 0000000..ef9fa2d --- /dev/null +++ b/meta-tools/ipq6018/cdt/512M16_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/cdt/512M32_DDR4.xml b/meta-tools/ipq6018/cdt/512M32_DDR4.xml new file mode 100644 index 0000000..90f7438 --- /dev/null +++ b/meta-tools/ipq6018/cdt/512M32_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq6018/config.xml b/meta-tools/ipq6018/config.xml new file mode 100644 index 0000000..b03fe67 --- /dev/null +++ b/meta-tools/ipq6018/config.xml @@ -0,0 +1,160 @@ + + + + + + ipq6018 + + + + 256 + 256 + 256 + + + + + 2048 + 64 + 4096 + + + 2048 + 64 + 4096 + + + 4096 + 64 + 4096 + + + 4096 + 64 + 4096 + + + + + + 7634944 + gpt_main0.bin + gpt_backup0.bin + + + + 256 + 256 + 256 + + + + 256 + 512 + 256 + 256 + gpt_main1.bin + gpt_backup1.bin + + + + + 0x8030000 + AP-CP01-C1 + false + 256M32_DDR3 + + + 0x8030001 + AP-CP01-C2 + false + 256M32_DDR3 + + + 0x8030002 + AP-CP01-C3 + false + 256M32_DDR3 + + + 0x8030003 + AP-CP01-C4 + false + 256M32_DDR3 + true + + + 0x8030100 + AP-CP02-C1 + false + 256M32_DDR4 + + + 0x8030200 + AP-CP03-C1 + false + 256M16_DDR3 + + + 0x1030000 + DB-CP01 + false + 256M32_DDR3 + + + 0x1030100 + DB-CP02 + false + 1024M32_DDR4 + + + 0xF030000 + CP-EMU + false + 256M32_DDR3 + + + + + + /boot_images/build/ms/bin/8074/nor/sbl1_nor.mbn + /boot_images/build/ms/bin/8074/nand/sbl1_nand.mbn + /boot_images/build/ms/bin/8074/emmc/sbl1_emmc.mbn + /boot_images/build/ms/bin/8074/flashless/sbl1_flashless.mbn + /boot_images/core/bsp/tools/flash/partition_tool_exe/build/partition_tool + /boot_images/core/bsp/tools/flash/bootconfig_exe/build/bootconfig_tool + + + /trustzone_images/build/ms/bin/SANAANAA/tz.mbn + /trustzone_images/build/ms/bin/SANAANAA/devcfg_noac.mbn + /trustzone_images/build/ms/bin/SANAANAA/devcfg_nosmmu.mbn + + + /apss_proc/out/ipq807x/openwrt-ipq807x-u-boot.elf + /apss_proc/out/ipq807x/openwrt-ipq-ipq807x-squashfs-root.img + /apss_proc/out/ipq807x/openwrt-ipq-ipq807x-qcom-ipq807x-hkxx-fit-uImage.itb + /apss_proc/out/ipq807x/openwrt-ipq-ipq807x-ubi-root.img + /apss_proc/out/pack.py + + + /apss_proc/out/ipq807x/openwrt-ipq807x-u-boot.elf + /apss_proc/out/ipq807x_64/openwrt-ipq-ipq807x_64-squashfs-root.img + /apss_proc/out/ipq807x_64/openwrt-ipq-ipq807x_64-qcom-ipq807x-hkxx-fit-uImage.itb + /apss_proc/out/ipq807x_64/openwrt-ipq-ipq807x_64-ubi-root.img + /apss_proc/out/pack.py + + + /rpm_proc/build/ms/bin/8074/rpm.mbn + + + /wlan_proc/build/ms/bin/wifi_fw_squashfs.img + /wlan_proc/build/ms/bin/wifi_fw_ubi.img + + + diff --git a/meta-tools/ipq6018/flash_partition/emmc-partition.xml b/meta-tools/ipq6018/flash_partition/emmc-partition.xml new file mode 100644 index 0000000..634d83c --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/emmc-partition.xml @@ -0,0 +1,291 @@ + + + + + + + + WRITE_PROTECT_BOUNDARY_IN_KB = 65536 + GROW_LAST_PARTITION_TO_FILL_DISK= false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta-tools/ipq6018/flash_partition/ipq6018-ubinize-audio.cfg b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize-audio.cfg new file mode 100644 index 0000000..b9dbf2e --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize-audio.cfg @@ -0,0 +1,57 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx-qcom-ipq60xx-cpxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_squashfs.img +vol_size=4MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[adsp_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=adsp_fw_squashfs.img +vol_size=5MiB +vol_type=static +# Volume ID in UBI image +vol_id=2 +# Volume name +vol_name=adsp_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx-squashfs-root.img +# Volume ID in UBI image +vol_id=3 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=4 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize diff --git a/meta-tools/ipq6018/flash_partition/ipq6018-ubinize.cfg b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize.cfg new file mode 100644 index 0000000..cd2c37b --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize.cfg @@ -0,0 +1,45 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx-qcom-ipq60xx-cpxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_ipq6018_qcn9000_squashfs.img +vol_size=4MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx-squashfs-root.img +# Volume ID in UBI image +vol_id=2 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=3 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize diff --git a/meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64-audio.cfg b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64-audio.cfg new file mode 100644 index 0000000..f00d675 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64-audio.cfg @@ -0,0 +1,59 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx_64-qcom-ipq60xx-cpxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_squashfs.img +vol_size=4MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Allow for dynamic resize +# Volume name +vol_name=wifi_fw + +[adsp_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=adsp_fw_squashfs.img +vol_size=5MiB +vol_type=static +# Volume ID in UBI image +vol_id=2 +# Volume name +vol_name=adsp_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx_64-squashfs-root.img +# Volume ID in UBI image +vol_id=3 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=4 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize + diff --git a/meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64.cfg b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64.cfg new file mode 100644 index 0000000..824090a --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/ipq6018-ubinize_64.cfg @@ -0,0 +1,46 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx_64-qcom-ipq60xx-cpxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_ipq6018_qcn9000_squashfs.img +vol_size=4MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq60xx_64-squashfs-root.img +# Volume ID in UBI image +vol_id=2 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=3 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize + diff --git a/meta-tools/ipq6018/flash_partition/nand-4k-partition.xml b/meta-tools/ipq6018/flash_partition/nand-4k-partition.xml new file mode 100644 index 0000000..3d20fc4 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/nand-4k-partition.xml @@ -0,0 +1,220 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl_nand.elf + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq6018-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 85504 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq60xx_64-ubi-root-m4096-p256KiB.img + + + rootfs_1 + 85504 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 2048 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq6018/flash_partition/nand-audio-4k-partition.xml b/meta-tools/ipq6018/flash_partition/nand-audio-4k-partition.xml new file mode 100644 index 0000000..8fea8ba --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/nand-audio-4k-partition.xml @@ -0,0 +1,210 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl_nand.elf + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-audio-system-partition-ipq6018-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig-audio.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig-audio.bin + + + 0:QSEE + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg_noac.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 197120 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq60xx_64-ubi-root-m4096-p256KiB.img + + + 0:ETHPHYFW + 2048 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq6018/flash_partition/nand-audio-partition.xml b/meta-tools/ipq6018/flash_partition/nand-audio-partition.xml new file mode 100644 index 0000000..adb44b0 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/nand-audio-partition.xml @@ -0,0 +1,210 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl_nand.elf + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-audio-system-partition-ipq6018-m2048-p128KiB.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig-audio.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig-audio.bin + + + 0:QSEE + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg_noac.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 108544 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root.img + openwrt-ipq-ipq60xx_64-ubi-root.img + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq6018/flash_partition/nand-partition.xml b/meta-tools/ipq6018/flash_partition/nand-partition.xml new file mode 100644 index 0000000..805987d --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/nand-partition.xml @@ -0,0 +1,220 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl_nand.elf + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq6018.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 53760 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root.img + openwrt-ipq-ipq60xx_64-ubi-root.img + + + rootfs_1 + 53760 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq6018/flash_partition/nor-partition.xml b/meta-tools/ipq6018/flash_partition/nor-partition.xml new file mode 100644 index 0000000..27f5fa8 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/nor-partition.xml @@ -0,0 +1,150 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 32 + 0xFF + nor-system-partition-ipq6018.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:RPM + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 6144 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-qcom-ipq60xx-cpxx-fit-uImage.itb + openwrt-ipq-ipq60xx_64-qcom-ipq60xx-cpxx-fit-uImage.itb + + + rootfs + 20608 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-squashfs-root.img + openwrt-ipq-ipq60xx_64-squashfs-root.img + + + 0:WIFIFW + 2304 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_squashfs.img + + + diff --git a/meta-tools/ipq6018/flash_partition/norplusemmc-partition.xml b/meta-tools/ipq6018/flash_partition/norplusemmc-partition.xml new file mode 100644 index 0000000..00a42f9 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/norplusemmc-partition.xml @@ -0,0 +1,187 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusemmc-system-partition-ipq6018.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq6018/flash_partition/norplusnand-4k-partition.xml b/meta-tools/ipq6018/flash_partition/norplusnand-4k-partition.xml new file mode 100644 index 0000000..f2adf48 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/norplusnand-4k-partition.xml @@ -0,0 +1,212 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq6018-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 85504 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq60xx_64-ubi-root-m4096-p256KiB.img + + + rootfs_1 + 85504 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq6018/flash_partition/norplusnand-partition.xml b/meta-tools/ipq6018/flash_partition/norplusnand-partition.xml new file mode 100644 index 0000000..f1bc1b9 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/norplusnand-partition.xml @@ -0,0 +1,212 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq6018.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 61440 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root.img + openwrt-ipq-ipq60xx_64-ubi-root.img + + + rootfs_1 + 61440 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq6018/flash_partition/tiny-nor-partition.xml b/meta-tools/ipq6018/flash_partition/tiny-nor-partition.xml new file mode 100644 index 0000000..1b5abe8 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/tiny-nor-partition.xml @@ -0,0 +1,150 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 32 + 0xFF + tiny-nor-system-partition-ipq6018.bin + + + 0:QSEE + 1408 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:RPM + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq6018-u-boot.mbn + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 6144 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-qcom-ipq60xx-cpxx-fit-uImage.itb + openwrt-ipq-ipq60xx_64-qcom-ipq60xx-cpxx-fit-uImage.itb + + + rootfs + 20992 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-squashfs-root.img + openwrt-ipq-ipq60xx_64-squashfs-root.img + + + 0:WIFIFW + 2304 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_squashfs.img + + + diff --git a/meta-tools/ipq6018/flash_partition/tiny-norplusemmc-partition.xml b/meta-tools/ipq6018/flash_partition/tiny-norplusemmc-partition.xml new file mode 100644 index 0000000..5146b74 --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/tiny-norplusemmc-partition.xml @@ -0,0 +1,60 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:BOOTLDR1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1.img + + + 0:BOOTLDR2 + 576 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr2.img + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq6018/flash_partition/tiny-norplusnand-partition.xml b/meta-tools/ipq6018/flash_partition/tiny-norplusnand-partition.xml new file mode 100644 index 0000000..e14e7de --- /dev/null +++ b/meta-tools/ipq6018/flash_partition/tiny-norplusnand-partition.xml @@ -0,0 +1,85 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:BOOTLDR1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1.img + + + 0:BOOTLDR2 + 576 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr2.img + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 57344 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq60xx-ubi-root.img + openwrt-ipq-ipq60xx_64-ubi-root.img + + + rootfs_1 + 57344 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq806x/bootconfig/bootconfig.xml b/meta-tools/ipq806x/bootconfig/bootconfig.xml new file mode 100644 index 0000000..98b044d --- /dev/null +++ b/meta-tools/ipq806x/bootconfig/bootconfig.xml @@ -0,0 +1,50 @@ + + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:SBL2 + 0 + + + 0:SBL3 + 0 + + + 0:DDRCONFIG + 0 + + + 0:TZ + 0 + + + 0:RPM + 0 + + + 0:APPSBL + 0 + + + rootfs + 0 + + + 0:HLOS + 0 + + + + diff --git a/meta-tools/ipq806x/cdt/AK01_1XX-cdt.xml b/meta-tools/ipq806x/cdt/AK01_1XX-cdt.xml new file mode 100644 index 0000000..940cf15 --- /dev/null +++ b/meta-tools/ipq806x/cdt/AK01_1XX-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x9C, 0x13, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x52, end + 0x1, end + + + 0x1, end + 0x1, end + 0x1, end + 0x52, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP145-cdt.xml b/meta-tools/ipq806x/cdt/AP145-cdt.xml new file mode 100644 index 0000000..ce90cd5 --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP145-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 15 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0xCA, 0x12, 0x00, 0x00, end + + + + 0x0, end + 0x1, end + 0x0, end + 0x51, end + 0x0, end + + + 0x0, end + 0x1, end + 0x0, end + 0x51, end + 0x0, end + + + 0x0, end + 0x1, end + 0x0, end + 0x51, end + 0x0, end + + + 0x0, end + 0x0, end + 0x0, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP145_1XX-cdt.xml b/meta-tools/ipq806x/cdt/AP145_1XX-cdt.xml new file mode 100644 index 0000000..91632ff --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP145_1XX-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 15 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0xCC, 0x12, 0x00, 0x00, end + + + + 0x0, end + 0x1, end + 0x0, end + 0x51, end + 0x0, end + + + 0x0, end + 0x1, end + 0x0, end + 0x51, end + 0x0, end + + + 0x0, end + 0x1, end + 0x0, end + 0x51, end + 0x0, end + + + 0x0, end + 0x0, end + 0x0, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP148-cdt.xml b/meta-tools/ipq806x/cdt/AP148-cdt.xml new file mode 100644 index 0000000..4246937 --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP148-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x60, 0x12, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x52, end + 0x1, end + + + 0x1, end + 0x1, end + 0x1, end + 0x52, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP148_1XX-cdt.xml b/meta-tools/ipq806x/cdt/AP148_1XX-cdt.xml new file mode 100644 index 0000000..e4b6681 --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP148_1XX-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x31, 0x13, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x52, end + 0x1, end + + + 0x1, end + 0x1, end + 0x1, end + 0x52, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP160-cdt.xml b/meta-tools/ipq806x/cdt/AP160-cdt.xml new file mode 100644 index 0000000..c64daf1 --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP160-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x6B, 0x13, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x52, end + 0x1, end + + + 0x1, end + 0x1, end + 0x1, end + 0x52, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP160_2XX-cdt.xml b/meta-tools/ipq806x/cdt/AP160_2XX-cdt.xml new file mode 100644 index 0000000..ad1a81e --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP160_2XX-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x7F, 0x13, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x52, end + 0x1, end + + + 0x1, end + 0x1, end + 0x1, end + 0x52, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/AP161-cdt.xml b/meta-tools/ipq806x/cdt/AP161-cdt.xml new file mode 100644 index 0000000..e3e2f33 --- /dev/null +++ b/meta-tools/ipq806x/cdt/AP161-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x6c, 0x13, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x52, end + 0x1, end + + + 0x1, end + 0x1, end + 0x1, end + 0x52, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + 0x1, end + 0x1, end + 0x3, end + 0x51, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/DB147-cdt.xml b/meta-tools/ipq806x/cdt/DB147-cdt.xml new file mode 100644 index 0000000..442b335 --- /dev/null +++ b/meta-tools/ipq806x/cdt/DB147-cdt.xml @@ -0,0 +1,117 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x5F, 0x12, 0x00, 0x00, end + + + + diff --git a/meta-tools/ipq806x/cdt/DB149-cdt.xml b/meta-tools/ipq806x/cdt/DB149-cdt.xml new file mode 100644 index 0000000..98a739a --- /dev/null +++ b/meta-tools/ipq806x/cdt/DB149-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 14 + 10 + 8 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x5B, 0x12, 0x00, 0x00, end + + + + 0x0, end + 0x1, end + 0x0, end + 0x49, end + 0x0, end + + + 0x0, end + 0x1, end + 0x1, end + 0x49, end + 0x1, end + + + 0x0, end + 0x1, end + 0x2, end + 0x48, end + 0x1, end + + + 0x0, end + 0x1, end + 0x3, end + 0x48, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/DB149_1XX-cdt.xml b/meta-tools/ipq806x/cdt/DB149_1XX-cdt.xml new file mode 100644 index 0000000..dec7b16 --- /dev/null +++ b/meta-tools/ipq806x/cdt/DB149_1XX-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 14 + 10 + 8 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0xCB, 0x12, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x49, end + 0x0, end + + + 0x1, end + 0x1, end + 0x1, end + 0x49, end + 0x1, end + + + 0x1, end + 0x1, end + 0x2, end + 0x48, end + 0x1, end + + + 0x1, end + 0x1, end + 0x3, end + 0x48, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/DB149_2XX-cdt.xml b/meta-tools/ipq806x/cdt/DB149_2XX-cdt.xml new file mode 100644 index 0000000..191b8a8 --- /dev/null +++ b/meta-tools/ipq806x/cdt/DB149_2XX-cdt.xml @@ -0,0 +1,147 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 14 + 10 + 8 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x35, 0x13, 0x00, 0x00, end + + + + 0x1, end + 0x1, end + 0x0, end + 0x49, end + 0x0, end + + + 0x1, end + 0x1, end + 0x1, end + 0x49, end + 0x1, end + + + 0x1, end + 0x1, end + 0x2, end + 0x48, end + 0x1, end + + + 0x1, end + 0x1, end + 0x3, end + 0x48, end + 0x0, end + + + + + diff --git a/meta-tools/ipq806x/cdt/RUMI3-cdt.xml b/meta-tools/ipq806x/cdt/RUMI3-cdt.xml new file mode 100644 index 0000000..2c1e8ad --- /dev/null +++ b/meta-tools/ipq806x/cdt/RUMI3-cdt.xml @@ -0,0 +1,83 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 1100 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 14 + 10 + 8 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 5120 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0x1, end + 0x79, 0x0F, 0x00, 0x00, end + + + + diff --git a/meta-tools/ipq806x/cdt/TB725-cdt.xml b/meta-tools/ipq806x/cdt/TB725-cdt.xml new file mode 100644 index 0000000..2cda18a --- /dev/null +++ b/meta-tools/ipq806x/cdt/TB725-cdt.xml @@ -0,0 +1,117 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x79, 0x0F, 0x00, 0x00, end + + + + diff --git a/meta-tools/ipq806x/cdt/TB726-cdt.xml b/meta-tools/ipq806x/cdt/TB726-cdt.xml new file mode 100644 index 0000000..504cd7a --- /dev/null +++ b/meta-tools/ipq806x/cdt/TB726-cdt.xml @@ -0,0 +1,117 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02, 0x00, 0x01, 0x00, 0x00, end + + + + 1 + 0x00, 0x52, 0x44,0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 168 + 0 + + + + 0 + 0 + 4 + 3500 + 351 + 702000 + 525 + 0 + 78000 + 3600 + 75 + 75 + 150 + 60 + 150 + 50 + 150 + 4 + 14 + 10 + 8 + 0 + 0 + 0 + 16 + 0 + 0 + 500 + 75 + 2560 + 640 + 512 + 100 + 100 + 240 + 20 + 85 + 150 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0x0 + + + + 0x1, end + 0x7A, 0x0F, 0x00, 0x00, end + + + + diff --git a/meta-tools/ipq806x/config.xml b/meta-tools/ipq806x/config.xml new file mode 100644 index 0000000..891b339 --- /dev/null +++ b/meta-tools/ipq806x/config.xml @@ -0,0 +1,142 @@ + + + + + + ipq806x + + + + 256 + 256 + 512 + + + + 2048 + 64 + 4096 + + + + 7634944 + gpt_main0.bin + gpt_backup0.bin + + + + 256 + 256 + 256 + + + + 256 + 512 + 256 + 256 + gpt_main1.bin + gpt_backup1.bin + + + + + 0x125B + DB149-cdt + false + + + 0x125F + DB147-cdt + false + + + + 0x12CA + AP145-cdt + false + + + 0x1260 + AP148-cdt + false + + + 0x12CB + DB149_1XX-cdt + false + + + + 0x12CC + AP145_1XX-cdt + false + + + 0x1331 + AP148_1XX-cdt + false + + + 0x1335 + DB149_2XX-cdt + false + + + 0x136b + AP160-cdt + false + + + 0x137f + AP160_2XX-cdt + false + + + 0x136c + AP161-cdt + false + + + 0x139c + AK01_1XX-cdt + false + + + + + + /boot_images/build/ms/bin/AAABANAZ/nor_sbl1.mbn + /boot_images/build/ms/bin/AAABANAZ/nor_sbl2.mbn + /boot_images/build/ms/bin/AAABANAZ/nor_sbl3.mbn + /boot_images/build/ms/bin/AAAAANAZ/nand_sbl1.mbn + /boot_images/build/ms/bin/AAAAANAZ/nand_sbl2.mbn + /boot_images/build/ms/bin/AAAAANAZ/nand_sbl3.mbn + /boot_images/build/ms/bin/AAACANAZ/sdcc_sbl1.mbn + /boot_images/build/ms/bin/AAACANAZ/sdcc_sbl2.mbn + /boot_images/build/ms/bin/AAACANAZ/sdcc_sbl3.mbn + /boot_images/build/ms/bin/AAAAANAA/AP148/ssd.mbn + /boot_images/build/ms/bin/AAAAANAA/tools/bootconfig_tool + /boot_images/build/ms/bin/AAAAANAA/tools/nor_tool + + + /trustzone_images/build/ms/bin/AAAAANAZ/tz.mbn + + + /rpm_proc/build/ms/bin/AAAAANAAR/rpm.mbn + + + /apss_proc/out/ipq806x/openwrt-ipq806x-u-boot.mbn + /apss_proc/out/ipq806x/openwrt-ipq-ipq806x-squashfs-root.img + /apss_proc/out/ipq806x/openwrt-ipq-ipq806x-qcom-ipq806x-akxx-fit-uImage.itb + /apss_proc/out/ipq806x/openwrt-ipq-ipq806x-ubi-root.img + /apss_proc/out/pack.py + + + diff --git a/meta-tools/ipq806x/flash_partition/emmc-partition.xml b/meta-tools/ipq806x/flash_partition/emmc-partition.xml new file mode 100644 index 0000000..1d2ce13 --- /dev/null +++ b/meta-tools/ipq806x/flash_partition/emmc-partition.xml @@ -0,0 +1,244 @@ + + + + + + + + WRITE_PROTECT_BOUNDARY_IN_KB = 65536 + GROW_LAST_PARTITION_TO_FILL_DISK= false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta-tools/ipq806x/flash_partition/nand-partition.xml b/meta-tools/ipq806x/flash_partition/nand-partition.xml new file mode 100644 index 0000000..fa81d5d --- /dev/null +++ b/meta-tools/ipq806x/flash_partition/nand-partition.xml @@ -0,0 +1,263 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x3 + + + 0:SBL1 + 128 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand_sbl1.mbn + sbl + + + 0:MIBIB + 1024 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq806x.bin + sbl + + + 0:SBL2 + 1024 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand_sbl2.mbn + sbl + + + 0:SBL3 + 2048 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand_sbl3.mbn + sbl + + + 0:DDRCONFIG + 1024 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + sbl + + + 0:SSD + 1024 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + ssd.mbn + sbl + + + 0:TZ + 2048 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + sbl + + + 0:RPM + 2048 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + sbl + + + 0:APPSBL + 4096 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq806x-u-boot.mbn + sbl + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 1024 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 65536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq806x-ubi-root.img + linux + + + 0:BOOTCONFIG + 256 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + linux + + + 0:SBL2_1 + 1024 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:SBL3_1 + 2048 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DDRCONFIG_1 + 1024 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:SSD_1 + 1024 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TZ_1 + 2048 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM_1 + 2048 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:BOOTCONFIG1 + 256 + 128 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + linux + + + 0:APPSBL_1 + 4096 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs_1 + 65536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq806x/flash_partition/nor-partition.xml b/meta-tools/ipq806x/flash_partition/nor-partition.xml new file mode 100644 index 0000000..302cfbc --- /dev/null +++ b/meta-tools/ipq806x/flash_partition/nor-partition.xml @@ -0,0 +1,148 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x3 + + + 0:SBL1 + 2 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFE + nor_sbl1.mbn + + + 0:MIBIB + 2 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFE + nor-system-partition-ipq806x.bin + + + 0:SBL2 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl2.mbn + + + 0:SBL3 + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl3.mbn + + + 0:DDRCONFIG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:TZ + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:RPM + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:APPSBL + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq806x-u-boot.mbn + + + 0:APPSBLENV + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 4096 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq806x-qcom-ipq806x-akxx-fit-uImage.itb + + + rootfs + 24576 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq806x-squashfs-root.img + + + diff --git a/meta-tools/ipq806x/flash_partition/norplusemmc-partition.xml b/meta-tools/ipq806x/flash_partition/norplusemmc-partition.xml new file mode 100644 index 0000000..3a18a12 --- /dev/null +++ b/meta-tools/ipq806x/flash_partition/norplusemmc-partition.xml @@ -0,0 +1,126 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x3 + + + 0:SBL1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl1.mbn + + + 0:MIBIB + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + norplusemmc-system-partition-ipq806x.bin + + + 0:SBL2 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl2.mbn + + + 0:SBL3 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl3.mbn + + + 0:DDRCONFIG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:TZ + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:RPM + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:APPSBL + 448 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq806x-u-boot.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq806x/flash_partition/norplusnand-partition.xml b/meta-tools/ipq806x/flash_partition/norplusnand-partition.xml new file mode 100644 index 0000000..6bda81b --- /dev/null +++ b/meta-tools/ipq806x/flash_partition/norplusnand-partition.xml @@ -0,0 +1,240 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x3 + + + 0:SBL1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl1.mbn + + + 0:MIBIB + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + norplusnand-system-partition-ipq806x.bin + + + 0:SBL2 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl2.mbn + + + 0:SBL3 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nor_sbl3.mbn + + + 0:DDRCONFIG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:SSD + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + ssd.mbn + + + 0:TZ + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:RPM + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:APPSBL + 448 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq806x-u-boot.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:SBL2_1 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:SBL3_1 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DDRCONFIG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TZ_1 + 192 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM_1 + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL_1 + 448 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + rootfs + 65536 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq806x-ubi-root.img + + + rootfs_1 + 65536 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/bootconfig/bootconfig.xml b/meta-tools/ipq807x/bootconfig/bootconfig.xml new file mode 100644 index 0000000..5aa696c --- /dev/null +++ b/meta-tools/ipq807x/bootconfig/bootconfig.xml @@ -0,0 +1,54 @@ + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:QSEE + 0 + + + 0:DEVCFG + 0 + + + 0:APDP + 0 + + + 0:RPM + 0 + + + 0:CDT + 0 + + + 0:APPSBL + 0 + + + 0:HLOS + 0 + + + rootfs + 0 + + + 0:WIFIFW + 0 + + + + + diff --git a/meta-tools/ipq807x/cdt/1024M16_DDR4.xml b/meta-tools/ipq807x/cdt/1024M16_DDR4.xml new file mode 100644 index 0000000..b6566b5 --- /dev/null +++ b/meta-tools/ipq807x/cdt/1024M16_DDR4.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 17 + 10 + 8 + 1 + 17 + 10 + 8 + 0 + 1 + 2048 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13750 + 5300 + 15000 + 5000 + 45750 + 13750 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 15 + 10 + 16 + 1 + 17 + 10 + 8 + 0 + 1 + 2048 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13750 + 5300 + 15000 + 5000 + 45750 + 13750 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/1024M32_DDR4.xml b/meta-tools/ipq807x/cdt/1024M32_DDR4.xml new file mode 100644 index 0000000..c0015e8 --- /dev/null +++ b/meta-tools/ipq807x/cdt/1024M32_DDR4.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 16 + 0 + 16 + 10 + 8 + 0 + 1 + 4096 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 2 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 16 + 0 + 16 + 10 + 8 + 0 + 1 + 4096 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 2 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/128M32_DDR3.xml b/meta-tools/ipq807x/cdt/128M32_DDR3.xml new file mode 100644 index 0000000..9c3e068 --- /dev/null +++ b/meta-tools/ipq807x/cdt/128M32_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 0 + 14 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 14 + 10 + 8 + 1 + 14 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/256M16_4L_DDR3.xml b/meta-tools/ipq807x/cdt/256M16_4L_DDR3.xml new file mode 100644 index 0000000..f2bffdc --- /dev/null +++ b/meta-tools/ipq807x/cdt/256M16_4L_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 1536 + + + + diff --git a/meta-tools/ipq807x/cdt/256M16_DDR3.xml b/meta-tools/ipq807x/cdt/256M16_DDR3.xml new file mode 100644 index 0000000..b466c3a --- /dev/null +++ b/meta-tools/ipq807x/cdt/256M16_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/256M32_4L_DDR3.xml b/meta-tools/ipq807x/cdt/256M32_4L_DDR3.xml new file mode 100644 index 0000000..ae5e6aa --- /dev/null +++ b/meta-tools/ipq807x/cdt/256M32_4L_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 0 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 1536 + + + + diff --git a/meta-tools/ipq807x/cdt/256M32_DDR3.xml b/meta-tools/ipq807x/cdt/256M32_DDR3.xml new file mode 100644 index 0000000..de729e3 --- /dev/null +++ b/meta-tools/ipq807x/cdt/256M32_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 0 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 15 + 10 + 8 + 1 + 15 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 260000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/256M32_DDR4.xml b/meta-tools/ipq807x/cdt/256M32_DDR4.xml new file mode 100644 index 0000000..7b1fc54 --- /dev/null +++ b/meta-tools/ipq807x/cdt/256M32_DDR4.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 15 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 15 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/512M16_DDR4.xml b/meta-tools/ipq807x/cdt/512M16_DDR4.xml new file mode 100644 index 0000000..cb0d558 --- /dev/null +++ b/meta-tools/ipq807x/cdt/512M16_DDR4.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/512M32_DDR3.xml b/meta-tools/ipq807x/cdt/512M32_DDR3.xml new file mode 100644 index 0000000..3876456 --- /dev/null +++ b/meta-tools/ipq807x/cdt/512M32_DDR3.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 6000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 4 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 6000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 4 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 20 + 6 + 32 + 7500 + 8 + 10 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/cdt/512M32_DDR4.xml b/meta-tools/ipq807x/cdt/512M32_DDR4.xml new file mode 100644 index 0000000..d14b17c --- /dev/null +++ b/meta-tools/ipq807x/cdt/512M32_DDR4.xml @@ -0,0 +1,158 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 13320 + 5300 + 15000 + 5000 + 45320 + 13320 + 30000 + 7500 + 512 + 128 + 768 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 6 + 6400 + 1 + 16 + 33590869 + 1968136 + 50372 + 0 + 2624 + 257 + 24 + 9500 + 11 + 15 + 0 + 0 + 0 + 0 + 0 + + + 1560 + + + + diff --git a/meta-tools/ipq807x/config.xml b/meta-tools/ipq807x/config.xml new file mode 100644 index 0000000..5ca336f --- /dev/null +++ b/meta-tools/ipq807x/config.xml @@ -0,0 +1,246 @@ + + + + + + ipq807x + + + + 256 + 256 + 256 + + + + + 2048 + 64 + 4096 + + + 4096 + 64 + 4096 + + + + + 15269888 + gpt_main0.bin + gpt_backup0.bin + + + + 256 + 256 + 256 + + + + 256 + 512 + 256 + 256 + gpt_main1.bin + gpt_backup1.bin + + + + + 0x8010000 + AP-HK01-C1 + false + 256M32_DDR3 + + + 0x8010100 + AP-HK01-C2 + false + 256M32_DDR3 + + + 0x8010200 + AP-HK01-C3 + false + 256M32_DDR3 + + + 0x8010300 + AP-HK01-C4 + false + 256M32_DDR3 + + + 0x8010400 + AP-HK01-C5 + false + 256M32_DDR3 + + + 0x8010500 + AP-HK01-C6 + false + 512M32_DDR3 + + + 0x1010004 + DB-HK01 + false + 256M32_DDR3 + + + 0x8010001 + AP-HK02 + false + 512M32_DDR4 + + + 0x1010005 + DB-HK02 + false + 1024M32_DDR4 + + + 0x8010002 + AP-HK05 + false + 256M32_DDR3 + + + 0x8010003 + AP-HK06 + false + 512M32_DDR4 + + + 0x8010006 + AP-HK07 + false + 256M16_DDR3 + + + 0x8010007 + AP-HK08 + false + 512M32_DDR4 + + + 0x8010008 + AP-HK09 + false + 512M16_DDR4 + + + 0x801000E + AP-HK10-C1 + false + 256M32_DDR3 + + + 0x801010E + AP-HK10-C2 + false + 256M32_DDR3 + + + 0x8010011 + AP-HK11-C1 + false + 512M16_DDR4 + + + 0x8010012 + AP-HK14 + false + 256M32_4L_DDR3 + + + 0x8010013 + AP-HK12-C1 + false + 512M16_DDR4 + + + + 0x8010009 + AP-AC01 + false + 512M16_DDR4 + + + 0x801000A + AP-AC02 + false + 512M16_DDR4 + + + 0x801000F + AP-AC03 + false + 256M16_4L_DDR3 + + + 0x8010010 + AP-AC04 + false + 256M16_4L_DDR3 + + + 0x801000C + AP-OAK02 + false + 256M32_DDR3 + + + 0x801000D + AP-OAK03 + false + 256M32_DDR3 + + + + + + + /boot_images/build/ms/bin/8074/nor/sbl1_nor.mbn + /boot_images/build/ms/bin/8074/nand/sbl1_nand.mbn + /boot_images/build/ms/bin/8074/emmc/sbl1_emmc.mbn + /boot_images/build/ms/bin/8074/flashless/sbl1_flashless.mbn + /boot_images/core/bsp/tools/flash/partition_tool_exe/build/partition_tool + /boot_images/core/bsp/tools/flash/bootconfig_exe/build/bootconfig_tool + + + /trustzone_images/build/ms/bin/SANAANAA/tz.mbn + /trustzone_images/build/ms/bin/SANAANAA/devcfg_noac.mbn + /trustzone_images/build/ms/bin/SANAANAA/devcfg_nosmmu.mbn + + + /apss_proc/out/ipq807x/openwrt-ipq807x-u-boot.elf + /apss_proc/out/ipq807x/openwrt-ipq-ipq807x-squashfs-root.img + /apss_proc/out/ipq807x/openwrt-ipq-ipq807x-qcom-ipq807x-hkxx-fit-uImage.itb + /apss_proc/out/ipq807x/openwrt-ipq-ipq807x-ubi-root.img + /apss_proc/out/pack.py + + + /apss_proc/out/ipq807x/openwrt-ipq807x-u-boot.elf + /apss_proc/out/ipq807x_64/openwrt-ipq-ipq807x_64-squashfs-root.img + /apss_proc/out/ipq807x_64/openwrt-ipq-ipq807x_64-qcom-ipq807x-hkxx-fit-uImage.itb + /apss_proc/out/ipq807x_64/openwrt-ipq-ipq807x_64-ubi-root.img + /apss_proc/out/pack.py + + + /rpm_proc/build/ms/bin/8074/rpm.mbn + + + /wlan_proc/build/ms/bin/wifi_fw_squashfs.img + /wlan_proc/build/ms/bin/wifi_fw_ubi.img + + + diff --git a/meta-tools/ipq807x/flash_partition/emmc-partition.xml b/meta-tools/ipq807x/flash_partition/emmc-partition.xml new file mode 100644 index 0000000..089e2ea --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/emmc-partition.xml @@ -0,0 +1,312 @@ + + + + + + + + WRITE_PROTECT_BOUNDARY_IN_KB = 65536 + GROW_LAST_PARTITION_TO_FILL_DISK= false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta-tools/ipq807x/flash_partition/ipq807x-ubinize.cfg b/meta-tools/ipq807x/flash_partition/ipq807x-ubinize.cfg new file mode 100644 index 0000000..41a5f79 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/ipq807x-ubinize.cfg @@ -0,0 +1,33 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq807x-qcom-ipq807x-hkxx-fit-uImage.itb +# Volume ID in UBI image +vol_id=0 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=kernel + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq807x-squashfs-root.img +# Volume ID in UBI image +vol_id=1 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=2 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize diff --git a/meta-tools/ipq807x/flash_partition/ipq807x-ubinize_64.cfg b/meta-tools/ipq807x/flash_partition/ipq807x-ubinize_64.cfg new file mode 100644 index 0000000..08fec7b --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/ipq807x-ubinize_64.cfg @@ -0,0 +1,33 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq807x_64-qcom-ipq807x-hkxx-fit-uImage.itb +# Volume ID in UBI image +vol_id=0 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=kernel + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq807x_64-squashfs-root.img +# Volume ID in UBI image +vol_id=1 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=2 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize diff --git a/meta-tools/ipq807x/flash_partition/nand-4k-partition.xml b/meta-tools/ipq807x/flash_partition/nand-4k-partition.xml new file mode 100644 index 0000000..2385a13 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/nand-4k-partition.xml @@ -0,0 +1,263 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nand.mbn + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq807x-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 60416 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq807x_64-ubi-root-m4096-p256KiB.img + + + 0:WIFIFW + 24064 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ubi_m4096_p256.img + wifi_fw_ubi_m4096_p256_v2.img + + + rootfs_1 + 60416 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:WIFIFW_1 + 24064 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 2048 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq807x/flash_partition/nand-partition-qcn9000.xml b/meta-tools/ipq807x/flash_partition/nand-partition-qcn9000.xml new file mode 100644 index 0000000..8a046f7 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/nand-partition-qcn9000.xml @@ -0,0 +1,263 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nand.mbn + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq807x-qcn9000.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 46080 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root.img + openwrt-ipq-ipq807x_64-ubi-root.img + + + 0:WIFIFW + 10240 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ipq8074_qcn9000_ubi.img + wifi_fw_ipq8074_qcn9000_ubi_v2.img + + + rootfs_1 + 46080 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:WIFIFW_1 + 10240 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq807x/flash_partition/nand-partition.xml b/meta-tools/ipq807x/flash_partition/nand-partition.xml new file mode 100644 index 0000000..a661284 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/nand-partition.xml @@ -0,0 +1,263 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nand.mbn + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq807x.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 2048 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 46080 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root.img + openwrt-ipq-ipq807x_64-ubi-root.img + + + 0:WIFIFW + 8192 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ubi.img + wifi_fw_ubi_v2.img + + + rootfs_1 + 46080 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:WIFIFW_1 + 8192 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq807x/flash_partition/nor-partition.xml b/meta-tools/ipq807x/flash_partition/nor-partition.xml new file mode 100644 index 0000000..c9dbdc1 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/nor-partition.xml @@ -0,0 +1,162 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 32 + 0xFF + nor-system-partition-ipq807x.bin + + + 0:QSEE + 1408 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:RPM + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 6144 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-qcom-ipq807x-hkxx-fit-uImage.itb + openwrt-ipq-ipq807x_64-qcom-ipq807x-hkxx-fit-uImage.itb + + + rootfs + 20992 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-squashfs-root.img + openwrt-ipq-ipq807x_64-squashfs-root.img + + + 0:WIFIFW + 2304 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_squashfs.img + wifi_fw_squashfs_v2.img + + + 0:ETHPHYFW + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/flash_partition/norplusemmc-partition.xml b/meta-tools/ipq807x/flash_partition/norplusemmc-partition.xml new file mode 100644 index 0000000..8d1b4c4 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/norplusemmc-partition.xml @@ -0,0 +1,218 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusemmc-system-partition-ipq807x.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/flash_partition/norplusnand-4k-partition.xml b/meta-tools/ipq807x/flash_partition/norplusnand-4k-partition.xml new file mode 100644 index 0000000..9f70c40 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/norplusnand-4k-partition.xml @@ -0,0 +1,265 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq807x-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 60416 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq807x_64-ubi-root-m4096-p256KiB.img + + + 0:WIFIFW + 24064 + 1024 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ubi_m4096_p256.img + wifi_fw_ubi_m4096_p256_v2.img + + + rootfs_1 + 60416 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:WIFIFW_1 + 24064 + 1024 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/flash_partition/norplusnand-partition-qcn9000.xml b/meta-tools/ipq807x/flash_partition/norplusnand-partition-qcn9000.xml new file mode 100644 index 0000000..4cf40b6 --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/norplusnand-partition-qcn9000.xml @@ -0,0 +1,265 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq807x-qcn9000.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 512 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 53248 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root.img + openwrt-ipq-ipq807x_64-ubi-root.img + + + 0:WIFIFW + 10240 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ipq8074_qcn9000_ubi.img + wifi_fw_ipq8074_qcn9000_ubi_v2.img + + + rootfs_1 + 53248 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:WIFIFW_1 + 10240 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/flash_partition/norplusnand-partition.xml b/meta-tools/ipq807x/flash_partition/norplusnand-partition.xml new file mode 100644 index 0000000..6d6155d --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/norplusnand-partition.xml @@ -0,0 +1,265 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + sbl1_nor.mbn + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq807x.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1536 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + devcfg_lm.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq807x-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 53248 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root.img + openwrt-ipq-ipq807x_64-ubi-root.img + + + 0:WIFIFW + 8192 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ubi.img + wifi_fw_ubi_v2.img + + + rootfs_1 + 53248 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:WIFIFW_1 + 8192 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/flash_partition/tiny-nor-partition.xml b/meta-tools/ipq807x/flash_partition/tiny-nor-partition.xml new file mode 100644 index 0000000..c8c524d --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/tiny-nor-partition.xml @@ -0,0 +1,96 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:BOOTLDR1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1_nor.mbn + + + 0:BOOTLDR2 + 576 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr2_nor.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 6144 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-qcom-ipq807x-hkxx-fit-uImage.itb + openwrt-ipq-ipq807x_64-qcom-ipq807x-hkxx-fit-uImage.itb + + + rootfs + 22528 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-squashfs-root.img + openwrt-ipq-ipq807x_64-squashfs-root.img + + + 0:WIFIFW + 2304 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_squashfs.img + wifi_fw_squashfs_v2.img + + + diff --git a/meta-tools/ipq807x/flash_partition/tiny-norplusemmc-partition.xml b/meta-tools/ipq807x/flash_partition/tiny-norplusemmc-partition.xml new file mode 100644 index 0000000..58d64ee --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/tiny-norplusemmc-partition.xml @@ -0,0 +1,60 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:BOOTLDR1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1_nor.mbn + + + 0:BOOTLDR2 + 576 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr2_nor.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq807x/flash_partition/tiny-norplusnand-partition.xml b/meta-tools/ipq807x/flash_partition/tiny-norplusnand-partition.xml new file mode 100644 index 0000000..21a37ee --- /dev/null +++ b/meta-tools/ipq807x/flash_partition/tiny-norplusnand-partition.xml @@ -0,0 +1,87 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:BOOTLDR1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr1_nor.mbn + + + 0:BOOTLDR2 + 576 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootldr2_nor.mbn + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 53248 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq807x-ubi-root.img + openwrt-ipq-ipq807x_64-ubi-root.img + + + 0:WIFIFW + 8192 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_ubi.img + wifi_fw_ubi_v2.img + + + diff --git a/meta-tools/ipq9048/bootconfig/bootconfig.xml b/meta-tools/ipq9048/bootconfig/bootconfig.xml new file mode 100644 index 0000000..1560f9a --- /dev/null +++ b/meta-tools/ipq9048/bootconfig/bootconfig.xml @@ -0,0 +1,50 @@ + + + + + 0xA3A2A1A0 + + 0x1 + + + 0:QSEE + 0 + + + 0:DEVCFG + 0 + + + 0:RPM + 0 + + + 0:CDT + 0 + + + 0:APPSBL + 0 + + + 0:HLOS + 0 + + + rootfs + 0 + + + 0:WIFIFW + 0 + + + + + diff --git a/meta-tools/ipq9048/cdt/1024M32_DDR4.xml b/meta-tools/ipq9048/cdt/1024M32_DDR4.xml new file mode 100644 index 0000000..e37ceeb --- /dev/null +++ b/meta-tools/ipq9048/cdt/1024M32_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 16 + 0 + 16 + 10 + 8 + 0 + 1 + 4096 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 2 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + 0 + 10 + 16 + 10 + 16 + 0 + 16 + 10 + 8 + 0 + 1 + 4096 + 0 + 8 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 2 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/128M16_DDR3.xml b/meta-tools/ipq9048/cdt/128M16_DDR3.xml new file mode 100644 index 0000000..96a2fd3 --- /dev/null +++ b/meta-tools/ipq9048/cdt/128M16_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 256 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 256 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/128M32_DDR3.xml b/meta-tools/ipq9048/cdt/128M32_DDR3.xml new file mode 100644 index 0000000..a0d0ae8 --- /dev/null +++ b/meta-tools/ipq9048/cdt/128M32_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/256M16_DDR3.xml b/meta-tools/ipq9048/cdt/256M16_DDR3.xml new file mode 100644 index 0000000..e9522bd --- /dev/null +++ b/meta-tools/ipq9048/cdt/256M16_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 512 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/256M32_DDR3.xml b/meta-tools/ipq9048/cdt/256M32_DDR3.xml new file mode 100644 index 0000000..9f05f5b --- /dev/null +++ b/meta-tools/ipq9048/cdt/256M32_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/256M32_DDR4.xml b/meta-tools/ipq9048/cdt/256M32_DDR4.xml new file mode 100644 index 0000000..fc4b290 --- /dev/null +++ b/meta-tools/ipq9048/cdt/256M32_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 1 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 1 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/512M16_DDR3.xml b/meta-tools/ipq9048/cdt/512M16_DDR3.xml new file mode 100644 index 0000000..db0ed17 --- /dev/null +++ b/meta-tools/ipq9048/cdt/512M16_DDR3.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 6 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 34000 + 70200000 + 7800000 + 534833 + 6000 + 7500 + 13910 + 5000 + 15000 + 5000 + 47910 + 13910 + 35000 + 7500 + 320000 + 80000 + 512 + 10000 + 10000 + 24000 + 2000 + 8500 + 15000 + 4 + 6 + 6000 + 0 + 16 + 33590869 + 1968136 + 50372 + 0 + 64 + 6 + 8 + 7500 + 5 + 5 + 0 + 0 + 0 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/512M16_DDR4.xml b/meta-tools/ipq9048/cdt/512M16_DDR4.xml new file mode 100644 index 0000000..36982e8 --- /dev/null +++ b/meta-tools/ipq9048/cdt/512M16_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 1 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 1 + 16 + 10 + 8 + 0 + 1 + 1024 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 1 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/cdt/512M32_DDR4.xml b/meta-tools/ipq9048/cdt/512M32_DDR4.xml new file mode 100644 index 0000000..fddbc40 --- /dev/null +++ b/meta-tools/ipq9048/cdt/512M32_DDR4.xml @@ -0,0 +1,172 @@ + + + + + + + 0x43, 0x44, 0x54, 0x00, end + 0x01, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + 0x00, 0x00, 0x00, 0x00, end + + + + 0x02,0x08,0x01,0x01,0x01,end + + + + 3 + 0x00, 0x52, 0x44, 0x44, end + 0xFF, 0xFF, 0x00, 0x00, end + 1 + 232 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 1 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + 0 + 10 + 16 + 10 + 8 + 0 + 16 + 10 + 8 + 0 + 1 + 2048 + 0 + 16 + 350000 + 32000 + 70200000 + 7800000 + 639998 + 6000 + 2500 + 15000 + 5300 + 15000 + 5000 + 45320 + 15000 + 30000 + 7500 + 512 + 128 + 1024 + 10000 + 10000 + 6000 + 2000 + 8500 + 15000 + 8 + 5 + 6400 + 1 + 16 + 33590869 + 1968136 + 32964 + 0 + 3412 + 257 + 40 + 9500 + 12 + 20 + 0 + 1024 + 4096 + 0 + 0 + + + 3788 + + + + + diff --git a/meta-tools/ipq9048/config.xml b/meta-tools/ipq9048/config.xml new file mode 100644 index 0000000..ca64ef6 --- /dev/null +++ b/meta-tools/ipq9048/config.xml @@ -0,0 +1,99 @@ + + + + + + ipq9048 + + + + 256 + 256 + 256 + + + + + 2048 + 64 + 4096 + + + 4096 + 64 + 4096 + + + + + 7634944 + gpt_main0.bin + gpt_backup0.bin + + + + 256 + 256 + 256 + + + + 256 + 512 + 256 + 256 + gpt_main1.bin + gpt_backup1.bin + + + + + 0xF050000 + AL-EMU + false + 512M16_DDR4 + + + + + + /boot_images/QcomPkg/IPQ9018Pkg/Bin/9018/LA/DEBUG/sign/default/sbl1/xbl.elf + /boot_images/QcomPkg/IPQ9018Pkg/Bin/9018/LA/DEBUG/sign/default/sbl1/xbl_nand.elf + /boot_images/Build/IPQ9018_Loader/DEBUG_CLANG40LINUX/ARM/QcomPkg/XBLLoader/XBLLoader/DEBUG/XBLLoader.dll + /boot_images/core/bsp/tools/flash/partition_tool_exe/build/partition_tool + /boot_images/core/bsp/tools/flash/bootconfig_exe/build/bootconfig_tool + + + /trustzone_images/build/ms/bin/OAPAANAA/tz.mbn + /trustzone_images/build/ms/bin/OAPAANAA/devcfg_noac.mbn + /trustzone_images/build/ms/bin/OAPAANAA/devcfg_nosmmu.mbn + + + /apss_proc/out/ipq9048/openwrt-ipq9048-u-boot.elf + /apss_proc/out/ipq9048/openwrt-ipq-ipq9048-squashfs-root.img + /apss_proc/out/ipq9048/openwrt-ipq-ipq9048-qcom-ipq9048-alxx-fit-uImage.itb + /apss_proc/out/ipq9048/openwrt-ipq-ipq9048-ubi-root.img + /apss_proc/out/pack.py + + + /apss_proc/out/ipq9048/openwrt-ipq9048-u-boot.elf + /apss_proc/out/ipq9048_64/openwrt-ipq-ipq9048_64-squashfs-root.img + /apss_proc/out/ipq9048_64/openwrt-ipq-ipq9048_64-qcom-ipq9048-alxx-fit-uImage.itb + /apss_proc/out/ipq9048_64/openwrt-ipq-ipq9048_64-ubi-root.img + /apss_proc/out/pack.py + + + /rpm_proc/build/ms/bin/9048/rpm.mbn + + + /wlan_proc/build/ms/bin/wifi_fw_squashfs.img + /wlan_proc/build/ms/bin/wifi_fw_ubi.img + + + diff --git a/meta-tools/ipq9048/flash_partition/emmc-partition.xml b/meta-tools/ipq9048/flash_partition/emmc-partition.xml new file mode 100644 index 0000000..4e4855b --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/emmc-partition.xml @@ -0,0 +1,332 @@ + + + + + + + + WRITE_PROTECT_BOUNDARY_IN_KB = 65536 + GROW_LAST_PARTITION_TO_FILL_DISK= false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meta-tools/ipq9048/flash_partition/ipq9048-ubinize.cfg b/meta-tools/ipq9048/flash_partition/ipq9048-ubinize.cfg new file mode 100644 index 0000000..01566b7 --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/ipq9048-ubinize.cfg @@ -0,0 +1,45 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq90xx-qcom-ipq90xx-alxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_ipq9048_squashfs.img +vol_size=4MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq90xx-squashfs-root.img +# Volume ID in UBI image +vol_id=2 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=3 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize diff --git a/meta-tools/ipq9048/flash_partition/ipq9048-ubinize_64.cfg b/meta-tools/ipq9048/flash_partition/ipq9048-ubinize_64.cfg new file mode 100644 index 0000000..5852e3d --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/ipq9048-ubinize_64.cfg @@ -0,0 +1,46 @@ +[kernel] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq90xx_64-qcom-ipq90xx-alxx-fit-uImage.itb +vol_size=6MiB +vol_type=static +# Volume ID in UBI image +vol_id=0 +# Volume name +vol_name=kernel + +[wifi_fw] +# Volume mode (other option is static) +mode=ubi +# Source image +image=wifi_fw_ipq9048_squashfs.img +vol_size=4MiB +vol_type=static +# Volume ID in UBI image +vol_id=1 +# Volume name +vol_name=wifi_fw + +[rootfs] +# Volume mode (other option is static) +mode=ubi +# Source image +image=openwrt-ipq-ipq90xx_64-squashfs-root.img +# Volume ID in UBI image +vol_id=2 +# Allow for dynamic resize +vol_type=dynamic +# Volume name +vol_name=ubi_rootfs + +[rootfs_data] +mode=ubi +# this is arbitrary, since autoresize below will use up the remaining +# free space on the mtd volume +vol_size=1KiB +vol_id=3 +vol_type=dynamic +vol_name=rootfs_data +vol_flags=autoresize + diff --git a/meta-tools/ipq9048/flash_partition/nand-4k-partition.xml b/meta-tools/ipq9048/flash_partition/nand-4k-partition.xml new file mode 100644 index 0000000..6cc36dd --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/nand-4k-partition.xml @@ -0,0 +1,271 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl_nand.elf + + + 0:SBL1_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq9048-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TME + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tme.mbn + + + 0:TME_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq9048-u-boot.mbn + + + 0:APPSBL_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 85504 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq90xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq90xx_64-ubi-root-m4096-p256KiB.img + + + rootfs_1 + 85504 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 2048 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq9048/flash_partition/nand-partition.xml b/meta-tools/ipq9048/flash_partition/nand-partition.xml new file mode 100644 index 0000000..40adab8 --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/nand-partition.xml @@ -0,0 +1,271 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl_nand.elf + + + 0:SBL1_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:MIBIB + 512 + 512 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + nand-system-partition-ipq9048.bin + + + 0:BOOTCONFIG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + bootconfig.bin + + + 0:QSEE + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1792 + 1792 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TME + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tme.mbn + + + 0:TME_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq9048-u-boot.mbn + + + 0:APPSBL_1 + 768 + 768 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + rootfs + 53376 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq90xx-ubi-root.img + openwrt-ipq-ipq90xx_64-ubi-root.img + + + rootfs_1 + 53376 + 1024 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ETHPHYFW + 256 + 256 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + diff --git a/meta-tools/ipq9048/flash_partition/nor-partition.xml b/meta-tools/ipq9048/flash_partition/nor-partition.xml new file mode 100644 index 0000000..cc0ab90 --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/nor-partition.xml @@ -0,0 +1,171 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 32 + 0xFF + nor-system-partition-ipq9048.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TME + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tme.mbn + + + 0:RPM + 128 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq9048-u-boot.mbn + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:HLOS + 6144 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq90xx-qcom-ipq90xx-alxx-fit-uImage.itb + openwrt-ipq-ipq90xx_64-qcom-ipq90xx-alxx-fit-uImage.itb + + + rootfs + 20608 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq90xx-squashfs-root.img + openwrt-ipq-ipq90xx_64-squashfs-root.img + + + 0:WIFIFW + 2304 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + wifi_fw_squashfs.img + + + diff --git a/meta-tools/ipq9048/flash_partition/norplusemmc-partition.xml b/meta-tools/ipq9048/flash_partition/norplusemmc-partition.xml new file mode 100644 index 0000000..133a468 --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/norplusemmc-partition.xml @@ -0,0 +1,228 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusemmc-system-partition-ipq9048.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TME + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tme.mbn + + + 0:TME_1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq9048-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq9048/flash_partition/norplusnand-4k-partition.xml b/meta-tools/ipq9048/flash_partition/norplusnand-4k-partition.xml new file mode 100644 index 0000000..1d6c6a5 --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/norplusnand-4k-partition.xml @@ -0,0 +1,253 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq9048-m4096-p256KiB.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TME + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tme.mbn + + + 0:TME_1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq9048-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 85504 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq90xx-ubi-root-m4096-p256KiB.img + openwrt-ipq-ipq90xx_64-ubi-root-m4096-p256KiB.img + + + rootfs_1 + 85504 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/ipq9048/flash_partition/norplusnand-partition.xml b/meta-tools/ipq9048/flash_partition/norplusnand-partition.xml new file mode 100644 index 0000000..49e4eb6 --- /dev/null +++ b/meta-tools/ipq9048/flash_partition/norplusnand-partition.xml @@ -0,0 +1,253 @@ + + + + + + 0xAA7D1B9A + 0x1F7D48BC + + 0x4 + + + + 0:SBL1 + 768 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + xbl.elf + + + 0:MIBIB + 64 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + norplusnand-system-partition-ipq9048.bin + + + 0:BOOTCONFIG + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:BOOTCONFIG1 + 128 + 0 + 0 + 0xFF + 64 + 16 + 0xFF + bootconfig.bin + + + 0:QSEE + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tz.mbn + + + 0:QSEE_1 + 1664 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:DEVCFG + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + devcfg.mbn + + + 0:DEVCFG_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APDP_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:TME + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + tme.mbn + + + 0:TME_1 + 320 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:RPM + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + rpm.mbn + + + 0:RPM_1 + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:CDT + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + cdt.bin + + + 0:CDT_1 + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBLENV + 64 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:APPSBL + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq9048-u-boot.mbn + + + 0:APPSBL_1 + 640 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + 0:ART + 256 + 0 + 0 + 0xFF + 0xFF + 0x00 + 0xFF + + + + + rootfs + 61440 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + openwrt-ipq-ipq90xx-ubi-root.img + openwrt-ipq-ipq90xx_64-ubi-root.img + + + rootfs_1 + 61440 + 0 + 1 + 0xFF + 0xFF + 0x00 + 0xFF + + + diff --git a/meta-tools/mkimage b/meta-tools/mkimage new file mode 100644 index 0000000000000000000000000000000000000000..c24b723da2e69443679a6e6d071ad266d860d5e9 GIT binary patch literal 152096 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

a$>Y)+qX6ypTO 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 imgaddr=0x88000000 source $imgaddr:script + +Host-side Pre-req + + * Python >= 2.6 + * ordereddict >= 1.1 (for Python 2.6) + * mkimage >= 2012.07 + * dtc >= 1.2.0 + +Target-side Pre-req + +The following U-Boot config macros should be enabled, for the +generated flashing script to work. + + * CONFIG_FIT -- FIT image format support + * CONFIG_SYS_HUSH_PARSER -- bash style scripting support + * CONFIG_SYS_NULLDEV -- redirecting command output support + * CONFIG_CMD_XIMG -- extracting sub-images support + * CONFIG_CMD_NAND -- NAND Flash commands support + * CONFIG_CMD_NAND_YAFFS -- NAND YAFFS2 write support + * CONFIG_CMD_SF -- SPI Flash commands support +""" + +from os.path import getsize +from getopt import getopt +from getopt import GetoptError +from collections import namedtuple +from string import Template +from shutil import copy +from shutil import rmtree + +import os +import sys +import os.path +import subprocess +import struct +import hashlib +import xml.etree.ElementTree as ET + +version = "1.1" +ARCH_NAME = "" +SRC_DIR = "" +MODE = "" +image_type = "all" +memory_size = "default" +lk = "false" +skip_4k_nand = "false" +atf = "false" + +# Note: ipq806x didn't expose any relevant version */ +soc_hw_version_ipq40xx = { 0x20050100 }; +soc_hw_version_ipq807x = { 0x200D0100, 0x200D0101, 0x200D0102, 0x200D0200 }; +soc_hw_version_ipq6018 = { 0x20170100 }; +soc_hw_version_ipq5018 = { 0x20180100 }; + +# +# Python 2.6 and earlier did not have OrderedDict use the backport +# from ordereddict package. If that is not available report error. +# +try: + from collections import OrderedDict +except ImportError: + try: + from ordereddict import OrderedDict + except ImportError: + print "error: this script requires the 'ordereddict' class." + print "Try 'pip install --user ordereddict'" + print "Or 'easy_install --user ordereddict'" + sys.exit(1) + +def error(msg, ex=None): + """Print an error message and exit. + + msg -- string, the message to print + ex -- exception, the associate exception, if any + """ + + sys.stderr.write("pack: %s" % msg) + if ex != None: sys.stderr.write(": %s" % str(ex)) + sys.stderr.write("\n") + sys.exit(1) + +FlashInfo = namedtuple("FlashInfo", "type pagesize blocksize chipsize") +ImageInfo = namedtuple("ProgInfo", "name filename type") +PartInfo = namedtuple("PartInfo", "name offset length which_flash") + +def roundup(value, roundto): + """Return the next largest multiple of 'roundto'.""" + + return ((value + roundto - 1) // roundto) * roundto + +class GPT(object): + GPTheader = namedtuple("GPTheader", "signature revision header_size" + " crc32 current_lba backup_lba first_usable_lba" + " last_usable_lba disk_guid start_lba_part_entry" + " num_part_entry part_entry_size part_crc32") + GPT_SIGNATURE = 'EFI PART' + GPT_REVISION = '\x00\x00\x01\x00' + GPT_HEADER_SIZE = 0x5C + GPT_HEADER_FMT = "<8s4sLL4xQQQQ16sQLLL" + + GPTtable = namedtuple("GPTtable", "part_type unique_guid first_lba" + " last_lba attribute_flag part_name") + GPT_TABLE_FMT = "<16s16sQQQ72s" + + def __init__(self, filename, pagesize, blocksize, chipsize): + self.filename = filename + self.pagesize = pagesize + self.blocksize = blocksize + self.chipsize = chipsize + self.__partitions = OrderedDict() + + def __validate_and_read_parts(self, part_fp): + """Validate the GPT and read the partition""" + part_fp.seek(self.blocksize, os.SEEK_SET) + gptheader_str = part_fp.read(struct.calcsize(GPT.GPT_HEADER_FMT)) + gptheader = struct.unpack(GPT.GPT_HEADER_FMT, gptheader_str) + gptheader = GPT.GPTheader._make(gptheader) + + if gptheader.signature != GPT.GPT_SIGNATURE: + error("Invalid signature") + + if gptheader.revision != GPT.GPT_REVISION: + error("Unsupported GPT Revision") + + if gptheader.header_size != GPT.GPT_HEADER_SIZE: + error("Invalid Header size") + + # Adding GPT partition info. This has to be flashed first. + # GPT Header starts at LBA1 so (current_lba -1) will give the + # starting of primary GPT. + # blocksize will equal to gptheader.first_usuable_lba - current_lba + 1 + + name = "0:GPT" + block_start = gptheader.current_lba - 1 + block_count = gptheader.first_usable_lba - gptheader.current_lba + 1 + which_flash = 0 + part_info = PartInfo(name, block_start, block_count, which_flash) + self.__partitions[name] = part_info + + part_fp.seek(2 * self.blocksize, os.SEEK_SET) + + for i in range(gptheader.num_part_entry): + gpt_table_str = part_fp.read(struct.calcsize(GPT.GPT_TABLE_FMT)) + gpt_table = struct.unpack(GPT.GPT_TABLE_FMT, gpt_table_str) + gpt_table = GPT.GPTtable._make(gpt_table) + + block_start = gpt_table.first_lba + block_count = gpt_table.last_lba - gpt_table.first_lba + 1 + + part_name = gpt_table.part_name.strip(chr(0)) + name = part_name.replace('\0','') + part_info = PartInfo(name, block_start, block_count, which_flash) + self.__partitions[name] = part_info + + # Adding the GPT Backup partition. + # GPT header backup_lba gives block number where the GPT backup header will be. + # GPT Backup header will start from offset of 32 blocks before + # the GPTheader.backup_lba. Backup GPT size is 33 blocks. + name = "0:GPTBACKUP" + block_start = gptheader.backup_lba - 32 + block_count = 33 + part_info = PartInfo(name, block_start, block_count, which_flash) + self.__partitions[name] = part_info + + def get_parts(self): + """Returns a list of partitions present in the GPT.""" + + try: + with open(self.filename, "r") as part_fp: + self.__validate_and_read_parts(part_fp) + except IOError, e: + error("error opening %s" % self.filename, e) + + return self.__partitions + +class MIBIB(object): + Header = namedtuple("Header", "magic1 magic2 version age") + HEADER_FMT = " 0: + self.append("nand write $fileaddr 0x%08x 0x%08x" % (offset, img_size)) + + def write(self, offset, size): + """Generate code, to write to a partition.""" + + if self.flash_type == "nand": + if size > 0: + size = roundup(size, self.pagesize) + self.append("nand write $fileaddr 0x%08x 0x%08x" % (offset, size)) + + elif self.flash_type == "nor": + if size > 0: + self.append("sf write $fileaddr 0x%08x 0x%08x" % (offset, size)) + + elif self.flash_type == "emmc": + if size > 0: + size = roundup(size, self.blocksize) + blk_cnt = size / self.blocksize + self.append("mmc write $fileaddr 0x%08x %x" % (offset, blk_cnt)) + + def probe(self): + if self.flash_type == "nand": + pass + elif self.flash_type == "nor": + self.append("sf probe") + else: + pass + + def switch_layout(self, layout): + if self.flash_type == "nand": + self.append("ipq_nand %s" % layout) + else: + pass + +its_tmpl = Template(""" +/dts-v1/; + +/ { + description = "${desc}"; + images { +${images} + }; +}; +""") + +its_image_tmpl = Template(""" + ${name} { + description = "${desc}"; + data = /incbin/("./${fname}"); + type = "${imtype}"; + arch = "arm"; + compression = "none"; + hash@1 { algo = "crc32"; }; + }; +""") + +def sha1(message): + """Returns SHA1 digest in hex format of the message.""" + + m = hashlib.sha1() + m.update(message) + return m.hexdigest() + +class Pack(object): + """Class to create a flashable, multi-image blob. + + Combine multiple images present in a directory, and generate a + U-Boot script to flash the images. + """ + # The maximum rootfs size is 64MB + norplusnand_rootfs_img_size = (64 * 1024 * 1024) + + def __init__(self): + self.flinfo = None + self.images_dname = None + self.ipq_nand = None + self.partitions = {} + + self.fconf_fname = None + self.scr_fname = None + self.its_fname = None + self.img_fname = None + self.emmc_page_size = 512 + self.emmc_block_size = 512 + + def __get_machid(self, section): + """Get the machid for a section. + + info -- ConfigParser object, containing image flashing info + section -- section to retreive the machid from + """ + try: + machid = int(section.find("./machid").text, 0) + machid = "%x" % machid + except ValueError, e: + error("invalid value for machid, should be integer") + + return machid + + def __get_img_size(self, filename): + """Get the size of the image to be flashed + + filaneme -- string, filename of the image to be flashed + """ + + if filename.lower() == "none": + return 0 + try: + return getsize(os.path.join(self.images_dname, filename)) + except OSError, e: + error("error getting image size '%s'" % filename, e) + + def __get_part_info(self, partition): + """Return partition info for the specified partition. + + partition -- string, partition name + """ + try: + return self.partitions[partition] + except KeyError, e: + return None + + def __gen_flash_script_cdt(self, entries, partition, flinfo, script): + global ARCH_NAME + for section in entries: + machid = int(section.find(".//machid").text, 0) + machid = "%x" % machid + board = section.find(".//board").text + spi_nand = section.find(".//spi_nand").text + if ARCH_NAME != "ipq806x": + try: + memory = section.find(".//memory").text + except AttributeError, e: + memory = "128M16" + if memory_size != "default": + filename = "cdt-" + board + "_" + memory + "_LM" + memory_size + ".bin" + else: + filename = "cdt-" + board + "_" + memory + ".bin" + else: + filename = "cdt-" + board + ".bin" + + img_size = self.__get_img_size(filename) + part_info = self.__get_part_info(partition) + + section_label = partition.split(":") + if len(section_label) != 1: + section_conf = section_label[1] + else: + section_conf = section_label[0] + + section_conf = section_conf.lower() + + if self.flinfo.type == 'nand': + size = roundup(img_size, flinfo.pagesize) + tr = ' | tr \"\\000\" \"\\377\"' + + if self.flinfo.type == 'emmc': + size = roundup(img_size, flinfo.blocksize) + tr = '' + + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + pad_size = size - img_size + filename_abs = os.path.join(self.images_dname, filename) + filename_abs_pad = filename_abs + ".padded" + cmd = 'cat %s > %s' % (filename_abs, filename_abs_pad) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to copy image") + cmd = 'dd if=/dev/zero count=1 bs=%s %s >> %s' % (pad_size, tr, filename_abs_pad) + cmd = '(' + cmd + ') 1>/dev/null 2>/dev/null' + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to create padded image from script") + + if self.flinfo.type != "emmc": + if part_info == None: + if self.flinfo.type == 'norplusnand': + if count > 2: + error("More than 2 NAND images for NOR+NAND is not allowed") + elif img_size > part_info.length: + print "img size is larger than part. len in '%s'" % section_conf + return 0 + else: + if part_info != None: + if (img_size > 0): + if img_size > (part_info.length * self.flinfo.blocksize): + print "img size is larger than part. len in '%s'" % section_conf + return 0 + + if part_info == None and self.flinfo.type != 'norplusnand': + print "Flash type is norplusemmc" + continue + + if machid: + script.start_if("machid", machid) + if ARCH_NAME != "ipq806x": + script.start_activity("Flashing ddr-%s_%s:" % ( board, memory )) + if img_size > 0: + filename_pad = filename + ".padded" + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + script.imxtract("ddr-" + board + "_" + memory + "-" + sha1(filename_pad)) + else: + script.imxtract("ddr-" + board + "_" + memory + "-" + sha1(filename)) + """ script.imxtract("cdt-" + board + "_" + memory + ".bin-" + sha1(filename_pad)) + else: + script.imxtract("cdt-" + board + "_" + memory + ".bin-" + sha1(filename)) """ + + else: + script.start_activity("Flashing ddr-%s:" % (board)) + script.switch_layout("sbl") + if img_size > 0: + filename_pad = filename + ".padded" + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + script.imxtract("ddr-" + board + "-" + sha1(filename_pad)) + else: + script.imxtract("ddr-" + board + "-" + sha1(filename)) + """ script.imxtract("cdt-" + board + ".bin-" + sha1(filename_pad)) + else: + script.imxtract("cdt-" + board + ".bin-" + sha1(filename)) """ + + part_size = Pack.norplusnand_rootfs_img_size + if part_info == None: + if self.flinfo.type == 'norplusnand': + offset = count * Pack.norplusnand_rootfs_img_size + script.nand_write(offset, part_size, img_size, spi_nand) + count = count + 1 + else: + if part_info.which_flash == 0: + offset = part_info.offset + script.erase(offset, part_info.length) + script.write(offset, img_size) + else: + offset = part_info.offset + script.nand_write(offset, part_info.length, img_size, spi_nand) + + script.finish_activity() + + if machid: + script.end_if() + + return 1 + + def __gen_flash_script_wififw(self, entries, partition, filename, wifi_fw_type, flinfo, script): + + machid_list = [] + for section in entries: + + wififw_type = section.find('.//wififw_type') + if wififw_type == None: + continue + wififw_type = str(section.find(".//wififw_type").text) + + if str(wifi_fw_type) != str(wififw_type): + continue + + machid = int(section.find(".//machid").text, 0) + machid = "%x" % machid + + machid_list.append(machid) + + img_size = self.__get_img_size(filename) + part_info = self.__get_part_info(partition) + + section_label = partition.split(":") + if len(section_label) != 1: + section_conf = section_label[1] + else: + section_conf = section_label[0] + section_conf = section_conf.lower() + + if self.flinfo.type == 'nand': + size = roundup(img_size, flinfo.pagesize) + tr = ' | tr \"\\000\" \"\\377\"' + + if self.flinfo.type == 'emmc': + size = roundup(img_size, flinfo.blocksize) + tr = '' + + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + pad_size = size - img_size + filename_abs = os.path.join(self.images_dname, filename) + filename_abs_pad = filename_abs + ".padded" + cmd = 'cat %s > %s' % (filename_abs, filename_abs_pad) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to copy image") + cmd = 'dd if=/dev/zero count=1 bs=%s %s >> %s' % (pad_size, tr, filename_abs_pad) + cmd = '(' + cmd + ') 1>/dev/null 2>/dev/null' + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to create padded image from script") + + if self.flinfo.type != "emmc": + if part_info == None: + if self.flinfo.type == 'norplusnand': + if count > 2: + error("More than 2 NAND images for NOR+NAND is not allowed") + elif img_size > part_info.length: + print "img size is larger than part. len in '%s'" % section_conf + return 0 + else: + if part_info != None: + if (img_size > 0): + if img_size > (part_info.length * self.flinfo.blocksize): + print "img size is larger than part. len in '%s'" % section_conf + return 0 + + if part_info == None and self.flinfo.type != 'norplusnand': + print "Flash type is norplusemmc" + return 1 + + script.start_if_or("machid", machid_list) + script.start_activity("Flashing %s_%s:" % ( section_conf, wifi_fw_type )) + + if img_size > 0: + filename_pad = filename + ".padded" + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + script.imxtract(section_conf + "_" + wifi_fw_type + "-" + sha1(filename_pad)) + else: + script.imxtract(section_conf + "_" + wifi_fw_type + "-" + sha1(filename)) + + part_size = Pack.norplusnand_rootfs_img_size + if part_info == None: + if self.flinfo.type == 'norplusnand': + offset = count * Pack.norplusnand_rootfs_img_size + script.nand_write(offset, part_size, img_size, spi_nand) + count = count + 1 + else: + if part_info.which_flash == 0: + offset = part_info.offset + script.erase(offset, part_info.length) + script.write(offset, img_size) + else: + offset = part_info.offset + script.nand_write(offset, part_info.length, img_size, spi_nand) + + script.finish_activity() + script.end_if() + + return 1 + + def __gen_flash_script_bootldr(self, entries, partition, flinfo, script): + for section in entries: + + machid = int(section.find(".//machid").text, 0) + machid = "%x" % machid + board = section.find(".//board").text + memory = section.find(".//memory").text + tiny_image = section.find('.//tiny_image') + + if tiny_image == None: + continue + + if memory_size != "default": + filename = "bootldr1_" + board + "_" + memory + "_LM" + memory_size + ".mbn" + else: + filename = "bootldr1_" + board + "_" + memory + ".mbn" + + img_size = self.__get_img_size(filename) + part_info = self.__get_part_info(partition) + + section_label = partition.split(":") + if len(section_label) != 1: + section_conf = section_label[1] + else: + section_conf = section_label[0] + + section_conf = section_conf.lower() + + if self.flinfo.type == 'nand': + size = roundup(img_size, flinfo.pagesize) + tr = ' | tr \"\\000\" \"\\377\"' + + if self.flinfo.type == 'emmc': + size = roundup(img_size, flinfo.blocksize) + tr = '' + + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + pad_size = size - img_size + filename_abs = os.path.join(self.images_dname, filename) + filename_abs_pad = filename_abs + ".padded" + cmd = 'cat %s > %s' % (filename_abs, filename_abs_pad) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to copy image") + cmd = 'dd if=/dev/zero count=1 bs=%s %s >> %s' % (pad_size, tr, filename_abs_pad) + cmd = '(' + cmd + ') 1>/dev/null 2>/dev/null' + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to create padded image from script") + + if self.flinfo.type != "emmc": + if part_info == None: + if self.flinfo.type == 'norplusnand': + if count > 2: + error("More than 2 NAND images for NOR+NAND is not allowed") + elif img_size > part_info.length: + print "img size is larger than part. len in '%s'" % section_conf + return 0 + else: + if part_info != None: + if (img_size > 0): + if img_size > (part_info.length * self.flinfo.blocksize): + print "img size is larger than part. len in '%s'" % section_conf + return 0 + + if part_info == None and self.flinfo.type != 'norplusnand': + print "Flash type is norplusemmc" + continue + + if machid: + script.start_if("machid", machid) + + script.start_activity("Flashing bootldr1-%s_%s:" % ( board, memory )) + if img_size > 0: + filename_pad = filename + ".padded" + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + script.imxtract("bootldr1_" + board + "_" + memory + "-" + sha1(filename_pad)) + else: + script.imxtract("bootldr1_" + board + "_" + memory + "-" + sha1(filename)) + + part_size = Pack.norplusnand_rootfs_img_size + if part_info == None: + if self.flinfo.type == 'norplusnand': + offset = count * Pack.norplusnand_rootfs_img_size + script.nand_write(offset, part_size, img_size, spi_nand) + count = count + 1 + else: + if part_info.which_flash == 0: + offset = part_info.offset + script.erase(offset, part_info.length) + script.write(offset, img_size) + else: + offset = part_info.offset + script.nand_write(offset, part_info.length, img_size, spi_nand) + + script.finish_activity() + + if machid: + script.end_if() + + return 1 + + def __gen_flash_script_image(self, filename, soc_version, file_exists, machid, partition, flinfo, script): + + global IF_QCN9000 + + img_size = 0 + if file_exists == 1: + img_size = self.__get_img_size(filename) + part_info = self.__get_part_info(partition) + + section_label = partition.split(":") + if len(section_label) != 1: + section_conf = section_label[1] + else: + section_conf = section_label[0] + + section_conf = section_conf.lower() + spi_nand = False + + if self.flinfo.type == 'nand': + size = roundup(img_size, flinfo.pagesize) + tr = ' | tr \"\\000\" \"\\377\"' + + if self.flinfo.type == 'emmc': + size = roundup(img_size, flinfo.blocksize) + tr = '' + + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + pad_size = size - img_size + filename_abs = os.path.join(self.images_dname, filename) + filename_abs_pad = filename_abs + ".padded" + cmd = 'cat %s > %s' % (filename_abs, filename_abs_pad) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to copy image") + cmd = 'dd if=/dev/zero count=1 bs=%s %s >> %s' % (pad_size, tr, filename_abs_pad) + cmd = '(' + cmd + ') 1>/dev/null 2>/dev/null' + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("failed to create padded image from script") + + if self.flinfo.type != "emmc": + if part_info == None: + if self.flinfo.type == 'norplusnand': + if count > 2: + error("More than 2 NAND images for NOR+NAND is not allowed") + elif img_size > part_info.length: + print "img size is larger than part. len in '%s'" % section_conf + return 0 + else: + if part_info != None: + if (img_size > 0): + if img_size > (part_info.length * self.flinfo.blocksize): + print "img size is larger than part. len in '%s'" % section_conf + return 0 + + if part_info == None and self.flinfo.type != 'norplusnand': + print "Flash type is norplusemmc" + return 1 + + if machid: + script.start_if("machid", machid) + + if section_conf == "mibib" and IF_QCN9000: + section_conf = "mibib_qcn9000" + if section_conf == "qsee": + section_conf = "tz" + elif section_conf == "appsbl": + if lk == "true": + section_conf = "lkboot" + else: + section_conf = "u-boot" + elif section_conf == "rootfs" and self.flash_type in ["nand", "nand-4k", "nand-audio", "nand-audio-4k", "norplusnand", "norplusnand-4k"]: + section_conf = "ubi" + elif section_conf == "wififw" and self.flash_type in ["nand", "nand-4k", "nand-audio", "nand-audio-4k", "norplusnand", "norplusnand-4k"]: + section_conf = "wififw_ubi" + if IF_QCN9000: + section_conf = "wififw_ubi_qcn9000" + + if soc_version: + section_conf = section_conf + "_v" + str(soc_version) + if str(soc_version) == "1": + script.append('if test "$soc_version_major" = "1" || test "$soc_version_major" = ""; then\n', fatal=False) + else: + script.start_if("soc_version_major", soc_version) + + script.start_activity("Flashing %s:" % section_conf) + + if file_exists == 0: + script.append('setenv stdout serial && echo "error: binary image not found" && exit 1', fatal=False) + if soc_version: + script.end_if() + return 1 + + if ARCH_NAME == "ipq806x": + script.switch_layout(layout) + if img_size > 0: + filename_pad = filename + ".padded" + if ((self.flinfo.type == 'nand' or self.flinfo.type == 'emmc') and (size != img_size)): + script.imxtract(section_conf + "-" + sha1(filename_pad)) + else: + script.imxtract(section_conf + "-" + sha1(filename)) + + part_size = Pack.norplusnand_rootfs_img_size + if part_info == None: + if self.flinfo.type == 'norplusnand': + offset = count * Pack.norplusnand_rootfs_img_size + img_size = Pack.norplusnand_rootfs_img_size + script.nand_write(offset, part_size, img_size, spi_nand) + count = count + 1 + else: + if part_info.which_flash == 0: + offset = part_info.offset + script.erase(offset, part_info.length) + script.write(offset, img_size) + else: + offset = part_info.offset + script.nand_write(offset, part_info.length, img_size, spi_nand) + + script.finish_activity() + + if soc_version: + script.end_if() + + if machid: + script.end_if() + + return 1 + + def __gen_flash_script(self, script, flinfo, root, testmachid=False): + """Generate the script to flash the images. + + info -- ConfigParser object, containing image flashing info + script -- Script object, to append commands to + """ + global MODE + global SRC_DIR + global ARCH_NAME + global IF_QCN9000 + + diff_files = "" + count = 0 + soc_version = 0 + diff_soc_ver_files = 0 + file_exists = 1 + wifi_fw_type = "" + + if self.flash_type == "norplusemmc" and flinfo.type == "emmc": + srcDir_part = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + flinfo.type + "-partition.xml" + else: + if IF_QCN9000: + srcDir_part = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + self.flash_type.lower() + "-partition-qcn9000.xml" + else: + srcDir_part = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + self.flash_type.lower() + "-partition.xml" + + root_part = ET.parse(srcDir_part) + if self.flash_type != "emmc" and flinfo.type != "emmc": + parts = root_part.findall(".//partitions/partition") + elif self.flash_type != "emmc" and flinfo.type == "emmc": + parts = root_part.findall(".//physical_partition[@ref='norplusemmc']/partition") + else: + parts = root_part.findall(".//physical_partition[@ref='emmc']/partition") + if flinfo.type == "emmc" and image_type == "all": + parts_length = len(parts) + 2 + else: + parts_length = len(parts) + entries = root.findall(".//data[@type='MACH_ID_BOARD_MAP']/entry") + + # Note: Skipping validation for ipq806x. It didn't expose any relevant ID. */ + if ARCH_NAME == "ipq40xx": + soc_hw_versions = soc_hw_version_ipq40xx + if ARCH_NAME == "ipq807x" or ARCH_NAME == "ipq807x_64": + soc_hw_versions = soc_hw_version_ipq807x + if ARCH_NAME == "ipq6018" or ARCH_NAME == "ipq6018_64": + soc_hw_versions = soc_hw_version_ipq6018 + if ARCH_NAME == "ipq5018" or ARCH_NAME == "ipq5018_64": + soc_hw_versions = soc_hw_version_ipq5018 + + chip_count = 0 + for soc_hw_version in soc_hw_versions: + chip_count = chip_count + 1 + if chip_count == 1: + script.script.append('if test -n $soc_hw_version') + script.script.append('; then\n') + script.script.append('if test "$soc_hw_version" = "%x" ' % soc_hw_version) + else: + script.script.append('|| test "$soc_hw_version" = "%x" ' % soc_hw_version) + if chip_count >= 1: + script.script.append('; then\n') + script.script.append('echo \'soc_hw_version : Validation success\'\n') + script.script.append('else\n') + script.script.append('echo \'soc_hw_version : did not match, aborting upgrade\'\n') + script.script.append('exit 1\n') + script.script.append('fi\n') + script.script.append('else\n') + script.script.append('echo \'soc_hw_version : unknown, skipping validation\'\n') + script.script.append('fi\n') + + if testmachid: + machid_count = 0 + for section in entries: + machid = int(section.find(".//machid").text, 0) + machid = "%x" % machid + machid_count = machid_count + 1 + if machid_count == 1: + script.script.append('if test "$machid" = "%s" ' % machid) + else: + script.script.append('|| test "$machid" = "%s" ' % machid) + if machid_count >= 1: + script.script.append('; then\n') + script.script.append('echo \'machid : Validation success\'\n') + script.script.append('else\n') + script.script.append('echo \'machid : unknown, aborting upgrade\'\n') + script.script.append('exit 1\n') + script.script.append('fi\n') + first = False + section = None + part_index = 0 + + if flinfo.type == "emmc" and image_type == "all": + first = True + + for index in range(parts_length): + + filename = "" + partition = "" + if first: + if self.flash_type == "norplusemmc": + part_info = root.find(".//data[@type='NORPLUSEMMC_PARAMETER']") + else: + part_info = root.find(".//data[@type='EMMC_PARAMETER']") + part_fname = part_info.find(".//partition_mbn") + filename = part_fname.text + partition = "0:GPT" + first = False + + elif index == (parts_length - 1) and flinfo.type == "emmc" and image_type == "all": + if self.flash_type == "norplusemmc": + part_info = root.find(".//data[@type='NORPLUSEMMC_PARAMETER']") + else: + part_info = root.find(".//data[@type='EMMC_PARAMETER']") + part_fname = part_info.find(".//partition_mbn_backup") + filename = part_fname.text + partition = "0:GPTBACKUP" + + else: + section = parts[part_index] + part_index += 1 + if flinfo.type != "emmc": + try: + if image_type == "all" or section[8].attrib['image_type'] == image_type: + filename = section[8].text + try: + if section[8].attrib['mode'] != MODE: + filename = section[9].text + else: + pass + except AttributeError, e: + pass + except KeyError, e: + pass + else: + continue + except IndexError, e: + if index == (parts_length - 1): + return + else: + continue + except KeyError, e: + continue + partition = section[0].text + else: + try: + diff_files = section.attrib['diff_files'] + except KeyError, e: + try: + diff_soc_ver_files = section.attrib['diff_soc_ver_files'] + except KeyError, e: + try: + wifi_fw_type = section.attrib['wififw_type'] + except KeyError, e: + try: + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename'] + if lk == "true" and "u-boot" in filename: + filename = filename.replace("u-boot", "lkboot") + partition = section.attrib['label'] + if filename == "": + continue + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + + if diff_files == "true": + try: + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename_' + MODE] + if lk == "true" and "uImage" in filename: + if MODE == "32": + filename = 'openwrt-' + ARCH_NAME + '-kernelboot.img' + if MODE == "64": + filename = 'openwrt-' + ARCH_NAME + '_' + MODE + '-kernelboot.img' + partition = section.attrib['label'] + if filename == "": + continue + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + diff_files = "" # Clear for next iteration + + # Get machID + if partition != "0:CDT" and partition != "0:DDRCONFIG": + machid = None + else: + try: + if image_type == "all" or section.attrib['image_type'] == image_type: + ret = self.__gen_flash_script_cdt(entries, partition, flinfo, script) + if ret == 0: + return 0 + continue + except KeyError, e: + continue + + if partition == "0:BOOTLDR1": + if image_type == "all" or section.attrib['image_type'] == image_type: + ret = self.__gen_flash_script_bootldr(entries, partition, flinfo, script) + if ret == 0: + return 0 + continue + + if ARCH_NAME == "ipq806x": + # Get Layout + try: + layout = section[9].text + except: + layout = None + + if layout not in ("sbl", "linux", None): + error("invalid layout in '%s'" % section) + + if flinfo.type != "emmc": + img = section.find('img_name') + + if img != None and 'wififw_type' in img.attrib: + imgs = section.findall('img_name') + try: + for img in imgs: + filename = img.text + wifi_fw_type = img.get('wififw_type') + ret = self.__gen_flash_script_wififw(entries, partition, filename, wifi_fw_type, flinfo, script) + if ret == 0: + return 0 + wifi_fw_type = "" + continue + except KeyError, e: + continue + + if img != None and 'soc_version' in img.attrib: + imgs = section.findall('img_name') + try: + for img in imgs: + filename = img.text + soc_version = img.get('soc_version') + if 'optional' in img.attrib: + if not os.path.exists(os.path.join(self.images_dname, filename)): + file_exists = 0 + ret = self.__gen_flash_script_image(filename, soc_version, file_exists, machid, partition, flinfo, script) + if ret == 0: + return 0 + file_exists = 1 # generating flash script is mandatory by default + + soc_version = 0 # Clear soc_version for next iteration + continue + except KeyError, e: + continue + + imgs = section.findall('img_name') + for img in imgs: + memory_attr = img.get('memory') + if memory_attr != None and memory_attr == memory_size: + filename = img.text; + + atf_image = img.get('atf') + if atf_image != None and atf == "true": + filename = img.text; + + else: + if wifi_fw_type: + try: + for fw_type in range(1, int(wifi_fw_type)+1): + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename_img' + str(fw_type)] + partition = section.attrib['label'] + wifi_fw_type = "img" + str(fw_type) + ret = self.__gen_flash_script_wififw(entries, partition, filename, wifi_fw_type, flinfo, script) + if ret == 0: + return 0 + wifi_fw_type = "" + continue + except KeyError, e: + continue + + if diff_soc_ver_files: + try: + for version in range(1, int(diff_soc_ver_files)+1): + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename_v' + str(version)] + partition = section.attrib['label'] + if filename == "": + continue + if section.attrib['optional']: + if not os.path.exists(os.path.join(self.images_dname, filename)): + file_exists = 0 + ret = self.__gen_flash_script_image(filename, version, file_exists, machid, partition, flinfo, script) + if ret == 0: + return 0 + file_exists = 1 + diff_soc_ver_files = 0 # Clear diff_soc_ver_files for next iteration + continue + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + + if section != None and filename != "" and section.get('filename_mem' + memory_size) != None: + filename = section.get('filename_mem' + memory_size) + + if section != None and atf == "true" and section.get('filename_atf') != None: + filename = section.get('filename_atf') + + if filename != "": + ret = self.__gen_flash_script_image(filename, soc_version, file_exists, machid, partition, flinfo, script) + if ret == 0: + return 0 + + return 1 + + def __gen_script_cdt(self, images, flinfo, root, section_conf, partition): + global ARCH_NAME + + entries = root.findall(".//data[@type='MACH_ID_BOARD_MAP']/entry") + + for section in entries: + + board = section.find(".//board").text + if ARCH_NAME != "ipq806x": + try: + memory = section.find(".//memory").text + except AttributeError, e: + memory = "128M16" + + if memory_size != "default": + filename = "cdt-" + board + "_" + memory + "_LM" + memory_size + ".bin" + else: + filename = "cdt-" + board + "_" + memory + ".bin" + file_info = "ddr-" + board + "_" + memory + else: + filename = "cdt-" + board + ".bin" + file_info = "ddr-" + board + + part_info = self.__get_part_info(partition) + + if part_info == None and self.flinfo.type != 'norplusnand': + continue + + if self.flinfo.type == 'nand': + img_size = self.__get_img_size(filename) + size = roundup(img_size, flinfo.pagesize) + if ( size != img_size ): + filename = filename + ".padded" + if self.flinfo.type == 'emmc': + img_size = self.__get_img_size(filename) + size = roundup(img_size, flinfo.blocksize) + if ( size != img_size ): + filename = filename + ".padded" + image_info = ImageInfo(file_info + "-" + sha1(filename), + filename, "firmware") + if filename.lower() != "none": + if image_info not in images: + images.append(image_info) + + def __gen_script_bootldr(self, images, flinfo, root, section_conf, partition): + global ARCH_NAME + + entries = root.findall(".//data[@type='MACH_ID_BOARD_MAP']/entry") + + for section in entries: + + board = section.find(".//board").text + tiny_image = section.find('.//tiny_image') + + if tiny_image == None: + continue + + if ARCH_NAME != "ipq806x": + try: + memory = section.find(".//memory").text + except AttributeError, e: + memory = "128M16" + + if memory_size != "default": + filename = "bootldr1_" + board + "_" + memory + "_LM" + memory_size + ".mbn" + else: + filename = "bootldr1_" + board + "_" + memory + ".mbn" + file_info = "bootldr1_" + board + "_" + memory + else: + filename = "bootldr1_" + board + ".mbn" + file_info = "bootldr1_" + board + + part_info = self.__get_part_info(partition) + + if part_info == None and self.flinfo.type != 'norplusnand': + continue + + if self.flinfo.type == 'nand': + img_size = self.__get_img_size(filename) + size = roundup(img_size, flinfo.pagesize) + if ( size != img_size ): + filename = filename + ".padded" + if self.flinfo.type == 'emmc': + img_size = self.__get_img_size(filename) + size = roundup(img_size, flinfo.blocksize) + if ( size != img_size ): + filename = filename + ".padded" + image_info = ImageInfo(file_info + "-" + sha1(filename), + filename, "firmware") + if filename.lower() != "none": + if image_info not in images: + images.append(image_info) + + + def __gen_script_append_images(self, filename, soc_version, wifi_fw_type, images, flinfo, root, section_conf, partition): + + global QCN9000 + + part_info = self.__get_part_info(partition) + if part_info == None and self.flinfo.type != 'norplusnand': + return + + if self.flinfo.type == 'nand': + img_size = self.__get_img_size(filename) + size = roundup(img_size, flinfo.pagesize) + if ( size != img_size ): + filename = filename + ".padded" + if self.flinfo.type == 'emmc': + img_size = self.__get_img_size(filename) + size = roundup(img_size, flinfo.blocksize) + if ( size != img_size ): + filename = filename + ".padded" + if section_conf == "qsee": + section_conf = "tz" + elif section_conf == "appsbl": + if lk == "true": + section_conf = "lkboot" + else: + print " Using u-boot..." + section_conf = "u-boot" + elif section_conf == "rootfs" and self.flash_type in ["nand", "nand-4k", "nand-audio", "nand-audio-4k", "norplusnand", "norplusnand-4k"]: + section_conf = "ubi" + elif section_conf == "wififw" and self.flash_type in ["nand", "nand-4k", "nand-audio", "nand-audio-4k", "norplusnand", "norplusnand-4k"]: + section_conf = "wififw_ubi" + elif section_conf == "wififw" and wifi_fw_type: + section_conf = section_conf + "_" + wifi_fw_type + + if soc_version: + section_conf = section_conf + "_v" + str(soc_version) + + image_info = ImageInfo(section_conf + "-" + sha1(filename), + filename, "firmware") + if filename.lower() != "none": + if image_info not in images: + images.append(image_info) + + def __gen_script(self, script_fp, script, images, flinfo, root): + """Generate the script to flash the multi-image blob. + + script_fp -- file object, to write script to + info_fp -- file object, to read flashing information from + script -- Script object, to append the commands to + images -- list of ImageInfo, appended to, based on images in config + """ + global MODE + global SRC_DIR + global QCN9000 + + soc_version = 0 + diff_soc_ver_files = 0 + wifi_fw_type = "" + diff_files = "" + file_exists = 1 + + ret = self.__gen_flash_script(script, flinfo, root, True) + if ret == 0: + return 0 #Stop packing this single-image + + if QCN9000: + script.end_if() #end if started for hk+pine + + if (self.flash_type == "norplusemmc" and flinfo.type == "emmc") or (self.flash_type != "norplusemmc"): + if flinfo.type == "emmc": + script.start_activity("Flashing rootfs_data:") + part_info = self.partitions["rootfs_data"] + script.erase(part_info.offset, part_info.length) + script.finish_activity() + script.end() + + if self.flash_type == "norplusemmc" and flinfo.type == "emmc": + srcDir_part = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + flinfo.type + "-partition.xml" + else: + srcDir_part = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + self.flash_type.lower() + "-partition.xml" + + root_part = ET.parse(srcDir_part) + if self.flash_type != "emmc" and flinfo.type != "emmc": + parts = root_part.findall(".//partitions/partition") + elif self.flash_type != "emmc" and flinfo.type == "emmc": + parts = root_part.findall(".//physical_partition[@ref='norplusemmc']/partition") + else: + parts = root_part.findall(".//physical_partition[@ref='emmc']/partition") + if flinfo.type == "emmc" and image_type == "all": + parts_length = len(parts) + 2 + else: + parts_length = len(parts) + + first = False + section = None + part_index = 0 + + if flinfo.type == "emmc" and image_type == "all": + first = True + + for index in range(parts_length): + + filename = "" + partition = "" + if first: + if self.flash_type == "norplusemmc": + part_info = root.find(".//data[@type='NORPLUSEMMC_PARAMETER']") + else: + part_info = root.find(".//data[@type='EMMC_PARAMETER']") + part_fname = part_info.find(".//partition_mbn") + filename = part_fname.text + partition = "0:GPT" + first = False + + elif index == (parts_length - 1) and flinfo.type == "emmc" and image_type == "all": + if self.flash_type == "norplusemmc": + part_info = root.find(".//data[@type='NORPLUSEMMC_PARAMETER']") + else: + part_info = root.find(".//data[@type='EMMC_PARAMETER']") + part_fname = part_info.find(".//partition_mbn_backup") + filename = part_fname.text + partition = "0:GPTBACKUP" + + else: + section = parts[part_index] + part_index += 1 + if flinfo.type != "emmc": + try: + if image_type == "all" or section[8].attrib['image_type'] == image_type: + filename = section[8].text + try: + if section[8].attrib['mode'] != MODE: + filename = section[9].text + except AttributeError, e: + pass + except KeyError, e: + pass + except IndexError, e: + if index == (parts_length - 1): + return + else: + continue + except KeyError, e: + continue + partition = section[0].text + else: + + try: + diff_files = section.attrib['diff_files'] + except KeyError, e: + try: + diff_soc_ver_files = section.attrib['diff_soc_ver_files'] + partition = section.attrib['label'] + except KeyError, e: + try: + wifi_fw_type = section.attrib['wififw_type'] + partition = section.attrib['label'] + except KeyError, e: + try: + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename'] + if lk == "true" and "u-boot" in filename: + filename = filename.replace("u-boot", "lkboot") + partition = section.attrib['label'] + if filename == "": + continue + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + + if diff_files == "true": + try: + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename_' + MODE] + if lk == "true" and "uImage" in filename: + if MODE == "32": + filename = 'openwrt-' + ARCH_NAME + '-kernelboot.img' + if MODE == "64": + filename = 'openwrt-' + ARCH_NAME + '_' + MODE + '-kernelboot.img' + partition = section.attrib['label'] + if filename == "": + continue + + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + diff_files = "" # Clear for next iteration + + + part_info = self.__get_part_info(partition) + + section_label = partition.split(":") + if len(section_label) != 1: + section_conf = section_label[1] + else: + section_conf = section_label[0] + + section_conf = section_conf.lower() + + if section_conf == "cdt" or section_conf == "ddrconfig": + try: + if image_type == "all" or section[8].attrib['image_type'] == image_type: + self.__gen_script_cdt(images, flinfo, root, section_conf, partition) + continue + except KeyError, e: + continue + + if section_conf == "bootldr1": + try: + if image_type == "all" or section[8].attrib['image_type'] == image_type: + self.__gen_script_bootldr(images, flinfo, root, section_conf, partition) + continue + except KeyError, e: + continue + + if flinfo.type != "emmc": + + img = section.find('img_name') + + if img != None and 'wififw_type' in img.attrib: + imgs = section.findall('img_name') + try: + for img in imgs: + wifi_fw_type = img.get('wififw_type') + filename = img.text + self.__gen_script_append_images(filename, soc_version, wifi_fw_type, images, flinfo, root, section_conf, partition) + wififw_type = "" + continue + except KeyError, e: + continue + + if img != None and 'soc_version' in img.attrib: + + imgs = section.findall('img_name') + try: + for img in imgs: + soc_version = img.get('soc_version') + filename = img.text + if QCN9000 and section_conf == "wififw": + filename_qcn9000 = filename.replace("wifi_fw_ubi", "wifi_fw_ipq8074_qcn9000_ubi") + if os.path.exists(os.path.join(self.images_dname, filename_qcn9000)): + section_conf_qcn9000 = section_conf + "_ubi_qcn9000" + self.__gen_script_append_images(filename_qcn9000, soc_version, wifi_fw_type, images, flinfo, root, section_conf_qcn9000, partition) + if 'optional' in img.attrib: + if not os.path.exists(os.path.join(self.images_dname, filename)): + file_exists = 0 + + if file_exists == 1: + self.__gen_script_append_images(filename, soc_version, wifi_fw_type, images, flinfo, root, section_conf, partition) + file_exists = 1 + soc_version = 0 # Clear soc_version for next iteration + continue + except KeyError, e: + continue + + imgs = section.findall('img_name') + for img in imgs: + memory_attr = img.get('memory') + if memory_attr != None and memory_attr == memory_size: + filename = img.text; + + atf_image = img.get('atf') + if atf_image != None and atf == "true": + filename = img.text; + + # system-partition specific for HK+PINE + if section_conf == "mibib" and QCN9000: + img = section.find('img_name') + filename_qcn9000 = img.text[:-4] + "-qcn9000.bin" + section_conf_qcn9000 = section_conf + "_qcn9000" + self.__gen_script_append_images(filename_qcn9000, soc_version, wifi_fw_type, images, flinfo, root, section_conf_qcn9000, partition) + + else: + + if wifi_fw_type: + try: + for fw_type in range(1, int(wifi_fw_type)+1): + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename_img' + str(fw_type)] + partition = section.attrib['label'] + wifi_fw_type = "img" + str(fw_type) + self.__gen_script_append_images(filename, soc_version, wifi_fw_type, images, flinfo, root, section_conf, partition) + wifi_fw_type = "" + continue + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + + if diff_soc_ver_files: + try: + for version in range(1, int(diff_soc_ver_files)+1): + if image_type == "all" or section.attrib['image_type'] == image_type: + filename = section.attrib['filename_v' + str(version)] + partition = section.attrib['label'] + if filename == "": + continue + if section.attrib['optional']: + if not os.path.exists(os.path.join(self.images_dname, filename)): + file_exists = 0 + + if file_exists == 1: + self.__gen_script_append_images(filename, version, wifi_fw_type, images, flinfo, root, section_conf, partition) + file_exists = 1 + + diff_soc_ver_files = 0 # Clear diff_soc_ver_files for next iteration + continue + except KeyError, e: + print "Skipping partition '%s'" % section.attrib['label'] + pass + + if section != None and filename != "" and section.get('filename_mem' + memory_size) != None: + filename = section.get('filename_mem' + memory_size) + + if section != None and atf == "true" and section.get('filename_atf') != None: + filename = section.get('filename_atf') + + if filename != "": + self.__gen_script_append_images(filename, soc_version, wifi_fw_type, images, flinfo, root, section_conf, partition) + return 1 + + def __mkimage(self, images): + """Create the multi-image blob. + + images -- list of ImageInfo, containing images to be part of the blob + """ + try: + its_fp = open(self.its_fname, "wb") + except IOError, e: + error("error opening its file '%s'" % self.its_fname, e) + + desc = "Flashing %s %x %x" + desc = desc % (self.flinfo.type, self.flinfo.pagesize, + self.flinfo.blocksize) + + image_data = [] + for (section, fname, imtype) in images: + fname = fname.replace("\\", "\\\\") + subs = dict(name=section, desc=fname, fname=fname, imtype=imtype) + image_data.append(its_image_tmpl.substitute(subs)) + + image_data = "".join(image_data) + its_data = its_tmpl.substitute(desc=desc, images=image_data) + + its_fp.write(its_data) + its_fp.close() + + try: + cmd = [SRC_DIR + "/mkimage", "-f", self.its_fname, self.img_fname] + ret = subprocess.call(cmd) + if ret != 0: + print ret + error("failed to create u-boot image from script") + except OSError, e: + error("error executing mkimage", e) + + def __create_fnames(self): + """Populate the filenames.""" + + self.scr_fname = os.path.join(self.images_dname, "flash.scr") + self.its_fname = os.path.join(self.images_dname, "flash.its") + + def __gen_board_script(self, flinfo, part_fname, images, root): + global SRC_DIR + global ARCH_NAME + global QCN9000 + global IF_QCN9000 + + """Generate the flashing script for one board. + + board_section -- string, board section in board config file + machid -- string, board machine ID in hex format + flinfo -- FlashInfo object, contains board specific flash params + part_fname -- string, partition file specific to the board + fconf_fname -- string, flash config file specific to the board + images -- list of ImageInfo, append images used by the board here + """ + IF_QCN9000 = False + script_fp = open(self.scr_fname, "a") + self.flinfo = flinfo + + if flinfo.type != "emmc": + if root.find(".//data[@type='NAND_PARAMETER']/entry") != None: + if self.flash_type == "nand-4k" or self.flash_type == "norplusnand-4k": + flash_param = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='4k']") + elif self.flash_type == "nand-audio": + flash_param = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='audio-2k']") + elif self.flash_type == "nand-audio-4k": + flash_param = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='audio-4k']") + else: + flash_param = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='2k']") + else: + flash_param = root.find(".//data[@type='NAND_PARAMETER']") + + pagesize = int(flash_param.find(".//page_size").text) + pages_per_block = int(flash_param.find(".//pages_per_block").text) + blocksize = pages_per_block * pagesize + blocks_per_chip = int(flash_param.find(".//total_block").text) + chipsize = blocks_per_chip * blocksize + + srcDir_part = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + flinfo.type + "-partition.xml" + root_part = ET.parse(srcDir_part) + + if flinfo.type == "nand": + script = Flash_Script(flinfo, self.ipq_nand) + elif flinfo.type == "nor": + script = Flash_Script(flinfo, pagesize) + + script.probe() + # system-partition specific for HK+PINE + if QCN9000: + IF_QCN9000 = True + part_fname_qcn9000 = part_fname[:-4] + "-qcn9000.bin" + mibib_qcn9000 = MIBIB(part_fname_qcn9000, flinfo.pagesize, flinfo.blocksize, + flinfo.chipsize, blocksize, chipsize, root_part) + self.partitions = mibib_qcn9000.get_parts() + + script.append('if test "$machid" = "801000e" || test "$machid" = "801010e" || test "$machid" = "8010012" || test "$machid" = "8010013" || test "$machid" = "8010500"; then\n', fatal=False) + ret = self.__gen_flash_script(script, flinfo, root, True) + if ret == 0: + return 0 #Issue in packing hk+pine single-image + + script.append('else', fatal=False) + self.partitions = {} + IF_QCN9000 = False + + mibib = MIBIB(part_fname, flinfo.pagesize, flinfo.blocksize, + flinfo.chipsize, blocksize, chipsize, root_part) + self.partitions = mibib.get_parts() + + else: + gpt = GPT(part_fname, flinfo.pagesize, flinfo.blocksize, flinfo.chipsize) + self.partitions = gpt.get_parts() + script = Flash_Script(flinfo) + + ret = self.__gen_script(script_fp, script, images, flinfo, root) + if ret == 0: + return 0 + + if QCN9000: + QCN9000 = False + + try: + script_fp.write(script.dumps()) + except IOError, e: + error("error writing to script '%s'" % script_fp.name, e) + + script_fp.close() + return 1 + + def __process_board_flash_emmc(self, ftype, images, root): + """Extract board info from config and generate the flash script. + + ftype -- string, flash type 'emmc' + board_section -- string, board section in config file + machid -- string, board machine ID in hex format + images -- list of ImageInfo, append images used by the board here + """ + + try: + part_info = root.find(".//data[@type='" + self.flash_type.upper() + "_PARAMETER']") + part_fname = part_info.find(".//partition_mbn") + part_fname = part_fname.text + part_fname = os.path.join(self.images_dname, part_fname) + if ftype == "norplusemmc": + part_info = root.find(".//data[@type='NORPLUSEMMC_PARAMETER']") + pagesize = int(part_info.find(".//page_size_flash").text) + part_info = root.find(".//data[@type='EMMC_PARAMETER']") + else: + pagesize = self.emmc_page_size + blocksize = self.emmc_block_size + chipsize = int(part_info.find(".//total_block").text) + if ftype.lower() == "norplusemmc": + ftype = "emmc" + + except ValueError, e: + error("invalid flash info in section '%s'" % board_section.find('machid').text, e) + + flinfo = FlashInfo(ftype, pagesize, blocksize, chipsize) + + ret = self.__gen_board_script(flinfo, part_fname, images, root) + if ret == 0: + return 0 + + return 1 + + def __process_board_flash(self, ftype, images, root): + global SRC_DIR + global ARCH_NAME + global MODE + global QCN9000 + + try: + if ftype == "tiny-nor" or ftype == "tiny-nor-debug": + part_info = root.find(".//data[@type='" + "NOR_PARAMETER']") + elif ftype in ["nand", "nand-4k", "nand-audio", "nand-audio-4k"]: + if root.find(".//data[@type='NAND_PARAMETER']/entry") != None: + if ftype == "nand": + part_info = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='2k']") + elif ftype == "nand-audio": + part_info = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='audio-2k']") + elif ftype == "nand-audio-4k": + part_info = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='audio-4k']") + else: + part_info = root.find(".//data[@type='NAND_PARAMETER']/entry[@type='4k']") + else: + part_info = root.find(".//data[@type='" + "NAND_PARAMETER']") + elif ftype == "norplusnand-4k": + part_info = root.find(".//data[@type='" + "NORPLUSNAND_PARAMETER']") + else: + part_info = root.find(".//data[@type='" + ftype.upper() + "_PARAMETER']") + + if ARCH_NAME in ["ipq6018", "ipq5018", "ipq807x"]: + MODE_APPEND = "_64" if MODE == "64" else "" + + if ftype in ["nand-audio", "nand-audio-4k"]: + UBINIZE_CFG_NAME = ARCH_NAME + "-ubinize" + MODE_APPEND + "-audio.cfg" + else: + UBINIZE_CFG_NAME = ARCH_NAME + "-ubinize" + MODE_APPEND + ".cfg" + + f1 = open(SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + UBINIZE_CFG_NAME, 'r') + UBINIZE_CFG_NAME = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/tmp-" + UBINIZE_CFG_NAME + f2 = open(UBINIZE_CFG_NAME, 'w') + for line in f1: + f2.write(line.replace('image=', "image=" + SRC_DIR + "/")) + f1.close() + f2.close() + + part_file = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + ftype + "-partition.xml" + parts = ET.parse(part_file).findall('.//partitions/partition') + for index in range(len(parts)): + section = parts[index] + if section[0].text == "rootfs": + rootfs_pos = 9 if MODE == "64" else 8 + UBI_IMG_NAME = section[rootfs_pos].text + + if ftype in ["nand-4k", "nand-audio-4k", "norplusnand-4k"]: + cmd = '%s -m 4096 -p 256KiB -o root.ubi %s' % ((SRC_DIR + "/ubinize") ,UBINIZE_CFG_NAME) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("ubinization got failed") + cmd = 'dd if=root.ubi of=%s bs=4k conv=sync' % (SRC_DIR + "/" + UBI_IMG_NAME) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("ubi image copy operation failed") + + elif ftype in ["nand", "nand-audio", "norplusnand"]: + cmd = '%s -m 2048 -p 128KiB -o root.ubi %s' % ((SRC_DIR + "/ubinize") ,UBINIZE_CFG_NAME) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("ubinization got failed") + cmd = 'dd if=root.ubi of=%s bs=2k conv=sync' % (SRC_DIR + "/" + UBI_IMG_NAME) + ret = subprocess.call(cmd, shell=True) + if ret != 0: + error("ubi image copy operation failed") + + part_file = SRC_DIR + "/" + ARCH_NAME + "/flash_partition/" + ftype + "-partition.xml" + part_xml = ET.parse(part_file) + partition = part_xml.find(".//partitions/partition[2]") + part_fname = partition[8].text + part_fname = os.path.join(self.images_dname, part_fname) + pagesize = int(part_info.find(".//page_size").text) + pages_per_block = int(part_info.find(".//pages_per_block").text) + blocks_per_chip = int(part_info.find(".//total_block").text) + + if ARCH_NAME == "ipq807x" and (ftype == "norplusnand" or ftype == "nand"): + QCN9000 = True + + if ftype in ["tiny-nor", "norplusnand", "norplusnand-4k", "norplusemmc", "tiny-nor-debug"]: + ftype = "nor" + if ftype in ["nand-4k", "nand-audio", "nand-audio-4k"]: + ftype = "nand" + + except ValueError, e: + error("invalid flash info in section '%s'" % board_section.find('machid').text, e) + + blocksize = pages_per_block * pagesize + chipsize = blocks_per_chip * blocksize + + flinfo = FlashInfo(ftype, pagesize, blocksize, chipsize) + + ret = self.__gen_board_script(flinfo, part_fname, images, root) + return ret + + def __process_board(self, images, root): + + global QCN9000 + + QCN9000 = False + try: + if self.flash_type in [ "nand", "nand-4k", "nand-audio", "nand-audio-4k", "nor", "tiny-nor", "norplusnand", "norplusnand-4k", "tiny-nor-debug" ]: + ret = self.__process_board_flash(self.flash_type, images, root) + elif self.flash_type == "emmc": + ret = self.__process_board_flash_emmc(self.flash_type, images, root) + elif self.flash_type == "norplusemmc": + ret = self.__process_board_flash("norplusemmc", images, root) + if ret: + ret = self.__process_board_flash_emmc("norplusemmc", images, root) + return ret + except ValueError, e: + error("error getting board info in section '%s'" % board_section.find('machid').text, e) + + def main_bconf(self, flash_type, images_dname, out_fname, root): + """Start the packing process, using board config. + + flash_type -- string, indicates flash type, 'nand' or 'nor' or 'tiny-nor' or 'emmc' or 'norplusnand' + images_dname -- string, name of images directory + out_fname -- string, output file path + """ + self.flash_type = flash_type + self.images_dname = images_dname + self.img_fname = out_fname + + self.__create_fnames() + try: + os.unlink(self.scr_fname) + except OSError, e: + pass + + images = [] + ret = self.__process_board(images, root) + if ret != 0: + images.insert(0, ImageInfo("script", "flash.scr", "script")) + self.__mkimage(images) + else: + fail_img = out_fname.split("/") + error("Failed to pack %s" % fail_img[-1]) + +class UsageError(Exception): + """Indicates error in command arguments.""" + pass + +class ArgParser(object): + """Class to parse command-line arguments.""" + + DEFAULT_TYPE = "nor,tiny-nor,nand,norplusnand,emmc,norplusemmc" + + def __init__(self): + self.flash_type = None + self.images_dname = None + self.out_dname = None + self.scr_fname = None + self.its_fname = None + + def parse(self, argv): + global MODE + global SRC_DIR + global ARCH_NAME + global image_type + global memory_size + global lk + global atf + global skip_4k_nand + + """Start the parsing process, and populate members with parsed value. + + argv -- list of string, the command line arguments + """ + + cdir = os.path.abspath(os.path.dirname("")) + if len(sys.argv) > 1: + try: + opts, args = getopt(sys.argv[1:], "", ["arch=", "fltype=", "srcPath=", "inImage=", "outImage=", "image_type=", "memory=", "lk", "skip_4k_nand", "atf"]) + except GetoptError, e: + raise UsageError(e.msg) + + for option, value in opts: + if option == "--arch": + ARCH_NAME = value + + elif option == "--fltype": + self.flash_type = value + + elif option == "--srcPath": + SRC_DIR = os.path.abspath(value) + + elif option == "--inImage": + self.images_dname = os.path.join(cdir, value) + + elif option == "--outImage": + self.out_dname = os.path.join(cdir, value) + + elif option == "--image_type": + image_type = value + + elif option == "--memory": + memory_size = value + + elif option =="--lk": + lk = "true" + + elif option =="--atf": + atf = "true" + + elif option =="--skip_4k_nand": + skip_4k_nand = "true" + + +#Verify Arguments passed by user + +# Verify arch type + if ARCH_NAME not in ["ipq40xx", "ipq806x", "ipq807x", "ipq807x_64", "ipq6018", "ipq6018_64", "ipq5018", "ipq5018_64"]: + raise UsageError("Invalid arch type '%s'" % arch) + + if ARCH_NAME == "ipq807x" or ARCH_NAME == "ipq5018": + MODE = "32" + elif ARCH_NAME == "ipq807x_64" or ARCH_NAME == "ipq5018_64": + MODE = "64" + ARCH_NAME = ARCH_NAME[:-3] + + if ARCH_NAME == "ipq6018": + MODE = "32" + elif ARCH_NAME == "ipq6018_64": + MODE = "64" + ARCH_NAME = "ipq6018" + +# Set flash type to default type (nand) if not given by user + if self.flash_type == None: + self.flash_type = ArgParser.DEFAULT_TYPE + for flash_type in self.flash_type.split(","): + if flash_type not in [ "nand", "nor", "tiny-nor", "emmc", "norplusnand", "norplusemmc", "tiny-nor-debug" ]: + raise UsageError("invalid flash type '%s'" % flash_type) + +# Verify src Path + if SRC_DIR == "": + raise UsageError("Source Path is not provided") + +#Verify input image path + if self.images_dname == None: + raise UsageError("input images' Path is not provided") + +#Verify Output image path + if self.out_dname == None: + raise UsageError("Output Path is not provided") + + def usage(self, msg): + """Print error message and command usage information. + + msg -- string, the error message + """ + print "pack: %s" % msg + print + print "Usage:" + print "python pack_hk.py [options] [Value] ..." + print + print "options:" + print " --arch \tARCH_TYPE [ipq40xx/ipq806x/ipq807x/ipq807x_64/ipq6018/ipq6018_64/ipq5018/ipq5018_64]" + print + print " --fltype \tFlash Type [nor/tiny-nor/nand/emmc/norplusnand/norplusemmc/tiny-nor-debug]" + print " \t\tMultiple flashtypes can be passed by a comma separated string" + print " \t\tDefault is all. i.e If \"--fltype\" is not passed image for all the flash-type will be created.\n" + print " --srcPath \tPath to the directory containg the meta scripts and configs" + print + print " --inImage \tPath to the direcory containg binaries and images needed for singleimage" + print + print " --outImage \tPath to the directory where single image will be generated" + print + print " --memory \tMemory size for low memory profile" + print " \t\tIf it is not specified CDTs with default memory size are taken for single-image packing.\n" + print " \t\tIf specified, CDTs created with specified memory size will be used for single-image.\n" + print + print " --lk \t\tReplace u-boot with lkboot for appsbl" + print " --atf \t\tReplace tz with atf for QSEE partition" + print " --skip_4k_nand \tskip generating 4k nand images" + print " \t\tThis Argument does not take any value" + print "Pack Version: %s" % version + +def gen_kernelboot_img(parser): + """Generate kernelboot.img needed by LK bootloader""" + + SKALES_DIR = parser.images_dname + TMP_DIR = parser.images_dname + "/tmp_dir" + + try: + + if os.path.exists(TMP_DIR): + rmtree(TMP_DIR) + os.makedirs(TMP_DIR) + + if ARCH_NAME == "ipq807x": + BOARD_NAME = ARCH_NAME + "-hk01" + elif ARCH_NAME == "ipq6018": + BOARD_NAME = ARCH_NAME + "-cp02-c1" + else: + error("Error: Arch not supported") + + if MODE == "64": + KERNEL_IMG_NAME = "openwrt-" + ARCH_NAME + "_" + MODE + "-kernelboot.img" + BASE_ADDR = "0x41078000" + else: + KERNEL_IMG_NAME = "openwrt-" + ARCH_NAME + "-kernelboot.img" + if ARCH_NAME == "ipq807x": + BASE_ADDR = "0x41200000" + elif ARCH_NAME == "ipq6018": + BASE_ADDR = "0x41000000" + + src = parser.images_dname + "/qcom-" + BOARD_NAME + ".dtb" + + #alternate name(alt_src) for linux-5.4 dtbs + alt_src = parser.images_dname + "/" + BOARD_NAME + ".dtb" + if ARCH_NAME == "ipq807x": + alt_src = parser.images_dname + "/ipq8074-hk01.dtb" + + if not os.path.exists(src): + if os.path.exists(alt_src): + src = alt_src + else: + error("%s file not found" % src) + copy(src, TMP_DIR) + + src = parser.images_dname + "/Image" + if not os.path.exists(src): + error("%s file not found" % src) + copy(src, TMP_DIR) + + cmd = [SKALES_DIR + "/dtbTool -o " + TMP_DIR + "/qcom-" + BOARD_NAME + "-dt.img " + TMP_DIR] + ret = subprocess.call(cmd, shell=True) + if ret != 0: + print ret + error("Error executing dtbTools") + + cmd = ["gzip -9 " + TMP_DIR + "/Image"] + ret = subprocess.call(cmd, shell=True) + if ret != 0: + print ret + error("Error executing gzip") + + cmd = [SKALES_DIR + "/mkbootimg", + "--kernel=" + TMP_DIR + "/Image.gz", + "--dt=" + TMP_DIR + "/qcom-" + BOARD_NAME + "-dt.img", + "--cmdline=\'rootfsname=rootfs rootwait\'", + "--output=" + parser.images_dname + "/" + KERNEL_IMG_NAME, + "--base=" + BASE_ADDR] + ret = subprocess.call(cmd) + if ret != 0: + print ret + error("Error executing mkbootimg") + + rmtree(TMP_DIR) + except OSError, e: + error("error generating kernelboot.img", e) + +def main(): + """Main script entry point. + + Created to avoid polluting the global namespace. + """ + try: + parser = ArgParser() + parser.parse(sys.argv) + except UsageError, e: + parser.usage(e.args[0]) + sys.exit(1) + + pack = Pack() + + if not os.path.exists(parser.out_dname): + os.makedirs(parser.out_dname) + + config = SRC_DIR + "/" + ARCH_NAME + "/config.xml" + root = ET.parse(config) + + if skip_4k_nand != "true": + # Add nand-4k flash type, if nand flash type is specified + if "nand" in parser.flash_type.split(","): + if root.find(".//data[@type='NAND_PARAMETER']/entry") != None: + parser.flash_type = parser.flash_type + ",nand-4k" + + # Add norplusnand-4k flash type, if norplusnand flash type is specified + if "norplusnand" in parser.flash_type.split(","): + if root.find(".//data[@type='NAND_PARAMETER']/entry") != None: + parser.flash_type = parser.flash_type + ",norplusnand-4k" + +# Format the output image name from Arch, flash type and mode + for flash_type in parser.flash_type.split(","): + if image_type == "hlos": + if MODE == "64": + parser.out_fname = flash_type + "-" + ARCH_NAME + "_" + MODE + "-apps.img" + else: + parser.out_fname = flash_type + "-" + ARCH_NAME + "-apps.img" + else: + if flash_type == "emmc" and lk == "true": + suffix = "-single-lkboot.img" + gen_kernelboot_img(parser) + + else: + suffix = "-single.img" + + if MODE == "64": + parser.out_fname = flash_type + "-" + ARCH_NAME + "_" + MODE + suffix + else: + parser.out_fname = flash_type + "-" + ARCH_NAME + suffix + + parser.out_fname = os.path.join(parser.out_dname, parser.out_fname) + + pack.main_bconf(flash_type, parser.images_dname, + parser.out_fname, root) + +if __name__ == "__main__": + main() diff --git a/meta-tools/prepareSingleImage.py b/meta-tools/prepareSingleImage.py new file mode 100644 index 0000000..62c8d50 --- /dev/null +++ b/meta-tools/prepareSingleImage.py @@ -0,0 +1,368 @@ +# =========================================================================== +#Copyright (c) 2017, 2019 Qualcomm Technologies, Inc. +#All Rights Reserved. +#Confidential and Proprietary - Qualcomm Technologies, Inc. +# =========================================================================== + +import xml.etree.ElementTree as ET +import itertools +import os +import subprocess +import sys +from getopt import getopt +from getopt import GetoptError + +arch="" +flash="nor,tiny-nor,nand,norplusnand,emmc,norplusemmc" +bootImgDir="" +rpmImgDir="" +tzImgDir="" +nhssImgDir="" +wififwImgDir="" + +cdir = os.path.dirname(__file__) +cdir = os.path.abspath(cdir) +inDir = "" +mode = "" +mbn_v6 = "" + +def print_help(): + print "\nUsage: python prepareSingleImage.py