2020-06-16 08:38:11

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: [PATCH 0/2] phy: bcm63xx-usbh: Add BCM63xx USBH driver

Add BCM63xx USBH PHY driver for BMIPS.

Álvaro Fernández Rojas (2):
dt-bindings: phy: add bcm63xx-usbh bindings
phy: bcm63xx-usbh: Add BCM63xx USBH driver

.../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++
drivers/phy/broadcom/Kconfig | 10 +
drivers/phy/broadcom/Makefile | 1 +
drivers/phy/broadcom/phy-bcm63xx-usbh.c | 463 ++++++++++++++++++
4 files changed, 546 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
create mode 100644 drivers/phy/broadcom/phy-bcm63xx-usbh.c

--
2.27.0


2020-06-16 08:38:32

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings

Document BCM63xx USBH PHY bindings.

Signed-off-by: Álvaro Fernández Rojas <[email protected]>
---
.../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml

diff --git a/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
new file mode 100644
index 000000000000..3e7c97799b91
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/phy/brcm,bcm63xx-usbh-phy.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: BCM63xx USBH PHY
+
+maintainers:
+ - Álvaro Fernández Rojas <[email protected]>
+
+properties:
+ compatible:
+ enum:
+ - brcm,bcm6318-usbh-phy
+ - brcm,bcm6328-usbh-phy
+ - brcm,bcm6358-usbh-phy
+ - brcm,bcm6362-usbh-phy
+ - brcm,bcm6368-usbh-phy
+ - brcm,bcm63268-usbh-phy
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ maxItems: 2
+
+ clock-names:
+ items:
+ - const: usbh
+ - const: usb_ref
+
+ resets:
+ maxItems: 1
+
+ "#phy-cells":
+ const: 0
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - resets
+ - "#phy-cells"
+
+if:
+ properties:
+ compatible:
+ enum:
+ - brcm,bcm6318-usbh-phy
+ - brcm,bcm6328-usbh-phy
+ - brcm,bcm6362-usbh-phy
+ - brcm,bcm63268-usbh-phy
+
+then:
+ properties:
+ power-domains:
+ maxItems: 1
+ required:
+ - power-domains
+
+examples:
+ - |
+ usbh: usb-phy@10001700 {
+ compatible = "brcm,bcm6368-usbh-phy";
+ reg = <0x10001700 0x38>;
+ clocks = <&periph_clk BCM6368_CLK_USBH>;
+ clock-names = "usbh";
+ resets = <&periph_rst BCM6368_RST_USBH>;
+ #phy-cells = <0>;
+ };
--
2.27.0

2020-06-16 17:21:31

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings



On 6/16/2020 1:34 AM, Álvaro Fernández Rojas wrote:
> Document BCM63xx USBH PHY bindings.
>
> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
> ---
> .../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++++++++++++++++++
> 1 file changed, 72 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>
> diff --git a/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
> new file mode 100644
> index 000000000000..3e7c97799b91
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
> @@ -0,0 +1,72 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: "http://devicetree.org/schemas/phy/brcm,bcm63xx-usbh-phy.yaml#"
> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"
> +
> +title: BCM63xx USBH PHY
> +
> +maintainers:
> + - Álvaro Fernández Rojas <[email protected]>
> +
> +properties:
> + compatible:
> + enum:
> + - brcm,bcm6318-usbh-phy
> + - brcm,bcm6328-usbh-phy
> + - brcm,bcm6358-usbh-phy
> + - brcm,bcm6362-usbh-phy
> + - brcm,bcm6368-usbh-phy
> + - brcm,bcm63268-usbh-phy
> +
> + reg:
> + maxItems: 1
> +
> + clocks:
> + maxItems: 2
> +
> + clock-names:
> + items:
> + - const: usbh
> + - const: usb_ref
> +
> + resets:
> + maxItems: 1
> +
> + "#phy-cells":
> + const: 0

On 6328, the same register space allows the controlling of the USB PHY
in either host or device mode, so I believe you would need to add a
#phy-cells = 1 in order to distinguish the consumer (host versus device)
if we get to the point where drivers/usb/gadget/udc/bcm63xx_udc.c
becomes DT aware.

Other than that, this looks good to me!
--
Florian

2020-06-16 18:15:19

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings

Hello Florian,

