Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-21 Thread Roger Quadros
On 01/21/2014 12:11 PM, Kishon Vijay Abraham I wrote:
> Since PHYs for dwc3 is optional (not all SoCs that have DWC3 use PHYs),
> do not return from probe if the USB PHY library returns -ENODEV as that
> indicates the platform does not have PHY.
> 
> Signed-off-by: Kishon Vijay Abraham I 

Reviewed-by: Roger Quadros 

cheers,
-roger

> ---
>  drivers/usb/dwc3/core.c |   34 ++
>  1 file changed, 14 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index a49217a..e009d4e 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -411,32 +411,26 @@ static int dwc3_probe(struct platform_device *pdev)
>  
>   if (IS_ERR(dwc->usb2_phy)) {
>   ret = PTR_ERR(dwc->usb2_phy);
> -
> - /*
> -  * if -ENXIO is returned, it means PHY layer wasn't
> -  * enabled, so it makes no sense to return -EPROBE_DEFER
> -  * in that case, since no PHY driver will ever probe.
> -  */
> - if (ret == -ENXIO)
> + if (ret == -ENXIO || ret == -ENODEV) {
> + dwc->usb2_phy = NULL;
> + } else if (ret == -EPROBE_DEFER) {
>   return ret;
> -
> - dev_err(dev, "no usb2 phy configured\n");
> - return -EPROBE_DEFER;
> + } else {
> + dev_err(dev, "no usb2 phy configured\n");
> + return ret;
> + }
>   }
>  
>   if (IS_ERR(dwc->usb3_phy)) {
>   ret = PTR_ERR(dwc->usb3_phy);
> -
> - /*
> -  * if -ENXIO is returned, it means PHY layer wasn't
> -  * enabled, so it makes no sense to return -EPROBE_DEFER
> -  * in that case, since no PHY driver will ever probe.
> -  */
> - if (ret == -ENXIO)
> + if (ret == -ENXIO || ret == -ENODEV) {
> + dwc->usb3_phy = NULL;
> + } else if (ret == -EPROBE_DEFER) {
>   return ret;
> -
> - dev_err(dev, "no usb3 phy configured\n");
> - return -EPROBE_DEFER;
> + } else {
> + dev_err(dev, "no usb3 phy configured\n");
> + return ret;
> + }
>   }
>  
>   dwc->xhci_resources[0].start = res->start;
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-21 Thread Felipe Balbi
On Tue, Jan 21, 2014 at 03:41:38PM +0530, Kishon Vijay Abraham I wrote:
> Since PHYs for dwc3 is optional (not all SoCs that have DWC3 use PHYs),
> do not return from probe if the USB PHY library returns -ENODEV as that

this isn't correct, they all have PHYs, some of them might not be
controllable.

> indicates the platform does not have PHY.

not really, that indicates the current platform tried to grab a PHY and
the PHY doesn't exist. If there's anybody with a non-controllable PHY
and someone gives me a really good reason for not using the generic
no-op PHY, then we should add a flag and we could:

if (!likely(dwc->flags & DWC3_USB2PHY_DRIVER_NOT_NEEDED))
dwc3_grab_phys(dwc);

But I really want to see the argument against using no-op. As far as I
could see, everybody needs a PHY driver one way or another, some
platforms just haven't sent any PHY driver upstream and have their own
hacked up solution to avoid using the PHY layer.

Your commit log really needs quite some extra work. What are you trying
to achieve ? Is this related to AM437x which doesn't have a USB3 PHY due
to the way the HW was wired up ? If so, please mention it. Explain how
AM437x HW was wired up, why it lacks a USB3 PHY and why we should
support it the way you want.

That sort of detail needs to be clear in the commit log, specially
considering the peculiar nature of AM43xx which uses a USB3 IP in
USB2-only mode, that needs to be documented in the commit log :-)

cheers

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-24 Thread Kishon Vijay Abraham I
Hi,

On Tuesday 21 January 2014 08:17 PM, Felipe Balbi wrote:
> On Tue, Jan 21, 2014 at 03:41:38PM +0530, Kishon Vijay Abraham I wrote:
>> Since PHYs for dwc3 is optional (not all SoCs that have DWC3 use PHYs),
>> do not return from probe if the USB PHY library returns -ENODEV as that
> 
> this isn't correct, they all have PHYs, some of them might not be
> controllable.

right, but we use USB PHY library only for controllable PHYs (apart from using
nop).
> 
>> indicates the platform does not have PHY.
> 
> not really, that indicates the current platform tried to grab a PHY and
> the PHY doesn't exist. If there's anybody with a non-controllable PHY
> and someone gives me a really good reason for not using the generic
> no-op PHY, then we should add a flag and we could:
> 
>   if (!likely(dwc->flags & DWC3_USB2PHY_DRIVER_NOT_NEEDED))
>   dwc3_grab_phys(dwc);
> 
> But I really want to see the argument against using no-op. As far as I
> could see, everybody needs a PHY driver one way or another, some
> platforms just haven't sent any PHY driver upstream and have their own
> hacked up solution to avoid using the PHY layer.

I was trying to address Heikki concerns in my previous version [1] where I used
quirks to identify if the platform does not have PHY.

[1] -> https://lkml.org/lkml/2013/12/5/32

Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-27 Thread Heikki Krogerus
Hi Felipe,

On Tue, Jan 21, 2014 at 08:47:25AM -0600, Felipe Balbi wrote:
> On Tue, Jan 21, 2014 at 03:41:38PM +0530, Kishon Vijay Abraham I wrote:
> > Since PHYs for dwc3 is optional (not all SoCs that have DWC3 use PHYs),
> > do not return from probe if the USB PHY library returns -ENODEV as that
> 
> this isn't correct, they all have PHYs, some of them might not be
> controllable.
> 
> > indicates the platform does not have PHY.
> 
> not really, that indicates the current platform tried to grab a PHY and
> the PHY doesn't exist. If there's anybody with a non-controllable PHY
> and someone gives me a really good reason for not using the generic
> no-op PHY, then we should add a flag and we could:
> 
>   if (!likely(dwc->flags & DWC3_USB2PHY_DRIVER_NOT_NEEDED))
>   dwc3_grab_phys(dwc);

Why would you need to know if the PHY drivers are needed or not
explicitly in your controller driver?

> But I really want to see the argument against using no-op. As far as I
> could see, everybody needs a PHY driver one way or another, some
> platforms just haven't sent any PHY driver upstream and have their own
> hacked up solution to avoid using the PHY layer.

Not true in our case. Platforms using Intel's SoCs and chip sets may
or may not have controllable USB PHY. Quite often they don't. The
Baytrails have usually ULPI PHY for USB2, but that does not mean they
provide any vendor specific functions or any need for a driver in any
case.

Are we talking about the old USB PHY library or the new PHY framework
with the no-op PHY driver?

Well, in any case, I don't understand what is the purpose of the no-op
PHY driver. What are you drying to achieve with that?


Thanks,

-- 
heikki
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-27 Thread Felipe Balbi
Hi,

