Commit 0e954fea authored by Stephen Boyd's avatar Stephen Boyd

Merge tag 'tegra-for-4.5-clk-fixes' of...

Merge tag 'tegra-for-4.5-clk-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into clk-fixes

Pull tegra fixes from Thierry Reding:

clk: tegra: Fixes for v4.5-rc3

This set contains a bunch of miscellaneous fixes that have accumulated
over the past couple of weeks, primarily for the Tegra210 support added
in v4.5-rc1.

* tag 'tegra-for-4.5-clk-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux:
  clk: tegra: super: Fix sparse warnings for functions not declared as static
  clk: tegra: Fix sparse warnings for functions not declared as static
  clk: tegra: Fix sparse warning for pll_m
  clk: tegra: Use definition for pll_u override bit
  clk: tegra: Fix warning caused by pll_u failing to lock
  clk: tegra: Fix clock sources for Tegra210 EMC
  clk: tegra: Add the APB2APE audio clock on Tegra210
  clk: tegra: Add missing of_node_put()
  clk: tegra: Fix PLLE SS coefficients
  clk: tegra: Fix typos around clearing PLLE bits during enable
  clk: tegra: Do not disable PLLE when under hardware control
  clk: tegra: Fix pllx dyn step calculation
  clk: tegra: pll: Fix potential sleeping-while-atomic
  clk: tegra: Fix the misnaming of nvenc from msenc
  clk: tegra: Fix naming of MISC registers
  clk: tegra: Remove improper flags for lock_enable
  clk: tegra: Fix divider on VI_I2C
