@@ -383,6 +383,27 @@ static void mt8192_power_off_sram(void __iomem *addr)
383
383
writel (GENMASK (i , 0 ), addr );
384
384
}
385
385
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
+
386
407
static int mt8192_scp_before_load (struct mtk_scp * scp )
387
408
{
388
409
/* clear SPM interrupt, SCP2SPM_IPC_CLR */
@@ -874,6 +895,19 @@ static const struct mtk_scp_of_data mt8183_of_data = {
874
895
.ipi_buf_offset = 0x7bdb0 ,
875
896
};
876
897
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
+
877
911
static const struct mtk_scp_of_data mt8192_of_data = {
878
912
.scp_clk_get = mt8192_scp_clk_get ,
879
913
.scp_before_load = mt8192_scp_before_load ,
@@ -900,6 +934,7 @@ static const struct mtk_scp_of_data mt8195_of_data = {
900
934
901
935
static const struct of_device_id mtk_scp_of_match [] = {
902
936
{ .compatible = "mediatek,mt8183-scp" , .data = & mt8183_of_data },
937
+ { .compatible = "mediatek,mt8186-scp" , .data = & mt8186_of_data },
903
938
{ .compatible = "mediatek,mt8192-scp" , .data = & mt8192_of_data },
904
939
{ .compatible = "mediatek,mt8195-scp" , .data = & mt8195_of_data },
905
940
{},
0 commit comments