On Mon, Jan 27, 2014 at 05:08:55PM +0200, Heikki Krogerus wrote:
> > > Since PHYs for dwc3 is optional (not all SoCs that have DWC3 use PHYs),
> > > do not return from probe if the USB PHY library returns -ENODEV as that
> > 
> > this isn't correct, they all have PHYs, some of them might not be
> > controllable.
> > 
> > > indicates the platform does not have PHY.
> > 
> > not really, that indicates the current platform tried to grab a PHY and
> > the PHY doesn't exist. If there's anybody with a non-controllable PHY
> > and someone gives me a really good reason for not using the generic
> > no-op PHY, then we should add a flag and we could:
> > 
> > if (!likely(dwc->flags & DWC3_USB2PHY_DRIVER_NOT_NEEDED))
> > dwc3_grab_phys(dwc);
> 
> Why would you need to know if the PHY drivers are needed or not
> explicitly in your controller driver?

because, one way or another, they all do need it. Except for quirky ones
like AM437x where a USB3 IP was hardwired into USB2-only mode, so it
really lacks a USB3 PHY.

> > But I really want to see the argument against using no-op. As far as I
> > could see, everybody needs a PHY driver one way or another, some
> > platforms just haven't sent any PHY driver upstream and have their own
> > hacked up solution to avoid using the PHY layer.
> 
> Not true in our case. Platforms using Intel's SoCs and chip sets may
> or may not have controllable USB PHY. Quite often they don't. The
> Baytrails have usually ULPI PHY for USB2, but that does not mean they
> provide any vendor specific functions or any need for a driver in any
> case.

that's different from what I heard.

> Are we talking about the old USB PHY library or the new PHY framework
> with the no-op PHY driver?
> 
> Well, in any case, I don't understand what is the purpose of the no-op
> PHY driver. What are you drying to achieve with that?

I'm trying to avoid supporting 500 different combinations for a single
driver. We already support old USB PHY layer and generic PHY layer, now
they both need to be made optional. The old USB PHY layer also provides
a no-op, now called phy-generic, which is actually pretty useful.

On top of all that, I'm sure you'll subscribe to the idea of preventing
dwc3 from becoming another MUSB which supports several different
configurations and none work correctly. I much prefer to take baby steps
which are well thought-out and very well exercised, so I'll be very
pedantic about proof of testing.

An invasive change such as $subject needs to be very well-tested in
different architectures with different Kconfig choices before I'd feel
comfortable applying it.

Also, the assumptions made in $subject are just plain wrong, which
gets me really iffy about applying it or not.

cheers

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-28 Thread Heikki Krogerus
Hi,

On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
> > Why would you need to know if the PHY drivers are needed or not
> > explicitly in your controller driver?
> 
> because, one way or another, they all do need it. Except for quirky ones
> like AM437x where a USB3 IP was hardwired into USB2-only mode, so it
> really lacks a USB3 PHY.

The Baytrail board I deal with has completely autonomous PHYs. But my
question is, why would you need to care about the PHYs in your
controller driver? Why can't you leave the responsibility of them to
the upper layers and trust what they tell you?

If there is no USB3 PHY for dwc3 then, the driver gets something like
-ENODEV and just continues. There is no need to know about the
details.

For the controller drivers the PHYs are just a resource like any
other. The controller drivers can't have any responsibility of
them. They should not care if PHY drivers are available for them or
not, or even if the PHY framework is available or not.

> > > But I really want to see the argument against using no-op. As far as I
> > > could see, everybody needs a PHY driver one way or another, some
> > > platforms just haven't sent any PHY driver upstream and have their own
> > > hacked up solution to avoid using the PHY layer.
> > 
> > Not true in our case. Platforms using Intel's SoCs and chip sets may
> > or may not have controllable USB PHY. Quite often they don't. The
> > Baytrails have usually ULPI PHY for USB2, but that does not mean they
> > provide any vendor specific functions or any need for a driver in any
> > case.
> 
> that's different from what I heard.

I don't know where you got that impression, but it's not true. The
Baytrail SoCs for example don't have internal USB PHYs, which means
the manufacturers using it can select what they want. So we have
boards where PHY driver(s) is needed and boards where it isn't.

The problem is that we just don't always know all the details about
the platform. If the PHY is ULPI PHY, we can do runtime detection, but
we can't even rely on always having ULPI.

> > Are we talking about the old USB PHY library or the new PHY framework
> > with the no-op PHY driver?
> > 
> > Well, in any case, I don't understand what is the purpose of the no-op
> > PHY driver. What are you drying to achieve with that?
> 
> I'm trying to avoid supporting 500 different combinations for a single
> driver. We already support old USB PHY layer and generic PHY layer, now
> they both need to be made optional.

This is really good to get. We have some projects where we are dealing
with more embedded environments, like IVI, where the kernel should be
stripped of everything useless. Since the PHYs are autonomous, we
should be able to disable the PHY libraries/frameworks.

But I still don't understand what is the benefit in the no-op? You
really need to explain this. What you have now in dwc3 is expectations
regarding the PHY, which put a lot of pressure on upper layers to
satisfy the driver. The no-op is just an extra thing that you have to
provide when you fail to determine if the system requires a PHY driver
or not, or if you know that it doesn't, plus an additional check for
the case where the PHY lib/framework is not enabled. I don't see the
value in it.

> The old USB PHY layer also provides
> a no-op, now called phy-generic, which is actually pretty useful.
> 
> On top of all that, I'm sure you'll subscribe to the idea of preventing
> dwc3 from becoming another MUSB which supports several different
> configurations and none work correctly. I much prefer to take baby steps
> which are well thought-out and very well exercised, so I'll be very
> pedantic about proof of testing.

I think our goals are the same. I just want to also minimize the need
for any platform specific extra work from the upper layers regarding
the PHYs.


Thanks,

-- 
heikki
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-28 Thread Felipe Balbi
Hi,

On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
> > > Why would you need to know if the PHY drivers are needed or not
> > > explicitly in your controller driver?
> > 
> > because, one way or another, they all do need it. Except for quirky ones
> > like AM437x where a USB3 IP was hardwired into USB2-only mode, so it
> > really lacks a USB3 PHY.
> 
> The Baytrail board I deal with has completely autonomous PHYs. But my
> question is, why would you need to care about the PHYs in your
> controller driver? Why can't you leave the responsibility of them to
> the upper layers and trust what they tell you?
> 
> If there is no USB3 PHY for dwc3 then, the driver gets something like
> -ENODEV and just continues. There is no need to know about the
> details.

it's a little more complicated than that. We could get -EPROBE_DEFER
meaning we should try probing at a later time because the PHY isn't
available yet.

But sure, if we can very easily differentiate between those two
conditions in a way that error report from PHY layer (whichever it is),
then we can certainly do that.

> For the controller drivers the PHYs are just a resource like any
> other. The controller drivers can't have any responsibility of
> them. They should not care if PHY drivers are available for them or
> not, or even if the PHY framework is available or not.

huh? If memory isn't available you don't continue probing, right ? If
your IORESOURCE_MEM is missing, you also don't continue probing, if your
IRQ line is missing, you bail too. Those are also nothing but resources
to the driver, what you're asking here is to treat PHY as a _different_
resource; which might be fine, but we need to make sure we don't
continue probing when a PHY is missing in a platform that certainly
needs a PHY.

