diff mbox series

[1/2] dt-bindings: phy: add bcm63xx-usbh bindings

Message ID 20200616083408.3426435-2-noltari@gmail.com (mailing list archive)
State New, archived
Headers show
Series phy: bcm63xx-usbh: Add BCM63xx USBH driver | expand

Commit Message

Álvaro Fernández Rojas June 16, 2020, 8:34 a.m. UTC
Document BCM63xx USBH PHY bindings.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 .../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

Comments

Florian Fainelli June 16, 2020, 5:17 p.m. UTC | #1
On 6/16/2020 1:34 AM, Álvaro Fernández Rojas wrote:
> Document BCM63xx USBH PHY bindings.
> 
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  .../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 <noltari@gmail.com>
> +
> +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!
Álvaro Fernández Rojas June 16, 2020, 6:10 p.m. UTC | #2
Hello Florian,

> El 16 jun 2020, a las 19:17, Florian Fainelli <f.fainelli@gmail.com> 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 <noltari@gmail.com>
>> ---
>> .../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 <noltari@gmail.com>
>> +
>> +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.
Florian Fainelli June 16, 2020, 6:21 p.m. UTC | #3
On 6/16/2020 11:10 AM, Álvaro Fernández Rojas wrote:
> Hello Florian,
> 
>> El 16 jun 2020, a las 19:17, Florian Fainelli <f.fainelli@gmail.com> 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 <noltari@gmail.com>
>>> ---
>>> .../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 <noltari@gmail.com>
>>> +
>>> +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.
Álvaro Fernández Rojas June 17, 2020, 11:16 a.m. UTC | #4
Hi Florian,

> El 16 jun 2020, a las 19:17, Florian Fainelli <f.fainelli@gmail.com> 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 <noltari@gmail.com>
>> ---
>> .../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 <noltari@gmail.com>
>> +
>> +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.
Rob Herring (Arm) June 17, 2020, 5 p.m. UTC | #5
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 <noltari@gmail.com>
> ---
>  .../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.
Florian Fainelli June 17, 2020, 9:35 p.m. UTC | #6
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.
diff mbox series

Patch

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 <noltari@gmail.com>
+
+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>;
+    };