From: Felipe Balbi <balbi@ti.com>
To: Peter Chen <hzpeterchen@gmail.com>
Cc: "Marek Vašut" <marex@denx.de>,
devicetree@vger.kernel.org, m.grzeschik@pengutronix.de,
frank.li@freescale.com, linux-doc@vger.kernel.org,
"Alexander Shishkin" <alexander.shishkin@linux.intel.com>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
"balbi@ti.com" <balbi@ti.com>,
"Fabio Estevam" <festevam@gmail.com>,
"Peter Chen" <peter.chen@freescale.com>,
kernel@pengutronix.de, grant.likely@linaro.org,
"Shawn Guo" <shawn.guo@linaro.org>,
rob.herring@calxeda.com, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 08/15] usb: phy-mxs: Add implementation of nofity_suspend and notify_resume
Date: Fri, 13 Dec 2013 14:09:24 -0600 [thread overview]
Message-ID: <20131213200924.GI5292@saruman.home> (raw)
In-Reply-To: <CAL411-rEJN_AkmJEooVB+45qDE8n8CGNq-ODUKMhfPyuQ5fPwA@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 4865 bytes --]
On Fri, Dec 13, 2013 at 02:31:42PM +0800, Peter Chen wrote:
> On Fri, Dec 13, 2013 at 12:32 PM, Felipe Balbi <balbi@ti.com> wrote:
> > On Fri, Dec 13, 2013 at 09:23:38AM +0800, Peter Chen wrote:
> >> Implementation of notify_suspend and notify_resume will be different
> >> according to mxs_phy_data->flags.
> >>
> >> Signed-off-by: Peter Chen <peter.chen@freescale.com>
> >> ---
> >> drivers/usb/phy/phy-mxs-usb.c | 55 ++++++++++++++++++++++++++++++++++++++---
> >> 1 files changed, 51 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
> >> index 0ef930a..e3df53f 100644
> >> --- a/drivers/usb/phy/phy-mxs-usb.c
> >> +++ b/drivers/usb/phy/phy-mxs-usb.c
> >> @@ -166,8 +166,8 @@ static int mxs_phy_suspend(struct usb_phy *x, int suspend)
> >> static int mxs_phy_on_connect(struct usb_phy *phy,
> >> enum usb_device_speed speed)
> >> {
> >> - dev_dbg(phy->dev, "%s speed device has connected\n",
> >> - (speed == USB_SPEED_HIGH) ? "high" : "non-high");
> >> + dev_dbg(phy->dev, "%s device has connected\n",
> >> + (speed == USB_SPEED_HIGH) ? "HS" : "FS/LS");
> >
> > unrelated.
> >
> >> @@ -179,8 +179,8 @@ static int mxs_phy_on_connect(struct usb_phy *phy,
> >> static int mxs_phy_on_disconnect(struct usb_phy *phy,
> >> enum usb_device_speed speed)
> >> {
> >> - dev_dbg(phy->dev, "%s speed device has disconnected\n",
> >> - (speed == USB_SPEED_HIGH) ? "high" : "non-high");
> >> + dev_dbg(phy->dev, "%s device has disconnected\n",
> >> + (speed == USB_SPEED_HIGH) ? "HS" : "FS/LS");
> >
> > unrelated.
> >
>
> Marek suggested using that string, I will added it at another patch.
>
> >> @@ -189,6 +189,48 @@ static int mxs_phy_on_disconnect(struct usb_phy *phy,
> >> return 0;
> >> }
> >>
> >> +static int mxs_phy_on_suspend(struct usb_phy *phy,
> >> + enum usb_device_speed speed)
> >> +{
> >> + struct mxs_phy *mxs_phy = to_mxs_phy(phy);
> >> +
> >> + dev_dbg(phy->dev, "%s device has suspended\n",
> >> + (speed == USB_SPEED_HIGH) ? "HS" : "FS/LS");
> >> +
> >> + /* delay 4ms to wait bus entering idle */
> >> + usleep_range(4000, 5000);
> >> +
> >> + if (mxs_phy->data->flags & MXS_PHY_ABNORMAL_IN_SUSPEND) {
> >> + writel_relaxed(0xffffffff, phy->io_priv + HW_USBPHY_PWD);
> >> + writel_relaxed(0, phy->io_priv + HW_USBPHY_PWD);
> >> + }
> >> +
> >> + if (speed == USB_SPEED_HIGH)
> >> + writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
> >> + phy->io_priv + HW_USBPHY_CTRL_CLR);
> >
> > why only on HS ? So if !HS and !ABNORMAL, this is no-op.
> >
> >> +static int mxs_phy_on_resume(struct usb_phy *phy,
> >> + enum usb_device_speed speed)
> >> +{
> >> + dev_dbg(phy->dev, "%s device has resumed\n",
> >> + (speed == USB_SPEED_HIGH) ? "HS" : "FS/LS");
> >> +
> >> + if (speed == USB_SPEED_HIGH) {
> >> + /* Make sure the device has switched to High-Speed mode */
> >> + udelay(500);
> >> + writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
> >> + phy->io_priv + HW_USBPHY_CTRL_SET);
> >> + }
> >
> > likewise, if !HS it's a no-op.
> >
>
> Correct, this operation is only needed for HS.
>
> >> @@ -235,6 +277,11 @@ static int mxs_phy_probe(struct platform_device *pdev)
> >>
> >> platform_set_drvdata(pdev, mxs_phy);
> >>
> >> + if (mxs_phy->data->flags & MXS_PHY_SENDING_SOF_TOO_FAST) {
> >> + mxs_phy->phy.notify_suspend = mxs_phy_on_suspend;
> >> + mxs_phy->phy.notify_resume = mxs_phy_on_resume;
> >> + }
> >
> > hmm, and seems like you only need notify_* on a buggy device. Sorry
> > Peter but you don't have enough arguments to make me agree with this
> > (and previous) patch.
> >
> > You gotta find a better way to handle this using normal phy
> > suspend/resume calls.
> >
>
> Like I explained at previous patch, it needs to be notified during
> ehci suspend/resume.
> I admit it is a SoC bug, but all SoCs have bugs, hmm.
> Software needs the solution to workaround it which breaks the standard USB spec.
Then I think what you need is a real notification mechanism. usbcore
already notifies about buses and devices being added and removed,
perhaps you can convince Greg to accept suspend/resume notifications.
With that, you can (conditionally) make this driver listen to usbcore
notifications. That'll be more work, but I guess it's best in the long
run as we won't need to keep on adding callbacks to the USB PHY
structure just because another buggy device showed up on the market.
--
balbi
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2013-12-13 20:09 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-13 1:23 [PATCH v6 00/15] Add power management support for mxs phy Peter Chen
2013-12-13 1:23 ` [PATCH v6 01/15] usb: doc: phy-mxs: Add more compatible strings Peter Chen
2013-12-13 7:15 ` Lothar Waßmann
2013-12-13 7:24 ` Peter Chen
2013-12-13 7:38 ` Lothar Waßmann
2013-12-13 7:58 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 02/15] usb: phy-mxs: Add platform judgement code Peter Chen
2013-12-13 4:19 ` Felipe Balbi
[not found] ` <20131213041918.GC867-HgARHv6XitL9zxVx7UNMDg@public.gmane.org>
2013-12-13 5:15 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 03/15] usb: phy-mxs: Add auto clock and power setting Peter Chen
2013-12-13 4:23 ` Felipe Balbi
2013-12-13 5:55 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 04/15] usb: doc: phy-mxs: update binding for adding anatop phandle Peter Chen
2013-12-13 4:25 ` Felipe Balbi
[not found] ` <20131213042504.GE867-HgARHv6XitL9zxVx7UNMDg@public.gmane.org>
2013-12-13 6:00 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 05/15] ARM: dts: imx6: add anatop phandle for usbphy Peter Chen
[not found] ` <1386897825-6130-1-git-send-email-peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-12-13 1:23 ` [PATCH v6 06/15] usb: phy-mxs: Add anatop regmap Peter Chen
2013-12-13 4:26 ` Felipe Balbi
[not found] ` <20131213042627.GF867-HgARHv6XitL9zxVx7UNMDg@public.gmane.org>
2013-12-13 6:04 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 07/15] usb: phy: add notify suspend and resume callback Peter Chen
[not found] ` <1386897825-6130-8-git-send-email-peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-12-13 4:27 ` Felipe Balbi
[not found] ` <20131213042722.GG867-HgARHv6XitL9zxVx7UNMDg@public.gmane.org>
2013-12-13 6:23 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 08/15] usb: phy-mxs: Add implementation of nofity_suspend and notify_resume Peter Chen
2013-12-13 4:32 ` Felipe Balbi
2013-12-13 6:31 ` Peter Chen
2013-12-13 20:09 ` Felipe Balbi [this message]
2013-12-16 1:12 ` Peter Chen
2013-12-16 21:31 ` Felipe Balbi
2013-12-13 1:23 ` [PATCH v6 11/15] usb: phy-mxs: add controller id Peter Chen
2013-12-13 1:23 ` [PATCH v6 13/15] usb: phy-mxs: Add implementation of set_wakeup Peter Chen
2013-12-13 1:23 ` [PATCH v6 14/15] usb: phy-mxs: Add system suspend/resume API Peter Chen
2013-12-13 4:38 ` Felipe Balbi
[not found] ` <20131213043838.GI867-HgARHv6XitL9zxVx7UNMDg@public.gmane.org>
2013-12-13 6:34 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 15/15] usb: phy-mxs: Add sync time after controller clear phcd Peter Chen
[not found] ` <1386897825-6130-16-git-send-email-peter.chen-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-12-13 4:39 ` Felipe Balbi
2013-12-13 6:50 ` Peter Chen
2013-12-13 1:23 ` [PATCH v6 09/15] usb: phy-mxs: Enable IC fixes for related SoCs Peter Chen
2013-12-13 1:23 ` [PATCH v6 10/15] ARM: dts: imx: add mxs phy controller id Peter Chen
2013-12-13 1:23 ` [PATCH v6 12/15] usb: phy: Add set_wakeup API Peter Chen
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=20131213200924.GI5292@saruman.home \
--to=balbi@ti.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=frank.li@freescale.com \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=hzpeterchen@gmail.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=m.grzeschik@pengutronix.de \
--cc=marex@denx.de \
--cc=peter.chen@freescale.com \
--cc=rob.herring@calxeda.com \
--cc=shawn.guo@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).