> > > > But I really want to see the argument against using no-op. As far as I
> > > > could see, everybody needs a PHY driver one way or another, some
> > > > platforms just haven't sent any PHY driver upstream and have their own
> > > > hacked up solution to avoid using the PHY layer.
> > > 
> > > Not true in our case. Platforms using Intel's SoCs and chip sets may
> > > or may not have controllable USB PHY. Quite often they don't. The
> > > Baytrails have usually ULPI PHY for USB2, but that does not mean they
> > > provide any vendor specific functions or any need for a driver in any
> > > case.
> > 
> > that's different from what I heard.
> 
> I don't know where you got that impression, but it's not true. The
> Baytrail SoCs for example don't have internal USB PHYs, which means
> the manufacturers using it can select what they want. So we have
> boards where PHY driver(s) is needed and boards where it isn't.

alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
You have an external PIPE3 interface ? That's quite an achievement,
kudos to your HW designers. Getting timing closure on PIPE3 is a
difficult task.

> The problem is that we just don't always know all the details about
> the platform. If the PHY is ULPI PHY, we can do runtime detection, but
> we can't even rely on always having ULPI.

right, we've had that before on n900 ;-)

> > > Are we talking about the old USB PHY library or the new PHY framework
> > > with the no-op PHY driver?
> > > 
> > > Well, in any case, I don't understand what is the purpose of the no-op
> > > PHY driver. What are you drying to achieve with that?
> > 
> > I'm trying to avoid supporting 500 different combinations for a single
> > driver. We already support old USB PHY layer and generic PHY layer, now
> > they both need to be made optional.
> 
> This is really good to get. We have some projects where we are dealing
> with more embedded environments, like IVI, where the kernel should be
> stripped of everything useless. Since the PHYs are autonomous, we
> should be able to disable the PHY libraries/frameworks.

hmmm, in that case it's a lot easier to treat. We can use
ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
something like that.

The difficult is really reliably supporting e.g. OMAP5 (which won't work
without a PHY) and your BayTrail with autonomous PHYs. What can we use
as an indication ?

I mean, I need to know that a particular platform depends on a PHY
driver before I decide to return -EPROBE_DEFER or just assume the PHY
isn't needed ;-)

> But I still don't understand what is the benefit in the no-op? You
> really need to explain this. What you have now in dwc3 is expectations
> regarding the PHY, which put a lot of pressure on upper layers to
> satisfy the driver. The no-op is just an extra thing that you have to
> provide when you fail to determine if the system requires a PHY driver
> or not, or if you know that it doesn't, plus an additional check for
> the case where the PHY lib/framework is not enabled. I don't see the
> value in it.

it "solves" the difficulty above. If everybody has to pro

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-01-29 Thread Heikki Krogerus
Hi,

On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
> > On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
> > For the controller drivers the PHYs are just a resource like any
> > other. The controller drivers can't have any responsibility of
> > them. They should not care if PHY drivers are available for them or
> > not, or even if the PHY framework is available or not.
> 
> huh? If memory isn't available you don't continue probing, right ? If
> your IORESOURCE_MEM is missing, you also don't continue probing, if your
> IRQ line is missing, you bail too. Those are also nothing but resources
> to the driver, what you're asking here is to treat PHY as a _different_
> resource; which might be fine, but we need to make sure we don't
> continue probing when a PHY is missing in a platform that certainly
> needs a PHY.

Yes, true. In my head I was comparing the PHY only to resources like
gpios, clocks, dma channels, etc. that are often optional to the
drivers.

> > > > > But I really want to see the argument against using no-op. As far as I
> > > > > could see, everybody needs a PHY driver one way or another, some
> > > > > platforms just haven't sent any PHY driver upstream and have their own
> > > > > hacked up solution to avoid using the PHY layer.
> > > > 
> > > > Not true in our case. Platforms using Intel's SoCs and chip sets may
> > > > or may not have controllable USB PHY. Quite often they don't. The
> > > > Baytrails have usually ULPI PHY for USB2, but that does not mean they
> > > > provide any vendor specific functions or any need for a driver in any
> > > > case.
> > > 
> > > that's different from what I heard.
> > 
> > I don't know where you got that impression, but it's not true. The
> > Baytrail SoCs for example don't have internal USB PHYs, which means
> > the manufacturers using it can select what they want. So we have
> > boards where PHY driver(s) is needed and boards where it isn't.
> 
> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
> You have an external PIPE3 interface ? That's quite an achievement,
> kudos to your HW designers. Getting timing closure on PIPE3 is a
> difficult task.

No, only the USB2 PHY is external. I'm giving you wrong information,
I'm sorry about that. Need to concentrate on what I'm writing.



> > This is really good to get. We have some projects where we are dealing
> > with more embedded environments, like IVI, where the kernel should be
> > stripped of everything useless. Since the PHYs are autonomous, we
> > should be able to disable the PHY libraries/frameworks.
> 
> hmmm, in that case it's a lot easier to treat. We can use
> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
> something like that.
> 
> The difficult is really reliably supporting e.g. OMAP5 (which won't work
> without a PHY) and your BayTrail with autonomous PHYs. What can we use
> as an indication ?

OMAP has it's own glue driver, so shouldn't it depend on the PHY
layer?

> I mean, I need to know that a particular platform depends on a PHY
> driver before I decide to return -EPROBE_DEFER or just assume the PHY
> isn't needed ;-)

I don't think dwc3 (core) should care about that. The PHY layer needs
to tell us that. If the PHY driver that the platform depends is not
available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
returning -EPROBE_DEFER.



> > I think our goals are the same. I just want to also minimize the need
> > for any platform specific extra work from the upper layers regarding
> > the PHYs.
> 
> I'll agree to that, but let's not apply patches until we're 100% sure
> there will be no regressions. Looking at $subject, I don't think it
> satisfies that condition ;-)

Agreed. Let's think this through carefully.


Cheers,

-- 
heikki
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-12 Thread Kishon Vijay Abraham I
On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
> Hi,
> 
> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
>> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
>>> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
>>> For the controller drivers the PHYs are just a resource like any
>>> other. The controller drivers can't have any responsibility of
>>> them. They should not care if PHY drivers are available for them or
>>> not, or even if the PHY framework is available or not.
>>
>> huh? If memory isn't available you don't continue probing, right ? If
>> your IORESOURCE_MEM is missing, you also don't continue probing, if your
>> IRQ line is missing, you bail too. Those are also nothing but resources
>> to the driver, what you're asking here is to treat PHY as a _different_
>> resource; which might be fine, but we need to make sure we don't
>> continue probing when a PHY is missing in a platform that certainly
>> needs a PHY.
> 
> Yes, true. In my head I was comparing the PHY only to resources like
> gpios, clocks, dma channels, etc. that are often optional to the
> drivers.
> 
>> But I really want to see the argument against using no-op. As far as I
>> could see, everybody needs a PHY driver one way or another, some
>> platforms just haven't sent any PHY driver upstream and have their own
>> hacked up solution to avoid using the PHY layer.
>
> Not true in our case. Platforms using Intel's SoCs and chip sets may
> or may not have controllable USB PHY. Quite often they don't. The
> Baytrails have usually ULPI PHY for USB2, but that does not mean they
> provide any vendor specific functions or any need for a driver in any
> case.

 that's different from what I heard.
