diff options
| author | Stephen Boyd <sboyd@kernel.org> | 2019-04-25 11:56:23 -0400 |
|---|---|---|
| committer | Stephen Boyd <sboyd@kernel.org> | 2019-04-25 11:56:23 -0400 |
| commit | d3dfc16f8fa10e026509130cd705fd7dc925c946 (patch) | |
| tree | 757c600c68d2faf318c89954b885a8a82e1d8a8f | |
| parent | 9e98c678c2d6ae3a17cb2de55d17f69dddaa231b (diff) | |
| parent | f4033db5b84ebe4b32c25ba2ed65ab20b628996a (diff) | |
Merge tag 'v5.2-rockchip-clk-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into clk-rockchip
Pull Rockchip clk driver updates from Heiko Stuebner:
- Fixes for rk3328 and rk3288
- New sub-type for an upcoming SoC where mux and divider
are not necessarily in the same register anymore
* tag 'v5.2-rockchip-clk-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
clk: rockchip: undo several noc and special clocks as critical on rk3288
clk: rockchip: add a COMPOSITE_DIV_OFFSET clock-type
clk: rockchip: Turn on "aclk_dmac1" for suspend on rk3288
clk: rockchip: Limit use of USB PHY clock to USB on rk3288
clk: rockchip: Fix video codec clocks on rk3288
clk: rockchip: Make rkpwm a critical clock on rk3288
clk: rockchip: fix wrong clock definitions for rk3328
| -rw-r--r-- | drivers/clk/rockchip/clk-rk3288.c | 36 | ||||
| -rw-r--r-- | drivers/clk/rockchip/clk-rk3328.c | 18 | ||||
| -rw-r--r-- | drivers/clk/rockchip/clk.c | 9 | ||||
| -rw-r--r-- | drivers/clk/rockchip/clk.h | 23 |
4 files changed, 60 insertions, 26 deletions
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c index 5a67b7869960..24baeb56a1b3 100644 --- a/drivers/clk/rockchip/clk-rk3288.c +++ b/drivers/clk/rockchip/clk-rk3288.c | |||
| @@ -200,8 +200,8 @@ PNAME(mux_aclk_cpu_src_p) = { "cpll_aclk_cpu", "gpll_aclk_cpu" }; | |||
| 200 | PNAME(mux_pll_src_cpll_gpll_p) = { "cpll", "gpll" }; | 200 | PNAME(mux_pll_src_cpll_gpll_p) = { "cpll", "gpll" }; |
| 201 | PNAME(mux_pll_src_npll_cpll_gpll_p) = { "npll", "cpll", "gpll" }; | 201 | PNAME(mux_pll_src_npll_cpll_gpll_p) = { "npll", "cpll", "gpll" }; |
| 202 | PNAME(mux_pll_src_cpll_gpll_npll_p) = { "cpll", "gpll", "npll" }; | 202 | PNAME(mux_pll_src_cpll_gpll_npll_p) = { "cpll", "gpll", "npll" }; |
| 203 | PNAME(mux_pll_src_cpll_gpll_usb480m_p) = { "cpll", "gpll", "usbphy480m_src" }; | 203 | PNAME(mux_pll_src_cpll_gpll_usb480m_p) = { "cpll", "gpll", "unstable:usbphy480m_src" }; |
| 204 | PNAME(mux_pll_src_cpll_gll_usb_npll_p) = { "cpll", "gpll", "usbphy480m_src", "npll" }; | 204 | PNAME(mux_pll_src_cpll_gll_usb_npll_p) = { "cpll", "gpll", "unstable:usbphy480m_src", "npll" }; |
| 205 | 205 | ||
| 206 | PNAME(mux_mmc_src_p) = { "cpll", "gpll", "xin24m", "xin24m" }; | 206 | PNAME(mux_mmc_src_p) = { "cpll", "gpll", "xin24m", "xin24m" }; |
| 207 | PNAME(mux_i2s_pre_p) = { "i2s_src", "i2s_frac", "ext_i2s", "xin12m" }; | 207 | PNAME(mux_i2s_pre_p) = { "i2s_src", "i2s_frac", "ext_i2s", "xin12m" }; |
| @@ -219,7 +219,7 @@ PNAME(mux_hsadcout_p) = { "hsadc_src", "ext_hsadc" }; | |||
| 219 | PNAME(mux_edp_24m_p) = { "ext_edp_24m", "xin24m" }; | 219 | PNAME(mux_edp_24m_p) = { "ext_edp_24m", "xin24m" }; |
| 220 | PNAME(mux_tspout_p) = { "cpll", "gpll", "npll", "xin27m" }; | 220 | PNAME(mux_tspout_p) = { "cpll", "gpll", "npll", "xin27m" }; |
| 221 | 221 | ||
| 222 | PNAME(mux_aclk_vcodec_pre_p) = { "aclk_vepu", "aclk_vdpu" }; | 222 | PNAME(mux_aclk_vcodec_pre_p) = { "aclk_vdpu", "aclk_vepu" }; |
| 223 | PNAME(mux_usbphy480m_p) = { "sclk_otgphy1_480m", "sclk_otgphy2_480m", | 223 | PNAME(mux_usbphy480m_p) = { "sclk_otgphy1_480m", "sclk_otgphy2_480m", |
| 224 | "sclk_otgphy0_480m" }; | 224 | "sclk_otgphy0_480m" }; |
| 225 | PNAME(mux_hsicphy480m_p) = { "cpll", "gpll", "usbphy480m_src" }; | 225 | PNAME(mux_hsicphy480m_p) = { "cpll", "gpll", "usbphy480m_src" }; |
| @@ -313,13 +313,13 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { | |||
| 313 | COMPOSITE_NOMUX(0, "aclk_core_mp", "armclk", CLK_IGNORE_UNUSED, | 313 | COMPOSITE_NOMUX(0, "aclk_core_mp", "armclk", CLK_IGNORE_UNUSED, |
| 314 | RK3288_CLKSEL_CON(0), 4, 4, DFLAGS | CLK_DIVIDER_READ_ONLY, | 314 | RK3288_CLKSEL_CON(0), 4, 4, DFLAGS | CLK_DIVIDER_READ_ONLY, |
| 315 | RK3288_CLKGATE_CON(12), 6, GFLAGS), | 315 | RK3288_CLKGATE_CON(12), 6, GFLAGS), |
| 316 | COMPOSITE_NOMUX(0, "atclk", "armclk", CLK_IGNORE_UNUSED, | 316 | COMPOSITE_NOMUX(0, "atclk", "armclk", 0, |
| 317 | RK3288_CLKSEL_CON(37), 4, 5, DFLAGS | CLK_DIVIDER_READ_ONLY, | 317 | RK3288_CLKSEL_CON(37), 4, 5, DFLAGS | CLK_DIVIDER_READ_ONLY, |
| 318 | RK3288_CLKGATE_CON(12), 7, GFLAGS), | 318 | RK3288_CLKGATE_CON(12), 7, GFLAGS), |
| 319 | COMPOSITE_NOMUX(0, "pclk_dbg_pre", "armclk", CLK_IGNORE_UNUSED, | 319 | COMPOSITE_NOMUX(0, "pclk_dbg_pre", "armclk", CLK_IGNORE_UNUSED, |
| 320 | RK3288_CLKSEL_CON(37), 9, 5, DFLAGS | CLK_DIVIDER_READ_ONLY, | 320 | RK3288_CLKSEL_CON(37), 9, 5, DFLAGS | CLK_DIVIDER_READ_ONLY, |
| 321 | RK3288_CLKGATE_CON(12), 8, GFLAGS), | 321 | RK3288_CLKGATE_CON(12), 8, GFLAGS), |
| 322 | GATE(0, "pclk_dbg", "pclk_dbg_pre", CLK_IGNORE_UNUSED, | 322 | GATE(0, "pclk_dbg", "pclk_dbg_pre", 0, |
| 323 | RK3288_CLKGATE_CON(12), 9, GFLAGS), | 323 | RK3288_CLKGATE_CON(12), 9, GFLAGS), |
| 324 | GATE(0, "cs_dbg", "pclk_dbg_pre", CLK_IGNORE_UNUSED, | 324 | GATE(0, "cs_dbg", "pclk_dbg_pre", CLK_IGNORE_UNUSED, |
| 325 | RK3288_CLKGATE_CON(12), 10, GFLAGS), | 325 | RK3288_CLKGATE_CON(12), 10, GFLAGS), |
| @@ -420,7 +420,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { | |||
| 420 | COMPOSITE(0, "aclk_vdpu", mux_pll_src_cpll_gpll_usb480m_p, 0, | 420 | COMPOSITE(0, "aclk_vdpu", mux_pll_src_cpll_gpll_usb480m_p, 0, |
| 421 | RK3288_CLKSEL_CON(32), 14, 2, MFLAGS, 8, 5, DFLAGS, | 421 | RK3288_CLKSEL_CON(32), 14, 2, MFLAGS, 8, 5, DFLAGS, |
| 422 | RK3288_CLKGATE_CON(3), 11, GFLAGS), | 422 | RK3288_CLKGATE_CON(3), 11, GFLAGS), |
| 423 | MUXGRF(0, "aclk_vcodec_pre", mux_aclk_vcodec_pre_p, 0, | 423 | MUXGRF(0, "aclk_vcodec_pre", mux_aclk_vcodec_pre_p, CLK_SET_RATE_PARENT, |
| 424 | RK3288_GRF_SOC_CON(0), 7, 1, MFLAGS), | 424 | RK3288_GRF_SOC_CON(0), 7, 1, MFLAGS), |
| 425 | GATE(ACLK_VCODEC, "aclk_vcodec", "aclk_vcodec_pre", 0, | 425 | GATE(ACLK_VCODEC, "aclk_vcodec", "aclk_vcodec_pre", 0, |
| 426 | RK3288_CLKGATE_CON(9), 0, GFLAGS), | 426 | RK3288_CLKGATE_CON(9), 0, GFLAGS), |
| @@ -647,7 +647,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { | |||
| 647 | INVERTER(SCLK_HSADC, "sclk_hsadc", "sclk_hsadc_out", | 647 | INVERTER(SCLK_HSADC, "sclk_hsadc", "sclk_hsadc_out", |
| 648 | RK3288_CLKSEL_CON(22), 7, IFLAGS), | 648 | RK3288_CLKSEL_CON(22), 7, IFLAGS), |
| 649 | 649 | ||
| 650 | GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, | 650 | GATE(0, "jtag", "ext_jtag", 0, |
| 651 | RK3288_CLKGATE_CON(4), 14, GFLAGS), | 651 | RK3288_CLKGATE_CON(4), 14, GFLAGS), |
| 652 | 652 | ||
| 653 | COMPOSITE_NODIV(SCLK_USBPHY480M_SRC, "usbphy480m_src", mux_usbphy480m_p, 0, | 653 | COMPOSITE_NODIV(SCLK_USBPHY480M_SRC, "usbphy480m_src", mux_usbphy480m_p, 0, |
| @@ -656,7 +656,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { | |||
| 656 | COMPOSITE_NODIV(SCLK_HSICPHY480M, "sclk_hsicphy480m", mux_hsicphy480m_p, 0, | 656 | COMPOSITE_NODIV(SCLK_HSICPHY480M, "sclk_hsicphy480m", mux_hsicphy480m_p, 0, |
| 657 | RK3288_CLKSEL_CON(29), 0, 2, MFLAGS, | 657 | RK3288_CLKSEL_CON(29), 0, 2, MFLAGS, |
| 658 | RK3288_CLKGATE_CON(3), 6, GFLAGS), | 658 | RK3288_CLKGATE_CON(3), 6, GFLAGS), |
| 659 | GATE(0, "hsicphy12m_xin12m", "xin12m", CLK_IGNORE_UNUSED, | 659 | GATE(0, "hsicphy12m_xin12m", "xin12m", 0, |
| 660 | RK3288_CLKGATE_CON(13), 9, GFLAGS), | 660 | RK3288_CLKGATE_CON(13), 9, GFLAGS), |
| 661 | DIV(0, "hsicphy12m_usbphy", "sclk_hsicphy480m", 0, | 661 | DIV(0, "hsicphy12m_usbphy", "sclk_hsicphy480m", 0, |
| 662 | RK3288_CLKSEL_CON(11), 8, 6, DFLAGS), | 662 | RK3288_CLKSEL_CON(11), 8, 6, DFLAGS), |
| @@ -697,7 +697,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { | |||
| 697 | GATE(PCLK_TZPC, "pclk_tzpc", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 3, GFLAGS), | 697 | GATE(PCLK_TZPC, "pclk_tzpc", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 3, GFLAGS), |
| 698 | GATE(PCLK_UART2, "pclk_uart2", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 9, GFLAGS), | 698 | GATE(PCLK_UART2, "pclk_uart2", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 9, GFLAGS), |
| 699 | GATE(PCLK_EFUSE256, "pclk_efuse_256", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 10, GFLAGS), | 699 | GATE(PCLK_EFUSE256, "pclk_efuse_256", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 10, GFLAGS), |
| 700 | GATE(PCLK_RKPWM, "pclk_rkpwm", "pclk_cpu", CLK_IGNORE_UNUSED, RK3288_CLKGATE_CON(11), 11, GFLAGS), | 700 | GATE(PCLK_RKPWM, "pclk_rkpwm", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 11, GFLAGS), |
| 701 | 701 | ||
| 702 | /* ddrctrl [DDR Controller PHY clock] gates */ | 702 | /* ddrctrl [DDR Controller PHY clock] gates */ |
| 703 | GATE(0, "nclk_ddrupctl0", "ddrphy", CLK_IGNORE_UNUSED, RK3288_CLKGATE_CON(11), 4, GFLAGS), | 703 | GATE(0, "nclk_ddrupctl0", "ddrphy", CLK_IGNORE_UNUSED, RK3288_CLKGATE_CON(11), 4, GFLAGS), |
| @@ -837,12 +837,9 @@ static const char *const rk3288_critical_clocks[] __initconst = { | |||
| 837 | "pclk_alive_niu", | 837 | "pclk_alive_niu", |
| 838 | "pclk_pd_pmu", | 838 | "pclk_pd_pmu", |
| 839 | "pclk_pmu_niu", | 839 | "pclk_pmu_niu", |
| 840 | "pclk_core_niu", | ||
| 841 | "pclk_ddrupctl0", | ||
| 842 | "pclk_publ0", | ||
| 843 | "pclk_ddrupctl1", | ||
| 844 | "pclk_publ1", | ||
| 845 | "pmu_hclk_otg0", | 840 | "pmu_hclk_otg0", |
| 841 | /* pwm-regulators on some boards, so handoff-critical later */ | ||
| 842 | "pclk_rkpwm", | ||
| 846 | }; | 843 | }; |
| 847 | 844 | ||
| 848 | static void __iomem *rk3288_cru_base; | 845 | static void __iomem *rk3288_cru_base; |
| @@ -859,6 +856,9 @@ static const int rk3288_saved_cru_reg_ids[] = { | |||
| 859 | RK3288_CLKSEL_CON(10), | 856 | RK3288_CLKSEL_CON(10), |
| 860 | RK3288_CLKSEL_CON(33), | 857 | RK3288_CLKSEL_CON(33), |
| 861 | RK3288_CLKSEL_CON(37), | 858 | RK3288_CLKSEL_CON(37), |
| 859 | |||
| 860 | /* We turn aclk_dmac1 on for suspend; this will restore it */ | ||
| 861 | RK3288_CLKGATE_CON(10), | ||
| 862 | }; | 862 | }; |
| 863 | 863 | ||
| 864 | static u32 rk3288_saved_cru_regs[ARRAY_SIZE(rk3288_saved_cru_reg_ids)]; | 864 | static u32 rk3288_saved_cru_regs[ARRAY_SIZE(rk3288_saved_cru_reg_ids)]; |
| @@ -875,6 +875,14 @@ static int rk3288_clk_suspend(void) | |||
| 875 | } | 875 | } |
| 876 | 876 | ||
| 877 | /* | 877 | /* |
| 878 | * Going into deep sleep (specifically setting PMU_CLR_DMA in | ||
| 879 | * RK3288_PMU_PWRMODE_CON1) appears to fail unless | ||
| 880 | * "aclk_dmac1" is on. | ||
| 881 | */ | ||
| 882 | writel_relaxed(1 << (12 + 16), | ||
| 883 | rk3288_cru_base + RK3288_CLKGATE_CON(10)); | ||
| 884 | |||
| 885 | /* | ||
| 878 | * Switch PLLs other than DPLL (for SDRAM) to slow mode to | 886 | * Switch PLLs other than DPLL (for SDRAM) to slow mode to |
| 879 | * avoid crashes on resume. The Mask ROM on the system will | 887 | * avoid crashes on resume. The Mask ROM on the system will |
| 880 | * put APLL, CPLL, and GPLL into slow mode at resume time | 888 | * put APLL, CPLL, and GPLL into slow mode at resume time |
diff --git a/drivers/clk/rockchip/clk-rk3328.c b/drivers/clk/rockchip/clk-rk3328.c index 65ab5c2f48b0..f12142d9cea2 100644 --- a/drivers/clk/rockchip/clk-rk3328.c +++ b/drivers/clk/rockchip/clk-rk3328.c | |||
| @@ -458,7 +458,7 @@ static struct rockchip_clk_branch rk3328_clk_branches[] __initdata = { | |||
| 458 | RK3328_CLKSEL_CON(35), 15, 1, MFLAGS, 8, 7, DFLAGS, | 458 | RK3328_CLKSEL_CON(35), 15, 1, MFLAGS, 8, 7, DFLAGS, |
| 459 | RK3328_CLKGATE_CON(2), 12, GFLAGS), | 459 | RK3328_CLKGATE_CON(2), 12, GFLAGS), |
| 460 | COMPOSITE(SCLK_CRYPTO, "clk_crypto", mux_2plls_p, 0, | 460 | COMPOSITE(SCLK_CRYPTO, "clk_crypto", mux_2plls_p, 0, |
| 461 | RK3328_CLKSEL_CON(20), 7, 1, MFLAGS, 0, 7, DFLAGS, | 461 | RK3328_CLKSEL_CON(20), 7, 1, MFLAGS, 0, 5, DFLAGS, |
| 462 | RK3328_CLKGATE_CON(2), 4, GFLAGS), | 462 | RK3328_CLKGATE_CON(2), 4, GFLAGS), |
| 463 | COMPOSITE_NOMUX(SCLK_TSADC, "clk_tsadc", "clk_24m", 0, | 463 | COMPOSITE_NOMUX(SCLK_TSADC, "clk_tsadc", "clk_24m", 0, |
| 464 | RK3328_CLKSEL_CON(22), 0, 10, DFLAGS, | 464 | RK3328_CLKSEL_CON(22), 0, 10, DFLAGS, |
| @@ -550,15 +550,15 @@ static struct rockchip_clk_branch rk3328_clk_branches[] __initdata = { | |||
| 550 | GATE(0, "hclk_rkvenc_niu", "hclk_rkvenc", 0, | 550 | GATE(0, "hclk_rkvenc_niu", "hclk_rkvenc", 0, |
| 551 | RK3328_CLKGATE_CON(25), 1, GFLAGS), | 551 | RK3328_CLKGATE_CON(25), 1, GFLAGS), |
| 552 | GATE(ACLK_H265, "aclk_h265", "aclk_rkvenc", 0, | 552 | GATE(ACLK_H265, "aclk_h265", "aclk_rkvenc", 0, |
| 553 | RK3328_CLKGATE_CON(25), 0, GFLAGS), | 553 | RK3328_CLKGATE_CON(25), 2, GFLAGS), |
| 554 | GATE(PCLK_H265, "pclk_h265", "hclk_rkvenc", 0, | 554 | GATE(PCLK_H265, "pclk_h265", "hclk_rkvenc", 0, |
| 555 | RK3328_CLKGATE_CON(25), 1, GFLAGS), | 555 | RK3328_CLKGATE_CON(25), 3, GFLAGS), |
| 556 | GATE(ACLK_H264, "aclk_h264", "aclk_rkvenc", 0, | 556 | GATE(ACLK_H264, "aclk_h264", "aclk_rkvenc", 0, |
| 557 | RK3328_CLKGATE_CON(25), 0, GFLAGS), | 557 | RK3328_CLKGATE_CON(25), 4, GFLAGS), |
| 558 | GATE(HCLK_H264, "hclk_h264", "hclk_rkvenc", 0, | 558 | GATE(HCLK_H264, "hclk_h264", "hclk_rkvenc", 0, |
| 559 | RK3328_CLKGATE_CON(25), 1, GFLAGS), | 559 | RK3328_CLKGATE_CON(25), 5, GFLAGS), |
| 560 | GATE(ACLK_AXISRAM, "aclk_axisram", "aclk_rkvenc", CLK_IGNORE_UNUSED, | 560 | GATE(ACLK_AXISRAM, "aclk_axisram", "aclk_rkvenc", CLK_IGNORE_UNUSED, |
| 561 | RK3328_CLKGATE_CON(25), 0, GFLAGS), | 561 | RK3328_CLKGATE_CON(25), 6, GFLAGS), |
| 562 | 562 | ||
| 563 | COMPOSITE(SCLK_VENC_CORE, "sclk_venc_core", mux_4plls_p, 0, | 563 | COMPOSITE(SCLK_VENC_CORE, "sclk_venc_core", mux_4plls_p, 0, |
| 564 | RK3328_CLKSEL_CON(51), 14, 2, MFLAGS, 8, 5, DFLAGS, | 564 | RK3328_CLKSEL_CON(51), 14, 2, MFLAGS, 8, 5, DFLAGS, |
| @@ -663,7 +663,7 @@ static struct rockchip_clk_branch rk3328_clk_branches[] __initdata = { | |||
| 663 | 663 | ||
| 664 | /* PD_GMAC */ | 664 | /* PD_GMAC */ |
| 665 | COMPOSITE(ACLK_GMAC, "aclk_gmac", mux_2plls_hdmiphy_p, 0, | 665 | COMPOSITE(ACLK_GMAC, "aclk_gmac", mux_2plls_hdmiphy_p, 0, |
| 666 | RK3328_CLKSEL_CON(35), 6, 2, MFLAGS, 0, 5, DFLAGS, | 666 | RK3328_CLKSEL_CON(25), 6, 2, MFLAGS, 0, 5, DFLAGS, |
| 667 | RK3328_CLKGATE_CON(3), 2, GFLAGS), | 667 | RK3328_CLKGATE_CON(3), 2, GFLAGS), |
| 668 | COMPOSITE_NOMUX(PCLK_GMAC, "pclk_gmac", "aclk_gmac", 0, | 668 | COMPOSITE_NOMUX(PCLK_GMAC, "pclk_gmac", "aclk_gmac", 0, |
| 669 | RK3328_CLKSEL_CON(25), 8, 3, DFLAGS, | 669 | RK3328_CLKSEL_CON(25), 8, 3, DFLAGS, |
| @@ -733,7 +733,7 @@ static struct rockchip_clk_branch rk3328_clk_branches[] __initdata = { | |||
| 733 | 733 | ||
| 734 | /* PD_PERI */ | 734 | /* PD_PERI */ |
| 735 | GATE(0, "aclk_peri_noc", "aclk_peri", CLK_IGNORE_UNUSED, RK3328_CLKGATE_CON(19), 11, GFLAGS), | 735 | GATE(0, "aclk_peri_noc", "aclk_peri", CLK_IGNORE_UNUSED, RK3328_CLKGATE_CON(19), 11, GFLAGS), |
| 736 | GATE(ACLK_USB3OTG, "aclk_usb3otg", "aclk_peri", 0, RK3328_CLKGATE_CON(19), 4, GFLAGS), | 736 | GATE(ACLK_USB3OTG, "aclk_usb3otg", "aclk_peri", 0, RK3328_CLKGATE_CON(19), 14, GFLAGS), |
| 737 | 737 | ||
| 738 | GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_peri", 0, RK3328_CLKGATE_CON(19), 0, GFLAGS), | 738 | GATE(HCLK_SDMMC, "hclk_sdmmc", "hclk_peri", 0, RK3328_CLKGATE_CON(19), 0, GFLAGS), |
| 739 | GATE(HCLK_SDIO, "hclk_sdio", "hclk_peri", 0, RK3328_CLKGATE_CON(19), 1, GFLAGS), | 739 | GATE(HCLK_SDIO, "hclk_sdio", "hclk_peri", 0, RK3328_CLKGATE_CON(19), 1, GFLAGS), |
| @@ -913,7 +913,7 @@ static void __init rk3328_clk_init(struct device_node *np) | |||
| 913 | &rk3328_cpuclk_data, rk3328_cpuclk_rates, | 913 | &rk3328_cpuclk_data, rk3328_cpuclk_rates, |
| 914 | ARRAY_SIZE(rk3328_cpuclk_rates)); | 914 | ARRAY_SIZE(rk3328_cpuclk_rates)); |
| 915 | 915 | ||
| 916 | rockchip_register_softrst(np, 11, reg_base + RK3328_SOFTRST_CON(0), | 916 | rockchip_register_softrst(np, 12, reg_base + RK3328_SOFTRST_CON(0), |
| 917 | ROCKCHIP_SOFTRST_HIWORD_MASK); | 917 | ROCKCHIP_SOFTRST_HIWORD_MASK); |
| 918 | 918 | ||
| 919 | rockchip_register_restart_notifier(ctx, RK3328_GLB_SRST_FST, NULL); | 919 | rockchip_register_restart_notifier(ctx, RK3328_GLB_SRST_FST, NULL); |
diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c index c3ad92965823..0ea8e8080d1a 100644 --- a/drivers/clk/rockchip/clk.c +++ b/drivers/clk/rockchip/clk.c | |||
| @@ -46,7 +46,7 @@ static struct clk *rockchip_clk_register_branch(const char *name, | |||
| 46 | const char *const *parent_names, u8 num_parents, | 46 | const char *const *parent_names, u8 num_parents, |
| 47 | void __iomem *base, | 47 | void __iomem *base, |
| 48 | int muxdiv_offset, u8 mux_shift, u8 mux_width, u8 mux_flags, | 48 | int muxdiv_offset, u8 mux_shift, u8 mux_width, u8 mux_flags, |
| 49 | u8 div_shift, u8 div_width, u8 div_flags, | 49 | int div_offset, u8 div_shift, u8 div_width, u8 div_flags, |
| 50 | struct clk_div_table *div_table, int gate_offset, | 50 | struct clk_div_table *div_table, int gate_offset, |
| 51 | u8 gate_shift, u8 gate_flags, unsigned long flags, | 51 | u8 gate_shift, u8 gate_flags, unsigned long flags, |
| 52 | spinlock_t *lock) | 52 | spinlock_t *lock) |
| @@ -95,7 +95,10 @@ static struct clk *rockchip_clk_register_branch(const char *name, | |||
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | div->flags = div_flags; | 97 | div->flags = div_flags; |
| 98 | div->reg = base + muxdiv_offset; | 98 | if (div_offset) |
| 99 | div->reg = base + div_offset; | ||
| 100 | else | ||
| 101 | div->reg = base + muxdiv_offset; | ||
| 99 | div->shift = div_shift; | 102 | div->shift = div_shift; |
| 100 | div->width = div_width; | 103 | div->width = div_width; |
| 101 | div->lock = lock; | 104 | div->lock = lock; |
| @@ -516,7 +519,7 @@ void __init rockchip_clk_register_branches( | |||
| 516 | ctx->reg_base, list->muxdiv_offset, | 519 | ctx->reg_base, list->muxdiv_offset, |
| 517 | list->mux_shift, | 520 | list->mux_shift, |
| 518 | list->mux_width, list->mux_flags, | 521 | list->mux_width, list->mux_flags, |
| 519 | list->div_shift, list->div_width, | 522 | list->div_offset, list->div_shift, list->div_width, |
| 520 | list->div_flags, list->div_table, | 523 | list->div_flags, list->div_table, |
| 521 | list->gate_offset, list->gate_shift, | 524 | list->gate_offset, list->gate_shift, |
| 522 | list->gate_flags, flags, &ctx->lock); | 525 | list->gate_flags, flags, &ctx->lock); |
diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h index 6b53fff4cc96..1b5270755431 100644 --- a/drivers/clk/rockchip/clk.h +++ b/drivers/clk/rockchip/clk.h | |||
| @@ -407,6 +407,7 @@ struct rockchip_clk_branch { | |||
| 407 | u8 mux_shift; | 407 | u8 mux_shift; |
| 408 | u8 mux_width; | 408 | u8 mux_width; |
| 409 | u8 mux_flags; | 409 | u8 mux_flags; |
| 410 | int div_offset; | ||
| 410 | u8 div_shift; | 411 | u8 div_shift; |
| 411 | u8 div_width; | 412 | u8 div_width; |
| 412 | u8 div_flags; | 413 | u8 div_flags; |
| @@ -438,6 +439,28 @@ struct rockchip_clk_branch { | |||
| 438 | .gate_flags = gf, \ | 439 | .gate_flags = gf, \ |
| 439 | } | 440 | } |
| 440 | 441 | ||
| 442 | #define COMPOSITE_DIV_OFFSET(_id, cname, pnames, f, mo, ms, mw, \ | ||
| 443 | mf, do, ds, dw, df, go, gs, gf) \ | ||
| 444 | { \ | ||
| 445 | .id = _id, \ | ||
| 446 | .branch_type = branch_composite, \ | ||
| 447 | .name = cname, \ | ||
| 448 | .parent_names = pnames, \ | ||
| 449 | .num_parents = ARRAY_SIZE(pnames), \ | ||
| 450 | .flags = f, \ | ||
| 451 | .muxdiv_offset = mo, \ | ||
| 452 | .mux_shift = ms, \ | ||
| 453 | .mux_width = mw, \ | ||
| 454 | .mux_flags = mf, \ | ||
| 455 | .div_offset = do, \ | ||
| 456 | .div_shift = ds, \ | ||
| 457 | .div_width = dw, \ | ||
| 458 | .div_flags = df, \ | ||
| 459 | .gate_offset = go, \ | ||
| 460 | .gate_shift = gs, \ | ||
| 461 | .gate_flags = gf, \ | ||
| 462 | } | ||
| 463 | |||
| 441 | #define COMPOSITE_NOMUX(_id, cname, pname, f, mo, ds, dw, df, \ | 464 | #define COMPOSITE_NOMUX(_id, cname, pname, f, mo, ds, dw, df, \ |
| 442 | go, gs, gf) \ | 465 | go, gs, gf) \ |
| 443 | { \ | 466 | { \ |
