aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Bresticker <abrestic@chromium.org>2015-06-18 17:28:40 -0400
committerThierry Reding <treding@nvidia.com>2016-04-28 06:41:44 -0400
commit3358d2d9f47af86bdd71edb24b361f72a54ec04e (patch)
tree3ae890b9c2ef525ff6177eb8a2ee154142829719
parentf55532a0c0b8bb6148f4e07853b876ef73bc69ca (diff)
clk: tegra: Add interface to enable hardware control of SATA/XUSB PLLs
On Tegra210, hardware control of the SATA and XUSB pad PLLs must be done during the UPHY enable sequence rather than the PLLE enable sequence. Export functions to do this so that hardware control can be enabled from the XUSB padctl driver. Signed-off-by: Andrew Bresticker <abrestic@chromium.org> Signed-off-by: Rhyland Klein <rklein@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/clk/tegra/clk-tegra210.c58
-rw-r--r--include/linux/clk/tegra.h5
2 files changed, 63 insertions, 0 deletions
diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
index 637041fd53ad..3d0edee1f9fe 100644
--- a/drivers/clk/tegra/clk-tegra210.c
+++ b/drivers/clk/tegra/clk-tegra210.c
@@ -175,6 +175,19 @@
175#define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN BIT(14) 175#define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN BIT(14)
176#define UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN BIT(12) 176#define UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN BIT(12)
177 177
178#define SATA_PLL_CFG0 0x490
179#define SATA_PLL_CFG0_PADPLL_RESET_SWCTL BIT(0)
180#define SATA_PLL_CFG0_PADPLL_USE_LOCKDET BIT(2)
181#define SATA_PLL_CFG0_PADPLL_SLEEP_IDDQ BIT(13)
182#define SATA_PLL_CFG0_SEQ_ENABLE BIT(24)
183
184#define XUSBIO_PLL_CFG0 0x51c
185#define XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL BIT(0)
186#define XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL BIT(2)
187#define XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET BIT(6)
188#define XUSBIO_PLL_CFG0_PADPLL_SLEEP_IDDQ BIT(13)
189#define XUSBIO_PLL_CFG0_SEQ_ENABLE BIT(24)
190
178#define UTMIPLL_HW_PWRDN_CFG0 0x52c 191#define UTMIPLL_HW_PWRDN_CFG0 0x52c
179#define UTMIPLL_HW_PWRDN_CFG0_UTMIPLL_LOCK BIT(31) 192#define UTMIPLL_HW_PWRDN_CFG0_UTMIPLL_LOCK BIT(31)
180#define UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE BIT(25) 193#define UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE BIT(25)
@@ -416,6 +429,51 @@ static const char *mux_pllmcp_clkm[] = {
416#define PLLU_MISC0_WRITE_MASK 0xbfffffff 429#define PLLU_MISC0_WRITE_MASK 0xbfffffff
417#define PLLU_MISC1_WRITE_MASK 0x00000007 430#define PLLU_MISC1_WRITE_MASK 0x00000007
418 431
432void tegra210_xusb_pll_hw_control_enable(void)
433{
434 u32 val;
435
436 val = readl_relaxed(clk_base + XUSBIO_PLL_CFG0);
437 val &= ~(XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL |
438 XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL);
439 val |= XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET |
440 XUSBIO_PLL_CFG0_PADPLL_SLEEP_IDDQ;
441 writel_relaxed(val, clk_base + XUSBIO_PLL_CFG0);
442}
443EXPORT_SYMBOL_GPL(tegra210_xusb_pll_hw_control_enable);
444
445void tegra210_xusb_pll_hw_sequence_start(void)
446{
447 u32 val;
448
449 val = readl_relaxed(clk_base + XUSBIO_PLL_CFG0);
450 val |= XUSBIO_PLL_CFG0_SEQ_ENABLE;
451 writel_relaxed(val, clk_base + XUSBIO_PLL_CFG0);
452}
453EXPORT_SYMBOL_GPL(tegra210_xusb_pll_hw_sequence_start);
454
455void tegra210_sata_pll_hw_control_enable(void)
456{
457 u32 val;
458
459 val = readl_relaxed(clk_base + SATA_PLL_CFG0);
460 val &= ~SATA_PLL_CFG0_PADPLL_RESET_SWCTL;
461 val |= SATA_PLL_CFG0_PADPLL_USE_LOCKDET |
462 SATA_PLL_CFG0_PADPLL_SLEEP_IDDQ;
463 writel_relaxed(val, clk_base + SATA_PLL_CFG0);
464}
465EXPORT_SYMBOL_GPL(tegra210_sata_pll_hw_control_enable);
466
467void tegra210_sata_pll_hw_sequence_start(void)
468{
469 u32 val;
470
471 val = readl_relaxed(clk_base + SATA_PLL_CFG0);
472 val |= SATA_PLL_CFG0_SEQ_ENABLE;
473 writel_relaxed(val, clk_base + SATA_PLL_CFG0);
474}
475EXPORT_SYMBOL_GPL(tegra210_sata_pll_hw_sequence_start);
476
419static inline void _pll_misc_chk_default(void __iomem *base, 477static inline void _pll_misc_chk_default(void __iomem *base,
420 struct tegra_clk_pll_params *params, 478 struct tegra_clk_pll_params *params,
421 u8 misc_num, u32 default_val, u32 mask) 479 u8 misc_num, u32 default_val, u32 mask)
diff --git a/include/linux/clk/tegra.h b/include/linux/clk/tegra.h
index 57bf7aab4516..7007a5f48080 100644
--- a/include/linux/clk/tegra.h
+++ b/include/linux/clk/tegra.h
@@ -121,4 +121,9 @@ static inline void tegra_cpu_clock_resume(void)
121} 121}
122#endif 122#endif
123 123
124extern void tegra210_xusb_pll_hw_control_enable(void);
125extern void tegra210_xusb_pll_hw_sequence_start(void);
126extern void tegra210_sata_pll_hw_control_enable(void);
127extern void tegra210_sata_pll_hw_sequence_start(void);
128
124#endif /* __LINUX_CLK_TEGRA_H_ */ 129#endif /* __LINUX_CLK_TEGRA_H_ */