diff --git a/src/soc/mediatek/common/include/soc/memlayout.h b/src/soc/mediatek/common/include/soc/memlayout.h index f51c2a1996..9e5f11bb3a 100644 --- a/src/soc/mediatek/common/include/soc/memlayout.h +++ b/src/soc/mediatek/common/include/soc/memlayout.h @@ -18,5 +18,8 @@ _ = ASSERT(size % 4K == 0, \ "DRAM DMA buffer should be multiple of smallest page size (4K)!"); +#define FSP_RAMSTAGE_INIT_CODE(addr, size) \ + REGION(fsp_ramstage_init_code, addr, size, 64K) + #define EARLY_INIT(addr, size) \ REGION(early_init_data, addr, size, 4) diff --git a/src/soc/mediatek/common/include/soc/mtk_fsp_common.h b/src/soc/mediatek/common/include/soc/mtk_fsp_common.h index ea3d46fc49..99453bac36 100644 --- a/src/soc/mediatek/common/include/soc/mtk_fsp_common.h +++ b/src/soc/mediatek/common/include/soc/mtk_fsp_common.h @@ -33,6 +33,7 @@ enum fsp_param_type { FSP_PARAM_TYPE_INVALID = 0, /* 0x40000000+ reserved for input type params */ FSP_PARAM_TYPE_IN = FSP_PARAM_IO_ENCODE(FSP_PARAM_IO_IN), + FSP_PARAM_TYPE_STORAGE, /* 0x80000000+ reserved for output type params */ FSP_PARAM_TYPE_OUT = FSP_PARAM_IO_ENCODE(FSP_PARAM_IO_OUT), diff --git a/src/soc/mediatek/mt8196/Makefile.mk b/src/soc/mediatek/mt8196/Makefile.mk index 073f67e2dc..84bf3b66b8 100644 --- a/src/soc/mediatek/mt8196/Makefile.mk +++ b/src/soc/mediatek/mt8196/Makefile.mk @@ -97,6 +97,14 @@ $(DRAM_CBFS)-type := stage $(DRAM_CBFS)-compression := $(CBFS_PRERAM_COMPRESS_FLAG) cbfs-files-y += $(DRAM_CBFS) +FSP_RAMSTAGE_CBFS := $(CONFIG_CBFS_PREFIX)/mtk_fsp_ramstage +$(FSP_RAMSTAGE_CBFS)-file := $(MT8196_BLOB_DIR)/mtk_fsp_ramstage.elf +$(FSP_RAMSTAGE_CBFS)-type := stage +$(FSP_RAMSTAGE_CBFS)-compression := $(CBFS_COMPRESS_FLAG) +ifneq ($(wildcard $($(FSP_RAMSTAGE_CBFS)-file)),) +cbfs-files-y += $(FSP_RAMSTAGE_CBFS) +endif + $(objcbfs)/bootblock.bin: $(objcbfs)/bootblock.raw.bin ./util/mtkheader/gen-bl-img.py mt8196 sf $< $@ diff --git a/src/soc/mediatek/mt8196/include/soc/memlayout.ld b/src/soc/mediatek/mt8196/include/soc/memlayout.ld index f8ee114c2f..6c35a4754e 100644 --- a/src/soc/mediatek/mt8196/include/soc/memlayout.ld +++ b/src/soc/mediatek/mt8196/include/soc/memlayout.ld @@ -64,6 +64,7 @@ SECTIONS POSTRAM_CBFS_CACHE(0x80100000, 2M) RAMSTAGE(0x80300000, 2M) OPTEE_BUF(0x80500000, 70M) + FSP_RAMSTAGE_INIT_CODE(0x90000000, 2M) BL31(0x94600000, 0x200000) diff --git a/src/soc/mediatek/mt8196/soc.c b/src/soc/mediatek/mt8196/soc.c index 1f1da7c5b4..1636f29dd6 100644 --- a/src/soc/mediatek/mt8196/soc.c +++ b/src/soc/mediatek/mt8196/soc.c @@ -8,8 +8,10 @@ #include #include #include +#include #include #include +#include #include #include @@ -33,6 +35,11 @@ static void soc_read_resources(struct device *dev) static void soc_init(struct device *dev) { + mtk_fsp_init(RAMSTAGE_SOC_INIT); + uint32_t storage_type = mainboard_get_storage_type(); + mtk_fsp_add_param(FSP_PARAM_TYPE_STORAGE, sizeof(storage_type), &storage_type); + mtk_fsp_load_and_run(); + mtk_mmu_disable_l2c_sram(); sspm_init(); gpueb_init();