[][kernel][common][clock][Add alwayson clocks to clk driver]

[Description]
Add alwayson clocks to clk driver, those clock will be enabled when
bring up

[Release-log]
N/A


Change-Id: I6a46a7430ccb1336e666de3f30773bc4525b07c9
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7035710
diff --git a/target/linux/mediatek/files-5.4/drivers/clk/mediatek/clk-mt7988.c b/target/linux/mediatek/files-5.4/drivers/clk/mediatek/clk-mt7988.c
index 04a680b..f3bb72d 100644
--- a/target/linux/mediatek/files-5.4/drivers/clk/mediatek/clk-mt7988.c
+++ b/target/linux/mediatek/files-5.4/drivers/clk/mediatek/clk-mt7988.c
@@ -396,26 +396,31 @@
 			     7, 0x1C4, 5),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_SGM_0_SEL, "sgm_0_sel", sgm_0_parents,
 			     0x090, 0x094, 0x098, 8, 1, 15, 0x1C4, 6),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_SGM_SBUS_0_SEL, "sgm_sbus_0_sel",
-			     usxgmii_sbus_0_parents, 0x090, 0x094, 0x098, 16, 1,
-			     23, 0x1C4, 7),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_SGM_SBUS_0_SEL, "sgm_sbus_0_sel",
+				usxgmii_sbus_0_parents,
+				0x090, 0x094, 0x098, 16, 1,
+				23, 0x1C4, 7, CLK_IS_CRITICAL),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_SGM_1_SEL, "sgm_1_sel", sgm_0_parents,
 			     0x090, 0x094, 0x098, 24, 1, 31, 0x1C4, 8),
 	/* CLK_CFG_10 */
-	MUX_GATE_CLR_SET_UPD(CK_TOP_SGM_SBUS_1_SEL, "sgm_sbus_1_sel",
-			     usxgmii_sbus_0_parents, 0x0A0, 0x0A4, 0x0A8, 0, 1,
-			     7, 0x1C4, 9),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_SGM_SBUS_1_SEL, "sgm_sbus_1_sel",
+				usxgmii_sbus_0_parents,
+				0x0A0, 0x0A4, 0x0A8, 0, 1,
+				7, 0x1C4, 9, CLK_IS_CRITICAL),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_XFI_PHY_0_XTAL_SEL, "xfi_phy_0_xtal_sel",
 			     sspxtp_parents, 0x0A0, 0x0A4, 0x0A8, 8, 1, 15,
 			     0x1C4, 10),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_XFI_PHY_1_XTAL_SEL, "xfi_phy_1_xtal_sel",
 			     sspxtp_parents, 0x0A0, 0x0A4, 0x0A8, 16, 1, 23,
 			     0x1C4, 11),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_SYSAXI_SEL, "sysaxi_sel", axi_infra_parents,
-			     0x0A0, 0x0A4, 0x0A8, 24, 1, 31, 0x1C4, 12),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_SYSAXI_SEL, "sysaxi_sel",
+				axi_infra_parents,
+				0x0A0, 0x0A4, 0x0A8, 24, 1, 31,
+				 0x1C4, 12, CLK_IS_CRITICAL),
 	/* CLK_CFG_11 */
-	MUX_GATE_CLR_SET_UPD(CK_TOP_SYSAPB_SEL, "sysapb_sel", sysapb_parents,
-			     0x0B0, 0x0B4, 0x0B8, 0, 1, 7, 0x1C4, 13),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_SYSAPB_SEL, "sysapb_sel",
+				sysapb_parents, 0x0B0, 0x0B4, 0x0B8, 0, 1, 7,
+				0x1C4, 13, CLK_IS_CRITICAL),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_ETH_REFCK_50M_SEL, "eth_refck_50m_sel",
 			     eth_refck_50m_parents, 0x0B0, 0x0B4, 0x0B8, 8, 1,
 			     15, 0x1C4, 14),
@@ -435,28 +440,30 @@
 	MUX_GATE_CLR_SET_UPD(CK_TOP_NPU_TOPS_SEL, "npu_tops_sel",
 			     npu_tops_parents, 0x0C0, 0x0C4, 0x0C8, 16, 1, 23,
 			     0x1C4, 19),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_DRAMC_SEL, "dramc_sel", sspxtp_parents,
