]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
Merge tag 'imx-clk-common-fixes' of git://git.pengutronix.de/git/imx/linux-2.6 into...
authorOlof Johansson <olof@lixom.net>
Thu, 7 Jun 2012 18:43:23 +0000 (11:43 -0700)
committerOlof Johansson <olof@lixom.net>
Thu, 7 Jun 2012 18:47:28 +0000 (11:47 -0700)
From Sascha Hauer: "Some fixes for the fresh i.MX common clock support"

Resolved trivial conflict in arch/arm/plat-mxc/include/mach/common.h.

* tag 'imx-clk-common-fixes' of git://git.pengutronix.de/git/imx/linux-2.6:
  ARM: imx6q: prepare and enable init on clks directly instead of clk_get first
  ARM i.MX: remove now unnecessary argument from mxc_timer_init
  ARM: i.MX: change timer clock from ipg to perclk
  ARM i.MX5: fix gpt peripheral clock path

Signed-off-by: Olof Johansson <olof@lixom.net>
1  2 
arch/arm/mach-imx/clk-imx51-imx53.c
arch/arm/mach-imx/clk-imx6q.c
arch/arm/plat-mxc/include/mach/common.h

index fcd94f3b0f0e7cf4380a47e80d0425c71a00f02d,c1739f6078d500cfab9ed97a59c3a00f4b09f4e1..a2200c77bf70dcdc09c44d642fe09656f36f0fcb
@@@ -31,11 -31,6 +31,11 @@@ static const char *per_lp_apm_sel[] = 
  static const char *per_root_sel[] = { "per_podf", "ipg", };
  static const char *esdhc_c_sel[] = { "esdhc_a_podf", "esdhc_b_podf", };
  static const char *esdhc_d_sel[] = { "esdhc_a_podf", "esdhc_b_podf", };
 +static const char *ssi_apm_sels[] = { "ckih1", "lp_amp", "ckih2", };
 +static const char *ssi_clk_sels[] = { "pll1_sw", "pll2_sw", "pll3_sw", "ssi_apm", };
 +static const char *ssi3_clk_sels[] = { "ssi1_root_gate", "ssi2_root_gate", };
 +static const char *ssi_ext1_com_sels[] = { "ssi_ext1_podf", "ssi1_root_gate", };
 +static const char *ssi_ext2_com_sels[] = { "ssi_ext2_podf", "ssi2_root_gate", };
  static const char *emi_slow_sel[] = { "main_bus", "ahb", };
  static const char *usb_phy_sel_str[] = { "osc", "usb_phy_podf", };
  static const char *mx51_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "tve_di", };
@@@ -76,11 -71,6 +76,11 @@@ enum imx5_clks 
        pll3_sw, ipu_di0_sel, ipu_di1_sel, tve_ext_sel, mx51_mipi, pll4_sw,
        ldb_di1_sel, di_pll4_podf, ldb_di0_sel, ldb_di0_gate, usb_phy1_gate,
        usb_phy2_gate, per_lp_apm, per_pred1, per_pred2, per_podf, per_root,
 +      ssi_apm, ssi1_root_sel, ssi2_root_sel, ssi3_root_sel, ssi_ext1_sel,
 +      ssi_ext2_sel, ssi_ext1_com_sel, ssi_ext2_com_sel, ssi1_root_pred,
 +      ssi1_root_podf, ssi2_root_pred, ssi2_root_podf, ssi_ext1_pred,
 +      ssi_ext1_podf, ssi_ext2_pred, ssi_ext2_podf, ssi1_root_gate,
 +      ssi2_root_gate, ssi3_root_gate, ssi_ext1_gate, ssi_ext2_gate,
        clk_max
  };
  
@@@ -104,12 -94,12 +104,12 @@@ static void __init mx5_clocks_common_in
                                periph_apm_sel, ARRAY_SIZE(periph_apm_sel));
        clk[main_bus] = imx_clk_mux("main_bus", MXC_CCM_CBCDR, 25, 1,
                                main_bus_sel, ARRAY_SIZE(main_bus_sel));