>>>
>>> I don't know where you got that impression, but it's not true. The
>>> Baytrail SoCs for example don't have internal USB PHYs, which means
>>> the manufacturers using it can select what they want. So we have
>>> boards where PHY driver(s) is needed and boards where it isn't.
>>
>> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
>> You have an external PIPE3 interface ? That's quite an achievement,
>> kudos to your HW designers. Getting timing closure on PIPE3 is a
>> difficult task.
> 
> No, only the USB2 PHY is external. I'm giving you wrong information,
> I'm sorry about that. Need to concentrate on what I'm writing.
> 
> 
> 
>>> This is really good to get. We have some projects where we are dealing
>>> with more embedded environments, like IVI, where the kernel should be
>>> stripped of everything useless. Since the PHYs are autonomous, we
>>> should be able to disable the PHY libraries/frameworks.
>>
>> hmmm, in that case it's a lot easier to treat. We can use
>> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
>> something like that.
>>
>> The difficult is really reliably supporting e.g. OMAP5 (which won't work
>> without a PHY) and your BayTrail with autonomous PHYs. What can we use
>> as an indication ?
> 
> OMAP has it's own glue driver, so shouldn't it depend on the PHY
> layer?

right, but the PHY is connected to the dwc3 core and not to the glue.
> 
>> I mean, I need to know that a particular platform depends on a PHY
>> driver before I decide to return -EPROBE_DEFER or just assume the PHY
>> isn't needed ;-)
> 
> I don't think dwc3 (core) should care about that. The PHY layer needs
> to tell us that. If the PHY driver that the platform depends is not
> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
> returning -EPROBE_DEFER.

I don't think the PHY layer can 'reliably' tell if PHY driver is available or
not. Consider when the phy_provider_register fails, there is no way to know if
PHY driver is available or not. There are a few cases where PHY layer returns
-EPROBE_DEFER but none of them can tell for sure that PHY driver is either
available and failed or not available at all. It would be best for us to leave
that to the platforms if we want to be sure if the platform needs a PHY or not.

Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-19 Thread Roger Quadros
Hi,

On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
> On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
>> Hi,
>>
>> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
>>> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
 On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
 For the controller drivers the PHYs are just a resource like any
 other. The controller drivers can't have any responsibility of
 them. They should not care if PHY drivers are available for them or
 not, or even if the PHY framework is available or not.
>>>
>>> huh? If memory isn't available you don't continue probing, right ? If
>>> your IORESOURCE_MEM is missing, you also don't continue probing, if your
>>> IRQ line is missing, you bail too. Those are also nothing but resources
>>> to the driver, what you're asking here is to treat PHY as a _different_
>>> resource; which might be fine, but we need to make sure we don't
>>> continue probing when a PHY is missing in a platform that certainly
>>> needs a PHY.
>>
>> Yes, true. In my head I was comparing the PHY only to resources like
>> gpios, clocks, dma channels, etc. that are often optional to the
>> drivers.
>>
>>> But I really want to see the argument against using no-op. As far as I
>>> could see, everybody needs a PHY driver one way or another, some
>>> platforms just haven't sent any PHY driver upstream and have their own
>>> hacked up solution to avoid using the PHY layer.
>>
>> Not true in our case. Platforms using Intel's SoCs and chip sets may
>> or may not have controllable USB PHY. Quite often they don't. The
>> Baytrails have usually ULPI PHY for USB2, but that does not mean they
>> provide any vendor specific functions or any need for a driver in any
>> case.
>
> that's different from what I heard.

 I don't know where you got that impression, but it's not true. The
 Baytrail SoCs for example don't have internal USB PHYs, which means
 the manufacturers using it can select what they want. So we have
 boards where PHY driver(s) is needed and boards where it isn't.
>>>
>>> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
>>> You have an external PIPE3 interface ? That's quite an achievement,
>>> kudos to your HW designers. Getting timing closure on PIPE3 is a
>>> difficult task.
>>
>> No, only the USB2 PHY is external. I'm giving you wrong information,
>> I'm sorry about that. Need to concentrate on what I'm writing.
>>
>> 
>>
 This is really good to get. We have some projects where we are dealing
 with more embedded environments, like IVI, where the kernel should be
 stripped of everything useless. Since the PHYs are autonomous, we
 should be able to disable the PHY libraries/frameworks.
>>>
>>> hmmm, in that case it's a lot easier to treat. We can use
>>> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
>>> something like that.
>>>
>>> The difficult is really reliably supporting e.g. OMAP5 (which won't work
>>> without a PHY) and your BayTrail with autonomous PHYs. What can we use
>>> as an indication ?
>>
>> OMAP has it's own glue driver, so shouldn't it depend on the PHY
>> layer?
> 
> right, but the PHY is connected to the dwc3 core and not to the glue.
>>
>>> I mean, I need to know that a particular platform depends on a PHY
>>> driver before I decide to return -EPROBE_DEFER or just assume the PHY
>>> isn't needed ;-)
>>
>> I don't think dwc3 (core) should care about that. The PHY layer needs
>> to tell us that. If the PHY driver that the platform depends is not
>> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
>> returning -EPROBE_DEFER.
> 
> I don't think the PHY layer can 'reliably' tell if PHY driver is available or
> not. Consider when the phy_provider_register fails, there is no way to know if
> PHY driver is available or not. There are a few cases where PHY layer returns
> -EPROBE_DEFER but none of them can tell for sure that PHY driver is either
> available and failed or not available at all. It would be best for us to leave
> that to the platforms if we want to be sure if the platform needs a PHY or 
> not.
> 

Just to summarize this thread on what we need

1) dwc3 core shouldn't worry about platform specific stuff i.e. PHY needed or 
not.
It should be as generic as possible.

2) dwc3 core should continue probe even if PHY layer is not enabled, as not all 
platforms need it.

3) dwc3 core should continue probe if PHY device is not available. (-ENODEV?)

4) dwc3 core should error out on any error condition if PHY device is available 
and caused some error,
e.g. init error.

5) dwc3 core should return EPROBE_DEFER if PHY device is available but device 
driver is not yet loaded.

6) platform glue should do the necessary sanity checks for availability of all 
resources like PHY device, PHY layer, etc, before populating the dwc3 device. 
e.g. in 

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-21 Thread Kishon Vijay Abraham I
Hi Roger,

On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
> Hi,
> 
> On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
>> On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
>>> Hi,
>>>
>>> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
 On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
> For the controller drivers the PHYs are just a resource like any
> other. The controller drivers can't have any responsibility of
> them. They should not care if PHY drivers are available for them or
> not, or even if the PHY framework is available or not.

 huh? If memory isn't available you don't continue probing, right ? If
 your IORESOURCE_MEM is missing, you also don't continue probing, if your
 IRQ line is missing, you bail too. Those are also nothing but resources
 to the driver, what you're asking here is to treat PHY as a _different_
 resource; which might be fine, but we need to make sure we don't
 continue probing when a PHY is missing in a platform that certainly
 needs a PHY.
