Re: [PATCH 02/16] dt-bindings: net: Add Baikal-T1 GMAC bindings

2021-02-09 Thread Rob Herring
On Mon, Feb 08, 2021 at 05:08:06PM +0300, Serge Semin wrote:
> Baikal-T1 SoC is equipped with two DW GMAC v3.73a-based 1GBE ethernet
> interfaces synthesized with: RGMII PHY interface, AXI-DMA and APB3 CSR,
> 16KB Tx/Rx FIFOs and PBL up to half of that, PTP, PMT, TCP/IP CoE, up to 4
> outstanding AXI read/write requests, maximum AXI burst length of 16 beats,
> up to eight MAC address slots, one GPI and one GPO ports. Generic DW
> MAC/STMMAC driver will easily handle the DT-node describing the Baikal-T1
> GMAC network devices, but the bindings still needs to be created to have a
> better understanding of what the interface looks like.
> 
> Signed-off-by: Serge Semin 
> 
> ---
> 
> Rob, please note I couldn't declare the axi-config object properties 
> constraints
> without specifying the properties type and description. If I remove them the
> dt_binding_check will curse with the error:
> 
> >> .../baikal,bt1-gmac.yaml: properties:axi-config:properties:snps,blen: 
> >> 'description' is a required property
> >> .../baikal,bt1-gmac.yaml: 
> >> properties:axi-config:properties:snps,wr_osr_lmt: 'oneOf' conditional 
> >> failed, one must be fixed:
> 'type' is a required property
> Additional properties are not allowed ('maximum' was unexpected)
> >> ...
> 
> I did't know what to do with these errors, so I just created normal sub-node
> properties with stricter constraints than they are specified in the main
> snps,dwmac.yaml schema. Any suggestion what is a better way to apply
> additional constraints on sub-node properties?

Yes, that's known problem which I don't have a solution for. I think the 
solution is checking all properties have a type defined once and only 
once. That would also make sure we don't have 2 property names with 
different types. With that we can loosen the meta-schema checks. In the 
vast majority of cases though we need a type, so the exceptions like 
here will need to duplicate the type and description.


Reviewed-by: Rob Herring 

> ---
>  .../bindings/net/baikal,bt1-gmac.yaml | 150 ++
>  1 file changed, 150 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/net/baikal,bt1-gmac.yaml


[PATCH 02/16] dt-bindings: net: Add Baikal-T1 GMAC bindings

2021-02-08 Thread Serge Semin
Baikal-T1 SoC is equipped with two DW GMAC v3.73a-based 1GBE ethernet
interfaces synthesized with: RGMII PHY interface, AXI-DMA and APB3 CSR,
16KB Tx/Rx FIFOs and PBL up to half of that, PTP, PMT, TCP/IP CoE, up to 4
outstanding AXI read/write requests, maximum AXI burst length of 16 beats,
up to eight MAC address slots, one GPI and one GPO ports. Generic DW
MAC/STMMAC driver will easily handle the DT-node describing the Baikal-T1
GMAC network devices, but the bindings still needs to be created to have a
better understanding of what the interface looks like.

Signed-off-by: Serge Semin 

---

Rob, please note I couldn't declare the axi-config object properties constraints
without specifying the properties type and description. If I remove them the
dt_binding_check will curse with the error:

>> .../baikal,bt1-gmac.yaml: properties:axi-config:properties:snps,blen: 
>> 'description' is a required property
>> .../baikal,bt1-gmac.yaml: properties:axi-config:properties:snps,wr_osr_lmt: 
>> 'oneOf' conditional failed, one must be fixed:
'type' is a required property
Additional properties are not allowed ('maximum' was unexpected)
>> ...

I did't know what to do with these errors, so I just created normal sub-node
properties with stricter constraints than they are specified in the main
snps,dwmac.yaml schema. Any suggestion what is a better way to apply
additional constraints on sub-node properties?
---
 .../bindings/net/baikal,bt1-gmac.yaml | 150 ++
 1 file changed, 150 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/net/baikal,bt1-gmac.yaml

