From 1d70286d4eb03385449f6aaf9db20387e1853ca6 Mon Sep 17 00:00:00 2001 From: Venkateshwar S Date: Sat, 29 Nov 2025 08:34:04 -0800 Subject: [PATCH] soc/qualcomm/common: Add support for loading APDP image This patch introduces a new Kconfig option, QC_APDP_ENABLE, to control Application Processor Debug Policy (APDP) image loading. When this option is enabled, the APDP image is loaded during the qclib_load_and_run() sequence. It also adds a new CBFS file entry and table entry definition for apdp_meta, along with a memory region symbol apdp_ramdump_meta for metadata storage. TEST=Create an image.serial.bin and ensure it boots on X1P42100. Change-Id: I8d0847c99a1129359f2c758b7a07b9c022f1c8c8 Signed-off-by: Venkateshwar S Reviewed-on: https://review.coreboot.org/c/coreboot/+/90303 Reviewed-by: Kapil Porwal Reviewed-by: Subrata Banik Tested-by: build bot (Jenkins) --- src/soc/qualcomm/common/Kconfig | 8 +++++++ .../common/include/soc/qclib_common.h | 2 ++ .../common/include/soc/symbols_common.h | 1 + src/soc/qualcomm/common/qclib.c | 24 +++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/src/soc/qualcomm/common/Kconfig b/src/soc/qualcomm/common/Kconfig index eca772ce59..9420087521 100644 --- a/src/soc/qualcomm/common/Kconfig +++ b/src/soc/qualcomm/common/Kconfig @@ -25,4 +25,12 @@ config QC_SDI_ENABLE default n prompt "Debug Build: enable SDI" +config QC_APDP_ENABLE + bool + default n + prompt "Debug Build: enable APDP" + help + Application Processor Debug Policy (APDP) is a configuration image + to define and enforce debugging capabilities and restrictions for APPS. + endif diff --git a/src/soc/qualcomm/common/include/soc/qclib_common.h b/src/soc/qualcomm/common/include/soc/qclib_common.h index e05663bae1..572b479e90 100644 --- a/src/soc/qualcomm/common/include/soc/qclib_common.h +++ b/src/soc/qualcomm/common/include/soc/qclib_common.h @@ -28,6 +28,7 @@ #define QCLIB_TE_SHRM_META_SETTINGS "shrm_metadata" #define QCLIB_TE_AOP_META_SETTINGS "aop_metadata" #define QCLIB_TE_AOP_DEVCFG_META_SETTINGS "aop_cfg_metadata" +#define QCLIB_TE_APDP_META_SETTINGS "apdp_metadata" /* BA_BMASK_VALUES (blob_attributes bit mask values) */ #define QCLIB_BA_SAVE_TO_STORAGE 0x00000001 @@ -42,6 +43,7 @@ enum qclib_cbfs_file { QCLIB_CBFS_SHRM_META, QCLIB_CBFS_AOP_META, QCLIB_CBFS_AOP_DEVCFG_META, + QCLIB_CBFS_APDP_META, QCLIB_CBFS_MAX }; diff --git a/src/soc/qualcomm/common/include/soc/symbols_common.h b/src/soc/qualcomm/common/include/soc/symbols_common.h index f679a6a2ab..6d6ff38635 100644 --- a/src/soc/qualcomm/common/include/soc/symbols_common.h +++ b/src/soc/qualcomm/common/include/soc/symbols_common.h @@ -17,6 +17,7 @@ DECLARE_REGION(dtb) DECLARE_REGION(cpr_settings) DECLARE_REGION(qc_blob_meta) DECLARE_REGION(aop_blob_meta) +DECLARE_REGION(apdp_ramdump_meta) DECLARE_OPTIONAL_REGION(pmic) DECLARE_REGION(limits_cfg) DECLARE_REGION(aop) diff --git a/src/soc/qualcomm/common/qclib.c b/src/soc/qualcomm/common/qclib.c index dd679964cd..cb33170ea1 100644 --- a/src/soc/qualcomm/common/qclib.c +++ b/src/soc/qualcomm/common/qclib.c @@ -94,6 +94,8 @@ const char *qclib_file_default(enum qclib_cbfs_file file) return CONFIG_CBFS_PREFIX "/aop_meta"; case QCLIB_CBFS_AOP_DEVCFG_META: return CONFIG_CBFS_PREFIX "/aop_devcfg_meta"; + case QCLIB_CBFS_APDP_META: + return CONFIG_CBFS_PREFIX "/apdp_meta"; default: die("unknown QcLib file %d", file); } @@ -314,6 +316,28 @@ void qclib_load_and_run(void) goto fail; } + /* Load APDP image */ + if (CONFIG(QC_APDP_ENABLE)) { + struct prog apdp_prog = + PROG_INIT(PROG_PAYLOAD, CONFIG_CBFS_PREFIX "/apdp"); + + if (!selfload(&apdp_prog)) + die("SOC image: APDP load failed"); + + /* Attempt to load apdp_meta Blob. */ + data_size = cbfs_load(qclib_file(QCLIB_CBFS_APDP_META), + _apdp_ramdump_meta, REGION_SIZE(apdp_ramdump_meta)); + if (!data_size) { + printk(BIOS_ERR, + "[%s] /apdp_meta not loaded\n" + "apdp_meta is mandatory for APDP authentication; failure is fatal\n" + , __func__); + goto fail; + } + + qclib_add_if_table_entry(QCLIB_TE_APDP_META_SETTINGS, _apdp_ramdump_meta, data_size, 0); + } + /* Attempt to load QCLib elf */ qclib = (struct prog) PROG_INIT(PROG_REFCODE, qclib_file(QCLIB_CBFS_QCLIB));