[v3,3/5] dt/bindings: Add a new property to DA8xx USB PHY

Message ID 1478186765-19840-4-git-send-email-abailon@baylibre.com
State New
Headers show

Commit Message

Alexandre Bailon Nov. 3, 2016, 3:26 p.m.
The USB PHY is able to operate in OTG, host or peripheral.
Some board may be wired to work act only as host or peripheral.
In such case, the dr_mode property of controller must be set to
host or peripheral. But doing that will also configure the PHY
in host or peripheral mode whereas OTG is able to detect which
role the USB controller should take.
The PHY's host or peripheral mode are actually only useful when
hardware doesn't allow OTG to detect it's role.

Add the usb20_force_mode property to force the PHY to operate
in host or peripheral mode.
When usb20_force_mode is used, dr_mode should also be configured
to host or peripheral.
The controller uses dr_mode to configure itself, but the phy use
it to get the mode to use to configure the PHY mode.

Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

---
 Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++
 1 file changed, 5 insertions(+)

-- 
2.7.3

Comments

Kishon Vijay Abraham I Nov. 3, 2016, 4:34 p.m. | #1
Hi,

On Thursday 03 November 2016 08:56 PM, Alexandre Bailon wrote:
> The USB PHY is able to operate in OTG, host or peripheral.

> Some board may be wired to work act only as host or peripheral.

> In such case, the dr_mode property of controller must be set to

> host or peripheral. But doing that will also configure the PHY

> in host or peripheral mode whereas OTG is able to detect which

> role the USB controller should take.

> The PHY's host or peripheral mode are actually only useful when

> hardware doesn't allow OTG to detect it's role.

> 

> Add the usb20_force_mode property to force the PHY to operate

> in host or peripheral mode.


I think we do just that if we populate dr_mode with host or peripheral. Why do
we need another property to control dr_mode property?
> When usb20_force_mode is used, dr_mode should also be configured

> to host or peripheral.

> The controller uses dr_mode to configure itself, but the phy use

> it to get the mode to use to configure the PHY mode.

> 

> Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

> ---

>  Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++

>  1 file changed, 5 insertions(+)

> 

> diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

> index c26478b..9fc87fb 100644

> --- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

> +++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

> @@ -4,6 +4,11 @@ Required properties:

>   - compatible: must be "ti,da830-usb-phy".

>   - #phy-cells: must be 1.

>  

> +Optional properties:

> +- usb20-force-mode: Force the phy to operate in same mode than the USB OTG controller.

> +		    It should only be defined if the hardware is not capable correctly

> +		    detect the role of USB by using VBUS and ID pin.


From what I understand from the previous patch, if VBUS sense and the session
end comparator is enabled, the controller can work in host mode or device mode.

Thanks
Kishon
David Lechner Nov. 3, 2016, 4:53 p.m. | #2
On 11/03/2016 10:26 AM, Alexandre Bailon wrote:
> The USB PHY is able to operate in OTG, host or peripheral.

> Some board may be wired to work act only as host or peripheral.

> In such case, the dr_mode property of controller must be set to

> host or peripheral. But doing that will also configure the PHY

> in host or peripheral mode whereas OTG is able to detect which

> role the USB controller should take.

> The PHY's host or peripheral mode are actually only useful when

> hardware doesn't allow OTG to detect it's role.

>

> Add the usb20_force_mode property to force the PHY to operate

> in host or peripheral mode.


Device tree describes the hardware, not the configuration, so this is 
not acceptable.

Besides, this setting should not be fixed to one value anyway.

> When usb20_force_mode is used, dr_mode should also be configured

> to host or peripheral.

> The controller uses dr_mode to configure itself, but the phy use

> it to get the mode to use to configure the PHY mode.

>

> Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

> ---

>  Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++

>  1 file changed, 5 insertions(+)

>

> diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

> index c26478b..9fc87fb 100644

> --- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

> +++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

> @@ -4,6 +4,11 @@ Required properties:

>   - compatible: must be "ti,da830-usb-phy".

