This series adds dynamic device tree selection from FIT images for
Qualcomm Snapdragon platforms, enabling U-Boot to select the
appropriate DTB based on hardware parameters detected from SMEM.

Qualcomm fit based DTB format is documented in [1]
The fit image contains only DTB, while the kernel will be part of UKI image.

The implementation consists of three parts:

1. SMEM cache infrastructure: Provides cached access to commonly
   used SMEM data (socinfo, RAM partitions) to avoid redundant
   lookups during boot. Includes socinfo header from Linux kernel
   for SoC identification.

2. FIT multi-DTB selection: Implements the core selection logic
   that reads hardware parameters from SMEM, parses metadata DTB,
   matches FIT configurations, and loads the selected DTB with
   overlays. Integrates with EFI boot flow by setting fdt_addr.

3. Platform configuration: Enables the feature by default and
   configures platform-specific IMEM sizes needed for storage
   type detection (QCM6490/QCS615: 0x2B000, QCS9100: 0x59000).

[1] 
https://github.com/qualcomm-linux/qcom-dtb-metadata/blob/main/Documentation.md

---
Changes in v2:
- In v1, a combined DTB format was used for multi-DTB support. Based on
  feedback, v2 implements FIT-based DTB selection instead.
- Link to v1: 
https://lore.kernel.org/all/[email protected]/

Aswin Murugan (3):
  mach-snapdragon: Add generic SMEM cache infrastructure
  mach-snapdragon: Add FIT multi-DTB selection support
  configs: snapdragon: Enable FIT multi-DTB and configure IMEM

 arch/arm/mach-snapdragon/Kconfig             |   18 +
 arch/arm/mach-snapdragon/Makefile            |    1 +
 arch/arm/mach-snapdragon/board.c             |  112 ++
 arch/arm/mach-snapdragon/qcom-priv.h         |   10 +
 arch/arm/mach-snapdragon/qcom_fit_multidtb.c | 1237 ++++++++++++++++++
 arch/arm/mach-snapdragon/qcom_fit_multidtb.h |  170 +++
 arch/arm/mach-snapdragon/rampart.h           |  236 ++++
 configs/qcm6490_defconfig                    |    2 +
 configs/qcom_defconfig                       |    2 +
 configs/qcom_qcs615_defconfig                |    2 +
 configs/qcom_qcs9100_defconfig               |    1 +
 include/soc/qcom/socinfo.h                   |  114 ++
 12 files changed, 1905 insertions(+)
 create mode 100644 arch/arm/mach-snapdragon/qcom_fit_multidtb.c
 create mode 100644 arch/arm/mach-snapdragon/qcom_fit_multidtb.h
 create mode 100644 arch/arm/mach-snapdragon/rampart.h
 create mode 100644 include/soc/qcom/socinfo.h

-- 
2.34.1

Reply via email to