>>>
>>> Yes, true. In my head I was comparing the PHY only to resources like
>>> gpios, clocks, dma channels, etc. that are often optional to the
>>> drivers.
>>>
 But I really want to see the argument against using no-op. As far as I
 could see, everybody needs a PHY driver one way or another, some
 platforms just haven't sent any PHY driver upstream and have their own
 hacked up solution to avoid using the PHY layer.
>>>
>>> Not true in our case. Platforms using Intel's SoCs and chip sets may
>>> or may not have controllable USB PHY. Quite often they don't. The
>>> Baytrails have usually ULPI PHY for USB2, but that does not mean they
>>> provide any vendor specific functions or any need for a driver in any
>>> case.
>>
>> that's different from what I heard.
>
> I don't know where you got that impression, but it's not true. The
> Baytrail SoCs for example don't have internal USB PHYs, which means
> the manufacturers using it can select what they want. So we have
> boards where PHY driver(s) is needed and boards where it isn't.

 alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
 You have an external PIPE3 interface ? That's quite an achievement,
 kudos to your HW designers. Getting timing closure on PIPE3 is a
 difficult task.
>>>
>>> No, only the USB2 PHY is external. I'm giving you wrong information,
>>> I'm sorry about that. Need to concentrate on what I'm writing.
>>>
>>> 
>>>
> This is really good to get. We have some projects where we are dealing
> with more embedded environments, like IVI, where the kernel should be
> stripped of everything useless. Since the PHYs are autonomous, we
> should be able to disable the PHY libraries/frameworks.

 hmmm, in that case it's a lot easier to treat. We can use
 ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
 something like that.

 The difficult is really reliably supporting e.g. OMAP5 (which won't work
 without a PHY) and your BayTrail with autonomous PHYs. What can we use
 as an indication ?
>>>
>>> OMAP has it's own glue driver, so shouldn't it depend on the PHY
>>> layer?
>>
>> right, but the PHY is connected to the dwc3 core and not to the glue.
>>>
 I mean, I need to know that a particular platform depends on a PHY
 driver before I decide to return -EPROBE_DEFER or just assume the PHY
 isn't needed ;-)
>>>
>>> I don't think dwc3 (core) should care about that. The PHY layer needs
>>> to tell us that. If the PHY driver that the platform depends is not
>>> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
>>> returning -EPROBE_DEFER.
>>
>> I don't think the PHY layer can 'reliably' tell if PHY driver is available or
>> not. Consider when the phy_provider_register fails, there is no way to know 
>> if
>> PHY driver is available or not. There are a few cases where PHY layer returns
>> -EPROBE_DEFER but none of them can tell for sure that PHY driver is either
>> available and failed or not available at all. It would be best for us to 
>> leave
>> that to the platforms if we want to be sure if the platform needs a PHY or 
>> not.
>>
> 
> Just to summarize this thread on what we need

Thanks for summarizing.
> 
> 1) dwc3 core shouldn't worry about platform specific stuff i.e. PHY needed or 
> not.
> It should be as generic as possible.
> 
> 2) dwc3 core should continue probe even if PHY layer is not enabled, as not 
> all platforms need it.
> 
> 3) dwc3 core should continue probe if PHY device is not available. (-ENODEV?)
> 
> 4) dwc3 core should error out on any error condition if PHY device is 
> available and caused some error,
> e.g. init error.
> 
> 5) dwc3 core should return EPROBE_DEFER if PH

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-21 Thread Roger Quadros
On 02/21/2014 02:25 PM, Kishon Vijay Abraham I wrote:
> Hi Roger,
> 
> On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
>> Hi,
>>
>> On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
>>> On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
 Hi,

 On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
>> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
>> For the controller drivers the PHYs are just a resource like any
>> other. The controller drivers can't have any responsibility of
>> them. They should not care if PHY drivers are available for them or
>> not, or even if the PHY framework is available or not.
>
> huh? If memory isn't available you don't continue probing, right ? If
> your IORESOURCE_MEM is missing, you also don't continue probing, if your
> IRQ line is missing, you bail too. Those are also nothing but resources
> to the driver, what you're asking here is to treat PHY as a _different_
> resource; which might be fine, but we need to make sure we don't
> continue probing when a PHY is missing in a platform that certainly
> needs a PHY.

 Yes, true. In my head I was comparing the PHY only to resources like
 gpios, clocks, dma channels, etc. that are often optional to the
 drivers.

> But I really want to see the argument against using no-op. As far as I
> could see, everybody needs a PHY driver one way or another, some
> platforms just haven't sent any PHY driver upstream and have their own
> hacked up solution to avoid using the PHY layer.

 Not true in our case. Platforms using Intel's SoCs and chip sets may
 or may not have controllable USB PHY. Quite often they don't. The
 Baytrails have usually ULPI PHY for USB2, but that does not mean they
 provide any vendor specific functions or any need for a driver in any
 case.
>>>
>>> that's different from what I heard.
>>
>> I don't know where you got that impression, but it's not true. The
>> Baytrail SoCs for example don't have internal USB PHYs, which means
>> the manufacturers using it can select what they want. So we have
>> boards where PHY driver(s) is needed and boards where it isn't.
>
> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
> You have an external PIPE3 interface ? That's quite an achievement,
> kudos to your HW designers. Getting timing closure on PIPE3 is a
> difficult task.

 No, only the USB2 PHY is external. I'm giving you wrong information,
 I'm sorry about that. Need to concentrate on what I'm writing.

 

>> This is really good to get. We have some projects where we are dealing
>> with more embedded environments, like IVI, where the kernel should be
>> stripped of everything useless. Since the PHYs are autonomous, we
>> should be able to disable the PHY libraries/frameworks.
>
> hmmm, in that case it's a lot easier to treat. We can use
> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
> something like that.
>
> The difficult is really reliably supporting e.g. OMAP5 (which won't work
> without a PHY) and your BayTrail with autonomous PHYs. What can we use
> as an indication ?

 OMAP has it's own glue driver, so shouldn't it depend on the PHY
 layer?
>>>
>>> right, but the PHY is connected to the dwc3 core and not to the glue.

> I mean, I need to know that a particular platform depends on a PHY
> driver before I decide to return -EPROBE_DEFER or just assume the PHY
> isn't needed ;-)

 I don't think dwc3 (core) should care about that. The PHY layer needs
 to tell us that. If the PHY driver that the platform depends is not
 available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
 returning -EPROBE_DEFER.