>   - #phy-cells: must be 1.

>

> +Optional properties:

> +- usb20-force-mode: Force the phy to operate in same mode than the USB OTG controller.

> +		    It should only be defined if the hardware is not capable correctly

> +		    detect the role of USB by using VBUS and ID pin.

> +

>  This device controls the PHY for both the USB 1.1 OHCI and USB 2.0 OTG

>  controllers on DA8xx SoCs. Consumers of this device should use index 0 for

>  the USB 2.0 phy device and index 1 for the USB 1.1 phy device.

>
Alexandre Bailon Nov. 3, 2016, 5:26 p.m. | #3
On 11/03/2016 05:34 PM, Kishon Vijay Abraham I wrote:
> Hi,

> 

> On Thursday 03 November 2016 08:56 PM, Alexandre Bailon wrote:

>> The USB PHY is able to operate in OTG, host or peripheral.

>> Some board may be wired to work act only as host or peripheral.

>> In such case, the dr_mode property of controller must be set to

>> host or peripheral. But doing that will also configure the PHY

>> in host or peripheral mode whereas OTG is able to detect which

>> role the USB controller should take.

>> The PHY's host or peripheral mode are actually only useful when

>> hardware doesn't allow OTG to detect it's role.

>>

>> Add the usb20_force_mode property to force the PHY to operate

>> in host or peripheral mode.

> 

> I think we do just that if we populate dr_mode with host or peripheral. Why do

> we need another property to control dr_mode property?

Because the phy doesn't work correctly when it is in host or
device mode.
>> When usb20_force_mode is used, dr_mode should also be configured

>> to host or peripheral.

>> The controller uses dr_mode to configure itself, but the phy use

>> it to get the mode to use to configure the PHY mode.

>>

>> Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

>> ---

>>  Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++

>>  1 file changed, 5 insertions(+)

>>

>> diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> index c26478b..9fc87fb 100644

>> --- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> +++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> @@ -4,6 +4,11 @@ Required properties:

>>   - compatible: must be "ti,da830-usb-phy".

>>   - #phy-cells: must be 1.

>>  

>> +Optional properties:

>> +- usb20-force-mode: Force the phy to operate in same mode than the USB OTG controller.

>> +		    It should only be defined if the hardware is not capable correctly

>> +		    detect the role of USB by using VBUS and ID pin.

> 

> From what I understand from the previous patch, if VBUS sense and the session

> end comparator is enabled, the controller can work in host mode or device mode.

I but VBUS sense and and session end comparator only seems to work when
the phy is in otg mode.
In host mode, the phy stop to work after the first disconnect.
In device mode, the phy never detect a disconnect.
In otg mode, these issues go away.
I'm working on workaround for both of them but I think it is
better to keep the phy in otg when it is possible.
> 

> Thanks

> Kishon

> 

Thanks,
Alexandre
Alexandre Bailon Nov. 3, 2016, 5:33 p.m. | #4
On 11/03/2016 05:53 PM, David Lechner wrote:
> On 11/03/2016 10:26 AM, Alexandre Bailon wrote:

>> The USB PHY is able to operate in OTG, host or peripheral.

>> Some board may be wired to work act only as host or peripheral.

>> In such case, the dr_mode property of controller must be set to

>> host or peripheral. But doing that will also configure the PHY

>> in host or peripheral mode whereas OTG is able to detect which

>> role the USB controller should take.

>> The PHY's host or peripheral mode are actually only useful when

>> hardware doesn't allow OTG to detect it's role.

>>

>> Add the usb20_force_mode property to force the PHY to operate

>> in host or peripheral mode.

> 

> Device tree describes the hardware, not the configuration, so this is

> not acceptable.

I think that is really hardware (and board) dependent.
We will only need to set it for unusual hardware that doesn't
let the otg phy automatically find the it's role.
What do you think I should do?
> 

> Besides, this setting should not be fixed to one value anyway.

Actually, a bool is enough. If we need to force the phy in a specific
mode, we can reuse dr_mode of controller.
> 

