1993e9a77SChun-Jie Chen // SPDX-License-Identifier: GPL-2.0-only 2993e9a77SChun-Jie Chen // 3993e9a77SChun-Jie Chen // Copyright (c) 2021 MediaTek Inc. 4993e9a77SChun-Jie Chen // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5993e9a77SChun-Jie Chen 6993e9a77SChun-Jie Chen #include "clk-gate.h" 7993e9a77SChun-Jie Chen #include "clk-mtk.h" 8993e9a77SChun-Jie Chen 9993e9a77SChun-Jie Chen #include <dt-bindings/clock/mt8195-clk.h> 10993e9a77SChun-Jie Chen #include <linux/clk-provider.h> 11993e9a77SChun-Jie Chen #include <linux/platform_device.h> 12993e9a77SChun-Jie Chen 13993e9a77SChun-Jie Chen static const struct mtk_gate_regs wpe_cg_regs = { 14993e9a77SChun-Jie Chen .set_ofs = 0x0, 15993e9a77SChun-Jie Chen .clr_ofs = 0x0, 16993e9a77SChun-Jie Chen .sta_ofs = 0x0, 17993e9a77SChun-Jie Chen }; 18993e9a77SChun-Jie Chen 19993e9a77SChun-Jie Chen static const struct mtk_gate_regs wpe_vpp0_cg_regs = { 20993e9a77SChun-Jie Chen .set_ofs = 0x58, 21993e9a77SChun-Jie Chen .clr_ofs = 0x58, 22993e9a77SChun-Jie Chen .sta_ofs = 0x58, 23993e9a77SChun-Jie Chen }; 24993e9a77SChun-Jie Chen 25993e9a77SChun-Jie Chen static const struct mtk_gate_regs wpe_vpp1_cg_regs = { 26993e9a77SChun-Jie Chen .set_ofs = 0x5c, 27993e9a77SChun-Jie Chen .clr_ofs = 0x5c, 28993e9a77SChun-Jie Chen .sta_ofs = 0x5c, 29993e9a77SChun-Jie Chen }; 30993e9a77SChun-Jie Chen 31993e9a77SChun-Jie Chen #define GATE_WPE(_id, _name, _parent, _shift) \ 32993e9a77SChun-Jie Chen GATE_MTK(_id, _name, _parent, &wpe_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 33993e9a77SChun-Jie Chen 34993e9a77SChun-Jie Chen #define GATE_WPE_VPP0(_id, _name, _parent, _shift) \ 35993e9a77SChun-Jie Chen GATE_MTK(_id, _name, _parent, &wpe_vpp0_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 36993e9a77SChun-Jie Chen 37993e9a77SChun-Jie Chen #define GATE_WPE_VPP1(_id, _name, _parent, _shift) \ 38993e9a77SChun-Jie Chen GATE_MTK(_id, _name, _parent, &wpe_vpp1_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 39993e9a77SChun-Jie Chen 40993e9a77SChun-Jie Chen static const struct mtk_gate wpe_clks[] = { 41993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_VPP0, "wpe_vpp0", "top_wpe_vpp", 16), 42993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_VPP1, "wpe_vpp1", "top_wpe_vpp", 17), 43993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_SMI_LARB7, "wpe_smi_larb7", "top_wpe_vpp", 18), 44993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_SMI_LARB8, "wpe_smi_larb8", "top_wpe_vpp", 19), 45993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_EVENT_TX, "wpe_event_tx", "top_wpe_vpp", 20), 46993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_SMI_LARB7_P, "wpe_smi_larb7_p", "top_wpe_vpp", 24), 47993e9a77SChun-Jie Chen GATE_WPE(CLK_WPE_SMI_LARB8_P, "wpe_smi_larb8_p", "top_wpe_vpp", 25), 48993e9a77SChun-Jie Chen }; 49993e9a77SChun-Jie Chen 50993e9a77SChun-Jie Chen static const struct mtk_gate wpe_vpp0_clks[] = { 51993e9a77SChun-Jie Chen /* WPE_VPP0 */ 52993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_VGEN, "wpe_vpp0_vgen", "top_img", 0), 53993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_EXT, "wpe_vpp0_ext", "top_img", 1), 54993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_VFC, "wpe_vpp0_vfc", "top_img", 2), 55993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH0_TOP, "wpe_vpp0_cach0_top", "top_img", 3), 56993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH0_DMA, "wpe_vpp0_cach0_dma", "top_img", 4), 57993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH1_TOP, "wpe_vpp0_cach1_top", "top_img", 5), 58993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH1_DMA, "wpe_vpp0_cach1_dma", "top_img", 6), 59993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH2_TOP, "wpe_vpp0_cach2_top", "top_img", 7), 60993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH2_DMA, "wpe_vpp0_cach2_dma", "top_img", 8), 61993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH3_TOP, "wpe_vpp0_cach3_top", "top_img", 9), 62993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_CACH3_DMA, "wpe_vpp0_cach3_dma", "top_img", 10), 63993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_PSP, "wpe_vpp0_psp", "top_img", 11), 64993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_PSP2, "wpe_vpp0_psp2", "top_img", 12), 65993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_SYNC, "wpe_vpp0_sync", "top_img", 13), 66993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_C24, "wpe_vpp0_c24", "top_img", 14), 67993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_MDP_CROP, "wpe_vpp0_mdp_crop", "top_img", 15), 68993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_ISP_CROP, "wpe_vpp0_isp_crop", "top_img", 16), 69993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP0_TOP, "wpe_vpp0_top", "top_img", 17), 70993e9a77SChun-Jie Chen /* WPE_VPP1 */ 71993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP0_VECI, "wpe_vpp0_veci", "top_img", 0), 72993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP0_VEC2I, "wpe_vpp0_vec2i", "top_img", 1), 73993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP0_VEC3I, "wpe_vpp0_vec3i", "top_img", 2), 74993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP0_WPEO, "wpe_vpp0_wpeo", "top_img", 3), 75993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP0_MSKO, "wpe_vpp0_msko", "top_img", 4), 76993e9a77SChun-Jie Chen }; 77993e9a77SChun-Jie Chen 78993e9a77SChun-Jie Chen static const struct mtk_gate wpe_vpp1_clks[] = { 79993e9a77SChun-Jie Chen /* WPE_VPP0 */ 80993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_VGEN, "wpe_vpp1_vgen", "top_img", 0), 81993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_EXT, "wpe_vpp1_ext", "top_img", 1), 82993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_VFC, "wpe_vpp1_vfc", "top_img", 2), 83993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH0_TOP, "wpe_vpp1_cach0_top", "top_img", 3), 84993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH0_DMA, "wpe_vpp1_cach0_dma", "top_img", 4), 85993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH1_TOP, "wpe_vpp1_cach1_top", "top_img", 5), 86993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH1_DMA, "wpe_vpp1_cach1_dma", "top_img", 6), 87993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH2_TOP, "wpe_vpp1_cach2_top", "top_img", 7), 88993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH2_DMA, "wpe_vpp1_cach2_dma", "top_img", 8), 89993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH3_TOP, "wpe_vpp1_cach3_top", "top_img", 9), 90993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_CACH3_DMA, "wpe_vpp1_cach3_dma", "top_img", 10), 91993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_PSP, "wpe_vpp1_psp", "top_img", 11), 92993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_PSP2, "wpe_vpp1_psp2", "top_img", 12), 93993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_SYNC, "wpe_vpp1_sync", "top_img", 13), 94993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_C24, "wpe_vpp1_c24", "top_img", 14), 95993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_MDP_CROP, "wpe_vpp1_mdp_crop", "top_img", 15), 96993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_ISP_CROP, "wpe_vpp1_isp_crop", "top_img", 16), 97993e9a77SChun-Jie Chen GATE_WPE_VPP0(CLK_WPE_VPP1_TOP, "wpe_vpp1_top", "top_img", 17), 98993e9a77SChun-Jie Chen /* WPE_VPP1 */ 99993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP1_VECI, "wpe_vpp1_veci", "top_img", 0), 100993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP1_VEC2I, "wpe_vpp1_vec2i", "top_img", 1), 101993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP1_VEC3I, "wpe_vpp1_vec3i", "top_img", 2), 102993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP1_WPEO, "wpe_vpp1_wpeo", "top_img", 3), 103993e9a77SChun-Jie Chen GATE_WPE_VPP1(CLK_WPE_VPP1_MSKO, "wpe_vpp1_msko", "top_img", 4), 104993e9a77SChun-Jie Chen }; 105993e9a77SChun-Jie Chen 106993e9a77SChun-Jie Chen static const struct mtk_clk_desc wpe_desc = { 107993e9a77SChun-Jie Chen .clks = wpe_clks, 108993e9a77SChun-Jie Chen .num_clks = ARRAY_SIZE(wpe_clks), 109993e9a77SChun-Jie Chen }; 110993e9a77SChun-Jie Chen 111993e9a77SChun-Jie Chen static const struct mtk_clk_desc wpe_vpp0_desc = { 112993e9a77SChun-Jie Chen .clks = wpe_vpp0_clks, 113993e9a77SChun-Jie Chen .num_clks = ARRAY_SIZE(wpe_vpp0_clks), 114993e9a77SChun-Jie Chen }; 115993e9a77SChun-Jie Chen 116993e9a77SChun-Jie Chen static const struct mtk_clk_desc wpe_vpp1_desc = { 117993e9a77SChun-Jie Chen .clks = wpe_vpp1_clks, 118993e9a77SChun-Jie Chen .num_clks = ARRAY_SIZE(wpe_vpp1_clks), 119993e9a77SChun-Jie Chen }; 120993e9a77SChun-Jie Chen 121993e9a77SChun-Jie Chen static const struct of_device_id of_match_clk_mt8195_wpe[] = { 122993e9a77SChun-Jie Chen { 123993e9a77SChun-Jie Chen .compatible = "mediatek,mt8195-wpesys", 124993e9a77SChun-Jie Chen .data = &wpe_desc, 125993e9a77SChun-Jie Chen }, { 126993e9a77SChun-Jie Chen .compatible = "mediatek,mt8195-wpesys_vpp0", 127993e9a77SChun-Jie Chen .data = &wpe_vpp0_desc, 128993e9a77SChun-Jie Chen }, { 129993e9a77SChun-Jie Chen .compatible = "mediatek,mt8195-wpesys_vpp1", 130993e9a77SChun-Jie Chen .data = &wpe_vpp1_desc, 131993e9a77SChun-Jie Chen }, { 132993e9a77SChun-Jie Chen /* sentinel */ 133993e9a77SChun-Jie Chen } 134993e9a77SChun-Jie Chen }; 13565c9ad77SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, of_match_clk_mt8195_wpe); 136993e9a77SChun-Jie Chen 137993e9a77SChun-Jie Chen static struct platform_driver clk_mt8195_wpe_drv = { 138993e9a77SChun-Jie Chen .probe = mtk_clk_simple_probe, 139*61ca6ee7SUwe Kleine-König .remove_new = mtk_clk_simple_remove, 140993e9a77SChun-Jie Chen .driver = { 141993e9a77SChun-Jie Chen .name = "clk-mt8195-wpe", 142993e9a77SChun-Jie Chen .of_match_table = of_match_clk_mt8195_wpe, 143993e9a77SChun-Jie Chen }, 144993e9a77SChun-Jie Chen }; 145164d240dSAngeloGioacchino Del Regno module_platform_driver(clk_mt8195_wpe_drv); 146a451da86SAngeloGioacchino Del Regno MODULE_LICENSE("GPL"); 147