| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (c) 2014 MediaTek Inc. |
|---|
| 3 | 4 | * Author: James Liao <jamesjj.liao@mediatek.com> |
|---|
| 4 | | - * |
|---|
| 5 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 6 | | - * it under the terms of the GNU General Public License version 2 as |
|---|
| 7 | | - * published by the Free Software Foundation. |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 10 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 11 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 12 | | - * GNU General Public License for more details. |
|---|
| 13 | 5 | */ |
|---|
| 14 | 6 | |
|---|
| 15 | 7 | #include <linux/clk.h> |
|---|
| .. | .. |
|---|
| 533 | 525 | "univpll" |
|---|
| 534 | 526 | }; |
|---|
| 535 | 527 | |
|---|
| 536 | | -static const char * const ca57_parents[] __initconst = { |
|---|
| 528 | +static const char * const ca72_parents[] __initconst = { |
|---|
| 537 | 529 | "clk26m", |
|---|
| 538 | 530 | "armca15pll", |
|---|
| 539 | 531 | "mainpll", |
|---|
| .. | .. |
|---|
| 542 | 534 | |
|---|
| 543 | 535 | static const struct mtk_composite cpu_muxes[] __initconst = { |
|---|
| 544 | 536 | MUX(CLK_INFRA_CA53SEL, "infra_ca53_sel", ca53_parents, 0x0000, 0, 2), |
|---|
| 545 | | - MUX(CLK_INFRA_CA57SEL, "infra_ca57_sel", ca57_parents, 0x0000, 2, 2), |
|---|
| 537 | + MUX(CLK_INFRA_CA72SEL, "infra_ca72_sel", ca72_parents, 0x0000, 2, 2), |
|---|
| 546 | 538 | }; |
|---|
| 547 | 539 | |
|---|
| 548 | 540 | static const struct mtk_composite top_muxes[] __initconst = { |
|---|
| .. | .. |
|---|
| 759 | 751 | GATE_IMG(CLK_IMG_SEN_CAM, "img_sen_cam", "mm_sel", 8), |
|---|
| 760 | 752 | GATE_IMG(CLK_IMG_CAM_SV, "img_cam_sv", "mm_sel", 9), |
|---|
| 761 | 753 | GATE_IMG(CLK_IMG_FD, "img_fd", "mm_sel", 11), |
|---|
| 762 | | -}; |
|---|
| 763 | | - |
|---|
| 764 | | -static const struct mtk_gate_regs mm0_cg_regs __initconst = { |
|---|
| 765 | | - .set_ofs = 0x0104, |
|---|
| 766 | | - .clr_ofs = 0x0108, |
|---|
| 767 | | - .sta_ofs = 0x0100, |
|---|
| 768 | | -}; |
|---|
| 769 | | - |
|---|
| 770 | | -static const struct mtk_gate_regs mm1_cg_regs __initconst = { |
|---|
| 771 | | - .set_ofs = 0x0114, |
|---|
| 772 | | - .clr_ofs = 0x0118, |
|---|
| 773 | | - .sta_ofs = 0x0110, |
|---|
| 774 | | -}; |
|---|
| 775 | | - |
|---|
| 776 | | -#define GATE_MM0(_id, _name, _parent, _shift) { \ |
|---|
| 777 | | - .id = _id, \ |
|---|
| 778 | | - .name = _name, \ |
|---|
| 779 | | - .parent_name = _parent, \ |
|---|
| 780 | | - .regs = &mm0_cg_regs, \ |
|---|
| 781 | | - .shift = _shift, \ |
|---|
| 782 | | - .ops = &mtk_clk_gate_ops_setclr, \ |
|---|
| 783 | | - } |
|---|
| 784 | | - |
|---|
| 785 | | -#define GATE_MM1(_id, _name, _parent, _shift) { \ |
|---|
| 786 | | - .id = _id, \ |
|---|
| 787 | | - .name = _name, \ |
|---|
| 788 | | - .parent_name = _parent, \ |
|---|
| 789 | | - .regs = &mm1_cg_regs, \ |
|---|
| 790 | | - .shift = _shift, \ |
|---|
| 791 | | - .ops = &mtk_clk_gate_ops_setclr, \ |
|---|
| 792 | | - } |
|---|
| 793 | | - |
|---|
| 794 | | -static const struct mtk_gate mm_clks[] __initconst = { |
|---|
| 795 | | - /* MM0 */ |
|---|
| 796 | | - GATE_MM0(CLK_MM_SMI_COMMON, "mm_smi_common", "mm_sel", 0), |
|---|
| 797 | | - GATE_MM0(CLK_MM_SMI_LARB0, "mm_smi_larb0", "mm_sel", 1), |
|---|
| 798 | | - GATE_MM0(CLK_MM_CAM_MDP, "mm_cam_mdp", "mm_sel", 2), |
|---|
| 799 | | - GATE_MM0(CLK_MM_MDP_RDMA0, "mm_mdp_rdma0", "mm_sel", 3), |
|---|
| 800 | | - GATE_MM0(CLK_MM_MDP_RDMA1, "mm_mdp_rdma1", "mm_sel", 4), |
|---|
| 801 | | - GATE_MM0(CLK_MM_MDP_RSZ0, "mm_mdp_rsz0", "mm_sel", 5), |
|---|
| 802 | | - GATE_MM0(CLK_MM_MDP_RSZ1, "mm_mdp_rsz1", "mm_sel", 6), |
|---|
| 803 | | - GATE_MM0(CLK_MM_MDP_RSZ2, "mm_mdp_rsz2", "mm_sel", 7), |
|---|
| 804 | | - GATE_MM0(CLK_MM_MDP_TDSHP0, "mm_mdp_tdshp0", "mm_sel", 8), |
|---|
| 805 | | - GATE_MM0(CLK_MM_MDP_TDSHP1, "mm_mdp_tdshp1", "mm_sel", 9), |
|---|
| 806 | | - GATE_MM0(CLK_MM_MDP_WDMA, "mm_mdp_wdma", "mm_sel", 11), |
|---|
| 807 | | - GATE_MM0(CLK_MM_MDP_WROT0, "mm_mdp_wrot0", "mm_sel", 12), |
|---|
| 808 | | - GATE_MM0(CLK_MM_MDP_WROT1, "mm_mdp_wrot1", "mm_sel", 13), |
|---|
| 809 | | - GATE_MM0(CLK_MM_FAKE_ENG, "mm_fake_eng", "mm_sel", 14), |
|---|
| 810 | | - GATE_MM0(CLK_MM_MUTEX_32K, "mm_mutex_32k", "rtc_sel", 15), |
|---|
| 811 | | - GATE_MM0(CLK_MM_DISP_OVL0, "mm_disp_ovl0", "mm_sel", 16), |
|---|
| 812 | | - GATE_MM0(CLK_MM_DISP_OVL1, "mm_disp_ovl1", "mm_sel", 17), |
|---|
| 813 | | - GATE_MM0(CLK_MM_DISP_RDMA0, "mm_disp_rdma0", "mm_sel", 18), |
|---|
| 814 | | - GATE_MM0(CLK_MM_DISP_RDMA1, "mm_disp_rdma1", "mm_sel", 19), |
|---|
| 815 | | - GATE_MM0(CLK_MM_DISP_RDMA2, "mm_disp_rdma2", "mm_sel", 20), |
|---|
| 816 | | - GATE_MM0(CLK_MM_DISP_WDMA0, "mm_disp_wdma0", "mm_sel", 21), |
|---|
| 817 | | - GATE_MM0(CLK_MM_DISP_WDMA1, "mm_disp_wdma1", "mm_sel", 22), |
|---|
| 818 | | - GATE_MM0(CLK_MM_DISP_COLOR0, "mm_disp_color0", "mm_sel", 23), |
|---|
| 819 | | - GATE_MM0(CLK_MM_DISP_COLOR1, "mm_disp_color1", "mm_sel", 24), |
|---|
| 820 | | - GATE_MM0(CLK_MM_DISP_AAL, "mm_disp_aal", "mm_sel", 25), |
|---|
| 821 | | - GATE_MM0(CLK_MM_DISP_GAMMA, "mm_disp_gamma", "mm_sel", 26), |
|---|
| 822 | | - GATE_MM0(CLK_MM_DISP_UFOE, "mm_disp_ufoe", "mm_sel", 27), |
|---|
| 823 | | - GATE_MM0(CLK_MM_DISP_SPLIT0, "mm_disp_split0", "mm_sel", 28), |
|---|
| 824 | | - GATE_MM0(CLK_MM_DISP_SPLIT1, "mm_disp_split1", "mm_sel", 29), |
|---|
| 825 | | - GATE_MM0(CLK_MM_DISP_MERGE, "mm_disp_merge", "mm_sel", 30), |
|---|
| 826 | | - GATE_MM0(CLK_MM_DISP_OD, "mm_disp_od", "mm_sel", 31), |
|---|
| 827 | | - /* MM1 */ |
|---|
| 828 | | - GATE_MM1(CLK_MM_DISP_PWM0MM, "mm_disp_pwm0mm", "mm_sel", 0), |
|---|
| 829 | | - GATE_MM1(CLK_MM_DISP_PWM026M, "mm_disp_pwm026m", "pwm_sel", 1), |
|---|
| 830 | | - GATE_MM1(CLK_MM_DISP_PWM1MM, "mm_disp_pwm1mm", "mm_sel", 2), |
|---|
| 831 | | - GATE_MM1(CLK_MM_DISP_PWM126M, "mm_disp_pwm126m", "pwm_sel", 3), |
|---|
| 832 | | - GATE_MM1(CLK_MM_DSI0_ENGINE, "mm_dsi0_engine", "mm_sel", 4), |
|---|
| 833 | | - GATE_MM1(CLK_MM_DSI0_DIGITAL, "mm_dsi0_digital", "dsi0_dig", 5), |
|---|
| 834 | | - GATE_MM1(CLK_MM_DSI1_ENGINE, "mm_dsi1_engine", "mm_sel", 6), |
|---|
| 835 | | - GATE_MM1(CLK_MM_DSI1_DIGITAL, "mm_dsi1_digital", "dsi1_dig", 7), |
|---|
| 836 | | - GATE_MM1(CLK_MM_DPI_PIXEL, "mm_dpi_pixel", "dpi0_sel", 8), |
|---|
| 837 | | - GATE_MM1(CLK_MM_DPI_ENGINE, "mm_dpi_engine", "mm_sel", 9), |
|---|
| 838 | | - GATE_MM1(CLK_MM_DPI1_PIXEL, "mm_dpi1_pixel", "lvds_pxl", 10), |
|---|
| 839 | | - GATE_MM1(CLK_MM_DPI1_ENGINE, "mm_dpi1_engine", "mm_sel", 11), |
|---|
| 840 | | - GATE_MM1(CLK_MM_HDMI_PIXEL, "mm_hdmi_pixel", "dpi0_sel", 12), |
|---|
| 841 | | - GATE_MM1(CLK_MM_HDMI_PLLCK, "mm_hdmi_pllck", "hdmi_sel", 13), |
|---|
| 842 | | - GATE_MM1(CLK_MM_HDMI_AUDIO, "mm_hdmi_audio", "apll1", 14), |
|---|
| 843 | | - GATE_MM1(CLK_MM_HDMI_SPDIF, "mm_hdmi_spdif", "apll2", 15), |
|---|
| 844 | | - GATE_MM1(CLK_MM_LVDS_PIXEL, "mm_lvds_pixel", "lvds_pxl", 16), |
|---|
| 845 | | - GATE_MM1(CLK_MM_LVDS_CTS, "mm_lvds_cts", "lvds_cts", 17), |
|---|
| 846 | | - GATE_MM1(CLK_MM_SMI_LARB4, "mm_smi_larb4", "mm_sel", 18), |
|---|
| 847 | | - GATE_MM1(CLK_MM_HDMI_HDCP, "mm_hdmi_hdcp", "hdcp_sel", 19), |
|---|
| 848 | | - GATE_MM1(CLK_MM_HDMI_HDCP24M, "mm_hdmi_hdcp24m", "hdcp_24m_sel", 20), |
|---|
| 849 | 754 | }; |
|---|
| 850 | 755 | |
|---|
| 851 | 756 | static const struct mtk_gate_regs vdec0_cg_regs __initconst = { |
|---|
| .. | .. |
|---|
| 1151 | 1056 | __func__, r); |
|---|
| 1152 | 1057 | } |
|---|
| 1153 | 1058 | CLK_OF_DECLARE(mtk_imgsys, "mediatek,mt8173-imgsys", mtk_imgsys_init); |
|---|
| 1154 | | - |
|---|
| 1155 | | -static void __init mtk_mmsys_init(struct device_node *node) |
|---|
| 1156 | | -{ |
|---|
| 1157 | | - struct clk_onecell_data *clk_data; |
|---|
| 1158 | | - int r; |
|---|
| 1159 | | - |
|---|
| 1160 | | - clk_data = mtk_alloc_clk_data(CLK_MM_NR_CLK); |
|---|
| 1161 | | - |
|---|
| 1162 | | - mtk_clk_register_gates(node, mm_clks, ARRAY_SIZE(mm_clks), |
|---|
| 1163 | | - clk_data); |
|---|
| 1164 | | - |
|---|
| 1165 | | - r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
|---|
| 1166 | | - if (r) |
|---|
| 1167 | | - pr_err("%s(): could not register clock provider: %d\n", |
|---|
| 1168 | | - __func__, r); |
|---|
| 1169 | | -} |
|---|
| 1170 | | -CLK_OF_DECLARE(mtk_mmsys, "mediatek,mt8173-mmsys", mtk_mmsys_init); |
|---|
| 1171 | 1059 | |
|---|
| 1172 | 1060 | static void __init mtk_vdecsys_init(struct device_node *node) |
|---|
| 1173 | 1061 | { |
|---|