@@ -383,6 +383,27 @@ static void mt8192_power_off_sram(void __iomem *addr)
383383 writel (GENMASK (i , 0 ), addr );
384384}
385385
386+ static int mt8186_scp_before_load (struct mtk_scp * scp )
387+ {
388+ /* Clear SCP to host interrupt */
389+ writel (MT8183_SCP_IPC_INT_BIT , scp -> reg_base + MT8183_SCP_TO_HOST );
390+
391+ /* Reset clocks before loading FW */
392+ writel (0x0 , scp -> reg_base + MT8183_SCP_CLK_SW_SEL );
393+ writel (0x0 , scp -> reg_base + MT8183_SCP_CLK_DIV_SEL );
394+
395+ /* Turn on the power of SCP's SRAM before using it. Enable 1 block per time*/
396+ mt8192_power_on_sram (scp -> reg_base + MT8183_SCP_SRAM_PDN );
397+
398+ /* Initialize TCM before loading FW. */
399+ writel (0x0 , scp -> reg_base + MT8183_SCP_L1_SRAM_PD );
400+ writel (0x0 , scp -> reg_base + MT8183_SCP_TCM_TAIL_SRAM_PD );
401+ writel (0x0 , scp -> reg_base + MT8186_SCP_L1_SRAM_PD_P1 );
402+ writel (0x0 , scp -> reg_base + MT8186_SCP_L1_SRAM_PD_p2 );
403+
404+ return 0 ;
405+ }
406+
386407static int mt8192_scp_before_load (struct mtk_scp * scp )
387408{
388409 /* clear SPM interrupt, SCP2SPM_IPC_CLR */
@@ -874,6 +895,19 @@ static const struct mtk_scp_of_data mt8183_of_data = {
874895 .ipi_buf_offset = 0x7bdb0 ,
875896};
876897
898+ static const struct mtk_scp_of_data mt8186_of_data = {
899+ .scp_clk_get = mt8195_scp_clk_get ,
900+ .scp_before_load = mt8186_scp_before_load ,
901+ .scp_irq_handler = mt8183_scp_irq_handler ,
902+ .scp_reset_assert = mt8183_scp_reset_assert ,
903+ .scp_reset_deassert = mt8183_scp_reset_deassert ,
904+ .scp_stop = mt8183_scp_stop ,
905+ .scp_da_to_va = mt8183_scp_da_to_va ,
906+ .host_to_scp_reg = MT8183_HOST_TO_SCP ,
907+ .host_to_scp_int_bit = MT8183_HOST_IPC_INT_BIT ,
908+ .ipi_buf_offset = 0x7bdb0 ,
909+ };
910+
877911static const struct mtk_scp_of_data mt8192_of_data = {
878912 .scp_clk_get = mt8192_scp_clk_get ,
879913 .scp_before_load = mt8192_scp_before_load ,
@@ -900,6 +934,7 @@ static const struct mtk_scp_of_data mt8195_of_data = {
900934
901935static const struct of_device_id mtk_scp_of_match [] = {
902936 { .compatible = "mediatek,mt8183-scp" , .data = & mt8183_of_data },
937+ { .compatible = "mediatek,mt8186-scp" , .data = & mt8186_of_data },
903938 { .compatible = "mediatek,mt8192-scp" , .data = & mt8192_of_data },
904939 { .compatible = "mediatek,mt8195-scp" , .data = & mt8195_of_data },
905940 {},
0 commit comments