All of lore.kernel.org
 help / color / mirror / Atom feed
From: maxime.ripard@free-electrons.com (Maxime Ripard)
To: linux-arm-kernel@lists.infradead.org
Subject: [linux-sunxi] [PATCH v2 3/7] phy: usb: sunxi: Introduce Allwinner A31 USB PHY support
Date: Mon, 12 May 2014 17:04:09 +0200	[thread overview]
Message-ID: <20140512150409.GB17154@lukather> (raw)
In-Reply-To: <CAGb2v65Pstk6MqEeK838VUpNXw2cQH8K66Oo4oG3__zzWO3pig@mail.gmail.com>

On Mon, May 12, 2014 at 05:14:26PM +0800, Chen-Yu Tsai wrote:
> Hi,
> 
> On Sat, May 10, 2014 at 8:56 PM, Maxime Ripard
> <maxime.ripard@free-electrons.com> wrote:
> > The USB phy controller in the A31 differs mostly from the older controllers
> > because it has a clock dedicated for each phy, while the older ones were having
> > a single clock for all the phys.
> >
> > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> > Reviewed-by: Hans de Goede <hdegoede@redhat.com>
> > ---
> >  drivers/phy/phy-sun4i-usb.c | 35 ++++++++++++++++++++++++++---------
> >  1 file changed, 26 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
> > index e6e6c4ba7145..8bd89430d945 100644
> > --- a/drivers/phy/phy-sun4i-usb.c
> > +++ b/drivers/phy/phy-sun4i-usb.c
> > @@ -61,7 +61,6 @@
> >  #define MAX_PHYS                       3
> >
> >  struct sun4i_usb_phy_data {
> > -       struct clk *clk;
> >         void __iomem *base;
> >         struct mutex mutex;
> >         int num_phys;
> > @@ -71,6 +70,7 @@ struct sun4i_usb_phy_data {
> >                 void __iomem *pmu;
> >                 struct regulator *vbus;
> >                 struct reset_control *reset;
> > +               struct clk *clk;
> >                 int index;
> >         } phys[MAX_PHYS];
> >  };
> > @@ -146,13 +146,13 @@ static int sun4i_usb_phy_init(struct phy *_phy)
> >         struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
> >         int ret;
> >
> > -       ret = clk_prepare_enable(data->clk);
> > +       ret = clk_prepare_enable(phy->clk);
> >         if (ret)
> >                 return ret;
> >
> >         ret = reset_control_deassert(phy->reset);
> >         if (ret) {
> > -               clk_disable_unprepare(data->clk);
> > +               clk_disable_unprepare(phy->clk);
> >                 return ret;
> >         }
> >
> > @@ -170,11 +170,10 @@ static int sun4i_usb_phy_init(struct phy *_phy)
> >  static int sun4i_usb_phy_exit(struct phy *_phy)
> >  {
> >         struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
> > -       struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
> >
> >         sun4i_usb_phy_passby(phy, 0);
> >         reset_control_assert(phy->reset);
> > -       clk_disable_unprepare(data->clk);
> > +       clk_disable_unprepare(phy->clk);
> >
> >         return 0;
> >  }
> > @@ -228,8 +227,10 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
> >         struct phy_provider *phy_provider;
> >         struct reset_control *reset;
> >         struct regulator *vbus;
> > +       bool dedicated_clocks;
> 
> No default?
> 
> >         struct resource *res;
> >         struct phy *phy;
> > +       struct clk *clk;
> >         char name[16];
> >         int i;
> >
> > @@ -249,15 +250,20 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
> >         else
> >                 data->disc_thresh = 2;
> >
> > +       if (of_device_is_compatible(np, "allwinner,sun6i-a31-usb-phy"))
> > +               dedicated_clocks = true;
> > +
> 
> dedicated_clocks is more than likely to be true from leftover data
> on the stack. This results in the usb phy driver probe failing, and
> the usb host drivers left in perpetual probe deferral on my Cubietruck.
> 
> Adding an else section fixes this.

Oh, yes. Stupid me. It used to be in a kzalloc'd section, so I didn't
have the error, and didn't properly test it because it was trivial.

Thanks for catching this, I'll submit a v3.

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140512/731dfb57/attachment.sig>

WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: Chen-Yu Tsai <wens@csie.org>
Cc: linux-sunxi <linux-sunxi@googlegroups.com>,
	Emilio Lopez <emilio@elopez.com.ar>,
	Mike Turquette <mturquette@linaro.org>,
	stern@rowland.harvard.edu, Kishon Vijay Abraham I <kishon@ti.com>,
	Hans De Goede <hdegoede@redhat.com>,
	Boris Brezillon <boris@free-electrons.com>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	linux-usb <linux-usb@vger.kernel.org>,
	kevin.z.m.zh@gmail.com, sunny@allwinnertech.com,
	Shuge <shuge@allwinnertech.com>,
	zhuzhenhua@allwinnertech.com
Subject: Re: [linux-sunxi] [PATCH v2 3/7] phy: usb: sunxi: Introduce Allwinner A31 USB PHY support
Date: Mon, 12 May 2014 17:04:09 +0200	[thread overview]
Message-ID: <20140512150409.GB17154@lukather> (raw)
In-Reply-To: <CAGb2v65Pstk6MqEeK838VUpNXw2cQH8K66Oo4oG3__zzWO3pig@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3729 bytes --]

