mx27: add a clock gate to activate SPLL clock
Subsystems (5)
PATCH 1/2 mx27: add a clock gate to activate SPLL clock
A clock gate is mandatory to activate SPLL clock needed, at least, for usb.
--- arch/arm/mach-imx/clk-imx27.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
arch/arm/mach-imx/clk-imx27.c +4 -3
@@ -62,7 +62,7 @@ static const char *clko_sel_clks[] = { "32k", "usb_div", "dptc", }; -static const char *ssi_sel_clks[] = {"spll" ,"mpll" , }; +static const char *ssi_sel_clks[] = {"spll_gate" ,"mpll" , };enum mx27_clks { dummy, ckih, ckil, mpll, spll, mpll_main2, ahb, ipg, nfc_div, per1_div,
@@ -82,7 +82,7 @@ enum mx27_clks { csi_ahb_gate, brom_ahb_gate, ata_ahb_gate, wdog_ipg_gate, usb_ipg_gate, uart6_ipg_gate, uart5_ipg_gate, uart4_ipg_gate, uart3_ipg_gate, uart2_ipg_gate, uart1_ipg_gate, ckih_div1p5, fpm, mpll_osc_sel, - mpll_sel, clk_max + mpll_sel, spll_gate, clk_max };static struct clk *clk[clk_max];
@@ -104,6 +104,7 @@ int __init mx27_clocks_init(unsigned long fref) ARRAY_SIZE(mpll_sel_clks)); clk[mpll] =imx_clk_pllv1 ("mpll" ,"mpll_sel" ,CCM_MPCTL0 ); clk[spll] =imx_clk_pllv1 ("spll" ,"ckih" ,CCM_SPCTL0 ); + clk[spll_gate] =imx_clk_gate ("spll_gate" ,"spll" ,CCM_CSCR ,1 ); clk[mpll_main2] =imx_clk_fixed_factor ("mpll_main2" ,"mpll" ,2 ,3 );if (mx27_revision () >=IMX_CHIP_REVISION_2_0 ) {
@@ -121,7 +122,7 @@ int __init mx27_clocks_init(unsigned long fref) clk[per4_div] =imx_clk_divider ("per4_div" ,"mpll_main2" ,CCM_PCDR1 ,24 ,6 ); clk[vpu_sel] =imx_clk_mux ("vpu_sel" ,CCM_CSCR ,21 ,1 , vpu_sel_clks,ARRAY_SIZE (vpu_sel_clks)); clk[vpu_div] =imx_clk_divider ("vpu_div" ,"vpu_sel" ,CCM_PCDR0 ,10 ,6 ); - clk[usb_div] =imx_clk_divider ("usb_div" ,"spll" ,CCM_CSCR ,28 ,3 ); + clk[usb_div] =imx_clk_divider ("usb_div" ,"spll_gate" ,CCM_CSCR ,28 ,3 ); clk[cpu_sel] =imx_clk_mux ("cpu_sel" ,CCM_CSCR ,15 ,1 , cpu_sel_clks,ARRAY_SIZE (cpu_sel_clks)); clk[clko_sel] =imx_clk_mux ("clko_sel" ,CCM_CCSR ,0 ,5 , clko_sel_clks,ARRAY_SIZE (clko_sel_clks));if (mx27_revision () >=IMX_CHIP_REVISION_2_0 )
Signature · 1 line
1.7.8.6
PATCH 2/2 mxc: enable EHCI PER clock
EHCI PER clock (aka usb_div) must be enabled to have EHCI driver working.
--- drivers/usb/host/ehci-mxc.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)
drivers/usb/host/ehci-mxc.c +11 -1
@@ -31,7 +31,7 @@#define ULPI_VIEWPORT_OFFSET 0x170struct ehci_mxc_priv { -struct clk *usbclk, *ahbclk, *phyclk; +struct clk *usbclk, *ahbclk, *perclk, *phyclk;struct usb_hcd *hcd; };
@@ -150,6 +150,13 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) }clk_prepare_enable (priv->ahbclk); + priv->perclk =devm_clk_get (&pdev->dev,"per" ); +if (IS_ERR (priv->perclk)) { + ret =PTR_ERR (priv->perclk); + goto err_clk_per; + } +clk_prepare_enable (priv->perclk); +/* "dr" device has its own clock on i.MX51 */ priv->phyclk =devm_clk_get (&pdev->dev,"phy" );if (IS_ERR (priv->phyclk))
@@ -233,6 +240,8 @@ err_init:if (priv->phyclk)clk_disable_unprepare (priv->phyclk); +clk_disable_unprepare (priv->perclk); +err_clk_per:clk_disable_unprepare (priv->ahbclk); err_clk_ahb:clk_disable_unprepare (priv->usbclk);
@@ -259,6 +268,7 @@ static int __exit ehci_mxc_drv_remove(struct platform_device *pdev)clk_disable_unprepare (priv->usbclk);clk_disable_unprepare (priv->ahbclk); +clk_disable_unprepare (priv->perclk);if (priv->phyclk)clk_disable_unprepare (priv->phyclk);
Signature · 1 line
1.7.8.6
Fabio Estevam
reviewerPATCH 2/2 mxc: enable EHCI PER clock
Quoted 3 lines · Gwenhael Goavec-Merou
EHCI PER clock (aka
usb_div) must be enabled to have EHCI driver working.Signed-off-by Gwenhael Goavec-Merou <[email protected]>
Have you considered to use the chipidea usb driver in mx27 instead? mx28/mx6 are already converted to the chipidea usb driver.
Regards,
Fabio Estevm
PATCH 2/2 mxc: enable EHCI PER clock
Dear Fabio Estevam,
Quoted 9 lines
On Wed, Dec 19, 2012 at 4:29 PM, Gwenhael Goavec-Merou
Quoted 3 lines · <[email protected]> wrote:
EHCI PER clock (aka
usb_div) must be enabled to have EHCI driver working.Signed-off-by Gwenhael Goavec-Merou <[email protected]>Have you considered to use the chipidea usb driver in mx27 instead? mx28/mx6 are already converted to the chipidea usb driver.
True, we should kill ehci-mxc ASAP. On the other hand, I'm not opposed to applying these, just bear in mind the driver might just disappear.
Best regards,
Marek Vasut
Sascha Hauer
maintainerPATCH 2/2 mxc: enable EHCI PER clock
In reply to Gwenhael Goavec-MerouQuoted 21 lines · Gwenhael Goavec-Merou
EHCI PER clock (aka
usb_div) must be enabled to have EHCI driver working.Signed-off-by Gwenhael Goavec-Merou <[email protected]>--- drivers/usb/host/ehci-mxc.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)drivers/usb/host/ehci-mxc.c +1
-1@@ -31,7 +31,7 @@#define ULPI_VIEWPORT_OFFSET 0x170struct ehci_mxc_priv { -struct clk *usbclk, *ahbclk, *phyclk; +struct clk *usbclk, *ahbclk, *perclk, *phyclk;struct usb_hcd *hcd; };
drivers/usb/host/ehci-mxc.c static int ehci_mxc_drv_probe(struct platform_device *pdev) · line 158
Quoted 9 lines
drivers/usb/host/ehci-mxc.c +6
-0@@ -150,6 +150,13 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) }clk_prepare_enable (priv->ahbclk); + priv->perclk =devm_clk_get (&pdev->dev,"per" ); +if (IS_ERR (priv->perclk)) { + ret =PTR_ERR (priv->perclk); + goto err_clk_per; + } +clk_prepare_enable (priv->perclk);
Have you checked this clock is present on all SoCs using this driver?
Other than that, +1 on using the chipidea driver as Fabio and Marek already noted.
Sascha
Signature · 4 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
PATCH 2/2 mxc: enable EHCI PER clock
Quoted 25 lines · On Wed, 19 Dec 2012 21:29:26 +0100 Sascha Hauer <[email protected]> wrote:
Quoted 24 lines · Gwenhael Goavec-Merou
EHCI PER clock (aka
usb_div) must be enabled to have EHCI driver working.Signed-off-by Gwenhael Goavec-Merou <[email protected]>--- drivers/usb/host/ehci-mxc.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)drivers/usb/host/ehci-mxc.c +1
-1@@ -31,7 +31,7 @@#define ULPI_VIEWPORT_OFFSET 0x170struct ehci_mxc_priv { -struct clk *usbclk, *ahbclk, *phyclk; +struct clk *usbclk, *ahbclk, *perclk, *phyclk;struct usb_hcd *hcd; };@@ -150,6 +150,13 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) }clk_prepare_enable (priv->ahbclk);
Quoted 9 lines
drivers/usb/host/ehci-mxc.c static int ehci_mxc_drv_probe(struct platform_device *pdev) · line 158
Quoted 6 lines
drivers/usb/host/ehci-mxc.c +6
-0+ priv->perclk =devm_clk_get (&pdev->dev,"per" ); +if (IS_ERR (priv->perclk)) { + ret =PTR_ERR (priv->perclk); + goto err_clk_per; + } +clk_prepare_enable (priv->perclk);Have you checked this clock is present on all SoCs using this driver?
Yes
Quoted 4 lines
Other than that, +1 on using the chipidea driver as Fabio and Marek already noted.
True. But I need to use a non-dt board based on imx27. Chipidea is not working yet for this chip and I have currently not enough time to do that.
Gwenha?l
PATCH 2/2 mxc: enable EHCI PER clock
Dear gwenhael.goavec,
Quoted 45 lines
On Wed, 19 Dec 2012 21:29:26 +0100
Quoted 33 lines · Sascha Hauer
Quoted 32 lines · Gwenhael Goavec-Merou
EHCI PER clock (aka
usb_div) must be enabled to have EHCI driver working.Signed-off-by: Gwenhael Goavec-Merou
<[email protected]> ---drivers/usb/host/ehci-mxc.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)drivers/usb/host/ehci-mxc.c +1
-1@@ -31,7 +31,7 @@#define ULPI_VIEWPORT_OFFSET 0x170struct ehci_mxc_priv { -struct clk *usbclk, *ahbclk, *phyclk; +struct clk *usbclk, *ahbclk, *perclk, *phyclk;drivers/usb/host/ehci-mxc.c +0
-0struct usb_hcd *hcd; };@@ -150,6 +150,13 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) }clk_prepare_enable (priv->ahbclk);Quoted 8 lines
drivers/usb/host/ehci-mxc.c static int ehci_mxc_drv_probe(struct platform_device *pdev) · line 158
Quoted 6 lines
drivers/usb/host/ehci-mxc.c +6
-0+ priv->perclk =devm_clk_get (&pdev->dev,"per" ); +if (IS_ERR (priv->perclk)) { + ret =PTR_ERR (priv->perclk); + goto err_clk_per; + } +clk_prepare_enable (priv->perclk);Have you checked this clock is present on all SoCs using this driver?
Quoted 8 lines
Yes
Quoted 2 lines
Other than that, +1 on using the chipidea driver as Fabio and Marek already noted.
True. But I need to use a non-dt board based on imx27. Chipidea is not working yet for this chip and I have currently not enough time to do that.
You're on your own then, sorry :-(
Best regards,
Marek Vasut
PATCH 2/2 mxc: enable EHCI PER clock
Quoted 49 lines · On Tue, 8 Jan 2013 14:01:36 +0100 Marek Vasut <[email protected]> wrote:
Dear gwenhael.goavec,
Quoted 47 lines
On Wed, 19 Dec 2012 21:29:26 +0100
Quoted 33 lines · Sascha Hauer
Quoted 32 lines · Gwenhael Goavec-Merou
EHCI PER clock (aka
usb_div) must be enabled to have EHCI driver working.Signed-off-by: Gwenhael Goavec-Merou
<[email protected]> ---drivers/usb/host/ehci-mxc.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-)drivers/usb/host/ehci-mxc.c +1
-1@@ -31,7 +31,7 @@#define ULPI_VIEWPORT_OFFSET 0x170struct ehci_mxc_priv { -struct clk *usbclk, *ahbclk, *phyclk; +struct clk *usbclk, *ahbclk, *perclk, *phyclk;drivers/usb/host/ehci-mxc.c +0
-0struct usb_hcd *hcd; };@@ -150,6 +150,13 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) }clk_prepare_enable (priv->ahbclk);Quoted 8 lines
drivers/usb/host/ehci-mxc.c static int ehci_mxc_drv_probe(struct platform_device *pdev) · line 158
Quoted 6 lines
drivers/usb/host/ehci-mxc.c +6
-0+ priv->perclk =devm_clk_get (&pdev->dev,"per" ); +if (IS_ERR (priv->perclk)) { + ret =PTR_ERR (priv->perclk); + goto err_clk_per; + } +clk_prepare_enable (priv->perclk);Have you checked this clock is present on all SoCs using this driver?
Yes
Quoted 9 lines
Quoted 6 lines
Quoted 2 lines
Other than that, +1 on using the chipidea driver as Fabio and Marek already noted.
True. But I need to use a non-dt board based on imx27. Chipidea is not working yet for this chip and I have currently not enough time to do that.
You're on your own then, sorry :-(
Yes i Know. But currently all i.MX27 based board without DT support have USB not working.
Gwenhael