diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2020-04-30 11:30:51 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-04-30 11:30:51 +0200 |
commit | b1dd1585deb21db5b595549267219ff9364dd4c8 (patch) | |
tree | 3d8243153a88836cca5bbfef04751dd27179cd27 | |
parent | ea44dc8f3392ef94d8f958788571182f380c7b84 (diff) | |
parent | d76f885ee3d9ace2d075cb0638e77d8358d422cf (diff) | |
download | barebox-b1dd1585deb21db5b595549267219ff9364dd4c8.tar.gz barebox-b1dd1585deb21db5b595549267219ff9364dd4c8.tar.xz |
Merge branch 'for-next/mxs' into next
-rw-r--r-- | arch/arm/mach-mxs/Kconfig | 8 | ||||
-rw-r--r-- | drivers/clk/mxs/clk-imx28.c | 48 | ||||
-rw-r--r-- | drivers/net/fec_imx.c | 6 | ||||
-rw-r--r-- | drivers/net/fec_imx.h | 2 |
4 files changed, 39 insertions, 25 deletions
diff --git a/arch/arm/mach-mxs/Kconfig b/arch/arm/mach-mxs/Kconfig index b3a7c6259c..f4a9d3d422 100644 --- a/arch/arm/mach-mxs/Kconfig +++ b/arch/arm/mach-mxs/Kconfig @@ -9,6 +9,12 @@ config ARCH_TEXT_BASE default 0x47000000 if MACH_MX28EVK default 0x47000000 if MACH_CFA10036 +config ARCH_MXS_OF_SUPPORT + bool + select COMMON_CLK_OF_PROVIDER + select OFTREE + select OFDEVICE + comment "Freescale i.MX System-on-Chip" choice @@ -57,12 +63,14 @@ config MACH_TX28 config MACH_MX28EVK bool "mx28-evk" select MXS_OCOTP + select ARCH_MXS_OF_SUPPORT help Say Y here if you are using the Freescale i.MX28-EVK board config MACH_DUCKBILL bool "Duckbill" select MXS_OCOTP + select ARCH_MXS_OF_SUPPORT help Say Y here if you are using the I2SE Duckbill board diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c index 4adb1c6866..1dd724c8a6 100644 --- a/drivers/clk/mxs/clk-imx28.c +++ b/drivers/clk/mxs/clk-imx28.c @@ -61,8 +61,9 @@ enum imx28_clk { }; static struct clk *clks[clk_max]; +static struct clk_onecell_data clk_data; -static int __init mx28_clocks_init(void __iomem *regs) +static int __init mx28_clocks_init(struct device_d *dev, void __iomem *regs) { clks[ref_xtal] = clk_fixed("ref_xtal", 24000000); clks[pll0] = mxs_clk_pll("pll0", "ref_xtal", PLL0CTRL0, 17, 480000000); @@ -131,25 +132,30 @@ static int __init mx28_clocks_init(void __iomem *regs) clk_set_rate(clks[ssp2], 96000000); clk_set_rate(clks[ssp3], 96000000); clk_set_parent(clks[lcdif_sel], clks[ref_pix]); - clk_enable(clks[enet_out]); - - clkdev_add_physbase(clks[ssp0], IMX_SSP0_BASE, NULL); - clkdev_add_physbase(clks[ssp1], IMX_SSP1_BASE, NULL); - clkdev_add_physbase(clks[ssp2], IMX_SSP2_BASE, NULL); - clkdev_add_physbase(clks[ssp3], IMX_SSP3_BASE, NULL); - clkdev_add_physbase(clks[fec], IMX_FEC0_BASE, NULL); - clkdev_add_physbase(clks[xbus], IMX_DBGUART_BASE, NULL); - clkdev_add_physbase(clks[hbus], IMX_OCOTP_BASE, NULL); - clkdev_add_physbase(clks[hbus], MXS_APBH_BASE, NULL); - clkdev_add_physbase(clks[uart], IMX_UART0_BASE, NULL); - clkdev_add_physbase(clks[uart], IMX_UART1_BASE, NULL); - clkdev_add_physbase(clks[uart], IMX_UART2_BASE, NULL); - clkdev_add_physbase(clks[uart], IMX_UART3_BASE, NULL); - clkdev_add_physbase(clks[uart], IMX_UART4_BASE, NULL); - clkdev_add_physbase(clks[gpmi], MXS_GPMI_BASE, NULL); - clkdev_add_physbase(clks[pwm], IMX_PWM_BASE, NULL); - if (IS_ENABLED(CONFIG_DRIVER_VIDEO_STM)) - clkdev_add_physbase(clks[lcdif_comp], IMX_FB_BASE, NULL); + + if (dev->device_node) { + clk_data.clks = clks; + clk_data.clk_num = clk_max; + of_clk_add_provider(dev->device_node, of_clk_src_onecell_get, &clk_data); + } else { + clkdev_add_physbase(clks[ssp0], IMX_SSP0_BASE, NULL); + clkdev_add_physbase(clks[ssp1], IMX_SSP1_BASE, NULL); + clkdev_add_physbase(clks[ssp2], IMX_SSP2_BASE, NULL); + clkdev_add_physbase(clks[ssp3], IMX_SSP3_BASE, NULL); + clkdev_add_physbase(clks[fec], IMX_FEC0_BASE, NULL); + clkdev_add_physbase(clks[xbus], IMX_DBGUART_BASE, NULL); + clkdev_add_physbase(clks[hbus], IMX_OCOTP_BASE, NULL); + clkdev_add_physbase(clks[hbus], MXS_APBH_BASE, NULL); + clkdev_add_physbase(clks[uart], IMX_UART0_BASE, NULL); + clkdev_add_physbase(clks[uart], IMX_UART1_BASE, NULL); + clkdev_add_physbase(clks[uart], IMX_UART2_BASE, NULL); + clkdev_add_physbase(clks[uart], IMX_UART3_BASE, NULL); + clkdev_add_physbase(clks[uart], IMX_UART4_BASE, NULL); + clkdev_add_physbase(clks[gpmi], MXS_GPMI_BASE, NULL); + clkdev_add_physbase(clks[pwm], IMX_PWM_BASE, NULL); + if (IS_ENABLED(CONFIG_DRIVER_VIDEO_STM)) + clkdev_add_physbase(clks[lcdif_comp], IMX_FB_BASE, NULL); + } return 0; } @@ -164,7 +170,7 @@ static int imx28_ccm_probe(struct device_d *dev) return PTR_ERR(iores); regs = IOMEM(iores->start); - mx28_clocks_init(regs); + mx28_clocks_init(dev, regs); return 0; } diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c index f814b3b960..772f930f0d 100644 --- a/drivers/net/fec_imx.c +++ b/drivers/net/fec_imx.c @@ -705,10 +705,10 @@ static int fec_clk_get(struct fec_priv *fec) { int i, err = 0; static const char *clk_names[ARRAY_SIZE(fec->clk)] = { - "ipg", "ahb", "ptp" + "ipg", "ahb", }; static const char *opt_clk_names[ARRAY_SIZE(fec->opt_clk)] = { - "enet_clk_ref", "enet_out", + "enet_clk_ref", "enet_out", "ptp" }; for (i = 0; i < ARRAY_SIZE(fec->clk); i++) { @@ -716,7 +716,7 @@ static int fec_clk_get(struct fec_priv *fec) if (IS_ERR(fec->clk[i])) { err = PTR_ERR(fec->clk[i]); fec_clk_put(fec); - break; + return err; } } diff --git a/drivers/net/fec_imx.h b/drivers/net/fec_imx.h index d1ac92f0e3..316eefe48f 100644 --- a/drivers/net/fec_imx.h +++ b/drivers/net/fec_imx.h @@ -121,7 +121,6 @@ enum fec_type { enum fec_clock { FEC_CLK_IPG, FEC_CLK_AHB, - FEC_CLK_PTP, FEC_CLK_NUM }; @@ -129,6 +128,7 @@ enum fec_clock { enum fec_opt_clock { FEC_OPT_CLK_REF, FEC_OPT_CLK_OUT, + FEC_OPT_CLK_PTP, FEC_OPT_CLK_NUM }; |