-			     0x0C0, 0x0C4, 0x0C8, 24, 1, 31, 0x1C4, 20),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_DRAMC_SEL, "dramc_sel",
+				sspxtp_parents, 0x0C0, 0x0C4, 0x0C8, 24, 1, 31,
+				0x1C4, 20, CLK_IS_CRITICAL),
 	/* CLK_CFG_13 */
-	MUX_GATE_CLR_SET_UPD(CK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
-			     dramc_md32_parents, 0x0D0, 0x0D4, 0x0D8, 0, 2, 7,
-			     0x1C4, 21),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_INFRA_F26M_SEL, "csw_infra_f26m_sel",
-			     sspxtp_parents, 0x0D0, 0x0D4, 0x0D8, 8, 1, 15,
-			     0x1C4, 22),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_PEXTP_P0_SEL, "pextp_p0_sel",
-			     sspxtp_parents, 0x0D0, 0x0D4, 0x0D8, 16, 1, 23,
-			     0x1C4, 23),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_PEXTP_P1_SEL, "pextp_p1_sel",
-			     sspxtp_parents, 0x0D0, 0x0D4, 0x0D8, 24, 1, 31,
-			     0x1C4, 24),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
+				dramc_md32_parents,
+				0x0D0, 0x0D4, 0x0D8, 0, 2, 7,
+				0x1C4, 21, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_INFRA_F26M_SEL, "csw_infra_f26m_sel",
+				sspxtp_parents, 0x0D0, 0x0D4, 0x0D8, 8, 1, 15,
+				0x1C4, 22, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_PEXTP_P0_SEL, "pextp_p0_sel",
+				sspxtp_parents, 0x0D0, 0x0D4, 0x0D8, 16, 1, 23,
+				0x1C4, 23, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_PEXTP_P1_SEL, "pextp_p1_sel",
+				sspxtp_parents, 0x0D0, 0x0D4, 0x0D8, 24, 1, 31,
+				0x1C4, 24, CLK_IS_CRITICAL),
 	/* CLK_CFG_14 */
-	MUX_GATE_CLR_SET_UPD(CK_TOP_PEXTP_P2_SEL, "pextp_p2_sel",
-			     sspxtp_parents, 0x0E0, 0x0E4, 0x0E8, 0, 1, 7,
-			     0x1C4, 25),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_PEXTP_P3_SEL, "pextp_p3_sel",
-			     sspxtp_parents, 0x0E0, 0x0E4, 0x0E8, 8, 1, 15,
-			     0x1C4, 26),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_PEXTP_P2_SEL, "pextp_p2_sel",
+				sspxtp_parents, 0x0E0, 0x0E4, 0x0E8, 0, 1, 7,
+				0x1C4, 25, CLK_IS_CRITICAL),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_PEXTP_P3_SEL, "pextp_p3_sel",
+				sspxtp_parents, 0x0E0, 0x0E4, 0x0E8, 8, 1, 15,
+				0x1C4, 26, CLK_IS_CRITICAL),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_DA_XTP_GLB_P0_SEL, "da_xtp_glb_p0_sel",
 			     da_xtp_glb_p0_parents, 0x0E0, 0x0E4, 0x0E8, 16, 1,
 			     23, 0x1C4, 27),
@@ -481,10 +488,11 @@
 	MUX_GATE_CLR_SET_UPD(CK_TOP_TOPS_P2_26M_SEL, "tops_p2_26m_sel",
 			     sspxtp_parents, 0x0100, 0x104, 0x108, 8, 1, 15,
 			     0x1C8, 3),
-	MUX_GATE_CLR_SET_UPD(CK_TOP_MCUSYS_BACKUP_625M_SEL,
-			     "mcusys_backup_625m_sel",
-			     mcusys_backup_625m_parents, 0x0100, 0x104, 0x108,
-			     16, 1, 23, 0x1C8, 4),
+	MUX_GATE_CLR_SET_UPD_FLAGS(CK_TOP_MCUSYS_BACKUP_625M_SEL,
+				"mcusys_backup_625m_sel",
+				mcusys_backup_625m_parents,
+				0x0100, 0x104, 0x108,
+				16, 1, 23, 0x1C8, 4, CLK_IS_CRITICAL),
 	MUX_GATE_CLR_SET_UPD(CK_TOP_NETSYS_SYNC_250M_SEL,
 			     "netsys_sync_250m_sel", pcie_mbist_250m_parents,
 			     0x0100, 0x104, 0x108, 24, 1, 31, 0x1C8, 5),
