Commit 19555950 authored by Stephen Boyd's avatar Stephen Boyd

Merge tag 'clk-v4.11-samsung-2' of git://linuxtv.org/snawrocki/samsung into clk-next

Pull Samsung clk driver updates from Sylwester Nawrocki:

 - Exporting clock IDs for Exynos5433 SoC MIPI DSI DPHY
 - Exynos PLL code updates and overall minor clean-ups

* tag 'clk-v4.11-samsung-2' of git://linuxtv.org/snawrocki/samsung:
  clk: samsung: mark s3c...._clk_sleep_init() as __init
  clk: samsung: Add enable/disable support for PLL35XX clocks
  clk: samsung: exynos5433: Correct typos in SoC name
  clk: samsung: exynos5433: Add data for 250MHz and 278MHz PLL rates
  clk: samsung: exynos5433: Add IDs for PHYCLK_MIPIDPHY0_* clocks
parents d646d812 02c952c8
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
* Common Clock Framework support for Exynos5443 SoC. * Common Clock Framework support for Exynos5433 SoC.
*/ */
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
...@@ -698,7 +698,7 @@ static const struct samsung_gate_clock top_gate_clks[] __initconst = { ...@@ -698,7 +698,7 @@ static const struct samsung_gate_clock top_gate_clks[] __initconst = {
* ATLAS_PLL & APOLLO_PLL & MEM0_PLL & MEM1_PLL & BUS_PLL & MFC_PLL * ATLAS_PLL & APOLLO_PLL & MEM0_PLL & MEM1_PLL & BUS_PLL & MFC_PLL
* & MPHY_PLL & G3D_PLL & DISP_PLL & ISP_PLL * & MPHY_PLL & G3D_PLL & DISP_PLL & ISP_PLL
*/ */
static const struct samsung_pll_rate_table exynos5443_pll_rates[] __initconst = { static const struct samsung_pll_rate_table exynos5433_pll_rates[] __initconst = {
PLL_35XX_RATE(2500000000U, 625, 6, 0), PLL_35XX_RATE(2500000000U, 625, 6, 0),
PLL_35XX_RATE(2400000000U, 500, 5, 0), PLL_35XX_RATE(2400000000U, 500, 5, 0),
PLL_35XX_RATE(2300000000U, 575, 6, 0), PLL_35XX_RATE(2300000000U, 575, 6, 0),
...@@ -739,7 +739,9 @@ static const struct samsung_pll_rate_table exynos5443_pll_rates[] __initconst = ...@@ -739,7 +739,9 @@ static const struct samsung_pll_rate_table exynos5443_pll_rates[] __initconst =
PLL_35XX_RATE(350000000U, 350, 6, 2), PLL_35XX_RATE(350000000U, 350, 6, 2),
PLL_35XX_RATE(333000000U, 222, 4, 2), PLL_35XX_RATE(333000000U, 222, 4, 2),
PLL_35XX_RATE(300000000U, 500, 5, 3), PLL_35XX_RATE(300000000U, 500, 5, 3),
PLL_35XX_RATE(278000000U, 556, 6, 3),
PLL_35XX_RATE(266000000U, 532, 6, 3), PLL_35XX_RATE(266000000U, 532, 6, 3),
PLL_35XX_RATE(250000000U, 500, 6, 3),
PLL_35XX_RATE(200000000U, 400, 6, 3), PLL_35XX_RATE(200000000U, 400, 6, 3),
PLL_35XX_RATE(166000000U, 332, 6, 3), PLL_35XX_RATE(166000000U, 332, 6, 3),
PLL_35XX_RATE(160000000U, 320, 6, 3), PLL_35XX_RATE(160000000U, 320, 6, 3),
...@@ -749,7 +751,7 @@ static const struct samsung_pll_rate_table exynos5443_pll_rates[] __initconst = ...@@ -749,7 +751,7 @@ static const struct samsung_pll_rate_table exynos5443_pll_rates[] __initconst =
}; };
/* AUD_PLL */ /* AUD_PLL */
static const struct samsung_pll_rate_table exynos5443_aud_pll_rates[] __initconst = { static const struct samsung_pll_rate_table exynos5433_aud_pll_rates[] __initconst = {
PLL_36XX_RATE(400000000U, 200, 3, 2, 0), PLL_36XX_RATE(400000000U, 200, 3, 2, 0),
PLL_36XX_RATE(393216000U, 197, 3, 2, -25690), PLL_36XX_RATE(393216000U, 197, 3, 2, -25690),
PLL_36XX_RATE(384000000U, 128, 2, 2, 0), PLL_36XX_RATE(384000000U, 128, 2, 2, 0),
...@@ -764,9 +766,9 @@ static const struct samsung_pll_rate_table exynos5443_aud_pll_rates[] __initcons ...@@ -764,9 +766,9 @@ static const struct samsung_pll_rate_table exynos5443_aud_pll_rates[] __initcons
static const struct samsung_pll_clock top_pll_clks[] __initconst = { static const struct samsung_pll_clock top_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_ISP_PLL, "fout_isp_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_ISP_PLL, "fout_isp_pll", "oscclk",
ISP_PLL_LOCK, ISP_PLL_CON0, exynos5443_pll_rates), ISP_PLL_LOCK, ISP_PLL_CON0, exynos5433_pll_rates),
PLL(pll_36xx, CLK_FOUT_AUD_PLL, "fout_aud_pll", "oscclk", PLL(pll_36xx, CLK_FOUT_AUD_PLL, "fout_aud_pll", "oscclk",
AUD_PLL_LOCK, AUD_PLL_CON0, exynos5443_aud_pll_rates), AUD_PLL_LOCK, AUD_PLL_CON0, exynos5433_aud_pll_rates),
}; };
static const struct samsung_cmu_info top_cmu_info __initconst = { static const struct samsung_cmu_info top_cmu_info __initconst = {
...@@ -820,7 +822,7 @@ PNAME(mout_mphy_pll_p) = { "oscclk", "fout_mphy_pll", }; ...@@ -820,7 +822,7 @@ PNAME(mout_mphy_pll_p) = { "oscclk", "fout_mphy_pll", };
static const struct samsung_pll_clock cpif_pll_clks[] __initconst = { static const struct samsung_pll_clock cpif_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_MPHY_PLL, "fout_mphy_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_MPHY_PLL, "fout_mphy_pll", "oscclk",
MPHY_PLL_LOCK, MPHY_PLL_CON0, exynos5443_pll_rates), MPHY_PLL_LOCK, MPHY_PLL_CON0, exynos5433_pll_rates),
}; };
static const struct samsung_mux_clock cpif_mux_clks[] __initconst = { static const struct samsung_mux_clock cpif_mux_clks[] __initconst = {
...@@ -1011,13 +1013,13 @@ static const unsigned long mif_clk_regs[] __initconst = { ...@@ -1011,13 +1013,13 @@ static const unsigned long mif_clk_regs[] __initconst = {
static const struct samsung_pll_clock mif_pll_clks[] __initconst = { static const struct samsung_pll_clock mif_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_MEM0_PLL, "fout_mem0_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_MEM0_PLL, "fout_mem0_pll", "oscclk",
MEM0_PLL_LOCK, MEM0_PLL_CON0, exynos5443_pll_rates), MEM0_PLL_LOCK, MEM0_PLL_CON0, exynos5433_pll_rates),
PLL(pll_35xx, CLK_FOUT_MEM1_PLL, "fout_mem1_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_MEM1_PLL, "fout_mem1_pll", "oscclk",
MEM1_PLL_LOCK, MEM1_PLL_CON0, exynos5443_pll_rates), MEM1_PLL_LOCK, MEM1_PLL_CON0, exynos5433_pll_rates),
PLL(pll_35xx, CLK_FOUT_BUS_PLL, "fout_bus_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_BUS_PLL, "fout_bus_pll", "oscclk",
BUS_PLL_LOCK, BUS_PLL_CON0, exynos5443_pll_rates), BUS_PLL_LOCK, BUS_PLL_CON0, exynos5433_pll_rates),
PLL(pll_35xx, CLK_FOUT_MFC_PLL, "fout_mfc_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_MFC_PLL, "fout_mfc_pll", "oscclk",
MFC_PLL_LOCK, MFC_PLL_CON0, exynos5443_pll_rates), MFC_PLL_LOCK, MFC_PLL_CON0, exynos5433_pll_rates),
}; };
/* list of all parent clock list */ /* list of all parent clock list */
...@@ -2539,7 +2541,7 @@ PNAME(mout_sclk_decon_tv_vclk_b_disp_p) = { "mout_sclk_decon_tv_vclk_a_disp", ...@@ -2539,7 +2541,7 @@ PNAME(mout_sclk_decon_tv_vclk_b_disp_p) = { "mout_sclk_decon_tv_vclk_a_disp",
static const struct samsung_pll_clock disp_pll_clks[] __initconst = { static const struct samsung_pll_clock disp_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_DISP_PLL, "fout_disp_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_DISP_PLL, "fout_disp_pll", "oscclk",
DISP_PLL_LOCK, DISP_PLL_CON0, exynos5443_pll_rates), DISP_PLL_LOCK, DISP_PLL_CON0, exynos5433_pll_rates),
}; };
static const struct samsung_fixed_factor_clock disp_fixed_factor_clks[] __initconst = { static const struct samsung_fixed_factor_clock disp_fixed_factor_clks[] __initconst = {
...@@ -2559,8 +2561,10 @@ static const struct samsung_fixed_rate_clock disp_fixed_clks[] __initconst = { ...@@ -2559,8 +2561,10 @@ static const struct samsung_fixed_rate_clock disp_fixed_clks[] __initconst = {
FRATE(0, "phyclk_mipidphy1_bitclkdiv8_phy", NULL, 0, 188000000), FRATE(0, "phyclk_mipidphy1_bitclkdiv8_phy", NULL, 0, 188000000),
FRATE(0, "phyclk_mipidphy1_rxclkesc0_phy", NULL, 0, 100000000), FRATE(0, "phyclk_mipidphy1_rxclkesc0_phy", NULL, 0, 100000000),
/* PHY clocks from MIPI_DPHY0 */ /* PHY clocks from MIPI_DPHY0 */
FRATE(0, "phyclk_mipidphy0_bitclkdiv8_phy", NULL, 0, 188000000), FRATE(CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8_PHY, "phyclk_mipidphy0_bitclkdiv8_phy",
FRATE(0, "phyclk_mipidphy0_rxclkesc0_phy", NULL, 0, 100000000), NULL, 0, 188000000),
FRATE(CLK_PHYCLK_MIPIDPHY0_RXCLKESC0_PHY, "phyclk_mipidphy0_rxclkesc0_phy",
NULL, 0, 100000000),
/* PHY clocks from HDMI_PHY */ /* PHY clocks from HDMI_PHY */
FRATE(CLK_PHYCLK_HDMIPHY_TMDS_CLKO_PHY, "phyclk_hdmiphy_tmds_clko_phy", FRATE(CLK_PHYCLK_HDMIPHY_TMDS_CLKO_PHY, "phyclk_hdmiphy_tmds_clko_phy",
NULL, 0, 300000000), NULL, 0, 300000000),
...@@ -3224,7 +3228,7 @@ PNAME(mout_g3d_pll_p) = { "oscclk", "fout_g3d_pll", }; ...@@ -3224,7 +3228,7 @@ PNAME(mout_g3d_pll_p) = { "oscclk", "fout_g3d_pll", };
static const struct samsung_pll_clock g3d_pll_clks[] __initconst = { static const struct samsung_pll_clock g3d_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk",
G3D_PLL_LOCK, G3D_PLL_CON0, exynos5443_pll_rates), G3D_PLL_LOCK, G3D_PLL_CON0, exynos5433_pll_rates),
}; };
static const struct samsung_mux_clock g3d_mux_clks[] __initconst = { static const struct samsung_mux_clock g3d_mux_clks[] __initconst = {
...@@ -3514,7 +3518,7 @@ PNAME(mout_apollo_p) = { "mout_apollo_pll", ...@@ -3514,7 +3518,7 @@ PNAME(mout_apollo_p) = { "mout_apollo_pll",
static const struct samsung_pll_clock apollo_pll_clks[] __initconst = { static const struct samsung_pll_clock apollo_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_APOLLO_PLL, "fout_apollo_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_APOLLO_PLL, "fout_apollo_pll", "oscclk",
APOLLO_PLL_LOCK, APOLLO_PLL_CON0, exynos5443_pll_rates), APOLLO_PLL_LOCK, APOLLO_PLL_CON0, exynos5433_pll_rates),
}; };
static const struct samsung_mux_clock apollo_mux_clks[] __initconst = { static const struct samsung_mux_clock apollo_mux_clks[] __initconst = {
...@@ -3737,7 +3741,7 @@ PNAME(mout_atlas_p) = { "mout_atlas_pll", ...@@ -3737,7 +3741,7 @@ PNAME(mout_atlas_p) = { "mout_atlas_pll",
static const struct samsung_pll_clock atlas_pll_clks[] __initconst = { static const struct samsung_pll_clock atlas_pll_clks[] __initconst = {
PLL(pll_35xx, CLK_FOUT_ATLAS_PLL, "fout_atlas_pll", "oscclk", PLL(pll_35xx, CLK_FOUT_ATLAS_PLL, "fout_atlas_pll", "oscclk",
ATLAS_PLL_LOCK, ATLAS_PLL_CON0, exynos5443_pll_rates), ATLAS_PLL_LOCK, ATLAS_PLL_CON0, exynos5433_pll_rates),
}; };
static const struct samsung_mux_clock atlas_mux_clks[] __initconst = { static const struct samsung_mux_clock atlas_mux_clks[] __initconst = {
......
...@@ -136,11 +136,39 @@ static const struct clk_ops samsung_pll3000_clk_ops = { ...@@ -136,11 +136,39 @@ static const struct clk_ops samsung_pll3000_clk_ops = {
#define PLL35XX_MDIV_MASK (0x3FF) #define PLL35XX_MDIV_MASK (0x3FF)
#define PLL35XX_PDIV_MASK (0x3F) #define PLL35XX_PDIV_MASK (0x3F)
#define PLL35XX_SDIV_MASK (0x7) #define PLL35XX_SDIV_MASK (0x7)
#define PLL35XX_LOCK_STAT_MASK (0x1)
#define PLL35XX_MDIV_SHIFT (16) #define PLL35XX_MDIV_SHIFT (16)
#define PLL35XX_PDIV_SHIFT (8) #define PLL35XX_PDIV_SHIFT (8)
#define PLL35XX_SDIV_SHIFT (0) #define PLL35XX_SDIV_SHIFT (0)
#define PLL35XX_LOCK_STAT_SHIFT (29) #define PLL35XX_LOCK_STAT_SHIFT (29)
#define PLL35XX_ENABLE_SHIFT (31)
static int samsung_pll35xx_enable(struct clk_hw *hw)
{
struct samsung_clk_pll *pll = to_clk_pll(hw);
u32 tmp;
tmp = readl_relaxed(pll->con_reg);
tmp |= BIT(PLL35XX_ENABLE_SHIFT);
writel_relaxed(tmp, pll->con_reg);
/* wait_lock_time */
do {
cpu_relax();
tmp = readl_relaxed(pll->con_reg);
} while (!(tmp & BIT(PLL35XX_LOCK_STAT_SHIFT)));
return 0;
}
static void samsung_pll35xx_disable(struct clk_hw *hw)
{
struct samsung_clk_pll *pll = to_clk_pll(hw);
u32 tmp;
tmp = readl_relaxed(pll->con_reg);
tmp &= ~BIT(PLL35XX_ENABLE_SHIFT);
writel_relaxed(tmp, pll->con_reg);
}
static unsigned long samsung_pll35xx_recalc_rate(struct clk_hw *hw, static unsigned long samsung_pll35xx_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate) unsigned long parent_rate)
...@@ -210,12 +238,13 @@ static int samsung_pll35xx_set_rate(struct clk_hw *hw, unsigned long drate, ...@@ -210,12 +238,13 @@ static int samsung_pll35xx_set_rate(struct clk_hw *hw, unsigned long drate,
(rate->sdiv << PLL35XX_SDIV_SHIFT); (rate->sdiv << PLL35XX_SDIV_SHIFT);
writel_relaxed(tmp, pll->con_reg); writel_relaxed(tmp, pll->con_reg);
/* wait_lock_time */ /* wait_lock_time if enabled */
do { if (tmp & BIT(PLL35XX_ENABLE_SHIFT)) {
cpu_relax(); do {
tmp = readl_relaxed(pll->con_reg); cpu_relax();
} while (!(tmp & (PLL35XX_LOCK_STAT_MASK tmp = readl_relaxed(pll->con_reg);
<< PLL35XX_LOCK_STAT_SHIFT))); } while (!(tmp & BIT(PLL35XX_LOCK_STAT_SHIFT)));
}
return 0; return 0;
} }
...@@ -223,6 +252,8 @@ static const struct clk_ops samsung_pll35xx_clk_ops = { ...@@ -223,6 +252,8 @@ static const struct clk_ops samsung_pll35xx_clk_ops = {
.recalc_rate = samsung_pll35xx_recalc_rate, .recalc_rate = samsung_pll35xx_recalc_rate,
.round_rate = samsung_pll_round_rate, .round_rate = samsung_pll_round_rate,
.set_rate = samsung_pll35xx_set_rate, .set_rate = samsung_pll35xx_set_rate,
.enable = samsung_pll35xx_enable,
.disable = samsung_pll35xx_disable,
}; };
static const struct clk_ops samsung_pll35xx_clk_min_ops = { static const struct clk_ops samsung_pll35xx_clk_min_ops = {
......
...@@ -76,7 +76,7 @@ static struct syscore_ops s3c2410_clk_syscore_ops = { ...@@ -76,7 +76,7 @@ static struct syscore_ops s3c2410_clk_syscore_ops = {
.resume = s3c2410_clk_resume, .resume = s3c2410_clk_resume,
}; };
static void s3c2410_clk_sleep_init(void) static void __init s3c2410_clk_sleep_init(void)
{ {
s3c2410_save = samsung_clk_alloc_reg_dump(s3c2410_clk_regs, s3c2410_save = samsung_clk_alloc_reg_dump(s3c2410_clk_regs,
ARRAY_SIZE(s3c2410_clk_regs)); ARRAY_SIZE(s3c2410_clk_regs));
...@@ -90,7 +90,7 @@ static void s3c2410_clk_sleep_init(void) ...@@ -90,7 +90,7 @@ static void s3c2410_clk_sleep_init(void)
return; return;
} }
#else #else
static void s3c2410_clk_sleep_init(void) {} static void __init s3c2410_clk_sleep_init(void) {}
#endif #endif
PNAME(fclk_p) = { "mpll", "div_slow" }; PNAME(fclk_p) = { "mpll", "div_slow" };
......
...@@ -69,7 +69,7 @@ static struct syscore_ops s3c2412_clk_syscore_ops = { ...@@ -69,7 +69,7 @@ static struct syscore_ops s3c2412_clk_syscore_ops = {
.resume = s3c2412_clk_resume, .resume = s3c2412_clk_resume,
}; };
static void s3c2412_clk_sleep_init(void) static void __init s3c2412_clk_sleep_init(void)
{ {
s3c2412_save = samsung_clk_alloc_reg_dump(s3c2412_clk_regs, s3c2412_save = samsung_clk_alloc_reg_dump(s3c2412_clk_regs,
ARRAY_SIZE(s3c2412_clk_regs)); ARRAY_SIZE(s3c2412_clk_regs));
...@@ -83,7 +83,7 @@ static void s3c2412_clk_sleep_init(void) ...@@ -83,7 +83,7 @@ static void s3c2412_clk_sleep_init(void)
return; return;
} }
#else #else
static void s3c2412_clk_sleep_init(void) {} static void __init s3c2412_clk_sleep_init(void) {}
#endif #endif
static struct clk_div_table divxti_d[] = { static struct clk_div_table divxti_d[] = {
......
...@@ -89,7 +89,7 @@ static struct syscore_ops s3c2443_clk_syscore_ops = { ...@@ -89,7 +89,7 @@ static struct syscore_ops s3c2443_clk_syscore_ops = {
.resume = s3c2443_clk_resume, .resume = s3c2443_clk_resume,
}; };
static void s3c2443_clk_sleep_init(void) static void __init s3c2443_clk_sleep_init(void)
{ {
s3c2443_save = samsung_clk_alloc_reg_dump(s3c2443_clk_regs, s3c2443_save = samsung_clk_alloc_reg_dump(s3c2443_clk_regs,
ARRAY_SIZE(s3c2443_clk_regs)); ARRAY_SIZE(s3c2443_clk_regs));
...@@ -103,7 +103,7 @@ static void s3c2443_clk_sleep_init(void) ...@@ -103,7 +103,7 @@ static void s3c2443_clk_sleep_init(void)
return; return;
} }
#else #else
static void s3c2443_clk_sleep_init(void) {} static void __init s3c2443_clk_sleep_init(void) {}
#endif #endif
PNAME(epllref_p) = { "mpllref", "mpllref", "xti", "ext" }; PNAME(epllref_p) = { "mpllref", "mpllref", "xti", "ext" };
......
...@@ -121,7 +121,7 @@ static struct syscore_ops s3c64xx_clk_syscore_ops = { ...@@ -121,7 +121,7 @@ static struct syscore_ops s3c64xx_clk_syscore_ops = {
.resume = s3c64xx_clk_resume, .resume = s3c64xx_clk_resume,
}; };
static void s3c64xx_clk_sleep_init(void) static void __init s3c64xx_clk_sleep_init(void)
{ {
s3c64xx_save_common = samsung_clk_alloc_reg_dump(s3c64xx_clk_regs, s3c64xx_save_common = samsung_clk_alloc_reg_dump(s3c64xx_clk_regs,
ARRAY_SIZE(s3c64xx_clk_regs)); ARRAY_SIZE(s3c64xx_clk_regs));
...@@ -145,7 +145,7 @@ static void s3c64xx_clk_sleep_init(void) ...@@ -145,7 +145,7 @@ static void s3c64xx_clk_sleep_init(void)
__func__); __func__);
} }
#else #else
static void s3c64xx_clk_sleep_init(void) {} static void __init s3c64xx_clk_sleep_init(void) {}
#endif #endif
/* List of parent clocks common for all S3C64xx SoCs. */ /* List of parent clocks common for all S3C64xx SoCs. */
......
...@@ -771,7 +771,10 @@ ...@@ -771,7 +771,10 @@
#define CLK_PCLK_DECON 113 #define CLK_PCLK_DECON 113
#define DISP_NR_CLK 114 #define CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8_PHY 114
#define CLK_PHYCLK_MIPIDPHY0_RXCLKESC0_PHY 115
#define DISP_NR_CLK 116
/* CMU_AUD */ /* CMU_AUD */
#define CLK_MOUT_AUD_PLL_USER 1 #define CLK_MOUT_AUD_PLL_USER 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment