]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/clk/tegra/clk-tegra124.c
Merge tag 'armsoc-arm64' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[linux-beck.git] / drivers / clk / tegra / clk-tegra124.c
index f4fbbf16a056fe6d394782fbc37d1de49509f4ad..a112d3d2bff11ee2bf135e10d78d2584705fb073 100644 (file)
 
 #define CCLKG_BURST_POLICY 0x368
 
-#define UTMIP_PLL_CFG2 0x488
-#define UTMIP_PLL_CFG2_STABLE_COUNT(x) (((x) & 0xffff) << 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_B_POWERDOWN BIT(2)
-#define UTMIP_PLL_CFG2_FORCE_PD_SAMP_C_POWERDOWN BIT(4)
-
-#define UTMIP_PLL_CFG1 0x484
-#define UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(x) (((x) & 0x1f) << 6)
-#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 UTMIPLL_HW_PWRDN_CFG0                  0x52c
-#define UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE  BIT(25)
-#define UTMIPLL_HW_PWRDN_CFG0_SEQ_ENABLE       BIT(24)
-#define UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET      BIT(6)
-#define UTMIPLL_HW_PWRDN_CFG0_SEQ_RESET_INPUT_VALUE    BIT(5)
-#define UTMIPLL_HW_PWRDN_CFG0_SEQ_IN_SWCTL     BIT(4)
-#define UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL BIT(2)
-#define UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE    BIT(1)
-#define UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL       BIT(0)
-
 /* Tegra CPU clock and reset control regs */
 #define CLK_RST_CONTROLLER_CPU_CMPLX_STATUS    0x470
 
@@ -764,43 +738,6 @@ static struct tegra_clk_pll_params pll_u_params = {
                 TEGRA_PLL_USE_LOCK | TEGRA_PLL_HAS_LOCK_ENABLE,
 };
 
-struct utmi_clk_param {
-       /* Oscillator Frequency in KHz */
-       u32 osc_frequency;
-       /* UTMIP PLL Enable Delay Count  */
-       u8 enable_delay_count;
-       /* UTMIP PLL Stable count */
-       u8 stable_count;
-       /*  UTMIP PLL Active delay count */
-       u8 active_delay_count;
-       /* UTMIP PLL Xtal frequency count */
-       u8 xtal_freq_count;
-};
-
-static const struct utmi_clk_param utmi_parameters[] = {
-       {
-               .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 = 0x04,
-               .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 tegra124_clks[tegra_clk_max] __initdata = {
        [tegra_clk_ispb] = { .dt_id = TEGRA124_CLK_ISPB, .present = true },
        [tegra_clk_rtc] = { .dt_id = TEGRA124_CLK_RTC, .present = true },
@@ -1063,88 +1000,6 @@ static struct tegra_devclk devclks[] __initdata = {
 
 static struct clk **clks;
 
-static void tegra124_utmi_param_configure(void __iomem *clk_base)
-{
-       unsigned int i;
-       u32 reg;
-
-       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 + 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);
-
-       /* Remove power downs from UTMIP PLL control bits */
-       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_C_POWERDOWN;
-
-       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);
-
-       /* Remove power downs from UTMIP PLL control bits */
-       reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
-       reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ACTIVE_POWERDOWN;
-       reg &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERUP;
-       reg &= ~UTMIP_PLL_CFG1_FORCE_PLLU_POWERDOWN;
-       writel_relaxed(reg, clk_base + UTMIP_PLL_CFG1);
-
-       /* Setup HW control of UTMIPLL */
-       reg = readl_relaxed(clk_base + UTMIPLL_HW_PWRDN_CFG0);
-       reg |= UTMIPLL_HW_PWRDN_CFG0_USE_LOCKDET;
-       reg &= ~UTMIPLL_HW_PWRDN_CFG0_CLK_ENABLE_SWCTL;
-       reg |= UTMIPLL_HW_PWRDN_CFG0_SEQ_START_STATE;
-       writel_relaxed(reg, clk_base + UTMIPLL_HW_PWRDN_CFG0);
-
-       reg = readl_relaxed(clk_base + UTMIP_PLL_CFG1);
-       reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
-       reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
-       writel_relaxed(reg, clk_base + UTMIP_PLL_CFG1);
-
-       udelay(1);
-
-       /* Setup SW override of UTMIPLL assuming USB2.0
-          ports are assigned to USB2 */
-       reg = readl_relaxed(clk_base + UTMIPLL_HW_PWRDN_CFG0);
-       reg |= UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL;
-       reg &= ~UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
-       writel_relaxed(reg, clk_base + UTMIPLL_HW_PWRDN_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 tegra124_periph_clk_init(void __iomem *clk_base,
                                            void __iomem *pmc_base)
 {
@@ -1195,7 +1050,6 @@ static __init void tegra124_periph_clk_init(void __iomem *clk_base,
 static void __init tegra124_pll_init(void __iomem *clk_base,
                                     void __iomem *pmc)
 {
-       u32 val;
        struct clk *clk;
 
        /* PLLC */
@@ -1256,17 +1110,11 @@ static void __init tegra124_pll_init(void __iomem *clk_base,
        clks[TEGRA124_CLK_PLL_M_UD] = clk;
 
        /* PLLU */
-       val = readl(clk_base + pll_u_params.base_reg);
-       val &= ~BIT(24); /* disable PLLU_OVERRIDE */
-       writel(val, clk_base + pll_u_params.base_reg);
-
-       clk = tegra_clk_register_pll("pll_u", "pll_ref", clk_base, pmc, 0,
-                           &pll_u_params, &pll_u_lock);
+       clk = tegra_clk_register_pllu_tegra114("pll_u", "pll_ref", clk_base, 0,
+                                              &pll_u_params, &pll_u_lock);
        clk_register_clkdev(clk, "pll_u", NULL);
        clks[TEGRA124_CLK_PLL_U] = clk;
 
-       tegra124_utmi_param_configure(clk_base);
-
        /* PLLU_480M */
        clk = clk_register_gate(NULL, "pll_u_480M", "pll_u",
                                CLK_SET_RATE_PARENT, clk_base + PLLU_BASE,