@@ -675,6 +683,13 @@
 		.ops = &mtk_clk_gate_ops_setclr,                               \
 	}
 
+#define GATE_CRITICAL(_id, _name, _parent, _regs, _shift) {	\
+		.id = _id, .name = _name, .parent_name = _parent,              \
+		.regs = _regs, .shift = _shift,                      \
+		.flags = CLK_IS_CRITICAL,    \
+		.ops = &mtk_clk_gate_ops_setclr,                               \
+	}
+
 static const struct mtk_gate infra_clks[] __initconst = {
 	/* INFRA0 */
 	GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P0,
@@ -683,8 +698,9 @@
 		    "infra_pcie_peri_ck_26m_ck_p1", "infra_f26m_o0", 8),
 	GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P2,
 		    "infra_pcie_peri_ck_26m_ck_p2", "infra_f26m_o0", 9),
-	GATE_INFRA0(CK_INFRA_PCIE_PERI_26M_CK_P3,
-		    "infra_pcie_peri_ck_26m_ck_p3", "infra_f26m_o0", 10),
+	GATE_CRITICAL(CK_INFRA_PCIE_PERI_26M_CK_P3,
+		    "infra_pcie_peri_ck_26m_ck_p3", "infra_f26m_o0",
+			&infra0_cg_regs, 10),
 	/* INFRA1 */
 	GATE_INFRA1(CK_INFRA_66M_GPT_BCK, "infra_hf_66m_gpt_bck",
 		    "infra_66m_mck", 0),
@@ -720,8 +736,8 @@
 		    18),
 	GATE_INFRA1(CK_INFRA_DRAMC_F26M, "infra_dramc_f26m", "infra_ck_f26m",
 		    19),
-	GATE_INFRA1(CK_INFRA_133M_DBG_ACKM, "infra_hf_133m_dbg_ackm",
-		    "infra_133m_mck", 20),
+	GATE_CRITICAL(CK_INFRA_133M_DBG_ACKM, "infra_hf_133m_dbg_ackm",
+			"infra_133m_mck", &infra1_cg_regs, 20),
 	GATE_INFRA1(CK_INFRA_66M_AP_DMA_BCK, "infra_66m_ap_dma_bck",
 		    "infra_66m_mck", 21),
 	GATE_INFRA1(CK_INFRA_66M_SEJ_BCK, "infra_hf_66m_sej_bck",
@@ -740,8 +756,8 @@
 		    "infra_mux_uart2_sel", 5),
 	GATE_INFRA2(CK_INFRA_NFI, "infra_f_fnfi", "infra_nfi_o", 9),
 	GATE_INFRA2(CK_INFRA_SPINFI, "infra_f_fspinfi", "infra_spinfi_o", 10),
-	GATE_INFRA2(CK_INFRA_66M_NFI_HCK, "infra_hf_66m_nfi_hck",
-		    "infra_66m_mck", 11),
+	GATE_CRITICAL(CK_INFRA_66M_NFI_HCK, "infra_hf_66m_nfi_hck",
+			"infra_66m_mck", &infra2_cg_regs, 11),
 	GATE_INFRA2(CK_INFRA_104M_SPI0, "infra_hf_104m_spi0",
 		    "infra_mux_spi0_sel", 12),
 	GATE_INFRA2(CK_INFRA_104M_SPI1, "infra_hf_104m_spi1",
@@ -790,10 +806,10 @@
 		    "infra_usb_sys_o_p1", 5),
 	GATE_INFRA3(CK_INFRA_USB_REF, "infra_usb_ref", "infra_usb_o", 6),
 	GATE_INFRA3(CK_INFRA_USB_CK_P1, "infra_usb_ck_p1", "infra_usb_o_p1", 7),
