From: Tomasz Figa <tomasz.figa@gmail.com> To: Chander Kashyap <chander.kashyap@linaro.org> Cc: linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-serial@vger.kernel.org, kgene.kim@samsung.com, t.figa@samsung.com, s.nawrocki@samsung.com, thomas.ab@samsung.com, Thomas Abraham <thomas.abraham@linaro.org> Subject: Re: [PATCH 09/13] clk: exynos5420: register clocks using common clock framework Date: Sat, 08 Jun 2013 13:25:34 +0200 [thread overview] Message-ID: <3151459.QxR0ltoTsu@flatron> (raw) In-Reply-To: <1370516488-25860-9-git-send-email-chander.kashyap@linaro.org> Hi Chander, Thomas, On Thursday 06 of June 2013 16:31:23 Chander Kashyap wrote: > The Exynos5420 clocks are statically listed and registered using the > Samsung specific common clock helper functions. Is the clock tree of Exynos5420 really so much different from Exynos5250 that it needs a separate driver? Just asking out of curiousity, as I haven't an opportunity to look at Exynos5420 yet. Best regards, Tomasz > Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org> > Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org> > --- > .../devicetree/bindings/clock/exynos5420-clock.txt | 201 ++++++ > drivers/clk/samsung/Makefile | 1 + > drivers/clk/samsung/clk-exynos5420.c | 762 > ++++++++++++++++++++ 3 files changed, 964 insertions(+) > create mode 100644 > Documentation/devicetree/bindings/clock/exynos5420-clock.txt create > mode 100644 drivers/clk/samsung/clk-exynos5420.c > > diff --git > a/Documentation/devicetree/bindings/clock/exynos5420-clock.txt > b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt new file > mode 100644 > index 0000000..72d25fc > --- /dev/null > +++ b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt > @@ -0,0 +1,201 @@ > +* Samsung Exynos5420 Clock Controller > + > +The Exynos5420 clock controller generates and supplies clock to various > +controllers within the Exynos5420 SoC. > + > +Required Properties: > + > +- comptible: should be one of the following. > + - "samsung,exynos5420-clock" - controller compatible with Exynos5420 > SoC. + > +- reg: physical base address of the controller and length of memory > mapped + region. > + > +- #clock-cells: should be 1. > + > +The following is the list of clocks generated by the controller. Each > clock is +assigned an identifier and client nodes use this identifier > to specify the +clock which they consume. > + > + > + [Core Clocks] > + > + Clock ID > + ---------------------------- > + > + oscclk 1 > + > + [Clock Gate for Special Clocks] > + > + Clock ID > + ---------------------------- > + sclk_uart0 128 > + sclk_uart1 129 > + sclk_uart2 130 > + sclk_uart3 131 > + sclk_mmc0 132 > + sclk_mmc1 132 > + sclk_mmc2 133 > + sclk_spi0 134 > + sclk_spi1 135 > + sclk_spi2 136 > + sclk_i2s1 137 > + sclk_i2s2 138 > + sclk_pcm1 139 > + sclk_pcm2 140 > + sclk_spdif 141 > + sclk_hdmi 142 > + sclk_pixel 143 > + sclk_dp1 144 > + sclk_mipi1 145 > + sclk_fimd1 146 > + sclk_maudio0 147 > + sclk_maupcm0 148 > + sclk_usbd300 149 > + sclk_usbd301 150 > + sclk_usbphy300 151 > + sclk_usbphy301 152 > + sclk_unipro 153 > + sclk_pwm 154 > + sclk_gscl_wa 155 > + sclk_gscl_wb 156 > + > + [Peripheral Clock Gates] > + > + Clock ID > + ---------------------------- > + > + aclk66_peric 256 > + uart0 257 > + uart1 258 > + uart2 259 > + uart3 260 > + i2c0 261 > + i2c1 262 > + i2c2 263 > + i2c3 264 > + i2c4 265 > + i2c5 266 > + i2c6 267 > + i2c7 268 > + i2c_hdmi 269 > + tsadc 270 > + spi0 271 > + spi1 272 > + spi2 273 > + keyif 274 > + i2s1 275 > + i2s2 276 > + pcm1 277 > + pcm2 278 > + pwm 279 > + spdif 280 > + i2c8 281 > + i2c9 282 > + i2c10 283 > + aclk66_psgen 300 > + chipid 301 > + sysreg 302 > + tzpc0 303 > + tzpc1 304 > + tzpc2 305 > + tzpc3 306 > + tzpc4 307 > + tzpc5 308 > + tzpc6 309 > + tzpc7 310 > + tzpc8 311 > + tzpc9 312 > + hdmi_cec 313 > + seckey 314 > + mct 315 > + wdt 316 > + rtc 317 > + tmu 318 > + tmu_gpu 319 > + pclk66_gpio 330 > + aclk200_fsys2 350 > + mmc0 351 > + mmc1 352 > + mmc2 353 > + sromc 354 > + ufs 355 > + aclk200_fsys 360 > + tsi 361 > + pdma0 362 > + pdma1 363 > + rtic 364 > + usbh20 365 > + usbd300 366 > + usbd301 377 > + aclk400_mscl 380 > + mscl0 381 > + mscl1 382 > + mscl2 383 > + smmu_mscl0 384 > + smmu_mscl1 385 > + smmu_mscl2 386 > + aclk333 400 > + mfc 401 > + smmu_mfcl 402 > + smmu_mfcr 403 > + aclk200_disp1 410 > + dsim1 411 > + dp1 412 > + hdmi 413 > + aclk300_disp1 420 > + fimd1 421 > + smmu_fimd1 422 > + aclk166 430 > + mixer 431 > + aclk266 440 > + rotator 441 > + mdma1 442 > + smmu_rotator 443 > + smmu_mdma1 444 > + aclk300_jpeg 450 > + jpeg 451 > + jpeg2 452 > + smmu_jpeg 453 > + aclk300_gscl 460 > + smmu_gscl0 461 > + smmu_gscl1 462 > + gscl_wa 463 > + gscl_wb 464 > + gscl0 465 > + gscl1 466 > + clk_3aa 467 > + aclk266_g2d 470 > + sss 471 > + slim_sss 472 > + mdma0 473 > + aclk333_g2d 480 > + g2d 481 > + aclk333_432_gscl 490 > + smmu_3aa 491 > + smmu_fimcl0 492 > + smmu_fimcl1 493 > + smmu_fimcl3 494 > + fimc_lite3 495 > + aclk_g3d 500 > + g3d 501 > + > +Example 1: An example of a clock controller node is listed below. > + > + clock: clock-controller@0x10010000 { > + compatible = "samsung,exynos5420-clock"; > + reg = <0x10010000 0x30000>; > + #clock-cells = <1>; > + }; > + > +Example 2: UART controller node that consumes the clock generated by > the clock + controller. Refer to the standard clock bindings for > information + about 'clocks' and 'clock-names' property. > + > + serial@13820000 { > + compatible = "samsung,exynos4210-uart"; > + reg = <0x13820000 0x100>; > + interrupts = <0 54 0>; > + clocks = <&clock 259>, <&clock 130>; > + clock-names = "uart", "clk_uart_baud0"; > + }; > diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile > index b7c232e..603ba4b 100644 > --- a/drivers/clk/samsung/Makefile > +++ b/drivers/clk/samsung/Makefile > @@ -5,4 +5,5 @@ > obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o > obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o > obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o > +obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o > obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o > diff --git a/drivers/clk/samsung/clk-exynos5420.c > b/drivers/clk/samsung/clk-exynos5420.c new file mode 100644 > index 0000000..76ff872 > --- /dev/null > +++ b/drivers/clk/samsung/clk-exynos5420.c > @@ -0,0 +1,762 @@ > +/* > + * Copyright (c) 2013 Samsung Electronics Co., Ltd. > + * Authors: Thomas Abraham <thomas.ab@samsung.com> > + * Chander Kashyap <k.chander@samsung.com> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as + > * published by the Free Software Foundation. > + * > + * Common Clock Framework support for Exynos5420 SoC. > +*/ > + > +#include <linux/clk.h> > +#include <linux/clkdev.h> > +#include <linux/clk-provider.h> > +#include <linux/of.h> > +#include <linux/of_address.h> > + > +#include "clk.h" > +#include "clk-pll.h" > + > +#define SRC_CPU 0x200 > +#define DIV_CPU0 0x500 > +#define DIV_CPU1 0x504 > +#define GATE_BUS_CPU 0x700 > +#define GATE_SCLK_CPU 0x800 > +#define SRC_TOP0 0x10200 > +#define SRC_TOP1 0x10204 > +#define SRC_TOP2 0x10208 > +#define SRC_TOP3 0x1020c > +#define SRC_TOP4 0x10210 > +#define SRC_TOP5 0x10214 > +#define SRC_TOP6 0x10218 > +#define SRC_TOP7 0x1021c > +#define SRC_DISP10 0x1022c > +#define SRC_MAU 0x10240 > +#define SRC_FSYS 0x10244 > +#define SRC_PERIC0 0x10250 > +#define SRC_PERIC1 0x10254 > +#define SRC_TOP10 0x10280 > +#define SRC_TOP11 0x10284 > +#define SRC_TOP12 0x10288 > +#define SRC_MASK_DISP10 0x1032c > +#define SRC_MASK_FSYS 0x10340 > +#define SRC_MASK_PERIC0 0x10350 > +#define SRC_MASK_PERIC1 0x10354 > +#define DIV_TOP0 0x10500 > +#define DIV_TOP1 0x10504 > +#define DIV_TOP2 0x10508 > +#define DIV_DISP10 0x1052c > +#define DIV_MAU 0x10544 > +#define DIV_FSYS0 0x10548 > +#define DIV_FSYS1 0x1054c > +#define DIV_FSYS2 0x10550 > +#define DIV_PERIC0 0x10558 > +#define DIV_PERIC1 0x1055c > +#define DIV_PERIC2 0x10560 > +#define DIV_PERIC3 0x10564 > +#define DIV_PERIC4 0x10568 > +#define GATE_BUS_TOP 0x10700 > +#define GATE_BUS_FSYS0 0x10740 > +#define GATE_BUS_PERIC 0x10750 > +#define GATE_BUS_PERIC1 0x10754 > +#define GATE_BUS_PERIS0 0x10760 > +#define GATE_BUS_PERIS1 0x10764 > +#define GATE_IP_GSCL0 0x10910 > +#define GATE_IP_GSCL1 0x10920 > +#define GATE_IP_MFC 0x1092c > +#define GATE_IP_DISP1 0x10928 > +#define GATE_IP_G3D 0x10930 > +#define GATE_IP_GEN 0x10934 > +#define GATE_IP_MSCL 0x10970 > +#define GATE_TOP_SCLK_GSCL 0x10820 > +#define GATE_TOP_SCLK_DISP1 0x10828 > +#define GATE_TOP_SCLK_MAU 0x1083c > +#define GATE_TOP_SCLK_FSYS 0x10840 > +#define GATE_TOP_SCLK_PERIC 0x10850 > +#define SRC_CDREX 0x20200 > +#define SRC_KFC 0x28200 > +#define DIV_KFC0 0x28500 > + > +enum exynos5420_clks { > + none, > + > + /* core clocks */ > + oscclk, > + > + /* gate for special clocks (sclk) */ > + sclk_uart0 = 128, sclk_uart1, sclk_uart2, sclk_uart3, sclk_mmc0, > + sclk_mmc1, sclk_mmc2, sclk_spi0, sclk_spi1, sclk_spi2, sclk_i2s1, > + sclk_i2s2, sclk_pcm1, sclk_pcm2, sclk_spdif, sclk_hdmi, sclk_pixel, > + sclk_dp1, sclk_mipi1, sclk_fimd1, sclk_maudio0, sclk_maupcm0, > + sclk_usbd300, sclk_usbd301, sclk_usbphy300, sclk_usbphy301, > sclk_unipro, + sclk_pwm, sclk_gscl_wa, sclk_gscl_wb, > + > + /* gate clocks */ > + aclk66_peric = 256, uart0, uart1, uart2, uart3, i2c0, i2c1, i2c2, > i2c3, + i2c4, i2c5, i2c6, i2c7, i2c_hdmi, tsadc, spi0, spi1, spi2, > keyif, i2s1, + i2s2, pcm1, pcm2, pwm, spdif, i2c8, i2c9, i2c10, > aclk66_psgen = 300, + chipid, sysreg, tzpc0, tzpc1, tzpc2, tzpc3, > tzpc4, tzpc5, tzpc6, tzpc7, + tzpc8, tzpc9, hdmi_cec, seckey, mct, wdt, > rtc, tmu, tmu_gpu, + pclk66_gpio = 330, aclk200_fsys2 = 350, mmc0, > mmc1, mmc2, sromc, ufs, + aclk200_fsys = 360, tsi, pdma0, pdma1, rtic, > usbh20, usbd300, usbd301, + aclk400_mscl = 380, mscl0, mscl1, mscl2, > smmu_mscl0, smmu_mscl1, + smmu_mscl2, aclk333 = 400, mfc, smmu_mfcl, > smmu_mfcr, > + aclk200_disp1 = 410, dsim1, dp1, hdmi, aclk300_disp1 = 420, fimd1, > + smmu_fimd1, aclk166 = 430, mixer, aclk266 = 440, rotator, mdma1, > + smmu_rotator, smmu_mdma1, aclk300_jpeg = 450, jpeg, jpeg2, smmu_jpeg, > + aclk300_gscl = 460, smmu_gscl0, smmu_gscl1, gscl_wa, gscl_wb, gscl0, > + gscl1, clk_3aa, aclk266_g2d = 470, sss, slim_sss, mdma0, > + aclk333_g2d = 480, g2d, aclk333_432_gscl = 490, smmu_3aa, smmu_fimcl0, > + smmu_fimcl1, smmu_fimcl3, fimc_lite3, aclk_g3d = 500, g3d, > + > + nr_clks, > +}; > + > +/* > + * list of controller registers to be saved and restored during a > + * suspend/resume cycle. > + */ > +static __initdata unsigned long exynos5420_clk_regs[] = { > + SRC_CPU, > + DIV_CPU0, > + DIV_CPU1, > + GATE_BUS_CPU, > + GATE_SCLK_CPU, > + SRC_TOP0, > + SRC_TOP1, > + SRC_TOP2, > + SRC_TOP3, > + SRC_TOP4, > + SRC_TOP5, > + SRC_TOP6, > + SRC_TOP7, > + SRC_DISP10, > + SRC_MAU, > + SRC_FSYS, > + SRC_PERIC0, > + SRC_PERIC1, > + SRC_TOP10, > + SRC_TOP11, > + SRC_TOP12, > + SRC_MASK_DISP10, > + SRC_MASK_FSYS, > + SRC_MASK_PERIC0, > + SRC_MASK_PERIC1, > + DIV_TOP0, > + DIV_TOP1, > + DIV_TOP2, > + DIV_DISP10, > + DIV_MAU, > + DIV_FSYS0, > + DIV_FSYS1, > + DIV_FSYS2, > + DIV_PERIC0, > + DIV_PERIC1, > + DIV_PERIC2, > + DIV_PERIC3, > + DIV_PERIC4, > + GATE_BUS_TOP, > + GATE_BUS_FSYS0, > + GATE_BUS_PERIC, > + GATE_BUS_PERIC1, > + GATE_BUS_PERIS0, > + GATE_BUS_PERIS1, > + GATE_IP_GSCL0, > + GATE_IP_GSCL1, > + GATE_IP_MFC, > + GATE_IP_DISP1, > + GATE_IP_G3D, > + GATE_IP_GEN, > + GATE_IP_MSCL, > + GATE_TOP_SCLK_GSCL, > + GATE_TOP_SCLK_DISP1, > + GATE_TOP_SCLK_MAU, > + GATE_TOP_SCLK_FSYS, > + GATE_TOP_SCLK_PERIC, > + SRC_CDREX, > + SRC_KFC, > + DIV_KFC0, > +}; > + > +/* list of all parent clocks */ > +PNAME(mspll_cpu_p) = { "sclk_cpll", "sclk_dpll", > + "sclk_mpll", "sclk_spll" }; > +PNAME(cpu_p) = { "mout_apll" , "mout_mspll_cpu" }; > +PNAME(kfc_p) = { "mout_kpll" , "mout_mspll_kfc" }; > +PNAME(apll_p) = { "oscclk", "fout_apll", }; > +PNAME(bpll_p) = { "oscclk", "fout_bpll", }; > +PNAME(cpll_p) = { "oscclk", "fout_cpll", }; > +PNAME(dpll_p) = { "oscclk", "fout_dpll", }; > +PNAME(epll_p) = { "oscclk", "fout_epll", }; > +PNAME(ipll_p) = { "oscclk", "fout_ipll", }; > +PNAME(kpll_p) = { "oscclk", "fout_kpll", }; > +PNAME(mpll_p) = { "oscclk", "fout_mpll", }; > +PNAME(rpll_p) = { "oscclk", "fout_rpll", }; > +PNAME(spll_p) = { "oscclk", "fout_spll", }; > +PNAME(vpll_p) = { "oscclk", "fout_vpll", }; > + > +PNAME(group1_p) = { "sclk_cpll", "sclk_dpll", "sclk_mpll" }; > +PNAME(group2_p) = { "oscclk", "sclk_cpll", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(group3_p) = { "sclk_rpll", "sclk_spll" }; > +PNAME(group4_p) = { "sclk_ipll", "sclk_dpll", "sclk_mpll" }; > +PNAME(group5_p) = { "sclk_vpll", "sclk_dpll" }; > + > +PNAME(sw_aclk66_p) = { "dout_aclk66", "sclk_spll" }; > +PNAME(aclk66_peric_p) = { "oscclk", "mout_sw_aclk66" }; > + > +PNAME(sw_aclk200_fsys_p) = { "dout_aclk200_fsys", "sclk_spll"}; > +PNAME(user_aclk200_fsys_p) = { "oscclk", "mout_sw_aclk200_fsys" }; > + > +PNAME(sw_aclk200_fsys2_p) = { "dout_aclk200_fsys2", "sclk_spll"}; > +PNAME(user_aclk200_fsys2_p) = { "oscclk", "mout_sw_aclk200_fsys2" }; > + > +PNAME(sw_aclk200_p) = { "dout_aclk200", "sclk_spll"}; > +PNAME(aclk200_disp1_p) = { "oscclk", "mout_sw_aclk200" }; > + > +PNAME(sw_aclk400_mscl_p) = { "dout_aclk400_mscl", "sclk_spll"}; > +PNAME(user_aclk400_mscl_p) = { "oscclk", "mout_sw_aclk400_mscl" }; > + > +PNAME(sw_aclk333_p) = { "dout_aclk333", "sclk_spll"}; > +PNAME(user_aclk333_p) = { "oscclk", "mout_sw_aclk333" }; > + > +PNAME(sw_aclk166_p) = { "dout_aclk166", "sclk_spll"}; > +PNAME(user_aclk166_p) = { "oscclk", "mout_sw_aclk166" }; > + > +PNAME(sw_aclk266_p) = { "dout_aclk266", "sclk_spll"}; > +PNAME(user_aclk266_p) = { "oscclk", "mout_sw_aclk266" }; > + > +PNAME(sw_aclk333_432_gscl_p) = { "dout_aclk333_432_gscl", "sclk_spll"}; > +PNAME(user_aclk333_432_gscl_p) = { "oscclk", > "mout_sw_aclk333_432_gscl" }; + > +PNAME(sw_aclk300_gscl_p) = { "dout_aclk300_gscl", "sclk_spll"}; > +PNAME(user_aclk300_gscl_p) = { "oscclk", "mout_sw_aclk300_gscl" }; > + > +PNAME(sw_aclk300_disp1_p) = { "dout_aclk300_disp1", "sclk_spll"}; > +PNAME(user_aclk300_disp1_p) = { "oscclk", "mout_sw_aclk300_disp1" }; > + > +PNAME(sw_aclk300_jpeg_p) = { "dout_aclk300_jpeg", "sclk_spll"}; > +PNAME(user_aclk300_jpeg_p) = { "oscclk", "mout_sw_aclk300_jpeg" }; > + > +PNAME(sw_aclk_g3d_p) = { "dout_aclk_g3d", "sclk_spll"}; > +PNAME(user_aclk_g3d_p) = { "oscclk", "mout_sw_aclk_g3d" }; > + > +PNAME(sw_aclk266_g2d_p) = { "dout_aclk266_g2d", "sclk_spll"}; > +PNAME(user_aclk266_g2d_p) = { "oscclk", "mout_sw_aclk266_g2d" }; > + > +PNAME(sw_aclk333_g2d_p) = { "dout_aclk333_g2d", "sclk_spll"}; > +PNAME(user_aclk333_g2d_p) = { "oscclk", "mout_sw_aclk333_g2d" }; > + > +PNAME(audio0_p) = { "oscclk", "cdclk0", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(audio1_p) = { "oscclk", "cdclk1", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(audio2_p) = { "oscclk", "cdclk2", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(spdif_p) = { "oscclk", "dout_audio0", "dout_audio1", > "dout_audio2", + "spdif_extclk", "sclk_ipll", "sclk_epll", > "sclk_rpll" }; > +PNAME(hdmi_p) = { "sclk_hdmiphy", "dout_hdmi_pixel" }; > +PNAME(maudio0_p) = { "oscclk", "maudio_clk", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > + > +/* fixed rate clocks generated outside the soc */ > +struct samsung_fixed_rate_clock exynos5420_fixed_rate_ext_clks[] > __initdata = { + FRATE(oscclk, "oscclk", NULL, CLK_IS_ROOT, 0), > +}; > + > +/* fixed rate clocks generated inside the soc */ > +struct samsung_fixed_rate_clock exynos5420_fixed_rate_clks[] __initdata > = { + FRATE(none, "sclk_hdmiphy", NULL, CLK_IS_ROOT, 24000000), > + FRATE(none, "sclk_pwi", NULL, CLK_IS_ROOT, 24000000), > + FRATE(none, "sclk_usbh20", NULL, CLK_IS_ROOT, 48000000), > + FRATE(none, "mphy_refclk_ixtal24", NULL, CLK_IS_ROOT, 48000000), > + FRATE(none, "sclk_usbh20_scan_clk", NULL, CLK_IS_ROOT, 480000000), > +}; > + > +struct samsung_fixed_factor_clock exynos5420_fixed_factor_clks[] > __initdata = { + FFACTOR(none, "sclk_hsic_12m", "oscclk", 1, 2, 0), > +}; > + > +struct samsung_mux_clock exynos5420_mux_clks[] __initdata = { > + MUX(none, "mout_mspll_kfc", mspll_cpu_p, SRC_TOP7, 8, 2), > + MUX(none, "mout_mspll_cpu", mspll_cpu_p, SRC_TOP7, 12, 2), > + MUX(none, "mout_apll", apll_p, SRC_CPU, 0, 1), > + MUX(none, "mout_cpu", cpu_p, SRC_CPU, 16, 1), > + MUX(none, "mout_kpll", kpll_p, SRC_KFC, 0, 1), > + MUX(none, "mout_cpu_kfc", kfc_p, SRC_KFC, 16, 1), > + > + MUX(none, "sclk_bpll", bpll_p, SRC_CDREX, 0, 1), > + > + MUX_A(none, "mout_aclk400_mscl", group1_p, > + SRC_TOP0, 4, 2, "aclk400_mscl"), > + MUX(none, "mout_aclk200", group1_p, SRC_TOP0, 8, 2), > + MUX(none, "mout_aclk200_fsys2", group1_p, SRC_TOP0, 12, 2), > + MUX(none, "mout_aclk200_fsys", group1_p, SRC_TOP0, 28, 2), > + > + MUX(none, "mout_aclk333_432_gscl", group4_p, SRC_TOP1, 0, 2), > + MUX(none, "mout_aclk66", group1_p, SRC_TOP1, 8, 2), > + MUX(none, "mout_aclk266", group1_p, SRC_TOP1, 20, 2), > + MUX(none, "mout_aclk166", group1_p, SRC_TOP1, 24, 2), > + MUX(none, "mout_aclk333", group1_p, SRC_TOP1, 28, 2), > + > + MUX(none, "mout_aclk333_g2d", group1_p, SRC_TOP2, 8, 2), > + MUX(none, "mout_aclk266_g2d", group1_p, SRC_TOP2, 12, 2), > + MUX(none, "mout_aclk_g3d", group5_p, SRC_TOP2, 16, 1), > + MUX(none, "mout_aclk300_jpeg", group1_p, SRC_TOP2, 20, 2), > + MUX(none, "mout_aclk300_disp1", group1_p, SRC_TOP2, 24, 2), > + MUX(none, "mout_aclk300_gscl", group1_p, SRC_TOP2, 28, 2), > + > + MUX(none, "mout_user_aclk400_mscl", user_aclk400_mscl_p, > + SRC_TOP3, 4, 1), > + MUX_A(none, "mout_aclk200_disp1", aclk200_disp1_p, > + SRC_TOP3, 8, 1, "aclk200_disp1"), > + MUX(none, "mout_user_aclk200_fsys2", user_aclk200_fsys2_p, > + SRC_TOP3, 12, 1), > + MUX(none, "mout_user_aclk200_fsys", user_aclk200_fsys_p, > + SRC_TOP3, 28, 1), > + > + MUX(none, "mout_user_aclk333_432_gscl", user_aclk333_432_gscl_p, > + SRC_TOP4, 0, 1), > + MUX(none, "mout_aclk66_peric", aclk66_peric_p, SRC_TOP4, 8, 1), > + MUX(none, "mout_user_aclk266", user_aclk266_p, SRC_TOP4, 20, 1), > + MUX(none, "mout_user_aclk166", user_aclk166_p, SRC_TOP4, 24, 1), > + MUX(none, "mout_user_aclk333", user_aclk333_p, SRC_TOP4, 28, 1), > + > + MUX(none, "mout_aclk66_psgen", aclk66_peric_p, SRC_TOP5, 4, 1), > + MUX(none, "mout_user_aclk333_g2d", user_aclk333_g2d_p, SRC_TOP5, 8, > 1), + MUX(none, "mout_user_aclk266_g2d", user_aclk266_g2d_p, SRC_TOP5, > 12, 1), + MUX_A(none, "mout_user_aclk_g3d", user_aclk_g3d_p, > + SRC_TOP5, 16, 1, "aclkg3d"), > + MUX(none, "mout_user_aclk300_jpeg", user_aclk300_jpeg_p, > + SRC_TOP5, 20, 1), > + MUX(none, "mout_user_aclk300_disp1", user_aclk300_disp1_p, > + SRC_TOP5, 24, 1), > + MUX(none, "mout_user_aclk300_gscl", user_aclk300_gscl_p, > + SRC_TOP5, 28, 1), > + > + MUX(none, "sclk_mpll", mpll_p, SRC_TOP6, 0, 1), > + MUX(none, "sclk_vpll", vpll_p, SRC_TOP6, 4, 1), > + MUX(none, "sclk_spll", spll_p, SRC_TOP6, 8, 1), > + MUX(none, "sclk_ipll", ipll_p, SRC_TOP6, 12, 1), > + MUX(none, "sclk_rpll", rpll_p, SRC_TOP6, 16, 1), > + MUX(none, "sclk_epll", epll_p, SRC_TOP6, 20, 1), > + MUX(none, "sclk_dpll", dpll_p, SRC_TOP6, 24, 1), > + MUX(none, "sclk_cpll", cpll_p, SRC_TOP6, 28, 1), > + > + MUX(none, "mout_sw_aclk400_mscl", sw_aclk400_mscl_p, SRC_TOP10, 4, 1), > + MUX(none, "mout_sw_aclk200", sw_aclk200_p, SRC_TOP10, 8, 1), > + MUX(none, "mout_sw_aclk200_fsys2", sw_aclk200_fsys2_p, > + SRC_TOP10, 12, 1), > + MUX(none, "mout_sw_aclk200_fsys", sw_aclk200_fsys_p, SRC_TOP10, 28, > 1), + > + MUX(none, "mout_sw_aclk333_432_gscl", sw_aclk333_432_gscl_p, > + SRC_TOP11, 0, 1), > + MUX(none, "mout_sw_aclk66", sw_aclk66_p, SRC_TOP11, 8, 1), > + MUX(none, "mout_sw_aclk266", sw_aclk266_p, SRC_TOP11, 20, 1), > + MUX(none, "mout_sw_aclk166", sw_aclk166_p, SRC_TOP11, 24, 1), > + MUX(none, "mout_sw_aclk333", sw_aclk333_p, SRC_TOP11, 28, 1), > + > + MUX(none, "mout_sw_aclk333_g2d", sw_aclk333_g2d_p, SRC_TOP12, 8, 1), > + MUX(none, "mout_sw_aclk266_g2d", sw_aclk266_g2d_p, SRC_TOP12, 12, 1), > + MUX(none, "mout_sw_aclk_g3d", sw_aclk_g3d_p, SRC_TOP12, 16, 1), > + MUX(none, "mout_sw_aclk300_jpeg", sw_aclk300_jpeg_p, SRC_TOP12, 20, > 1), + MUX(none, "mout_sw_aclk300_disp1", sw_aclk300_disp1_p, > + SRC_TOP12, 24, 1), > + MUX(none, "mout_sw_aclk300_gscl", sw_aclk300_gscl_p, SRC_TOP12, 28, > 1), + > + /* DISP1 Block */ > + MUX(none, "mout_fimd1", group3_p, SRC_DISP10, 4, 1), > + MUX(none, "mout_mipi1", group2_p, SRC_DISP10, 16, 3), > + MUX(none, "mout_dp1", group2_p, SRC_DISP10, 20, 3), > + MUX(none, "mout_pixel", group2_p, SRC_DISP10, 24, 3), > + MUX(none, "mout_hdmi", hdmi_p, SRC_DISP10, 28, 1), > + > + /* MAU Block */ > + MUX(none, "mout_maudio0", maudio0_p, SRC_MAU, 28, 3), > + > + /* FSYS Block */ > + MUX(none, "mout_usbd301", group2_p, SRC_FSYS, 4, 3), > + MUX(none, "mout_mmc0", group2_p, SRC_FSYS, 8, 3), > + MUX(none, "mout_mmc1", group2_p, SRC_FSYS, 12, 3), > + MUX(none, "mout_mmc2", group2_p, SRC_FSYS, 16, 3), > + MUX(none, "mout_usbd300", group2_p, SRC_FSYS, 20, 3), > + MUX(none, "mout_unipro", group2_p, SRC_FSYS, 24, 3), > + > + /* PERIC Block */ > + MUX(none, "mout_uart0", group2_p, SRC_PERIC0, 4, 3), > + MUX(none, "mout_uart1", group2_p, SRC_PERIC0, 8, 3), > + MUX(none, "mout_uart2", group2_p, SRC_PERIC0, 12, 3), > + MUX(none, "mout_uart3", group2_p, SRC_PERIC0, 16, 3), > + MUX(none, "mout_pwm", group2_p, SRC_PERIC0, 24, 3), > + MUX(none, "mout_spdif", spdif_p, SRC_PERIC0, 28, 3), > + MUX(none, "mout_audio0", audio0_p, SRC_PERIC1, 8, 3), > + MUX(none, "mout_audio1", audio1_p, SRC_PERIC1, 12, 3), > + MUX(none, "mout_audio2", audio2_p, SRC_PERIC1, 16, 3), > + MUX(none, "mout_spi0", group2_p, SRC_PERIC1, 20, 3), > + MUX(none, "mout_spi1", group2_p, SRC_PERIC1, 24, 3), > + MUX(none, "mout_spi2", group2_p, SRC_PERIC1, 28, 3), > +}; > + > +struct samsung_div_clock exynos5420_div_clks[] __initdata = { > + DIV(none, "div_arm", "mout_cpu", DIV_CPU0, 0, 3), > + DIV(none, "sclk_apll", "mout_apll", DIV_CPU0, 24, 3), > + DIV(none, "armclk2", "div_arm", DIV_CPU0, 28, 3), > + DIV(none, "div_kfc", "mout_cpu_kfc", DIV_KFC0, 0, 3), > + DIV(none, "sclk_kpll", "mout_kpll", DIV_KFC0, 24, 3), > + > + DIV(none, "dout_aclk400_mscl", "mout_aclk400_mscl", DIV_TOP0, 4, 3), > + DIV(none, "dout_aclk200", "mout_aclk200", DIV_TOP0, 8, 3), > + DIV(none, "dout_aclk200_fsys2", "mout_aclk200_fsys2", DIV_TOP0, 12, > 3), + DIV(none, "dout_pclk200_fsys", "mout_pclk200_fsys", DIV_TOP0, 24, > 3), + DIV(none, "dout_aclk200_fsys", "mout_aclk200_fsys", DIV_TOP0, 28, > 3), + > + DIV(none, "dout_aclk333_432_gscl", "mout_aclk333_432_gscl", > + DIV_TOP1, 0, 3), > + DIV(none, "dout_aclk66", "mout_aclk66", DIV_TOP1, 8, 6), > + DIV(none, "dout_aclk266", "mout_aclk266", DIV_TOP1, 20, 3), > + DIV(none, "dout_aclk166", "mout_aclk166", DIV_TOP1, 24, 3), > + DIV(none, "dout_aclk333", "mout_aclk333", DIV_TOP1, 28, 3), > + > + DIV(none, "dout_aclk333_g2d", "mout_aclk333_g2d", DIV_TOP2, 8, 3), > + DIV(none, "dout_aclk266_g2d", "mout_aclk266_g2d", DIV_TOP2, 12, 3), > + DIV(none, "dout_aclk_g3d", "mout_aclk_g3d", DIV_TOP2, 16, 3), > + DIV(none, "dout_aclk300_jpeg", "mout_aclk300_jpeg", DIV_TOP2, 20, 3), > + DIV_A(none, "dout_aclk300_disp1", "mout_aclk300_disp1", > + DIV_TOP2, 24, 3, "aclk300_disp1"), > + DIV(none, "dout_aclk300_gscl", "mout_aclk300_gscl", DIV_TOP2, 28, 3), > + > + /* DISP1 Block */ > + DIV(none, "dout_fimd1", "mout_fimd1", DIV_DISP10, 0, 4), > + DIV(none, "dout_mipi1", "mout_mipi1", DIV_DISP10, 16, 8), > + DIV(none, "dout_dp1", "mout_dp1", DIV_DISP10, 24, 4), > + DIV(none, "dout_hdmi_pixel", "mout_pixel", DIV_DISP10, 28, 4), > + > + /* Audio Block */ > + DIV(none, "dout_maudio0", "mout_maudio0", DIV_MAU, 20, 4), > + DIV(none, "dout_maupcm0", "dout_maudio0", DIV_MAU, 24, 8), > + > + /* USB3.0 */ > + DIV(none, "dout_usbphy301", "mout_usbd301", DIV_FSYS0, 12, 4), > + DIV(none, "dout_usbphy300", "mout_usbd300", DIV_FSYS0, 16, 4), > + DIV(none, "dout_usbd301", "mout_usbd301", DIV_FSYS0, 20, 4), > + DIV(none, "dout_usbd300", "mout_usbd300", DIV_FSYS0, 24, 4), > + > + /* MMC */ > + DIV(none, "dout_mmc0", "mout_mmc0", DIV_FSYS1, 0, 10), > + DIV(none, "dout_mmc1", "mout_mmc1", DIV_FSYS1, 10, 10), > + DIV(none, "dout_mmc2", "mout_mmc2", DIV_FSYS1, 20, 10), > + > + DIV(none, "dout_unipro", "mout_unipro", DIV_FSYS2, 24, 8), > + > + /* UART and PWM */ > + DIV(none, "dout_uart0", "mout_uart0", DIV_PERIC0, 8, 4), > + DIV(none, "dout_uart1", "mout_uart1", DIV_PERIC0, 12, 4), > + DIV(none, "dout_uart2", "mout_uart2", DIV_PERIC0, 16, 4), > + DIV(none, "dout_uart3", "mout_uart3", DIV_PERIC0, 20, 4), > + DIV(none, "dout_pwm", "mout_pwm", DIV_PERIC0, 28, 4), > + > + /* SPI */ > + DIV(none, "dout_spi0", "mout_spi0", DIV_PERIC1, 20, 4), > + DIV(none, "dout_spi1", "mout_spi1", DIV_PERIC1, 24, 4), > + DIV(none, "dout_spi2", "mout_spi2", DIV_PERIC1, 28, 4), > + > + /* PCM */ > + DIV(none, "dout_pcm1", "dout_audio1", DIV_PERIC2, 16, 8), > + DIV(none, "dout_pcm2", "dout_audio2", DIV_PERIC2, 24, 8), > + > + /* Audio - I2S */ > + DIV(none, "dout_i2s1", "dout_audio1", DIV_PERIC3, 6, 6), > + DIV(none, "dout_i2s2", "dout_audio2", DIV_PERIC3, 12, 6), > + DIV(none, "dout_audio0", "mout_audio0", DIV_PERIC3, 20, 4), > + DIV(none, "dout_audio1", "mout_audio1", DIV_PERIC3, 24, 4), > + DIV(none, "dout_audio2", "mout_audio2", DIV_PERIC3, 28, 4), > + > + /* SPI Pre-Ratio */ > + DIV(none, "dout_pre_spi0", "dout_spi0", DIV_PERIC4, 8, 8), > + DIV(none, "dout_pre_spi1", "dout_spi1", DIV_PERIC4, 16, 8), > + DIV(none, "dout_pre_spi2", "dout_spi2", DIV_PERIC4, 24, 8), > +}; > + > +struct samsung_gate_clock exynos5420_gate_clks[] __initdata = { > + /* TODO: Re-verify the CG bits for all the gate clocks */ > + GATE_A(mct, "pclk_st", "aclk66_psgen", GATE_BUS_PERIS1, 2, 0, 0, > "mct"), + > + GATE(0, "aclk200_fsys", "mout_user_aclk200_fsys", > + GATE_BUS_FSYS0, 9, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk200_fsys2", "mout_user_aclk200_fsys2", > + GATE_BUS_FSYS0, 10, CLK_IGNORE_UNUSED, 0), > + > + GATE(0, "aclk333_g2d", "mout_user_aclk333_g2d", > + GATE_BUS_TOP, 0, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk266_g2d", "mout_user_aclk266_g2d", > + GATE_BUS_TOP, 1, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk300_jpeg", "mout_user_aclk300_jpeg", > + GATE_BUS_TOP, 4, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk300_gscl", "mout_user_aclk300_gscl", > + GATE_BUS_TOP, 6, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk333_432_gscl", "mout_user_aclk333_432_gscl", > + GATE_BUS_TOP, 7, CLK_IGNORE_UNUSED, 0), > + GATE(0, "pclk66_gpio", "mout_sw_aclk66", > + GATE_BUS_TOP, 9, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk66_psgen", "mout_aclk66_psgen", > + GATE_BUS_TOP, 10, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk66_peric", "mout_aclk66_peric", > + GATE_BUS_TOP, 11, 0, 0), > + GATE(0, "aclk166", "mout_user_aclk166", > + GATE_BUS_TOP, 14, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk333", "mout_aclk333", > + GATE_BUS_TOP, 15, CLK_IGNORE_UNUSED, 0), > + > + /* sclk */ > + GATE(sclk_uart0, "sclk_uart0", "dout_uart0", > + GATE_TOP_SCLK_PERIC, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_uart1, "sclk_uart1", "dout_uart1", > + GATE_TOP_SCLK_PERIC, 1, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_uart2, "sclk_uart2", "dout_uart2", > + GATE_TOP_SCLK_PERIC, 2, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_uart3, "sclk_uart3", "dout_uart3", > + GATE_TOP_SCLK_PERIC, 3, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spi0, "sclk_spi0", "dout_pre_spi0", > + GATE_TOP_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spi1, "sclk_spi1", "dout_pre_spi1", > + GATE_TOP_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spi2, "sclk_spi2", "dout_pre_spi2", > + GATE_TOP_SCLK_PERIC, 8, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spdif, "sclk_spdif", "mout_spdif", > + GATE_TOP_SCLK_PERIC, 9, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pwm, "sclk_pwm", "dout_pwm", > + GATE_TOP_SCLK_PERIC, 11, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pcm1, "sclk_pcm1", "dout_pcm1", > + GATE_TOP_SCLK_PERIC, 15, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pcm2, "sclk_pcm2", "dout_pcm2", > + GATE_TOP_SCLK_PERIC, 16, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_i2s1, "sclk_i2s1", "dout_i2s1", > + GATE_TOP_SCLK_PERIC, 17, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_i2s2, "sclk_i2s2", "dout_i2s2", > + GATE_TOP_SCLK_PERIC, 18, CLK_SET_RATE_PARENT, 0), > + > + GATE(sclk_mmc0, "sclk_mmc0", "dout_mmc0", > + GATE_TOP_SCLK_FSYS, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_mmc1, "sclk_mmc1", "dout_mmc1", > + GATE_TOP_SCLK_FSYS, 1, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_mmc2, "sclk_mmc2", "dout_mmc2", > + GATE_TOP_SCLK_FSYS, 2, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbphy301, "sclk_usbphy301", "dout_usbphy301", > + GATE_TOP_SCLK_FSYS, 7, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbphy300, "sclk_usbphy300", "dout_usbphy300", > + GATE_TOP_SCLK_FSYS, 8, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbd300, "sclk_usbd300", "dout_usbd300", > + GATE_TOP_SCLK_FSYS, 9, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbd301, "sclk_usbd301", "dout_usbd301", > + GATE_TOP_SCLK_FSYS, 10, CLK_SET_RATE_PARENT, 0), > + > + GATE(sclk_usbd301, "sclk_unipro", "dout_unipro", > + SRC_MASK_FSYS, 24, CLK_SET_RATE_PARENT, 0), > + > + GATE(sclk_gscl_wa, "sclk_gscl_wa", "aclK333_432_gscl", > + GATE_TOP_SCLK_GSCL, 6, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_gscl_wb, "sclk_gscl_wb", "aclk333_432_gscl", > + GATE_TOP_SCLK_GSCL, 7, CLK_SET_RATE_PARENT, 0), > + > + /* Display */ > + GATE(sclk_fimd1, "sclk_fimd1", "dout_fimd1", > + GATE_TOP_SCLK_DISP1, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_mipi1, "sclk_mipi1", "dout_mipi1", > + GATE_TOP_SCLK_DISP1, 3, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_hdmi, "sclk_hdmi", "mout_hdmi", > + GATE_TOP_SCLK_DISP1, 9, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pixel, "sclk_pixel", "dout_hdmi_pixel", > + GATE_TOP_SCLK_DISP1, 10, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_dp1, "sclk_dp1", "dout_dp1", > + GATE_TOP_SCLK_DISP1, 20, CLK_SET_RATE_PARENT, 0), > + > + /* Maudio Block */ > + GATE(sclk_maudio0, "sclk_maudio0", "dout_maudio0", > + GATE_TOP_SCLK_MAU, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_maupcm0, "sclk_maupcm0", "dout_maupcm0", > + GATE_TOP_SCLK_MAU, 1, CLK_SET_RATE_PARENT, 0), > + /* FSYS */ > + GATE(tsi, "tsi", "aclk200_fsys", GATE_BUS_FSYS0, 0, 0, 0), > + GATE(pdma0, "pdma0", "aclk200_fsys", GATE_BUS_FSYS0, 1, 0, 0), > + GATE(pdma1, "pdma1", "aclk200_fsys", GATE_BUS_FSYS0, 2, 0, 0), > + GATE(ufs, "ufs", "aclk200_fsys2", GATE_BUS_FSYS0, 3, 0, 0), > + GATE(rtic, "rtic", "aclk200_fsys", GATE_BUS_FSYS0, 5, 0, 0), > + GATE(mmc0, "mmc0", "aclk200_fsys2", GATE_BUS_FSYS0, 12, 0, 0), > + GATE(mmc1, "mmc1", "aclk200_fsys2", GATE_BUS_FSYS0, 13, 0, 0), > + GATE(mmc2, "mmc2", "aclk200_fsys2", GATE_BUS_FSYS0, 14, 0, 0), > + GATE(sromc, "sromc", "aclk200_fsys2", > + GATE_BUS_FSYS0, 19, CLK_IGNORE_UNUSED, 0), > + GATE(usbh20, "usbh20", "aclk200_fsys", GATE_BUS_FSYS0, 20, 0, 0), > + GATE(usbd300, "usbd300", "aclk200_fsys", GATE_BUS_FSYS0, 21, 0, 0), > + GATE(usbd301, "usbd301", "aclk200_fsys", GATE_BUS_FSYS0, 28, 0, 0), > + > + /* UART */ > + GATE(uart0, "uart0", "aclk66_peric", GATE_BUS_PERIC, 4, 0, 0), > + GATE(uart1, "uart1", "aclk66_peric", GATE_BUS_PERIC, 5, 0, 0), > + GATE_A(uart2, "uart2", "aclk66_peric", > + GATE_BUS_PERIC, 6, CLK_IGNORE_UNUSED, 0, "uart2"), > + GATE(uart3, "uart3", "aclk66_peric", GATE_BUS_PERIC, 7, 0, 0), > + /* I2C */ > + GATE(i2c0, "i2c0", "aclk66_peric", GATE_BUS_PERIC, 9, 0, 0), > + GATE(i2c1, "i2c1", "aclk66_peric", GATE_BUS_PERIC, 10, 0, 0), > + GATE(i2c2, "i2c2", "aclk66_peric", GATE_BUS_PERIC, 11, 0, 0), > + GATE(i2c3, "i2c3", "aclk66_peric", GATE_BUS_PERIC, 12, 0, 0), > + GATE(i2c4, "i2c4", "aclk66_peric", GATE_BUS_PERIC, 13, 0, 0), > + GATE(i2c5, "i2c5", "aclk66_peric", GATE_BUS_PERIC, 14, 0, 0), > + GATE(i2c6, "i2c6", "aclk66_peric", GATE_BUS_PERIC, 15, 0, 0), > + GATE(i2c7, "i2c7", "aclk66_peric", GATE_BUS_PERIC, 16, 0, 0), > + GATE(i2c_hdmi, "i2c_hdmi", "aclk66_peric", GATE_BUS_PERIC, 17, 0, 0), > + GATE(tsadc, "tsadc", "aclk66_peric", GATE_BUS_PERIC, 18, 0, 0), > + /* SPI */ > + GATE(spi0, "spi0", "aclk66_peric", GATE_BUS_PERIC, 19, 0, 0), > + GATE(spi1, "spi1", "aclk66_peric", GATE_BUS_PERIC, 20, 0, 0), > + GATE(spi2, "spi2", "aclk66_peric", GATE_BUS_PERIC, 21, 0, 0), > + GATE(keyif, "keyif", "aclk66_peric", GATE_BUS_PERIC, 22, 0, 0), > + /* I2S */ > + GATE(i2s1, "i2s1", "aclk66_peric", GATE_BUS_PERIC, 23, 0, 0), > + GATE(i2s2, "i2s2", "aclk66_peric", GATE_BUS_PERIC, 24, 0, 0), > + /* PCM */ > + GATE(pcm1, "pcm1", "aclk66_peric", GATE_BUS_PERIC, 25, 0, 0), > + GATE(pcm2, "pcm2", "aclk66_peric", GATE_BUS_PERIC, 26, 0, 0), > + /* PWM */ > + GATE(pwm, "pwm", "aclk66_peric", GATE_BUS_PERIC, 27, 0, 0), > + /* SPDIF */ > + GATE(spdif, "spdif", "aclk66_peric", GATE_BUS_PERIC, 29, 0, 0), > + > + GATE(i2c8, "i2c8", "aclk66_peric", GATE_BUS_PERIC1, 0, 0, 0), > + GATE(i2c9, "i2c9", "aclk66_peric", GATE_BUS_PERIC1, 1, 0, 0), > + GATE(i2c10, "i2c10", "aclk66_peric", GATE_BUS_PERIC1, 2, 0, 0), > + > + GATE(chipid, "chipid", "aclk66_psgen", > + GATE_BUS_PERIS0, 12, CLK_IGNORE_UNUSED, 0), > + GATE(sysreg, "sysreg", "aclk66_psgen", > + GATE_BUS_PERIS0, 13, CLK_IGNORE_UNUSED, 0), > + GATE(tzpc0, "tzpc0", "aclk66_psgen", GATE_BUS_PERIS0, 18, 0, 0), > + GATE(tzpc1, "tzpc1", "aclk66_psgen", GATE_BUS_PERIS0, 19, 0, 0), > + GATE(tzpc2, "tzpc2", "aclk66_psgen", GATE_BUS_PERIS0, 20, 0, 0), > + GATE(tzpc3, "tzpc3", "aclk66_psgen", GATE_BUS_PERIS0, 21, 0, 0), > + GATE(tzpc4, "tzpc4", "aclk66_psgen", GATE_BUS_PERIS0, 22, 0, 0), > + GATE(tzpc5, "tzpc5", "aclk66_psgen", GATE_BUS_PERIS0, 23, 0, 0), > + GATE(tzpc6, "tzpc6", "aclk66_psgen", GATE_BUS_PERIS0, 24, 0, 0), > + GATE(tzpc7, "tzpc7", "aclk66_psgen", GATE_BUS_PERIS0, 25, 0, 0), > + GATE(tzpc8, "tzpc8", "aclk66_psgen", GATE_BUS_PERIS0, 26, 0, 0), > + GATE(tzpc9, "tzpc9", "aclk66_psgen", GATE_BUS_PERIS0, 27, 0, 0), > + > + GATE(hdmi_cec, "hdmi_cec", "aclk66_psgen", GATE_BUS_PERIS1, 0, 0, 0), > + GATE(seckey, "seckey", "aclk66_psgen", GATE_BUS_PERIS1, 1, 0, 0), > + GATE(wdt, "wdt", "aclk66_psgen", GATE_BUS_PERIS1, 3, 0, 0), > + GATE(rtc, "rtc", "aclk66_psgen", GATE_BUS_PERIS1, 4, 0, 0), > + GATE(tmu, "tmu", "aclk66_psgen", GATE_BUS_PERIS1, 5, 0, 0), > + GATE(tmu_gpu, "tmu_gpu", "aclk66_psgen", GATE_BUS_PERIS1, 6, 0, 0), > + > + GATE(gscl0, "gscl0", "aclk300_gscl", GATE_IP_GSCL0, 0, 0, 0), > + GATE(gscl1, "gscl1", "aclk300_gscl", GATE_IP_GSCL0, 1, 0, 0), > + GATE(clk_3aa, "clk_3aa", "aclk300_gscl", GATE_IP_GSCL0, 4, 0, 0), > + > + GATE(smmu_3aa, "smmu_3aa", "aclk333_432_gscl", GATE_IP_GSCL1, 2, 0, > 0), + GATE(smmu_fimcl0, "smmu_fimcl0", "aclk333_432_gscl", > + GATE_IP_GSCL1, 3, 0, 0), > + GATE(smmu_fimcl1, "smmu_fimcl1", "aclk333_432_gscl", > + GATE_IP_GSCL1, 4, 0, 0), > + GATE(smmu_gscl0, "smmu_gscl0", "aclk300_gscl", GATE_IP_GSCL1, 6, 0, > 0), + GATE(smmu_gscl1, "smmu_gscl1", "aclk300_gscl", GATE_IP_GSCL1, 7, > 0, 0), + GATE(gscl_wa, "gscl_wa", "aclk300_gscl", GATE_IP_GSCL1, 12, 0, > 0), + GATE(gscl_wb, "gscl_wb", "aclk300_gscl", GATE_IP_GSCL1, 13, 0, > 0), + GATE(smmu_fimcl3, "smmu_fimcl3,", "aclk333_432_gscl", > + GATE_IP_GSCL1, 16, 0, 0), > + GATE(fimc_lite3, "fimc_lite3", "aclk333_432_gscl", > + GATE_IP_GSCL1, 17, 0, 0), > + > + GATE(fimd1, "fimd1", "aclk300_disp1", GATE_IP_DISP1, 0, 0, 0), > + GATE(dsim1, "dsim1", "aclk200_disp1", GATE_IP_DISP1, 3, 0, 0), > + GATE(dp1, "dp1", "aclk200_disp1", GATE_IP_DISP1, 4, 0, 0), > + GATE(mixer, "mixer", "aclk166", GATE_IP_DISP1, 5, 0, 0), > + GATE(hdmi, "hdmi", "aclk200_disp1", GATE_IP_DISP1, 6, 0, 0), > + GATE(smmu_fimd1, "smmu_fimd1", "aclk300_disp1", GATE_IP_DISP1, 8, 0, > 0), + > + GATE(mfc, "mfc", "aclk333", GATE_IP_MFC, 0, 0, 0), > + GATE(smmu_mfcl, "smmu_mfcl", "aclk333", GATE_IP_MFC, 1, 0, 0), > + GATE(smmu_mfcr, "smmu_mfcr", "aclk333", GATE_IP_MFC, 2, 0, 0), > + > + GATE(g3d, "g3d", "aclkg3d", GATE_IP_G3D, 9, 0, 0), > + > + GATE(rotator, "rotator", "aclk266", GATE_IP_GEN, 1, 0, 0), > + GATE(jpeg, "jpeg", "aclk300_jpeg", GATE_IP_GEN, 2, 0, 0), > + GATE(jpeg2, "jpeg2", "aclk300_jpeg", GATE_IP_GEN, 3, 0, 0), > + GATE(mdma1, "mdma1", "aclk266", GATE_IP_GEN, 4, 0, 0), > + GATE(smmu_rotator, "smmu_rotator", "aclk266", GATE_IP_GEN, 6, 0, 0), > + GATE(smmu_jpeg, "smmu_jpeg", "aclk300_jpeg", GATE_IP_GEN, 7, 0, 0), > + GATE(smmu_mdma1, "smmu_mdma1", "aclk266", GATE_IP_GEN, 9, 0, 0), > + > + GATE(mscl0, "mscl0", "aclk400_mscl", GATE_IP_MSCL, 0, 0, 0), > + GATE(mscl1, "mscl1", "aclk400_mscl", GATE_IP_MSCL, 1, 0, 0), > + GATE(mscl2, "mscl2", "aclk400_mscl", GATE_IP_MSCL, 2, 0, 0), > + GATE(smmu_mscl0, "smmu_mscl0", "aclk400_mscl", GATE_IP_MSCL, 8, 0, 0), > + GATE(smmu_mscl1, "smmu_mscl1", "aclk400_mscl", GATE_IP_MSCL, 9, 0, > 0), + GATE(smmu_mscl2, "smmu_mscl2", "aclk400_mscl", GATE_IP_MSCL, 10, > 0, 0), +}; > + > +static __initdata struct of_device_id ext_clk_match[] = { > + { .compatible = "samsung,exynos5420-oscclk", .data = (void *)0, }, > + { }, > +}; > + > +/* register exynos5420 clocks */ > +void __init exynos5420_clk_init(struct device_node *np) > +{ > + void __iomem *reg_base; > + struct clk *apll, *bpll, *cpll, *dpll, *epll, *ipll, *kpll, *mpll; > + struct clk *rpll, *spll, *vpll; > + > + if (np) { > + reg_base = of_iomap(np, 0); > + if (!reg_base) > + panic("%s: failed to map registers\n", __func__); > + } else { > + panic("%s: unable to determine soc\n", __func__); > + } > + > + samsung_clk_init(np, reg_base, nr_clks, > + exynos5420_clk_regs, ARRAY_SIZE(exynos5420_clk_regs), > + NULL, 0); > + samsung_clk_of_register_fixed_ext(exynos5420_fixed_rate_ext_clks, > + ARRAY_SIZE(exynos5420_fixed_rate_ext_clks), > + ext_clk_match); > + > + apll = samsung_clk_register_pll35xx("fout_apll", "oscclk", > + reg_base + 0x100); > + bpll = samsung_clk_register_pll35xx("fout_bpll", "oscclk", > + reg_base + 0x20110); > + cpll = samsung_clk_register_pll35xx("fout_cpll", "oscclk", > + reg_base + 0x10120); > + dpll = samsung_clk_register_pll35xx("fout_dpll", "oscclk", > + reg_base + 0x10128); > + epll = samsung_clk_register_pll35xx("fout_epll", "oscclk", > + reg_base + 0x10130); > + ipll = samsung_clk_register_pll35xx("fout_ipll", "oscclk", > + reg_base + 0x10150); > + kpll = samsung_clk_register_pll35xx("fout_kpll", "oscclk", > + reg_base + 0x28100); > + mpll = samsung_clk_register_pll35xx("fout_mpll", "oscclk", > + reg_base + 0x10180); > + rpll = samsung_clk_register_pll35xx("fout_rpll", "oscclk", > + reg_base + 0x10140); > + spll = samsung_clk_register_pll35xx("fout_spll", "oscclk", > + reg_base + 0x10160); > + vpll = samsung_clk_register_pll35xx("fout_vpll", "oscclk", > + reg_base + 0x10170); > + > + samsung_clk_register_fixed_rate(exynos5420_fixed_rate_clks, > + ARRAY_SIZE(exynos5420_fixed_rate_clks)); > + samsung_clk_register_fixed_factor(exynos5420_fixed_factor_clks, > + ARRAY_SIZE(exynos5420_fixed_factor_clks)); > + samsung_clk_register_mux(exynos5420_mux_clks, > + ARRAY_SIZE(exynos5420_mux_clks)); > + samsung_clk_register_div(exynos5420_div_clks, > + ARRAY_SIZE(exynos5420_div_clks)); > + samsung_clk_register_gate(exynos5420_gate_clks, > + ARRAY_SIZE(exynos5420_gate_clks)); > +} > +CLK_OF_DECLARE(exynos5420_clk, "samsung,exynos5420-clock", > exynos5420_clk_init);
WARNING: multiple messages have this Message-ID (diff)
From: tomasz.figa@gmail.com (Tomasz Figa) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 09/13] clk: exynos5420: register clocks using common clock framework Date: Sat, 08 Jun 2013 13:25:34 +0200 [thread overview] Message-ID: <3151459.QxR0ltoTsu@flatron> (raw) In-Reply-To: <1370516488-25860-9-git-send-email-chander.kashyap@linaro.org> Hi Chander, Thomas, On Thursday 06 of June 2013 16:31:23 Chander Kashyap wrote: > The Exynos5420 clocks are statically listed and registered using the > Samsung specific common clock helper functions. Is the clock tree of Exynos5420 really so much different from Exynos5250 that it needs a separate driver? Just asking out of curiousity, as I haven't an opportunity to look at Exynos5420 yet. Best regards, Tomasz > Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org> > Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org> > --- > .../devicetree/bindings/clock/exynos5420-clock.txt | 201 ++++++ > drivers/clk/samsung/Makefile | 1 + > drivers/clk/samsung/clk-exynos5420.c | 762 > ++++++++++++++++++++ 3 files changed, 964 insertions(+) > create mode 100644 > Documentation/devicetree/bindings/clock/exynos5420-clock.txt create > mode 100644 drivers/clk/samsung/clk-exynos5420.c > > diff --git > a/Documentation/devicetree/bindings/clock/exynos5420-clock.txt > b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt new file > mode 100644 > index 0000000..72d25fc > --- /dev/null > +++ b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt > @@ -0,0 +1,201 @@ > +* Samsung Exynos5420 Clock Controller > + > +The Exynos5420 clock controller generates and supplies clock to various > +controllers within the Exynos5420 SoC. > + > +Required Properties: > + > +- comptible: should be one of the following. > + - "samsung,exynos5420-clock" - controller compatible with Exynos5420 > SoC. + > +- reg: physical base address of the controller and length of memory > mapped + region. > + > +- #clock-cells: should be 1. > + > +The following is the list of clocks generated by the controller. Each > clock is +assigned an identifier and client nodes use this identifier > to specify the +clock which they consume. > + > + > + [Core Clocks] > + > + Clock ID > + ---------------------------- > + > + oscclk 1 > + > + [Clock Gate for Special Clocks] > + > + Clock ID > + ---------------------------- > + sclk_uart0 128 > + sclk_uart1 129 > + sclk_uart2 130 > + sclk_uart3 131 > + sclk_mmc0 132 > + sclk_mmc1 132 > + sclk_mmc2 133 > + sclk_spi0 134 > + sclk_spi1 135 > + sclk_spi2 136 > + sclk_i2s1 137 > + sclk_i2s2 138 > + sclk_pcm1 139 > + sclk_pcm2 140 > + sclk_spdif 141 > + sclk_hdmi 142 > + sclk_pixel 143 > + sclk_dp1 144 > + sclk_mipi1 145 > + sclk_fimd1 146 > + sclk_maudio0 147 > + sclk_maupcm0 148 > + sclk_usbd300 149 > + sclk_usbd301 150 > + sclk_usbphy300 151 > + sclk_usbphy301 152 > + sclk_unipro 153 > + sclk_pwm 154 > + sclk_gscl_wa 155 > + sclk_gscl_wb 156 > + > + [Peripheral Clock Gates] > + > + Clock ID > + ---------------------------- > + > + aclk66_peric 256 > + uart0 257 > + uart1 258 > + uart2 259 > + uart3 260 > + i2c0 261 > + i2c1 262 > + i2c2 263 > + i2c3 264 > + i2c4 265 > + i2c5 266 > + i2c6 267 > + i2c7 268 > + i2c_hdmi 269 > + tsadc 270 > + spi0 271 > + spi1 272 > + spi2 273 > + keyif 274 > + i2s1 275 > + i2s2 276 > + pcm1 277 > + pcm2 278 > + pwm 279 > + spdif 280 > + i2c8 281 > + i2c9 282 > + i2c10 283 > + aclk66_psgen 300 > + chipid 301 > + sysreg 302 > + tzpc0 303 > + tzpc1 304 > + tzpc2 305 > + tzpc3 306 > + tzpc4 307 > + tzpc5 308 > + tzpc6 309 > + tzpc7 310 > + tzpc8 311 > + tzpc9 312 > + hdmi_cec 313 > + seckey 314 > + mct 315 > + wdt 316 > + rtc 317 > + tmu 318 > + tmu_gpu 319 > + pclk66_gpio 330 > + aclk200_fsys2 350 > + mmc0 351 > + mmc1 352 > + mmc2 353 > + sromc 354 > + ufs 355 > + aclk200_fsys 360 > + tsi 361 > + pdma0 362 > + pdma1 363 > + rtic 364 > + usbh20 365 > + usbd300 366 > + usbd301 377 > + aclk400_mscl 380 > + mscl0 381 > + mscl1 382 > + mscl2 383 > + smmu_mscl0 384 > + smmu_mscl1 385 > + smmu_mscl2 386 > + aclk333 400 > + mfc 401 > + smmu_mfcl 402 > + smmu_mfcr 403 > + aclk200_disp1 410 > + dsim1 411 > + dp1 412 > + hdmi 413 > + aclk300_disp1 420 > + fimd1 421 > + smmu_fimd1 422 > + aclk166 430 > + mixer 431 > + aclk266 440 > + rotator 441 > + mdma1 442 > + smmu_rotator 443 > + smmu_mdma1 444 > + aclk300_jpeg 450 > + jpeg 451 > + jpeg2 452 > + smmu_jpeg 453 > + aclk300_gscl 460 > + smmu_gscl0 461 > + smmu_gscl1 462 > + gscl_wa 463 > + gscl_wb 464 > + gscl0 465 > + gscl1 466 > + clk_3aa 467 > + aclk266_g2d 470 > + sss 471 > + slim_sss 472 > + mdma0 473 > + aclk333_g2d 480 > + g2d 481 > + aclk333_432_gscl 490 > + smmu_3aa 491 > + smmu_fimcl0 492 > + smmu_fimcl1 493 > + smmu_fimcl3 494 > + fimc_lite3 495 > + aclk_g3d 500 > + g3d 501 > + > +Example 1: An example of a clock controller node is listed below. > + > + clock: clock-controller at 0x10010000 { > + compatible = "samsung,exynos5420-clock"; > + reg = <0x10010000 0x30000>; > + #clock-cells = <1>; > + }; > + > +Example 2: UART controller node that consumes the clock generated by > the clock + controller. Refer to the standard clock bindings for > information + about 'clocks' and 'clock-names' property. > + > + serial at 13820000 { > + compatible = "samsung,exynos4210-uart"; > + reg = <0x13820000 0x100>; > + interrupts = <0 54 0>; > + clocks = <&clock 259>, <&clock 130>; > + clock-names = "uart", "clk_uart_baud0"; > + }; > diff --git a/drivers/clk/samsung/Makefile b/drivers/clk/samsung/Makefile > index b7c232e..603ba4b 100644 > --- a/drivers/clk/samsung/Makefile > +++ b/drivers/clk/samsung/Makefile > @@ -5,4 +5,5 @@ > obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o > obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o > obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o > +obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o > obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o > diff --git a/drivers/clk/samsung/clk-exynos5420.c > b/drivers/clk/samsung/clk-exynos5420.c new file mode 100644 > index 0000000..76ff872 > --- /dev/null > +++ b/drivers/clk/samsung/clk-exynos5420.c > @@ -0,0 +1,762 @@ > +/* > + * Copyright (c) 2013 Samsung Electronics Co., Ltd. > + * Authors: Thomas Abraham <thomas.ab@samsung.com> > + * Chander Kashyap <k.chander@samsung.com> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as + > * published by the Free Software Foundation. > + * > + * Common Clock Framework support for Exynos5420 SoC. > +*/ > + > +#include <linux/clk.h> > +#include <linux/clkdev.h> > +#include <linux/clk-provider.h> > +#include <linux/of.h> > +#include <linux/of_address.h> > + > +#include "clk.h" > +#include "clk-pll.h" > + > +#define SRC_CPU 0x200 > +#define DIV_CPU0 0x500 > +#define DIV_CPU1 0x504 > +#define GATE_BUS_CPU 0x700 > +#define GATE_SCLK_CPU 0x800 > +#define SRC_TOP0 0x10200 > +#define SRC_TOP1 0x10204 > +#define SRC_TOP2 0x10208 > +#define SRC_TOP3 0x1020c > +#define SRC_TOP4 0x10210 > +#define SRC_TOP5 0x10214 > +#define SRC_TOP6 0x10218 > +#define SRC_TOP7 0x1021c > +#define SRC_DISP10 0x1022c > +#define SRC_MAU 0x10240 > +#define SRC_FSYS 0x10244 > +#define SRC_PERIC0 0x10250 > +#define SRC_PERIC1 0x10254 > +#define SRC_TOP10 0x10280 > +#define SRC_TOP11 0x10284 > +#define SRC_TOP12 0x10288 > +#define SRC_MASK_DISP10 0x1032c > +#define SRC_MASK_FSYS 0x10340 > +#define SRC_MASK_PERIC0 0x10350 > +#define SRC_MASK_PERIC1 0x10354 > +#define DIV_TOP0 0x10500 > +#define DIV_TOP1 0x10504 > +#define DIV_TOP2 0x10508 > +#define DIV_DISP10 0x1052c > +#define DIV_MAU 0x10544 > +#define DIV_FSYS0 0x10548 > +#define DIV_FSYS1 0x1054c > +#define DIV_FSYS2 0x10550 > +#define DIV_PERIC0 0x10558 > +#define DIV_PERIC1 0x1055c > +#define DIV_PERIC2 0x10560 > +#define DIV_PERIC3 0x10564 > +#define DIV_PERIC4 0x10568 > +#define GATE_BUS_TOP 0x10700 > +#define GATE_BUS_FSYS0 0x10740 > +#define GATE_BUS_PERIC 0x10750 > +#define GATE_BUS_PERIC1 0x10754 > +#define GATE_BUS_PERIS0 0x10760 > +#define GATE_BUS_PERIS1 0x10764 > +#define GATE_IP_GSCL0 0x10910 > +#define GATE_IP_GSCL1 0x10920 > +#define GATE_IP_MFC 0x1092c > +#define GATE_IP_DISP1 0x10928 > +#define GATE_IP_G3D 0x10930 > +#define GATE_IP_GEN 0x10934 > +#define GATE_IP_MSCL 0x10970 > +#define GATE_TOP_SCLK_GSCL 0x10820 > +#define GATE_TOP_SCLK_DISP1 0x10828 > +#define GATE_TOP_SCLK_MAU 0x1083c > +#define GATE_TOP_SCLK_FSYS 0x10840 > +#define GATE_TOP_SCLK_PERIC 0x10850 > +#define SRC_CDREX 0x20200 > +#define SRC_KFC 0x28200 > +#define DIV_KFC0 0x28500 > + > +enum exynos5420_clks { > + none, > + > + /* core clocks */ > + oscclk, > + > + /* gate for special clocks (sclk) */ > + sclk_uart0 = 128, sclk_uart1, sclk_uart2, sclk_uart3, sclk_mmc0, > + sclk_mmc1, sclk_mmc2, sclk_spi0, sclk_spi1, sclk_spi2, sclk_i2s1, > + sclk_i2s2, sclk_pcm1, sclk_pcm2, sclk_spdif, sclk_hdmi, sclk_pixel, > + sclk_dp1, sclk_mipi1, sclk_fimd1, sclk_maudio0, sclk_maupcm0, > + sclk_usbd300, sclk_usbd301, sclk_usbphy300, sclk_usbphy301, > sclk_unipro, + sclk_pwm, sclk_gscl_wa, sclk_gscl_wb, > + > + /* gate clocks */ > + aclk66_peric = 256, uart0, uart1, uart2, uart3, i2c0, i2c1, i2c2, > i2c3, + i2c4, i2c5, i2c6, i2c7, i2c_hdmi, tsadc, spi0, spi1, spi2, > keyif, i2s1, + i2s2, pcm1, pcm2, pwm, spdif, i2c8, i2c9, i2c10, > aclk66_psgen = 300, + chipid, sysreg, tzpc0, tzpc1, tzpc2, tzpc3, > tzpc4, tzpc5, tzpc6, tzpc7, + tzpc8, tzpc9, hdmi_cec, seckey, mct, wdt, > rtc, tmu, tmu_gpu, + pclk66_gpio = 330, aclk200_fsys2 = 350, mmc0, > mmc1, mmc2, sromc, ufs, + aclk200_fsys = 360, tsi, pdma0, pdma1, rtic, > usbh20, usbd300, usbd301, + aclk400_mscl = 380, mscl0, mscl1, mscl2, > smmu_mscl0, smmu_mscl1, + smmu_mscl2, aclk333 = 400, mfc, smmu_mfcl, > smmu_mfcr, > + aclk200_disp1 = 410, dsim1, dp1, hdmi, aclk300_disp1 = 420, fimd1, > + smmu_fimd1, aclk166 = 430, mixer, aclk266 = 440, rotator, mdma1, > + smmu_rotator, smmu_mdma1, aclk300_jpeg = 450, jpeg, jpeg2, smmu_jpeg, > + aclk300_gscl = 460, smmu_gscl0, smmu_gscl1, gscl_wa, gscl_wb, gscl0, > + gscl1, clk_3aa, aclk266_g2d = 470, sss, slim_sss, mdma0, > + aclk333_g2d = 480, g2d, aclk333_432_gscl = 490, smmu_3aa, smmu_fimcl0, > + smmu_fimcl1, smmu_fimcl3, fimc_lite3, aclk_g3d = 500, g3d, > + > + nr_clks, > +}; > + > +/* > + * list of controller registers to be saved and restored during a > + * suspend/resume cycle. > + */ > +static __initdata unsigned long exynos5420_clk_regs[] = { > + SRC_CPU, > + DIV_CPU0, > + DIV_CPU1, > + GATE_BUS_CPU, > + GATE_SCLK_CPU, > + SRC_TOP0, > + SRC_TOP1, > + SRC_TOP2, > + SRC_TOP3, > + SRC_TOP4, > + SRC_TOP5, > + SRC_TOP6, > + SRC_TOP7, > + SRC_DISP10, > + SRC_MAU, > + SRC_FSYS, > + SRC_PERIC0, > + SRC_PERIC1, > + SRC_TOP10, > + SRC_TOP11, > + SRC_TOP12, > + SRC_MASK_DISP10, > + SRC_MASK_FSYS, > + SRC_MASK_PERIC0, > + SRC_MASK_PERIC1, > + DIV_TOP0, > + DIV_TOP1, > + DIV_TOP2, > + DIV_DISP10, > + DIV_MAU, > + DIV_FSYS0, > + DIV_FSYS1, > + DIV_FSYS2, > + DIV_PERIC0, > + DIV_PERIC1, > + DIV_PERIC2, > + DIV_PERIC3, > + DIV_PERIC4, > + GATE_BUS_TOP, > + GATE_BUS_FSYS0, > + GATE_BUS_PERIC, > + GATE_BUS_PERIC1, > + GATE_BUS_PERIS0, > + GATE_BUS_PERIS1, > + GATE_IP_GSCL0, > + GATE_IP_GSCL1, > + GATE_IP_MFC, > + GATE_IP_DISP1, > + GATE_IP_G3D, > + GATE_IP_GEN, > + GATE_IP_MSCL, > + GATE_TOP_SCLK_GSCL, > + GATE_TOP_SCLK_DISP1, > + GATE_TOP_SCLK_MAU, > + GATE_TOP_SCLK_FSYS, > + GATE_TOP_SCLK_PERIC, > + SRC_CDREX, > + SRC_KFC, > + DIV_KFC0, > +}; > + > +/* list of all parent clocks */ > +PNAME(mspll_cpu_p) = { "sclk_cpll", "sclk_dpll", > + "sclk_mpll", "sclk_spll" }; > +PNAME(cpu_p) = { "mout_apll" , "mout_mspll_cpu" }; > +PNAME(kfc_p) = { "mout_kpll" , "mout_mspll_kfc" }; > +PNAME(apll_p) = { "oscclk", "fout_apll", }; > +PNAME(bpll_p) = { "oscclk", "fout_bpll", }; > +PNAME(cpll_p) = { "oscclk", "fout_cpll", }; > +PNAME(dpll_p) = { "oscclk", "fout_dpll", }; > +PNAME(epll_p) = { "oscclk", "fout_epll", }; > +PNAME(ipll_p) = { "oscclk", "fout_ipll", }; > +PNAME(kpll_p) = { "oscclk", "fout_kpll", }; > +PNAME(mpll_p) = { "oscclk", "fout_mpll", }; > +PNAME(rpll_p) = { "oscclk", "fout_rpll", }; > +PNAME(spll_p) = { "oscclk", "fout_spll", }; > +PNAME(vpll_p) = { "oscclk", "fout_vpll", }; > + > +PNAME(group1_p) = { "sclk_cpll", "sclk_dpll", "sclk_mpll" }; > +PNAME(group2_p) = { "oscclk", "sclk_cpll", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(group3_p) = { "sclk_rpll", "sclk_spll" }; > +PNAME(group4_p) = { "sclk_ipll", "sclk_dpll", "sclk_mpll" }; > +PNAME(group5_p) = { "sclk_vpll", "sclk_dpll" }; > + > +PNAME(sw_aclk66_p) = { "dout_aclk66", "sclk_spll" }; > +PNAME(aclk66_peric_p) = { "oscclk", "mout_sw_aclk66" }; > + > +PNAME(sw_aclk200_fsys_p) = { "dout_aclk200_fsys", "sclk_spll"}; > +PNAME(user_aclk200_fsys_p) = { "oscclk", "mout_sw_aclk200_fsys" }; > + > +PNAME(sw_aclk200_fsys2_p) = { "dout_aclk200_fsys2", "sclk_spll"}; > +PNAME(user_aclk200_fsys2_p) = { "oscclk", "mout_sw_aclk200_fsys2" }; > + > +PNAME(sw_aclk200_p) = { "dout_aclk200", "sclk_spll"}; > +PNAME(aclk200_disp1_p) = { "oscclk", "mout_sw_aclk200" }; > + > +PNAME(sw_aclk400_mscl_p) = { "dout_aclk400_mscl", "sclk_spll"}; > +PNAME(user_aclk400_mscl_p) = { "oscclk", "mout_sw_aclk400_mscl" }; > + > +PNAME(sw_aclk333_p) = { "dout_aclk333", "sclk_spll"}; > +PNAME(user_aclk333_p) = { "oscclk", "mout_sw_aclk333" }; > + > +PNAME(sw_aclk166_p) = { "dout_aclk166", "sclk_spll"}; > +PNAME(user_aclk166_p) = { "oscclk", "mout_sw_aclk166" }; > + > +PNAME(sw_aclk266_p) = { "dout_aclk266", "sclk_spll"}; > +PNAME(user_aclk266_p) = { "oscclk", "mout_sw_aclk266" }; > + > +PNAME(sw_aclk333_432_gscl_p) = { "dout_aclk333_432_gscl", "sclk_spll"}; > +PNAME(user_aclk333_432_gscl_p) = { "oscclk", > "mout_sw_aclk333_432_gscl" }; + > +PNAME(sw_aclk300_gscl_p) = { "dout_aclk300_gscl", "sclk_spll"}; > +PNAME(user_aclk300_gscl_p) = { "oscclk", "mout_sw_aclk300_gscl" }; > + > +PNAME(sw_aclk300_disp1_p) = { "dout_aclk300_disp1", "sclk_spll"}; > +PNAME(user_aclk300_disp1_p) = { "oscclk", "mout_sw_aclk300_disp1" }; > + > +PNAME(sw_aclk300_jpeg_p) = { "dout_aclk300_jpeg", "sclk_spll"}; > +PNAME(user_aclk300_jpeg_p) = { "oscclk", "mout_sw_aclk300_jpeg" }; > + > +PNAME(sw_aclk_g3d_p) = { "dout_aclk_g3d", "sclk_spll"}; > +PNAME(user_aclk_g3d_p) = { "oscclk", "mout_sw_aclk_g3d" }; > + > +PNAME(sw_aclk266_g2d_p) = { "dout_aclk266_g2d", "sclk_spll"}; > +PNAME(user_aclk266_g2d_p) = { "oscclk", "mout_sw_aclk266_g2d" }; > + > +PNAME(sw_aclk333_g2d_p) = { "dout_aclk333_g2d", "sclk_spll"}; > +PNAME(user_aclk333_g2d_p) = { "oscclk", "mout_sw_aclk333_g2d" }; > + > +PNAME(audio0_p) = { "oscclk", "cdclk0", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(audio1_p) = { "oscclk", "cdclk1", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(audio2_p) = { "oscclk", "cdclk2", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > +PNAME(spdif_p) = { "oscclk", "dout_audio0", "dout_audio1", > "dout_audio2", + "spdif_extclk", "sclk_ipll", "sclk_epll", > "sclk_rpll" }; > +PNAME(hdmi_p) = { "sclk_hdmiphy", "dout_hdmi_pixel" }; > +PNAME(maudio0_p) = { "oscclk", "maudio_clk", "sclk_dpll", "sclk_mpll", > + "sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" }; > + > +/* fixed rate clocks generated outside the soc */ > +struct samsung_fixed_rate_clock exynos5420_fixed_rate_ext_clks[] > __initdata = { + FRATE(oscclk, "oscclk", NULL, CLK_IS_ROOT, 0), > +}; > + > +/* fixed rate clocks generated inside the soc */ > +struct samsung_fixed_rate_clock exynos5420_fixed_rate_clks[] __initdata > = { + FRATE(none, "sclk_hdmiphy", NULL, CLK_IS_ROOT, 24000000), > + FRATE(none, "sclk_pwi", NULL, CLK_IS_ROOT, 24000000), > + FRATE(none, "sclk_usbh20", NULL, CLK_IS_ROOT, 48000000), > + FRATE(none, "mphy_refclk_ixtal24", NULL, CLK_IS_ROOT, 48000000), > + FRATE(none, "sclk_usbh20_scan_clk", NULL, CLK_IS_ROOT, 480000000), > +}; > + > +struct samsung_fixed_factor_clock exynos5420_fixed_factor_clks[] > __initdata = { + FFACTOR(none, "sclk_hsic_12m", "oscclk", 1, 2, 0), > +}; > + > +struct samsung_mux_clock exynos5420_mux_clks[] __initdata = { > + MUX(none, "mout_mspll_kfc", mspll_cpu_p, SRC_TOP7, 8, 2), > + MUX(none, "mout_mspll_cpu", mspll_cpu_p, SRC_TOP7, 12, 2), > + MUX(none, "mout_apll", apll_p, SRC_CPU, 0, 1), > + MUX(none, "mout_cpu", cpu_p, SRC_CPU, 16, 1), > + MUX(none, "mout_kpll", kpll_p, SRC_KFC, 0, 1), > + MUX(none, "mout_cpu_kfc", kfc_p, SRC_KFC, 16, 1), > + > + MUX(none, "sclk_bpll", bpll_p, SRC_CDREX, 0, 1), > + > + MUX_A(none, "mout_aclk400_mscl", group1_p, > + SRC_TOP0, 4, 2, "aclk400_mscl"), > + MUX(none, "mout_aclk200", group1_p, SRC_TOP0, 8, 2), > + MUX(none, "mout_aclk200_fsys2", group1_p, SRC_TOP0, 12, 2), > + MUX(none, "mout_aclk200_fsys", group1_p, SRC_TOP0, 28, 2), > + > + MUX(none, "mout_aclk333_432_gscl", group4_p, SRC_TOP1, 0, 2), > + MUX(none, "mout_aclk66", group1_p, SRC_TOP1, 8, 2), > + MUX(none, "mout_aclk266", group1_p, SRC_TOP1, 20, 2), > + MUX(none, "mout_aclk166", group1_p, SRC_TOP1, 24, 2), > + MUX(none, "mout_aclk333", group1_p, SRC_TOP1, 28, 2), > + > + MUX(none, "mout_aclk333_g2d", group1_p, SRC_TOP2, 8, 2), > + MUX(none, "mout_aclk266_g2d", group1_p, SRC_TOP2, 12, 2), > + MUX(none, "mout_aclk_g3d", group5_p, SRC_TOP2, 16, 1), > + MUX(none, "mout_aclk300_jpeg", group1_p, SRC_TOP2, 20, 2), > + MUX(none, "mout_aclk300_disp1", group1_p, SRC_TOP2, 24, 2), > + MUX(none, "mout_aclk300_gscl", group1_p, SRC_TOP2, 28, 2), > + > + MUX(none, "mout_user_aclk400_mscl", user_aclk400_mscl_p, > + SRC_TOP3, 4, 1), > + MUX_A(none, "mout_aclk200_disp1", aclk200_disp1_p, > + SRC_TOP3, 8, 1, "aclk200_disp1"), > + MUX(none, "mout_user_aclk200_fsys2", user_aclk200_fsys2_p, > + SRC_TOP3, 12, 1), > + MUX(none, "mout_user_aclk200_fsys", user_aclk200_fsys_p, > + SRC_TOP3, 28, 1), > + > + MUX(none, "mout_user_aclk333_432_gscl", user_aclk333_432_gscl_p, > + SRC_TOP4, 0, 1), > + MUX(none, "mout_aclk66_peric", aclk66_peric_p, SRC_TOP4, 8, 1), > + MUX(none, "mout_user_aclk266", user_aclk266_p, SRC_TOP4, 20, 1), > + MUX(none, "mout_user_aclk166", user_aclk166_p, SRC_TOP4, 24, 1), > + MUX(none, "mout_user_aclk333", user_aclk333_p, SRC_TOP4, 28, 1), > + > + MUX(none, "mout_aclk66_psgen", aclk66_peric_p, SRC_TOP5, 4, 1), > + MUX(none, "mout_user_aclk333_g2d", user_aclk333_g2d_p, SRC_TOP5, 8, > 1), + MUX(none, "mout_user_aclk266_g2d", user_aclk266_g2d_p, SRC_TOP5, > 12, 1), + MUX_A(none, "mout_user_aclk_g3d", user_aclk_g3d_p, > + SRC_TOP5, 16, 1, "aclkg3d"), > + MUX(none, "mout_user_aclk300_jpeg", user_aclk300_jpeg_p, > + SRC_TOP5, 20, 1), > + MUX(none, "mout_user_aclk300_disp1", user_aclk300_disp1_p, > + SRC_TOP5, 24, 1), > + MUX(none, "mout_user_aclk300_gscl", user_aclk300_gscl_p, > + SRC_TOP5, 28, 1), > + > + MUX(none, "sclk_mpll", mpll_p, SRC_TOP6, 0, 1), > + MUX(none, "sclk_vpll", vpll_p, SRC_TOP6, 4, 1), > + MUX(none, "sclk_spll", spll_p, SRC_TOP6, 8, 1), > + MUX(none, "sclk_ipll", ipll_p, SRC_TOP6, 12, 1), > + MUX(none, "sclk_rpll", rpll_p, SRC_TOP6, 16, 1), > + MUX(none, "sclk_epll", epll_p, SRC_TOP6, 20, 1), > + MUX(none, "sclk_dpll", dpll_p, SRC_TOP6, 24, 1), > + MUX(none, "sclk_cpll", cpll_p, SRC_TOP6, 28, 1), > + > + MUX(none, "mout_sw_aclk400_mscl", sw_aclk400_mscl_p, SRC_TOP10, 4, 1), > + MUX(none, "mout_sw_aclk200", sw_aclk200_p, SRC_TOP10, 8, 1), > + MUX(none, "mout_sw_aclk200_fsys2", sw_aclk200_fsys2_p, > + SRC_TOP10, 12, 1), > + MUX(none, "mout_sw_aclk200_fsys", sw_aclk200_fsys_p, SRC_TOP10, 28, > 1), + > + MUX(none, "mout_sw_aclk333_432_gscl", sw_aclk333_432_gscl_p, > + SRC_TOP11, 0, 1), > + MUX(none, "mout_sw_aclk66", sw_aclk66_p, SRC_TOP11, 8, 1), > + MUX(none, "mout_sw_aclk266", sw_aclk266_p, SRC_TOP11, 20, 1), > + MUX(none, "mout_sw_aclk166", sw_aclk166_p, SRC_TOP11, 24, 1), > + MUX(none, "mout_sw_aclk333", sw_aclk333_p, SRC_TOP11, 28, 1), > + > + MUX(none, "mout_sw_aclk333_g2d", sw_aclk333_g2d_p, SRC_TOP12, 8, 1), > + MUX(none, "mout_sw_aclk266_g2d", sw_aclk266_g2d_p, SRC_TOP12, 12, 1), > + MUX(none, "mout_sw_aclk_g3d", sw_aclk_g3d_p, SRC_TOP12, 16, 1), > + MUX(none, "mout_sw_aclk300_jpeg", sw_aclk300_jpeg_p, SRC_TOP12, 20, > 1), + MUX(none, "mout_sw_aclk300_disp1", sw_aclk300_disp1_p, > + SRC_TOP12, 24, 1), > + MUX(none, "mout_sw_aclk300_gscl", sw_aclk300_gscl_p, SRC_TOP12, 28, > 1), + > + /* DISP1 Block */ > + MUX(none, "mout_fimd1", group3_p, SRC_DISP10, 4, 1), > + MUX(none, "mout_mipi1", group2_p, SRC_DISP10, 16, 3), > + MUX(none, "mout_dp1", group2_p, SRC_DISP10, 20, 3), > + MUX(none, "mout_pixel", group2_p, SRC_DISP10, 24, 3), > + MUX(none, "mout_hdmi", hdmi_p, SRC_DISP10, 28, 1), > + > + /* MAU Block */ > + MUX(none, "mout_maudio0", maudio0_p, SRC_MAU, 28, 3), > + > + /* FSYS Block */ > + MUX(none, "mout_usbd301", group2_p, SRC_FSYS, 4, 3), > + MUX(none, "mout_mmc0", group2_p, SRC_FSYS, 8, 3), > + MUX(none, "mout_mmc1", group2_p, SRC_FSYS, 12, 3), > + MUX(none, "mout_mmc2", group2_p, SRC_FSYS, 16, 3), > + MUX(none, "mout_usbd300", group2_p, SRC_FSYS, 20, 3), > + MUX(none, "mout_unipro", group2_p, SRC_FSYS, 24, 3), > + > + /* PERIC Block */ > + MUX(none, "mout_uart0", group2_p, SRC_PERIC0, 4, 3), > + MUX(none, "mout_uart1", group2_p, SRC_PERIC0, 8, 3), > + MUX(none, "mout_uart2", group2_p, SRC_PERIC0, 12, 3), > + MUX(none, "mout_uart3", group2_p, SRC_PERIC0, 16, 3), > + MUX(none, "mout_pwm", group2_p, SRC_PERIC0, 24, 3), > + MUX(none, "mout_spdif", spdif_p, SRC_PERIC0, 28, 3), > + MUX(none, "mout_audio0", audio0_p, SRC_PERIC1, 8, 3), > + MUX(none, "mout_audio1", audio1_p, SRC_PERIC1, 12, 3), > + MUX(none, "mout_audio2", audio2_p, SRC_PERIC1, 16, 3), > + MUX(none, "mout_spi0", group2_p, SRC_PERIC1, 20, 3), > + MUX(none, "mout_spi1", group2_p, SRC_PERIC1, 24, 3), > + MUX(none, "mout_spi2", group2_p, SRC_PERIC1, 28, 3), > +}; > + > +struct samsung_div_clock exynos5420_div_clks[] __initdata = { > + DIV(none, "div_arm", "mout_cpu", DIV_CPU0, 0, 3), > + DIV(none, "sclk_apll", "mout_apll", DIV_CPU0, 24, 3), > + DIV(none, "armclk2", "div_arm", DIV_CPU0, 28, 3), > + DIV(none, "div_kfc", "mout_cpu_kfc", DIV_KFC0, 0, 3), > + DIV(none, "sclk_kpll", "mout_kpll", DIV_KFC0, 24, 3), > + > + DIV(none, "dout_aclk400_mscl", "mout_aclk400_mscl", DIV_TOP0, 4, 3), > + DIV(none, "dout_aclk200", "mout_aclk200", DIV_TOP0, 8, 3), > + DIV(none, "dout_aclk200_fsys2", "mout_aclk200_fsys2", DIV_TOP0, 12, > 3), + DIV(none, "dout_pclk200_fsys", "mout_pclk200_fsys", DIV_TOP0, 24, > 3), + DIV(none, "dout_aclk200_fsys", "mout_aclk200_fsys", DIV_TOP0, 28, > 3), + > + DIV(none, "dout_aclk333_432_gscl", "mout_aclk333_432_gscl", > + DIV_TOP1, 0, 3), > + DIV(none, "dout_aclk66", "mout_aclk66", DIV_TOP1, 8, 6), > + DIV(none, "dout_aclk266", "mout_aclk266", DIV_TOP1, 20, 3), > + DIV(none, "dout_aclk166", "mout_aclk166", DIV_TOP1, 24, 3), > + DIV(none, "dout_aclk333", "mout_aclk333", DIV_TOP1, 28, 3), > + > + DIV(none, "dout_aclk333_g2d", "mout_aclk333_g2d", DIV_TOP2, 8, 3), > + DIV(none, "dout_aclk266_g2d", "mout_aclk266_g2d", DIV_TOP2, 12, 3), > + DIV(none, "dout_aclk_g3d", "mout_aclk_g3d", DIV_TOP2, 16, 3), > + DIV(none, "dout_aclk300_jpeg", "mout_aclk300_jpeg", DIV_TOP2, 20, 3), > + DIV_A(none, "dout_aclk300_disp1", "mout_aclk300_disp1", > + DIV_TOP2, 24, 3, "aclk300_disp1"), > + DIV(none, "dout_aclk300_gscl", "mout_aclk300_gscl", DIV_TOP2, 28, 3), > + > + /* DISP1 Block */ > + DIV(none, "dout_fimd1", "mout_fimd1", DIV_DISP10, 0, 4), > + DIV(none, "dout_mipi1", "mout_mipi1", DIV_DISP10, 16, 8), > + DIV(none, "dout_dp1", "mout_dp1", DIV_DISP10, 24, 4), > + DIV(none, "dout_hdmi_pixel", "mout_pixel", DIV_DISP10, 28, 4), > + > + /* Audio Block */ > + DIV(none, "dout_maudio0", "mout_maudio0", DIV_MAU, 20, 4), > + DIV(none, "dout_maupcm0", "dout_maudio0", DIV_MAU, 24, 8), > + > + /* USB3.0 */ > + DIV(none, "dout_usbphy301", "mout_usbd301", DIV_FSYS0, 12, 4), > + DIV(none, "dout_usbphy300", "mout_usbd300", DIV_FSYS0, 16, 4), > + DIV(none, "dout_usbd301", "mout_usbd301", DIV_FSYS0, 20, 4), > + DIV(none, "dout_usbd300", "mout_usbd300", DIV_FSYS0, 24, 4), > + > + /* MMC */ > + DIV(none, "dout_mmc0", "mout_mmc0", DIV_FSYS1, 0, 10), > + DIV(none, "dout_mmc1", "mout_mmc1", DIV_FSYS1, 10, 10), > + DIV(none, "dout_mmc2", "mout_mmc2", DIV_FSYS1, 20, 10), > + > + DIV(none, "dout_unipro", "mout_unipro", DIV_FSYS2, 24, 8), > + > + /* UART and PWM */ > + DIV(none, "dout_uart0", "mout_uart0", DIV_PERIC0, 8, 4), > + DIV(none, "dout_uart1", "mout_uart1", DIV_PERIC0, 12, 4), > + DIV(none, "dout_uart2", "mout_uart2", DIV_PERIC0, 16, 4), > + DIV(none, "dout_uart3", "mout_uart3", DIV_PERIC0, 20, 4), > + DIV(none, "dout_pwm", "mout_pwm", DIV_PERIC0, 28, 4), > + > + /* SPI */ > + DIV(none, "dout_spi0", "mout_spi0", DIV_PERIC1, 20, 4), > + DIV(none, "dout_spi1", "mout_spi1", DIV_PERIC1, 24, 4), > + DIV(none, "dout_spi2", "mout_spi2", DIV_PERIC1, 28, 4), > + > + /* PCM */ > + DIV(none, "dout_pcm1", "dout_audio1", DIV_PERIC2, 16, 8), > + DIV(none, "dout_pcm2", "dout_audio2", DIV_PERIC2, 24, 8), > + > + /* Audio - I2S */ > + DIV(none, "dout_i2s1", "dout_audio1", DIV_PERIC3, 6, 6), > + DIV(none, "dout_i2s2", "dout_audio2", DIV_PERIC3, 12, 6), > + DIV(none, "dout_audio0", "mout_audio0", DIV_PERIC3, 20, 4), > + DIV(none, "dout_audio1", "mout_audio1", DIV_PERIC3, 24, 4), > + DIV(none, "dout_audio2", "mout_audio2", DIV_PERIC3, 28, 4), > + > + /* SPI Pre-Ratio */ > + DIV(none, "dout_pre_spi0", "dout_spi0", DIV_PERIC4, 8, 8), > + DIV(none, "dout_pre_spi1", "dout_spi1", DIV_PERIC4, 16, 8), > + DIV(none, "dout_pre_spi2", "dout_spi2", DIV_PERIC4, 24, 8), > +}; > + > +struct samsung_gate_clock exynos5420_gate_clks[] __initdata = { > + /* TODO: Re-verify the CG bits for all the gate clocks */ > + GATE_A(mct, "pclk_st", "aclk66_psgen", GATE_BUS_PERIS1, 2, 0, 0, > "mct"), + > + GATE(0, "aclk200_fsys", "mout_user_aclk200_fsys", > + GATE_BUS_FSYS0, 9, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk200_fsys2", "mout_user_aclk200_fsys2", > + GATE_BUS_FSYS0, 10, CLK_IGNORE_UNUSED, 0), > + > + GATE(0, "aclk333_g2d", "mout_user_aclk333_g2d", > + GATE_BUS_TOP, 0, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk266_g2d", "mout_user_aclk266_g2d", > + GATE_BUS_TOP, 1, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk300_jpeg", "mout_user_aclk300_jpeg", > + GATE_BUS_TOP, 4, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk300_gscl", "mout_user_aclk300_gscl", > + GATE_BUS_TOP, 6, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk333_432_gscl", "mout_user_aclk333_432_gscl", > + GATE_BUS_TOP, 7, CLK_IGNORE_UNUSED, 0), > + GATE(0, "pclk66_gpio", "mout_sw_aclk66", > + GATE_BUS_TOP, 9, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk66_psgen", "mout_aclk66_psgen", > + GATE_BUS_TOP, 10, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk66_peric", "mout_aclk66_peric", > + GATE_BUS_TOP, 11, 0, 0), > + GATE(0, "aclk166", "mout_user_aclk166", > + GATE_BUS_TOP, 14, CLK_IGNORE_UNUSED, 0), > + GATE(0, "aclk333", "mout_aclk333", > + GATE_BUS_TOP, 15, CLK_IGNORE_UNUSED, 0), > + > + /* sclk */ > + GATE(sclk_uart0, "sclk_uart0", "dout_uart0", > + GATE_TOP_SCLK_PERIC, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_uart1, "sclk_uart1", "dout_uart1", > + GATE_TOP_SCLK_PERIC, 1, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_uart2, "sclk_uart2", "dout_uart2", > + GATE_TOP_SCLK_PERIC, 2, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_uart3, "sclk_uart3", "dout_uart3", > + GATE_TOP_SCLK_PERIC, 3, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spi0, "sclk_spi0", "dout_pre_spi0", > + GATE_TOP_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spi1, "sclk_spi1", "dout_pre_spi1", > + GATE_TOP_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spi2, "sclk_spi2", "dout_pre_spi2", > + GATE_TOP_SCLK_PERIC, 8, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_spdif, "sclk_spdif", "mout_spdif", > + GATE_TOP_SCLK_PERIC, 9, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pwm, "sclk_pwm", "dout_pwm", > + GATE_TOP_SCLK_PERIC, 11, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pcm1, "sclk_pcm1", "dout_pcm1", > + GATE_TOP_SCLK_PERIC, 15, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pcm2, "sclk_pcm2", "dout_pcm2", > + GATE_TOP_SCLK_PERIC, 16, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_i2s1, "sclk_i2s1", "dout_i2s1", > + GATE_TOP_SCLK_PERIC, 17, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_i2s2, "sclk_i2s2", "dout_i2s2", > + GATE_TOP_SCLK_PERIC, 18, CLK_SET_RATE_PARENT, 0), > + > + GATE(sclk_mmc0, "sclk_mmc0", "dout_mmc0", > + GATE_TOP_SCLK_FSYS, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_mmc1, "sclk_mmc1", "dout_mmc1", > + GATE_TOP_SCLK_FSYS, 1, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_mmc2, "sclk_mmc2", "dout_mmc2", > + GATE_TOP_SCLK_FSYS, 2, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbphy301, "sclk_usbphy301", "dout_usbphy301", > + GATE_TOP_SCLK_FSYS, 7, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbphy300, "sclk_usbphy300", "dout_usbphy300", > + GATE_TOP_SCLK_FSYS, 8, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbd300, "sclk_usbd300", "dout_usbd300", > + GATE_TOP_SCLK_FSYS, 9, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_usbd301, "sclk_usbd301", "dout_usbd301", > + GATE_TOP_SCLK_FSYS, 10, CLK_SET_RATE_PARENT, 0), > + > + GATE(sclk_usbd301, "sclk_unipro", "dout_unipro", > + SRC_MASK_FSYS, 24, CLK_SET_RATE_PARENT, 0), > + > + GATE(sclk_gscl_wa, "sclk_gscl_wa", "aclK333_432_gscl", > + GATE_TOP_SCLK_GSCL, 6, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_gscl_wb, "sclk_gscl_wb", "aclk333_432_gscl", > + GATE_TOP_SCLK_GSCL, 7, CLK_SET_RATE_PARENT, 0), > + > + /* Display */ > + GATE(sclk_fimd1, "sclk_fimd1", "dout_fimd1", > + GATE_TOP_SCLK_DISP1, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_mipi1, "sclk_mipi1", "dout_mipi1", > + GATE_TOP_SCLK_DISP1, 3, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_hdmi, "sclk_hdmi", "mout_hdmi", > + GATE_TOP_SCLK_DISP1, 9, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_pixel, "sclk_pixel", "dout_hdmi_pixel", > + GATE_TOP_SCLK_DISP1, 10, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_dp1, "sclk_dp1", "dout_dp1", > + GATE_TOP_SCLK_DISP1, 20, CLK_SET_RATE_PARENT, 0), > + > + /* Maudio Block */ > + GATE(sclk_maudio0, "sclk_maudio0", "dout_maudio0", > + GATE_TOP_SCLK_MAU, 0, CLK_SET_RATE_PARENT, 0), > + GATE(sclk_maupcm0, "sclk_maupcm0", "dout_maupcm0", > + GATE_TOP_SCLK_MAU, 1, CLK_SET_RATE_PARENT, 0), > + /* FSYS */ > + GATE(tsi, "tsi", "aclk200_fsys", GATE_BUS_FSYS0, 0, 0, 0), > + GATE(pdma0, "pdma0", "aclk200_fsys", GATE_BUS_FSYS0, 1, 0, 0), > + GATE(pdma1, "pdma1", "aclk200_fsys", GATE_BUS_FSYS0, 2, 0, 0), > + GATE(ufs, "ufs", "aclk200_fsys2", GATE_BUS_FSYS0, 3, 0, 0), > + GATE(rtic, "rtic", "aclk200_fsys", GATE_BUS_FSYS0, 5, 0, 0), > + GATE(mmc0, "mmc0", "aclk200_fsys2", GATE_BUS_FSYS0, 12, 0, 0), > + GATE(mmc1, "mmc1", "aclk200_fsys2", GATE_BUS_FSYS0, 13, 0, 0), > + GATE(mmc2, "mmc2", "aclk200_fsys2", GATE_BUS_FSYS0, 14, 0, 0), > + GATE(sromc, "sromc", "aclk200_fsys2", > + GATE_BUS_FSYS0, 19, CLK_IGNORE_UNUSED, 0), > + GATE(usbh20, "usbh20", "aclk200_fsys", GATE_BUS_FSYS0, 20, 0, 0), > + GATE(usbd300, "usbd300", "aclk200_fsys", GATE_BUS_FSYS0, 21, 0, 0), > + GATE(usbd301, "usbd301", "aclk200_fsys", GATE_BUS_FSYS0, 28, 0, 0), > + > + /* UART */ > + GATE(uart0, "uart0", "aclk66_peric", GATE_BUS_PERIC, 4, 0, 0), > + GATE(uart1, "uart1", "aclk66_peric", GATE_BUS_PERIC, 5, 0, 0), > + GATE_A(uart2, "uart2", "aclk66_peric", > + GATE_BUS_PERIC, 6, CLK_IGNORE_UNUSED, 0, "uart2"), > + GATE(uart3, "uart3", "aclk66_peric", GATE_BUS_PERIC, 7, 0, 0), > + /* I2C */ > + GATE(i2c0, "i2c0", "aclk66_peric", GATE_BUS_PERIC, 9, 0, 0), > + GATE(i2c1, "i2c1", "aclk66_peric", GATE_BUS_PERIC, 10, 0, 0), > + GATE(i2c2, "i2c2", "aclk66_peric", GATE_BUS_PERIC, 11, 0, 0), > + GATE(i2c3, "i2c3", "aclk66_peric", GATE_BUS_PERIC, 12, 0, 0), > + GATE(i2c4, "i2c4", "aclk66_peric", GATE_BUS_PERIC, 13, 0, 0), > + GATE(i2c5, "i2c5", "aclk66_peric", GATE_BUS_PERIC, 14, 0, 0), > + GATE(i2c6, "i2c6", "aclk66_peric", GATE_BUS_PERIC, 15, 0, 0), > + GATE(i2c7, "i2c7", "aclk66_peric", GATE_BUS_PERIC, 16, 0, 0), > + GATE(i2c_hdmi, "i2c_hdmi", "aclk66_peric", GATE_BUS_PERIC, 17, 0, 0), > + GATE(tsadc, "tsadc", "aclk66_peric", GATE_BUS_PERIC, 18, 0, 0), > + /* SPI */ > + GATE(spi0, "spi0", "aclk66_peric", GATE_BUS_PERIC, 19, 0, 0), > + GATE(spi1, "spi1", "aclk66_peric", GATE_BUS_PERIC, 20, 0, 0), > + GATE(spi2, "spi2", "aclk66_peric", GATE_BUS_PERIC, 21, 0, 0), > + GATE(keyif, "keyif", "aclk66_peric", GATE_BUS_PERIC, 22, 0, 0), > + /* I2S */ > + GATE(i2s1, "i2s1", "aclk66_peric", GATE_BUS_PERIC, 23, 0, 0), > + GATE(i2s2, "i2s2", "aclk66_peric", GATE_BUS_PERIC, 24, 0, 0), > + /* PCM */ > + GATE(pcm1, "pcm1", "aclk66_peric", GATE_BUS_PERIC, 25, 0, 0), > + GATE(pcm2, "pcm2", "aclk66_peric", GATE_BUS_PERIC, 26, 0, 0), > + /* PWM */ > + GATE(pwm, "pwm", "aclk66_peric", GATE_BUS_PERIC, 27, 0, 0), > + /* SPDIF */ > + GATE(spdif, "spdif", "aclk66_peric", GATE_BUS_PERIC, 29, 0, 0), > + > + GATE(i2c8, "i2c8", "aclk66_peric", GATE_BUS_PERIC1, 0, 0, 0), > + GATE(i2c9, "i2c9", "aclk66_peric", GATE_BUS_PERIC1, 1, 0, 0), > + GATE(i2c10, "i2c10", "aclk66_peric", GATE_BUS_PERIC1, 2, 0, 0), > + > + GATE(chipid, "chipid", "aclk66_psgen", > + GATE_BUS_PERIS0, 12, CLK_IGNORE_UNUSED, 0), > + GATE(sysreg, "sysreg", "aclk66_psgen", > + GATE_BUS_PERIS0, 13, CLK_IGNORE_UNUSED, 0), > + GATE(tzpc0, "tzpc0", "aclk66_psgen", GATE_BUS_PERIS0, 18, 0, 0), > + GATE(tzpc1, "tzpc1", "aclk66_psgen", GATE_BUS_PERIS0, 19, 0, 0), > + GATE(tzpc2, "tzpc2", "aclk66_psgen", GATE_BUS_PERIS0, 20, 0, 0), > + GATE(tzpc3, "tzpc3", "aclk66_psgen", GATE_BUS_PERIS0, 21, 0, 0), > + GATE(tzpc4, "tzpc4", "aclk66_psgen", GATE_BUS_PERIS0, 22, 0, 0), > + GATE(tzpc5, "tzpc5", "aclk66_psgen", GATE_BUS_PERIS0, 23, 0, 0), > + GATE(tzpc6, "tzpc6", "aclk66_psgen", GATE_BUS_PERIS0, 24, 0, 0), > + GATE(tzpc7, "tzpc7", "aclk66_psgen", GATE_BUS_PERIS0, 25, 0, 0), > + GATE(tzpc8, "tzpc8", "aclk66_psgen", GATE_BUS_PERIS0, 26, 0, 0), > + GATE(tzpc9, "tzpc9", "aclk66_psgen", GATE_BUS_PERIS0, 27, 0, 0), > + > + GATE(hdmi_cec, "hdmi_cec", "aclk66_psgen", GATE_BUS_PERIS1, 0, 0, 0), > + GATE(seckey, "seckey", "aclk66_psgen", GATE_BUS_PERIS1, 1, 0, 0), > + GATE(wdt, "wdt", "aclk66_psgen", GATE_BUS_PERIS1, 3, 0, 0), > + GATE(rtc, "rtc", "aclk66_psgen", GATE_BUS_PERIS1, 4, 0, 0), > + GATE(tmu, "tmu", "aclk66_psgen", GATE_BUS_PERIS1, 5, 0, 0), > + GATE(tmu_gpu, "tmu_gpu", "aclk66_psgen", GATE_BUS_PERIS1, 6, 0, 0), > + > + GATE(gscl0, "gscl0", "aclk300_gscl", GATE_IP_GSCL0, 0, 0, 0), > + GATE(gscl1, "gscl1", "aclk300_gscl", GATE_IP_GSCL0, 1, 0, 0), > + GATE(clk_3aa, "clk_3aa", "aclk300_gscl", GATE_IP_GSCL0, 4, 0, 0), > + > + GATE(smmu_3aa, "smmu_3aa", "aclk333_432_gscl", GATE_IP_GSCL1, 2, 0, > 0), + GATE(smmu_fimcl0, "smmu_fimcl0", "aclk333_432_gscl", > + GATE_IP_GSCL1, 3, 0, 0), > + GATE(smmu_fimcl1, "smmu_fimcl1", "aclk333_432_gscl", > + GATE_IP_GSCL1, 4, 0, 0), > + GATE(smmu_gscl0, "smmu_gscl0", "aclk300_gscl", GATE_IP_GSCL1, 6, 0, > 0), + GATE(smmu_gscl1, "smmu_gscl1", "aclk300_gscl", GATE_IP_GSCL1, 7, > 0, 0), + GATE(gscl_wa, "gscl_wa", "aclk300_gscl", GATE_IP_GSCL1, 12, 0, > 0), + GATE(gscl_wb, "gscl_wb", "aclk300_gscl", GATE_IP_GSCL1, 13, 0, > 0), + GATE(smmu_fimcl3, "smmu_fimcl3,", "aclk333_432_gscl", > + GATE_IP_GSCL1, 16, 0, 0), > + GATE(fimc_lite3, "fimc_lite3", "aclk333_432_gscl", > + GATE_IP_GSCL1, 17, 0, 0), > + > + GATE(fimd1, "fimd1", "aclk300_disp1", GATE_IP_DISP1, 0, 0, 0), > + GATE(dsim1, "dsim1", "aclk200_disp1", GATE_IP_DISP1, 3, 0, 0), > + GATE(dp1, "dp1", "aclk200_disp1", GATE_IP_DISP1, 4, 0, 0), > + GATE(mixer, "mixer", "aclk166", GATE_IP_DISP1, 5, 0, 0), > + GATE(hdmi, "hdmi", "aclk200_disp1", GATE_IP_DISP1, 6, 0, 0), > + GATE(smmu_fimd1, "smmu_fimd1", "aclk300_disp1", GATE_IP_DISP1, 8, 0, > 0), + > + GATE(mfc, "mfc", "aclk333", GATE_IP_MFC, 0, 0, 0), > + GATE(smmu_mfcl, "smmu_mfcl", "aclk333", GATE_IP_MFC, 1, 0, 0), > + GATE(smmu_mfcr, "smmu_mfcr", "aclk333", GATE_IP_MFC, 2, 0, 0), > + > + GATE(g3d, "g3d", "aclkg3d", GATE_IP_G3D, 9, 0, 0), > + > + GATE(rotator, "rotator", "aclk266", GATE_IP_GEN, 1, 0, 0), > + GATE(jpeg, "jpeg", "aclk300_jpeg", GATE_IP_GEN, 2, 0, 0), > + GATE(jpeg2, "jpeg2", "aclk300_jpeg", GATE_IP_GEN, 3, 0, 0), > + GATE(mdma1, "mdma1", "aclk266", GATE_IP_GEN, 4, 0, 0), > + GATE(smmu_rotator, "smmu_rotator", "aclk266", GATE_IP_GEN, 6, 0, 0), > + GATE(smmu_jpeg, "smmu_jpeg", "aclk300_jpeg", GATE_IP_GEN, 7, 0, 0), > + GATE(smmu_mdma1, "smmu_mdma1", "aclk266", GATE_IP_GEN, 9, 0, 0), > + > + GATE(mscl0, "mscl0", "aclk400_mscl", GATE_IP_MSCL, 0, 0, 0), > + GATE(mscl1, "mscl1", "aclk400_mscl", GATE_IP_MSCL, 1, 0, 0), > + GATE(mscl2, "mscl2", "aclk400_mscl", GATE_IP_MSCL, 2, 0, 0), > + GATE(smmu_mscl0, "smmu_mscl0", "aclk400_mscl", GATE_IP_MSCL, 8, 0, 0), > + GATE(smmu_mscl1, "smmu_mscl1", "aclk400_mscl", GATE_IP_MSCL, 9, 0, > 0), + GATE(smmu_mscl2, "smmu_mscl2", "aclk400_mscl", GATE_IP_MSCL, 10, > 0, 0), +}; > + > +static __initdata struct of_device_id ext_clk_match[] = { > + { .compatible = "samsung,exynos5420-oscclk", .data = (void *)0, }, > + { }, > +}; > + > +/* register exynos5420 clocks */ > +void __init exynos5420_clk_init(struct device_node *np) > +{ > + void __iomem *reg_base; > + struct clk *apll, *bpll, *cpll, *dpll, *epll, *ipll, *kpll, *mpll; > + struct clk *rpll, *spll, *vpll; > + > + if (np) { > + reg_base = of_iomap(np, 0); > + if (!reg_base) > + panic("%s: failed to map registers\n", __func__); > + } else { > + panic("%s: unable to determine soc\n", __func__); > + } > + > + samsung_clk_init(np, reg_base, nr_clks, > + exynos5420_clk_regs, ARRAY_SIZE(exynos5420_clk_regs), > + NULL, 0); > + samsung_clk_of_register_fixed_ext(exynos5420_fixed_rate_ext_clks, > + ARRAY_SIZE(exynos5420_fixed_rate_ext_clks), > + ext_clk_match); > + > + apll = samsung_clk_register_pll35xx("fout_apll", "oscclk", > + reg_base + 0x100); > + bpll = samsung_clk_register_pll35xx("fout_bpll", "oscclk", > + reg_base + 0x20110); > + cpll = samsung_clk_register_pll35xx("fout_cpll", "oscclk", > + reg_base + 0x10120); > + dpll = samsung_clk_register_pll35xx("fout_dpll", "oscclk", > + reg_base + 0x10128); > + epll = samsung_clk_register_pll35xx("fout_epll", "oscclk", > + reg_base + 0x10130); > + ipll = samsung_clk_register_pll35xx("fout_ipll", "oscclk", > + reg_base + 0x10150); > + kpll = samsung_clk_register_pll35xx("fout_kpll", "oscclk", > + reg_base + 0x28100); > + mpll = samsung_clk_register_pll35xx("fout_mpll", "oscclk", > + reg_base + 0x10180); > + rpll = samsung_clk_register_pll35xx("fout_rpll", "oscclk", > + reg_base + 0x10140); > + spll = samsung_clk_register_pll35xx("fout_spll", "oscclk", > + reg_base + 0x10160); > + vpll = samsung_clk_register_pll35xx("fout_vpll", "oscclk", > + reg_base + 0x10170); > + > + samsung_clk_register_fixed_rate(exynos5420_fixed_rate_clks, > + ARRAY_SIZE(exynos5420_fixed_rate_clks)); > + samsung_clk_register_fixed_factor(exynos5420_fixed_factor_clks, > + ARRAY_SIZE(exynos5420_fixed_factor_clks)); > + samsung_clk_register_mux(exynos5420_mux_clks, > + ARRAY_SIZE(exynos5420_mux_clks)); > + samsung_clk_register_div(exynos5420_div_clks, > + ARRAY_SIZE(exynos5420_div_clks)); > + samsung_clk_register_gate(exynos5420_gate_clks, > + ARRAY_SIZE(exynos5420_gate_clks)); > +} > +CLK_OF_DECLARE(exynos5420_clk, "samsung,exynos5420-clock", > exynos5420_clk_init);
next prev parent reply other threads:[~2013-06-08 11:25 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-06-06 11:01 [PATCH 01/13] ARM: Exynos: initialize l2x0 cache controller only for cortex-a9 based SoCs Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 02/13] ARM: Exynos: fix secondary cpu power control register address calculation Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-08 11:05 ` Tomasz Figa 2013-06-08 11:05 ` Tomasz Figa 2013-06-11 13:46 ` Chander Kashyap 2013-06-11 13:46 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 03/13] ARM: dts: fork out common Exynos5 nodes Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:14 ` Sachin Kamat 2013-06-06 11:14 ` Sachin Kamat 2013-06-08 11:12 ` Tomasz Figa 2013-06-08 11:12 ` Tomasz Figa 2013-06-11 13:49 ` Chander Kashyap 2013-06-11 13:49 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 04/13] ARM: dts: list the CPU nodes for Exynos5250 Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 16:54 ` Mark Rutland 2013-06-06 16:54 ` Mark Rutland 2013-06-10 9:18 ` Chander Kashyap 2013-06-10 9:18 ` Chander Kashyap 2013-06-08 11:16 ` Tomasz Figa 2013-06-08 11:16 ` Tomasz Figa 2013-06-10 9:18 ` Chander Kashyap 2013-06-10 9:18 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 05/13] ARM: Exynos: Add support for Exynos5420 SoC Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 06/13] serial: samsung: add support for Exynos5420 Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:35 ` Girish KS 2013-06-06 11:35 ` Girish KS 2013-06-10 9:05 ` Chander Kashyap 2013-06-10 9:05 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 07/13] ARM: Exynos: use four additional chipid bits to identify Exynos family Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 08/13] irqchip: exynos-combiner: set irq base as 256 for Exynos5420 Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-08 11:24 ` Tomasz Figa 2013-06-08 11:24 ` Tomasz Figa 2013-06-06 11:01 ` [PATCH 09/13] clk: exynos5420: register clocks using common clock framework Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-08 11:25 ` Tomasz Figa [this message] 2013-06-08 11:25 ` Tomasz Figa 2013-06-11 13:22 ` Chander Kashyap 2013-06-11 13:22 ` Chander Kashyap 2013-06-10 11:12 ` sunil joshi 2013-06-10 11:12 ` sunil joshi 2013-06-11 13:23 ` Chander Kashyap 2013-06-11 13:23 ` Chander Kashyap 2013-06-12 21:17 ` Tomasz Figa 2013-06-12 21:17 ` Tomasz Figa 2013-06-12 21:32 ` Andrew Bresticker 2013-06-12 21:32 ` Andrew Bresticker 2013-06-13 5:18 ` Chander Kashyap 2013-06-13 5:18 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 10/13] ARM: dts: Add initial device tree support for Exynos5420 Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 16:34 ` Mark Rutland 2013-06-06 16:34 ` Mark Rutland 2013-06-11 13:35 ` Chander Kashyap 2013-06-11 13:35 ` Chander Kashyap 2013-06-11 14:11 ` Mark Rutland 2013-06-11 14:11 ` Mark Rutland 2013-06-12 5:35 ` Subash Patel 2013-06-12 5:35 ` Subash Patel 2013-06-08 11:38 ` Tomasz Figa 2013-06-08 11:38 ` Tomasz Figa 2013-06-14 13:54 ` Chander Kashyap 2013-06-14 13:54 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 00/10] ARM: Exynos: Add Exynos5420 SoC support Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 01/10] ARM: dts: fork out common Exynos5 nodes Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 02/10] ARM: dts: list the CPU nodes for Exynos5250 Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 03/10] ARM: Exynos: Add support for Exynos5420 SoC Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 04/10] serial: samsung: select Exynos specific driver data if ARCH_EXYNOS is defined Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 05/10] ARM: Exynos: use four additional chipid bits to identify Exynos family Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 06/10] clk: exynos5420: register clocks using common clock framework Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 17:26 ` Andrew Bresticker 2013-06-14 17:26 ` Andrew Bresticker 2013-06-17 8:46 ` Chander Kashyap 2013-06-17 8:46 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 07/10] ARM: dts: Add initial device tree support for Exynos5420 Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-17 8:46 ` Mark Rutland 2013-06-17 8:46 ` Mark Rutland [not found] ` <CAGOxZ51H_dtZN3Nx-=qU+gjHAEwgPA--SZrdiu-sBCANhdKtAw@mail.gmail.com> 2013-06-17 11:08 ` Chander Kashyap 2013-06-17 11:08 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 08/10] clocksource: exynos_mct: use (request/free)_irq calls for local timer registration Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-17 10:01 ` Mark Rutland 2013-06-17 10:01 ` Mark Rutland 2013-06-17 10:29 ` Chander Kashyap 2013-06-17 10:29 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 09/10] ARM: Exynos: add secondary CPU boot base location for Exynos5420 Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-14 14:02 ` [PATCH v2 10/10] ARM: Exynos: extend soft-reset support " Chander Kashyap 2013-06-14 14:02 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 11/13] clocksource: exynos_mct: extend local timer support for four cores Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 16:50 ` Mark Rutland 2013-06-06 16:50 ` Mark Rutland 2013-06-08 11:39 ` Tomasz Figa 2013-06-08 11:39 ` Tomasz Figa 2013-06-11 13:26 ` Chander Kashyap 2013-06-11 13:26 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 12/13] ARM: Exynos: add secondary CPU boot base location for Exynos5420 Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 13/13] ARM: Exynos: extend soft-reset support " Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-06 11:44 ` Tushar Behera 2013-06-06 11:44 ` Tushar Behera 2013-06-10 8:54 ` Kukjin Kim 2013-06-10 8:54 ` Kukjin Kim 2013-06-11 13:24 ` Chander Kashyap 2013-06-11 13:24 ` Chander Kashyap 2013-06-06 11:01 ` [PATCH 00/13] add exynos5420 support Chander Kashyap 2013-06-06 11:01 ` Chander Kashyap 2013-06-08 10:57 ` [PATCH 01/13] ARM: Exynos: initialize l2x0 cache controller only for cortex-a9 based SoCs Tomasz Figa 2013-06-08 10:57 ` Tomasz Figa 2013-06-11 23:58 ` Olof Johansson 2013-06-11 23:58 ` Olof Johansson
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=3151459.QxR0ltoTsu@flatron \ --to=tomasz.figa@gmail.com \ --cc=chander.kashyap@linaro.org \ --cc=kgene.kim@samsung.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=s.nawrocki@samsung.com \ --cc=t.figa@samsung.com \ --cc=thomas.ab@samsung.com \ --cc=thomas.abraham@linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.