diff --git a/src/soc/qualcomm/common/include/soc/qclib_common.h b/src/soc/qualcomm/common/include/soc/qclib_common.h index fc2ed93399..9f5ee52bfc 100644 --- a/src/soc/qualcomm/common/include/soc/qclib_common.h +++ b/src/soc/qualcomm/common/include/soc/qclib_common.h @@ -26,6 +26,7 @@ #define QCLIB_TE_DTB_SETTINGS "dtb" #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" /* BA_BMASK_VALUES (blob_attributes bit mask values) */ #define QCLIB_BA_SAVE_TO_STORAGE 0x00000001 @@ -38,6 +39,7 @@ enum qclib_cbfs_file { QCLIB_CBFS_DTB, QCLIB_CBFS_SHRM_META, QCLIB_CBFS_AOP_META, + QCLIB_CBFS_AOP_DEVCFG_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 64cb7ae38b..10a4e41298 100644 --- a/src/soc/qualcomm/common/include/soc/symbols_common.h +++ b/src/soc/qualcomm/common/include/soc/symbols_common.h @@ -15,6 +15,7 @@ DECLARE_REGION(dram_soc) DECLARE_REGION(dcb) DECLARE_REGION(dtb) DECLARE_REGION(qc_blob_meta) +DECLARE_REGION(aop_blob_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 3470741f7c..e2b5ac00cc 100644 --- a/src/soc/qualcomm/common/qclib.c +++ b/src/soc/qualcomm/common/qclib.c @@ -88,6 +88,8 @@ const char *qclib_file_default(enum qclib_cbfs_file file) return CONFIG_CBFS_PREFIX "/shrm_meta"; case QCLIB_CBFS_AOP_META: return CONFIG_CBFS_PREFIX "/aop_meta"; + case QCLIB_CBFS_AOP_DEVCFG_META: + return CONFIG_CBFS_PREFIX "/aop_devcfg_meta"; default: die("unknown QcLib file %d", file); } @@ -331,6 +333,12 @@ void qclib_rerun(void) init_qclib_cb_if_table(&qclib_cb_if_table); + struct prog aop_cfg_fw_prog = + PROG_INIT(PROG_PAYLOAD, CONFIG_CBFS_PREFIX "/aop_cfg"); + + if (!selfload(&aop_cfg_fw_prog)) + die("SOC image: AOP load failed"); + /* Attempt to load aop_meta Blob (reuse the qc_blob_meta region). */ data_size = cbfs_load(qclib_file(QCLIB_CBFS_AOP_META), _qc_blob_meta, REGION_SIZE(qc_blob_meta)); @@ -341,6 +349,16 @@ void qclib_rerun(void) qclib_add_if_table_entry(QCLIB_TE_AOP_META_SETTINGS, _qc_blob_meta, data_size, 0); + /* Attempt to load aop_devcfg_meta Blob. */ + data_size = cbfs_load(qclib_file(QCLIB_CBFS_AOP_DEVCFG_META), + _aop_blob_meta, REGION_SIZE(aop_blob_meta)); + if (!data_size) { + printk(BIOS_ERR, "[%s] /aop_devcfg_meta failed\n", __func__); + goto fail; + } + + qclib_add_if_table_entry(QCLIB_TE_AOP_DEVCFG_META_SETTINGS, _aop_blob_meta, data_size, 0); + /* Set up the system and jump into QcLib */ printk(BIOS_DEBUG, "\n\n\nRe-enter QCLib to bring up AOP\n"); qclib_prepare_and_run();