Hi Varadarajan,
On 9/10/2026 3:59 PM, Varadarajan Narayanan wrote:
- 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
Can't we remove the load address from MbnData for non-IQ targets also?
Pls tell if i miss anything.
Regards,
Balaji
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()