|
|
@@ -155,27 +155,6 @@
|
|
|
#define PMC_PLLM_WB0_OVERRIDE 0x1dc
|
|
|
#define PMC_PLLM_WB0_OVERRIDE_2 0x2b0
|
|
|
|
|
|
-#define UTMIP_PLL_CFG2 0x488
|
|
|
-#define UTMIP_PLL_CFG2_STABLE_COUNT(x) (((x) & 0xfff) << 6)
|
|
|
-#define UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(x) (((x) & 0x3f) << 18)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN BIT(0)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERUP BIT(1)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN BIT(2)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERUP BIT(3)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN BIT(4)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERUP BIT(5)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERDOWN BIT(24)
|
|
|
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERUP BIT(25)
|
|
|
-
|
|
|
-#define UTMIP_PLL_CFG1 0x484
|
|
|
-#define UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(x) (((x) & 0x1f) << 27)
|
|
|
-#define UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(x) (((x) & 0xfff) << 0)
|
|
|
-#define UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP BIT(17)
|
|
|
-#define UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN BIT(16)
|
|
|
-#define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP BIT(15)
|
|
|
-#define UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN BIT(14)
|
|
|
-#define UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN BIT(12)
|
|
|
-
|
|
|
#define SATA_PLL_CFG0 0x490
|
|
|
#define SATA_PLL_CFG0_PADPLL_RESET_SWCTL BIT(0)
|
|
|
#define SATA_PLL_CFG0_PADPLL_USE_LOCKDET BIT(2)
|
|
|
@@ -1366,9 +1345,9 @@ static u32 pll_expo_p_to_pdiv(u32 p, u32 *pdiv)
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_x_freq_table[] = {
|
|
|
/* 1 GHz */
|
|
|
- { 12000000, 1000000000, 166, 1, 1, 0 }, /* actual: 996.0 MHz */
|
|
|
- { 13000000, 1000000000, 153, 1, 1, 0 }, /* actual: 994.0 MHz */
|
|
|
- { 38400000, 1000000000, 156, 3, 1, 0 }, /* actual: 998.4 MHz */
|
|
|
+ { 12000000, 1000000000, 166, 1, 2, 0 }, /* actual: 996.0 MHz */
|
|
|
+ { 13000000, 1000000000, 153, 1, 2, 0 }, /* actual: 994.0 MHz */
|
|
|
+ { 38400000, 1000000000, 156, 3, 2, 0 }, /* actual: 998.4 MHz */
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1417,9 +1396,9 @@ static struct div_nmp pllc_nmp = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_cx_freq_table[] = {
|
|
|
- { 12000000, 510000000, 85, 1, 1, 0 },
|
|
|
- { 13000000, 510000000, 78, 1, 1, 0 }, /* actual: 507.0 MHz */
|
|
|
- { 38400000, 510000000, 79, 3, 1, 0 }, /* actual: 505.6 MHz */
|
|
|
+ { 12000000, 510000000, 85, 1, 2, 0 },
|
|
|
+ { 13000000, 510000000, 78, 1, 2, 0 }, /* actual: 507.0 MHz */
|
|
|
+ { 38400000, 510000000, 79, 3, 2, 0 }, /* actual: 505.6 MHz */
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1532,9 +1511,9 @@ static struct div_nmp pllss_nmp = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_c4_vco_freq_table[] = {
|
|
|
- { 12000000, 600000000, 50, 1, 0, 0 },
|
|
|
- { 13000000, 600000000, 46, 1, 0, 0 }, /* actual: 598.0 MHz */
|
|
|
- { 38400000, 600000000, 62, 4, 0, 0 }, /* actual: 595.2 MHz */
|
|
|
+ { 12000000, 600000000, 50, 1, 1, 0 },
|
|
|
+ { 13000000, 600000000, 46, 1, 1, 0 }, /* actual: 598.0 MHz */
|
|
|
+ { 38400000, 600000000, 62, 4, 1, 0 }, /* actual: 595.2 MHz */
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1583,19 +1562,19 @@ static struct tegra_clk_pll_params pll_c4_vco_params = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_m_freq_table[] = {
|
|
|
- { 12000000, 800000000, 66, 1, 0, 0 }, /* actual: 792.0 MHz */
|
|
|
- { 13000000, 800000000, 61, 1, 0, 0 }, /* actual: 793.0 MHz */
|
|
|
- { 38400000, 297600000, 93, 4, 2, 0 },
|
|
|
- { 38400000, 400000000, 125, 4, 2, 0 },
|
|
|
- { 38400000, 532800000, 111, 4, 1, 0 },
|
|
|
- { 38400000, 665600000, 104, 3, 1, 0 },
|
|
|
- { 38400000, 800000000, 125, 3, 1, 0 },
|
|
|
- { 38400000, 931200000, 97, 4, 0, 0 },
|
|
|
- { 38400000, 1065600000, 111, 4, 0, 0 },
|
|
|
- { 38400000, 1200000000, 125, 4, 0, 0 },
|
|
|
- { 38400000, 1331200000, 104, 3, 0, 0 },
|
|
|
- { 38400000, 1459200000, 76, 2, 0, 0 },
|
|
|
- { 38400000, 1600000000, 125, 3, 0, 0 },
|
|
|
+ { 12000000, 800000000, 66, 1, 1, 0 }, /* actual: 792.0 MHz */
|
|
|
+ { 13000000, 800000000, 61, 1, 1, 0 }, /* actual: 793.0 MHz */
|
|
|
+ { 38400000, 297600000, 93, 4, 3, 0 },
|
|
|
+ { 38400000, 400000000, 125, 4, 3, 0 },
|
|
|
+ { 38400000, 532800000, 111, 4, 2, 0 },
|
|
|
+ { 38400000, 665600000, 104, 3, 2, 0 },
|
|
|
+ { 38400000, 800000000, 125, 3, 2, 0 },
|
|
|
+ { 38400000, 931200000, 97, 4, 1, 0 },
|
|
|
+ { 38400000, 1065600000, 111, 4, 1, 0 },
|
|
|
+ { 38400000, 1200000000, 125, 4, 1, 0 },
|
|
|
+ { 38400000, 1331200000, 104, 3, 1, 0 },
|
|
|
+ { 38400000, 1459200000, 76, 2, 1, 0 },
|
|
|
+ { 38400000, 1600000000, 125, 3, 1, 0 },
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1705,9 +1684,9 @@ static struct tegra_clk_pll_params pll_e_params = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_re_vco_freq_table[] = {
|
|
|
- { 12000000, 672000000, 56, 1, 0, 0 },
|
|
|
- { 13000000, 672000000, 51, 1, 0, 0 }, /* actual: 663.0 MHz */
|
|
|
- { 38400000, 672000000, 70, 4, 0, 0 },
|
|
|
+ { 12000000, 672000000, 56, 1, 1, 0 },
|
|
|
+ { 13000000, 672000000, 51, 1, 1, 0 }, /* actual: 663.0 MHz */
|
|
|
+ { 38400000, 672000000, 70, 4, 1, 0 },
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1754,8 +1733,8 @@ static struct div_nmp pllp_nmp = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_p_freq_table[] = {
|
|
|
- { 12000000, 408000000, 34, 1, 0, 0 },
|
|
|
- { 38400000, 408000000, 85, 8, 0, 0 }, /* cf = 4.8MHz, allowed exception */
|
|
|
+ { 12000000, 408000000, 34, 1, 1, 0 },
|
|
|
+ { 38400000, 408000000, 85, 8, 1, 0 }, /* cf = 4.8MHz, allowed exception */
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1820,14 +1799,14 @@ static struct div_nmp plla_nmp = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_a_freq_table[] = {
|
|
|
- { 12000000, 282240000, 47, 1, 1, 1, 0xf148 }, /* actual: 282240234 */
|
|
|
- { 12000000, 368640000, 61, 1, 1, 1, 0xfe15 }, /* actual: 368640381 */
|
|
|
- { 12000000, 240000000, 60, 1, 2, 1, 0 },
|
|
|
- { 13000000, 282240000, 43, 1, 1, 1, 0xfd7d }, /* actual: 282239807 */
|
|
|
- { 13000000, 368640000, 56, 1, 1, 1, 0x06d8 }, /* actual: 368640137 */
|
|
|
- { 13000000, 240000000, 55, 1, 2, 1, 0 }, /* actual: 238.3 MHz */
|
|
|
- { 38400000, 282240000, 44, 3, 1, 1, 0xf333 }, /* actual: 282239844 */
|
|
|
- { 38400000, 368640000, 57, 3, 1, 1, 0x0333 }, /* actual: 368639844 */
|
|
|
+ { 12000000, 282240000, 47, 1, 2, 1, 0xf148 }, /* actual: 282240234 */
|
|
|
+ { 12000000, 368640000, 61, 1, 2, 1, 0xfe15 }, /* actual: 368640381 */
|
|
|
+ { 12000000, 240000000, 60, 1, 3, 1, 0 },
|
|
|
+ { 13000000, 282240000, 43, 1, 2, 1, 0xfd7d }, /* actual: 282239807 */
|
|
|
+ { 13000000, 368640000, 56, 1, 2, 1, 0x06d8 }, /* actual: 368640137 */
|
|
|
+ { 13000000, 240000000, 55, 1, 3, 1, 0 }, /* actual: 238.3 MHz */
|
|
|
+ { 38400000, 282240000, 44, 3, 2, 1, 0xf333 }, /* actual: 282239844 */
|
|
|
+ { 38400000, 368640000, 57, 3, 2, 1, 0x0333 }, /* actual: 368639844 */
|
|
|
{ 38400000, 240000000, 75, 3, 3, 1, 0 },
|
|
|
{ 0, 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
@@ -1873,9 +1852,9 @@ static struct div_nmp plld_nmp = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_d_freq_table[] = {
|
|
|
- { 12000000, 594000000, 99, 1, 1, 0, 0 },
|
|
|
- { 13000000, 594000000, 91, 1, 1, 0, 0xfc4f }, /* actual: 594000183 */
|
|
|
- { 38400000, 594000000, 30, 1, 1, 0, 0x0e00 },
|
|
|
+ { 12000000, 594000000, 99, 1, 2, 0, 0 },
|
|
|
+ { 13000000, 594000000, 91, 1, 2, 0, 0xfc4f }, /* actual: 594000183 */
|
|
|
+ { 38400000, 594000000, 30, 1, 2, 0, 0x0e00 },
|
|
|
{ 0, 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1911,9 +1890,9 @@ static struct tegra_clk_pll_params pll_d_params = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table tegra210_pll_d2_freq_table[] = {
|
|
|
- { 12000000, 594000000, 99, 1, 1, 0, 0xf000 },
|
|
|
- { 13000000, 594000000, 91, 1, 1, 0, 0xfc4f }, /* actual: 594000183 */
|
|
|
- { 38400000, 594000000, 30, 1, 1, 0, 0x0e00 },
|
|
|
+ { 12000000, 594000000, 99, 1, 2, 0, 0xf000 },
|
|
|
+ { 13000000, 594000000, 91, 1, 2, 0, 0xfc4f }, /* actual: 594000183 */
|
|
|
+ { 38400000, 594000000, 30, 1, 2, 0, 0x0e00 },
|
|
|
{ 0, 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -1935,8 +1914,9 @@ static struct tegra_clk_pll_params pll_d2_params = {
|
|
|
.sdm_din_mask = PLLA_SDM_DIN_MASK,
|
|
|
.sdm_ctrl_reg = PLLD2_MISC1,
|
|
|
.sdm_ctrl_en_mask = PLLD2_SDM_EN_MASK,
|
|
|
- .ssc_ctrl_reg = PLLD2_MISC1,
|
|
|
- .ssc_ctrl_en_mask = PLLD2_SSC_EN_MASK,
|
|
|
+ /* disable spread-spectrum for pll_d2 */
|
|
|
+ .ssc_ctrl_reg = 0,
|
|
|
+ .ssc_ctrl_en_mask = 0,
|
|
|
.round_p_to_pdiv = pll_qlin_p_to_pdiv,
|
|
|
.pdiv_tohw = pll_qlin_pdiv_to_hw,
|
|
|
.div_nmp = &pllss_nmp,
|
|
|
@@ -1955,9 +1935,9 @@ static struct tegra_clk_pll_params pll_d2_params = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_dp_freq_table[] = {
|
|
|
- { 12000000, 270000000, 90, 1, 3, 0, 0xf000 },
|
|
|
- { 13000000, 270000000, 83, 1, 3, 0, 0xf000 }, /* actual: 269.8 MHz */
|
|
|
- { 38400000, 270000000, 28, 1, 3, 0, 0xf400 },
|
|
|
+ { 12000000, 270000000, 90, 1, 4, 0, 0xf000 },
|
|
|
+ { 13000000, 270000000, 83, 1, 4, 0, 0xf000 }, /* actual: 269.8 MHz */
|
|
|
+ { 38400000, 270000000, 28, 1, 4, 0, 0xf400 },
|
|
|
{ 0, 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -2007,9 +1987,9 @@ static struct div_nmp pllu_nmp = {
|
|
|
};
|
|
|
|
|
|
static struct tegra_clk_pll_freq_table pll_u_freq_table[] = {
|
|
|
- { 12000000, 480000000, 40, 1, 0, 0 },
|
|
|
- { 13000000, 480000000, 36, 1, 0, 0 }, /* actual: 468.0 MHz */
|
|
|
- { 38400000, 480000000, 25, 2, 0, 0 },
|
|
|
+ { 12000000, 480000000, 40, 1, 1, 0 },
|
|
|
+ { 13000000, 480000000, 36, 1, 1, 0 }, /* actual: 468.0 MHz */
|
|
|
+ { 38400000, 480000000, 25, 2, 1, 0 },
|
|
|
{ 0, 0, 0, 0, 0, 0 },
|
|
|
};
|
|
|
|
|
|
@@ -2037,47 +2017,6 @@ static struct tegra_clk_pll_params pll_u_vco_params = {
|
|
|
.calc_rate = tegra210_pll_fixed_mdiv_cfg,
|
|
|
};
|
|
|
|
|
|
-struct utmi_clk_param {
|
|
|
- /* Oscillator Frequency in KHz */
|
|
|
- u32 osc_frequency;
|
|
|
- /* UTMIP PLL Enable Delay Count */
|
|
|
- u8 enable_delay_count;
|
|
|
- /* UTMIP PLL Stable count */
|
|
|
- u16 stable_count;
|
|
|
- /* UTMIP PLL Active delay count */
|
|
|
- u8 active_delay_count;
|
|
|
- /* UTMIP PLL Xtal frequency count */
|
|
|
- u16 xtal_freq_count;
|
|
|
-};
|
|
|
-
|
|
|
-static const struct utmi_clk_param utmi_parameters[] = {
|
|
|
- {
|
|
|
- .osc_frequency = 38400000, .enable_delay_count = 0x0,
|
|
|
- .stable_count = 0x0, .active_delay_count = 0x6,
|
|
|
- .xtal_freq_count = 0x80
|
|
|
- }, {
|
|
|
- .osc_frequency = 13000000, .enable_delay_count = 0x02,
|
|
|
- .stable_count = 0x33, .active_delay_count = 0x05,
|
|
|
- .xtal_freq_count = 0x7f
|
|
|
- }, {
|
|
|
- .osc_frequency = 19200000, .enable_delay_count = 0x03,
|
|
|
- .stable_count = 0x4b, .active_delay_count = 0x06,
|
|
|
- .xtal_freq_count = 0xbb
|
|
|
- }, {
|
|
|
- .osc_frequency = 12000000, .enable_delay_count = 0x02,
|
|
|
- .stable_count = 0x2f, .active_delay_count = 0x08,
|
|
|
- .xtal_freq_count = 0x76
|
|
|
- }, {
|
|
|
- .osc_frequency = 26000000, .enable_delay_count = 0x04,
|
|
|
- .stable_count = 0x66, .active_delay_count = 0x09,
|
|
|
- .xtal_freq_count = 0xfe
|
|
|
- }, {
|
|
|
- .osc_frequency = 16800000, .enable_delay_count = 0x03,
|
|
|
- .stable_count = 0x41, .active_delay_count = 0x0a,
|
|
|
- .xtal_freq_count = 0xa4
|
|
|
- },
|
|
|
-};
|
|
|
-
|
|
|
static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = {
|
|
|
[tegra_clk_ispb] = { .dt_id = TEGRA210_CLK_ISPB, .present = true },
|
|
|
[tegra_clk_rtc] = { .dt_id = TEGRA210_CLK_RTC, .present = true },
|
|
|
@@ -2154,6 +2093,8 @@ static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = {
|
|
|
[tegra_clk_dpaux1] = { .dt_id = TEGRA210_CLK_DPAUX1, .present = true },
|
|
|
[tegra_clk_sor0] = { .dt_id = TEGRA210_CLK_SOR0, .present = true },
|
|
|
[tegra_clk_sor0_lvds] = { .dt_id = TEGRA210_CLK_SOR0_LVDS, .present = true },
|
|
|
+ [tegra_clk_sor1] = { .dt_id = TEGRA210_CLK_SOR1, .present = true },
|
|
|
+ [tegra_clk_sor1_src] = { .dt_id = TEGRA210_CLK_SOR1_SRC, .present = true },
|
|
|
[tegra_clk_gpu] = { .dt_id = TEGRA210_CLK_GPU, .present = true },
|
|
|
[tegra_clk_pll_g_ref] = { .dt_id = TEGRA210_CLK_PLL_G_REF, .present = true, },
|
|
|
[tegra_clk_uartb_8] = { .dt_id = TEGRA210_CLK_UARTB, .present = true },
|
|
|
@@ -2345,114 +2286,6 @@ static struct tegra_audio_clk_info tegra210_audio_plls[] = {
|
|
|
|
|
|
static struct clk **clks;
|
|
|
|
|
|
-static void tegra210_utmi_param_configure(void __iomem *clk_base)
|
|
|
-{
|
|
|
- u32 reg;
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = 0; i < ARRAY_SIZE(utmi_parameters); i++) {
|
|
|
- if (osc_freq == utmi_parameters[i].osc_frequency)
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- if (i >= ARRAY_SIZE(utmi_parameters)) {
|
|
|
- pr_err("%s: Unexpected oscillator freq %lu\n", __func__,
|
|
|
- osc_freq);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + PLLU_HW_PWRDN_CFG0);
|
|
|
- reg |= PLLU_HW_PWRDN_CFG0_IDDQ_PD_INCLUDE |
|
|
|
- PLLU_HW_PWRDN_CFG0_USE_SWITCH_DETECT |
|
|
|
- PLLU_HW_PWRDN_CFG0_USE_LOCKDET;
|
|
|
- reg &= ~(PLLU_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL |
|
|
|
- PLLU_HW_PWRDN_CFG0_CLK_SWITCH_SWCTL);
|
|
|
- writel_relaxed(reg, clk_base + PLLU_HW_PWRDN_CFG0);
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + PLLU_HW_PWRDN_CFG0);
|
|
|
- reg |= PLLU_HW_PWRDN_CFG0_SEQ_ENABLE;
|
|
|
- writel_relaxed(reg, clk_base + PLLU_HW_PWRDN_CFG0);
|
|
|
- udelay(1);
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + PLLU_BASE);
|
|
|
- reg &= ~PLLU_BASE_CLKENABLE_USB;
|
|
|
- writel_relaxed(reg, clk_base + PLLU_BASE);
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + UTMIPLL_HW_PWRDN_CFG0);
|
|
|
- reg &= ~UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
|
|
|
- writel_relaxed(reg, clk_base + UTMIPLL_HW_PWRDN_CFG0);
|
|
|
-
|
|
|
- udelay(10);
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + UTMIP_PLL_CFG2);
|
|
|
-
|
|
|
- /* Program UTMIP PLL stable and active counts */
|
|
|
- /* [FIXME] arclk_rst.h says WRONG! This should be 1ms -> 0x50 Check! */
|
|
|
- reg &= ~UTMIP_PLL_CFG2_STABLE_COUNT(~0);
|
|
|
- reg |= UTMIP_PLL_CFG2_STABLE_COUNT(utmi_parameters[i].stable_count);
|
|
|
-
|
|
|
- reg &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
|
|
|
-
|
|
|
- reg |= UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(utmi_parameters[i].
|
|
|
- active_delay_count);
|
|
|
- writel_relaxed(reg, clk_base + UTMIP_PLL_CFG2);
|
|
|
-
|
|
|
- /* Program UTMIP PLL delay and oscillator frequency counts */
|
|
|
- reg = readl_relaxed(clk_base + UTMIP_PLL_CFG1);
|
|
|
- reg &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
|
|
|
-
|
|
|
- reg |= UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(utmi_parameters[i].
|
|
|
- enable_delay_count);
|
|
|
-
|
|
|
- reg &= ~UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(~0);
|
|
|
- reg |= UTMIP_PLL_CFG1_XTAL_FREQ_COUNT(utmi_parameters[i].
|
|
|
- xtal_freq_count);
|
|
|
-
|
|
|
- reg |= UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN;
|
|
|
- writel_relaxed(reg, clk_base + UTMIP_PLL_CFG1);
|
|
|
-
|
|
|
- /* Remove power downs from UTMIP PLL control bits */
|
|
|
- reg = readl_relaxed(clk_base + UTMIP_PLL_CFG1);
|
|
|
- reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
|
|
|
- reg |= UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
|
|
|
- writel_relaxed(reg, clk_base + UTMIP_PLL_CFG1);
|
|
|
- udelay(1);
|
|
|
-
|
|
|
- /* Enable samplers for SNPS, XUSB_HOST, XUSB_DEV */
|
|
|
- reg = readl_relaxed(clk_base + UTMIP_PLL_CFG2);
|
|
|
- reg |= UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERUP;
|
|
|
- reg |= UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERUP;
|
|
|
- reg |= UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERUP;
|
|
|
- reg &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_A_POWERDOWN;
|
|
|
- reg &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_B_POWERDOWN;
|
|
|
- reg &= ~UTMIP_PLL_CFG2_FORCE_PD_SAMP_D_POWERDOWN;
|
|
|
- writel_relaxed(reg, clk_base + UTMIP_PLL_CFG2);
|
|
|
-
|
|
|
- /* Setup HW control of UTMIPLL */
|
|
|
- reg = readl_relaxed(clk_base + UTMIP_PLL_CFG1);
|
|
|
- reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
|
|
|
- reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
|
|
|
- writel_relaxed(reg, clk_base + UTMIP_PLL_CFG1);
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + UTMIPLL_HW_PWRDN_CFG0);
|
|
|
- reg |= UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET;
|
|
|
- reg &= ~UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL;
|
|
|
- writel_relaxed(reg, clk_base + UTMIPLL_HW_PWRDN_CFG0);
|
|
|
-
|
|
|
- udelay(1);
|
|
|
-
|
|
|
- reg = readl_relaxed(clk_base + XUSB_PLL_CFG0);
|
|
|
- reg &= ~XUSB_PLL_CFG0_UTMIPLL_LOCK_DLY;
|
|
|
- writel_relaxed(reg, clk_base + XUSB_PLL_CFG0);
|
|
|
-
|
|
|
- udelay(1);
|
|
|
-
|
|
|
- /* Enable HW control UTMIPLL */
|
|
|
- reg = readl_relaxed(clk_base + UTMIPLL_HW_PWRDN_CFG0);
|
|
|
- reg |= UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE;
|
|
|
- writel_relaxed(reg, clk_base + UTMIPLL_HW_PWRDN_CFG0);
|
|
|
-}
|
|
|
-
|
|
|
static __init void tegra210_periph_clk_init(void __iomem *clk_base,
|
|
|
void __iomem *pmc_base)
|
|
|
{
|
|
|
@@ -2463,18 +2296,18 @@ static __init void tegra210_periph_clk_init(void __iomem *clk_base,
|
|
|
1, 2);
|
|
|
clks[TEGRA210_CLK_XUSB_SS_DIV2] = clk;
|
|
|
|
|
|
- clk = tegra_clk_register_periph_fixed("dpaux", "pll_p", 0, clk_base,
|
|
|
+ clk = tegra_clk_register_periph_fixed("sor_safe", "pll_p", 0, clk_base,
|
|
|
+ 1, 17, 222);
|
|
|
+ clks[TEGRA210_CLK_SOR_SAFE] = clk;
|
|
|
+
|
|
|
+ clk = tegra_clk_register_periph_fixed("dpaux", "sor_safe", 0, clk_base,
|
|
|
1, 17, 181);
|
|
|
clks[TEGRA210_CLK_DPAUX] = clk;
|
|
|
|
|
|
- clk = tegra_clk_register_periph_fixed("dpaux1", "pll_p", 0, clk_base,
|
|
|
+ clk = tegra_clk_register_periph_fixed("dpaux1", "sor_safe", 0, clk_base,
|
|
|
1, 17, 207);
|
|
|
clks[TEGRA210_CLK_DPAUX1] = clk;
|
|
|
|
|
|
- clk = tegra_clk_register_periph_fixed("sor_safe", "pll_p", 0, clk_base,
|
|
|
- 1, 17, 222);
|
|
|
- clks[TEGRA210_CLK_SOR_SAFE] = clk;
|
|
|
-
|
|
|
/* pll_d_dsi_out */
|
|
|
clk = clk_register_gate(NULL, "pll_d_dsi_out", "pll_d_out0", 0,
|
|
|
clk_base + PLLD_MISC0, 21, 0, &pll_d_lock);
|
|
|
@@ -2520,7 +2353,6 @@ static __init void tegra210_periph_clk_init(void __iomem *clk_base,
|
|
|
static void __init tegra210_pll_init(void __iomem *clk_base,
|
|
|
void __iomem *pmc)
|
|
|
{
|
|
|
- u32 val;
|
|
|
struct clk *clk;
|
|
|
|
|
|
/* PLLC */
|
|
|
@@ -2580,12 +2412,9 @@ static void __init tegra210_pll_init(void __iomem *clk_base,
|
|
|
clks[TEGRA210_CLK_PLL_M_UD] = clk;
|
|
|
|
|
|
/* PLLU_VCO */
|
|
|
- val = readl(clk_base + pll_u_vco_params.base_reg);
|
|
|
- val &= ~PLLU_BASE_OVERRIDE; /* disable PLLU_OVERRIDE */
|
|
|
- writel(val, clk_base + pll_u_vco_params.base_reg);
|
|
|
-
|
|
|
- clk = tegra_clk_register_pllre("pll_u_vco", "pll_ref", clk_base, pmc,
|
|
|
- 0, &pll_u_vco_params, &pll_u_lock, pll_ref_freq);
|
|
|
+ clk = tegra_clk_register_pllu_tegra210("pll_u_vco", "pll_ref",
|
|
|
+ clk_base, 0, &pll_u_vco_params,
|
|
|
+ &pll_u_lock);
|
|
|
clk_register_clkdev(clk, "pll_u_vco", NULL);
|
|
|
clks[TEGRA210_CLK_PLL_U] = clk;
|
|
|
|
|
|
@@ -2618,8 +2447,6 @@ static void __init tegra210_pll_init(void __iomem *clk_base,
|
|
|
clk_register_clkdev(clk, "pll_u_out2", NULL);
|
|
|
clks[TEGRA210_CLK_PLL_U_OUT2] = clk;
|
|
|
|
|
|
- tegra210_utmi_param_configure(clk_base);
|
|
|
-
|
|
|
/* PLLU_480M */
|
|
|
clk = clk_register_gate(NULL, "pll_u_480M", "pll_u_vco",
|
|
|
CLK_SET_RATE_PARENT, clk_base + PLLU_BASE,
|