writel(0x0, scp->reg_base + MT8186_SCP_L1_SRAM_PD_P1);
        writel(0x0, scp->reg_base + MT8186_SCP_L1_SRAM_PD_p2);
 
+       /*
+        * Set I-cache and D-cache size before loading SCP FW.
+        * SCP SRAM logical address may change when cache size setting differs.
+        */
+       writel(MT8183_SCP_CACHE_CON_WAYEN | MT8183_SCP_CACHESIZE_8KB,
+              scp->reg_base + MT8183_SCP_CACHE_CON);
+       writel(MT8183_SCP_CACHESIZE_8KB, scp->reg_base + MT8183_SCP_DCACHE_CON);
+
        return 0;
 }
 
        .scp_da_to_va = mt8183_scp_da_to_va,
        .host_to_scp_reg = MT8183_HOST_TO_SCP,
        .host_to_scp_int_bit = MT8183_HOST_IPC_INT_BIT,
-       .ipi_buf_offset = 0x7bdb0,
+       .ipi_buf_offset = 0x3bdb0,
 };
 
 static const struct mtk_scp_of_data mt8192_of_data = {