diff --git a/Documentation/devicetree/bindings/net/baikal,bt1-gmac.yaml 
b/Documentation/devicetree/bindings/net/baikal,bt1-gmac.yaml
new file mode 100644
index ..30ab74a9023d
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/baikal,bt1-gmac.yaml
@@ -0,0 +1,150 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/baikal,bt1-gmac.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Baikal-T1 DW GMAC Network Interface
+
+maintainers:
+  - Serge Semin 
+
+description:
+  Baikal-T1 is equipped with two DW GMAC v3.73a network interfaces. Each of
+  them doesn't have any on-SoC PHY attached, but instead exports RGMII
+  interface to connect any compatible physical layer transceiver.
+
+select:
+  properties:
+compatible:
+  contains:
+const: baikal,bt1-gmac
+
+  required:
+- compatible
+
+allOf:
+  - $ref: "snps,dwmac.yaml#"
+
+properties:
+  compatible:
+items:
+  - const: baikal,bt1-gmac
+  - const: snps,dwmac-3.73a
+  - const: snps,dwmac
+
+  reg:
+maxItems: 1
+
+  interrupts:
+maxItems: 1
+
+  interrupt-names:
+const: macirq
+
+  clocks:
+minItems: 4
+maxItems: 4
+
+  clock-names:
+minItems: 4
+maxItems: 4
+contains:
+  enum:
+- stmmaceth
+- pclk
+- tx
+- ptp_ref
+
+  ngpios:
+description:
+  Baikal-T1 GMAC have been created with one GPI and one GPO ports
+  enabled. So there are total two GPIOs available.
+const: 2
+
+  gpio-controller: true
+
+  "#gpio-cells":
+const: 2
+
+  tx-internal-delay-ps:
+description:
+  DW MAC Tx clocks generator has been designed to always add 2ns delay
+  of TXC with respect to TXD.
+const: 2000
+
+  rx-fifo-depth:
+const: 16384
+
+  tx-fifo-depth:
+const: 16384
+
+  axi-config:
+type: object
+
+properties:
+  snps,wr_osr_lmt:
+$ref: /schemas/types.yaml#/definitions/uint32
+description: Maximum write outstanding requests is limited with 4
+maximum: 3
+
+  snps,rd_osr_lmt:
+$ref: /schemas/types.yaml#/definitions/uint32
+description: Maximum read outstanding requests is limited with 4
+maximum: 3
+
+  snps,blen:
+$ref: /schemas/types.yaml#/definitions/uint32-array
+description: AXI-bus burst length width is limited with just 4 bits
+items:
+  enum: [16, 8, 4, 0]
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - interrupt-names
+  - clocks
+  - clock-names
+  - resets
+  - reset-names
+  - phy-mode
+
+unevaluatedProperties: false
+
+examples:
+  - |
+ethernet@1f05e000 {
+  compatible = "baikal,bt1-dwmac", "snps,dwmac-3.73a", "snps,dwmac";
+  reg = <0x1f05e000 0x2000>;
+  #address-cells = <1>;
+  #size-cells = <2>;
+
+  interrupts = <72>;
+  interrupt-names = "macirq";
+
+  clocks = <&ccu_sys 1>, <&ccu_axi 3>, <&ccu_sys 2>, <&ccu_sys 3>;
+  clock-names = "pclk", "stmmaceth", "tx", "ptp_ref";
+
+  resets = <&ccu_axi 3>;
+  reset-names = "stmmaceth";
+
+  ngpios = <2>;
+
+  gpio-controller;
+  #gpio-cells = <2>;
+
+  phy-mode = "rgmii-rxid";
+  tx-internal-delay-ps = <2000>;
+
+  rx-fifo-depth = <16384>;
+  tx-fifo-depth =