-       clk[per_lp_apm] = imx_clk_mux("per_lp_apm", MXC_CCM_CBCDR, 1, 1,
+       clk[per_lp_apm] = imx_clk_mux("per_lp_apm", MXC_CCM_CBCMR, 1, 1,
                                per_lp_apm_sel, ARRAY_SIZE(per_lp_apm_sel));
        clk[per_pred1] = imx_clk_divider("per_pred1", "per_lp_apm", MXC_CCM_CBCDR, 6, 2);
        clk[per_pred2] = imx_clk_divider("per_pred2", "per_pred1", MXC_CCM_CBCDR, 3, 3);
        clk[per_podf] = imx_clk_divider("per_podf", "per_pred2", MXC_CCM_CBCDR, 0, 3);
-       clk[per_root] = imx_clk_mux("per_root", MXC_CCM_CBCDR, 1, 0,
+       clk[per_root] = imx_clk_mux("per_root", MXC_CCM_CBCMR, 0, 1,
                                per_root_sel, ARRAY_SIZE(per_root_sel));
        clk[ahb] = imx_clk_divider("ahb", "main_bus", MXC_CCM_CBCDR, 10, 3);
        clk[ahb_max] = imx_clk_gate2("ahb_max", "ahb", MXC_CCM_CCGR0, 28);
        clk[pwm1_hf_gate] = imx_clk_gate2("pwm1_hf_gate", "ipg", MXC_CCM_CCGR2, 12);
        clk[pwm2_ipg_gate] = imx_clk_gate2("pwm2_ipg_gate", "ipg", MXC_CCM_CCGR2, 14);
        clk[pwm2_hf_gate] = imx_clk_gate2("pwm2_hf_gate", "ipg", MXC_CCM_CCGR2, 16);
-       clk[gpt_gate] = imx_clk_gate2("gpt_gate", "ipg", MXC_CCM_CCGR2, 18);
+       clk[gpt_gate] = imx_clk_gate2("gpt_gate", "per_root", MXC_CCM_CCGR2, 18);
        clk[fec_gate] = imx_clk_gate2("fec_gate", "ipg", MXC_CCM_CCGR2, 24);
        clk[usboh3_gate] = imx_clk_gate2("usboh3_gate", "ipg", MXC_CCM_CCGR2, 26);
        clk[usboh3_per_gate] = imx_clk_gate2("usboh3_per_gate", "usboh3_podf", MXC_CCM_CCGR2, 28);
        clk[uart5_per_gate] = imx_clk_gate2("uart5_per_gate", "uart_root", MXC_CCM_CCGR7, 14);
        clk[gpc_dvfs] = imx_clk_gate2("gpc_dvfs", "dummy", MXC_CCM_CCGR5, 24);
  
 +      clk[ssi_apm] = imx_clk_mux("ssi_apm", MXC_CCM_CSCMR1, 8, 2, ssi_apm_sels, ARRAY_SIZE(ssi_apm_sels));
 +      clk[ssi1_root_sel] = imx_clk_mux("ssi1_root_sel", MXC_CCM_CSCMR1, 14, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels));
 +      clk[ssi2_root_sel] = imx_clk_mux("ssi2_root_sel", MXC_CCM_CSCMR1, 12, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels));
 +      clk[ssi3_root_sel] = imx_clk_mux("ssi3_root_sel", MXC_CCM_CSCMR1, 11, 1, ssi3_clk_sels, ARRAY_SIZE(ssi3_clk_sels));
 +      clk[ssi_ext1_sel] = imx_clk_mux("ssi_ext1_sel", MXC_CCM_CSCMR1, 28, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels));
 +      clk[ssi_ext2_sel] = imx_clk_mux("ssi_ext2_sel", MXC_CCM_CSCMR1, 30, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels));
 +      clk[ssi_ext1_com_sel] = imx_clk_mux("ssi_ext1_com_sel", MXC_CCM_CSCMR1, 0, 1, ssi_ext1_com_sels, ARRAY_SIZE(ssi_ext1_com_sels));
 +      clk[ssi_ext2_com_sel] = imx_clk_mux("ssi_ext2_com_sel", MXC_CCM_CSCMR1, 1, 1, ssi_ext2_com_sels, ARRAY_SIZE(ssi_ext2_com_sels));
 +      clk[ssi1_root_pred] = imx_clk_divider("ssi1_root_pred", "ssi1_root_sel", MXC_CCM_CS1CDR, 6, 3);
 +      clk[ssi1_root_podf] = imx_clk_divider("ssi1_root_podf", "ssi1_root_pred", MXC_CCM_CS1CDR, 0, 6);
 +      clk[ssi2_root_pred] = imx_clk_divider("ssi2_root_pred", "ssi2_root_sel", MXC_CCM_CS2CDR, 6, 3);
 +      clk[ssi2_root_podf] = imx_clk_divider("ssi2_root_podf", "ssi2_root_pred", MXC_CCM_CS2CDR, 0, 6);
 +      clk[ssi_ext1_pred] = imx_clk_divider("ssi_ext1_pred", "ssi_ext1_sel", MXC_CCM_CS1CDR, 22, 3);
 +      clk[ssi_ext1_podf] = imx_clk_divider("ssi_ext1_podf", "ssi_ext1_pred", MXC_CCM_CS1CDR, 16, 6);
 +      clk[ssi_ext2_pred] = imx_clk_divider("ssi_ext2_pred", "ssi_ext2_sel", MXC_CCM_CS2CDR, 22, 3);
 +      clk[ssi_ext2_podf] = imx_clk_divider("ssi_ext2_podf", "ssi_ext2_pred", MXC_CCM_CS2CDR, 16, 6);
 +      clk[ssi1_root_gate] = imx_clk_gate2("ssi1_root_gate", "ssi1_root_podf", MXC_CCM_CCGR3, 18);
 +      clk[ssi2_root_gate] = imx_clk_gate2("ssi2_root_gate", "ssi2_root_podf", MXC_CCM_CCGR3, 22);
 +      clk[ssi3_root_gate] = imx_clk_gate2("ssi3_root_gate", "ssi3_root_sel", MXC_CCM_CCGR3, 26);
 +      clk[ssi_ext1_gate] = imx_clk_gate2("ssi_ext1_gate", "ssi_ext1_com_sel", MXC_CCM_CCGR3, 28);
 +      clk[ssi_ext2_gate] = imx_clk_gate2("ssi_ext2_gate", "ssi_ext2_com_sel", MXC_CCM_CCGR3, 30);
 +
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
                        pr_err("i.MX5 clk %d: register failed with %ld\n",
        clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0");
        clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1");
        clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2");
 +      clk_register_clkdev(clk[ssi_ext1_gate], "ssi_ext1", NULL);
 +      clk_register_clkdev(clk[ssi_ext2_gate], "ssi_ext2", NULL);
        clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma");
        clk_register_clkdev(clk[cpu_podf], "cpu", NULL);
        clk_register_clkdev(clk[iim_gate], "iim", NULL);
@@@ -354,9 -320,6 +354,9 @@@ int __init mx51_clocks_init(unsigned lo
        clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx51.3");
        clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.3");
        clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx51.3");
 +      clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "83fcc000.ssi");
 +      clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "70014000.ssi");
 +      clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "83fe8000.ssi");
  
        /* set the usboh3 parent to pll2_sw */
        clk_set_parent(clk[usboh3_sel], clk[pll2_sw]);
        clk_set_rate(clk[esdhc_b_podf], 166250000);
  
        /* System timer */
