Message ID | 20201111090853.14112-1-Sergey.Semin@baikalelectronics.ru |
---|---|
Headers | show |
Series | dt-bindings: usb: Add generic USB HCD, xHCI, DWC USB3 DT schema | expand |
On Wed, Nov 11, 2020 at 12:08:45PM +0300, Serge Semin wrote: > DWC USB3 DT node is supposed to be compliant with the Generic xHCI > Controller schema, but with additional vendor-specific properties, the > controller-specific reference clocks and PHYs. So let's convert the > currently available legacy text-based DWC USB3 bindings to the DT schema > and make sure the DWC USB3 nodes are also validated against the > usb-xhci.yaml schema. > > Note we have to discard the nodename restriction of being prefixed with > "dwc3@" string, since in accordance with the usb-hcd.yaml schema USB nodes > are supposed to be named as "^usb(@.*)". > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > --- > > Changelog v2: > - Discard '|' from the descriptions, since we don't need to preserve > the text formatting in any of them. > - Drop quotes from around the string constants. > - Fix the "clock-names" prop description to be referring the enumerated > clock-names instead of the ones from the Databook. > > Changelog v3: > - Apply usb-xhci.yaml# schema only if the controller is supposed to work > as either host or otg. > > Changelog v4: > - Apply usb-drd.yaml schema first. If the controller is configured > to work in a gadget mode only, then apply the usb.yaml schema too, > otherwise apply the usb-xhci.yaml schema. > - Discard the Rob'es Reviewed-by tag. Please review the patch one more > time. > --- > .../devicetree/bindings/usb/dwc3.txt | 125 -------- > .../devicetree/bindings/usb/snps,dwc3.yaml | 303 ++++++++++++++++++ > 2 files changed, 303 insertions(+), 125 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/usb/dwc3.txt > create mode 100644 Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt > deleted file mode 100644 > index d03edf9d3935..000000000000 > --- a/Documentation/devicetree/bindings/usb/dwc3.txt > +++ /dev/null > @@ -1,125 +0,0 @@ > -synopsys DWC3 CORE > - > -DWC3- USB3 CONTROLLER. Complies to the generic USB binding properties > - as described in 'usb/generic.txt' > - > -Required properties: > - - compatible: must be "snps,dwc3" > - - reg : Address and length of the register set for the device > - - interrupts: Interrupts used by the dwc3 controller. > - - clock-names: list of clock names. Ideally should be "ref", > - "bus_early", "suspend" but may be less or more. > - - clocks: list of phandle and clock specifier pairs corresponding to > - entries in the clock-names property. > - > -Exception for clocks: > - clocks are optional if the parent node (i.e. glue-layer) is compatible to > - one of the following: > - "cavium,octeon-7130-usb-uctl" > - "qcom,dwc3" > - "samsung,exynos5250-dwusb3" > - "samsung,exynos5433-dwusb3" > - "samsung,exynos7-dwusb3" > - "sprd,sc9860-dwc3" > - "st,stih407-dwc3" > - "ti,am437x-dwc3" > - "ti,dwc3" > - "ti,keystone-dwc3" > - "rockchip,rk3399-dwc3" > - "xlnx,zynqmp-dwc3" > - > -Optional properties: > - - usb-phy : array of phandle for the PHY device. The first element > - in the array is expected to be a handle to the USB2/HS PHY and > - the second element is expected to be a handle to the USB3/SS PHY > - - phys: from the *Generic PHY* bindings > - - phy-names: from the *Generic PHY* bindings; supported names are "usb2-phy" > - or "usb3-phy". > - - resets: set of phandle and reset specifier pairs > - - snps,usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM > - - snps,usb3_lpm_capable: determines if platform is USB3 LPM capable > - - snps,dis-start-transfer-quirk: when set, disable isoc START TRANSFER command > - failure SW work-around for DWC_usb31 version 1.70a-ea06 > - and prior. > - - snps,disable_scramble_quirk: true when SW should disable data scrambling. > - Only really useful for FPGA builds. > - - snps,has-lpm-erratum: true when DWC3 was configured with LPM Erratum enabled > - - snps,lpm-nyet-threshold: LPM NYET threshold > - - snps,u2exit_lfps_quirk: set if we want to enable u2exit lfps quirk > - - snps,u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk > - - snps,req_p1p2p3_quirk: when set, the core will always request for > - P1/P2/P3 transition sequence. > - - snps,del_p1p2p3_quirk: when set core will delay P1/P2/P3 until a certain > - amount of 8B10B errors occur. > - - snps,del_phy_power_chg_quirk: when set core will delay PHY power change > - from P0 to P1/P2/P3. > - - snps,lfps_filter_quirk: when set core will filter LFPS reception. > - - snps,rx_detect_poll_quirk: when set core will disable a 400us delay to start > - Polling LFPS after RX.Detect. > - - snps,tx_de_emphasis_quirk: when set core will set Tx de-emphasis value. > - - snps,tx_de_emphasis: the value driven to the PHY is controlled by the > - LTSSM during USB3 Compliance mode. > - - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy. > - - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy. > - - snps,dis_enblslpm_quirk: when set clears the enblslpm in GUSB2PHYCFG, > - disabling the suspend signal to the PHY. > - - snps,dis-u1-entry-quirk: set if link entering into U1 needs to be disabled. > - - snps,dis-u2-entry-quirk: set if link entering into U2 needs to be disabled. > - - snps,dis_rxdet_inp3_quirk: when set core will disable receiver detection > - in PHY P3 power state. > - - snps,dis-u2-freeclk-exists-quirk: when set, clear the u2_freeclk_exists > - in GUSB2PHYCFG, specify that USB2 PHY doesn't provide > - a free-running PHY clock. > - - snps,dis-del-phy-power-chg-quirk: when set core will change PHY power > - from P0 to P1/P2/P3 without delay. > - - snps,dis-tx-ipgap-linecheck-quirk: when set, disable u2mac linestate check > - during HS transmit. > - - snps,parkmode-disable-ss-quirk: when set, all SuperSpeed bus instances in > - park mode are disabled. > - - snps,dis_metastability_quirk: when set, disable metastability workaround. > - CAUTION: use only if you are absolutely sure of it. > - - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal > - utmi_l1_suspend_n, false when asserts utmi_sleep_n > - - snps,hird-threshold: HIRD threshold > - - snps,hsphy_interface: High-Speed PHY interface selection between "utmi" for > - UTMI+ and "ulpi" for ULPI when the DWC_USB3_HSPHY_INTERFACE has value 3. > - - snps,quirk-frame-length-adjustment: Value for GFLADJ_30MHZ field of GFLADJ > - register for post-silicon frame length adjustment when the > - fladj_30mhz_sdbnd signal is invalid or incorrect. > - - snps,rx-thr-num-pkt-prd: periodic ESS RX packet threshold count - host mode > - only. Set this and rx-max-burst-prd to a valid, > - non-zero value 1-16 (DWC_usb31 programming guide > - section 1.2.4) to enable periodic ESS RX threshold. > - - snps,rx-max-burst-prd: max periodic ESS RX burst size - host mode only. Set > - this and rx-thr-num-pkt-prd to a valid, non-zero value > - 1-16 (DWC_usb31 programming guide section 1.2.4) to > - enable periodic ESS RX threshold. > - - snps,tx-thr-num-pkt-prd: periodic ESS TX packet threshold count - host mode > - only. Set this and tx-max-burst-prd to a valid, > - non-zero value 1-16 (DWC_usb31 programming guide > - section 1.2.3) to enable periodic ESS TX threshold. > - - snps,tx-max-burst-prd: max periodic ESS TX burst size - host mode only. Set > - this and tx-thr-num-pkt-prd to a valid, non-zero value > - 1-16 (DWC_usb31 programming guide section 1.2.3) to > - enable periodic ESS TX threshold. > - > - - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated. > - - snps,incr-burst-type-adjustment: Value for INCR burst type of GSBUSCFG0 > - register, undefined length INCR burst type enable and INCRx type. > - When just one value, which means INCRX burst mode enabled. When > - more than one value, which means undefined length INCR burst type > - enabled. The values can be 1, 4, 8, 16, 32, 64, 128 and 256. > - > - - in addition all properties from usb-xhci.txt from the current directory are > - supported as well > - > - > -This is usually a subnode to DWC3 glue to which it is connected. > - > -dwc3@4a030000 { > - compatible = "snps,dwc3"; > - reg = <0x4a030000 0xcfff>; > - interrupts = <0 92 4> > - usb-phy = <&usb2_phy>, <&usb3,phy>; > - snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>; > -}; > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > new file mode 100644 > index 000000000000..079617891da6 > --- /dev/null > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > @@ -0,0 +1,303 @@ > +# SPDX-License-Identifier: GPL-2.0 > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/usb/snps,dwc3.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Synopsys DesignWare USB3 Controller > + > +maintainers: > + - Felipe Balbi <balbi@kernel.org> > + > +description: > + This is usually a subnode to DWC3 glue to which it is connected, but can also > + be presented as a standalone DT node with an optional vendor-specific > + compatible string. > + > +allOf: > + - $ref: usb-drd.yaml# > + - if: > + properties: > + dr_mode: > + const: peripheral > + then: > + $ref: usb.yaml# This part could be done in usb-drd.yaml? > + else: > + $ref: usb-xhci.yaml# I'd really prefer if all the schema can just be applied unconditionally. Shouldn't someone (like a bootloader) be able to change dr_mode without changing anything else to set the mode? That would imply all the schemas can be applied. Rob
On Thu, Nov 12, 2020 at 01:29:46PM +0300, Serge Semin wrote: > On Wed, Nov 11, 2020 at 02:14:23PM -0600, Rob Herring wrote: > > On Wed, Nov 11, 2020 at 12:08:45PM +0300, Serge Semin wrote: > > > DWC USB3 DT node is supposed to be compliant with the Generic xHCI > > > Controller schema, but with additional vendor-specific properties, the > > > controller-specific reference clocks and PHYs. So let's convert the > > > currently available legacy text-based DWC USB3 bindings to the DT schema > > > and make sure the DWC USB3 nodes are also validated against the > > > usb-xhci.yaml schema. > > > > > > Note we have to discard the nodename restriction of being prefixed with > > > "dwc3@" string, since in accordance with the usb-hcd.yaml schema USB nodes > > > are supposed to be named as "^usb(@.*)". > > > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > > > > > --- > > > > > > Changelog v2: > > > - Discard '|' from the descriptions, since we don't need to preserve > > > the text formatting in any of them. > > > - Drop quotes from around the string constants. > > > - Fix the "clock-names" prop description to be referring the enumerated > > > clock-names instead of the ones from the Databook. > > > > > > Changelog v3: > > > - Apply usb-xhci.yaml# schema only if the controller is supposed to work > > > as either host or otg. > > > > > > Changelog v4: > > > - Apply usb-drd.yaml schema first. If the controller is configured > > > to work in a gadget mode only, then apply the usb.yaml schema too, > > > otherwise apply the usb-xhci.yaml schema. > > > - Discard the Rob'es Reviewed-by tag. Please review the patch one more > > > time. > > > --- > > > .../devicetree/bindings/usb/dwc3.txt | 125 -------- > > > .../devicetree/bindings/usb/snps,dwc3.yaml | 303 ++++++++++++++++++ > > > 2 files changed, 303 insertions(+), 125 deletions(-) > > > delete mode 100644 Documentation/devicetree/bindings/usb/dwc3.txt > > > create mode 100644 Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > new file mode 100644 > > > index 000000000000..079617891da6 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > @@ -0,0 +1,303 @@ > > > +# SPDX-License-Identifier: GPL-2.0 > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/usb/snps,dwc3.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: Synopsys DesignWare USB3 Controller > > > + > > > +maintainers: > > > + - Felipe Balbi <balbi@kernel.org> > > > + > > > +description: > > > + This is usually a subnode to DWC3 glue to which it is connected, but can also > > > + be presented as a standalone DT node with an optional vendor-specific > > > + compatible string. > > > + > > > > +allOf: > > > + - $ref: usb-drd.yaml# > > > + - if: > > > + properties: > > > + dr_mode: > > > + const: peripheral Another thing, this evaluates to true if dr_mode is not present. You need to add 'required'? If dr_mode is otg, then don't you need to apply both usb.yaml and usb-xhci.yaml? > > > + then: > > > + $ref: usb.yaml# > > > > This part could be done in usb-drd.yaml? > > Originally I was thinking about that, but then in order to minimize > the properties validation I've decided to split the properties in > accordance with the USB controllers functionality: > > +----- USB Gadget/Peripheral Controller. There is no > | specific schema for the gadgets since there is no > | common gadget properties (at least I failed to find > | ones). So the pure gadget controllers need to be > | validated just against usb.yaml schema. > | > usb.yaml <--+-- usb-hcd.yaml - Generic USB Host Controller. The schema > ^ turns out to include the OHCI/UHCI/EHCI > | properties, which AFAICS are also > | applicable for the other host controllers. > | So any USB host controller node needs to > | be validated against this schema. > | > +- usb-xhci.yaml - Generic xHCI Host controller. > > usb-drd.yaml -- USB Dual-Role/OTG Controllers. It describes the > DRD/OTG-specific properties and nothing else. So normally > it should be applied together with one of the > schemas described above. > > So the use-cases of the suggested schemas is following: > > 1) USB Controller is pure gadget? Then: > + allOf: > + - $ref: usb.yaml# > 2) USB Controller is pure USB host (including OHCI/UHCI/EHCI)? > + allOf: > + - $ref: usb-hcd.yaml# > Note this prevents us from fixing all the currently available USB DT > schemas, which already apply the usb-hcd.yaml schema. > 3) USB Controller is pure xHCI host controller? Then: > + allOf: > + - $ref: usb-xhci.yaml# > 4) USB Controller is Dual-Role/OTG controller with USB 2.0 host? Then: > + allOf: > + - $ref: usb-drd.yaml# > + - $ref: usb-hcd.yaml# > 5) USB Controller is Dual-Role/OTG controller with xHCI host? Then: > + allOf: > + - $ref: usb-drd.yaml# > + - $ref: usb-xhci.yaml# > 6) USB Controller is Dual-Role/OTG controller which can only be a > gadget? Then: > + allOf: > + - $ref: usb-drd.yaml# > + - $ref: usb.yaml# > > * Don't know really if controllers like in 6)-th really exist. Most > * likely they are still internally capable of dual-roling, but due to > * some conditions can be used as gadgets only. > > It looks a bit complicated, but at least by having such design we'd minimize > the number of properties validation. > > Alternatively we could implement a hierarchy like this (as you, Rob, > suggested in the comment above): > > +-- USB Gadget/Peripheral Controller > | > +-- usb-drd.yaml - USB Dual-Role/OTG Controllers > | > usb.yaml <--+-- usb-dcd.yaml - Generic USB Host Controller > ^ > | > +- usb-xhci.yaml - Generic xHCI Host controller > > But, for instance, if we got to have an OTG controller with USB 2.0 > host capability, the schema would have needed to be validated as > described in 4) in the list above. That would have caused the usb.yaml > schema validation twice. > > Of course I could have missed or misunderstood something. So any > suggestion, any help with making things easier would be very > appreciated. I asked Greg what he was thinking in this matter in > the previous patchset thread, but he didn't respond. > > > > > > + else: > > > + $ref: usb-xhci.yaml# > > > > I'd really prefer if all the schema can just be applied unconditionally. > > Shouldn't someone (like a bootloader) be able to change dr_mode without > > changing anything else to set the mode? That would imply all the > > schemas can be applied. > > Theoretically it's possible, but I don't really know whether it can be > practically met. Of course I fully agree with you and it's preferable to > simplify the schema by getting rid of the condition if it's possible. > > My point of using the conditional schema here has been based > on the driver implementation. According to the driver code if OTG mode is > enabled by means of the dr_mode property, then the controller can work as > either host or gadget. If either host or gadget mode is enabled in > the dr_mode property, the mode updating won't be supported. So any > properties specific to the unsupported mode will be just ignored. > > In addition to that DWC USB3 IP-core can be synthesized with different > DWC_USB3_MODE parameter value. The controller can be either device > (gadget), or host, or DRD, or HUB. In that case the dr_mode should be > set in accordance with that parameter value. It means that the > DWC USB3 controller will support the features in accordance with the > selected parameter. > > Should we really bother with all of that? Could we just apply the > schema like: allOf: [$ref: usb-drd.yaml#, $ref: usb-hcd.yaml#] and > have the things much easier seeing the host-specific properties aren't > required anyway? That's the main question. I've decided to bother, > since it give us a better hardware description. If you think it's better > to keep things easier, I'll be ok with this. It won't be that > contradicting to the hardware capabilities after all. Okay, it's probably better to keep things like you have them given there's so many combinations of USB controllers. Rob
On Wed, 11 Nov 2020 12:08:37 +0300, Serge Semin wrote: > The generic USB properties have been described in the legacy bindings > text file: Documentation/devicetree/bindings/usb/generic.txt . Let's > convert its content into the generic USB, USB HCD and USB DRD DT > schemas. So the Generic USB schema will be applicable to all USB > controllers, USB HCD - for the generic USB Host controllers and the USB > DRD - for the USB Dual-role controllers. > > Note the USB DRD schema is supposed to work in conjunction with > the USB peripheral/gadget and USB host controllers DT schemas. > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > --- > > Changelog v2: > - Discard '|' in all the new properties, since we don't need to preserve > the text formatting. > - Convert abbreviated form of the "maximum-speed" enum restriction into > the multi-lined version of the list. > - Drop quotes from around the string constants. > > Changelog v4: > - Redistribute the properties between generic ones, USB HCD-specific and > USB DRD-specific. > - Discard the Rob'es Reviewed-by tag. Please review the patch one more time. > --- > .../devicetree/bindings/usb/generic.txt | 57 -------------- > .../devicetree/bindings/usb/usb-drd.yaml | 77 +++++++++++++++++++ > .../devicetree/bindings/usb/usb-hcd.yaml | 5 ++ > .../devicetree/bindings/usb/usb.yaml | 22 ++++++ > 4 files changed, 104 insertions(+), 57 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/usb/generic.txt > create mode 100644 Documentation/devicetree/bindings/usb/usb-drd.yaml > Reviewed-by: Rob Herring <robh@kernel.org>
On Sat, Nov 21, 2020 at 06:42:28AM -0600, Rob Herring wrote: > On Thu, Nov 12, 2020 at 01:29:46PM +0300, Serge Semin wrote: > > On Wed, Nov 11, 2020 at 02:14:23PM -0600, Rob Herring wrote: > > > On Wed, Nov 11, 2020 at 12:08:45PM +0300, Serge Semin wrote: > > > > DWC USB3 DT node is supposed to be compliant with the Generic xHCI > > > > Controller schema, but with additional vendor-specific properties, the > > > > controller-specific reference clocks and PHYs. So let's convert the > > > > currently available legacy text-based DWC USB3 bindings to the DT schema > > > > and make sure the DWC USB3 nodes are also validated against the > > > > usb-xhci.yaml schema. > > > > > > > > Note we have to discard the nodename restriction of being prefixed with > > > > "dwc3@" string, since in accordance with the usb-hcd.yaml schema USB nodes > > > > are supposed to be named as "^usb(@.*)". > > > > > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > > > > > > > --- > > > > > > > > Changelog v2: > > > > - Discard '|' from the descriptions, since we don't need to preserve > > > > the text formatting in any of them. > > > > - Drop quotes from around the string constants. > > > > - Fix the "clock-names" prop description to be referring the enumerated > > > > clock-names instead of the ones from the Databook. > > > > > > > > Changelog v3: > > > > - Apply usb-xhci.yaml# schema only if the controller is supposed to work > > > > as either host or otg. > > > > > > > > Changelog v4: > > > > - Apply usb-drd.yaml schema first. If the controller is configured > > > > to work in a gadget mode only, then apply the usb.yaml schema too, > > > > otherwise apply the usb-xhci.yaml schema. > > > > - Discard the Rob'es Reviewed-by tag. Please review the patch one more > > > > time. > > > > --- > > > > .../devicetree/bindings/usb/dwc3.txt | 125 -------- > > > > .../devicetree/bindings/usb/snps,dwc3.yaml | 303 ++++++++++++++++++ > > > > 2 files changed, 303 insertions(+), 125 deletions(-) > > > > delete mode 100644 Documentation/devicetree/bindings/usb/dwc3.txt > > > > create mode 100644 Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > > new file mode 100644 > > > > index 000000000000..079617891da6 > > > > --- /dev/null > > > > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > > @@ -0,0 +1,303 @@ > > > > +# SPDX-License-Identifier: GPL-2.0 > > > > +%YAML 1.2 > > > > +--- > > > > +$id: http://devicetree.org/schemas/usb/snps,dwc3.yaml# > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > > + > > > > +title: Synopsys DesignWare USB3 Controller > > > > + > > > > +maintainers: > > > > + - Felipe Balbi <balbi@kernel.org> > > > > + > > > > +description: > > > > + This is usually a subnode to DWC3 glue to which it is connected, but can also > > > > + be presented as a standalone DT node with an optional vendor-specific > > > > + compatible string. > > > > + > > > > > > +allOf: > > > > + - $ref: usb-drd.yaml# > > > > + - if: > > > > + properties: > > > > + dr_mode: > > > > + const: peripheral > > Another thing, this evaluates to true if dr_mode is not present. You > need to add 'required'? Right. Will something like this do that? + allOf: + - $ref: usb-drd.yaml# + - if: + properties: + dr_mode: + const: peripheral + + required: + - dr_mode + then: + $ref: usb.yaml# + else + $ref: usb-xhci.yaml# > If dr_mode is otg, then don't you need to apply > both usb.yaml and usb-xhci.yaml? No I don't. Since there is no peripheral-specific DT schema, then the only schema any USB-gadget node needs to pass is usb.yaml, which is already included into the usb-xhci.yaml schema. So for pure OTG devices with xHCI host and gadget capabilities it's enough to evaluate: allOf: [$ref: usb-drd.yaml#, $ref: usb-xhci.yaml#]. Please see the sketch/ASCII-figure below and the following text for details. -Sergey > > > > > + then: > > > > + $ref: usb.yaml# > > > > > > This part could be done in usb-drd.yaml? > > > > Originally I was thinking about that, but then in order to minimize > > the properties validation I've decided to split the properties in > > accordance with the USB controllers functionality: > > > > +----- USB Gadget/Peripheral Controller. There is no > > | specific schema for the gadgets since there is no > > | common gadget properties (at least I failed to find > > | ones). So the pure gadget controllers need to be > > | validated just against usb.yaml schema. > > | > > usb.yaml <--+-- usb-hcd.yaml - Generic USB Host Controller. The schema > > ^ turns out to include the OHCI/UHCI/EHCI > > | properties, which AFAICS are also > > | applicable for the other host controllers. > > | So any USB host controller node needs to > > | be validated against this schema. > > | > > +- usb-xhci.yaml - Generic xHCI Host controller. > > > > usb-drd.yaml -- USB Dual-Role/OTG Controllers. It describes the > > DRD/OTG-specific properties and nothing else. So normally > > it should be applied together with one of the > > schemas described above. > > > > So the use-cases of the suggested schemas is following: > > > > 1) USB Controller is pure gadget? Then: > > + allOf: > > + - $ref: usb.yaml# > > 2) USB Controller is pure USB host (including OHCI/UHCI/EHCI)? > > + allOf: > > + - $ref: usb-hcd.yaml# > > Note this prevents us from fixing all the currently available USB DT > > schemas, which already apply the usb-hcd.yaml schema. > > 3) USB Controller is pure xHCI host controller? Then: > > + allOf: > > + - $ref: usb-xhci.yaml# > > 4) USB Controller is Dual-Role/OTG controller with USB 2.0 host? Then: > > + allOf: > > + - $ref: usb-drd.yaml# > > + - $ref: usb-hcd.yaml# > > 5) USB Controller is Dual-Role/OTG controller with xHCI host? Then: > > + allOf: > > + - $ref: usb-drd.yaml# > > + - $ref: usb-xhci.yaml# > > 6) USB Controller is Dual-Role/OTG controller which can only be a > > gadget? Then: > > + allOf: > > + - $ref: usb-drd.yaml# > > + - $ref: usb.yaml# > > > > * Don't know really if controllers like in 6)-th really exist. Most > > * likely they are still internally capable of dual-roling, but due to > > * some conditions can be used as gadgets only. > > > > It looks a bit complicated, but at least by having such design we'd minimize > > the number of properties validation. > > [...]
On Wed, Nov 25, 2020 at 1:32 AM Serge Semin <Sergey.Semin@baikalelectronics.ru> wrote: > > On Sat, Nov 21, 2020 at 06:42:28AM -0600, Rob Herring wrote: > > On Thu, Nov 12, 2020 at 01:29:46PM +0300, Serge Semin wrote: > > > On Wed, Nov 11, 2020 at 02:14:23PM -0600, Rob Herring wrote: > > > > On Wed, Nov 11, 2020 at 12:08:45PM +0300, Serge Semin wrote: > > > > > DWC USB3 DT node is supposed to be compliant with the Generic xHCI > > > > > Controller schema, but with additional vendor-specific properties, the > > > > > controller-specific reference clocks and PHYs. So let's convert the > > > > > currently available legacy text-based DWC USB3 bindings to the DT schema > > > > > and make sure the DWC USB3 nodes are also validated against the > > > > > usb-xhci.yaml schema. > > > > > > > > > > Note we have to discard the nodename restriction of being prefixed with > > > > > "dwc3@" string, since in accordance with the usb-hcd.yaml schema USB nodes > > > > > are supposed to be named as "^usb(@.*)". > > > > > > > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > > > > > > > > > --- > > > > > > > > > > Changelog v2: > > > > > - Discard '|' from the descriptions, since we don't need to preserve > > > > > the text formatting in any of them. > > > > > - Drop quotes from around the string constants. > > > > > - Fix the "clock-names" prop description to be referring the enumerated > > > > > clock-names instead of the ones from the Databook. > > > > > > > > > > Changelog v3: > > > > > - Apply usb-xhci.yaml# schema only if the controller is supposed to work > > > > > as either host or otg. > > > > > > > > > > Changelog v4: > > > > > - Apply usb-drd.yaml schema first. If the controller is configured > > > > > to work in a gadget mode only, then apply the usb.yaml schema too, > > > > > otherwise apply the usb-xhci.yaml schema. > > > > > - Discard the Rob'es Reviewed-by tag. Please review the patch one more > > > > > time. > > > > > --- > > > > > .../devicetree/bindings/usb/dwc3.txt | 125 -------- > > > > > .../devicetree/bindings/usb/snps,dwc3.yaml | 303 ++++++++++++++++++ > > > > > 2 files changed, 303 insertions(+), 125 deletions(-) > > > > > delete mode 100644 Documentation/devicetree/bindings/usb/dwc3.txt > > > > > create mode 100644 Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > > > > > > > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > > > new file mode 100644 > > > > > index 000000000000..079617891da6 > > > > > --- /dev/null > > > > > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > > > > @@ -0,0 +1,303 @@ > > > > > +# SPDX-License-Identifier: GPL-2.0 > > > > > +%YAML 1.2 > > > > > +--- > > > > > +$id: http://devicetree.org/schemas/usb/snps,dwc3.yaml# > > > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > > > + > > > > > +title: Synopsys DesignWare USB3 Controller > > > > > + > > > > > +maintainers: > > > > > + - Felipe Balbi <balbi@kernel.org> > > > > > + > > > > > +description: > > > > > + This is usually a subnode to DWC3 glue to which it is connected, but can also > > > > > + be presented as a standalone DT node with an optional vendor-specific > > > > > + compatible string. > > > > > + > > > > > > > > +allOf: > > > > > + - $ref: usb-drd.yaml# > > > > > + - if: > > > > > + properties: > > > > > + dr_mode: > > > > > + const: peripheral > > > > > Another thing, this evaluates to true if dr_mode is not present. You > > need to add 'required'? > > Right. Will something like this do that? Yes. > > + allOf: > + - $ref: usb-drd.yaml# > + - if: > + properties: > + dr_mode: > + const: peripheral > + > + required: > + - dr_mode > + then: > + $ref: usb.yaml# > + else > + $ref: usb-xhci.yaml# > > > If dr_mode is otg, then don't you need to apply > > both usb.yaml and usb-xhci.yaml? > > No I don't. Since there is no peripheral-specific DT schema, then the > only schema any USB-gadget node needs to pass is usb.yaml, which > is already included into the usb-xhci.yaml schema. So for pure OTG devices > with xHCI host and gadget capabilities it's enough to evaluate: allOf: > [$ref: usb-drd.yaml#, $ref: usb-xhci.yaml#]. Please see the > sketch/ASCII-figure below and the following text for details. Okay. Rob
We've performed some work on the Generic USB HCD, xHCI and DWC USB3 DT bindings in the framework of the Baikal-T1 SoC support integration into the kernel. This patchset is a result of that work. First of all we moved the generic USB properties from the legacy text bindings to the USB DT schema. The properties have been distributed between three DT schemas dedicated for particular types of USB controllers: Generic USB controller properties (like node-naming, phys, maximum-speed, etc), Generic USB Host Controller bindings (companion and TPL support), Dual-Role USB Controller (OTG revision, DR mode, HNP/SRP/ADP protocols, etc). So the USB controllers DT bindings from now can validate the nodes against a generic USB-controller schema suitable for the controller functionality. Secondly we converted generic USB xHCI text bindings file into the DT schema. It had to be split up into two bindings: DT schema with generic xHCI properties and a generic xHCI device DT schema. The later will be used to validate the pure xHCI-based nodes, while the former can be utilized by some vendor-specific versions of xHCI. Thirdly, what was primarily intended to be done for Baikal-T1 SoC USB we converted the legacy text-based DWC USB3 bindings to DT schema and altered the result a bit so it would be more coherent with what actually controller and its driver support. Since we've now got the DWC USB3 DT schema, we made it used to validate the sub-nodes of the Qualcom, TI and Amlogic DWC3 DT nodes. Link: https://lore.kernel.org/linux-usb/20201010224121.12672-1-Sergey.Semin@baikalelectronics.ru/ Changelog v2: - Thanks to Sergei Shtylyov for suggesting the commit logs grammar fixes: [PATCH 04/18] dt-bindings: usb: usb-hcd: Add "ulpi/serial/hsic" PHY types [PATCH 05/18] dt-bindings: usb: usb-hcd: Add "tpl-support" property [PATCH 11/18] dt-bindings: usb: dwc3: Add interrupt-names property support [PATCH 13/18] dt-bindings: usb: dwc3: Add Tx De-emphasis restrictions [PATCH 17/18] dt-bindings: usb: keystone-dwc3: Validate DWC3 sub-node - Set FL-adj of the amlogiv,meson-g12a-usb controller with value 0x20 instead of completely removing the property. - Drop the patch: [PATCH 02/18] dt-bindings: usb: usb-hcd: Add "wireless" maximum-speed property value since "wireless" speed type is depracated due to lack of the device supporting it. - Drop quotes from around the compat string constant. - Discard '|' from the property descriptions, since we don't need to preserve the text formatting. - Convert abbreviated form of the "maximum-speed" enum constraint into the multi-lined version of the list. - Fix the DW USB3 "clock-names" prop description to be refererring to the enumerated clock-names instead of the ones from the Databook. - Add explicit "additionalProperties: true" to the usb-xhci.yaml schema, since additionalProperties/unevaluatedProperties are going to be mandary for each binding. - Use "oneOf: [dwc2.yaml#, snps,dwc3.yaml#]" instead of the bulky "if: properties: compatibe: ..." statement. - Discard the "^dwc3@[0-9a-f]+$" nodes from being acceptable as sub-nodes of the Qualcomm DWC3 DT nodes. - Add new patches: [PATCH 18/20] arch: dts: Fix EHCI/OHCI DT nodes name [PATCH 19/20] arch: dts: Fix xHCI DT nodes name [PATCH 20/20] arch: dts: Fix DWC USB3 DT nodes name Link: https://lore.kernel.org/linux-usb/20201014101402.18271-1-Sergey.Semin@baikalelectronics.ru Changelog v3: - Drop the patches: [PATCH 18/20] arch: dts: Fix EHCI/OHCI DT nodes name [PATCH 19/20] arch: dts: Fix xHCI DT nodes name [PATCH 20/20] arch: dts: Fix DWC USB3 DT nodes name as they are going to be submitted in the framework of a dedicated patchset. - Drop the patch: [PATCH 11/20] dt-bindings: usb: dwc3: Add synopsys,dwc3 compatible string since it's going to be replaced with the driver/dts fixup and moved to a dedicated patchset. - Apply usb-xhci.yaml# schema for the DWC USB3 node only if the controller is supposed to work as either host or otg. Link: https://lore.kernel.org/linux-usb/20201020112101.19077-1-Sergey.Semin@baikalelectronics.ru Changelog v4: - Get the patch [PATCH 11/17] dt-bindings: usb: dwc3: Add synopsys,dwc3 compatible string back, since we can't discard the deprecated prefix from the driver. - Discard the block scalar style modifier "|" from the interrupts property description. - Split the generic USB controller properties into three schemas: Generic USB controllers, USB Host controllers and USB OTG controllers. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> Cc: Andy Gross <agross@kernel.org> Cc: Bjorn Andersson <bjorn.andersson@linaro.org> Cc: Manu Gautam <mgautam@codeaurora.org> Cc: Roger Quadros <rogerq@ti.com> Cc: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Cc: Neil Armstrong <narmstrong@baylibre.com> Cc: Kevin Hilman <khilman@baylibre.com> Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Cc: Chunfeng Yun <chunfeng.yun@mediatek.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-snps-arc@lists.infradead.org Cc: linux-mips@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-usb@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (18): dt-bindings: usb: usb-hcd: Detach generic USB controller properties dt-bindings: usb: Convert generic USB properties to DT schemas dt-bindings: usb: usb-drd: Add "otg-rev" property constraints dt-bindings: usb: Add "ulpi/serial/hsic" PHY types dt-bindings: usb: usb-hcd: Add "tpl-support" property dt-bindings: usb: Add generic "usb-phy" property dt-bindings: usb: Convert xHCI bindings to DT schema dt-bindings: usb: xhci: Add Broadcom STB v2 compatible device dt-bindings: usb: renesas-xhci: Refer to the usb-xhci.yaml file dt-bindings: usb: Convert DWC USB3 bindings to DT schema dt-bindings: usb: dwc3: Add interrupt-names property support dt-bindings: usb: dwc3: Add synopsys,dwc3 compatible string dt-bindings: usb: dwc3: Add Tx De-emphasis constraints dt-bindings: usb: dwc3: Add Frame Length Adj constraints dt-bindings: usb: meson-g12a-usb: Fix FL-adj property value dt-bindings: usb: meson-g12a-usb: Validate DWC2/DWC3 sub-nodes dt-bindings: usb: keystone-dwc3: Validate DWC3 sub-node dt-bindings: usb: qcom,dwc3: Validate DWC3 sub-node .../usb/amlogic,meson-g12a-usb-ctrl.yaml | 6 +- .../devicetree/bindings/usb/dwc3.txt | 125 ------- .../devicetree/bindings/usb/generic-xhci.yaml | 65 ++++ .../devicetree/bindings/usb/generic.txt | 57 ---- .../devicetree/bindings/usb/qcom,dwc3.yaml | 9 +- .../bindings/usb/renesas,usb-xhci.yaml | 4 +- .../devicetree/bindings/usb/snps,dwc3.yaml | 323 ++++++++++++++++++ .../bindings/usb/ti,keystone-dwc3.yaml | 4 +- .../devicetree/bindings/usb/usb-drd.yaml | 78 +++++ .../devicetree/bindings/usb/usb-hcd.yaml | 19 +- .../devicetree/bindings/usb/usb-xhci.txt | 41 --- .../devicetree/bindings/usb/usb-xhci.yaml | 42 +++ .../devicetree/bindings/usb/usb.yaml | 60 ++++ 13 files changed, 589 insertions(+), 244 deletions(-) delete mode 100644 Documentation/devicetree/bindings/usb/dwc3.txt create mode 100644 Documentation/devicetree/bindings/usb/generic-xhci.yaml delete mode 100644 Documentation/devicetree/bindings/usb/generic.txt create mode 100644 Documentation/devicetree/bindings/usb/snps,dwc3.yaml create mode 100644 Documentation/devicetree/bindings/usb/usb-drd.yaml delete mode 100644 Documentation/devicetree/bindings/usb/usb-xhci.txt create mode 100644 Documentation/devicetree/bindings/usb/usb-xhci.yaml create mode 100644 Documentation/devicetree/bindings/usb/usb.yaml