-	GATE_INFRA3(CK_INFRA_USB_FRMCNT, "infra_usb_frmcnt",
-		    "infra_usb_frmcnt_o", 8),
-	GATE_INFRA3(CK_INFRA_USB_FRMCNT_CK_P1, "infra_usb_frmcnt_ck_p1",
-		    "infra_usb_frmcnt_o_p1", 9),
+	GATE_CRITICAL(CK_INFRA_USB_FRMCNT, "infra_usb_frmcnt",
+			"infra_usb_frmcnt_o", &infra3_cg_regs, 8),
+	GATE_CRITICAL(CK_INFRA_USB_FRMCNT_CK_P1, "infra_usb_frmcnt_ck_p1",
+			"infra_usb_frmcnt_o_p1", &infra3_cg_regs, 9),
 	GATE_INFRA3(CK_INFRA_USB_PIPE, "infra_usb_pipe", "infra_usb_pipe_o",
 		    10),
 	GATE_INFRA3(CK_INFRA_USB_PIPE_CK_P1, "infra_usb_pipe_ck_p1",
@@ -955,8 +971,8 @@
 	    HAVE_RST_BAR, 23, 32, 0x0144, 4, 0, 0, 0, 0x0148, 0, 0x0144,
 	    "clkxtal"),
 	PLL(CK_APMIXED_NET2PLL, "net2pll", 0x0154, 0x0160, 0xff000001,
-	    HAVE_RST_BAR, 23, 32, 0x0154, 4, 0, 0, 0, 0x0158, 0, 0x0154,
-	    "clkxtal"),
+		HAVE_RST_BAR | PLL_AO, 23, 32, 0x0154, 4, 0, 0, 0, 0x0158,
+		0, 0x0154, "clkxtal"),
 	PLL(CK_APMIXED_WEDMCUPLL, "wedmcupll", 0x0164, 0x0170, 0x00000001, 0, 0,
 	    32, 0x0164, 4, 0, 0, 0, 0x0168, 0, 0x0164, "clkxtal"),
 	PLL(CK_APMIXED_SGMPLL, "sgmpll", 0x0174, 0x0180, 0x00000001, 0, 0, 32,
@@ -978,26 +994,6 @@
 static struct clk_onecell_data *mt7988_top_clk_data __initdata;
 static struct clk_onecell_data *mt7988_pll_clk_data __initdata;
 
-static void __init mtk_clk_enable_critical(void)
-{
-	if (!mt7988_infra_clk_data || !mt7988_infra_ao_clk_data
-	    || !mt7988_top_clk_data || !mt7988_pll_clk_data)
-		return;
-
-	clk_prepare_enable(mt7988_pll_clk_data->clks[CK_APMIXED_ARM_B]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_SYSAXI_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_SYSAPB_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_DRAMC_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_DRAMC_MD32_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_INFRA_F26M_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_PEXTP_P0_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_PEXTP_P1_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_PEXTP_P2_SEL]);
-	clk_prepare_enable(mt7988_top_clk_data->clks[CK_TOP_PEXTP_P3_SEL]);
-	clk_prepare_enable(
-		mt7988_infra_ao_clk_data->clks[CK_INFRA_PCIE_PERI_26M_CK_P3]);
-}
-
 static void __init mtk_infracfg_init(struct device_node *node)
 {
 	int r;
@@ -1013,8 +1009,6 @@
 	if (r)
 		pr_err("%s(): could not register clock provider: %d\n",
 		       __func__, r);
-
-	mtk_clk_enable_critical();
 }
 CLK_OF_DECLARE(mtk_infracfg, "mediatek,mt7988-infracfg", mtk_infracfg_init);
 
@@ -1043,8 +1037,6 @@
 	if (r)
 		pr_err("%s(): could not register clock provider: %d\n",
 		       __func__, r);
-
-	mtk_clk_enable_critical();
 }
 CLK_OF_DECLARE(mtk_topckgen, "mediatek,mt7988-topckgen", mtk_topckgen_init);
 
@@ -1072,8 +1064,6 @@
 	if (r)
 		pr_err("%s(): could not register clock provider: %d\n",
 		       __func__, r);
-
-	mtk_clk_enable_critical();
 }
 CLK_OF_DECLARE(mtk_infracfg_ao, "mediatek,mt7988-infracfg_ao",
 	       mtk_infracfg_ao_init);
@@ -1093,8 +1083,6 @@
 	if (r)
 		pr_err("%s(): could not register clock provider: %d\n",
 		       __func__, r);
-
-	mtk_clk_enable_critical();
 }
 CLK_OF_DECLARE(mtk_apmixedsys, "mediatek,mt7988-apmixedsys",
 	       mtk_apmixedsys_init);