diff options
| author | Mike Turquette <mturquette@linaro.org> | 2014-09-30 02:43:12 -0400 |
|---|---|---|
| committer | Mike Turquette <mturquette@linaro.org> | 2014-09-30 02:43:12 -0400 |
| commit | 24afc3852e5ec9c35de5ae1b3c4f9e4ecbf53cb6 (patch) | |
| tree | 77674714fbc196c028ed2a08a96192d26d9512e6 | |
| parent | 82de1bc86c493ad832db270635fbf4e8c237f02f (diff) | |
| parent | fa0111be4ff30150720db3c3e5ee8d7823921639 (diff) | |
Merge tag 'for_3.18/samsung-clk' of git://git.kernel.org/pub/scm/linux/kernel/git/tfiga/samsung-clk into clk-next
Samsung clock patches for v3.18
1) non-critical fixes (without the need to push to stable)
fa0111be4ff3 clk: samsung: exynos4: remove duplicate div_core2 divider clock instantiation
b511593d7165 clk: samsung: exynos4: fix g3d clocks
c14254300131 clk: samsung: exynos4: add missing smmu_g2d clock and update comments
22842d244af3 clk: samsung: exynos5260: fix typo in clock name
e82ba578ccde clk: samsung: exynos3250: fix width field of mout_mmc0/1
59037b92f440 clk: samsung: exynos3250: fix width and shift of div_spi0_isp clock
5ce37f266650 clk: samsung: exynos3250: fix mout_cam_blk parent list
2) Clock driver extensions
07ccf02ba5c3 dt-bindings: clk: samsung: Document the DMC domain of Exynos3250 CMU
d0e73eaf1925 ARM: dts: exynos3250: Add CMU node for DMC domain clocks
e3c3f19bc618 clk: samsung: exynos3250: Register DMC clk provider
4676f0aab9dc clk: samsung: exynos4: add support for MOUT_HDMI and MOUT_MIXER clocks
| -rw-r--r-- | Documentation/devicetree/bindings/clock/exynos3250-clock.txt | 10 | ||||
| -rw-r--r-- | arch/arm/boot/dts/exynos3250.dtsi | 6 | ||||
| -rw-r--r-- | drivers/clk/samsung/clk-exynos3250.c | 202 | ||||
| -rw-r--r-- | drivers/clk/samsung/clk-exynos4.c | 18 | ||||
| -rw-r--r-- | drivers/clk/samsung/clk-exynos5260.c | 2 | ||||
| -rw-r--r-- | include/dt-bindings/clock/exynos3250.h | 27 | ||||
| -rw-r--r-- | include/dt-bindings/clock/exynos4.h | 12 |
7 files changed, 257 insertions, 20 deletions
diff --git a/Documentation/devicetree/bindings/clock/exynos3250-clock.txt b/Documentation/devicetree/bindings/clock/exynos3250-clock.txt index aadc9c59e2d1..f57d9dd9ea85 100644 --- a/Documentation/devicetree/bindings/clock/exynos3250-clock.txt +++ b/Documentation/devicetree/bindings/clock/exynos3250-clock.txt | |||
| @@ -7,6 +7,8 @@ Required Properties: | |||
| 7 | 7 | ||
| 8 | - compatible: should be one of the following. | 8 | - compatible: should be one of the following. |
| 9 | - "samsung,exynos3250-cmu" - controller compatible with Exynos3250 SoC. | 9 | - "samsung,exynos3250-cmu" - controller compatible with Exynos3250 SoC. |
| 10 | - "samsung,exynos3250-cmu-dmc" - controller compatible with | ||
| 11 | Exynos3250 SoC for Dynamic Memory Controller domain. | ||
| 10 | 12 | ||
| 11 | - reg: physical base address of the controller and length of memory mapped | 13 | - reg: physical base address of the controller and length of memory mapped |
| 12 | region. | 14 | region. |
| @@ -20,7 +22,7 @@ All available clocks are defined as preprocessor macros in | |||
| 20 | dt-bindings/clock/exynos3250.h header and can be used in device | 22 | dt-bindings/clock/exynos3250.h header and can be used in device |
| 21 | tree sources. | 23 | tree sources. |
| 22 | 24 | ||
| 23 | Example 1: An example of a clock controller node is listed below. | 25 | Example 1: Examples of clock controller nodes are listed below. |
| 24 | 26 | ||
| 25 | cmu: clock-controller@10030000 { | 27 | cmu: clock-controller@10030000 { |
| 26 | compatible = "samsung,exynos3250-cmu"; | 28 | compatible = "samsung,exynos3250-cmu"; |
| @@ -28,6 +30,12 @@ Example 1: An example of a clock controller node is listed below. | |||
| 28 | #clock-cells = <1>; | 30 | #clock-cells = <1>; |
| 29 | }; | 31 | }; |
| 30 | 32 | ||
| 33 | cmu_dmc: clock-controller@105C0000 { | ||
| 34 | compatible = "samsung,exynos3250-cmu-dmc"; | ||
| 35 | reg = <0x105C0000 0x2000>; | ||
| 36 | #clock-cells = <1>; | ||
| 37 | }; | ||
| 38 | |||
| 31 | Example 2: UART controller node that consumes the clock generated by the clock | 39 | Example 2: UART controller node that consumes the clock generated by the clock |
| 32 | controller. Refer to the standard clock bindings for information | 40 | controller. Refer to the standard clock bindings for information |
| 33 | about 'clocks' and 'clock-names' property. | 41 | about 'clocks' and 'clock-names' property. |
diff --git a/arch/arm/boot/dts/exynos3250.dtsi b/arch/arm/boot/dts/exynos3250.dtsi index 1d52de6370d5..72bf1b573788 100644 --- a/arch/arm/boot/dts/exynos3250.dtsi +++ b/arch/arm/boot/dts/exynos3250.dtsi | |||
| @@ -163,6 +163,12 @@ | |||
| 163 | #clock-cells = <1>; | 163 | #clock-cells = <1>; |
| 164 | }; | 164 | }; |
| 165 | 165 | ||
| 166 | cmu_dmc: clock-controller@105C0000 { | ||
| 167 | compatible = "samsung,exynos3250-cmu-dmc"; | ||
| 168 | reg = <0x105C0000 0x2000>; | ||
| 169 | #clock-cells = <1>; | ||
| 170 | }; | ||
| 171 | |||
| 166 | rtc: rtc@10070000 { | 172 | rtc: rtc@10070000 { |
| 167 | compatible = "samsung,s3c6410-rtc"; | 173 | compatible = "samsung,s3c6410-rtc"; |
| 168 | reg = <0x10070000 0x100>; | 174 | reg = <0x10070000 0x100>; |
diff --git a/drivers/clk/samsung/clk-exynos3250.c b/drivers/clk/samsung/clk-exynos3250.c index dc85f8e7a2d7..6e6cca392082 100644 --- a/drivers/clk/samsung/clk-exynos3250.c +++ b/drivers/clk/samsung/clk-exynos3250.c | |||
| @@ -110,7 +110,14 @@ enum exynos3250_plls { | |||
| 110 | nr_plls | 110 | nr_plls |
| 111 | }; | 111 | }; |
| 112 | 112 | ||
| 113 | /* list of PLLs in DMC block to be registered */ | ||
| 114 | enum exynos3250_dmc_plls { | ||
| 115 | bpll, epll, | ||
| 116 | nr_dmc_plls | ||
| 117 | }; | ||
| 118 | |||
| 113 | static void __iomem *reg_base; | 119 | static void __iomem *reg_base; |
| 120 | static void __iomem *dmc_reg_base; | ||
| 114 | 121 | ||
| 115 | /* | 122 | /* |
| 116 | * Support for CMU save/restore across system suspends | 123 | * Support for CMU save/restore across system suspends |
| @@ -266,6 +273,7 @@ PNAME(group_sclk_cam_blk_p) = { "xxti", "xusbxti", | |||
| 266 | "none", "none", "none", | 273 | "none", "none", "none", |
| 267 | "none", "div_mpll_pre", | 274 | "none", "div_mpll_pre", |
| 268 | "mout_epll_user", "mout_vpll", | 275 | "mout_epll_user", "mout_vpll", |
| 276 | "none", "none", "none", | ||
| 269 | "div_cam_blk_320", }; | 277 | "div_cam_blk_320", }; |
| 270 | PNAME(group_sclk_fimd0_p) = { "xxti", "xusbxti", | 278 | PNAME(group_sclk_fimd0_p) = { "xxti", "xusbxti", |
| 271 | "m_bitclkhsdiv4_2l", "none", | 279 | "m_bitclkhsdiv4_2l", "none", |
| @@ -353,8 +361,8 @@ static struct samsung_mux_clock mux_clks[] __initdata = { | |||
| 353 | 361 | ||
| 354 | /* SRC_FSYS */ | 362 | /* SRC_FSYS */ |
| 355 | MUX(CLK_MOUT_TSADC, "mout_tsadc", group_sclk_p, SRC_FSYS, 28, 4), | 363 | MUX(CLK_MOUT_TSADC, "mout_tsadc", group_sclk_p, SRC_FSYS, 28, 4), |
| 356 | MUX(CLK_MOUT_MMC1, "mout_mmc1", group_sclk_p, SRC_FSYS, 4, 3), | 364 | MUX(CLK_MOUT_MMC1, "mout_mmc1", group_sclk_p, SRC_FSYS, 4, 4), |
| 357 | MUX(CLK_MOUT_MMC0, "mout_mmc0", group_sclk_p, SRC_FSYS, 0, 3), | 365 | MUX(CLK_MOUT_MMC0, "mout_mmc0", group_sclk_p, SRC_FSYS, 0, 4), |
| 358 | 366 | ||
| 359 | /* SRC_PERIL0 */ | 367 | /* SRC_PERIL0 */ |
| 360 | MUX(CLK_MOUT_UART1, "mout_uart1", group_sclk_p, SRC_PERIL0, 4, 4), | 368 | MUX(CLK_MOUT_UART1, "mout_uart1", group_sclk_p, SRC_PERIL0, 4, 4), |
| @@ -423,7 +431,7 @@ static struct samsung_div_clock div_clks[] __initdata = { | |||
| 423 | DIV(CLK_DIV_SPI1_ISP, "div_spi1_isp", "mout_spi1_isp", DIV_ISP, 16, 4), | 431 | DIV(CLK_DIV_SPI1_ISP, "div_spi1_isp", "mout_spi1_isp", DIV_ISP, 16, 4), |
| 424 | DIV_F(CLK_DIV_SPI0_ISP_PRE, "div_spi0_isp_pre", "div_spi0_isp", | 432 | DIV_F(CLK_DIV_SPI0_ISP_PRE, "div_spi0_isp_pre", "div_spi0_isp", |
| 425 | DIV_ISP, 8, 8, CLK_SET_RATE_PARENT, 0), | 433 | DIV_ISP, 8, 8, CLK_SET_RATE_PARENT, 0), |
| 426 | DIV(CLK_DIV_SPI0_ISP, "div_spi0_isp", "mout_spi0_isp", DIV_ISP, 0, 4), | 434 | DIV(CLK_DIV_SPI0_ISP, "div_spi0_isp", "mout_spi0_isp", DIV_ISP, 4, 4), |
| 427 | 435 | ||
| 428 | /* DIV_FSYS0 */ | 436 | /* DIV_FSYS0 */ |
| 429 | DIV_F(CLK_DIV_TSADC_PRE, "div_tsadc_pre", "div_tsadc", DIV_FSYS0, 8, 8, | 437 | DIV_F(CLK_DIV_TSADC_PRE, "div_tsadc_pre", "div_tsadc", DIV_FSYS0, 8, 8, |
| @@ -724,6 +732,25 @@ static struct samsung_pll_rate_table exynos3250_pll_rates[] = { | |||
| 724 | { /* sentinel */ } | 732 | { /* sentinel */ } |
| 725 | }; | 733 | }; |
| 726 | 734 | ||
| 735 | /* EPLL */ | ||
| 736 | static struct samsung_pll_rate_table exynos3250_epll_rates[] = { | ||
| 737 | PLL_36XX_RATE(800000000, 200, 3, 1, 0), | ||
| 738 | PLL_36XX_RATE(288000000, 96, 2, 2, 0), | ||
| 739 | PLL_36XX_RATE(192000000, 128, 2, 3, 0), | ||
| 740 | PLL_36XX_RATE(144000000, 96, 2, 3, 0), | ||
| 741 | PLL_36XX_RATE( 96000000, 128, 2, 4, 0), | ||
| 742 | PLL_36XX_RATE( 84000000, 112, 2, 4, 0), | ||
| 743 | PLL_36XX_RATE( 80000004, 106, 2, 4, 43691), | ||
| 744 | PLL_36XX_RATE( 73728000, 98, 2, 4, 19923), | ||
| 745 | PLL_36XX_RATE( 67737598, 270, 3, 5, 62285), | ||
| 746 | PLL_36XX_RATE( 65535999, 174, 2, 5, 49982), | ||
| 747 | PLL_36XX_RATE( 50000000, 200, 3, 5, 0), | ||
| 748 | PLL_36XX_RATE( 49152002, 131, 2, 5, 4719), | ||
| 749 | PLL_36XX_RATE( 48000000, 128, 2, 5, 0), | ||
| 750 | PLL_36XX_RATE( 45158401, 180, 3, 5, 41524), | ||
| 751 | { /* sentinel */ } | ||
| 752 | }; | ||
| 753 | |||
| 727 | /* VPLL */ | 754 | /* VPLL */ |
| 728 | static struct samsung_pll_rate_table exynos3250_vpll_rates[] = { | 755 | static struct samsung_pll_rate_table exynos3250_vpll_rates[] = { |
| 729 | PLL_36XX_RATE(600000000, 100, 2, 1, 0), | 756 | PLL_36XX_RATE(600000000, 100, 2, 1, 0), |
| @@ -821,3 +848,172 @@ static void __init exynos3250_cmu_init(struct device_node *np) | |||
| 821 | samsung_clk_of_add_provider(np, ctx); | 848 | samsung_clk_of_add_provider(np, ctx); |
| 822 | } | 849 | } |
| 823 | CLK_OF_DECLARE(exynos3250_cmu, "samsung,exynos3250-cmu", exynos3250_cmu_init); | 850 | CLK_OF_DECLARE(exynos3250_cmu, "samsung,exynos3250-cmu", exynos3250_cmu_init); |
| 851 | |||
| 852 | /* | ||
| 853 | * CMU DMC | ||
| 854 | */ | ||
| 855 | |||
| 856 | #define BPLL_LOCK 0x0118 | ||
| 857 | #define BPLL_CON0 0x0218 | ||
| 858 | #define BPLL_CON1 0x021c | ||
| 859 | #define BPLL_CON2 0x0220 | ||
| 860 | #define SRC_DMC 0x0300 | ||
| 861 | #define DIV_DMC1 0x0504 | ||
| 862 | #define GATE_BUS_DMC0 0x0700 | ||
| 863 | #define GATE_BUS_DMC1 0x0704 | ||
| 864 | #define GATE_BUS_DMC2 0x0708 | ||
| 865 | #define GATE_BUS_DMC3 0x070c | ||
| 866 | #define GATE_SCLK_DMC 0x0800 | ||
| 867 | #define GATE_IP_DMC0 0x0900 | ||
| 868 | #define GATE_IP_DMC1 0x0904 | ||
| 869 | #define EPLL_LOCK 0x1110 | ||
