All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Chen-Yu Tsai <wens@csie.org>, linux-sunxi <linux-sunxi@googlegroups.com>
Cc: Emilio Lopez <emilio@elopez.com.ar>,
	Mike Turquette <mturquette@linaro.org>,
	stern@rowland.harvard.edu, Kishon Vijay Abraham I <kishon@ti.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,
	Maxime Ripard <maxime.ripard@free-electrons.com>
Subject: Re: [linux-sunxi] [PATCH v2 3/7] phy: usb: sunxi: Introduce Allwinner A31 USB PHY support
Date: Mon, 12 May 2014 13:59:06 +0200	[thread overview]
Message-ID: <5370B78A.7060709@redhat.com> (raw)
In-Reply-To: <CAGb2v65Pstk6MqEeK838VUpNXw2cQH8K66Oo4oG3__zzWO3pig@mail.gmail.com>

Hi,

On 05/12/2014 11:14 AM, 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.

Good catch, fixed this in the sunxi-devel branch for now (until Maxime sends a new version).

Regards,

Hans

WARNING: multiple messages have this Message-ID (diff)
From: hdegoede@redhat.com (Hans de Goede)
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 13:59:06 +0200	[thread overview]
Message-ID: <5370B78A.7060709@redhat.com> (raw)
In-Reply-To: <CAGb2v65Pstk6MqEeK838VUpNXw2cQH8K66Oo4oG3__zzWO3pig@mail.gmail.com>

Hi,

On 05/12/2014 11:14 AM, 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.

Good catch, fixed this in the sunxi-devel branch for now (until Maxime sends a new version).

Regards,

Hans

  reply	other threads:[~2014-05-12 11:59 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 [this message]
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
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=5370B78A.7060709@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=boris@free-electrons.com \
    --cc=emilio@elopez.com.ar \
    --cc=kevin.z.m.zh@gmail.com \
    --cc=kishon@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=maxime.ripard@free-electrons.com \
    --cc=mturquette@linaro.org \
    --cc=shuge@allwinnertech.com \
    --cc=stern@rowland.harvard.edu \
    --cc=sunny@allwinnertech.com \
    --cc=wens@csie.org \
    --cc=zhuzhenhua@allwinnertech.com \
    /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.