>>>
>>> I don't think the PHY layer can 'reliably' tell if PHY driver is available 
>>> or
>>> not. Consider when the phy_provider_register fails, there is no way to know 
>>> if
>>> PHY driver is available or not. There are a few cases where PHY layer 
>>> returns
>>> -EPROBE_DEFER but none of them can tell for sure that PHY driver is either
>>> available and failed or not available at all. It would be best for us to 
>>> leave
>>> that to the platforms if we want to be sure if the platform needs a PHY or 
>>> not.
>>>
>>
>> Just to summarize this thread on what we need
> 
> Thanks for summarizing.
>>
>> 1) dwc3 core shouldn't worry about platform specific stuff i.e. PHY needed 
>> or not.
>> It should be as generic as possible.
>>
>> 2) dwc3 core should continue probe even if PHY layer is not enabled, as not 
>> all platforms need it.
>>
>> 3) dwc3 core should continue probe if PHY device is not available. (-ENODEV?)
>>
>> 4) 

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-24 Thread Kishon Vijay Abraham I
Hi Roger,

On Friday 21 February 2014 05:59 PM, Roger Quadros wrote:
> On 02/21/2014 02:25 PM, Kishon Vijay Abraham I wrote:
>> Hi Roger,
>>
>> On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
>>> Hi,
>>>
>>> On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
 On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
> Hi,
>
> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
>> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
>>> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
>>> For the controller drivers the PHYs are just a resource like any
>>> other. The controller drivers can't have any responsibility of
>>> them. They should not care if PHY drivers are available for them or
>>> not, or even if the PHY framework is available or not.
>>
>> huh? If memory isn't available you don't continue probing, right ? If
>> your IORESOURCE_MEM is missing, you also don't continue probing, if your
>> IRQ line is missing, you bail too. Those are also nothing but resources
>> to the driver, what you're asking here is to treat PHY as a _different_
>> resource; which might be fine, but we need to make sure we don't
>> continue probing when a PHY is missing in a platform that certainly
>> needs a PHY.
>
> Yes, true. In my head I was comparing the PHY only to resources like
> gpios, clocks, dma channels, etc. that are often optional to the
> drivers.
>
>> But I really want to see the argument against using no-op. As far as 
>> I
>> could see, everybody needs a PHY driver one way or another, some
>> platforms just haven't sent any PHY driver upstream and have their 
>> own
>> hacked up solution to avoid using the PHY layer.
>
> Not true in our case. Platforms using Intel's SoCs and chip sets may
> or may not have controllable USB PHY. Quite often they don't. The
> Baytrails have usually ULPI PHY for USB2, but that does not mean they
> provide any vendor specific functions or any need for a driver in any
> case.

 that's different from what I heard.
>>>
>>> I don't know where you got that impression, but it's not true. The
>>> Baytrail SoCs for example don't have internal USB PHYs, which means
>>> the manufacturers using it can select what they want. So we have
>>> boards where PHY driver(s) is needed and boards where it isn't.
>>
>> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
>> You have an external PIPE3 interface ? That's quite an achievement,
>> kudos to your HW designers. Getting timing closure on PIPE3 is a
>> difficult task.
>
> No, only the USB2 PHY is external. I'm giving you wrong information,
> I'm sorry about that. Need to concentrate on what I'm writing.
>
> 
>
>>> This is really good to get. We have some projects where we are dealing
>>> with more embedded environments, like IVI, where the kernel should be
>>> stripped of everything useless. Since the PHYs are autonomous, we
>>> should be able to disable the PHY libraries/frameworks.
>>
>> hmmm, in that case it's a lot easier to treat. We can use
>> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
>> something like that.
>>
>> The difficult is really reliably supporting e.g. OMAP5 (which won't work
>> without a PHY) and your BayTrail with autonomous PHYs. What can we use
>> as an indication ?
>
> OMAP has it's own glue driver, so shouldn't it depend on the PHY
> layer?

 right, but the PHY is connected to the dwc3 core and not to the glue.
>
>> I mean, I need to know that a particular platform depends on a PHY
>> driver before I decide to return -EPROBE_DEFER or just assume the PHY
>> isn't needed ;-)
>
> I don't think dwc3 (core) should care about that. The PHY layer needs
> to tell us that. If the PHY driver that the platform depends is not
> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
> returning -EPROBE_DEFER.

 I don't think the PHY layer can 'reliably' tell if PHY driver is available 
 or
 not. Consider when the phy_provider_register fails, there is no way to 
 know if
 PHY driver is available or not. There are a few cases where PHY layer 
 returns
 -EPROBE_DEFER but none of them can tell for sure that PHY driver is either
 available and failed or not available at all. It would be best for us to 
 leave
 that to the platforms if we want to be sure if the platform needs a PHY or 
 not.

>>>
>>> Just to summarize this thread on what we need
>>
>> Thanks for summarizing.
>>>
>>> 1) dwc3 core shouldn't worry about platform specific stuff i.e. PHY needed 
>>> or not.
>>> It should be as generic as possible.
>>>
>

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-24 Thread Kishon Vijay Abraham I
On Friday 21 February 2014 05:59 PM, Roger Quadros wrote:
> On 02/21/2014 02:25 PM, Kishon Vijay Abraham I wrote:
>> Hi Roger,
>>
>> On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
>>> Hi,
>>>
>>> On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
 On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
> Hi,
>
> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
>> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
>>> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
>>> For the controller drivers the PHYs are just a resource like any
>>> other. The controller drivers can't have any responsibility of
>>> them. They should not care if PHY drivers are available for them or
>>> not, or even if the PHY framework is available or not.
>>
>> huh? If memory isn't available you don't continue probing, right ? If
>> your IORESOURCE_MEM is missing, you also don't continue probing, if your
>> IRQ line is missing, you bail too. Those are also nothing but resources
>> to the driver, what you're asking here is to treat PHY as a _different_
>> resource; which might be fine, but we need to make sure we don't
>> continue probing when a PHY is missing in a platform that certainly
>> needs a PHY.
>
> Yes, true. In my head I was comparing the PHY only to resources like
> gpios, clocks, dma channels, etc. that are often optional to the
> drivers.
>
>> But I really want to see the argument against using no-op. As far as 
>> I
>> could see, everybody needs a PHY driver one way or another, some
>> platforms just haven't sent any PHY driver upstream and have their 
>> own
>> hacked up solution to avoid using the PHY layer.
>
> Not true in our case. Platforms using Intel's SoCs and chip sets may
> or may not have controllable USB PHY. Quite often they don't. The
> Baytrails have usually ULPI PHY for USB2, but that does not mean they
> provide any vendor specific functions or any need for a driver in any
> case.

 that's different from what I heard.
>>>
>>> I don't know where you got that impression, but it's not true. The
>>> Baytrail SoCs for example don't have internal USB PHYs, which means
>>> the manufacturers using it can select what they want. So we have
>>> boards where PHY driver(s) is needed and boards where it isn't.
>>
>> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
>> You have an external PIPE3 interface ? That's quite an achievement,
>> kudos to your HW designers. Getting timing closure on PIPE3 is a
>> difficult task.
>
> No, only the USB2 PHY is external. I'm giving you wrong information,
> I'm sorry about that. Need to concentrate on what I'm writing.
>
> 
>
>>> This is really good to get. We have some projects where we are dealing
>>> with more embedded environments, like IVI, where the kernel should be
>>> stripped of everything useless. Since the PHYs are autonomous, we
>>> should be able to disable the PHY libraries/frameworks.
>>
>> hmmm, in that case it's a lot easier to treat. We can use
>> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
>> something like that.
>>
>> The difficult is really reliably supporting e.g. OMAP5 (which won't work
>> without a PHY) and your BayTrail with autonomous PHYs. What can we use
>> as an indication ?
>
> OMAP has it's own glue driver, so shouldn't it depend on the PHY
> layer?

 right, but the PHY is connected to the dwc3 core and not to the glue.
