diff options
Diffstat (limited to 'drivers/clk/samsung/clk-exynos5433.c')
-rw-r--r-- | drivers/clk/samsung/clk-exynos5433.c | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c index c44062d2904e..d272e42eb48c 100644 --- a/drivers/clk/samsung/clk-exynos5433.c +++ b/drivers/clk/samsung/clk-exynos5433.c | |||
@@ -419,6 +419,8 @@ static struct samsung_div_clock top_div_clks[] __initdata = { | |||
419 | DIV_TOP1, 0, 3), | 419 | DIV_TOP1, 0, 3), |
420 | 420 | ||
421 | /* DIV_TOP2 */ | 421 | /* DIV_TOP2 */ |
422 | DIV(CLK_DIV_ACLK_MSCL_400, "div_aclk_mscl_400", "mout_aclk_mscl_400_b", | ||
423 | DIV_TOP2, 4, 3), | ||
422 | DIV(CLK_DIV_ACLK_FSYS_200, "div_aclk_fsys_200", "mout_bus_pll_user", | 424 | DIV(CLK_DIV_ACLK_FSYS_200, "div_aclk_fsys_200", "mout_bus_pll_user", |
423 | DIV_TOP2, 0, 3), | 425 | DIV_TOP2, 0, 3), |
424 | 426 | ||
@@ -446,6 +448,10 @@ static struct samsung_div_clock top_div_clks[] __initdata = { | |||
446 | DIV(CLK_DIV_ACLK_BUS1_400, "div_aclk_bus1_400", "mout_bus_pll_user", | 448 | DIV(CLK_DIV_ACLK_BUS1_400, "div_aclk_bus1_400", "mout_bus_pll_user", |
447 | DIV_TOP4, 0, 3), | 449 | DIV_TOP4, 0, 3), |
448 | 450 | ||
451 | /* DIV_TOP_MSCL */ | ||
452 | DIV(CLK_DIV_SCLK_JPEG, "div_sclk_jpeg", "mout_sclk_jpeg_c", | ||
453 | DIV_TOP_MSCL, 0, 4), | ||
454 | |||
449 | /* DIV_TOP_FSYS0 */ | 455 | /* DIV_TOP_FSYS0 */ |
450 | DIV(CLK_DIV_SCLK_MMC1_B, "div_sclk_mmc1_b", "div_sclk_mmc1_a", | 456 | DIV(CLK_DIV_SCLK_MMC1_B, "div_sclk_mmc1_b", "div_sclk_mmc1_a", |
451 | DIV_TOP_FSYS0, 16, 8), | 457 | DIV_TOP_FSYS0, 16, 8), |
@@ -542,6 +548,9 @@ static struct samsung_gate_clock top_gate_clks[] __initdata = { | |||
542 | GATE(CLK_ACLK_PERIS_66, "aclk_peris_66", "div_aclk_peris_66_b", | 548 | GATE(CLK_ACLK_PERIS_66, "aclk_peris_66", "div_aclk_peris_66_b", |
543 | ENABLE_ACLK_TOP, 21, | 549 | ENABLE_ACLK_TOP, 21, |
544 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), | 550 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), |
551 | GATE(CLK_ACLK_MSCL_400, "aclk_mscl_400", "div_aclk_mscl_400", | ||
552 | ENABLE_ACLK_TOP, 19, | ||
553 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), | ||
545 | GATE(CLK_ACLK_FSYS_200, "aclk_fsys_200", "div_aclk_fsys_200", | 554 | GATE(CLK_ACLK_FSYS_200, "aclk_fsys_200", "div_aclk_fsys_200", |
546 | ENABLE_ACLK_TOP, 18, | 555 | ENABLE_ACLK_TOP, 18, |
547 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), | 556 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), |
@@ -558,6 +567,10 @@ static struct samsung_gate_clock top_gate_clks[] __initdata = { | |||
558 | ENABLE_ACLK_TOP, 0, | 567 | ENABLE_ACLK_TOP, 0, |
559 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), | 568 | CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0), |
560 | 569 | ||
570 | /* ENABLE_SCLK_TOP_MSCL */ | ||
571 | GATE(CLK_SCLK_JPEG_MSCL, "sclk_jpeg_mscl", "div_sclk_jpeg", | ||
572 | ENABLE_SCLK_TOP_MSCL, 0, 0, 0), | ||
573 | |||
561 | /* ENABLE_SCLK_TOP_FSYS */ | 574 | /* ENABLE_SCLK_TOP_FSYS */ |
562 | GATE(CLK_SCLK_PCIE_100_FSYS, "sclk_pcie_100_fsys", "div_sclk_pcie_100", | 575 | GATE(CLK_SCLK_PCIE_100_FSYS, "sclk_pcie_100_fsys", "div_sclk_pcie_100", |
563 | ENABLE_SCLK_TOP_FSYS, 7, 0, 0), | 576 | ENABLE_SCLK_TOP_FSYS, 7, 0, 0), |
@@ -3805,3 +3818,175 @@ static void __init exynos5433_cmu_atlas_init(struct device_node *np) | |||
3805 | } | 3818 | } |
3806 | CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas", | 3819 | CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas", |
3807 | exynos5433_cmu_atlas_init); | 3820 | exynos5433_cmu_atlas_init); |
3821 | |||
3822 | /* | ||
3823 | * Register offset definitions for CMU_MSCL | ||
3824 | */ | ||
3825 | #define MUX_SEL_MSCL0 0x0200 | ||
3826 | #define MUX_SEL_MSCL1 0x0204 | ||
3827 | #define MUX_ENABLE_MSCL0 0x0300 | ||
3828 | #define MUX_ENABLE_MSCL1 0x0304 | ||
3829 | #define MUX_STAT_MSCL0 0x0400 | ||
3830 | #define MUX_STAT_MSCL1 0x0404 | ||
3831 | #define DIV_MSCL 0x0600 | ||
3832 | #define DIV_STAT_MSCL 0x0700 | ||
3833 | #define ENABLE_ACLK_MSCL 0x0800 | ||
3834 | #define ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0 0x0804 | ||
3835 | #define ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1 0x0808 | ||
3836 | #define ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG 0x080c | ||
3837 | #define ENABLE_PCLK_MSCL 0x0900 | ||
3838 | #define ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0 0x0904 | ||
3839 | #define ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1 0x0908 | ||
3840 | #define ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG 0x000c | ||
3841 | #define ENABLE_SCLK_MSCL 0x0a00 | ||
3842 | #define ENABLE_IP_MSCL0 0x0b00 | ||
3843 | #define ENABLE_IP_MSCL1 0x0b04 | ||
3844 | #define ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER0 0x0b08 | ||
3845 | #define ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER1 0x0b0c | ||
3846 | #define ENABLE_IP_MSCL_SECURE_SMMU_JPEG 0x0b10 | ||
3847 | |||
3848 | static unsigned long mscl_clk_regs[] __initdata = { | ||
3849 | MUX_SEL_MSCL0, | ||
3850 | MUX_SEL_MSCL1, | ||
3851 | MUX_ENABLE_MSCL0, | ||
3852 | MUX_ENABLE_MSCL1, | ||
3853 | MUX_STAT_MSCL0, | ||
3854 | MUX_STAT_MSCL1, | ||
3855 | DIV_MSCL, | ||
3856 | DIV_STAT_MSCL, | ||
3857 | ENABLE_ACLK_MSCL, | ||
3858 | ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0, | ||
3859 | ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1, | ||
3860 | ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG, | ||
3861 | ENABLE_PCLK_MSCL, | ||
3862 | ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0, | ||
3863 | ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1, | ||
3864 | ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG, | ||
3865 | ENABLE_SCLK_MSCL, | ||
3866 | ENABLE_IP_MSCL0, | ||
3867 | ENABLE_IP_MSCL1, | ||
3868 | ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER0, | ||
3869 | ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER1, | ||
3870 | ENABLE_IP_MSCL_SECURE_SMMU_JPEG, | ||
3871 | }; | ||
3872 | |||
3873 | /* list of all parent clock list */ | ||
3874 | PNAME(mout_sclk_jpeg_user_p) = { "oscclk", "sclk_jpeg_mscl", }; | ||
3875 | PNAME(mout_aclk_mscl_400_user_p) = { "oscclk", "aclk_mscl_400", }; | ||
3876 | PNAME(mout_sclk_jpeg_p) = { "mout_sclk_jpeg_user", | ||
3877 | "mout_aclk_mscl_400_user", }; | ||
3878 | |||
3879 | static struct samsung_mux_clock mscl_mux_clks[] __initdata = { | ||
3880 | /* MUX_SEL_MSCL0 */ | ||
3881 | MUX(CLK_MOUT_SCLK_JPEG_USER, "mout_sclk_jpeg_user", | ||
3882 | mout_sclk_jpeg_user_p, MUX_SEL_MSCL0, 4, 1), | ||
3883 | MUX(CLK_MOUT_ACLK_MSCL_400_USER, "mout_aclk_mscl_400_user", | ||
3884 | mout_aclk_mscl_400_user_p, MUX_SEL_MSCL0, 0, 1), | ||
3885 | |||
3886 | /* MUX_SEL_MSCL1 */ | ||
3887 | MUX(CLK_MOUT_SCLK_JPEG, "mout_sclk_jpeg", mout_sclk_jpeg_p, | ||
3888 | MUX_SEL_MSCL1, 0, 1), | ||
3889 | }; | ||
3890 | |||
3891 | static struct samsung_div_clock mscl_div_clks[] __initdata = { | ||
3892 | /* DIV_MSCL */ | ||
3893 | DIV(CLK_DIV_PCLK_MSCL, "div_pclk_mscl", "mout_aclk_mscl_400_user", | ||
3894 | DIV_MSCL, 0, 3), | ||
3895 | }; | ||
3896 | |||
3897 | static struct samsung_gate_clock mscl_gate_clks[] __initdata = { | ||
3898 | /* ENABLE_ACLK_MSCL */ | ||
3899 | GATE(CLK_ACLK_BTS_JPEG, "aclk_bts_jpeg", "mout_aclk_mscl_400_user", | ||
3900 | ENABLE_ACLK_MSCL, 9, 0, 0), | ||
3901 | GATE(CLK_ACLK_BTS_M2MSCALER1, "aclk_bts_m2mscaler1", | ||
3902 | "mout_aclk_mscl_400_user", ENABLE_ACLK_MSCL, 8, 0, 0), | ||
3903 | GATE(CLK_ACLK_BTS_M2MSCALER0, "aclk_bts_m2mscaler0", | ||
3904 | "mout_aclk_mscl_400_user", ENABLE_ACLK_MSCL, 7, 0, 0), | ||
3905 | GATE(CLK_ACLK_AHB2APB_MSCL0P, "aclk_abh2apb_mscl0p", "div_pclk_mscl", | ||
3906 | ENABLE_ACLK_MSCL, 6, CLK_IGNORE_UNUSED, 0), | ||
3907 | GATE(CLK_ACLK_XIU_MSCLX, "aclk_xiu_msclx", "mout_aclk_mscl_400_user", | ||
3908 | ENABLE_ACLK_MSCL, 5, CLK_IGNORE_UNUSED, 0), | ||
3909 | GATE(CLK_ACLK_MSCLNP_100, "aclk_msclnp_100", "div_pclk_mscl", | ||
3910 | ENABLE_ACLK_MSCL, 4, CLK_IGNORE_UNUSED, 0), | ||
3911 | GATE(CLK_ACLK_MSCLND_400, "aclk_msclnd_400", "mout_aclk_mscl_400_user", | ||
3912 | ENABLE_ACLK_MSCL, 3, CLK_IGNORE_UNUSED, 0), | ||
3913 | GATE(CLK_ACLK_JPEG, "aclk_jpeg", "mout_aclk_mscl_400_user", | ||
3914 | ENABLE_ACLK_MSCL, 2, 0, 0), | ||
3915 | GATE(CLK_ACLK_M2MSCALER1, "aclk_m2mscaler1", "mout_aclk_mscl_400_user", | ||
3916 | ENABLE_ACLK_MSCL, 1, 0, 0), | ||
3917 | GATE(CLK_ACLK_M2MSCALER0, "aclk_m2mscaler0", "mout_aclk_mscl_400_user", | ||
3918 | ENABLE_ACLK_MSCL, 0, 0, 0), | ||
3919 | |||
3920 | /* ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0 */ | ||
3921 | GATE(CLK_ACLK_SMMU_M2MSCALER0, "aclk_smmu_m2mscaler0", | ||
3922 | "mout_aclk_mscl_400_user", | ||
3923 | ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0, | ||
3924 | 0, CLK_IGNORE_UNUSED, 0), | ||
3925 | |||
3926 | /* ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1 */ | ||
3927 | GATE(CLK_ACLK_SMMU_M2MSCALER1, "aclk_smmu_m2mscaler1", | ||
3928 | "mout_aclk_mscl_400_user", | ||
3929 | ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1, | ||
3930 | 0, CLK_IGNORE_UNUSED, 0), | ||
3931 | |||
3932 | /* ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG */ | ||
3933 | GATE(CLK_ACLK_SMMU_JPEG, "aclk_smmu_jpeg", "mout_aclk_mscl_400_user", | ||
3934 | ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG, | ||
3935 | 0, CLK_IGNORE_UNUSED, 0), | ||
3936 | |||
3937 | /* ENABLE_PCLK_MSCL */ | ||
3938 | GATE(CLK_PCLK_BTS_JPEG, "pclk_bts_jpeg", "div_pclk_mscl", | ||
3939 | ENABLE_PCLK_MSCL, 7, 0, 0), | ||
3940 | GATE(CLK_PCLK_BTS_M2MSCALER1, "pclk_bts_m2mscaler1", "div_pclk_mscl", | ||
3941 | ENABLE_PCLK_MSCL, 6, 0, 0), | ||
3942 | GATE(CLK_PCLK_BTS_M2MSCALER0, "pclk_bts_m2mscaler0", "div_pclk_mscl", | ||
3943 | ENABLE_PCLK_MSCL, 5, 0, 0), | ||
3944 | GATE(CLK_PCLK_PMU_MSCL, "pclk_pmu_mscl", "div_pclk_mscl", | ||
3945 | ENABLE_PCLK_MSCL, 4, CLK_IGNORE_UNUSED, 0), | ||
3946 | GATE(CLK_PCLK_SYSREG_MSCL, "pclk_sysreg_mscl", "div_pclk_mscl", | ||
3947 | ENABLE_PCLK_MSCL, 3, CLK_IGNORE_UNUSED, 0), | ||
3948 | GATE(CLK_PCLK_JPEG, "pclk_jpeg", "div_pclk_mscl", | ||
3949 | ENABLE_PCLK_MSCL, 2, 0, 0), | ||
3950 | GATE(CLK_PCLK_M2MSCALER1, "pclk_m2mscaler1", "div_pclk_mscl", | ||
3951 | ENABLE_PCLK_MSCL, 1, 0, 0), | ||
3952 | GATE(CLK_PCLK_M2MSCALER0, "pclk_m2mscaler0", "div_pclk_mscl", | ||
3953 | ENABLE_PCLK_MSCL, 0, 0, 0), | ||
3954 | |||
3955 | /* ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0 */ | ||
3956 | GATE(CLK_PCLK_SMMU_M2MSCALER0, "pclk_smmu_m2mscaler0", "div_pclk_mscl", | ||
3957 | ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0, | ||
3958 | 0, CLK_IGNORE_UNUSED, 0), | ||
3959 | |||
3960 | /* ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1 */ | ||
3961 | GATE(CLK_PCLK_SMMU_M2MSCALER1, "pclk_smmu_m2mscaler1", "div_pclk_mscl", | ||
3962 | ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1, | ||
3963 | 0, CLK_IGNORE_UNUSED, 0), | ||
3964 | |||
3965 | /* ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG */ | ||
3966 | GATE(CLK_PCLK_SMMU_JPEG, "pclk_smmu_jpeg", "div_pclk_mscl", | ||
3967 | ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG, | ||
3968 | 0, CLK_IGNORE_UNUSED, 0), | ||
3969 | |||
3970 | /* ENABLE_SCLK_MSCL */ | ||
3971 | GATE(CLK_SCLK_JPEG, "sclk_jpeg", "mout_sclk_jpeg", ENABLE_SCLK_MSCL, 0, | ||
3972 | CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), | ||
3973 | }; | ||
3974 | |||
3975 | static struct samsung_cmu_info mscl_cmu_info __initdata = { | ||
3976 | .mux_clks = mscl_mux_clks, | ||
3977 | .nr_mux_clks = ARRAY_SIZE(mscl_mux_clks), | ||
3978 | .div_clks = mscl_div_clks, | ||
3979 | .nr_div_clks = ARRAY_SIZE(mscl_div_clks), | ||
3980 | .gate_clks = mscl_gate_clks, | ||
3981 | .nr_gate_clks = ARRAY_SIZE(mscl_gate_clks), | ||
3982 | .nr_clk_ids = MSCL_NR_CLK, | ||
3983 | .clk_regs = mscl_clk_regs, | ||
3984 | .nr_clk_regs = ARRAY_SIZE(mscl_clk_regs), | ||
3985 | }; | ||
3986 | |||
3987 | static void __init exynos5433_cmu_mscl_init(struct device_node *np) | ||
3988 | { | ||
3989 | samsung_cmu_register_one(np, &mscl_cmu_info); | ||
3990 | } | ||
3991 | CLK_OF_DECLARE(exynos5433_cmu_mscl, "samsung,exynos5433-cmu-mscl", | ||
3992 | exynos5433_cmu_mscl_init); | ||