Re: [RFC] usb issue on imx27: 3 clocks are needed

From: gwenhael.goavec
Date: Mon Aug 18 2014 - 08:03:53 EST


On Mon, 18 Aug 2014 10:35:53 +0000
Peter Chen <Peter.Chen@xxxxxxxxxxxxx> wrote:

>
> > On Mon, Aug 18, 2014 at 05:00:59PM +0800, Peter Chen wrote:
> > > On Sat, Aug 16, 2014 at 05:38:30PM +0200, Philippe Reynes wrote:
> > > > Hi all,
> > > >
> > > > i.MX27's usb needs three clocks (usb_ipg_gate, usb_ahb_gate and
> > > > usb_div) but the current chipidea driver implementation, and
> > > > devicetree, provides only ipg and ahb. Consequently, if the
> > > > bootloader don't enable the last one, the kernel will crash.
> > > >
> > > > Our approach/idea is to add a second, optionnal, clock in
> > > > ci_hdrc_imx.c with 'per' name in devicetree and to add clock name
> > 'main_clk' for mandatory clock.
> > > > This approach it correct? Or an other approach seems better?
> > > > Thank you very much for your point of view.
> > > >
> > >
> > > It is ok for me to have ipg, ahb and per clocks at driver, but how can
> > > you maintain DT consistent?
> >
> > Adding new clock as optional one will just maintain the DT compatibility.
> >
>
> How to handle node_usb_soc1's clock which is without clk name to consistent with three
> clocks for node_usb_soc2 at driver? Except for adding some platform judge code at
> driver, do you have other solutions?
>
> node_usb_soc1: {
> clocks = <&clks IMX6_CLK_USBOH3>;
> };
>
> node_usb_soc2: {
> clocks = <&clks IMX27_CLK_USBIPG>, <&clks IMX27_CLK_USBOH3>, <&clks IMX27_CLK_USBPER>;
> clock-names = "ipg", "ahb", "per";
> };
>
> Peter
> --

Our idea is something like this :
node_usb_soc: {
clocks = <&clks IMX27_CLK_USBxxx>;
clock-names = "main_clk";
};
for all CPUs

and
node_usb_imx27: {
clocks = <&clks IMX27_CLK_USB_IPG_GATE>,
<&clks IMX27_CLK_USB_DIV>;
clock-names = "main_clk", "per";
};

For imx27 and CPUs with the need of more than one clock.

The last clock (ie ahb) is handled by usbmisc.c and if "per" clock is not
present in the dtsi chipidea will not fails, just setting data->per_clk = NULL
for prepare/unprepare.

Gwenhael
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/