>
>> I mean, I need to know that a particular platform depends on a PHY
>> driver before I decide to return -EPROBE_DEFER or just assume the PHY
>> isn't needed ;-)
>
> I don't think dwc3 (core) should care about that. The PHY layer needs
> to tell us that. If the PHY driver that the platform depends is not
> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
> returning -EPROBE_DEFER.

 I don't think the PHY layer can 'reliably' tell if PHY driver is available 
 or
 not. Consider when the phy_provider_register fails, there is no way to 
 know if
 PHY driver is available or not. There are a few cases where PHY layer 
 returns
 -EPROBE_DEFER but none of them can tell for sure that PHY driver is either
 available and failed or not available at all. It would be best for us to 
 leave
 that to the platforms if we want to be sure if the platform needs a PHY or 
 not.

>>>
>>> Just to summarize this thread on what we need
>>
>> Thanks for summarizing.
>>>
>>> 1) dwc3 core shouldn't worry about platform specific stuff i.e. PHY needed 
>>> or not.
>>> It should be as generic as possible.

I think this co

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-24 Thread Roger Quadros
On 02/24/2014 11:51 AM, Kishon Vijay Abraham I wrote:
> Hi Roger,
> 
> On Friday 21 February 2014 05:59 PM, Roger Quadros wrote:
>> On 02/21/2014 02:25 PM, Kishon Vijay Abraham I wrote:
>>> Hi Roger,
>>>
>>> On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
 Hi,

 On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
> On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
>> Hi,
>>
>> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
>>> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
 On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
 For the controller drivers the PHYs are just a resource like any
 other. The controller drivers can't have any responsibility of
 them. They should not care if PHY drivers are available for them or
 not, or even if the PHY framework is available or not.
>>>
>>> huh? If memory isn't available you don't continue probing, right ? If
>>> your IORESOURCE_MEM is missing, you also don't continue probing, if your
>>> IRQ line is missing, you bail too. Those are also nothing but resources
>>> to the driver, what you're asking here is to treat PHY as a _different_
>>> resource; which might be fine, but we need to make sure we don't
>>> continue probing when a PHY is missing in a platform that certainly
>>> needs a PHY.
>>
>> Yes, true. In my head I was comparing the PHY only to resources like
>> gpios, clocks, dma channels, etc. that are often optional to the
>> drivers.
>>
>>> But I really want to see the argument against using no-op. As far 
>>> as I
>>> could see, everybody needs a PHY driver one way or another, some
>>> platforms just haven't sent any PHY driver upstream and have their 
>>> own
>>> hacked up solution to avoid using the PHY layer.
>>
>> Not true in our case. Platforms using Intel's SoCs and chip sets may
>> or may not have controllable USB PHY. Quite often they don't. The
>> Baytrails have usually ULPI PHY for USB2, but that does not mean they
>> provide any vendor specific functions or any need for a driver in any
>> case.
>
> that's different from what I heard.

 I don't know where you got that impression, but it's not true. The
 Baytrail SoCs for example don't have internal USB PHYs, which means
 the manufacturers using it can select what they want. So we have
 boards where PHY driver(s) is needed and boards where it isn't.
>>>
>>> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
>>> You have an external PIPE3 interface ? That's quite an achievement,
>>> kudos to your HW designers. Getting timing closure on PIPE3 is a
>>> difficult task.
>>
>> No, only the USB2 PHY is external. I'm giving you wrong information,
>> I'm sorry about that. Need to concentrate on what I'm writing.
>>
>> 
>>
 This is really good to get. We have some projects where we are dealing
 with more embedded environments, like IVI, where the kernel should be
 stripped of everything useless. Since the PHYs are autonomous, we
 should be able to disable the PHY libraries/frameworks.
>>>
>>> hmmm, in that case it's a lot easier to treat. We can use
>>> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
>>> something like that.
>>>
>>> The difficult is really reliably supporting e.g. OMAP5 (which won't work
>>> without a PHY) and your BayTrail with autonomous PHYs. What can we use
>>> as an indication ?
>>
>> OMAP has it's own glue driver, so shouldn't it depend on the PHY
>> layer?
>
> right, but the PHY is connected to the dwc3 core and not to the glue.
>>
>>> I mean, I need to know that a particular platform depends on a PHY
>>> driver before I decide to return -EPROBE_DEFER or just assume the PHY
>>> isn't needed ;-)
>>
>> I don't think dwc3 (core) should care about that. The PHY layer needs
>> to tell us that. If the PHY driver that the platform depends is not
>> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
>> returning -EPROBE_DEFER.
>
> I don't think the PHY layer can 'reliably' tell if PHY driver is 
> available or
> not. Consider when the phy_provider_register fails, there is no way to 
> know if
> PHY driver is available or not. There are a few cases where PHY layer 
> returns
> -EPROBE_DEFER but none of them can tell for sure that PHY driver is either
> available and failed or not available at all. It would be best for us to 
> leave
> that to the platforms if we want to be sure if the platform needs a PHY 
> or not.
>

 Just to summarize this thread on what we need
>>>
>>> Tha

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-24 Thread Kishon Vijay Abraham I
Hi,

On Monday 24 February 2014 04:35 PM, Roger Quadros wrote:
> On 02/24/2014 11:51 AM, Kishon Vijay Abraham I wrote:
>> Hi Roger,
>>
>> On Friday 21 February 2014 05:59 PM, Roger Quadros wrote:
>>> On 02/21/2014 02:25 PM, Kishon Vijay Abraham I wrote:
 Hi Roger,

 On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
> Hi,
>
> On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
>> On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
>>> Hi,
>>>
>>> On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
 On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
> For the controller drivers the PHYs are just a resource like any
> other. The controller drivers can't have any responsibility of
> them. They should not care if PHY drivers are available for them or
> not, or even if the PHY framework is available or not.

 huh? If memory isn't available you don't continue probing, right ? If
 your IORESOURCE_MEM is missing, you also don't continue probing, if 
 your
 IRQ line is missing, you bail too. Those are also nothing but resources
 to the driver, what you're asking here is to treat PHY as a _different_
 resource; which might be fine, but we need to make sure we don't
 continue probing when a PHY is missing in a platform that certainly
 needs a PHY.
>>>
>>> Yes, true. In my head I was comparing the PHY only to resources like
>>> gpios, clocks, dma channels, etc. that are often optional to the
>>> drivers.
>>>
 But I really want to see the argument against using no-op. As far 
 as I
 could see, everybody needs a PHY driver one way or another, some
 platforms just haven't sent any PHY driver upstream and have their 
 own
 hacked up solution to avoid using the PHY layer.
