aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorWeiyi Lu <weiyi.lu@mediatek.com>2018-03-12 03:03:42 -0400
committerStephen Boyd <sboyd@kernel.org>2018-03-19 17:37:40 -0400
commitf72595cf441bb534e601c609b687451cc9143f13 (patch)
treeef0343f94f85124dcb877ed15ba7d12260bade0f /drivers
parent8465baaecafc3d5c5b209a571ffbcc12983216f8 (diff)
clk: mediatek: update clock driver of MT2712
According to ECO design change, 1. add new clock mux data and change some 2. add new clock gate data and clock factor data 3. change status register offset of infra subsystem Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/clk/mediatek/clk-mt2712.c69
1 files changed, 55 insertions, 14 deletions
diff --git a/drivers/clk/mediatek/clk-mt2712.c b/drivers/clk/mediatek/clk-mt2712.c
index 498d13799388..991d4093726e 100644
--- a/drivers/clk/mediatek/clk-mt2712.c
+++ b/drivers/clk/mediatek/clk-mt2712.c
@@ -221,6 +221,8 @@ static const struct mtk_fixed_factor top_divs[] = {
221 4), 221 4),
222 FACTOR(CLK_TOP_D2A_ULCLK_6P5M, "d2a_ulclk_6p5m", "clk26m", 1, 222 FACTOR(CLK_TOP_D2A_ULCLK_6P5M, "d2a_ulclk_6p5m", "clk26m", 1,
223 4), 223 4),
224 FACTOR(CLK_TOP_APLL1_D3, "apll1_d3", "apll1_ck", 1,
225 3),
224}; 226};
225 227
226static const char * const axi_parents[] = { 228static const char * const axi_parents[] = {
@@ -625,7 +627,7 @@ static const char * const ether_125m_parents[] = {
625static const char * const ether_50m_parents[] = { 627static const char * const ether_50m_parents[] = {
626 "clk26m", 628 "clk26m",
627 "etherpll_50m", 629 "etherpll_50m",
628 "univpll_d26", 630 "apll1_d3",
629 "univpll3_d4" 631 "univpll3_d4"
630}; 632};
631 633
@@ -686,7 +688,7 @@ static const char * const i2c_parents[] = {
686 688
687static const char * const msdc0p_aes_parents[] = { 689static const char * const msdc0p_aes_parents[] = {
688 "clk26m", 690 "clk26m",
689 "msdcpll_ck", 691 "syspll_d2",
690 "univpll_d3", 692 "univpll_d3",
691 "vcodecpll_ck" 693 "vcodecpll_ck"
692}; 694};
@@ -719,6 +721,17 @@ static const char * const aud_apll2_parents[] = {
719 "clkaud_ext_i_2" 721 "clkaud_ext_i_2"
720}; 722};
721 723
724static const char * const apll1_ref_parents[] = {
725 "clkaud_ext_i_2",
726 "clkaud_ext_i_1",
727 "clki2si0_mck_i",
728 "clki2si1_mck_i",
729 "clki2si2_mck_i",
730 "clktdmin_mclk_i",
731 "clki2si2_mck_i",
732 "clktdmin_mclk_i"
733};
734
722static const char * const audull_vtx_parents[] = { 735static const char * const audull_vtx_parents[] = {
723 "d2a_ulclk_6p5m", 736 "d2a_ulclk_6p5m",
724 "clkaud_ext_i_0" 737 "clkaud_ext_i_0"
@@ -886,6 +899,10 @@ static struct mtk_composite top_muxes[] = {
886 aud_apll2_parents, 0x134, 1, 1), 899 aud_apll2_parents, 0x134, 1, 1),
887 MUX(CLK_TOP_DA_AUDULL_VTX_6P5M_SEL, "audull_vtx_sel", 900 MUX(CLK_TOP_DA_AUDULL_VTX_6P5M_SEL, "audull_vtx_sel",
888 audull_vtx_parents, 0x134, 31, 1), 901 audull_vtx_parents, 0x134, 31, 1),
902 MUX(CLK_TOP_APLL1_REF_SEL, "apll1_ref_sel",
903 apll1_ref_parents, 0x134, 4, 3),
904 MUX(CLK_TOP_APLL2_REF_SEL, "apll2_ref_sel",
905 apll1_ref_parents, 0x134, 7, 3),
889}; 906};
890 907
891static const char * const mcu_mp0_parents[] = { 908static const char * const mcu_mp0_parents[] = {
@@ -932,36 +949,56 @@ static const struct mtk_clk_divider top_adj_divs[] = {
932 DIV_ADJ(CLK_TOP_APLL_DIV7, "apll_div7", "i2si3_sel", 0x128, 24, 8), 949 DIV_ADJ(CLK_TOP_APLL_DIV7, "apll_div7", "i2si3_sel", 0x128, 24, 8),
933}; 950};
934 951
935static const struct mtk_gate_regs top_cg_regs = { 952static const struct mtk_gate_regs top0_cg_regs = {
936 .set_ofs = 0x120, 953 .set_ofs = 0x120,
937 .clr_ofs = 0x120, 954 .clr_ofs = 0x120,
938 .sta_ofs = 0x120, 955 .sta_ofs = 0x120,
939}; 956};
940 957
941#define GATE_TOP(_id, _name, _parent, _shift) { \ 958static const struct mtk_gate_regs top1_cg_regs = {
959 .set_ofs = 0x424,
960 .clr_ofs = 0x424,
961 .sta_ofs = 0x424,
962};
963
964#define GATE_TOP0(_id, _name, _parent, _shift) { \
942 .id = _id, \ 965 .id = _id, \
943 .name = _name, \ 966 .name = _name, \
944 .parent_name = _parent, \ 967 .parent_name = _parent, \
945 .regs = &top_cg_regs, \ 968 .regs = &top0_cg_regs, \
946 .shift = _shift, \ 969 .shift = _shift, \
947 .ops = &mtk_clk_gate_ops_no_setclr, \ 970 .ops = &mtk_clk_gate_ops_no_setclr, \
948 } 971 }
949 972
973#define GATE_TOP1(_id, _name, _parent, _shift) { \
974 .id = _id, \
975 .name = _name, \
976 .parent_name = _parent, \
977 .regs = &top1_cg_regs, \
978 .shift = _shift, \
979 .ops = &mtk_clk_gate_ops_no_setclr_inv, \
980 }
981
950static const struct mtk_gate top_clks[] = { 982static const struct mtk_gate top_clks[] = {
951 GATE_TOP(CLK_TOP_APLL_DIV_PDN0, "apll_div_pdn0", "i2so1_sel", 0), 983 /* TOP0 */
952 GATE_TOP(CLK_TOP_APLL_DIV_PDN1, "apll_div_pdn1", "i2so2_sel", 1), 984 GATE_TOP0(CLK_TOP_APLL_DIV_PDN0, "apll_div_pdn0", "i2so1_sel", 0),
953 GATE_TOP(CLK_TOP_APLL_DIV_PDN2, "apll_div_pdn2", "i2so3_sel", 2), 985 GATE_TOP0(CLK_TOP_APLL_DIV_PDN1, "apll_div_pdn1", "i2so2_sel", 1),
954 GATE_TOP(CLK_TOP_APLL_DIV_PDN3, "apll_div_pdn3", "tdmo0_sel", 3), 986 GATE_TOP0(CLK_TOP_APLL_DIV_PDN2, "apll_div_pdn2", "i2so3_sel", 2),
955 GATE_TOP(CLK_TOP_APLL_DIV_PDN4, "apll_div_pdn4", "tdmo1_sel", 4), 987 GATE_TOP0(CLK_TOP_APLL_DIV_PDN3, "apll_div_pdn3", "tdmo0_sel", 3),
956 GATE_TOP(CLK_TOP_APLL_DIV_PDN5, "apll_div_pdn5", "i2si1_sel", 5), 988 GATE_TOP0(CLK_TOP_APLL_DIV_PDN4, "apll_div_pdn4", "tdmo1_sel", 4),
957 GATE_TOP(CLK_TOP_APLL_DIV_PDN6, "apll_div_pdn6", "i2si2_sel", 6), 989 GATE_TOP0(CLK_TOP_APLL_DIV_PDN5, "apll_div_pdn5", "i2si1_sel", 5),
958 GATE_TOP(CLK_TOP_APLL_DIV_PDN7, "apll_div_pdn7", "i2si3_sel", 7), 990 GATE_TOP0(CLK_TOP_APLL_DIV_PDN6, "apll_div_pdn6", "i2si2_sel", 6),
991 GATE_TOP0(CLK_TOP_APLL_DIV_PDN7, "apll_div_pdn7", "i2si3_sel", 7),
992 /* TOP1 */
993 GATE_TOP1(CLK_TOP_NFI2X_EN, "nfi2x_en", "nfi2x_sel", 0),
994 GATE_TOP1(CLK_TOP_NFIECC_EN, "nfiecc_en", "nfiecc_sel", 1),
995 GATE_TOP1(CLK_TOP_NFI1X_CK_EN, "nfi1x_ck_en", "nfi2x_sel", 2),
959}; 996};
960 997
961static const struct mtk_gate_regs infra_cg_regs = { 998static const struct mtk_gate_regs infra_cg_regs = {
962 .set_ofs = 0x40, 999 .set_ofs = 0x40,
963 .clr_ofs = 0x44, 1000 .clr_ofs = 0x44,
964 .sta_ofs = 0x40, 1001 .sta_ofs = 0x48,
965}; 1002};
966 1003
967#define GATE_INFRA(_id, _name, _parent, _shift) { \ 1004#define GATE_INFRA(_id, _name, _parent, _shift) { \
@@ -1120,6 +1157,10 @@ static const struct mtk_gate peri_clks[] = {
1120 "msdc50_0_h_sel", 4), 1157 "msdc50_0_h_sel", 4),
1121 GATE_PERI2(CLK_PERI_MSDC50_3_HCLK_EN, "per_msdc50_3_h", 1158 GATE_PERI2(CLK_PERI_MSDC50_3_HCLK_EN, "per_msdc50_3_h",
1122 "msdc50_3_h_sel", 5), 1159 "msdc50_3_h_sel", 5),
1160 GATE_PERI2(CLK_PERI_MSDC30_0_QTR_EN, "per_msdc30_0_q",
1161 "axi_sel", 6),
1162 GATE_PERI2(CLK_PERI_MSDC30_3_QTR_EN, "per_msdc30_3_q",
1163 "mem_sel", 7),
1123}; 1164};
1124 1165
1125#define MT2712_PLL_FMAX (3000UL * MHZ) 1166#define MT2712_PLL_FMAX (3000UL * MHZ)