This patchset for the lantiq_gswip driver is a collection of minor fixes
and coding improvements by Martin Blumenstingl without any real changes
in the actual functionality.
=== Changelog ===
From v3:
- convert lantiq,gswip bindings to YAML schema
- Add Hauke's acked-by as mentioned in the cover letter in v1
From v2:
- removed unused variable max_ports in gswip_add_single_port_br()
From v1:
- signal that we only update example code in dt-bindings
- don't use the word 'fix' if not appropriate
- new patch: add terminating '\n' where missing
- renamed MAC_BRIDGE macros to make it obvious which register field is
used
- new patch: remove dead code from gswip_add_single_port_br()
- updated error message if FID not found in gswip_port_fdb()
Martin Blumenstingl (9):
dt-bindings: net: dsa: lantiq,gswip: Add missing CPU port phy-mode and
fixed-link to example
net: dsa: lantiq_gswip: Only allow phy-mode = "internal" on the CPU
port
net: dsa: lantiq_gswip: Use dev_err_probe where appropriate
net: dsa: lantiq_gswip: Don't manually call gswip_port_enable()
net: dsa: lantiq_gswip: Use dsa_is_cpu_port() in
gswip_port_change_mtu()
net: dsa: lantiq_gswip: Change literal 6 to ETH_ALEN
net: dsa: lantiq_gswip: Consistently use macros for the mac bridge
table
net: dsa: lantiq_gswip: Update comments in gswip_port_vlan_filtering()
net: dsa: lantiq_gswip: Improve error message in gswip_port_fdb()
Martin Schiller (4):
dt-bindings: net: dsa: lantiq,gswip: convert to YAML schema
net: dsa: lantiq_gswip: add terminating \n where missing
net: dsa: lantiq_gswip: do also enable or disable cpu port
net: dsa: lantiq_gswip: Remove dead code from
gswip_add_single_port_br()
.../bindings/net/dsa/lantiq,gswip.yaml | 201 ++++++++++++++++++
.../bindings/net/dsa/lantiq-gswip.txt | 146 -------------
MAINTAINERS | 1 +
drivers/net/dsa/lantiq_gswip.c | 123 +++++------
4 files changed, 257 insertions(+), 214 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
delete mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
--
2.39.2
Convert the lantiq,gswip bindings to YAML format.
Also add this new file to the MAINTAINERS file.
Signed-off-by: Martin Schiller <[email protected]>
---
.../bindings/net/dsa/lantiq,gswip.yaml | 195 ++++++++++++++++++
.../bindings/net/dsa/lantiq-gswip.txt | 146 -------------
MAINTAINERS | 1 +
3 files changed, 196 insertions(+), 146 deletions(-)
create mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
delete mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
diff --git a/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
new file mode 100644
index 000000000000..14ef48d6a0ee
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
@@ -0,0 +1,195 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Lantiq GSWIP Ethernet switches
+
+allOf:
+ - $ref: dsa.yaml#/$defs/ethernet-ports
+
+maintainers:
+ - Hauke Mehrtens <[email protected]>
+
+properties:
+ compatible:
+ enum:
+ - lantiq,xrx200-gswip
+ - lantiq,xrx300-gswip
+ - lantiq,xrx330-gswip
+
+ reg:
+ minItems: 3
+ maxItems: 3
+ reg-names:
+ items:
+ - const: switch
+ - const: mdio
+ - const: mii
+
+ mdio:
+ $ref: /schemas/net/mdio.yaml#
+ unevaluatedProperties: false
+
+ properties:
+ compatible:
+ const: lantiq,xrx200-mdio
+
+ required:
+ - compatible
+
+ gphy-fw:
+ type: object
+ properties:
+ '#address-cells':
+ const: 1
+ '#size-cells':
+ const: 0
+
+ compatible:
+ allOf:
+ - items:
+ - enum:
+ - lantiq,xrx200-gphy-fw
+ - lantiq,xrx300-gphy-fw
+ - lantiq,xrx330-gphy-fw
+ - const: lantiq,gphy-fw
+
+ lantiq,rcu:
+ $ref: /schemas/types.yaml#/definitions/phandle
+ description: phandle to the RCU syscon
+
+ patternProperties:
+ "^gphy@[0-9a-f]+$":
+ type: object
+
+ properties:
+ reg:
+ minimum: 0
+ maximum: 255
+ description:
+ Offset of the GPHY firmware register in the RCU register range
+
+ resets:
+ items:
+ - description: GPHY reset line
+
+ reset-names:
+ items:
+ - const: gphy
+
+ required:
+ - reg
+
+ additionalProperties: false
+
+ required:
+ - compatible
+ - lantiq,rcu
+
+ additionalProperties: false
+
+required:
+ - compatible
+ - reg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ switch@e108000 {
+ compatible = "lantiq,xrx200-gswip";
+ reg = <0xe108000 0x3100>, /* switch */
+ <0xe10b100 0xd8>, /* mdio */
+ <0xe10b1d8 0x130>; /* mii */
+ dsa,member = <0 0>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+ label = "lan3";
+ phy-mode = "rgmii";
+ phy-handle = <&phy0>;
+ };
+
+ port@1 {
+ reg = <1>;
+ label = "lan4";
+ phy-mode = "rgmii";
+ phy-handle = <&phy1>;
+ };
+
+ port@2 {
+ reg = <2>;
+ label = "lan2";
+ phy-mode = "internal";
+ phy-handle = <&phy11>;
+ };
+
+ port@4 {
+ reg = <4>;
+ label = "lan1";
+ phy-mode = "internal";
+ phy-handle = <&phy13>;
+ };
+
+ port@5 {
+ reg = <5>;
+ label = "wan";
+ phy-mode = "rgmii";
+ phy-handle = <&phy5>;
+ };
+
+ port@6 {
+ reg = <0x6>;
+ ethernet = <ð0>;
+ };
+ };
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "lantiq,xrx200-mdio";
+
+ phy0: ethernet-phy@0 {
+ reg = <0x0>;
+ };
+ phy1: ethernet-phy@1 {
+ reg = <0x1>;
+ };
+ phy5: ethernet-phy@5 {
+ reg = <0x5>;
+ };
+ phy11: ethernet-phy@11 {
+ reg = <0x11>;
+ };
+ phy13: ethernet-phy@13 {
+ reg = <0x13>;
+ };
+ };
+
+ gphy-fw {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "lantiq,xrx200-gphy-fw", "lantiq,gphy-fw";
+ lantiq,rcu = <&rcu0>;
+
+ gphy@20 {
+ reg = <0x20>;
+
+ resets = <&reset0 31 30>;
+ reset-names = "gphy";
+ };
+
+ gphy@68 {
+ reg = <0x68>;
+
+ resets = <&reset0 29 28>;
+ reset-names = "gphy";
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt b/Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
deleted file mode 100644
index 8bb1eff21cb1..000000000000
--- a/Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-Lantiq GSWIP Ethernet switches
-==================================
-
-Required properties for GSWIP core:
-
-- compatible : "lantiq,xrx200-gswip" for the embedded GSWIP in the
- xRX200 SoC
- "lantiq,xrx300-gswip" for the embedded GSWIP in the
- xRX300 SoC
- "lantiq,xrx330-gswip" for the embedded GSWIP in the
- xRX330 SoC
-- reg : memory range of the GSWIP core registers
- : memory range of the GSWIP MDIO registers
- : memory range of the GSWIP MII registers
-
-See Documentation/devicetree/bindings/net/dsa/dsa.txt for a list of
-additional required and optional properties.
-
-
-Required properties for MDIO bus:
-- compatible : "lantiq,xrx200-mdio" for the MDIO bus inside the GSWIP
- core of the xRX200 SoC and the PHYs connected to it.
-
-See Documentation/devicetree/bindings/net/mdio.txt for a list of additional
-required and optional properties.
-
-
-Required properties for GPHY firmware loading:
-- compatible : "lantiq,xrx200-gphy-fw", "lantiq,gphy-fw"
- "lantiq,xrx300-gphy-fw", "lantiq,gphy-fw"
- "lantiq,xrx330-gphy-fw", "lantiq,gphy-fw"
- for the loading of the firmware into the embedded
- GPHY core of the SoC.
-- lantiq,rcu : reference to the rcu syscon
-
-The GPHY firmware loader has a list of GPHY entries, one for each
-embedded GPHY
-
-- reg : Offset of the GPHY firmware register in the RCU
- register range
-- resets : list of resets of the embedded GPHY
-- reset-names : list of names of the resets
-
-Example:
-
-Ethernet switch on the VRX200 SoC:
-
-switch@e108000 {
- #address-cells = <1>;
- #size-cells = <0>;
- compatible = "lantiq,xrx200-gswip";
- reg = < 0xe108000 0x3100 /* switch */
- 0xe10b100 0xd8 /* mdio */
- 0xe10b1d8 0x130 /* mii */
- >;
- dsa,member = <0 0>;
-
- ports {
- #address-cells = <1>;
- #size-cells = <0>;
-
- port@0 {
- reg = <0>;
- label = "lan3";
- phy-mode = "rgmii";
- phy-handle = <&phy0>;
- };
-
- port@1 {
- reg = <1>;
- label = "lan4";
- phy-mode = "rgmii";
- phy-handle = <&phy1>;
- };
-
- port@2 {
- reg = <2>;
- label = "lan2";
- phy-mode = "internal";
- phy-handle = <&phy11>;
- };
-
- port@4 {
- reg = <4>;
- label = "lan1";
- phy-mode = "internal";
- phy-handle = <&phy13>;
- };
-
- port@5 {
- reg = <5>;
- label = "wan";
- phy-mode = "rgmii";
- phy-handle = <&phy5>;
- };
-
- port@6 {
- reg = <0x6>;
- ethernet = <ð0>;
- };
- };
-
- mdio {
- #address-cells = <1>;
- #size-cells = <0>;
- compatible = "lantiq,xrx200-mdio";
- reg = <0>;
-
- phy0: ethernet-phy@0 {
- reg = <0x0>;
- };
- phy1: ethernet-phy@1 {
- reg = <0x1>;
- };
- phy5: ethernet-phy@5 {
- reg = <0x5>;
- };
- phy11: ethernet-phy@11 {
- reg = <0x11>;
- };
- phy13: ethernet-phy@13 {
- reg = <0x13>;
- };
- };
-
- gphy-fw {
- compatible = "lantiq,xrx200-gphy-fw", "lantiq,gphy-fw";
- lantiq,rcu = <&rcu0>;
- #address-cells = <1>;
- #size-cells = <0>;
-
- gphy@20 {
- reg = <0x20>;
-
- resets = <&reset0 31 30>;
- reset-names = "gphy";
- };
-
- gphy@68 {
- reg = <0x68>;
-
- resets = <&reset0 29 28>;
- reset-names = "gphy";
- };
- };
-};
diff --git a/MAINTAINERS b/MAINTAINERS
index cd3277a98cfe..ca1050f6691b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12449,6 +12449,7 @@ LANTIQ / INTEL Ethernet drivers
M: Hauke Mehrtens <[email protected]>
L: [email protected]
S: Maintained
+F: Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
F: drivers/net/dsa/lantiq_gswip.c
F: drivers/net/dsa/lantiq_pce.h
F: drivers/net/ethernet/lantiq_xrx200.c
--
2.39.2
From: Martin Blumenstingl <[email protected]>
The CPU port has to specify a phy-mode and either a phy or a fixed-link.
Since GSWIP is connected using a SoC internal protocol there's no PHY
involved. Add phy-mode = "internal" and a fixed-link to the example code
to describe the communication between the PMAC (Ethernet controller) and
GSWIP switch.
Signed-off-by: Martin Blumenstingl <[email protected]>
Reviewed-by: Vladimir Oltean <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
index 14ef48d6a0ee..234ad3b88dfe 100644
--- a/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
@@ -146,7 +146,13 @@ examples:
port@6 {
reg = <0x6>;
+ phy-mode = "internal";
ethernet = <ð0>;
+
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
};
};
--
2.39.2
From: Martin Blumenstingl <[email protected]>
Add the CPU port to gswip_xrx200_phylink_get_caps() and
gswip_xrx300_phylink_get_caps(). It connects through a SoC-internal bus,
so the only allowed phy-mode is PHY_INTERFACE_MODE_INTERNAL.
Signed-off-by: Martin Blumenstingl <[email protected]>
Reviewed-by: Vladimir Oltean <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index a557049e34f5..b9c7076ce32f 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -1516,6 +1516,7 @@ static void gswip_xrx200_phylink_get_caps(struct dsa_switch *ds, int port,
case 2:
case 3:
case 4:
+ case 6:
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
config->supported_interfaces);
break;
@@ -1547,6 +1548,7 @@ static void gswip_xrx300_phylink_get_caps(struct dsa_switch *ds, int port,
case 2:
case 3:
case 4:
+ case 6:
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
config->supported_interfaces);
break;
--
2.39.2
From: Martin Blumenstingl <[email protected]>
dev_err_probe() can be used to simplify the existing code. Also it means
we get rid of the following warning which is seen whenever the PMAC
(Ethernet controller which connects to GSWIP's CPU port) has not been
probed yet:
gswip 1e108000.switch: dsa switch register failed: -517
Signed-off-by: Martin Blumenstingl <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 53 ++++++++++++++++------------------
1 file changed, 25 insertions(+), 28 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index fe64baf0d7f1..37cc0247dc78 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -1931,11 +1931,9 @@ static int gswip_gphy_fw_load(struct gswip_priv *priv, struct gswip_gphy_fw *gph
msleep(200);
ret = request_firmware(&fw, gphy_fw->fw_name, dev);
- if (ret) {
- dev_err(dev, "failed to load firmware: %s, error: %i\n",
- gphy_fw->fw_name, ret);
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to load firmware: %s\n",
+ gphy_fw->fw_name);
/* GPHY cores need the firmware code in a persistent and contiguous
* memory area with a 16 kB boundary aligned start address.
@@ -1948,9 +1946,9 @@ static int gswip_gphy_fw_load(struct gswip_priv *priv, struct gswip_gphy_fw *gph
dev_addr = ALIGN(dma_addr, XRX200_GPHY_FW_ALIGN);
memcpy(fw_addr, fw->data, fw->size);
} else {
- dev_err(dev, "failed to alloc firmware memory\n");
release_firmware(fw);
- return -ENOMEM;
+ return dev_err_probe(dev, -ENOMEM,
+ "failed to alloc firmware memory\n");
}
release_firmware(fw);
@@ -1977,8 +1975,8 @@ static int gswip_gphy_fw_probe(struct gswip_priv *priv,
gphy_fw->clk_gate = devm_clk_get(dev, gphyname);
if (IS_ERR(gphy_fw->clk_gate)) {
- dev_err(dev, "Failed to lookup gate clock\n");
- return PTR_ERR(gphy_fw->clk_gate);
+ return dev_err_probe(dev, PTR_ERR(gphy_fw->clk_gate),
+ "Failed to lookup gate clock\n");
}
ret = of_property_read_u32(gphy_fw_np, "reg", &gphy_fw->fw_addr_offset);
@@ -1998,8 +1996,8 @@ static int gswip_gphy_fw_probe(struct gswip_priv *priv,
gphy_fw->fw_name = priv->gphy_fw_name_cfg->ge_firmware_name;
break;
default:
- dev_err(dev, "Unknown GPHY mode %d\n", gphy_mode);
- return -EINVAL;
+ return dev_err_probe(dev, -EINVAL, "Unknown GPHY mode %d\n",
+ gphy_mode);
}
gphy_fw->reset = of_reset_control_array_get_exclusive(gphy_fw_np);
@@ -2050,8 +2048,9 @@ static int gswip_gphy_fw_list(struct gswip_priv *priv,
priv->gphy_fw_name_cfg = &xrx200a2x_gphy_data;
break;
default:
- dev_err(dev, "unknown GSWIP version: 0x%x\n", version);
- return -ENOENT;
+ return dev_err_probe(dev, -ENOENT,
+ "unknown GSWIP version: 0x%x\n",
+ version);
}
}
@@ -2059,10 +2058,9 @@ static int gswip_gphy_fw_list(struct gswip_priv *priv,
if (match && match->data)
priv->gphy_fw_name_cfg = match->data;
- if (!priv->gphy_fw_name_cfg) {
- dev_err(dev, "GPHY compatible type not supported\n");
- return -ENOENT;
- }
+ if (!priv->gphy_fw_name_cfg)
+ return dev_err_probe(dev, -ENOENT,
+ "GPHY compatible type not supported\n");
priv->num_gphy_fw = of_get_available_child_count(gphy_fw_list_np);
if (!priv->num_gphy_fw)
@@ -2163,8 +2161,8 @@ static int gswip_probe(struct platform_device *pdev)
return -EINVAL;
break;
default:
- dev_err(dev, "unknown GSWIP version: 0x%x\n", version);
- return -ENOENT;
+ return dev_err_probe(dev, -ENOENT,
+ "unknown GSWIP version: 0x%x\n", version);
}
/* bring up the mdio bus */
@@ -2172,28 +2170,27 @@ static int gswip_probe(struct platform_device *pdev)
if (gphy_fw_np) {
err = gswip_gphy_fw_list(priv, gphy_fw_np, version);
of_node_put(gphy_fw_np);
- if (err) {
- dev_err(dev, "gphy fw probe failed\n");
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "gphy fw probe failed\n");
}
/* bring up the mdio bus */
err = gswip_mdio(priv);
if (err) {
- dev_err(dev, "mdio probe failed\n");
+ dev_err_probe(dev, err, "mdio probe failed\n");
goto gphy_fw_remove;
}
err = dsa_register_switch(priv->ds);
if (err) {
- dev_err(dev, "dsa switch register failed: %i\n", err);
+ dev_err_probe(dev, err, "dsa switch registration failed\n");
goto gphy_fw_remove;
}
if (!dsa_is_cpu_port(priv->ds, priv->hw_info->cpu_port)) {
- dev_err(dev, "wrong CPU port defined, HW only supports port: %i\n",
- priv->hw_info->cpu_port);
- err = -EINVAL;
+ err = dev_err_probe(dev, -EINVAL,
+ "wrong CPU port defined, HW only supports port: %i\n",
+ priv->hw_info->cpu_port);
goto disable_switch;
}
--
2.39.2
From: Martin Blumenstingl <[email protected]>
We don't need to manually call gswip_port_enable() from within
gswip_setup() for the CPU port. DSA does this automatically for us.
Signed-off-by: Martin Blumenstingl <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index 37cc0247dc78..c1f9419af35f 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -898,8 +898,6 @@ static int gswip_setup(struct dsa_switch *ds)
ds->mtu_enforcement_ingress = true;
- gswip_port_enable(ds, cpu_port, NULL);
-
ds->configure_vlan_while_not_filtering = false;
return 0;
--
2.39.2
From: Martin Blumenstingl <[email protected]>
Only bits [5:0] in mac_bridge.key[3] are reserved for the FID.
Also, for dynamic (learned) entries, bits [7:4] in mac_bridge.val[0]
represents the port.
Introduce new macros GSWIP_TABLE_MAC_BRIDGE_KEY3_FID and
GSWIP_TABLE_MAC_BRIDGE_VAL0_PORT macro and use it throughout the driver.
Also rename and update GSWIP_TABLE_MAC_BRIDGE_VAL1_STATIC to use the
BIT() macro. This makes the driver code easier to understand.
Signed-off-by: Martin Blumenstingl <[email protected]>
Signed-off-by: Martin Schiller <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index 525a62a21601..cd88b00cfdc1 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -236,7 +236,9 @@
#define GSWIP_TABLE_ACTIVE_VLAN 0x01
#define GSWIP_TABLE_VLAN_MAPPING 0x02
#define GSWIP_TABLE_MAC_BRIDGE 0x0b
-#define GSWIP_TABLE_MAC_BRIDGE_STATIC 0x01 /* Static not, aging entry */
+#define GSWIP_TABLE_MAC_BRIDGE_KEY3_FID GENMASK(5, 0) /* Filtering identifier */
+#define GSWIP_TABLE_MAC_BRIDGE_VAL0_PORT GENMASK(7, 4) /* Port on learned entries */
+#define GSWIP_TABLE_MAC_BRIDGE_VAL1_STATIC BIT(0) /* Static, non-aging entry */
#define XRX200_GPHY_FW_ALIGN (16 * 1024)
@@ -1304,10 +1306,11 @@ static void gswip_port_fast_age(struct dsa_switch *ds, int port)
if (!mac_bridge.valid)
continue;
- if (mac_bridge.val[1] & GSWIP_TABLE_MAC_BRIDGE_STATIC)
+ if (mac_bridge.val[1] & GSWIP_TABLE_MAC_BRIDGE_VAL1_STATIC)
continue;
- if (((mac_bridge.val[0] & GENMASK(7, 4)) >> 4) != port)
+ if (port != FIELD_GET(GSWIP_TABLE_MAC_BRIDGE_VAL0_PORT,
+ mac_bridge.val[0]))
continue;
mac_bridge.valid = false;
@@ -1382,9 +1385,9 @@ static int gswip_port_fdb(struct dsa_switch *ds, int port,
mac_bridge.key[0] = addr[5] | (addr[4] << 8);
mac_bridge.key[1] = addr[3] | (addr[2] << 8);
mac_bridge.key[2] = addr[1] | (addr[0] << 8);
- mac_bridge.key[3] = fid;
+ mac_bridge.key[3] = FIELD_PREP(GSWIP_TABLE_MAC_BRIDGE_KEY3_FID, fid);
mac_bridge.val[0] = add ? BIT(port) : 0; /* port map */
- mac_bridge.val[1] = GSWIP_TABLE_MAC_BRIDGE_STATIC;
+ mac_bridge.val[1] = GSWIP_TABLE_MAC_BRIDGE_VAL1_STATIC;
mac_bridge.valid = add;
err = gswip_pce_table_entry_write(priv, &mac_bridge);
@@ -1438,14 +1441,15 @@ static int gswip_port_fdb_dump(struct dsa_switch *ds, int port,
addr[2] = (mac_bridge.key[1] >> 8) & 0xff;
addr[1] = mac_bridge.key[2] & 0xff;
addr[0] = (mac_bridge.key[2] >> 8) & 0xff;
- if (mac_bridge.val[1] & GSWIP_TABLE_MAC_BRIDGE_STATIC) {
+ if (mac_bridge.val[1] & GSWIP_TABLE_MAC_BRIDGE_VAL1_STATIC) {
if (mac_bridge.val[0] & BIT(port)) {
err = cb(addr, 0, true, data);
if (err)
return err;
}
} else {
- if (((mac_bridge.val[0] & GENMASK(7, 4)) >> 4) == port) {
+ if (port == FIELD_GET(GSWIP_TABLE_MAC_BRIDGE_VAL0_PORT,
+ mac_bridge.val[0])) {
err = cb(addr, 0, false, data);
if (err)
return err;
--
2.39.2
Before commit 74be4babe72f ("net: dsa: do not enable or disable non user
ports"), gswip_port_enable/disable() were also executed for the cpu port
in gswip_setup() which disabled the cpu port during initialization.
Let's restore this by removing the dsa_is_user_port checks. Also, let's
clean up the gswip_port_enable() function so that we only have to check
for the cpu port once. The operation reordering done here is safe.
Signed-off-by: Martin Schiller <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index c1f9419af35f..8ec329d0c136 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -695,13 +695,18 @@ static int gswip_port_enable(struct dsa_switch *ds, int port,
struct gswip_priv *priv = ds->priv;
int err;
- if (!dsa_is_user_port(ds, port))
- return 0;
-
if (!dsa_is_cpu_port(ds, port)) {
+ u32 mdio_phy = 0;
+
err = gswip_add_single_port_br(priv, port, true);
if (err)
return err;
+
+ if (phydev)
+ mdio_phy = phydev->mdio.addr & GSWIP_MDIO_PHY_ADDR_MASK;
+
+ gswip_mdio_mask(priv, GSWIP_MDIO_PHY_ADDR_MASK, mdio_phy,
+ GSWIP_MDIO_PHYp(port));
}
/* RMON Counter Enable for port */
@@ -714,16 +719,6 @@ static int gswip_port_enable(struct dsa_switch *ds, int port,
gswip_switch_mask(priv, 0, GSWIP_SDMA_PCTRL_EN,
GSWIP_SDMA_PCTRLp(port));
- if (!dsa_is_cpu_port(ds, port)) {
- u32 mdio_phy = 0;
-
- if (phydev)
- mdio_phy = phydev->mdio.addr & GSWIP_MDIO_PHY_ADDR_MASK;
-
- gswip_mdio_mask(priv, GSWIP_MDIO_PHY_ADDR_MASK, mdio_phy,
- GSWIP_MDIO_PHYp(port));
- }
-
return 0;
}
@@ -731,9 +726,6 @@ static void gswip_port_disable(struct dsa_switch *ds, int port)
{
struct gswip_priv *priv = ds->priv;
- if (!dsa_is_user_port(ds, port))
- return;
-
gswip_switch_mask(priv, GSWIP_FDMA_PCTRL_EN, 0,
GSWIP_FDMA_PCTRLp(port));
gswip_switch_mask(priv, GSWIP_SDMA_PCTRL_EN, 0,
--
2.39.2
From: Martin Blumenstingl <[email protected]>
The addr variable in gswip_port_fdb_dump() stores a mac address. Use
ETH_ALEN to make this consistent across other drivers.
Signed-off-by: Martin Blumenstingl <[email protected]>
Reviewed-by: Vladimir Oltean <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index 58c069f964dd..525a62a21601 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -1413,7 +1413,7 @@ static int gswip_port_fdb_dump(struct dsa_switch *ds, int port,
{
struct gswip_priv *priv = ds->priv;
struct gswip_pce_table_entry mac_bridge = {0,};
- unsigned char addr[6];
+ unsigned char addr[ETH_ALEN];
int i;
int err;
--
2.39.2
From: Martin Blumenstingl <[email protected]>
Update the comments in gswip_port_vlan_filtering() so it's clear that
there are two separate cases, one for "tag based VLAN" and another one
for "port based VLAN".
Suggested-by: Martin Schiller <[email protected]>
Signed-off-by: Martin Blumenstingl <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index 2bbc7dd45418..ec52c62eadce 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -780,7 +780,7 @@ static int gswip_port_vlan_filtering(struct dsa_switch *ds, int port,
}
if (vlan_filtering) {
- /* Use port based VLAN tag */
+ /* Use tag based VLAN */
gswip_switch_mask(priv,
GSWIP_PCE_VCTRL_VSR,
GSWIP_PCE_VCTRL_UVR | GSWIP_PCE_VCTRL_VIMR |
@@ -789,7 +789,7 @@ static int gswip_port_vlan_filtering(struct dsa_switch *ds, int port,
gswip_switch_mask(priv, GSWIP_PCE_PCTRL_0_TVM, 0,
GSWIP_PCE_PCTRL_0p(port));
} else {
- /* Use port based VLAN tag */
+ /* Use port based VLAN */
gswip_switch_mask(priv,
GSWIP_PCE_VCTRL_UVR | GSWIP_PCE_VCTRL_VIMR |
GSWIP_PCE_VCTRL_VEMR,
--
2.39.2
From: Martin Blumenstingl <[email protected]>
Print that no FID is found for bridge %s instead of the incorrect
message that the port is not part of a bridge.
Signed-off-by: Martin Blumenstingl <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index ec52c62eadce..fcd4505f4925 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -1370,7 +1370,8 @@ static int gswip_port_fdb(struct dsa_switch *ds, int port,
}
if (fid == -1) {
- dev_err(priv->dev, "Port not part of a bridge\n");
+ dev_err(priv->dev, "no FID found for bridge %s\n",
+ bridge->name);
return -EINVAL;
}
--
2.39.2
Some dev_err are missing the terminating \n. Let's add that.
Suggested-by: Vladimir Oltean <[email protected]>
Signed-off-by: Martin Schiller <[email protected]>
Reviewed-by: Andrew Lunn <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index b9c7076ce32f..fe64baf0d7f1 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -836,7 +836,7 @@ static int gswip_setup(struct dsa_switch *ds)
err = gswip_pce_load_microcode(priv);
if (err) {
- dev_err(priv->dev, "writing PCE microcode failed, %i", err);
+ dev_err(priv->dev, "writing PCE microcode failed, %i\n", err);
return err;
}
@@ -1792,7 +1792,7 @@ static u32 gswip_bcm_ram_entry_read(struct gswip_priv *priv, u32 table,
err = gswip_switch_r_timeout(priv, GSWIP_BM_RAM_CTRL,
GSWIP_BM_RAM_CTRL_BAS);
if (err) {
- dev_err(priv->dev, "timeout while reading table: %u, index: %u",
+ dev_err(priv->dev, "timeout while reading table: %u, index: %u\n",
table, index);
return 0;
}
@@ -2021,7 +2021,7 @@ static void gswip_gphy_fw_remove(struct gswip_priv *priv,
ret = regmap_write(priv->rcu_regmap, gphy_fw->fw_addr_offset, 0);
if (ret)
- dev_err(priv->dev, "can not reset GPHY FW pointer");
+ dev_err(priv->dev, "can not reset GPHY FW pointer\n");
clk_disable_unprepare(gphy_fw->clk_gate);
@@ -2050,7 +2050,7 @@ static int gswip_gphy_fw_list(struct gswip_priv *priv,
priv->gphy_fw_name_cfg = &xrx200a2x_gphy_data;
break;
default:
- dev_err(dev, "unknown GSWIP version: 0x%x", version);
+ dev_err(dev, "unknown GSWIP version: 0x%x\n", version);
return -ENOENT;
}
}
@@ -2060,7 +2060,7 @@ static int gswip_gphy_fw_list(struct gswip_priv *priv,
priv->gphy_fw_name_cfg = match->data;
if (!priv->gphy_fw_name_cfg) {
- dev_err(dev, "GPHY compatible type not supported");
+ dev_err(dev, "GPHY compatible type not supported\n");
return -ENOENT;
}
@@ -2163,7 +2163,7 @@ static int gswip_probe(struct platform_device *pdev)
return -EINVAL;
break;
default:
- dev_err(dev, "unknown GSWIP version: 0x%x", version);
+ dev_err(dev, "unknown GSWIP version: 0x%x\n", version);
return -ENOENT;
}
@@ -2191,7 +2191,7 @@ static int gswip_probe(struct platform_device *pdev)
goto gphy_fw_remove;
}
if (!dsa_is_cpu_port(priv->ds, priv->hw_info->cpu_port)) {
- dev_err(dev, "wrong CPU port defined, HW only supports port: %i",
+ dev_err(dev, "wrong CPU port defined, HW only supports port: %i\n",
priv->hw_info->cpu_port);
err = -EINVAL;
goto disable_switch;
--
2.39.2
From: Martin Blumenstingl <[email protected]>
Make the check for the CPU port in gswip_port_change_mtu() consistent
with other areas of the driver by using dsa_is_cpu_port().
Signed-off-by: Martin Blumenstingl <[email protected]>
Reviewed-by: Vladimir Oltean <[email protected]>
Acked-by: Hauke Mehrtens <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index 8ec329d0c136..58c069f964dd 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -1464,12 +1464,11 @@ static int gswip_port_max_mtu(struct dsa_switch *ds, int port)
static int gswip_port_change_mtu(struct dsa_switch *ds, int port, int new_mtu)
{
struct gswip_priv *priv = ds->priv;
- int cpu_port = priv->hw_info->cpu_port;
/* CPU port always has maximum mtu of user ports, so use it to set
* switch frame size, including 8 byte special header.
*/
- if (port == cpu_port) {
+ if (dsa_is_cpu_port(ds, port)) {
new_mtu += 8;
gswip_switch_w(priv, VLAN_ETH_HLEN + new_mtu + ETH_FCS_LEN,
GSWIP_MAC_FLEN);
--
2.39.2
The port validation in gswip_add_single_port_br() is superfluous and
can be omitted.
Suggested-by: Vladimir Oltean <[email protected]>
Signed-off-by: Martin Schiller <[email protected]>
---
drivers/net/dsa/lantiq_gswip.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index cd88b00cfdc1..2bbc7dd45418 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -655,14 +655,8 @@ static int gswip_add_single_port_br(struct gswip_priv *priv, int port, bool add)
struct gswip_pce_table_entry vlan_active = {0,};
struct gswip_pce_table_entry vlan_mapping = {0,};
unsigned int cpu_port = priv->hw_info->cpu_port;
- unsigned int max_ports = priv->hw_info->max_ports;
int err;
- if (port >= max_ports) {
- dev_err(priv->dev, "single port for %i supported\n", port);
- return -EIO;
- }
-
vlan_active.index = port + 1;
vlan_active.table = GSWIP_TABLE_ACTIVE_VLAN;
vlan_active.key[0] = 0; /* vid */
--
2.39.2
On Tue, 11 Jun 2024 13:40:15 +0200, Martin Schiller wrote:
> Convert the lantiq,gswip bindings to YAML format.
>
> Also add this new file to the MAINTAINERS file.
>
> Signed-off-by: Martin Schiller <[email protected]>
> ---
> .../bindings/net/dsa/lantiq,gswip.yaml | 195 ++++++++++++++++++
> .../bindings/net/dsa/lantiq-gswip.txt | 146 -------------
> MAINTAINERS | 1 +
> 3 files changed, 196 insertions(+), 146 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
> delete mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.example.dtb: switch@e108000: ports:port@6: 'phy-mode' is a required property
from schema $id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.example.dtb: switch@e108000: ports:port@6: 'oneOf' conditional failed, one must be fixed:
'fixed-link' is a required property
'phy-handle' is a required property
'managed' is a required property
from schema $id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.example.dtb: switch@e108000: Unevaluated properties are not allowed ('dsa,member', 'ports' were unexpected)
from schema $id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/[email protected]
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
On 2024-06-11 14:51, Rob Herring (Arm) wrote:
> On Tue, 11 Jun 2024 13:40:15 +0200, Martin Schiller wrote:
>> Convert the lantiq,gswip bindings to YAML format.
>>
>> Also add this new file to the MAINTAINERS file.
>>
>> Signed-off-by: Martin Schiller <[email protected]>
>> ---
>> .../bindings/net/dsa/lantiq,gswip.yaml | 195
>> ++++++++++++++++++
>> .../bindings/net/dsa/lantiq-gswip.txt | 146 -------------
>> MAINTAINERS | 1 +
>> 3 files changed, 196 insertions(+), 146 deletions(-)
>> create mode 100644
>> Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
>> delete mode 100644
>> Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
>>
>
> My bot found errors running 'make dt_binding_check' on your patch:
>
> yamllint warnings/errors:
>
> dtschema/dtc warnings/errors:
> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.example.dtb:
> switch@e108000: ports:port@6: 'phy-mode' is a required property
> from schema $id:
> http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.example.dtb:
> switch@e108000: ports:port@6: 'oneOf' conditional failed, one must be
> fixed:
> 'fixed-link' is a required property
> 'phy-handle' is a required property
> 'managed' is a required property
> from schema $id:
> http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.example.dtb:
> switch@e108000: Unevaluated properties are not allowed ('dsa,member',
> 'ports' were unexpected)
> from schema $id:
> http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
>
> doc reference errors (make refcheckdocs):
>
> See
> https://patchwork.ozlabs.org/project/devicetree-bindings/patch/[email protected]
>
> The base for the series is generally the latest rc1. A different
> dependency
> should be noted in *this* patch.
>
> If you already ran 'make dt_binding_check' and didn't see the above
> error(s), then make sure 'yamllint' is installed and dt-schema is up to
> date:
>
> pip3 install dtschema --upgrade
>
> Please check and re-submit after running the above command yourself.
> Note
> that DT_SCHEMA_FILES can be set to your schema file to speed up
> checking
> your schema. However, it must be unset to test all examples with your
> schema.
I have already run 'make dt_binding_check' and got no errors. However, I
then moved the components that are now being criticized to a separate
patch. These are exactly the properties that the original patch would
have added in the example.
I have currently put the conversion to the YAML schema in a separate
patch before adding these properties to preserve the original patch.
Should I combine both changes into one patch instead?
On Tue, Jun 11, 2024 at 01:40:15PM +0200, Martin Schiller wrote:
> Convert the lantiq,gswip bindings to YAML format.
>
> Also add this new file to the MAINTAINERS file.
>
> Signed-off-by: Martin Schiller <[email protected]>
> ---
> .../bindings/net/dsa/lantiq,gswip.yaml | 195 ++++++++++++++++++
> .../bindings/net/dsa/lantiq-gswip.txt | 146 -------------
> MAINTAINERS | 1 +
> 3 files changed, 196 insertions(+), 146 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
> delete mode 100644 Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
>
> diff --git a/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
> new file mode 100644
> index 000000000000..14ef48d6a0ee
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
> @@ -0,0 +1,195 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Lantiq GSWIP Ethernet switches
> +
> +allOf:
> + - $ref: dsa.yaml#/$defs/ethernet-ports
> +
> +maintainers:
> + - Hauke Mehrtens <[email protected]>
> +
> +properties:
> + compatible:
> + enum:
> + - lantiq,xrx200-gswip
> + - lantiq,xrx300-gswip
> + - lantiq,xrx330-gswip
> +
> + reg:
> + minItems: 3
> + maxItems: 3
blank line
> + reg-names:
> + items:
> + - const: switch
> + - const: mdio
> + - const: mii
> +
> + mdio:
> + $ref: /schemas/net/mdio.yaml#
> + unevaluatedProperties: false
> +
> + properties:
> + compatible:
> + const: lantiq,xrx200-mdio
> +
> + required:
> + - compatible
> +
> + gphy-fw:
> + type: object
> + properties:
> + '#address-cells':
> + const: 1
blank line
> + '#size-cells':
> + const: 0
> +
> + compatible:
> + allOf:
Don't need allOf.
> + - items:
> + - enum:
> + - lantiq,xrx200-gphy-fw
> + - lantiq,xrx300-gphy-fw
> + - lantiq,xrx330-gphy-fw
> + - const: lantiq,gphy-fw
> +
> + lantiq,rcu:
> + $ref: /schemas/types.yaml#/definitions/phandle
> + description: phandle to the RCU syscon
> +
> + patternProperties:
> + "^gphy@[0-9a-f]+$":
"^gphy@[0-9a-f]{1,2]$"
> + type: object
> +
> + properties:
> + reg:
> + minimum: 0
> + maximum: 255
> + description:
> + Offset of the GPHY firmware register in the RCU register range
> +
> + resets:
> + items:
> + - description: GPHY reset line
> +
> + reset-names:
> + items:
> + - const: gphy
> +
> + required:
> + - reg
> +
> + additionalProperties: false
For indented cases, it is preferred to put this before 'properties'.
> +
> + required:
> + - compatible
> + - lantiq,rcu
> +
> + additionalProperties: false
> +
> +required:
> + - compatible
> + - reg
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + switch@e108000 {
> + compatible = "lantiq,xrx200-gswip";
> + reg = <0xe108000 0x3100>, /* switch */
> + <0xe10b100 0xd8>, /* mdio */
> + <0xe10b1d8 0x130>; /* mii */
> + dsa,member = <0 0>;
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + label = "lan3";
> + phy-mode = "rgmii";
> + phy-handle = <&phy0>;
> + };
> +
> + port@1 {
> + reg = <1>;
> + label = "lan4";
> + phy-mode = "rgmii";
> + phy-handle = <&phy1>;
> + };
> +
> + port@2 {
> + reg = <2>;
> + label = "lan2";
> + phy-mode = "internal";
> + phy-handle = <&phy11>;
> + };
> +
> + port@4 {
> + reg = <4>;
> + label = "lan1";
> + phy-mode = "internal";
> + phy-handle = <&phy13>;
> + };
> +
> + port@5 {
> + reg = <5>;
> + label = "wan";
> + phy-mode = "rgmii";
> + phy-handle = <&phy5>;
> + };
> +
> + port@6 {
> + reg = <0x6>;
> + ethernet = <ð0>;
> + };
> + };
> +
> + mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + compatible = "lantiq,xrx200-mdio";
> +
> + phy0: ethernet-phy@0 {
> + reg = <0x0>;
> + };
> + phy1: ethernet-phy@1 {
> + reg = <0x1>;
> + };
> + phy5: ethernet-phy@5 {
> + reg = <0x5>;
> + };
> + phy11: ethernet-phy@11 {
> + reg = <0x11>;
> + };
> + phy13: ethernet-phy@13 {
> + reg = <0x13>;
> + };
> + };
> +
> + gphy-fw {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + compatible = "lantiq,xrx200-gphy-fw", "lantiq,gphy-fw";
> + lantiq,rcu = <&rcu0>;
> +
> + gphy@20 {
> + reg = <0x20>;
> +
> + resets = <&reset0 31 30>;
> + reset-names = "gphy";
> + };
> +
> + gphy@68 {
> + reg = <0x68>;
> +
> + resets = <&reset0 29 28>;
> + reset-names = "gphy";
> + };
> + };
> + };
On 2024-06-11 15:27, Rob Herring wrote:
> On Tue, Jun 11, 2024 at 01:40:15PM +0200, Martin Schiller wrote:
>> Convert the lantiq,gswip bindings to YAML format.
>>
>> Also add this new file to the MAINTAINERS file.
>>
>> Signed-off-by: Martin Schiller <[email protected]>
>> ---
>> .../bindings/net/dsa/lantiq,gswip.yaml | 195
>> ++++++++++++++++++
>> .../bindings/net/dsa/lantiq-gswip.txt | 146 -------------
>> MAINTAINERS | 1 +
>> 3 files changed, 196 insertions(+), 146 deletions(-)
>> create mode 100644
>> Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
>> delete mode 100644
>> Documentation/devicetree/bindings/net/dsa/lantiq-gswip.txt
>>
>> diff --git
>> a/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
>> b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
>> new file mode 100644
>> index 000000000000..14ef48d6a0ee
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
>> @@ -0,0 +1,195 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Lantiq GSWIP Ethernet switches
>> +
>> +allOf:
>> + - $ref: dsa.yaml#/$defs/ethernet-ports
>> +
>> +maintainers:
>> + - Hauke Mehrtens <[email protected]>
>> +
>> +properties:
>> + compatible:
>> + enum:
>> + - lantiq,xrx200-gswip
>> + - lantiq,xrx300-gswip
>> + - lantiq,xrx330-gswip
>> +
>> + reg:
>> + minItems: 3
>> + maxItems: 3
>
> blank line
>
>> + reg-names:
>> + items:
>> + - const: switch
>> + - const: mdio
>> + - const: mii
>> +
>> + mdio:
>> + $ref: /schemas/net/mdio.yaml#
>> + unevaluatedProperties: false
>> +
>> + properties:
>> + compatible:
>> + const: lantiq,xrx200-mdio
>> +
>> + required:
>> + - compatible
>> +
>> + gphy-fw:
>> + type: object
>> + properties:
>> + '#address-cells':
>> + const: 1
>
> blank line
>
>> + '#size-cells':
>> + const: 0
>> +
>> + compatible:
>> + allOf:
>
> Don't need allOf.
>
>> + - items:
>> + - enum:
>> + - lantiq,xrx200-gphy-fw
>> + - lantiq,xrx300-gphy-fw
>> + - lantiq,xrx330-gphy-fw
>> + - const: lantiq,gphy-fw
>> +
>> + lantiq,rcu:
>> + $ref: /schemas/types.yaml#/definitions/phandle
>> + description: phandle to the RCU syscon
>> +
>> + patternProperties:
>> + "^gphy@[0-9a-f]+$":
>
> "^gphy@[0-9a-f]{1,2]$"
>
>> + type: object
>> +
>> + properties:
>> + reg:
>> + minimum: 0
>> + maximum: 255
>> + description:
>> + Offset of the GPHY firmware register in the RCU
>> register range
>> +
>> + resets:
>> + items:
>> + - description: GPHY reset line
>> +
>> + reset-names:
>> + items:
>> + - const: gphy
>> +
>> + required:
>> + - reg
>> +
>> + additionalProperties: false
>
> For indented cases, it is preferred to put this before 'properties'.
>
>> +
>> + required:
>> + - compatible
>> + - lantiq,rcu
>> +
>> + additionalProperties: false
>> +
>> +required:
>> + - compatible
>> + - reg
>> +
>> +unevaluatedProperties: false
>> +
>> +examples:
>> + - |
>> + switch@e108000 {
>> + compatible = "lantiq,xrx200-gswip";
>> + reg = <0xe108000 0x3100>, /* switch */
>> + <0xe10b100 0xd8>, /* mdio */
>> + <0xe10b1d8 0x130>; /* mii */
>> + dsa,member = <0 0>;
>> +
>> + ports {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + port@0 {
>> + reg = <0>;
>> + label = "lan3";
>> + phy-mode = "rgmii";
>> + phy-handle = <&phy0>;
>> + };
>> +
>> + port@1 {
>> + reg = <1>;
>> + label = "lan4";
>> + phy-mode = "rgmii";
>> + phy-handle = <&phy1>;
>> + };
>> +
>> + port@2 {
>> + reg = <2>;
>> + label = "lan2";
>> + phy-mode = "internal";
>> + phy-handle = <&phy11>;
>> + };
>> +
>> + port@4 {
>> + reg = <4>;
>> + label = "lan1";
>> + phy-mode = "internal";
>> + phy-handle = <&phy13>;
>> + };
>> +
>> + port@5 {
>> + reg = <5>;
>> + label = "wan";
>> + phy-mode = "rgmii";
>> + phy-handle = <&phy5>;
>> + };
>> +
>> + port@6 {
>> + reg = <0x6>;
>> + ethernet = <ð0>;
>> + };
>> + };
>> +
>> + mdio {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + compatible = "lantiq,xrx200-mdio";
>> +
>> + phy0: ethernet-phy@0 {
>> + reg = <0x0>;
>> + };
>> + phy1: ethernet-phy@1 {
>> + reg = <0x1>;
>> + };
>> + phy5: ethernet-phy@5 {
>> + reg = <0x5>;
>> + };
>> + phy11: ethernet-phy@11 {
>> + reg = <0x11>;
>> + };
>> + phy13: ethernet-phy@13 {
>> + reg = <0x13>;
>> + };
>> + };
>> +
>> + gphy-fw {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + compatible = "lantiq,xrx200-gphy-fw",
>> "lantiq,gphy-fw";
>> + lantiq,rcu = <&rcu0>;
>> +
>> + gphy@20 {
>> + reg = <0x20>;
>> +
>> + resets = <&reset0 31 30>;
>> + reset-names = "gphy";
>> + };
>> +
>> + gphy@68 {
>> + reg = <0x68>;
>> +
>> + resets = <&reset0 29 28>;
>> + reset-names = "gphy";
>> + };
>> + };
>> + };
OK, thanks for the review. I will send a v5 with these improvements
included and the two dt-bindings patches merged to satisfy the
'make dt_binding_check'.