>>>
>>> Not true in our case. Platforms using Intel's SoCs and chip sets may
>>> or may not have controllable USB PHY. Quite often they don't. The
>>> Baytrails have usually ULPI PHY for USB2, but that does not mean 
>>> they
>>> provide any vendor specific functions or any need for a driver in 
>>> any
>>> case.
>>
>> that's different from what I heard.
>
> I don't know where you got that impression, but it's not true. The
> Baytrail SoCs for example don't have internal USB PHYs, which means
> the manufacturers using it can select what they want. So we have
> boards where PHY driver(s) is needed and boards where it isn't.

 alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
 You have an external PIPE3 interface ? That's quite an achievement,
 kudos to your HW designers. Getting timing closure on PIPE3 is a
 difficult task.
>>>
>>> No, only the USB2 PHY is external. I'm giving you wrong information,
>>> I'm sorry about that. Need to concentrate on what I'm writing.
>>>
>>> 
>>>
> This is really good to get. We have some projects where we are dealing
> with more embedded environments, like IVI, where the kernel should be
> stripped of everything useless. Since the PHYs are autonomous, we
> should be able to disable the PHY libraries/frameworks.

 hmmm, in that case it's a lot easier to treat. We can use
 ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
 something like that.

 The difficult is really reliably supporting e.g. OMAP5 (which won't 
 work
 without a PHY) and your BayTrail with autonomous PHYs. What can we use
 as an indication ?
>>>
>>> OMAP has it's own glue driver, so shouldn't it depend on the PHY
>>> layer?
>>
>> right, but the PHY is connected to the dwc3 core and not to the glue.
>>>
 I mean, I need to know that a particular platform depends on a PHY
 driver before I decide to return -EPROBE_DEFER or just assume the PHY
 isn't needed ;-)
>>>
>>> I don't think dwc3 (core) should care about that. The PHY layer needs
>>> to tell us that. If the PHY driver that the platform depends is not
>>> available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
>>> returning -EPROBE_DEFER.
>>
>> I don't think the PHY layer can 'reliably' tell if PHY driver is 
>> available or
>> not. Consider when the phy_provider_register fails, there is no way to 
>> know if
>> PHY driver is available or not. There are a few cases where PHY layer 
>> returns
>> -EPROBE_DEFER but none of them can tell for sure that PHY driver is 
>> either
>> available and failed or not availabl

Re: [PATCH 1/2] usb: dwc3: core: continue probing if usb phy library returns -ENODEV/-ENXIO

2014-02-24 Thread Felipe Balbi
On Mon, Feb 24, 2014 at 03:21:05PM +0530, Kishon Vijay Abraham I wrote:
> Hi Roger,
> 
> On Friday 21 February 2014 05:59 PM, Roger Quadros wrote:
> > On 02/21/2014 02:25 PM, Kishon Vijay Abraham I wrote:
> >> Hi Roger,
> >>
> >> On Wednesday 19 February 2014 06:07 PM, Roger Quadros wrote:
> >>> Hi,
> >>>
> >>> On 02/12/2014 11:46 AM, Kishon Vijay Abraham I wrote:
>  On Wednesday 29 January 2014 08:17 PM, Heikki Krogerus wrote:
> > Hi,
> >
> > On Tue, Jan 28, 2014 at 10:30:36AM -0600, Felipe Balbi wrote:
> >> On Tue, Jan 28, 2014 at 05:32:30PM +0200, Heikki Krogerus wrote:
> >>> On Mon, Jan 27, 2014 at 10:05:20AM -0600, Felipe Balbi wrote:
> >>> For the controller drivers the PHYs are just a resource like any
> >>> other. The controller drivers can't have any responsibility of
> >>> them. They should not care if PHY drivers are available for them or
> >>> not, or even if the PHY framework is available or not.
> >>
> >> huh? If memory isn't available you don't continue probing, right ? If
> >> your IORESOURCE_MEM is missing, you also don't continue probing, if 
> >> your
> >> IRQ line is missing, you bail too. Those are also nothing but resources
> >> to the driver, what you're asking here is to treat PHY as a _different_
> >> resource; which might be fine, but we need to make sure we don't
> >> continue probing when a PHY is missing in a platform that certainly
> >> needs a PHY.
> >
> > Yes, true. In my head I was comparing the PHY only to resources like
> > gpios, clocks, dma channels, etc. that are often optional to the
> > drivers.
> >
> >> But I really want to see the argument against using no-op. As far 
> >> as I
> >> could see, everybody needs a PHY driver one way or another, some
> >> platforms just haven't sent any PHY driver upstream and have their 
> >> own
> >> hacked up solution to avoid using the PHY layer.
> >
> > Not true in our case. Platforms using Intel's SoCs and chip sets may
> > or may not have controllable USB PHY. Quite often they don't. The
> > Baytrails have usually ULPI PHY for USB2, but that does not mean 
> > they
> > provide any vendor specific functions or any need for a driver in 
> > any
> > case.
> 
>  that's different from what I heard.
> >>>
> >>> I don't know where you got that impression, but it's not true. The
> >>> Baytrail SoCs for example don't have internal USB PHYs, which means
> >>> the manufacturers using it can select what they want. So we have
> >>> boards where PHY driver(s) is needed and boards where it isn't.
> >>
> >> alright, that explains it ;-) So you have external USB2 and USB3 PHYs ?
> >> You have an external PIPE3 interface ? That's quite an achievement,
> >> kudos to your HW designers. Getting timing closure on PIPE3 is a
> >> difficult task.
> >
> > No, only the USB2 PHY is external. I'm giving you wrong information,
> > I'm sorry about that. Need to concentrate on what I'm writing.
> >
> > 
> >
> >>> This is really good to get. We have some projects where we are dealing
> >>> with more embedded environments, like IVI, where the kernel should be
> >>> stripped of everything useless. Since the PHYs are autonomous, we
> >>> should be able to disable the PHY libraries/frameworks.
> >>
> >> hmmm, in that case it's a lot easier to treat. We can use
> >> ERR_PTR(-ENXIO) as an indication that the framework is disabled, or
> >> something like that.
> >>
> >> The difficult is really reliably supporting e.g. OMAP5 (which won't 
> >> work
> >> without a PHY) and your BayTrail with autonomous PHYs. What can we use
> >> as an indication ?
> >
> > OMAP has it's own glue driver, so shouldn't it depend on the PHY
> > layer?
> 
>  right, but the PHY is connected to the dwc3 core and not to the glue.
> >
> >> I mean, I need to know that a particular platform depends on a PHY
> >> driver before I decide to return -EPROBE_DEFER or just assume the PHY
> >> isn't needed ;-)
> >
> > I don't think dwc3 (core) should care about that. The PHY layer needs
> > to tell us that. If the PHY driver that the platform depends is not
> > available yet, the PHY layer returns -EPROBE_DEFER and dwc3 ends up
> > returning -EPROBE_DEFER.
> 
>  I don't think the PHY layer can 'reliably' tell if PHY driver is 
>  available or
>  not. Consider when the phy_provider_register fails, there is no way to 
>  know if
>  PHY driver is available or not. There are a few cases where PHY layer 
>  returns
>  -EPROBE_DEFER but none of them can tell for sure that PHY driver is 
>  either
>  available and failed or not available at all. It would be best for us to 
>  leav