> El 16 jun 2020, a las 19:17, Florian Fainelli <[email protected]> escribió:
>
>
>
> On 6/16/2020 1:34 AM, Álvaro Fernández Rojas wrote:
>> Document BCM63xx USBH PHY bindings.
>>
>> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
>> ---
>> .../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++++++++++++++++++
>> 1 file changed, 72 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>> new file mode 100644
>> index 000000000000..3e7c97799b91
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>> @@ -0,0 +1,72 @@
>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: "http://devicetree.org/schemas/phy/brcm,bcm63xx-usbh-phy.yaml#"
>> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"
>> +
>> +title: BCM63xx USBH PHY
>> +
>> +maintainers:
>> + - Álvaro Fernández Rojas <[email protected]>
>> +
>> +properties:
>> + compatible:
>> + enum:
>> + - brcm,bcm6318-usbh-phy
>> + - brcm,bcm6328-usbh-phy
>> + - brcm,bcm6358-usbh-phy
>> + - brcm,bcm6362-usbh-phy
>> + - brcm,bcm6368-usbh-phy
>> + - brcm,bcm63268-usbh-phy
>> +
>> + reg:
>> + maxItems: 1
>> +
>> + clocks:
>> + maxItems: 2
>> +
>> + clock-names:
>> + items:
>> + - const: usbh
>> + - const: usb_ref
>> +
>> + resets:
>> + maxItems: 1
>> +
>> + "#phy-cells":
>> + const: 0
>
> On 6328, the same register space allows the controlling of the USB PHY
> in either host or device mode, so I believe you would need to add a
> #phy-cells = 1 in order to distinguish the consumer (host versus device)
> if we get to the point where drivers/usb/gadget/udc/bcm63xx_udc.c
> becomes DT aware.

I’m not really sure about how I should do this because there’s no definition for device phy mode in dt-bindings/phy/phy.h:
https://github.com/torvalds/linux/blob/master/include/dt-bindings/phy/phy.h#L13

Which value should I use for device mode and which one for host?
Should I support both modes at the same time or are they exclusive?

>
> Other than that, this looks good to me!
> --
> Florian

Best regards,
Álvaro.

2020-06-16 18:23:32

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings



On 6/16/2020 11:10 AM, Álvaro Fernández Rojas wrote:
> Hello Florian,
>
>> El 16 jun 2020, a las 19:17, Florian Fainelli <[email protected]> escribió:
>>
>>
>>
>> On 6/16/2020 1:34 AM, Álvaro Fernández Rojas wrote:
>>> Document BCM63xx USBH PHY bindings.
>>>
>>> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
>>> ---
>>> .../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++++++++++++++++++
>>> 1 file changed, 72 insertions(+)
>>> create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>>>
>>> diff --git a/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>>> new file mode 100644
>>> index 000000000000..3e7c97799b91
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>>> @@ -0,0 +1,72 @@
>>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: "http://devicetree.org/schemas/phy/brcm,bcm63xx-usbh-phy.yaml#"
>>> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"
>>> +
>>> +title: BCM63xx USBH PHY
>>> +
>>> +maintainers:
>>> + - Álvaro Fernández Rojas <[email protected]>
>>> +
>>> +properties:
>>> + compatible:
>>> + enum:
>>> + - brcm,bcm6318-usbh-phy
>>> + - brcm,bcm6328-usbh-phy
>>> + - brcm,bcm6358-usbh-phy
>>> + - brcm,bcm6362-usbh-phy
>>> + - brcm,bcm6368-usbh-phy
>>> + - brcm,bcm63268-usbh-phy
>>> +
>>> + reg:
>>> + maxItems: 1
>>> +
>>> + clocks:
>>> + maxItems: 2
>>> +
>>> + clock-names:
>>> + items:
>>> + - const: usbh
>>> + - const: usb_ref
>>> +
>>> + resets:
>>> + maxItems: 1
>>> +
>>> + "#phy-cells":
>>> + const: 0
>>
>> On 6328, the same register space allows the controlling of the USB PHY
>> in either host or device mode, so I believe you would need to add a
>> #phy-cells = 1 in order to distinguish the consumer (host versus device)
>> if we get to the point where drivers/usb/gadget/udc/bcm63xx_udc.c
>> becomes DT aware.
>
> I’m not really sure about how I should do this because there’s no definition for device phy mode in dt-bindings/phy/phy.h:
> https://github.com/torvalds/linux/blob/master/include/dt-bindings/phy/phy.h#L13
>
> Which value should I use for device mode and which one for host?

0 for the host, which would be equivalent to not specifying the
property, and 1 for the device.

> Should I support both modes at the same time or are they exclusive?

This is an OTG controller so you need to be able to dynamically
re-configure the PHY to be in either device or host mode (see comment
about bcm63xx_select_phy_mode), but there would not be both at the same
time.
--
Florian

2020-06-17 11:18:50

by Álvaro Fernández Rojas

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings

Hi Florian,

