| // SPDX-License-Identifier: GPL-2.0 | 
 | /* | 
 |  * Copyright (c) 2019 MediaTek Inc. | 
 |  * Author: Weiyi Lu <weiyi.lu@mediatek.com> | 
 |  */ | 
 |  | 
 | #include <linux/module.h> | 
 | #include "clkchk.h" | 
 |  | 
 | static const char * const off_pll_names[] = { | 
 | 	"vcodecpll", | 
 | 	"vencpll", | 
 | 	"apll1", | 
 | 	"apll2", | 
 | 	"lvdspll", | 
 | 	"lvdspll2", | 
 | 	"msdcpll", | 
 | 	"msdcpll2", | 
 | 	"tvdpll", | 
 | 	"mmpll", | 
 | 	"armca72pll", | 
 | 	"etherpll", | 
 | 	NULL | 
 | }; | 
 |  | 
 | static const char * const all_clk_names[] = { | 
 | 	/* plls */ | 
 | 	"vcodecpll", | 
 | 	"vencpll", | 
 | 	"apll1", | 
 | 	"apll2", | 
 | 	"lvdspll", | 
 | 	"lvdspll2", | 
 | 	"msdcpll", | 
 | 	"msdcpll2", | 
 | 	"tvdpll", | 
 | 	"mmpll", | 
 | 	"armca72pll", | 
 | 	"etherpll", | 
 | 	"cvbspll", | 
 | 	/* topckgen */ | 
 | 	"armca35pll_600m", | 
 | 	"armca35pll_400m", | 
 | 	"armca72pll_ck", | 
 | 	"syspll1_d4", | 
 | 	"syspll1_d8", | 
 | 	"syspll1_d16", | 
 | 	"syspll_d3", | 
 | 	"syspll2_d2", | 
 | 	"syspll2_d4", | 
 | 	"syspll_d5", | 
 | 	"syspll3_d2", | 
 | 	"syspll3_d4", | 
 | 	"syspll_d7", | 
 | 	"syspll4_d2", | 
 | 	"syspll4_d4", | 
 | 	"univpll_d7", | 
 | 	"univpll_d26", | 
 | 	"univpll_d52", | 
 | 	"univpll_d104", | 
 | 	"univpll_d208", | 
 | 	"univpll1_d2", | 
 | 	"univpll1_d4", | 
 | 	"univpll1_d8", | 
 | 	"univpll_d3", | 
 | 	"univpll2_d2", | 
 | 	"univpll2_d4", | 
 | 	"univpll2_d8", | 
 | 	"univpll_d5", | 
 | 	"univpll3_d2", | 
 | 	"univpll3_d4", | 
 | 	"univpll3_d8", | 
 | 	"f_mp0_pll1_ck", | 
 | 	"f_mp0_pll2_ck", | 
 | 	"f_big_pll1_ck", | 
 | 	"f_big_pll2_ck", | 
 | 	"f_bus_pll1_ck", | 
 | 	"f_bus_pll2_ck", | 
 | 	"apll1_ck", | 
 | 	"apll1_d2", | 
 | 	"apll1_d3", | 
 | 	"apll1_d4", | 
 | 	"apll1_d8", | 
 | 	"apll1_d16", | 
 | 	"apll2_ck", | 
 | 	"apll2_d2", | 
 | 	"apll2_d4", | 
 | 	"apll2_d8", | 
 | 	"apll2_d16", | 
 | 	"lvdspll_ck", | 
 | 	"lvdspll_d2", | 
 | 	"lvdspll_d4", | 
 | 	"lvdspll_d8", | 
 | 	"lvdspll2_ck", | 
 | 	"lvdspll2_d2", | 
 | 	"lvdspll2_d4", | 
 | 	"lvdspll2_d8", | 
 | 	"etherpll_125m", | 
 | 	"etherpll_50m", | 
 | 	"cvbs", | 
 | 	"cvbs_d2", | 
 | 	"sys_26m", | 
 | 	"mmpll_ck", | 
 | 	"mmpll_d2", | 
 | 	"vencpll_ck", | 
 | 	"vencpll_d2", | 
 | 	"vcodecpll_ck", | 
 | 	"vcodecpll_d2", | 
 | 	"tvdpll_ck", | 
 | 	"tvdpll_d2", | 
 | 	"tvdpll_d4", | 
 | 	"tvdpll_d8", | 
 | 	"tvdpll_429m", | 
 | 	"tvdpll_429m_d2", | 
 | 	"tvdpll_429m_d4", | 
 | 	"msdcpll_ck", | 
 | 	"msdcpll_d2", | 
 | 	"msdcpll_d4", | 
 | 	"msdcpll2_ck", | 
 | 	"msdcpll2_d2", | 
 | 	"msdcpll2_d4", | 
 | 	"clk26m_d2", | 
 | 	"d2a_ulclk_6p5m", | 
 | 	"vpll3_dpix", | 
 | 	"vpll_dpix", | 
 | 	"ltepll_fs26m", | 
 | 	"dmpll_ck", | 
 | 	"dsi0_lntc", | 
 | 	"dsi1_lntc", | 
 | 	"lvdstx3", | 
 | 	"lvdstx", | 
 | 	"clkrtc_ext", | 
 | 	"clkrtc_int", | 
 | 	"csi0", | 
 | 	"apll_div0", | 
 | 	"apll_div1", | 
 | 	"apll_div2", | 
 | 	"apll_div3", | 
 | 	"apll_div4", | 
 | 	"apll_div5", | 
 | 	"apll_div6", | 
 | 	"apll_div7", | 
 | 	"apll_div_pdn0", | 
 | 	"apll_div_pdn1", | 
 | 	"apll_div_pdn2", | 
 | 	"apll_div_pdn3", | 
 | 	"apll_div_pdn4", | 
 | 	"apll_div_pdn5", | 
 | 	"apll_div_pdn6", | 
 | 	"apll_div_pdn7", | 
 | 	"nfi2x_en", | 
 | 	"nfiecc_en", | 
 | 	"nfi1x_ck_en", | 
 | 	"mm_sel", | 
 | 	"pwm_sel", | 
 | 	"vdec_sel", | 
 | 	"venc_sel", | 
 | 	"mfg_sel", | 
 | 	"camtg_sel", | 
 | 	"spi_sel", | 
 | 	"usb20_sel", | 
 | 	"usb30_sel", | 
 | 	"msdc50_0_h_sel", | 
 | 	"msdc50_0_sel", | 
 | 	"msdc30_1_sel", | 
 | 	"msdc30_2_sel", | 
 | 	"msdc30_3_sel", | 
 | 	"audio_sel", | 
 | 	"aud_intbus_sel", | 
 | 	"pmicspi_sel", | 
 | 	"dpilvds1_sel", | 
 | 	"atb_sel", | 
 | 	"nr_sel", | 
 | 	"nfi2x_sel", | 
 | 	"irda_sel", | 
 | 	"aud_1_sel", | 
 | 	"aud_2_sel", | 
 | 	"mem_mfg_sel", | 
 | 	"axi_mfg_sel", | 
 | 	"scam_sel", | 
 | 	"nfiecc_sel", | 
 | 	"pe2_mac_p0_sel", | 
 | 	"pe2_mac_p1_sel", | 
 | 	"dpilvds_sel", | 
 | 	"msdc50_3_h_sel", | 
 | 	"hdcp_sel", | 
 | 	"hdcp_24m_sel", | 
 | 	"spinor_sel", | 
 | 	"apll_sel", | 
 | 	"apll2_sel", | 
 | 	"a1sys_hp_sel", | 
 | 	"a2sys_hp_sel", | 
 | 	"asm_l_sel", | 
 | 	"asm_m_sel", | 
 | 	"asm_h_sel", | 
 | 	"i2so1_sel", | 
 | 	"i2so2_sel", | 
 | 	"i2so3_sel", | 
 | 	"tdmo0_sel", | 
 | 	"tdmo1_sel", | 
 | 	"i2si1_sel", | 
 | 	"i2si2_sel", | 
 | 	"i2si3_sel", | 
 | 	"ether_125m_sel", | 
 | 	"ether_50m_sel", | 
 | 	"jpgdec_sel", | 
 | 	"spislv_sel", | 
 | 	"ether_sel", | 
 | 	"cam2tg_sel", | 
 | 	"di_sel", | 
 | 	"tvd_sel", | 
 | 	"i2c_sel", | 
 | 	"pwm_infra_sel", | 
 | 	"msdc0p_aes_sel", | 
 | 	"cmsys_sel", | 
 | 	"gcpu_sel", | 
 | 	"aud_apll1_sel", | 
 | 	"aud_apll2_sel", | 
 | 	"apll1_ref_sel", | 
 | 	"apll2_ref_sel", | 
 | 	"audull_vtx_sel", | 
 | 	/* bdpsys */ | 
 | 	"bdp_bridge_b", | 
 | 	"bdp_bridge_d", | 
 | 	"bdp_larb_d", | 
 | 	"bdp_vdi_pxl", | 
 | 	"bdp_vdi_d", | 
 | 	"bdp_vdi_b", | 
 | 	"bdp_fmt_b", | 
 | 	"bdp_27m", | 
 | 	"bdp_27m_vdout", | 
 | 	"bdp_27_74_74", | 
 | 	"bdp_2fs", | 
 | 	"bdp_2fs74_148", | 
 | 	"bdp_b", | 
 | 	"bdp_vdo_d", | 
 | 	"bdp_vdo_2fs", | 
 | 	"bdp_vdo_b", | 
 | 	"bdp_di_pxl", | 
 | 	"bdp_di_d", | 
 | 	"bdp_di_b", | 
 | 	"bdp_nr_agent", | 
 | 	"bdp_nr_d", | 
 | 	"bdp_nr_b", | 
 | 	"bdp_bridge_rt_b", | 
 | 	"bdp_bridge_rt_d", | 
 | 	"bdp_larb_rt_d", | 
 | 	"bdp_tvd_tdc", | 
 | 	"bdp_tvd_clk_54", | 
 | 	"bdp_tvd_cbus", | 
 | 	/* infracfg */ | 
 | 	"infra_dbgclk", | 
 | 	"infra_gce", | 
 | 	"infra_m4u", | 
 | 	"infra_kp", | 
 | 	"infra_ao_spi0", | 
 | 	"infra_ao_spi1", | 
 | 	"infra_ao_uart5", | 
 | 	/* imgsys */ | 
 | 	"img_smi_larb2", | 
 | 	"img_scam_en", | 
 | 	"img_cam_en", | 
 | 	"img_cam_sv_en", | 
 | 	"img_cam_sv1_en", | 
 | 	"img_cam_sv2_en", | 
 | 	/* jpgdecsys */ | 
 | 	"jpgdec_jpgdec1", | 
 | 	"jpgdec_jpgdec", | 
 | 	/* mfgcfg */ | 
 | 	"mfg_bg3d", | 
 | 	/* mmsys */ | 
 | 	"mm_smi_common", | 
 | 	"mm_smi_larb0", | 
 | 	"mm_cam_mdp", | 
 | 	"mm_mdp_rdma0", | 
 | 	"mm_mdp_rdma1", | 
 | 	"mm_mdp_rsz0", | 
 | 	"mm_mdp_rsz1", | 
 | 	"mm_mdp_rsz2", | 
 | 	"mm_mdp_tdshp0", | 
 | 	"mm_mdp_tdshp1", | 
 | 	"mm_mdp_crop", | 
 | 	"mm_mdp_wdma", | 
 | 	"mm_mdp_wrot0", | 
 | 	"mm_mdp_wrot1", | 
 | 	"mm_fake_eng", | 
 | 	"mm_mutex_32k", | 
 | 	"mm_disp_ovl0", | 
 | 	"mm_disp_ovl1", | 
 | 	"mm_disp_rdma0", | 
 | 	"mm_disp_rdma1", | 
 | 	"mm_disp_rdma2", | 
 | 	"mm_disp_wdma0", | 
 | 	"mm_disp_wdma1", | 
 | 	"mm_disp_color0", | 
 | 	"mm_disp_color1", | 
 | 	"mm_disp_aal", | 
 | 	"mm_disp_gamma", | 
 | 	"mm_disp_ufoe", | 
 | 	"mm_disp_split0", | 
 | 	"mm_disp_od", | 
 | 	"mm_pwm0_mm", | 
 | 	"mm_pwm0_26m", | 
 | 	"mm_pwm1_mm", | 
 | 	"mm_pwm1_26m", | 
 | 	"mm_dsi0_engine", | 
 | 	"mm_dsi0_digital", | 
 | 	"mm_dsi1_engine", | 
 | 	"mm_dsi1_digital", | 
 | 	"mm_dpi_pixel", | 
 | 	"mm_dpi_engine", | 
 | 	"mm_dpi1_pixel", | 
 | 	"mm_dpi1_engine", | 
 | 	"mm_lvds_pixel", | 
 | 	"mm_lvds_cts", | 
 | 	"mm_smi_larb4", | 
 | 	"mm_smi_common1", | 
 | 	"mm_smi_larb5", | 
 | 	"mm_mdp_rdma2", | 
 | 	"mm_mdp_tdshp2", | 
 | 	"mm_disp_ovl2", | 
 | 	"mm_disp_wdma2", | 
 | 	"mm_disp_color2", | 
 | 	"mm_disp_aal1", | 
 | 	"mm_disp_od1", | 
 | 	"mm_lvds1_pixel", | 
 | 	"mm_lvds1_cts", | 
 | 	"mm_smi_larb7", | 
 | 	"mm_mdp_rdma3", | 
 | 	"mm_mdp_wrot2", | 
 | 	"mm_dsi2", | 
 | 	"mm_dsi2_digital", | 
 | 	"mm_dsi3", | 
 | 	"mm_dsi3_digital", | 
 | 	/* pericfg */ | 
 | 	"per_nfi", | 
 | 	"per_therm", | 
 | 	"per_pwm0", | 
 | 	"per_pwm1", | 
 | 	"per_pwm2", | 
 | 	"per_pwm3", | 
 | 	"per_pwm4", | 
 | 	"per_pwm5", | 
 | 	"per_pwm6", | 
 | 	"per_pwm7", | 
 | 	"per_pwm", | 
 | 	"per_ap_dma", | 
 | 	"per_msdc30_0", | 
 | 	"per_msdc30_1", | 
 | 	"per_msdc30_2", | 
 | 	"per_msdc30_3", | 
 | 	"per_uart1", | 
 | 	"per_uart2", | 
 | 	"per_uart3", | 
 | 	"per_i2c0", | 
 | 	"per_i2c1", | 
 | 	"per_i2c2", | 
 | 	"per_i2c3", | 
 | 	"per_i2c4", | 
 | 	"per_auxadc", | 
 | 	"per_spi0", | 
 | 	"per_spi", | 
 | 	"per_i2c5", | 
 | 	"per_spi2", | 
 | 	"per_spi3", | 
 | 	"per_spi5", | 
 | 	"per_uart4", | 
 | 	"per_sflash", | 
 | 	"per_gmac", | 
 | 	"per_pcie0", | 
 | 	"per_pcie1", | 
 | 	"per_gmac_pclk", | 
 | 	"per_msdc50_0_en", | 
 | 	"per_msdc30_1_en", | 
 | 	"per_msdc30_2_en", | 
 | 	"per_msdc30_3_en", | 
 | 	"per_msdc50_0_h", | 
 | 	"per_msdc50_3_h", | 
 | 	"per_msdc30_0_q", | 
 | 	"per_msdc30_3_q", | 
 | 	/* vdecsys */ | 
 | 	"vdec_cken", | 
 | 	"vdec_larb1_cken", | 
 | 	"vdec_imgrz_cken", | 
 | 	/* vencsys */ | 
 | 	"venc_smi", | 
 | 	"venc_venc", | 
 | 	"venc_smi_larb6", | 
 | 	/* end */ | 
 | 	NULL | 
 | }; | 
 |  | 
 | static const char * const compatible[] = {"mediatek,mt2712", NULL}; | 
 |  | 
 | static struct clkchk_cfg_t cfg = { | 
 | 	.aee_excp_on_fail = false, | 
 | 	.warn_on_fail = true, | 
 | 	.compatible = compatible, | 
 | 	.off_pll_names = off_pll_names, | 
 | 	.all_clk_names = all_clk_names, | 
 | }; | 
 |  | 
 | static int __init clkchk_platform_init(void) | 
 | { | 
 | 	return clkchk_init(&cfg); | 
 | } | 
 | subsys_initcall(clkchk_platform_init); |