Commit 77938a9b authored by Arnd Bergmann's avatar Arnd Bergmann

Merge Tegra clk changes into next/dt64

These are a prerequisite to some of the tegra DT changes,
and got merged as part of tegra-for-4.8-clk into clk-next.

* commit 'e452b818':
  clk: tegra: Enable sor1 and sor1_src on Tegra210
  clk: tegra: Squash sor1 safe/brick/src into a single mux
  clk: tegra: Disable spread spectrum on pll_d2
  clk: tegra: Fixup post dividers on Tegra210
parents 17ef34e9 e452b818
...@@ -238,7 +238,6 @@ enum clk_id { ...@@ -238,7 +238,6 @@ enum clk_id {
tegra_clk_sor0, tegra_clk_sor0,
tegra_clk_sor0_lvds, tegra_clk_sor0_lvds,
tegra_clk_sor1, tegra_clk_sor1,
tegra_clk_sor1_brick,
tegra_clk_sor1_src, tegra_clk_sor1_src,
tegra_clk_spdif, tegra_clk_spdif,
tegra_clk_spdif_2x, tegra_clk_spdif_2x,
......
...@@ -594,15 +594,17 @@ static u32 mux_pllp_plld_plld2_clkm_idx[] = { ...@@ -594,15 +594,17 @@ static u32 mux_pllp_plld_plld2_clkm_idx[] = {
[0] = 0, [1] = 2, [2] = 5, [3] = 6 [0] = 0, [1] = 2, [2] = 5, [3] = 6
}; };
static const char *mux_plldp_sor1_src[] = { static const char *mux_sor_safe_sor1_brick_sor1_src[] = {
"pll_dp", "clk_sor1_src" /*
}; * Bit 0 of the mux selects sor1_brick, irrespective of bit 1, so the
#define mux_plldp_sor1_src_idx NULL * sor1_brick parent appears twice in the list below. This is merely
* to support clk_get_parent() if firmware happened to set these bits
static const char *mux_clkm_sor1_brick_sor1_src[] = { * to 0b11. While not an invalid setting, code should always set the
"clk_m", "sor1_brick", "sor1_src", "sor1_brick" * bits to 0b01 to select sor1_brick.
}; */
#define mux_clkm_sor1_brick_sor1_src_idx NULL "sor_safe", "sor1_brick", "sor1_src", "sor1_brick"
};
#define mux_sor_safe_sor1_brick_sor1_src_idx NULL
static const char *mux_pllp_pllre_clkm[] = { static const char *mux_pllp_pllre_clkm[] = {
"pll_p", "pll_re_out1", "clk_m" "pll_p", "pll_re_out1", "clk_m"
...@@ -778,8 +780,7 @@ static struct tegra_periph_init_data periph_clks[] = { ...@@ -778,8 +780,7 @@ static struct tegra_periph_init_data periph_clks[] = {
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),
MUX8_NOGATE_LOCK("sor1_src", mux_pllp_plld_plld2_clkm, CLK_SOURCE_SOR1, tegra_clk_sor1_src, &sor1_lock), MUX8_NOGATE_LOCK("sor1_src", mux_pllp_plld_plld2_clkm, CLK_SOURCE_SOR1, tegra_clk_sor1_src, &sor1_lock),
NODIV("sor1_brick", mux_plldp_sor1_src, CLK_SOURCE_SOR1, 14, MASK(1), 183, 0, tegra_clk_sor1_brick, &sor1_lock), NODIV("sor1", mux_sor_safe_sor1_brick_sor1_src, CLK_SOURCE_SOR1, 14, MASK(2), 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),
I2C("vii2c", mux_pllp_pllc_clkm, CLK_SOURCE_VI_I2C, 208, tegra_clk_vi_i2c), I2C("vii2c", mux_pllp_pllc_clkm, CLK_SOURCE_VI_I2C, 208, tegra_clk_vi_i2c),
......
...@@ -1366,9 +1366,9 @@ static u32 pll_expo_p_to_pdiv(u32 p, u32 *pdiv) ...@@ -1366,9 +1366,9 @@ static u32 pll_expo_p_to_pdiv(u32 p, u32 *pdiv)
static struct tegra_clk_pll_freq_table pll_x_freq_table[] = { static struct tegra_clk_pll_freq_table pll_x_freq_table[] = {
/* 1 GHz */ /* 1 GHz */
{ 12000000, 1000000000, 166, 1, 1, 0 }, /* actual: 996.0 MHz */ { 12000000, 1000000000, 166, 1, 2, 0 }, /* actual: 996.0 MHz */
{ 13000000, 1000000000, 153, 1, 1, 0 }, /* actual: 994.0 MHz */ { 13000000, 1000000000, 153, 1, 2, 0 }, /* actual: 994.0 MHz */
{ 38400000, 1000000000, 156, 3, 1, 0 }, /* actual: 998.4 MHz */ { 38400000, 1000000000, 156, 3, 2, 0 }, /* actual: 998.4 MHz */
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1417,9 +1417,9 @@ static struct div_nmp pllc_nmp = { ...@@ -1417,9 +1417,9 @@ static struct div_nmp pllc_nmp = {
}; };
static struct tegra_clk_pll_freq_table pll_cx_freq_table[] = { static struct tegra_clk_pll_freq_table pll_cx_freq_table[] = {
{ 12000000, 510000000, 85, 1, 1, 0 }, { 12000000, 510000000, 85, 1, 2, 0 },
{ 13000000, 510000000, 78, 1, 1, 0 }, /* actual: 507.0 MHz */ { 13000000, 510000000, 78, 1, 2, 0 }, /* actual: 507.0 MHz */
{ 38400000, 510000000, 79, 3, 1, 0 }, /* actual: 505.6 MHz */ { 38400000, 510000000, 79, 3, 2, 0 }, /* actual: 505.6 MHz */
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1532,9 +1532,9 @@ static struct div_nmp pllss_nmp = { ...@@ -1532,9 +1532,9 @@ static struct div_nmp pllss_nmp = {
}; };
static struct tegra_clk_pll_freq_table pll_c4_vco_freq_table[] = { static struct tegra_clk_pll_freq_table pll_c4_vco_freq_table[] = {
{ 12000000, 600000000, 50, 1, 0, 0 }, { 12000000, 600000000, 50, 1, 1, 0 },
{ 13000000, 600000000, 46, 1, 0, 0 }, /* actual: 598.0 MHz */ { 13000000, 600000000, 46, 1, 1, 0 }, /* actual: 598.0 MHz */
{ 38400000, 600000000, 62, 4, 0, 0 }, /* actual: 595.2 MHz */ { 38400000, 600000000, 62, 4, 1, 0 }, /* actual: 595.2 MHz */
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1583,19 +1583,19 @@ static struct tegra_clk_pll_params pll_c4_vco_params = { ...@@ -1583,19 +1583,19 @@ static struct tegra_clk_pll_params pll_c4_vco_params = {
}; };
static struct tegra_clk_pll_freq_table pll_m_freq_table[] = { static struct tegra_clk_pll_freq_table pll_m_freq_table[] = {
{ 12000000, 800000000, 66, 1, 0, 0 }, /* actual: 792.0 MHz */ { 12000000, 800000000, 66, 1, 1, 0 }, /* actual: 792.0 MHz */
{ 13000000, 800000000, 61, 1, 0, 0 }, /* actual: 793.0 MHz */ { 13000000, 800000000, 61, 1, 1, 0 }, /* actual: 793.0 MHz */
{ 38400000, 297600000, 93, 4, 2, 0 }, { 38400000, 297600000, 93, 4, 3, 0 },
{ 38400000, 400000000, 125, 4, 2, 0 }, { 38400000, 400000000, 125, 4, 3, 0 },
{ 38400000, 532800000, 111, 4, 1, 0 }, { 38400000, 532800000, 111, 4, 2, 0 },
{ 38400000, 665600000, 104, 3, 1, 0 }, { 38400000, 665600000, 104, 3, 2, 0 },
{ 38400000, 800000000, 125, 3, 1, 0 }, { 38400000, 800000000, 125, 3, 2, 0 },
{ 38400000, 931200000, 97, 4, 0, 0 }, { 38400000, 931200000, 97, 4, 1, 0 },
{ 38400000, 1065600000, 111, 4, 0, 0 }, { 38400000, 1065600000, 111, 4, 1, 0 },
{ 38400000, 1200000000, 125, 4, 0, 0 }, { 38400000, 1200000000, 125, 4, 1, 0 },
{ 38400000, 1331200000, 104, 3, 0, 0 }, { 38400000, 1331200000, 104, 3, 1, 0 },
{ 38400000, 1459200000, 76, 2, 0, 0 }, { 38400000, 1459200000, 76, 2, 1, 0 },
{ 38400000, 1600000000, 125, 3, 0, 0 }, { 38400000, 1600000000, 125, 3, 1, 0 },
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1705,9 +1705,9 @@ static struct tegra_clk_pll_params pll_e_params = { ...@@ -1705,9 +1705,9 @@ static struct tegra_clk_pll_params pll_e_params = {
}; };
static struct tegra_clk_pll_freq_table pll_re_vco_freq_table[] = { static struct tegra_clk_pll_freq_table pll_re_vco_freq_table[] = {
{ 12000000, 672000000, 56, 1, 0, 0 }, { 12000000, 672000000, 56, 1, 1, 0 },
{ 13000000, 672000000, 51, 1, 0, 0 }, /* actual: 663.0 MHz */ { 13000000, 672000000, 51, 1, 1, 0 }, /* actual: 663.0 MHz */
{ 38400000, 672000000, 70, 4, 0, 0 }, { 38400000, 672000000, 70, 4, 1, 0 },
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1754,8 +1754,8 @@ static struct div_nmp pllp_nmp = { ...@@ -1754,8 +1754,8 @@ static struct div_nmp pllp_nmp = {
}; };
static struct tegra_clk_pll_freq_table pll_p_freq_table[] = { static struct tegra_clk_pll_freq_table pll_p_freq_table[] = {
{ 12000000, 408000000, 34, 1, 0, 0 }, { 12000000, 408000000, 34, 1, 1, 0 },
{ 38400000, 408000000, 85, 8, 0, 0 }, /* cf = 4.8MHz, allowed exception */ { 38400000, 408000000, 85, 8, 1, 0 }, /* cf = 4.8MHz, allowed exception */
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1820,14 +1820,14 @@ static struct div_nmp plla_nmp = { ...@@ -1820,14 +1820,14 @@ static struct div_nmp plla_nmp = {
}; };
static struct tegra_clk_pll_freq_table pll_a_freq_table[] = { static struct tegra_clk_pll_freq_table pll_a_freq_table[] = {
{ 12000000, 282240000, 47, 1, 1, 1, 0xf148 }, /* actual: 282240234 */ { 12000000, 282240000, 47, 1, 2, 1, 0xf148 }, /* actual: 282240234 */
{ 12000000, 368640000, 61, 1, 1, 1, 0xfe15 }, /* actual: 368640381 */ { 12000000, 368640000, 61, 1, 2, 1, 0xfe15 }, /* actual: 368640381 */
{ 12000000, 240000000, 60, 1, 2, 1, 0 }, { 12000000, 240000000, 60, 1, 3, 1, 0 },
{ 13000000, 282240000, 43, 1, 1, 1, 0xfd7d }, /* actual: 282239807 */ { 13000000, 282240000, 43, 1, 2, 1, 0xfd7d }, /* actual: 282239807 */
{ 13000000, 368640000, 56, 1, 1, 1, 0x06d8 }, /* actual: 368640137 */ { 13000000, 368640000, 56, 1, 2, 1, 0x06d8 }, /* actual: 368640137 */
{ 13000000, 240000000, 55, 1, 2, 1, 0 }, /* actual: 238.3 MHz */ { 13000000, 240000000, 55, 1, 3, 1, 0 }, /* actual: 238.3 MHz */
{ 38400000, 282240000, 44, 3, 1, 1, 0xf333 }, /* actual: 282239844 */ { 38400000, 282240000, 44, 3, 2, 1, 0xf333 }, /* actual: 282239844 */
{ 38400000, 368640000, 57, 3, 1, 1, 0x0333 }, /* actual: 368639844 */ { 38400000, 368640000, 57, 3, 2, 1, 0x0333 }, /* actual: 368639844 */
{ 38400000, 240000000, 75, 3, 3, 1, 0 }, { 38400000, 240000000, 75, 3, 3, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1873,9 +1873,9 @@ static struct div_nmp plld_nmp = { ...@@ -1873,9 +1873,9 @@ static struct div_nmp plld_nmp = {
}; };
static struct tegra_clk_pll_freq_table pll_d_freq_table[] = { static struct tegra_clk_pll_freq_table pll_d_freq_table[] = {
{ 12000000, 594000000, 99, 1, 1, 0, 0 }, { 12000000, 594000000, 99, 1, 2, 0, 0 },
{ 13000000, 594000000, 91, 1, 1, 0, 0xfc4f }, /* actual: 594000183 */ { 13000000, 594000000, 91, 1, 2, 0, 0xfc4f }, /* actual: 594000183 */
{ 38400000, 594000000, 30, 1, 1, 0, 0x0e00 }, { 38400000, 594000000, 30, 1, 2, 0, 0x0e00 },
{ 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1911,9 +1911,9 @@ static struct tegra_clk_pll_params pll_d_params = { ...@@ -1911,9 +1911,9 @@ static struct tegra_clk_pll_params pll_d_params = {
}; };
static struct tegra_clk_pll_freq_table tegra210_pll_d2_freq_table[] = { static struct tegra_clk_pll_freq_table tegra210_pll_d2_freq_table[] = {
{ 12000000, 594000000, 99, 1, 1, 0, 0xf000 }, { 12000000, 594000000, 99, 1, 2, 0, 0xf000 },
{ 13000000, 594000000, 91, 1, 1, 0, 0xfc4f }, /* actual: 594000183 */ { 13000000, 594000000, 91, 1, 2, 0, 0xfc4f }, /* actual: 594000183 */
{ 38400000, 594000000, 30, 1, 1, 0, 0x0e00 }, { 38400000, 594000000, 30, 1, 2, 0, 0x0e00 },
{ 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 },
}; };
...@@ -1935,8 +1935,9 @@ static struct tegra_clk_pll_params pll_d2_params = { ...@@ -1935,8 +1935,9 @@ static struct tegra_clk_pll_params pll_d2_params = {
.sdm_din_mask = PLLA_SDM_DIN_MASK, .sdm_din_mask = PLLA_SDM_DIN_MASK,
.sdm_ctrl_reg = PLLD2_MISC1, .sdm_ctrl_reg = PLLD2_MISC1,
.sdm_ctrl_en_mask = PLLD2_SDM_EN_MASK, .sdm_ctrl_en_mask = PLLD2_SDM_EN_MASK,
.ssc_ctrl_reg = PLLD2_MISC1, /* disable spread-spectrum for pll_d2 */
.ssc_ctrl_en_mask = PLLD2_SSC_EN_MASK, .ssc_ctrl_reg = 0,
.ssc_ctrl_en_mask = 0,
.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 = &pllss_nmp, .div_nmp = &pllss_nmp,
...@@ -1955,9 +1956,9 @@ static struct tegra_clk_pll_params pll_d2_params = { ...@@ -1955,9 +1956,9 @@ static struct tegra_clk_pll_params pll_d2_params = {
}; };
static struct tegra_clk_pll_freq_table pll_dp_freq_table[] = { static struct tegra_clk_pll_freq_table pll_dp_freq_table[] = {
{ 12000000, 270000000, 90, 1, 3, 0, 0xf000 }, { 12000000, 270000000, 90, 1, 4, 0, 0xf000 },
{ 13000000, 270000000, 83, 1, 3, 0, 0xf000 }, /* actual: 269.8 MHz */ { 13000000, 270000000, 83, 1, 4, 0, 0xf000 }, /* actual: 269.8 MHz */
{ 38400000, 270000000, 28, 1, 3, 0, 0xf400 }, { 38400000, 270000000, 28, 1, 4, 0, 0xf400 },
{ 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 },
}; };
...@@ -2007,9 +2008,9 @@ static struct div_nmp pllu_nmp = { ...@@ -2007,9 +2008,9 @@ static struct div_nmp pllu_nmp = {
}; };
static struct tegra_clk_pll_freq_table pll_u_freq_table[] = { static struct tegra_clk_pll_freq_table pll_u_freq_table[] = {
{ 12000000, 480000000, 40, 1, 0, 0 }, { 12000000, 480000000, 40, 1, 1, 0 },
{ 13000000, 480000000, 36, 1, 0, 0 }, /* actual: 468.0 MHz */ { 13000000, 480000000, 36, 1, 1, 0 }, /* actual: 468.0 MHz */
{ 38400000, 480000000, 25, 2, 0, 0 }, { 38400000, 480000000, 25, 2, 1, 0 },
{ 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },
}; };
...@@ -2154,6 +2155,8 @@ static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = { ...@@ -2154,6 +2155,8 @@ static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = {
[tegra_clk_dpaux1] = { .dt_id = TEGRA210_CLK_DPAUX1, .present = true }, [tegra_clk_dpaux1] = { .dt_id = TEGRA210_CLK_DPAUX1, .present = true },
[tegra_clk_sor0] = { .dt_id = TEGRA210_CLK_SOR0, .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_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_gpu] = { .dt_id = TEGRA210_CLK_GPU, .present = true },
[tegra_clk_pll_g_ref] = { .dt_id = TEGRA210_CLK_PLL_G_REF, .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 }, [tegra_clk_uartb_8] = { .dt_id = TEGRA210_CLK_UARTB, .present = true },
......
...@@ -308,7 +308,7 @@ ...@@ -308,7 +308,7 @@
#define TEGRA210_CLK_CLK_OUT_3 279 #define TEGRA210_CLK_CLK_OUT_3 279
#define TEGRA210_CLK_BLINK 280 #define TEGRA210_CLK_BLINK 280
/* 281 */ /* 281 */
/* 282 */ #define TEGRA210_CLK_SOR1_SRC 282
/* 283 */ /* 283 */
#define TEGRA210_CLK_XUSB_HOST_SRC 284 #define TEGRA210_CLK_XUSB_HOST_SRC 284
#define TEGRA210_CLK_XUSB_FALCON_SRC 285 #define TEGRA210_CLK_XUSB_FALCON_SRC 285
......
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