-       mxc_timer_init(NULL, MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR),
-               MX51_INT_GPT);
+       mxc_timer_init(MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR), MX51_INT_GPT);
  
        clk_prepare_enable(clk[iim_gate]);
        imx_print_silicon_rev("i.MX51", mx51_revision());
@@@ -443,17 -405,13 +442,16 @@@ int __init mx53_clocks_init(unsigned lo
        clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx53.3");
        clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx53.3");
        clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx53.3");
 +      clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "63fcc000.ssi");
 +      clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "50014000.ssi");
 +      clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "63fd0000.ssi");
  
        /* set SDHC root clock to 200MHZ*/
        clk_set_rate(clk[esdhc_a_podf], 200000000);
        clk_set_rate(clk[esdhc_b_podf], 200000000);
  
        /* System timer */
-       mxc_timer_init(NULL, MX53_IO_ADDRESS(MX53_GPT1_BASE_ADDR),
-               MX53_INT_GPT);
+       mxc_timer_init(MX53_IO_ADDRESS(MX53_GPT1_BASE_ADDR), MX53_INT_GPT);
  
        clk_prepare_enable(clk[iim_gate]);
        imx_print_silicon_rev("i.MX53", mx53_revision());
index cab02d0a15d60d1c1bfe6e16157b386c0fb6b062,7b4751dbe749ed91e1bf2c1f6f667164b42a3a5b..17dc66a085a51667ab163d63ecba967ce41b139e
@@@ -122,10 -122,6 +122,6 @@@ static const char *cko1_sels[]    = { "pll
                                    "dummy", "axi", "enfc", "ipu1_di0", "ipu1_di1", "ipu2_di0",
                                    "ipu2_di1", "ahb", "ipg", "ipg_per", "ckil", "pll4_audio", };
  