On Mon, May 12, 2014 at 05:14:26PM +0800, Chen-Yu Tsai wrote:
> Hi,
> 
> On Sat, May 10, 2014 at 8:56 PM, Maxime Ripard
> <maxime.ripard@free-electrons.com> wrote:
> > The USB phy controller in the A31 differs mostly from the older controllers
> > because it has a clock dedicated for each phy, while the older ones were having
> > a single clock for all the phys.
> >
> > Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
> > Reviewed-by: Hans de Goede <hdegoede@redhat.com>
> > ---
> >  drivers/phy/phy-sun4i-usb.c | 35 ++++++++++++++++++++++++++---------
> >  1 file changed, 26 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
> > index e6e6c4ba7145..8bd89430d945 100644
> > --- a/drivers/phy/phy-sun4i-usb.c
> > +++ b/drivers/phy/phy-sun4i-usb.c
> > @@ -61,7 +61,6 @@
> >  #define MAX_PHYS                       3
> >
> >  struct sun4i_usb_phy_data {
> > -       struct clk *clk;
> >         void __iomem *base;
> >         struct mutex mutex;
> >         int num_phys;
> > @@ -71,6 +70,7 @@ struct sun4i_usb_phy_data {
> >                 void __iomem *pmu;
> >                 struct regulator *vbus;
> >                 struct reset_control *reset;
> > +               struct clk *clk;
> >                 int index;
> >         } phys[MAX_PHYS];
> >  };
> > @@ -146,13 +146,13 @@ static int sun4i_usb_phy_init(struct phy *_phy)
> >         struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
> >         int ret;
> >
> > -       ret = clk_prepare_enable(data->clk);
> > +       ret = clk_prepare_enable(phy->clk);
> >         if (ret)
> >                 return ret;
> >
> >         ret = reset_control_deassert(phy->reset);
> >         if (ret) {
> > -               clk_disable_unprepare(data->clk);
> > +               clk_disable_unprepare(phy->clk);
> >                 return ret;
> >         }
> >
> > @@ -170,11 +170,10 @@ static int sun4i_usb_phy_init(struct phy *_phy)
> >  static int sun4i_usb_phy_exit(struct phy *_phy)
> >  {
> >         struct sun4i_usb_phy *phy = phy_get_drvdata(_phy);
> > -       struct sun4i_usb_phy_data *data = to_sun4i_usb_phy_data(phy);
> >
> >         sun4i_usb_phy_passby(phy, 0);
> >         reset_control_assert(phy->reset);
> > -       clk_disable_unprepare(data->clk);
> > +       clk_disable_unprepare(phy->clk);
> >
> >         return 0;
> >  }
> > @@ -228,8 +227,10 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
> >         struct phy_provider *phy_provider;
> >         struct reset_control *reset;
> >         struct regulator *vbus;
> > +       bool dedicated_clocks;
> 
> No default?
> 
> >         struct resource *res;
> >         struct phy *phy;
> > +       struct clk *clk;
> >         char name[16];
> >         int i;
> >
> > @@ -249,15 +250,20 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
> >         else
> >                 data->disc_thresh = 2;
> >
> > +       if (of_device_is_compatible(np, "allwinner,sun6i-a31-usb-phy"))
> > +               dedicated_clocks = true;
> > +
> 
> dedicated_clocks is more than likely to be true from leftover data
> on the stack. This results in the usb phy driver probe failing, and
> the usb host drivers left in perpetual probe deferral on my Cubietruck.
> 
> Adding an else section fixes this.

Oh, yes. Stupid me. It used to be in a kzalloc'd section, so I didn't
have the error, and didn't properly test it because it was trivial.

Thanks for catching this, I'll submit a v3.

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  parent reply	other threads:[~2014-05-12 15:04 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-10 12:56 [PATCH v2 0/7] Add Allwinner A31 USB support Maxime Ripard
2014-05-10 12:56 ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 1/7] clk: sunxi: Implement A31 USB clock Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 2/7] ARM: sun6i: Add the USB clocks to the DTSI Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 3/7] phy: usb: sunxi: Introduce Allwinner A31 USB PHY support Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard
2014-05-12  9:14   ` [linux-sunxi] " Chen-Yu Tsai
2014-05-12  9:14     ` Chen-Yu Tsai
2014-05-12 11:59     ` Hans de Goede
2014-05-12 11:59       ` Hans de Goede
2014-05-12 12:24       ` Kishon Vijay Abraham I
2014-05-12 12:24         ` Kishon Vijay Abraham I
2014-05-12 12:27         ` Hans de Goede
2014-05-12 12:27           ` Hans de Goede
2014-05-12 15:04     ` Maxime Ripard [this message]
2014-05-12 15:04       ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 4/7] usb: ehci-platform: add optional reset controller retrieval Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard
2014-05-10 14:35   ` Alan Stern
2014-05-10 14:35     ` Alan Stern
2014-05-12 14:30     ` Maxime Ripard
2014-05-12 14:30       ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 5/7] usb: ohci-platform: Enable optional use of reset controller Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 6/7] ARM: sun6i: dt: Add support for the USB controllers Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard
2014-05-10 12:56 ` [PATCH v2 7/7] ARM: sunxi: dt: add APP4-EVB1 board support Maxime Ripard
2014-05-10 12:56   ` Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140512150409.GB17154@lukather \
    --to=maxime.ripard@free-electrons.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.