- Add ipq5210 entry to the 'boards' table - Add an argument to specify the SPL load address - ipq5210's boot rom expects the SPL image size to be 4-byte aligned. To support this add an argument to specify the image size alignment to enable the mkmbn script to pad the image accordingly.
Signed-off-by: Varadarajan Narayanan <[email protected]> --- board/qualcomm/config.mk | 2 +- tools/qcom/mkmbn/mkmbn.py | 34 ++++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/board/qualcomm/config.mk b/board/qualcomm/config.mk index 769e4a51ca0..dd61ffd98e8 100644 --- a/board/qualcomm/config.mk +++ b/board/qualcomm/config.mk @@ -8,7 +8,7 @@ # Create Qualcomm signed elf images CMD_MKMBN = $(srctree)/tools/qcom/mkmbn/mkmbn.py quiet_cmd_mkmbn = MBN $@ - cmd_mkmbn = $(CMD_MKMBN) $< + cmd_mkmbn = $(CMD_MKMBN) -l $(CONFIG_TEXT_BASE) $< u-boot.mbn: u-boot.bin FORCE $(call if_changed,mkmbn) diff --git a/tools/qcom/mkmbn/mkmbn.py b/tools/qcom/mkmbn/mkmbn.py index 8d2078acc30..6fe66fc4e55 100755 --- a/tools/qcom/mkmbn/mkmbn.py +++ b/tools/qcom/mkmbn/mkmbn.py @@ -18,6 +18,8 @@ import sys from enum import Enum import struct +MBN_ALIGN_SIZE = 4096 + verbose = False def log(*args, **kwargs): @@ -63,19 +65,17 @@ class MbnData: """ -This dictionary is used to map a board or platform to the appropriate load address and -other MBN metadata. When adding support for a new platform to U-Boot, the appropriate -data should be filled out here. The load address can typically be determined by looking -at the uefi.elf or xbl.elf for the platform. For the uefi.elf it is the load address, and -for xbl.elf it is typically the RWX section in the middle, just BEFORE the section loaded -at 0x1495xxxx or similar. Looking at similar platforms in the table below may help. +This dictionary is used to map a board or platform to the appropriate MBN +metadata. When adding support for a new platform to U-Boot, the appropriate data +should be filled out here. Looking at similar platforms in the table below may +help. """ boards: dict[bytes, MbnData] = { # Exact matches for boards, these are preferred - b"qcom,qcs6490-rb3gen2\0": MbnData(0x9FC00000, 6, SwId.uefi), - b"qcom,qcs9100-ride-r3\0": MbnData(0xAF000000, 6, SwId.uefi), # Dragonwing IQ9 - b"qcom,qcs8300-ride\0": MbnData(0xAF000000, 6, SwId.uefi), # Dragonwing IQ8 - b"qcom,qcs615-ride\0": MbnData(0x9FC00000, 6, SwId.uefi), # Dragonwing IQ6 + b"qcom,qcs6490-rb3gen2\0": MbnData(6, SwId.uefi), + b"qcom,qcs9100-ride-r3\0": MbnData(6, SwId.uefi), # Dragonwing IQ9 + b"qcom,qcs8300-ride\0": MbnData(6, SwId.uefi), # Dragonwing IQ8 + b"qcom,qcs615-ride\0": MbnData(6, SwId.uefi), # Dragonwing IQ6 # Fallback/generic matches since most boards for a platform will # use the same load address b"qcom,qcm6490\0": MbnData(0x9FC00000, 6, SwId.uefi), # rb3gen2, rubikpi3 @@ -85,6 +85,7 @@ boards: dict[bytes, MbnData] = { b"qcom,sm8550\0": MbnData(0xA7000000, 7, SwId.uefi), # C8550 b"qcom,sm8650\0": MbnData(0xA7000000, 7, SwId.uefi), # SM8650 b"qcom,qcs615\0": MbnData(0x9FC00000, 6, SwId.uefi), # Dragonwing IQ6 + b"qcom,ipq5210\0": MbnData(0x87980000, 7, SwId.aboot), b"qcom,ipq5424\0": MbnData(0x8a380000, 7, SwId.aboot), b"qcom,ipq9574\0": MbnData(0x4A240000, 6, SwId.aboot), @@ -100,6 +101,9 @@ parser = argparse.ArgumentParser( """ ) parser.register("type", "hex", lambda s: int(s, 16)) +parser.add_argument( + "-l", "--load", type=lambda x: int(x, 0), default=0, help="Load address" +) parser.add_argument( "-o", "--output", type=Path, default="u-boot.mbn", help="Output file" ) @@ -149,8 +153,18 @@ if not mbn: args.output.unlink(missing_ok=True) exit(1) +if args.load == 0: + error( + "Cannot proceed without load address.\n" + "Ensure CONFIG_TEXT_BASE/CONFIG_SPL_TEXT_BASE is set\n") + exit(1) +else: + mbn.loadaddr = args.load + log(f"Detected board {match.decode('UTF-8')} with load address {mbn.loadaddr:#x}") +data += b'\x00' * (-len(data) % MBN_ALIGN_SIZE) + elf.phdrs.append(Phdr.from_bin(data, mbn.loadaddr)) elf.ehdr.e_entry = mbn.loadaddr elf.update() -- 2.34.1