>> When usb20_force_mode is used, dr_mode should also be configured

>> to host or peripheral.

>> The controller uses dr_mode to configure itself, but the phy use

>> it to get the mode to use to configure the PHY mode.

>>

>> Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

>> ---

>>  Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++

>>  1 file changed, 5 insertions(+)

>>

>> diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> index c26478b..9fc87fb 100644

>> --- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> +++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>> @@ -4,6 +4,11 @@ Required properties:

>>   - compatible: must be "ti,da830-usb-phy".

>>   - #phy-cells: must be 1.

>>

>> +Optional properties:

>> +- usb20-force-mode: Force the phy to operate in same mode than the

>> USB OTG controller.

>> +            It should only be defined if the hardware is not capable

>> correctly

>> +            detect the role of USB by using VBUS and ID pin.

>> +

>>  This device controls the PHY for both the USB 1.1 OHCI and USB 2.0 OTG

>>  controllers on DA8xx SoCs. Consumers of this device should use index

>> 0 for

>>  the USB 2.0 phy device and index 1 for the USB 1.1 phy device.

>>

>
Kishon Vijay Abraham I Nov. 3, 2016, 5:50 p.m. | #5
Hi,

On Thursday 03 November 2016 10:56 PM, Alexandre Bailon wrote:
> On 11/03/2016 05:34 PM, Kishon Vijay Abraham I wrote:

>> Hi,

>>

>> On Thursday 03 November 2016 08:56 PM, Alexandre Bailon wrote:

>>> The USB PHY is able to operate in OTG, host or peripheral.

>>> Some board may be wired to work act only as host or peripheral.

>>> In such case, the dr_mode property of controller must be set to

>>> host or peripheral. But doing that will also configure the PHY

>>> in host or peripheral mode whereas OTG is able to detect which

>>> role the USB controller should take.

>>> The PHY's host or peripheral mode are actually only useful when

>>> hardware doesn't allow OTG to detect it's role.

>>>

>>> Add the usb20_force_mode property to force the PHY to operate

>>> in host or peripheral mode.

>>

>> I think we do just that if we populate dr_mode with host or peripheral. Why do

>> we need another property to control dr_mode property?

> Because the phy doesn't work correctly when it is in host or

> device mode.


That would be the same even with usb20_force_mode property. How does
usb20_force_mode property help?

Thanks
Kishon

>>> When usb20_force_mode is used, dr_mode should also be configured

>>> to host or peripheral.

>>> The controller uses dr_mode to configure itself, but the phy use

>>> it to get the mode to use to configure the PHY mode.

>>>

>>> Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

>>> ---

>>>  Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++

>>>  1 file changed, 5 insertions(+)

>>>

>>> diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> index c26478b..9fc87fb 100644

>>> --- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> +++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> @@ -4,6 +4,11 @@ Required properties:

>>>   - compatible: must be "ti,da830-usb-phy".

>>>   - #phy-cells: must be 1.

>>>  

>>> +Optional properties:

>>> +- usb20-force-mode: Force the phy to operate in same mode than the USB OTG controller.

>>> +		    It should only be defined if the hardware is not capable correctly

>>> +		    detect the role of USB by using VBUS and ID pin.

>>

>> From what I understand from the previous patch, if VBUS sense and the session

>> end comparator is enabled, the controller can work in host mode or device mode.

> I but VBUS sense and and session end comparator only seems to work when

> the phy is in otg mode.

> In host mode, the phy stop to work after the first disconnect.

> In device mode, the phy never detect a disconnect.

> In otg mode, these issues go away.

> I'm working on workaround for both of them but I think it is

> better to keep the phy in otg when it is possible.

>>

>> Thanks

>> Kishon

>>

> Thanks,

> Alexandre

>
David Lechner Nov. 3, 2016, 5:53 p.m. | #6
On 11/03/2016 12:33 PM, Alexandre Bailon wrote:
> On 11/03/2016 05:53 PM, David Lechner wrote:

