clk: tegra210b01: add plle
This commit is contained in:
@@ -503,6 +503,72 @@ static unsigned long tegra210_input_freq[] = {
|
|||||||
#define PLLE_SS_COEFFICIENTS_VAL \
|
#define PLLE_SS_COEFFICIENTS_VAL \
|
||||||
(PLLE_SS_MAX_VAL | PLLE_SS_INC_VAL | PLLE_SS_INCINTRV_VAL)
|
(PLLE_SS_MAX_VAL | PLLE_SS_INC_VAL | PLLE_SS_INCINTRV_VAL)
|
||||||
|
|
||||||
|
bool tegra210b01_plle_hw_sequence_is_enabled(void)
|
||||||
|
{
|
||||||
|
u32 value;
|
||||||
|
|
||||||
|
value = readl_relaxed(clk_base + PLLE_AUX);
|
||||||
|
if (value & PLLE_AUX_SEQ_ENABLE)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(tegra210b01_plle_hw_sequence_is_enabled);
|
||||||
|
|
||||||
|
int tegra210b01_plle_hw_sequence_start(void)
|
||||||
|
{
|
||||||
|
u32 value;
|
||||||
|
|
||||||
|
if (tegra210b01_plle_hw_sequence_is_enabled())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* skip if PLLE is not enabled yet */
|
||||||
|
value = readl_relaxed(clk_base + PLLE_MISC0);
|
||||||
|
if (!(value & PLLE_MISC_LOCK))
|
||||||
|
return -EIO;
|
||||||
|
|
||||||
|
value &= ~PLLE_MISC_IDDQ_SW_CTRL;
|
||||||
|
writel_relaxed(value, clk_base + PLLE_MISC0);
|
||||||
|
|
||||||
|
value = readl_relaxed(clk_base + PLLE_AUX);
|
||||||
|
value |= (PLLE_AUX_USE_LOCKDET | PLLE_AUX_SS_SEQ_INCLUDE);
|
||||||
|
value &= ~(PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL);
|
||||||
|
writel_relaxed(value, clk_base + PLLE_AUX);
|
||||||
|
|
||||||
|
fence_udelay(1, clk_base);
|
||||||
|
|
||||||
|
value |= PLLE_AUX_SEQ_ENABLE;
|
||||||
|
writel_relaxed(value, clk_base + PLLE_AUX);
|
||||||
|
|
||||||
|
fence_udelay(1, clk_base);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(tegra210b01_plle_hw_sequence_start);
|
||||||
|
|
||||||
|
void tegra210b01_xusb_pll_hw_control_enable(void)
|
||||||
|
{
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
val = readl_relaxed(clk_base + XUSBIO_PLL_CFG0);
|
||||||
|
val &= ~(XUSBIO_PLL_CFG0_CLK_ENABLE_SWCTL |
|
||||||
|
XUSBIO_PLL_CFG0_PADPLL_RESET_SWCTL);
|
||||||
|
val |= XUSBIO_PLL_CFG0_PADPLL_USE_LOCKDET |
|
||||||
|
XUSBIO_PLL_CFG0_PADPLL_SLEEP_IDDQ;
|
||||||
|
writel_relaxed(val, clk_base + XUSBIO_PLL_CFG0);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(tegra210b01_xusb_pll_hw_control_enable);
|
||||||
|
|
||||||
|
void tegra210b01_xusb_pll_hw_sequence_start(void)
|
||||||
|
{
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
val = readl_relaxed(clk_base + XUSBIO_PLL_CFG0);
|
||||||
|
val |= XUSBIO_PLL_CFG0_SEQ_ENABLE;
|
||||||
|
writel_relaxed(val, clk_base + XUSBIO_PLL_CFG0);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(tegra210b01_xusb_pll_hw_sequence_start);
|
||||||
|
|
||||||
static inline void _pll_misc_chk_default(void __iomem *base,
|
static inline void _pll_misc_chk_default(void __iomem *base,
|
||||||
struct tegra_clk_pll_params *params,
|
struct tegra_clk_pll_params *params,
|
||||||
u8 misc_num, u32 default_val, u32 mask)
|
u8 misc_num, u32 default_val, u32 mask)
|
||||||
|
|||||||
Reference in New Issue
Block a user