- static const char * const clks_init_on[] __initconst = {
-       "mmdc_ch0_axi", "mmdc_ch1_axi", "usboh3",
- };
  enum mx6q_clks {
        dummy, ckil, ckih, osc, pll2_pfd0_352m, pll2_pfd1_594m, pll2_pfd2_396m,
        pll3_pfd0_720m, pll3_pfd1_540m, pll3_pfd2_508m, pll3_pfd3_454m,
        gpmi_bch_apb, gpmi_bch, gpmi_io, gpmi_apb, sata, sdma, spba, ssi1,
        ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3,
        usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,
 -      pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, clk_max
 +      pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg,
 +      ssi2_ipg, ssi3_ipg, clk_max
  };
  
  static struct clk *clk[clk_max];
  
+ static enum mx6q_clks const clks_init_on[] __initconst = {
+       mmdc_ch0_axi, mmdc_ch1_axi,
+ };
  int __init mx6q_clocks_init(void)
  {
        struct device_node *np;
        void __iomem *base;
-       struct clk *c;
        int i, irq;
  
        clk[dummy] = imx_clk_fixed("dummy", 0);
        clk[sata]         = imx_clk_gate2("sata",          "ipg",               base + 0x7c, 4);
        clk[sdma]         = imx_clk_gate2("sdma",          "ahb",               base + 0x7c, 6);
        clk[spba]         = imx_clk_gate2("spba",          "ipg",               base + 0x7c, 12);
 -      clk[ssi1]         = imx_clk_gate2("ssi1",          "ssi1_podf",         base + 0x7c, 18);
 -      clk[ssi2]         = imx_clk_gate2("ssi2",          "ssi2_podf",         base + 0x7c, 20);
 -      clk[ssi3]         = imx_clk_gate2("ssi3",          "ssi3_podf",         base + 0x7c, 22);
 +      clk[ssi1_ipg]     = imx_clk_gate2("ssi1_ipg",      "ipg",               base + 0x7c, 18);
 +      clk[ssi2_ipg]     = imx_clk_gate2("ssi2_ipg",      "ipg",               base + 0x7c, 20);
 +      clk[ssi3_ipg]     = imx_clk_gate2("ssi3_ipg",      "ipg",               base + 0x7c, 22);
        clk[uart_ipg]     = imx_clk_gate2("uart_ipg",      "ipg",               base + 0x7c, 24);
        clk[uart_serial]  = imx_clk_gate2("uart_serial",   "uart_serial_podf",  base + 0x7c, 26);
        clk[usboh3]       = imx_clk_gate2("usboh3",        "ipg",               base + 0x80, 0);
        clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0");
        clk_register_clkdev(clk[twd], NULL, "smp_twd");
        clk_register_clkdev(clk[usboh3], NULL, "usboh3");
 -      clk_register_clkdev(clk[uart_serial], "per", "2020000.uart");
 -      clk_register_clkdev(clk[uart_ipg], "ipg", "2020000.uart");
 -      clk_register_clkdev(clk[uart_serial], "per", "21e8000.uart");
 -      clk_register_clkdev(clk[uart_ipg], "ipg", "21e8000.uart");
 -      clk_register_clkdev(clk[uart_serial], "per", "21ec000.uart");
 -      clk_register_clkdev(clk[uart_ipg], "ipg", "21ec000.uart");
 -      clk_register_clkdev(clk[uart_serial], "per", "21f0000.uart");
 -      clk_register_clkdev(clk[uart_ipg], "ipg", "21f0000.uart");
 -      clk_register_clkdev(clk[uart_serial], "per", "21f4000.uart");
 -      clk_register_clkdev(clk[uart_ipg], "ipg", "21f4000.uart");
 -      clk_register_clkdev(clk[enet], NULL, "2188000.enet");
 +      clk_register_clkdev(clk[uart_serial], "per", "2020000.serial");
 +      clk_register_clkdev(clk[uart_ipg], "ipg", "2020000.serial");
 +      clk_register_clkdev(clk[uart_serial], "per", "21e8000.serial");
 +      clk_register_clkdev(clk[uart_ipg], "ipg", "21e8000.serial");
 +      clk_register_clkdev(clk[uart_serial], "per", "21ec000.serial");
 +      clk_register_clkdev(clk[uart_ipg], "ipg", "21ec000.serial");
 +      clk_register_clkdev(clk[uart_serial], "per", "21f0000.serial");
 +      clk_register_clkdev(clk[uart_ipg], "ipg", "21f0000.serial");
 +      clk_register_clkdev(clk[uart_serial], "per", "21f4000.serial");
 +      clk_register_clkdev(clk[uart_ipg], "ipg", "21f4000.serial");
 +      clk_register_clkdev(clk[enet], NULL, "2188000.ethernet");
        clk_register_clkdev(clk[usdhc1], NULL, "2190000.usdhc");
        clk_register_clkdev(clk[usdhc2], NULL, "2194000.usdhc");
        clk_register_clkdev(clk[usdhc3], NULL, "2198000.usdhc");
        clk_register_clkdev(clk[sdma], NULL, "20ec000.sdma");
        clk_register_clkdev(clk[dummy], NULL, "20bc000.wdog");
        clk_register_clkdev(clk[dummy], NULL, "20c0000.wdog");
 +      clk_register_clkdev(clk[ssi1_ipg], NULL, "2028000.ssi");
 +      clk_register_clkdev(clk[cko1_sel], "cko1_sel", NULL);
 +      clk_register_clkdev(clk[ahb], "ahb", NULL);
 +      clk_register_clkdev(clk[cko1], "cko1", NULL);
  
-       for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) {
-               c = clk_get_sys(clks_init_on[i], NULL);
-               if (IS_ERR(c)) {
-                       pr_err("%s: failed to get clk %s", __func__,
-                              clks_init_on[i]);
-                       return PTR_ERR(c);
-               }
-               clk_prepare_enable(c);
-       }
+       for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
+               clk_prepare_enable(clk[clks_init_on[i]]);
  
        np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
        base = of_iomap(np, 0);
        WARN_ON(!base);
        irq = irq_of_parse_and_map(np, 0);