>> On 11/03/2016 10:26 AM, Alexandre Bailon wrote:

>>> The USB PHY is able to operate in OTG, host or peripheral.

>>> Some board may be wired to work act only as host or peripheral.

>>> In such case, the dr_mode property of controller must be set to

>>> host or peripheral. But doing that will also configure the PHY

>>> in host or peripheral mode whereas OTG is able to detect which

>>> role the USB controller should take.

>>> The PHY's host or peripheral mode are actually only useful when

>>> hardware doesn't allow OTG to detect it's role.

>>>

>>> Add the usb20_force_mode property to force the PHY to operate

>>> in host or peripheral mode.

>>

>> Device tree describes the hardware, not the configuration, so this is

>> not acceptable.

> I think that is really hardware (and board) dependent.

> We will only need to set it for unusual hardware that doesn't

> let the otg phy automatically find the it's role.

> What do you think I should do?


I am staring to think that maybe it was a mistake for me to add the mode 
setting to the phy driver. It is not very clear to me where the division 
is between what is the responsibility of the phy and what is the 
responsibility of the musb.

Looking at the bigger picture, forcing the PHY mode and never changing 
it is not useful. It is the transition from not forced to forced or vice 
versa that is important because it is at that moment that interrupts are 
triggered.

The forcing of a PHY mode is really being used to simulate the plugging 
or unplugging of a USB device. And the only reason you would need to do 
this is that the hardware lacks the proper circuitry between the USB 
connector and the SoC in order to detect such an event.

So, what I think you should do is try to get MUSB working with the PHY 
in OTG mode without worrying about forcing other PHY modes. Then once 
that has been sorted out, we can talk about how to handle quirks for 
hardware that needs it.

>>

>> Besides, this setting should not be fixed to one value anyway.

> Actually, a bool is enough. If we need to force the phy in a specific

> mode, we can reuse dr_mode of controller.

>>

>>> When usb20_force_mode is used, dr_mode should also be configured

>>> to host or peripheral.

>>> The controller uses dr_mode to configure itself, but the phy use

>>> it to get the mode to use to configure the PHY mode.

>>>

>>> Signed-off-by: Alexandre Bailon <abailon@baylibre.com>

>>> ---

>>>  Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt | 5 +++++

>>>  1 file changed, 5 insertions(+)

>>>

>>> diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> index c26478b..9fc87fb 100644

>>> --- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> +++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt

>>> @@ -4,6 +4,11 @@ Required properties:

>>>   - compatible: must be "ti,da830-usb-phy".

>>>   - #phy-cells: must be 1.

>>>

>>> +Optional properties:

>>> +- usb20-force-mode: Force the phy to operate in same mode than the

>>> USB OTG controller.

>>> +            It should only be defined if the hardware is not capable

>>> correctly

>>> +            detect the role of USB by using VBUS and ID pin.

>>> +

>>>  This device controls the PHY for both the USB 1.1 OHCI and USB 2.0 OTG

>>>  controllers on DA8xx SoCs. Consumers of this device should use index

>>> 0 for

>>>  the USB 2.0 phy device and index 1 for the USB 1.1 phy device.

>>>

>>

>

Patch

diff --git a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt
index c26478b..9fc87fb 100644
--- a/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt
+++ b/Documentation/devicetree/bindings/phy/phy-da8xx-usb.txt
@@ -4,6 +4,11 @@  Required properties:
  - compatible: must be "ti,da830-usb-phy".
  - #phy-cells: must be 1.
 
+Optional properties:
+- usb20-force-mode: Force the phy to operate in same mode than the USB OTG controller.
+		    It should only be defined if the hardware is not capable correctly
+		    detect the role of USB by using VBUS and ID pin.
+
 This device controls the PHY for both the USB 1.1 OHCI and USB 2.0 OTG
 controllers on DA8xx SoCs. Consumers of this device should use index 0 for
 the USB 2.0 phy device and index 1 for the USB 1.1 phy device.