> El 16 jun 2020, a las 19:17, Florian Fainelli <[email protected]> escribió:
>
>
>
> On 6/16/2020 1:34 AM, Álvaro Fernández Rojas wrote:
>> Document BCM63xx USBH PHY bindings.
>>
>> Signed-off-by: Álvaro Fernández Rojas <[email protected]>
>> ---
>> .../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++++++++++++++++++
>> 1 file changed, 72 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>> new file mode 100644
>> index 000000000000..3e7c97799b91
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>> @@ -0,0 +1,72 @@
>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: "http://devicetree.org/schemas/phy/brcm,bcm63xx-usbh-phy.yaml#"
>> +$schema: "http://devicetree.org/meta-schemas/core.yaml#"
>> +
>> +title: BCM63xx USBH PHY
>> +
>> +maintainers:
>> + - Álvaro Fernández Rojas <[email protected]>
>> +
>> +properties:
>> + compatible:
>> + enum:
>> + - brcm,bcm6318-usbh-phy
>> + - brcm,bcm6328-usbh-phy
>> + - brcm,bcm6358-usbh-phy
>> + - brcm,bcm6362-usbh-phy
>> + - brcm,bcm6368-usbh-phy
>> + - brcm,bcm63268-usbh-phy
>> +
>> + reg:
>> + maxItems: 1
>> +
>> + clocks:
>> + maxItems: 2
>> +
>> + clock-names:
>> + items:
>> + - const: usbh
>> + - const: usb_ref
>> +
>> + resets:
>> + maxItems: 1
>> +
>> + "#phy-cells":
>> + const: 0
>
> On 6328, the same register space allows the controlling of the USB PHY
> in either host or device mode, so I believe you would need to add a
> #phy-cells = 1 in order to distinguish the consumer (host versus device)
> if we get to the point where drivers/usb/gadget/udc/bcm63xx_udc.c
> becomes DT aware.

I’ve just realized that I have implemented this wrong in v3, because I implemented the SwapControl USB_DEVICE_SEL value, and you meant the UTMIControl1 USB_DEVICE_MODE_SEL value.
So I have a couple of questions about this, because I haven’t got any bcm63xx with usb device configuration to test:
- Is USB_DEVICE_SEL also needed in SwapControl or do we only need USB_DEVICE_MODE_SEL in UTMIControl1?
- Are the rest of the host values needed when configured in device mode? Should I only set the device values when in device mode?

>
> Other than that, this looks good to me!
> --
> Florian

Best regards,
Álvaro.

2020-06-17 17:03:27

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings

On Tue, 16 Jun 2020 10:34:07 +0200, ?lvaro Fern?ndez Rojas wrote:
> Document BCM63xx USBH PHY bindings.
>
> Signed-off-by: ?lvaro Fern?ndez Rojas <[email protected]>
> ---
> .../bindings/phy/brcm,bcm63xx-usbh-phy.yaml | 72 +++++++++++++++++++
> 1 file changed, 72 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.yaml
>


My bot found errors running 'make dt_binding_check' on your patch:

Error: Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.example.dts:22.33-34 syntax error
FATAL ERROR: Unable to parse input tree
scripts/Makefile.lib:315: recipe for target 'Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.example.dt.yaml' failed
make[1]: *** [Documentation/devicetree/bindings/phy/brcm,bcm63xx-usbh-phy.example.dt.yaml] Error 1
make[1]: *** Waiting for unfinished jobs....
Makefile:1347: recipe for target 'dt_binding_check' failed
make: *** [dt_binding_check] Error 2


See https://patchwork.ozlabs.org/patch/1310130

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure dt-schema is up to date:

pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade

Please check and re-submit.

2020-06-17 21:38:03

by Florian Fainelli

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: phy: add bcm63xx-usbh bindings



On 6/17/2020 4:16 AM, Álvaro Fernández Rojas wrote:
>> On 6328, the same register space allows the controlling of the USB PHY
>> in either host or device mode, so I believe you would need to add a
>> #phy-cells = 1 in order to distinguish the consumer (host versus device)
>> if we get to the point where drivers/usb/gadget/udc/bcm63xx_udc.c
>> becomes DT aware.
>
> I’ve just realized that I have implemented this wrong in v3, because I implemented the SwapControl USB_DEVICE_SEL value, and you meant the UTMIControl1 USB_DEVICE_MODE_SEL value.

Right that is the register I was referring to.

> So I have a couple of questions about this, because I haven’t got any bcm63xx with usb device configuration to test:
> - Is USB_DEVICE_SEL also needed in SwapControl or do we only need USB_DEVICE_MODE_SEL in UTMIControl1?

It looks like it depends on the device, for 6318 and 63268, there is
USB_DEVICE_MODE_SEL defined, but not for 6328, 6362 or 6368 for
instance. Note that USB_DEVICE_MODE_SEL is relevant for port 2 only for
6318 and 63268 whereas the UTMI_CONTROL1 appears to be for any port.

> - Are the rest of the host values needed when configured in device mode? Should I only set the device values when in device mode?

They could probably be configured although I am not sure they sure they
will be used at all, it's been a while since I looked at this (over 8
years).

I don't know if you have any board with USB device mode capability, if
you do not please email privately and I will ship you one.
--
Florian