parents 60c7e2d2 5a1d5eff
...@@ -450,8 +450,10 @@ static int load_timings_from_dt(struct tegra_clk_emc *tegra, ...@@ -450,8 +450,10 @@ static int load_timings_from_dt(struct tegra_clk_emc *tegra,
struct emc_timing *timing = tegra->timings + (i++); struct emc_timing *timing = tegra->timings + (i++);
err = load_one_timing_from_dt(tegra, timing, child); err = load_one_timing_from_dt(tegra, timing, child);
if (err) if (err) {
of_node_put(child);
return err; return err;
}
timing->ram_code = ram_code; timing->ram_code = ram_code;
} }
...@@ -499,9 +501,9 @@ struct clk *tegra_clk_register_emc(void __iomem *base, struct device_node *np, ...@@ -499,9 +501,9 @@ struct clk *tegra_clk_register_emc(void __iomem *base, struct device_node *np,
* fuses until the apbmisc driver is loaded. * fuses until the apbmisc driver is loaded.
*/ */
err = load_timings_from_dt(tegra, node, node_ram_code); err = load_timings_from_dt(tegra, node, node_ram_code);
of_node_put(node);
if (err) if (err)
return ERR_PTR(err); return ERR_PTR(err);
of_node_put(node);
break; break;
} }
......
...@@ -11,6 +11,7 @@ enum clk_id { ...@@ -11,6 +11,7 @@ enum clk_id {
tegra_clk_afi, tegra_clk_afi,
tegra_clk_amx, tegra_clk_amx,
tegra_clk_amx1, tegra_clk_amx1,
tegra_clk_apb2ape,
tegra_clk_apbdma, tegra_clk_apbdma,
tegra_clk_apbif, tegra_clk_apbif,
tegra_clk_ape, tegra_clk_ape,
......
...@@ -86,15 +86,21 @@ ...@@ -86,15 +86,21 @@
#define PLLE_SS_DISABLE (PLLE_SS_CNTL_BYPASS_SS | PLLE_SS_CNTL_INTERP_RESET |\ #define PLLE_SS_DISABLE (PLLE_SS_CNTL_BYPASS_SS | PLLE_SS_CNTL_INTERP_RESET |\
PLLE_SS_CNTL_SSC_BYP) PLLE_SS_CNTL_SSC_BYP)
#define PLLE_SS_MAX_MASK 0x1ff #define PLLE_SS_MAX_MASK 0x1ff
#define PLLE_SS_MAX_VAL 0x25 #define PLLE_SS_MAX_VAL_TEGRA114 0x25
#define PLLE_SS_MAX_VAL_TEGRA210 0x21
#define PLLE_SS_INC_MASK (0xff << 16) #define PLLE_SS_INC_MASK (0xff << 16)
#define PLLE_SS_INC_VAL (0x1 << 16) #define PLLE_SS_INC_VAL (0x1 << 16)
#define PLLE_SS_INCINTRV_MASK (0x3f << 24) #define PLLE_SS_INCINTRV_MASK (0x3f << 24)
#define PLLE_SS_INCINTRV_VAL (0x20 << 24) #define PLLE_SS_INCINTRV_VAL_TEGRA114 (0x20 << 24)
#define PLLE_SS_INCINTRV_VAL_TEGRA210 (0x23 << 24)
#define PLLE_SS_COEFFICIENTS_MASK \ #define PLLE_SS_COEFFICIENTS_MASK \
(PLLE_SS_MAX_MASK | PLLE_SS_INC_MASK | PLLE_SS_INCINTRV_MASK) (PLLE_SS_MAX_MASK | PLLE_SS_INC_MASK | PLLE_SS_INCINTRV_MASK)
#define PLLE_SS_COEFFICIENTS_VAL \ #define PLLE_SS_COEFFICIENTS_VAL_TEGRA114 \
(PLLE_SS_MAX_VAL | PLLE_SS_INC_VAL | PLLE_SS_INCINTRV_VAL) (PLLE_SS_MAX_VAL_TEGRA114 | PLLE_SS_INC_VAL |\
PLLE_SS_INCINTRV_VAL_TEGRA114)
#define PLLE_SS_COEFFICIENTS_VAL_TEGRA210 \
(PLLE_SS_MAX_VAL_TEGRA210 | PLLE_SS_INC_VAL |\
PLLE_SS_INCINTRV_VAL_TEGRA210)
#define PLLE_AUX_PLLP_SEL BIT(2) #define PLLE_AUX_PLLP_SEL BIT(2)
#define PLLE_AUX_USE_LOCKDET BIT(3) #define PLLE_AUX_USE_LOCKDET BIT(3)
...@@ -880,7 +886,7 @@ static int clk_plle_training(struct tegra_clk_pll *pll) ...@@ -880,7 +886,7 @@ static int clk_plle_training(struct tegra_clk_pll *pll)
static int clk_plle_enable(struct clk_hw *hw) static int clk_plle_enable(struct clk_hw *hw)
{ {
struct tegra_clk_pll *pll = to_clk_pll(hw); struct tegra_clk_pll *pll = to_clk_pll(hw);
unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk)); unsigned long input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
struct tegra_clk_pll_freq_table sel; struct tegra_clk_pll_freq_table sel;
u32 val; u32 val;
int err; int err;
...@@ -1378,7 +1384,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw) ...@@ -1378,7 +1384,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw)
u32 val; u32 val;
int ret; int ret;
unsigned long flags = 0; unsigned long flags = 0;
unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk)); unsigned long input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate)) if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
return -EINVAL; return -EINVAL;
...@@ -1401,7 +1407,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw) ...@@ -1401,7 +1407,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw)
val |= PLLE_MISC_IDDQ_SW_CTRL; val |= PLLE_MISC_IDDQ_SW_CTRL;
val &= ~PLLE_MISC_IDDQ_SW_VALUE; val &= ~PLLE_MISC_IDDQ_SW_VALUE;
val |= PLLE_MISC_PLLE_PTS; val |= PLLE_MISC_PLLE_PTS;
val |= PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK; val &= ~(PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK);
pll_writel_misc(val, pll); pll_writel_misc(val, pll);
udelay(5); udelay(5);
...@@ -1428,7 +1434,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw) ...@@ -1428,7 +1434,7 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw)
val = pll_readl(PLLE_SS_CTRL, pll); val = pll_readl(PLLE_SS_CTRL, pll);
val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT); val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT);
val &= ~PLLE_SS_COEFFICIENTS_MASK; val &= ~PLLE_SS_COEFFICIENTS_MASK;
val |= PLLE_SS_COEFFICIENTS_VAL; val |= PLLE_SS_COEFFICIENTS_VAL_TEGRA114;
pll_writel(val, PLLE_SS_CTRL, pll); pll_writel(val, PLLE_SS_CTRL, pll);
val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS); val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS);
pll_writel(val, PLLE_SS_CTRL, pll); pll_writel(val, PLLE_SS_CTRL, pll);
...@@ -2012,9 +2018,9 @@ static int clk_plle_tegra210_enable(struct clk_hw *hw) ...@@ -2012,9 +2018,9 @@ static int clk_plle_tegra210_enable(struct clk_hw *hw)
struct tegra_clk_pll *pll = to_clk_pll(hw); struct tegra_clk_pll *pll = to_clk_pll(hw);
struct tegra_clk_pll_freq_table sel; struct tegra_clk_pll_freq_table sel;
u32 val; u32 val;
int ret; int ret = 0;
unsigned long flags = 0; unsigned long flags = 0;
unsigned long input_rate = clk_get_rate(clk_get_parent(hw->clk)); unsigned long input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate)) if (_get_table_rate(hw, &sel, pll->params->fixed_rate, input_rate))
return -EINVAL; return -EINVAL;
...@@ -2022,22 +2028,20 @@ static int clk_plle_tegra210_enable(struct clk_hw *hw) ...@@ -2022,22 +2028,20 @@ static int clk_plle_tegra210_enable(struct clk_hw *hw)
if (pll->lock) if (pll->lock)
spin_lock_irqsave(pll->lock, flags); spin_lock_irqsave(pll->lock, flags);
val = pll_readl(pll->params->aux_reg, pll);
if (val & PLLE_AUX_SEQ_ENABLE)
goto out;
val = pll_readl_base(pll); val = pll_readl_base(pll);
val &= ~BIT(30); /* Disable lock override */ val &= ~BIT(30); /* Disable lock override */
pll_writel_base(val, pll); pll_writel_base(val, pll);
val = pll_readl(pll->params->aux_reg, pll);
val |= PLLE_AUX_ENABLE_SWCTL;
val &= ~PLLE_AUX_SEQ_ENABLE;
pll_writel(val, pll->params->aux_reg, pll);
udelay(1);
val = pll_readl_misc(pll); val = pll_readl_misc(pll);
val |= PLLE_MISC_LOCK_ENABLE; val |= PLLE_MISC_LOCK_ENABLE;
val |= PLLE_MISC_IDDQ_SW_CTRL; val |= PLLE_MISC_IDDQ_SW_CTRL;
val &= ~PLLE_MISC_IDDQ_SW_VALUE; val &= ~PLLE_MISC_IDDQ_SW_VALUE;
val |= PLLE_MISC_PLLE_PTS; val |= PLLE_MISC_PLLE_PTS;
val |= PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK; val &= ~(PLLE_MISC_VREG_BG_CTRL_MASK | PLLE_MISC_VREG_CTRL_MASK);
pll_writel_misc(val, pll); pll_writel_misc(val, pll);
udelay(5); udelay(5);
...@@ -2067,7 +2071,7 @@ static int clk_plle_tegra210_enable(struct clk_hw *hw) ...@@ -2067,7 +2071,7 @@ static int clk_plle_tegra210_enable(struct clk_hw *hw)
val = pll_readl(PLLE_SS_CTRL, pll); val = pll_readl(PLLE_SS_CTRL, pll);
val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT); val &= ~(PLLE_SS_CNTL_CENTER | PLLE_SS_CNTL_INVERT);
val &= ~PLLE_SS_COEFFICIENTS_MASK; val &= ~PLLE_SS_COEFFICIENTS_MASK;
val |= PLLE_SS_COEFFICIENTS_VAL; val |= PLLE_SS_COEFFICIENTS_VAL_TEGRA210;
pll_writel(val, PLLE_SS_CTRL, pll); pll_writel(val, PLLE_SS_CTRL, pll);
val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS); val &= ~(PLLE_SS_CNTL_SSC_BYP | PLLE_SS_CNTL_BYPASS_SS);
pll_writel(val, PLLE_SS_CTRL, pll); pll_writel(val, PLLE_SS_CTRL, pll);
...@@ -2104,15 +2108,25 @@ static void clk_plle_tegra210_disable(struct clk_hw *hw) ...@@ -2104,15 +2108,25 @@ static void clk_plle_tegra210_disable(struct clk_hw *hw)
if (pll->lock) if (pll->lock)
spin_lock_irqsave(pll->lock, flags); spin_lock_irqsave(pll->lock, flags);
/* If PLLE HW sequencer is enabled, SW should not disable PLLE */
val = pll_readl(pll->params->aux_reg, pll);
if (val & PLLE_AUX_SEQ_ENABLE)
goto out;
val = pll_readl_base(pll); val = pll_readl_base(pll);
val &= ~PLLE_BASE_ENABLE; val &= ~PLLE_BASE_ENABLE;
pll_writel_base(val, pll); pll_writel_base(val, pll);
val = pll_readl(pll->params->aux_reg, pll);
val |= PLLE_AUX_ENABLE_SWCTL | PLLE_AUX_SS_SWCTL;
pll_writel(val, pll->params->aux_reg, pll);
val = pll_readl_misc(pll); val = pll_readl_misc(pll);
val |= PLLE_MISC_IDDQ_SW_CTRL | PLLE_MISC_IDDQ_SW_VALUE; val |= PLLE_MISC_IDDQ_SW_CTRL | PLLE_MISC_IDDQ_SW_VALUE;
pll_writel_misc(val, pll); pll_writel_misc(val, pll);
udelay(1); udelay(1);
out:
if (pll->lock) if (pll->lock)
spin_unlock_irqrestore(pll->lock, flags); spin_unlock_irqrestore(pll->lock, flags);
} }
......
...@@ -773,7 +773,7 @@ static struct tegra_periph_init_data periph_clks[] = { ...@@ -773,7 +773,7 @@ static struct tegra_periph_init_data periph_clks[] = {
XUSB("xusb_dev_src", mux_clkm_pllp_pllc_pllre, CLK_SOURCE_XUSB_DEV_SRC, 95, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_xusb_dev_src), XUSB("xusb_dev_src", mux_clkm_pllp_pllc_pllre, CLK_SOURCE_XUSB_DEV_SRC, 95, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_xusb_dev_src),
XUSB("xusb_dev_src", mux_clkm_pllp_pllre, CLK_SOURCE_XUSB_DEV_SRC, 95, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_xusb_dev_src_8), XUSB("xusb_dev_src", mux_clkm_pllp_pllre, CLK_SOURCE_XUSB_DEV_SRC, 95, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_xusb_dev_src_8),
MUX8("dbgapb", mux_pllp_clkm_2, CLK_SOURCE_DBGAPB, 185, TEGRA_PERIPH_NO_RESET, tegra_clk_dbgapb), MUX8("dbgapb", mux_pllp_clkm_2, CLK_SOURCE_DBGAPB, 185, TEGRA_PERIPH_NO_RESET, tegra_clk_dbgapb),
MUX8("msenc", mux_pllc2_c_c3_pllp_plla1_clkm, CLK_SOURCE_NVENC, 219, 0, tegra_clk_nvenc), MUX8("nvenc", mux_pllc2_c_c3_pllp_plla1_clkm, CLK_SOURCE_NVENC, 219, 0, tegra_clk_nvenc),
MUX8("nvdec", mux_pllc2_c_c3_pllp_plla1_clkm, CLK_SOURCE_NVDEC, 194, 0, tegra_clk_nvdec), MUX8("nvdec", mux_pllc2_c_c3_pllp_plla1_clkm, CLK_SOURCE_NVDEC, 194, 0, tegra_clk_nvdec),
MUX8("nvjpg", mux_pllc2_c_c3_pllp_plla1_clkm, CLK_SOURCE_NVJPG, 195, 0, tegra_clk_nvjpg), MUX8("nvjpg", mux_pllc2_c_c3_pllp_plla1_clkm, CLK_SOURCE_NVJPG, 195, 0, tegra_clk_nvjpg),
MUX8("ape", mux_plla_pllc4_out0_pllc_pllc4_out1_pllp_pllc4_out2_clkm, CLK_SOURCE_APE, 198, TEGRA_PERIPH_ON_APB, tegra_clk_ape), MUX8("ape", mux_plla_pllc4_out0_pllc_pllc4_out1_pllp_pllc4_out2_clkm, CLK_SOURCE_APE, 198, TEGRA_PERIPH_ON_APB, tegra_clk_ape),
...@@ -782,7 +782,7 @@ static struct tegra_periph_init_data periph_clks[] = { ...@@ -782,7 +782,7 @@ static struct tegra_periph_init_data periph_clks[] = {
NODIV("sor1", mux_clkm_sor1_brick_sor1_src, CLK_SOURCE_SOR1, 15, MASK(1), 183, 0, tegra_clk_sor1, &sor1_lock), NODIV("sor1", mux_clkm_sor1_brick_sor1_src, CLK_SOURCE_SOR1, 15, MASK(1), 183, 0, tegra_clk_sor1, &sor1_lock),
MUX8("sdmmc_legacy", mux_pllp_out3_clkm_pllp_pllc4, CLK_SOURCE_SDMMC_LEGACY, 193, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_sdmmc_legacy), MUX8("sdmmc_legacy", mux_pllp_out3_clkm_pllp_pllc4, CLK_SOURCE_SDMMC_LEGACY, 193, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_sdmmc_legacy),
MUX8("qspi", mux_pllp_pllc_pllc_out1_pllc4_out2_pllc4_out1_clkm_pllc4_out0, CLK_SOURCE_QSPI, 211, TEGRA_PERIPH_ON_APB, tegra_clk_qspi), MUX8("qspi", mux_pllp_pllc_pllc_out1_pllc4_out2_pllc4_out1_clkm_pllc4_out0, CLK_SOURCE_QSPI, 211, TEGRA_PERIPH_ON_APB, tegra_clk_qspi),
MUX("vii2c", mux_pllp_pllc_clkm, CLK_SOURCE_VI_I2C, 208, TEGRA_PERIPH_ON_APB, tegra_clk_vi_i2c), I2C("vii2c", mux_pllp_pllc_clkm, CLK_SOURCE_VI_I2C, 208, tegra_clk_vi_i2c),
MUX("mipibif", mux_pllp_clkm, CLK_SOURCE_MIPIBIF, 173, TEGRA_PERIPH_ON_APB, tegra_clk_mipibif), MUX("mipibif", mux_pllp_clkm, CLK_SOURCE_MIPIBIF, 173, TEGRA_PERIPH_ON_APB, tegra_clk_mipibif),
MUX("uartape", mux_pllp_pllc_clkm, CLK_SOURCE_UARTAPE, 212, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_uartape), MUX("uartape", mux_pllp_pllc_clkm, CLK_SOURCE_UARTAPE, 212, TEGRA_PERIPH_ON_APB | TEGRA_PERIPH_NO_RESET, tegra_clk_uartape),
MUX8("tsecb", mux_pllp_pllc2_c_c3_clkm, CLK_SOURCE_TSECB, 206, 0, tegra_clk_tsecb), MUX8("tsecb", mux_pllp_pllc2_c_c3_clkm, CLK_SOURCE_TSECB, 206, 0, tegra_clk_tsecb),
...@@ -829,6 +829,7 @@ static struct tegra_periph_init_data gate_clks[] = { ...@@ -829,6 +829,7 @@ static struct tegra_periph_init_data gate_clks[] = {
GATE("xusb_gate", "osc", 143, 0, tegra_clk_xusb_gate, 0), GATE("xusb_gate", "osc", 143, 0, tegra_clk_xusb_gate, 0),
GATE("pll_p_out_cpu", "pll_p", 223, 0, tegra_clk_pll_p_out_cpu, 0), GATE("pll_p_out_cpu", "pll_p", 223, 0, tegra_clk_pll_p_out_cpu, 0),
GATE("pll_p_out_adsp", "pll_p", 187, 0, tegra_clk_pll_p_out_adsp, 0), GATE("pll_p_out_adsp", "pll_p", 187, 0, tegra_clk_pll_p_out_adsp, 0),
GATE("apb2ape", "clk_m", 107, 0, tegra_clk_apb2ape, 0),
}; };
static struct tegra_periph_init_data div_clks[] = { static struct tegra_periph_init_data div_clks[] = {
......
...@@ -67,7 +67,7 @@ static const char *cclk_lp_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m", ...@@ -67,7 +67,7 @@ static const char *cclk_lp_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m",
"pll_p", "pll_p_out4", "unused", "pll_p", "pll_p_out4", "unused",
"unused", "pll_x", "pll_x_out0" }; "unused", "pll_x", "pll_x_out0" };
const struct tegra_super_gen_info tegra_super_gen_info_gen4 = { static const struct tegra_super_gen_info tegra_super_gen_info_gen4 = {
.gen = gen4, .gen = gen4,
.sclk_parents = sclk_parents, .sclk_parents = sclk_parents,
.cclk_g_parents = cclk_g_parents, .cclk_g_parents = cclk_g_parents,
...@@ -93,7 +93,7 @@ static const char *cclk_lp_parents_gen5[] = { "clk_m", "unused", "clk_32k", "unu ...@@ -93,7 +93,7 @@ static const char *cclk_lp_parents_gen5[] = { "clk_m", "unused", "clk_32k", "unu
"unused", "unused", "unused", "unused", "unused", "unused", "unused", "unused",
"dfllCPU_out" }; "dfllCPU_out" };
const struct tegra_super_gen_info tegra_super_gen_info_gen5 = { static const struct tegra_super_gen_info tegra_super_gen_info_gen5 = {
.gen = gen5, .gen = gen5,
.sclk_parents = sclk_parents_gen5, .sclk_parents = sclk_parents_gen5,
.cclk_g_parents = cclk_g_parents_gen5, .cclk_g_parents = cclk_g_parents_gen5,
...@@ -171,7 +171,7 @@ static void __init tegra_sclk_init(void __iomem *clk_base, ...@@ -171,7 +171,7 @@ static void __init tegra_sclk_init(void __iomem *clk_base,
*dt_clk = clk; *dt_clk = clk;
} }
void __init tegra_super_clk_init(void __iomem *clk_base, static void __init tegra_super_clk_init(void __iomem *clk_base,
void __iomem *pmc_base, void __iomem *pmc_base,
struct tegra_clk *tegra_clks, struct tegra_clk *tegra_clks,
struct tegra_clk_pll_params *params, struct tegra_clk_pll_params *params,
......
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
#define PLLC3_MISC3 0x50c #define PLLC3_MISC3 0x50c
#define PLLM_BASE 0x90 #define PLLM_BASE 0x90
#define PLLM_MISC0 0x9c
#define PLLM_MISC1 0x98 #define PLLM_MISC1 0x98
#define PLLM_MISC2 0x9c
#define PLLP_BASE 0xa0 #define PLLP_BASE 0xa0
#define PLLP_MISC0 0xac #define PLLP_MISC0 0xac
#define PLLP_MISC1 0x680 #define PLLP_MISC1 0x680
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
#define PLLC4_MISC0 0x5a8 #define PLLC4_MISC0 0x5a8
#define PLLC4_OUT 0x5e4 #define PLLC4_OUT 0x5e4
#define PLLMB_BASE 0x5e8 #define PLLMB_BASE 0x5e8
#define PLLMB_MISC0 0x5ec #define PLLMB_MISC1 0x5ec
#define PLLA1_BASE 0x6a4 #define PLLA1_BASE 0x6a4
#define PLLA1_MISC0 0x6a8 #define PLLA1_MISC0 0x6a8
#define PLLA1_MISC1 0x6ac #define PLLA1_MISC1 0x6ac
...@@ -243,7 +243,8 @@ static unsigned long tegra210_input_freq[] = { ...@@ -243,7 +243,8 @@ static unsigned long tegra210_input_freq[] = {
}; };
static const char *mux_pllmcp_clkm[] = { static const char *mux_pllmcp_clkm[] = {
"pll_m", "pll_c", "pll_p", "clk_m", "pll_m_ud", "pll_c2", "pll_c3", "pll_m", "pll_c", "pll_p", "clk_m", "pll_m_ud", "pll_mb", "pll_mb",
"pll_p",
}; };
#define mux_pllmcp_clkm_idx NULL #define mux_pllmcp_clkm_idx NULL
...@@ -367,12 +368,12 @@ static const char *mux_pllmcp_clkm[] = { ...@@ -367,12 +368,12 @@ static const char *mux_pllmcp_clkm[] = {
/* PLLMB */ /* PLLMB */
#define PLLMB_BASE_LOCK (1 << 27) #define PLLMB_BASE_LOCK (1 << 27)
#define PLLMB_MISC0_LOCK_OVERRIDE (1 << 18) #define PLLMB_MISC1_LOCK_OVERRIDE (1 << 18)
#define PLLMB_MISC0_IDDQ (1 << 17) #define PLLMB_MISC1_IDDQ (1 << 17)
#define PLLMB_MISC0_LOCK_ENABLE (1 << 16) #define PLLMB_MISC1_LOCK_ENABLE (1 << 16)
#define PLLMB_MISC0_DEFAULT_VALUE 0x00030000 #define PLLMB_MISC1_DEFAULT_VALUE 0x00030000
#define PLLMB_MISC0_WRITE_MASK 0x0007ffff #define PLLMB_MISC1_WRITE_MASK 0x0007ffff
/* PLLP */ /* PLLP */
#define PLLP_BASE_OVERRIDE (1 << 28) #define PLLP_BASE_OVERRIDE (1 << 28)
...@@ -457,7 +458,8 @@ static void pllcx_check_defaults(struct tegra_clk_pll_params *params) ...@@ -457,7 +458,8 @@ static void pllcx_check_defaults(struct tegra_clk_pll_params *params)
PLLCX_MISC3_WRITE_MASK); PLLCX_MISC3_WRITE_MASK);
} }
void tegra210_pllcx_set_defaults(const char *name, struct tegra_clk_pll *pllcx) static void tegra210_pllcx_set_defaults(const char *name,
struct tegra_clk_pll *pllcx)
{ {
pllcx->params->defaults_set = true; pllcx->params->defaults_set = true;
...@@ -482,22 +484,22 @@ void tegra210_pllcx_set_defaults(const char *name, struct tegra_clk_pll *pllcx) ...@@ -482,22 +484,22 @@ void tegra210_pllcx_set_defaults(const char *name, struct tegra_clk_pll *pllcx)
udelay(1); udelay(1);
} }
void _pllc_set_defaults(struct tegra_clk_pll *pllcx) static void _pllc_set_defaults(struct tegra_clk_pll *pllcx)
{ {
tegra210_pllcx_set_defaults("PLL_C", pllcx); tegra210_pllcx_set_defaults("PLL_C", pllcx);
} }
void _pllc2_set_defaults(struct tegra_clk_pll *pllcx) static void _pllc2_set_defaults(struct tegra_clk_pll *pllcx)
{ {
tegra210_pllcx_set_defaults("PLL_C2", pllcx); tegra210_pllcx_set_defaults("PLL_C2", pllcx);
} }
void _pllc3_set_defaults(struct tegra_clk_pll *pllcx) static void _pllc3_set_defaults(struct tegra_clk_pll *pllcx)
{ {
tegra210_pllcx_set_defaults("PLL_C3", pllcx); tegra210_pllcx_set_defaults("PLL_C3", pllcx);
} }
void _plla1_set_defaults(struct tegra_clk_pll *pllcx) static void _plla1_set_defaults(struct tegra_clk_pll *pllcx)
{ {
tegra210_pllcx_set_defaults("PLL_A1", pllcx); tegra210_pllcx_set_defaults("PLL_A1", pllcx);
} }
...@@ -507,7 +509,7 @@ void _plla1_set_defaults(struct tegra_clk_pll *pllcx) ...@@ -507,7 +509,7 @@ void _plla1_set_defaults(struct tegra_clk_pll *pllcx)
* PLL with dynamic ramp and fractional SDM. Dynamic ramp is not used. * PLL with dynamic ramp and fractional SDM. Dynamic ramp is not used.
* Fractional SDM is allowed to provide exact audio rates. * Fractional SDM is allowed to provide exact audio rates.
*/ */
void tegra210_plla_set_defaults(struct tegra_clk_pll *plla) static void tegra210_plla_set_defaults(struct tegra_clk_pll *plla)
{ {
u32 mask; u32 mask;
u32 val = readl_relaxed(clk_base + plla->params->base_reg); u32 val = readl_relaxed(clk_base + plla->params->base_reg);
...@@ -559,7 +561,7 @@ void tegra210_plla_set_defaults(struct tegra_clk_pll *plla) ...@@ -559,7 +561,7 @@ void tegra210_plla_set_defaults(struct tegra_clk_pll *plla)
* PLLD * PLLD
* PLL with fractional SDM. * PLL with fractional SDM.
*/ */
void tegra210_plld_set_defaults(struct tegra_clk_pll *plld) static void tegra210_plld_set_defaults(struct tegra_clk_pll *plld)
{ {
u32 val; u32 val;
u32 mask = 0xffff; u32 mask = 0xffff;
...@@ -698,7 +700,7 @@ static void plldss_defaults(const char *pll_name, struct tegra_clk_pll *plldss, ...@@ -698,7 +700,7 @@ static void plldss_defaults(const char *pll_name, struct tegra_clk_pll *plldss,
udelay(1); udelay(1);
} }
void tegra210_plld2_set_defaults(struct tegra_clk_pll *plld2) static void tegra210_plld2_set_defaults(struct tegra_clk_pll *plld2)
{ {
plldss_defaults("PLL_D2", plld2, PLLD2_MISC0_DEFAULT_VALUE, plldss_defaults("PLL_D2", plld2, PLLD2_MISC0_DEFAULT_VALUE,
PLLD2_MISC1_CFG_DEFAULT_VALUE, PLLD2_MISC1_CFG_DEFAULT_VALUE,
...@@ -706,7 +708,7 @@ void tegra210_plld2_set_defaults(struct tegra_clk_pll *plld2) ...@@ -706,7 +708,7 @@ void tegra210_plld2_set_defaults(struct tegra_clk_pll *plld2)
PLLD2_MISC3_CTRL2_DEFAULT_VALUE); PLLD2_MISC3_CTRL2_DEFAULT_VALUE);
} }
void tegra210_plldp_set_defaults(struct tegra_clk_pll *plldp) static void tegra210_plldp_set_defaults(struct tegra_clk_pll *plldp)
{ {
plldss_defaults("PLL_DP", plldp, PLLDP_MISC0_DEFAULT_VALUE, plldss_defaults("PLL_DP", plldp, PLLDP_MISC0_DEFAULT_VALUE,
PLLDP_MISC1_CFG_DEFAULT_VALUE, PLLDP_MISC1_CFG_DEFAULT_VALUE,
...@@ -719,7 +721,7 @@ void tegra210_plldp_set_defaults(struct tegra_clk_pll *plldp) ...@@ -719,7 +721,7 @@ void tegra210_plldp_set_defaults(struct tegra_clk_pll *plldp)
* Base and misc0 layout is the same as PLLD2/PLLDP, but no SDM/SSC support. * Base and misc0 layout is the same as PLLD2/PLLDP, but no SDM/SSC support.
* VCO is exposed to the clock tree via fixed 1/3 and 1/5 dividers. * VCO is exposed to the clock tree via fixed 1/3 and 1/5 dividers.
*/ */
void tegra210_pllc4_set_defaults(struct tegra_clk_pll *pllc4) static void tegra210_pllc4_set_defaults(struct tegra_clk_pll *pllc4)
{ {
plldss_defaults("PLL_C4", pllc4, PLLC4_MISC0_DEFAULT_VALUE, 0, 0, 0); plldss_defaults("PLL_C4", pllc4, PLLC4_MISC0_DEFAULT_VALUE, 0, 0, 0);
} }
...@@ -728,7 +730,7 @@ void tegra210_pllc4_set_defaults(struct tegra_clk_pll *pllc4) ...@@ -728,7 +730,7 @@ void tegra210_pllc4_set_defaults(struct tegra_clk_pll *pllc4)
* PLLRE * PLLRE
* VCO is exposed to the clock tree directly along with post-divider output * VCO is exposed to the clock tree directly along with post-divider output
*/ */
void tegra210_pllre_set_defaults(struct tegra_clk_pll *pllre) static void tegra210_pllre_set_defaults(struct tegra_clk_pll *pllre)
{ {
u32 mask; u32 mask;
u32 val = readl_relaxed(clk_base + pllre->params->base_reg); u32 val = readl_relaxed(clk_base + pllre->params->base_reg);
...@@ -780,13 +782,13 @@ static void pllx_get_dyn_steps(struct clk_hw *hw, u32 *step_a, u32 *step_b) ...@@ -780,13 +782,13 @@ static void pllx_get_dyn_steps(struct clk_hw *hw, u32 *step_a, u32 *step_b)
{ {
unsigned long input_rate; unsigned long input_rate;
if (!IS_ERR_OR_NULL(hw->clk)) { /* cf rate */
if (!IS_ERR_OR_NULL(hw->clk))
input_rate = clk_hw_get_rate(clk_hw_get_parent(hw)); input_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
/* cf rate */ else
input_rate /= tegra_pll_get_fixed_mdiv(hw, input_rate);
} else {
input_rate = 38400000; input_rate = 38400000;
}
input_rate /= tegra_pll_get_fixed_mdiv(hw, input_rate);
switch (input_rate) { switch (input_rate) {
case 12000000: case 12000000:
...@@ -841,7 +843,7 @@ static void pllx_check_defaults(struct tegra_clk_pll *pll) ...@@ -841,7 +843,7 @@ static void pllx_check_defaults(struct tegra_clk_pll *pll)
PLLX_MISC5_WRITE_MASK); PLLX_MISC5_WRITE_MASK);
} }
void tegra210_pllx_set_defaults(struct tegra_clk_pll *pllx) static void tegra210_pllx_set_defaults(struct tegra_clk_pll *pllx)
{ {
u32 val; u32 val;
u32 step_a, step_b; u32 step_a, step_b;
...@@ -901,7 +903,7 @@ void tegra210_pllx_set_defaults(struct tegra_clk_pll *pllx) ...@@ -901,7 +903,7 @@ void tegra210_pllx_set_defaults(struct tegra_clk_pll *pllx)
} }
/* PLLMB */ /* PLLMB */
void tegra210_pllmb_set_defaults(struct tegra_clk_pll *pllmb) static void tegra210_pllmb_set_defaults(struct tegra_clk_pll *pllmb)
{ {
u32 mask, val = readl_relaxed(clk_base + pllmb->params->base_reg); u32 mask, val = readl_relaxed(clk_base + pllmb->params->base_reg);
...@@ -914,15 +916,15 @@ void tegra210_pllmb_set_defaults(struct tegra_clk_pll *pllmb) ...@@ -914,15 +916,15 @@ void tegra210_pllmb_set_defaults(struct tegra_clk_pll *pllmb)
* PLL is ON: check if defaults already set, then set those * PLL is ON: check if defaults already set, then set those
* that can be updated in flight. * that can be updated in flight.
*/ */
val = PLLMB_MISC0_DEFAULT_VALUE & (~PLLMB_MISC0_IDDQ); val = PLLMB_MISC1_DEFAULT_VALUE & (~PLLMB_MISC1_IDDQ);
mask = PLLMB_MISC0_LOCK_ENABLE | PLLMB_MISC0_LOCK_OVERRIDE; mask = PLLMB_MISC1_LOCK_ENABLE | PLLMB_MISC1_LOCK_OVERRIDE;
_pll_misc_chk_default(clk_base, pllmb->params, 0, val, _pll_misc_chk_default(clk_base, pllmb->params, 0, val,
~mask & PLLMB_MISC0_WRITE_MASK); ~mask & PLLMB_MISC1_WRITE_MASK);
/* Enable lock detect */ /* Enable lock detect */
val = readl_relaxed(clk_base + pllmb->params->ext_misc_reg[0]); val = readl_relaxed(clk_base + pllmb->params->ext_misc_reg[0]);
val &= ~mask; val &= ~mask;
val |= PLLMB_MISC0_DEFAULT_VALUE & mask; val |= PLLMB_MISC1_DEFAULT_VALUE & mask;
writel_relaxed(val, clk_base + pllmb->params->ext_misc_reg[0]); writel_relaxed(val, clk_base + pllmb->params->ext_misc_reg[0]);
udelay(1); udelay(1);
...@@ -930,7 +932,7 @@ void tegra210_pllmb_set_defaults(struct tegra_clk_pll *pllmb) ...@@ -930,7 +932,7 @@ void tegra210_pllmb_set_defaults(struct tegra_clk_pll *pllmb)
} }
/* set IDDQ, enable lock detect */ /* set IDDQ, enable lock detect */
writel_relaxed(PLLMB_MISC0_DEFAULT_VALUE, writel_relaxed(PLLMB_MISC1_DEFAULT_VALUE,
clk_base + pllmb->params->ext_misc_reg[0]); clk_base + pllmb->params->ext_misc_reg[0]);
udelay(1); udelay(1);
} }
...@@ -960,7 +962,7 @@ static void pllp_check_defaults(struct tegra_clk_pll *pll, bool enabled) ...@@ -960,7 +962,7 @@ static void pllp_check_defaults(struct tegra_clk_pll *pll, bool enabled)
~mask & PLLP_MISC1_WRITE_MASK); ~mask & PLLP_MISC1_WRITE_MASK);
} }
void tegra210_pllp_set_defaults(struct tegra_clk_pll *pllp) static void tegra210_pllp_set_defaults(struct tegra_clk_pll *pllp)
{ {
u32 mask; u32 mask;
u32 val = readl_relaxed(clk_base + pllp->params->base_reg); u32 val = readl_relaxed(clk_base + pllp->params->base_reg);
...@@ -1022,7 +1024,7 @@ static void pllu_check_defaults(struct tegra_clk_pll *pll, bool hw_control) ...@@ -1022,7 +1024,7 @@ static void pllu_check_defaults(struct tegra_clk_pll *pll, bool hw_control)
~mask & PLLU_MISC1_WRITE_MASK); ~mask & PLLU_MISC1_WRITE_MASK);
} }
void tegra210_pllu_set_defaults(struct tegra_clk_pll *pllu) static void tegra210_pllu_set_defaults(struct tegra_clk_pll *pllu)
{ {
u32 val = readl_relaxed(clk_base + pllu->params->base_reg); u32 val = readl_relaxed(clk_base + pllu->params->base_reg);
...@@ -1212,8 +1214,9 @@ static void tegra210_clk_pll_set_gain(struct tegra_clk_pll_freq_table *cfg) ...@@ -1212,8 +1214,9 @@ static void tegra210_clk_pll_set_gain(struct tegra_clk_pll_freq_table *cfg)
cfg->m *= PLL_SDM_COEFF; cfg->m *= PLL_SDM_COEFF;
} }
unsigned long tegra210_clk_adjust_vco_min(struct tegra_clk_pll_params *params, static unsigned long
unsigned long parent_rate) tegra210_clk_adjust_vco_min(struct tegra_clk_pll_params *params,
unsigned long parent_rate)
{ {
unsigned long vco_min = params->vco_min; unsigned long vco_min = params->vco_min;
...@@ -1386,7 +1389,7 @@ static struct tegra_clk_pll_params pll_c_params = { ...@@ -1386,7 +1389,7 @@ static struct tegra_clk_pll_params pll_c_params = {
.mdiv_default = 3, .mdiv_default = 3,
.div_nmp = &pllc_nmp, .div_nmp = &pllc_nmp,
.freq_table = pll_cx_freq_table, .freq_table = pll_cx_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.set_defaults = _pllc_set_defaults, .set_defaults = _pllc_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1425,7 +1428,7 @@ static struct tegra_clk_pll_params pll_c2_params = { ...@@ -1425,7 +1428,7 @@ static struct tegra_clk_pll_params pll_c2_params = {
.ext_misc_reg[2] = PLLC2_MISC2, .ext_misc_reg[2] = PLLC2_MISC2,
.ext_misc_reg[3] = PLLC2_MISC3, .ext_misc_reg[3] = PLLC2_MISC3,
.freq_table = pll_cx_freq_table, .freq_table = pll_cx_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.set_defaults = _pllc2_set_defaults, .set_defaults = _pllc2_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1455,7 +1458,7 @@ static struct tegra_clk_pll_params pll_c3_params = { ...@@ -1455,7 +1458,7 @@ static struct tegra_clk_pll_params pll_c3_params = {
.ext_misc_reg[2] = PLLC3_MISC2, .ext_misc_reg[2] = PLLC3_MISC2,
.ext_misc_reg[3] = PLLC3_MISC3, .ext_misc_reg[3] = PLLC3_MISC3,
.freq_table = pll_cx_freq_table, .freq_table = pll_cx_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.set_defaults = _pllc3_set_defaults, .set_defaults = _pllc3_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1505,7 +1508,6 @@ static struct tegra_clk_pll_params pll_c4_vco_params = { ...@@ -1505,7 +1508,6 @@ static struct tegra_clk_pll_params pll_c4_vco_params = {
.base_reg = PLLC4_BASE, .base_reg = PLLC4_BASE,
.misc_reg = PLLC4_MISC0, .misc_reg = PLLC4_MISC0,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLSS_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.max_p = PLL_QLIN_PDIV_MAX, .max_p = PLL_QLIN_PDIV_MAX,
.ext_misc_reg[0] = PLLC4_MISC0, .ext_misc_reg[0] = PLLC4_MISC0,
...@@ -1517,8 +1519,7 @@ static struct tegra_clk_pll_params pll_c4_vco_params = { ...@@ -1517,8 +1519,7 @@ static struct tegra_clk_pll_params pll_c4_vco_params = {
.div_nmp = &pllss_nmp, .div_nmp = &pllss_nmp,
.freq_table = pll_c4_vco_freq_table, .freq_table = pll_c4_vco_freq_table,
.set_defaults = tegra210_pllc4_set_defaults, .set_defaults = tegra210_pllc4_set_defaults,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE | .flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_VCO_OUT,
TEGRA_PLL_VCO_OUT,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1559,15 +1560,15 @@ static struct tegra_clk_pll_params pll_m_params = { ...@@ -1559,15 +1560,15 @@ static struct tegra_clk_pll_params pll_m_params = {
.vco_min = 800000000, .vco_min = 800000000,
.vco_max = 1866000000, .vco_max = 1866000000,
.base_reg = PLLM_BASE, .base_reg = PLLM_BASE,
.misc_reg = PLLM_MISC1, .misc_reg = PLLM_MISC2,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLM_MISC_LOCK_ENABLE, .lock_enable_bit_idx = PLLM_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.iddq_reg = PLLM_MISC0, .iddq_reg = PLLM_MISC2,
.iddq_bit_idx = PLLM_IDDQ_BIT, .iddq_bit_idx = PLLM_IDDQ_BIT,
.max_p = PLL_QLIN_PDIV_MAX, .max_p = PLL_QLIN_PDIV_MAX,
.ext_misc_reg[0] = PLLM_MISC0, .ext_misc_reg[0] = PLLM_MISC2,
.ext_misc_reg[0] = PLLM_MISC1, .ext_misc_reg[1] = PLLM_MISC1,
.round_p_to_pdiv = pll_qlin_p_to_pdiv, .round_p_to_pdiv = pll_qlin_p_to_pdiv,
.pdiv_tohw = pll_qlin_pdiv_to_hw, .pdiv_tohw = pll_qlin_pdiv_to_hw,
.div_nmp = &pllm_nmp, .div_nmp = &pllm_nmp,
...@@ -1586,19 +1587,18 @@ static struct tegra_clk_pll_params pll_mb_params = { ...@@ -1586,19 +1587,18 @@ static struct tegra_clk_pll_params pll_mb_params = {
.vco_min = 800000000, .vco_min = 800000000,
.vco_max = 1866000000, .vco_max = 1866000000,
.base_reg = PLLMB_BASE, .base_reg = PLLMB_BASE,
.misc_reg = PLLMB_MISC0, .misc_reg = PLLMB_MISC1,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLMB_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.iddq_reg = PLLMB_MISC0, .iddq_reg = PLLMB_MISC1,
.iddq_bit_idx = PLLMB_IDDQ_BIT, .iddq_bit_idx = PLLMB_IDDQ_BIT,
.max_p = PLL_QLIN_PDIV_MAX, .max_p = PLL_QLIN_PDIV_MAX,
.ext_misc_reg[0] = PLLMB_MISC0, .ext_misc_reg[0] = PLLMB_MISC1,
.round_p_to_pdiv = pll_qlin_p_to_pdiv, .round_p_to_pdiv = pll_qlin_p_to_pdiv,
.pdiv_tohw = pll_qlin_pdiv_to_hw, .pdiv_tohw = pll_qlin_pdiv_to_hw,
.div_nmp = &pllm_nmp, .div_nmp = &pllm_nmp,
.freq_table = pll_m_freq_table, .freq_table = pll_m_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.set_defaults = tegra210_pllmb_set_defaults, .set_defaults = tegra210_pllmb_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1671,7 +1671,6 @@ static struct tegra_clk_pll_params pll_re_vco_params = { ...@@ -1671,7 +1671,6 @@ static struct tegra_clk_pll_params pll_re_vco_params = {
.base_reg = PLLRE_BASE, .base_reg = PLLRE_BASE,
.misc_reg = PLLRE_MISC0, .misc_reg = PLLRE_MISC0,
.lock_mask = PLLRE_MISC_LOCK, .lock_mask = PLLRE_MISC_LOCK,
.lock_enable_bit_idx = PLLRE_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.max_p = PLL_QLIN_PDIV_MAX, .max_p = PLL_QLIN_PDIV_MAX,
.ext_misc_reg[0] = PLLRE_MISC0, .ext_misc_reg[0] = PLLRE_MISC0,
...@@ -1681,8 +1680,7 @@ static struct tegra_clk_pll_params pll_re_vco_params = { ...@@ -1681,8 +1680,7 @@ static struct tegra_clk_pll_params pll_re_vco_params = {
.pdiv_tohw = pll_qlin_pdiv_to_hw, .pdiv_tohw = pll_qlin_pdiv_to_hw,
.div_nmp = &pllre_nmp, .div_nmp = &pllre_nmp,
.freq_table = pll_re_vco_freq_table, .freq_table = pll_re_vco_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_LOCK_MISC | .flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_LOCK_MISC | TEGRA_PLL_VCO_OUT,
TEGRA_PLL_HAS_LOCK_ENABLE | TEGRA_PLL_VCO_OUT,
.set_defaults = tegra210_pllre_set_defaults, .set_defaults = tegra210_pllre_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1712,7 +1710,6 @@ static struct tegra_clk_pll_params pll_p_params = { ...@@ -1712,7 +1710,6 @@ static struct tegra_clk_pll_params pll_p_params = {
.base_reg = PLLP_BASE, .base_reg = PLLP_BASE,
.misc_reg = PLLP_MISC0, .misc_reg = PLLP_MISC0,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLP_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.iddq_reg = PLLP_MISC0, .iddq_reg = PLLP_MISC0,
.iddq_bit_idx = PLLXP_IDDQ_BIT, .iddq_bit_idx = PLLXP_IDDQ_BIT,
...@@ -1721,8 +1718,7 @@ static struct tegra_clk_pll_params pll_p_params = { ...@@ -1721,8 +1718,7 @@ static struct tegra_clk_pll_params pll_p_params = {
.div_nmp = &pllp_nmp, .div_nmp = &pllp_nmp,
.freq_table = pll_p_freq_table, .freq_table = pll_p_freq_table,
.fixed_rate = 408000000, .fixed_rate = 408000000,
.flags = TEGRA_PLL_FIXED | TEGRA_PLL_USE_LOCK | .flags = TEGRA_PLL_FIXED | TEGRA_PLL_USE_LOCK | TEGRA_PLL_VCO_OUT,
TEGRA_PLL_HAS_LOCK_ENABLE | TEGRA_PLL_VCO_OUT,
.set_defaults = tegra210_pllp_set_defaults, .set_defaults = tegra210_pllp_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1750,7 +1746,7 @@ static struct tegra_clk_pll_params pll_a1_params = { ...@@ -1750,7 +1746,7 @@ static struct tegra_clk_pll_params pll_a1_params = {
.ext_misc_reg[2] = PLLA1_MISC2, .ext_misc_reg[2] = PLLA1_MISC2,
.ext_misc_reg[3] = PLLA1_MISC3, .ext_misc_reg[3] = PLLA1_MISC3,
.freq_table = pll_cx_freq_table, .freq_table = pll_cx_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.set_defaults = _plla1_set_defaults, .set_defaults = _plla1_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -1787,7 +1783,6 @@ static struct tegra_clk_pll_params pll_a_params = { ...@@ -1787,7 +1783,6 @@ static struct tegra_clk_pll_params pll_a_params = {
.base_reg = PLLA_BASE, .base_reg = PLLA_BASE,
.misc_reg = PLLA_MISC0, .misc_reg = PLLA_MISC0,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLA_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.round_p_to_pdiv = pll_qlin_p_to_pdiv, .round_p_to_pdiv = pll_qlin_p_to_pdiv,
.pdiv_tohw = pll_qlin_pdiv_to_hw, .pdiv_tohw = pll_qlin_pdiv_to_hw,
...@@ -1802,8 +1797,7 @@ static struct tegra_clk_pll_params pll_a_params = { ...@@ -1802,8 +1797,7 @@ static struct tegra_clk_pll_params pll_a_params = {
.ext_misc_reg[1] = PLLA_MISC1, .ext_misc_reg[1] = PLLA_MISC1,
.ext_misc_reg[2] = PLLA_MISC2, .ext_misc_reg[2] = PLLA_MISC2,
.freq_table = pll_a_freq_table, .freq_table = pll_a_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_MDIV_NEW | .flags = TEGRA_PLL_USE_LOCK | TEGRA_MDIV_NEW,
TEGRA_PLL_HAS_LOCK_ENABLE,
.set_defaults = tegra210_plla_set_defaults, .set_defaults = tegra210_plla_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
.set_gain = tegra210_clk_pll_set_gain, .set_gain = tegra210_clk_pll_set_gain,
...@@ -1836,7 +1830,6 @@ static struct tegra_clk_pll_params pll_d_params = { ...@@ -1836,7 +1830,6 @@ static struct tegra_clk_pll_params pll_d_params = {
.base_reg = PLLD_BASE, .base_reg = PLLD_BASE,
.misc_reg = PLLD_MISC0, .misc_reg = PLLD_MISC0,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLD_MISC_LOCK_ENABLE,
.lock_delay = 1000, .lock_delay = 1000,
.iddq_reg = PLLD_MISC0, .iddq_reg = PLLD_MISC0,
.iddq_bit_idx = PLLD_IDDQ_BIT, .iddq_bit_idx = PLLD_IDDQ_BIT,
...@@ -1850,7 +1843,7 @@ static struct tegra_clk_pll_params pll_d_params = { ...@@ -1850,7 +1843,7 @@ static struct tegra_clk_pll_params pll_d_params = {
.ext_misc_reg[0] = PLLD_MISC0, .ext_misc_reg[0] = PLLD_MISC0,
.ext_misc_reg[1] = PLLD_MISC1, .ext_misc_reg[1] = PLLD_MISC1,
.freq_table = pll_d_freq_table, .freq_table = pll_d_freq_table,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.mdiv_default = 1, .mdiv_default = 1,
.set_defaults = tegra210_plld_set_defaults, .set_defaults = tegra210_plld_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
...@@ -1876,7 +1869,6 @@ static struct tegra_clk_pll_params pll_d2_params = { ...@@ -1876,7 +1869,6 @@ static struct tegra_clk_pll_params pll_d2_params = {
.base_reg = PLLD2_BASE, .base_reg = PLLD2_BASE,
.misc_reg = PLLD2_MISC0, .misc_reg = PLLD2_MISC0,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLSS_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.iddq_reg = PLLD2_BASE, .iddq_reg = PLLD2_BASE,
.iddq_bit_idx = PLLSS_IDDQ_BIT, .iddq_bit_idx = PLLSS_IDDQ_BIT,
...@@ -1897,7 +1889,7 @@ static struct tegra_clk_pll_params pll_d2_params = { ...@@ -1897,7 +1889,7 @@ static struct tegra_clk_pll_params pll_d2_params = {
.mdiv_default = 1, .mdiv_default = 1,
.freq_table = tegra210_pll_d2_freq_table, .freq_table = tegra210_pll_d2_freq_table,
.set_defaults = tegra210_plld2_set_defaults, .set_defaults = tegra210_plld2_set_defaults,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
.set_gain = tegra210_clk_pll_set_gain, .set_gain = tegra210_clk_pll_set_gain,
.adjust_vco = tegra210_clk_adjust_vco_min, .adjust_vco = tegra210_clk_adjust_vco_min,
...@@ -1920,7 +1912,6 @@ static struct tegra_clk_pll_params pll_dp_params = { ...@@ -1920,7 +1912,6 @@ static struct tegra_clk_pll_params pll_dp_params = {
.base_reg = PLLDP_BASE, .base_reg = PLLDP_BASE,
.misc_reg = PLLDP_MISC, .misc_reg = PLLDP_MISC,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLSS_MISC_LOCK_ENABLE,
.lock_delay = 300, .lock_delay = 300,
.iddq_reg = PLLDP_BASE, .iddq_reg = PLLDP_BASE,
.iddq_bit_idx = PLLSS_IDDQ_BIT, .iddq_bit_idx = PLLSS_IDDQ_BIT,
...@@ -1941,7 +1932,7 @@ static struct tegra_clk_pll_params pll_dp_params = { ...@@ -1941,7 +1932,7 @@ static struct tegra_clk_pll_params pll_dp_params = {
.mdiv_default = 1, .mdiv_default = 1,
.freq_table = pll_dp_freq_table, .freq_table = pll_dp_freq_table,
.set_defaults = tegra210_plldp_set_defaults, .set_defaults = tegra210_plldp_set_defaults,
.flags = TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE, .flags = TEGRA_PLL_USE_LOCK,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
.set_gain = tegra210_clk_pll_set_gain, .set_gain = tegra210_clk_pll_set_gain,
.adjust_vco = tegra210_clk_adjust_vco_min, .adjust_vco = tegra210_clk_adjust_vco_min,
...@@ -1973,7 +1964,6 @@ static struct tegra_clk_pll_params pll_u_vco_params = { ...@@ -1973,7 +1964,6 @@ static struct tegra_clk_pll_params pll_u_vco_params = {
.base_reg = PLLU_BASE, .base_reg = PLLU_BASE,
.misc_reg = PLLU_MISC0, .misc_reg = PLLU_MISC0,
.lock_mask = PLL_BASE_LOCK, .lock_mask = PLL_BASE_LOCK,
.lock_enable_bit_idx = PLLU_MISC_LOCK_ENABLE,
.lock_delay = 1000, .lock_delay = 1000,
.iddq_reg = PLLU_MISC0, .iddq_reg = PLLU_MISC0,
.iddq_bit_idx = PLLU_IDDQ_BIT, .iddq_bit_idx = PLLU_IDDQ_BIT,
...@@ -1983,8 +1973,7 @@ static struct tegra_clk_pll_params pll_u_vco_params = { ...@@ -1983,8 +1973,7 @@ static struct tegra_clk_pll_params pll_u_vco_params = {
.pdiv_tohw = pll_qlin_pdiv_to_hw, .pdiv_tohw = pll_qlin_pdiv_to_hw,
.div_nmp = &pllu_nmp, .div_nmp = &pllu_nmp,
.freq_table = pll_u_freq_table, .freq_table = pll_u_freq_table,
.flags = TEGRA_PLLU | TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE | .flags = TEGRA_PLLU | TEGRA_PLL_USE_LOCK | TEGRA_PLL_VCO_OUT,
TEGRA_PLL_VCO_OUT,
.set_defaults = tegra210_pllu_set_defaults, .set_defaults = tegra210_pllu_set_defaults,
.calc_rate = tegra210_pll_fixed_mdiv_cfg, .calc_rate = tegra210_pll_fixed_mdiv_cfg,
}; };
...@@ -2218,6 +2207,7 @@ static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = { ...@@ -2218,6 +2207,7 @@ static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = {
[tegra_clk_pll_c4_out1] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT1, .present = true }, [tegra_clk_pll_c4_out1] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT1, .present = true },
[tegra_clk_pll_c4_out2] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT2, .present = true }, [tegra_clk_pll_c4_out2] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT2, .present = true },
[tegra_clk_pll_c4_out3] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT3, .present = true }, [tegra_clk_pll_c4_out3] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT3, .present = true },
[tegra_clk_apb2ape] = { .dt_id = TEGRA210_CLK_APB2APE, .present = true },
}; };
static struct tegra_devclk devclks[] __initdata = { static struct tegra_devclk devclks[] __initdata = {
...@@ -2519,7 +2509,7 @@ static void __init tegra210_pll_init(void __iomem *clk_base, ...@@ -2519,7 +2509,7 @@ static void __init tegra210_pll_init(void __iomem *clk_base,
/* PLLU_VCO */ /* PLLU_VCO */
val = readl(clk_base + pll_u_vco_params.base_reg); val = readl(clk_base + pll_u_vco_params.base_reg);
val &= ~BIT(24); /* disable PLLU_OVERRIDE */ val &= ~PLLU_BASE_OVERRIDE; /* disable PLLU_OVERRIDE */
writel(val, clk_base + pll_u_vco_params.base_reg); writel(val, clk_base + pll_u_vco_params.base_reg);
clk = tegra_clk_register_pllre("pll_u_vco", "pll_ref", clk_base, pmc, clk = tegra_clk_register_pllre("pll_u_vco", "pll_ref", clk_base, pmc,
...@@ -2738,8 +2728,6 @@ static struct tegra_clk_init_table init_table[] __initdata = { ...@@ -2738,8 +2728,6 @@ static struct tegra_clk_init_table init_table[] __initdata = {
{ TEGRA210_CLK_DFLL_REF, TEGRA210_CLK_PLL_P, 51000000, 1 }, { TEGRA210_CLK_DFLL_REF, TEGRA210_CLK_PLL_P, 51000000, 1 },
{ TEGRA210_CLK_SBC4, TEGRA210_CLK_PLL_P, 12000000, 1 }, { TEGRA210_CLK_SBC4, TEGRA210_CLK_PLL_P, 12000000, 1 },
{ TEGRA210_CLK_PLL_RE_VCO, TEGRA210_CLK_CLK_MAX, 672000000, 1 }, { TEGRA210_CLK_PLL_RE_VCO, TEGRA210_CLK_CLK_MAX, 672000000, 1 },
{ TEGRA210_CLK_PLL_U_OUT1, TEGRA210_CLK_CLK_MAX, 48000000, 1 },
{ TEGRA210_CLK_PLL_U_OUT2, TEGRA210_CLK_CLK_MAX, 60000000, 1 },
{ TEGRA210_CLK_XUSB_GATE, TEGRA210_CLK_CLK_MAX, 0, 1 }, { TEGRA210_CLK_XUSB_GATE, TEGRA210_CLK_CLK_MAX, 0, 1 },
{ TEGRA210_CLK_XUSB_SS_SRC, TEGRA210_CLK_PLL_U_480M, 120000000, 0 }, { TEGRA210_CLK_XUSB_SS_SRC, TEGRA210_CLK_PLL_U_480M, 120000000, 0 },
{ TEGRA210_CLK_XUSB_FS_SRC, TEGRA210_CLK_PLL_U_48M, 48000000, 0 }, { TEGRA210_CLK_XUSB_FS_SRC, TEGRA210_CLK_PLL_U_48M, 48000000, 0 },
......
...@@ -126,7 +126,7 @@ ...@@ -126,7 +126,7 @@
/* 104 */ /* 104 */
/* 105 */ /* 105 */
#define TEGRA210_CLK_D_AUDIO 106 #define TEGRA210_CLK_D_AUDIO 106
/* 107 ( affects abp -> ape) */ #define TEGRA210_CLK_APB2APE 107
/* 108 */ /* 108 */
/* 109 */ /* 109 */
/* 110 */ /* 110 */
......
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