-       mxc_timer_init(NULL, base, irq);
+       mxc_timer_init(base, irq);
  
        return 0;
  }
index cf663d84e7c1d1397291e4667c526087c3aaca56,da02540f4bd4a252a1c71b9f2c80ba4bf06c0798..e429ca1b814a179522bdf2bc9bb9e514ac136efc
@@@ -53,9 -53,8 +53,9 @@@ extern void imx35_soc_init(void)
  extern void imx50_soc_init(void);
  extern void imx51_soc_init(void);
  extern void imx53_soc_init(void);
- extern void epit_timer_init(struct clk *timer_clk, void __iomem *base, int irq);
- extern void mxc_timer_init(struct clk *timer_clk, void __iomem *, int);
 +extern void imx51_init_late(void);
+ extern void epit_timer_init(void __iomem *base, int irq);
+ extern void mxc_timer_init(void __iomem *, int);
  extern int mx1_clocks_init(unsigned long fref);
  extern int mx21_clocks_init(unsigned long lref, unsigned long fref);
  extern int mx25_clocks_init(void);
@@@ -150,10 -149,4 +150,10 @@@ extern void imx6q_pm_init(void)
  static inline void imx6q_pm_init(void) {}
  #endif
  
 +#ifdef CONFIG_NEON
 +extern int mx51_neon_fixup(void);
 +#else
 +static inline int mx51_neon_fixup(void) { return 0; }
 +#endif
 +
  #endif