linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver
@ 2025-04-23  7:29 Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 1/7] dt-bindings: net: Add MTIP L2 switch description Lukasz Majewski
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski

This patch series adds support for More Than IP's L2 switch driver embedded
in some NXP's SoCs. This one has been tested on imx287, but is also available
in the vf610.

In the past there has been performed some attempts to upstream this driver:

1. The 4.19-cip based one [1]
2. DSA based one for 5.12 [2] - i.e. the switch itself was treat as a DSA switch
   with NO tag appended.
3. The extension for FEC driver for 5.12 [3] - the trick here was to fully reuse
   FEC when the in-HW switching is disabled. When bridge offloading is enabled,
   the driver uses already configured MAC and PHY to also configure PHY.

All three approaches were not accepted as eligible for upstreaming.

The driver from this series has floowing features:

1. It is fully separated from fec_main - i.e. can be used interchangeable
   with it. To be more specific - one can build them as modules and
   if required switch between them when e.g. bridge offloading is required.

   To be more specific:
        - Use FEC_MAIN: When one needs support for two ETH ports with separate
          uDMAs used for both and bridging can be realized in SW.

        - Use MTIPL2SW: When it is enough to support two ports with only uDMA0
          attached to switch and bridging shall be offloaded to HW. 

2. This driver uses MTIP's L2 switch internal VLAN feature to provide port
   separation at boot time. Port separation is disabled when bridging is
   required.

3. Example usage:
        Configuration:
        ip link set lan0 up; sleep 1;
        ip link set lan1 up; sleep 1;
        ip link add name br0 type bridge;
        ip link set br0 up; sleep 1;
        ip link set lan0 master br0;
        ip link set lan1 master br0;
        bridge link;
        ip addr add 192.168.2.17/24 dev br0;
        ping -c 5 192.168.2.222

        Removal:
        ip link set br0 down;
        ip link delete br0 type bridge;
        ip link set dev lan1 down
        ip link set dev lan0 down

4. Limitations:
        - Driver enables and disables switch operation with learning and ageing.
        - Missing is the advanced configuration (e.g. adding entries to FBD). This is
          on purpose, as up till now we didn't had consensus about how the driver
          shall be added to Linux.

Links:
[1] - https://github.com/lmajewski/linux-imx28-l2switch/commits/master
[2] - https://github.com/lmajewski/linux-imx28-l2switch/tree/imx28-v5.12-L2-upstream-RFC_v1
[3] - https://source.denx.de/linux/linux-imx28-l2switch/-/tree/imx28-v5.12-L2-upstream-switchdev-RFC_v1?ref_type=heads

Lukasz Majewski (7):
  dt-bindings: net: Add MTIP L2 switch description
  ARM: dts: nxp: mxs: Adjust the imx28.dtsi L2 switch description
  ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch
  net: mtip: The L2 switch driver for imx287
  ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE
  ARM: mxs_defconfig: Update mxs_defconfig to 6.15-rc1
  ARM: mxs_defconfig: Enable CONFIG_FEC_MTIP_L2SW to support MTIP L2
    switch

 .../bindings/net/nxp,imx28-mtip-switch.yaml   |  148 ++
 MAINTAINERS                                   |    7 +
 arch/arm/boot/dts/nxp/mxs/imx28-xea.dts       |   56 +
 arch/arm/boot/dts/nxp/mxs/imx28.dtsi          |    9 +-
 arch/arm/configs/mxs_defconfig                |   13 +-
 drivers/net/ethernet/freescale/Kconfig        |    1 +
 drivers/net/ethernet/freescale/Makefile       |    1 +
 drivers/net/ethernet/freescale/mtipsw/Kconfig |   13 +
 .../net/ethernet/freescale/mtipsw/Makefile    |    3 +
 .../net/ethernet/freescale/mtipsw/mtipl2sw.c  | 1989 +++++++++++++++++
 .../net/ethernet/freescale/mtipsw/mtipl2sw.h  |  788 +++++++
 .../ethernet/freescale/mtipsw/mtipl2sw_br.c   |  120 +
 .../ethernet/freescale/mtipsw/mtipl2sw_mgnt.c |  449 ++++
 13 files changed, 3586 insertions(+), 11 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml
 create mode 100644 drivers/net/ethernet/freescale/mtipsw/Kconfig
 create mode 100644 drivers/net/ethernet/freescale/mtipsw/Makefile
 create mode 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw.c
 create mode 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw.h
 create mode 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw_br.c
 create mode 100644 drivers/net/ethernet/freescale/mtipsw/mtipl2sw_mgnt.c

-- 
2.39.5



^ permalink raw reply	[flat|nested] 14+ messages in thread

* [net-next v7 1/7] dt-bindings: net: Add MTIP L2 switch description
  2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
@ 2025-04-23  7:29 ` Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 2/7] ARM: dts: nxp: mxs: Adjust the imx28.dtsi " Lukasz Majewski
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski

This patch provides description of the MTIP L2 switch available in some
NXP's SOCs - e.g. imx287.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>

---
Changes for v2:
- Rename the file to match exactly the compatible
  (nxp,imx287-mtip-switch)

Changes for v3:
- Remove '-' from const:'nxp,imx287-mtip-switch'
- Use '^port@[12]+$' for port patternProperties
- Drop status = "okay";
- Provide proper indentation for 'example' binding (replace 8
  spaces with 4 spaces)
- Remove smsc,disable-energy-detect; property
- Remove interrupt-parent and interrupts properties as not required
- Remove #address-cells and #size-cells from required properties check
- remove description from reg:
- Add $ref: ethernet-switch.yaml#

Changes for v4:
- Use $ref: ethernet-switch.yaml#/$defs/ethernet-ports and remove already
  referenced properties
- Rename file to nxp,imx28-mtip-switch.yaml

Changes for v5:
- Provide proper description for 'ethernet-port' node

Changes for v6:
- Proper usage of
  $ref: ethernet-switch.yaml#/$defs/ethernet-ports/patternProperties
  when specifying the 'ethernet-ports' property
- Add description and check for interrupt-names property

Changes for v7:
- Change switch interrupt name from 'mtipl2sw' to 'enet_switch'
---
 .../bindings/net/nxp,imx28-mtip-switch.yaml   | 148 ++++++++++++++++++
 1 file changed, 148 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml

diff --git a/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml
new file mode 100644
index 000000000000..79327cbec1e8
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml
@@ -0,0 +1,148 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NXP SoC Ethernet Switch Controller (L2 MoreThanIP switch)
+
+maintainers:
+  - Lukasz Majewski <lukma@denx.de>
+
+description:
+  The 2-port switch ethernet subsystem provides ethernet packet (L2)
+  communication and can be configured as an ethernet switch. It provides the
+  reduced media independent interface (RMII), the management data input
+  output (MDIO) for physical layer device (PHY) management.
+
+properties:
+  compatible:
+    const: nxp,imx28-mtip-switch
+
+  reg:
+    maxItems: 1
+
+  phy-supply:
+    description:
+      Regulator that powers Ethernet PHYs.
+
+  clocks:
+    items:
+      - description: Register accessing clock
+      - description: Bus access clock
+      - description: Output clock for external device - e.g. PHY source clock
+      - description: IEEE1588 timer clock
+
+  clock-names:
+    items:
+      - const: ipg
+      - const: ahb
+      - const: enet_out
+      - const: ptp
+
+  interrupts:
+    items:
+      - description: Switch interrupt
+      - description: ENET0 interrupt
+      - description: ENET1 interrupt
+
+  interrupt-names:
+    items:
+      - const: enet_switch
+      - const: enet0
+      - const: enet1
+
+  pinctrl-names: true
+
+  ethernet-ports:
+    type: object
+    $ref: ethernet-switch.yaml#/$defs/ethernet-ports/patternProperties
+    additionalProperties: true
+
+    patternProperties:
+      '^ethernet-port@[12]$':
+        type: object
+        additionalProperties: true
+        properties:
+          reg:
+            items:
+              - enum: [1, 2]
+            description: MTIP L2 switch port number
+
+        required:
+          - reg
+          - label
+          - phy-mode
+          - phy-handle
+
+  mdio:
+    type: object
+    $ref: mdio.yaml#
+    unevaluatedProperties: false
+    description:
+      Specifies the mdio bus in the switch, used as a container for phy nodes.
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - interrupts
+  - interrupt-names
+  - mdio
+  - ethernet-ports
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include<dt-bindings/interrupt-controller/irq.h>
+    switch@800f0000 {
+        compatible = "nxp,imx28-mtip-switch";
+        reg = <0x800f0000 0x20000>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&mac0_pins_a>, <&mac1_pins_a>;
+        phy-supply = <&reg_fec_3v3>;
+        interrupts = <100>, <101>, <102>;
+        interrupt-names = "enet_switch", "enet0", "enet1";
+        clocks = <&clks 57>, <&clks 57>, <&clks 64>, <&clks 35>;
+        clock-names = "ipg", "ahb", "enet_out", "ptp";
+
+        ethernet-ports {
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            mtip_port1: ethernet-port@1 {
+                reg = <1>;
+                label = "lan0";
+                local-mac-address = [ 00 00 00 00 00 00 ];
+                phy-mode = "rmii";
+                phy-handle = <&ethphy0>;
+            };
+
+            mtip_port2: ethernet-port@2 {
+                reg = <2>;
+                label = "lan1";
+                local-mac-address = [ 00 00 00 00 00 00 ];
+                phy-mode = "rmii";
+                phy-handle = <&ethphy1>;
+            };
+        };
+
+        mdio_sw: mdio {
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            reset-gpios = <&gpio2 13 0>;
+            reset-delay-us = <25000>;
+            reset-post-delay-us = <10000>;
+
+            ethphy0: ethernet-phy@0 {
+                reg = <0>;
+            };
+
+            ethphy1: ethernet-phy@1 {
+                reg = <1>;
+            };
+        };
+    };
-- 
2.39.5



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [net-next v7 2/7] ARM: dts: nxp: mxs: Adjust the imx28.dtsi L2 switch description
  2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 1/7] dt-bindings: net: Add MTIP L2 switch description Lukasz Majewski
@ 2025-04-23  7:29 ` Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 3/7] ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch Lukasz Majewski
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski,
	Andrew Lunn

The current range of 'reg' property is too small to allow full control
of the L2 switch on imx287.

As this IP block also uses ENET-MAC blocks for its operation, the address
range for it must be included as well.

Moreover, some SoC common properties (like compatible, clocks, interrupts
numbers) have been moved to this node.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>

---
Changes for v2:
- adding extra properties (like compatible, clocks, interupts)

Changes for v3:
- None

Changes for v4:
- Rename imx287 with imx28 (as the former is not used in kernel anymore)

Changes for v5:
- None

Changes for v6:
- Add interrupt-names property

Changes for v7:
- Change switch interrupt name from 'mtipl2sw' to 'enet_switch'
---
 arch/arm/boot/dts/nxp/mxs/imx28.dtsi | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/nxp/mxs/imx28.dtsi b/arch/arm/boot/dts/nxp/mxs/imx28.dtsi
index bbea8b77386f..8aff2e87980e 100644
--- a/arch/arm/boot/dts/nxp/mxs/imx28.dtsi
+++ b/arch/arm/boot/dts/nxp/mxs/imx28.dtsi
@@ -1321,8 +1321,13 @@ mac1: ethernet@800f4000 {
 			status = "disabled";
 		};
 
-		eth_switch: switch@800f8000 {
-			reg = <0x800f8000 0x8000>;
+		eth_switch: switch@800f0000 {
+			compatible = "nxp,imx28-mtip-switch";
+			reg = <0x800f0000 0x20000>;
+			interrupts = <100>, <101>, <102>;
+			interrupt-names = "enet_switch", "enet0", "enet1";
+			clocks = <&clks 57>, <&clks 57>, <&clks 64>, <&clks 35>;
+			clock-names = "ipg", "ahb", "enet_out", "ptp";
 			status = "disabled";
 		};
 	};
-- 
2.39.5



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [net-next v7 3/7] ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch
  2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 1/7] dt-bindings: net: Add MTIP L2 switch description Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 2/7] ARM: dts: nxp: mxs: Adjust the imx28.dtsi " Lukasz Majewski
@ 2025-04-23  7:29 ` Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 5/7] ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE Lukasz Majewski
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski,
	Andrew Lunn

The description is similar to the one used with the new CPSW driver.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>

---
Changes for v2:
- Remove properties which are common for the imx28(7) SoC
- Use mdio properties to perform L2 switch reset (avoid using
  deprecated properties)

Changes for v3:
- Replace IRQ_TYPE_EDGE_FALLING with IRQ_TYPE_LEVEL_LOW
- Update comment regarding PHY interrupts s/AND/OR/g

Changes for v4:
- Use GPIO_ACTIVE_LOW instead of 0 in 'reset-gpios'
- Replace port@[12] with ethernet-port@[12]

Changes for v5:
- Add proper multiline comment for IRQs description

Changes for v6:
- None

Changes for v7:
- None
---
 arch/arm/boot/dts/nxp/mxs/imx28-xea.dts | 56 +++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/arch/arm/boot/dts/nxp/mxs/imx28-xea.dts b/arch/arm/boot/dts/nxp/mxs/imx28-xea.dts
index 6c5e6856648a..69032b29d767 100644
--- a/arch/arm/boot/dts/nxp/mxs/imx28-xea.dts
+++ b/arch/arm/boot/dts/nxp/mxs/imx28-xea.dts
@@ -5,6 +5,7 @@
  */
 
 /dts-v1/;
+#include<dt-bindings/interrupt-controller/irq.h>
 #include "imx28-lwe.dtsi"
 
 / {
@@ -90,6 +91,61 @@ &reg_usb_5v {
 	gpio = <&gpio0 2 0>;
 };
 
+&eth_switch {
+	pinctrl-names = "default";
+	pinctrl-0 = <&mac0_pins_a>, <&mac1_pins_a>;
+	phy-supply = <&reg_fec_3v3>;
+	status = "okay";
+
+	ethernet-ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		mtip_port1: ethernet-port@1 {
+			reg = <1>;
+			label = "lan0";
+			local-mac-address = [ 00 00 00 00 00 00 ];
+			phy-mode = "rmii";
+			phy-handle = <&ethphy0>;
+		};
+
+		mtip_port2: ethernet-port@2 {
+			reg = <2>;
+			label = "lan1";
+			local-mac-address = [ 00 00 00 00 00 00 ];
+			phy-mode = "rmii";
+			phy-handle = <&ethphy1>;
+		};
+	};
+
+	mdio_sw: mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		reset-gpios = <&gpio3 21 GPIO_ACTIVE_LOW>;
+		reset-delay-us = <25000>;
+		reset-post-delay-us = <10000>;
+
+		ethphy0: ethernet-phy@0 {
+			reg = <0>;
+			smsc,disable-energy-detect;
+			/*
+			 * Both PHYs (i.e. 0,1) have the same, single GPIO,
+			 * line to handle both, their interrupts (OR'ed)
+			 */
+			interrupt-parent = <&gpio4>;
+			interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
+		};
+
+		ethphy1: ethernet-phy@1 {
+			reg = <1>;
+			smsc,disable-energy-detect;
+			interrupt-parent = <&gpio4>;
+			interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
+		};
+	};
+};
+
 &spi2_pins_a {
 	fsl,pinmux-ids = <
 		MX28_PAD_SSP2_SCK__SSP2_SCK
-- 
2.39.5



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [net-next v7 5/7] ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE
  2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
                   ` (2 preceding siblings ...)
  2025-04-23  7:29 ` [net-next v7 3/7] ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch Lukasz Majewski
@ 2025-04-23  7:29 ` Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 6/7] ARM: mxs_defconfig: Update mxs_defconfig to 6.15-rc1 Lukasz Majewski
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski

It is not possible to enable by user the CONFIG_NETFS_SUPPORT anymore and
hence it depends on CONFIG_NFS_FSCACHE being enabled.

This patch fixes potential performance regression for NFS on the mxs
devices.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
Suggested-by: Stefan Wahren <wahrenst@gmx.net>

---
Changes for v6:
- New patch

Changes for v7:
- None
---
 arch/arm/configs/mxs_defconfig | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig
index c76d66135abb..22f7639f61fe 100644
--- a/arch/arm/configs/mxs_defconfig
+++ b/arch/arm/configs/mxs_defconfig
@@ -138,8 +138,6 @@ CONFIG_PWM_MXS=y
 CONFIG_NVMEM_MXS_OCOTP=y
 CONFIG_EXT4_FS=y
 # CONFIG_DNOTIFY is not set
-CONFIG_NETFS_SUPPORT=m
-CONFIG_FSCACHE=y
 CONFIG_FSCACHE_STATS=y
 CONFIG_CACHEFILES=m
 CONFIG_VFAT_FS=y
@@ -155,6 +153,7 @@ CONFIG_NFS_FS=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
+CONFIG_NFS_FSCACHE=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_850=y
 CONFIG_NLS_ISO8859_1=y
-- 
2.39.5



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [net-next v7 6/7] ARM: mxs_defconfig: Update mxs_defconfig to 6.15-rc1
  2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
                   ` (3 preceding siblings ...)
  2025-04-23  7:29 ` [net-next v7 5/7] ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE Lukasz Majewski
@ 2025-04-23  7:29 ` Lukasz Majewski
  2025-04-23  7:29 ` [net-next v7 7/7] ARM: mxs_defconfig: Enable CONFIG_FEC_MTIP_L2SW to support MTIP L2 switch Lukasz Majewski
       [not found] ` <20250423072911.3513073-5-lukma@denx.de>
  6 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski

This file is the updated version of mxs_defconfig for the v6.15-rc1
linux-next.

Detailed description of removed configuration entries:
-CONFIG_MTD_M25P80=y -> it has been replaced MTD_SPI_NOR (which is enabled)
-CONFIG_SMSC_PHY=y -> is enabled implicit by USB_NET_SMSC95XX
-CONFIG_GPIO_SYSFS=y -> it has been deprecated by moving to EXPERT and
                        its replacement GPIO_CDEV is enabled by default

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
Suggested-by: Stefan Wahren <wahrenst@gmx.net>

---
Changes for v5:
- New patch

Changes for v6:
- Add detailed description on the removed configuration options
  after update

Changes for v7:
- None
---
 arch/arm/configs/mxs_defconfig | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig
index 22f7639f61fe..b1a31cb914c8 100644
--- a/arch/arm/configs/mxs_defconfig
+++ b/arch/arm/configs/mxs_defconfig
@@ -32,9 +32,6 @@ CONFIG_INET=y
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_DHCP=y
 CONFIG_SYN_COOKIES=y
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
 # CONFIG_INET_DIAG is not set
 # CONFIG_IPV6 is not set
 CONFIG_CAN=m
@@ -45,7 +42,6 @@ CONFIG_MTD=y
 CONFIG_MTD_CMDLINE_PARTS=y
 CONFIG_MTD_BLOCK=y
 CONFIG_MTD_DATAFLASH=y
-CONFIG_MTD_M25P80=y
 CONFIG_MTD_SST25L=y
 CONFIG_MTD_RAW_NAND=y
 CONFIG_MTD_NAND_GPMI_NAND=y
@@ -60,7 +56,6 @@ CONFIG_ENC28J60=y
 CONFIG_ICPLUS_PHY=y
 CONFIG_MICREL_PHY=y
 CONFIG_REALTEK_PHY=y
-CONFIG_SMSC_PHY=y
 CONFIG_CAN_FLEXCAN=m
 CONFIG_USB_USBNET=y
 CONFIG_USB_NET_SMSC95XX=y
@@ -77,13 +72,11 @@ CONFIG_SERIAL_AMBA_PL011=y
 CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
 CONFIG_SERIAL_MXS_AUART=y
 # CONFIG_HW_RANDOM is not set
-# CONFIG_I2C_COMPAT is not set
 CONFIG_I2C_CHARDEV=y
 CONFIG_I2C_MXS=y
 CONFIG_SPI=y
 CONFIG_SPI_GPIO=m
 CONFIG_SPI_MXS=y
-CONFIG_GPIO_SYSFS=y
 # CONFIG_HWMON is not set
 CONFIG_WATCHDOG=y
 CONFIG_STMP3XXX_RTC_WATCHDOG=y
-- 
2.39.5



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [net-next v7 7/7] ARM: mxs_defconfig: Enable CONFIG_FEC_MTIP_L2SW to support MTIP L2 switch
  2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
                   ` (4 preceding siblings ...)
  2025-04-23  7:29 ` [net-next v7 6/7] ARM: mxs_defconfig: Update mxs_defconfig to 6.15-rc1 Lukasz Majewski
@ 2025-04-23  7:29 ` Lukasz Majewski
       [not found] ` <20250423072911.3513073-5-lukma@denx.de>
  6 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-23  7:29 UTC (permalink / raw)
  To: Andrew Lunn, davem, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo
  Cc: Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Lukasz Majewski

This patch enables support for More Than IP L2 switch available on some
imx28[7] devices.

Moreover, it also enables CONFIG_SWITCHDEV and CONFIG_BRIDGE required
by this driver for correct operation.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
---
Changes for v4:
- New patch

Changes for v5:
- Apply this patch on top of patch, which updates mxs_defconfig to
  v6.15-rc1
- Add more verbose commit message with explanation why SWITCHDEV and
  BRIDGE must be enabled as well

Changes for v6:
- None

Changes for v7:
- None
---
 arch/arm/configs/mxs_defconfig | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig
index b1a31cb914c8..ef4556222274 100644
--- a/arch/arm/configs/mxs_defconfig
+++ b/arch/arm/configs/mxs_defconfig
@@ -34,6 +34,8 @@ CONFIG_IP_PNP_DHCP=y
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_DIAG is not set
 # CONFIG_IPV6 is not set
+CONFIG_BRIDGE=y
+CONFIG_NET_SWITCHDEV=y
 CONFIG_CAN=m
 # CONFIG_WIRELESS is not set
 CONFIG_DEVTMPFS=y
@@ -52,6 +54,7 @@ CONFIG_EEPROM_AT24=y
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_NETDEVICES=y
+CONFIG_FEC_MTIP_L2SW=y
 CONFIG_ENC28J60=y
 CONFIG_ICPLUS_PHY=y
 CONFIG_MICREL_PHY=y
-- 
2.39.5



^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
       [not found] ` <20250423072911.3513073-5-lukma@denx.de>
@ 2025-04-25  1:11   ` Jakub Kicinski
  2025-04-25  5:33     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 14+ messages in thread
From: Jakub Kicinski @ 2025-04-25  1:11 UTC (permalink / raw)
  To: Lukasz Majewski
  Cc: Andrew Lunn, davem, Eric Dumazet, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Richard Cochran, netdev,
	devicetree, linux-kernel, imx, linux-arm-kernel, Stefan Wahren,
	Simon Horman, Andrew Lunn

On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:
> This patch series provides support for More Than IP L2 switch embedded
> in the imx287 SoC.
> 
> This is a two port switch (placed between uDMA[01] and MAC-NET[01]),
> which can be used for offloading the network traffic.
> 
> It can be used interchangeably with current FEC driver - to be more
> specific: one can use either of it, depending on the requirements.
> 
> The biggest difference is the usage of DMA - when FEC is used, separate
> DMAs are available for each ENET-MAC block.
> However, with switch enabled - only the DMA0 is used to send/receive data
> to/form switch (and then switch sends them to respecitive ports).

Lots of sparse warnings and build issues here, at least on x86.

Could you make sure it's clean with an allmodconfig config, 
something like:

make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/ 
-- 
pw-bot: cr


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
  2025-04-25  1:11   ` [net-next v7 4/7] net: mtip: The L2 switch driver for imx287 Jakub Kicinski
@ 2025-04-25  5:33     ` Krzysztof Kozlowski
  2025-04-25  6:05       ` Lukasz Majewski
  0 siblings, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-04-25  5:33 UTC (permalink / raw)
  To: Jakub Kicinski, Lukasz Majewski
  Cc: Andrew Lunn, davem, Eric Dumazet, Paolo Abeni, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Richard Cochran, netdev,
	devicetree, linux-kernel, imx, linux-arm-kernel, Stefan Wahren,
	Simon Horman, Andrew Lunn

On 25/04/2025 03:11, Jakub Kicinski wrote:
> On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:
>> This patch series provides support for More Than IP L2 switch embedded
>> in the imx287 SoC.
>>
>> This is a two port switch (placed between uDMA[01] and MAC-NET[01]),
>> which can be used for offloading the network traffic.
>>
>> It can be used interchangeably with current FEC driver - to be more
>> specific: one can use either of it, depending on the requirements.
>>
>> The biggest difference is the usage of DMA - when FEC is used, separate
>> DMAs are available for each ENET-MAC block.
>> However, with switch enabled - only the DMA0 is used to send/receive data
>> to/form switch (and then switch sends them to respecitive ports).
> 
> Lots of sparse warnings and build issues here, at least on x86.
> 
> Could you make sure it's clean with an allmodconfig config, 
> something like:
> 
> make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/ 

... and W=1 with clang as well.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
  2025-04-25  5:33     ` Krzysztof Kozlowski
@ 2025-04-25  6:05       ` Lukasz Majewski
  2025-04-25  6:18         ` Krzysztof Kozlowski
  0 siblings, 1 reply; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-25  6:05 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Jakub Kicinski, Andrew Lunn, davem, Eric Dumazet, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Andrew Lunn

[-- Attachment #1: Type: text/plain, Size: 1583 bytes --]

Hi Krzysztof, Jakub,

> On 25/04/2025 03:11, Jakub Kicinski wrote:
> > On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:  
> >> This patch series provides support for More Than IP L2 switch
> >> embedded in the imx287 SoC.
> >>
> >> This is a two port switch (placed between uDMA[01] and
> >> MAC-NET[01]), which can be used for offloading the network traffic.
> >>
> >> It can be used interchangeably with current FEC driver - to be more
> >> specific: one can use either of it, depending on the requirements.
> >>
> >> The biggest difference is the usage of DMA - when FEC is used,
> >> separate DMAs are available for each ENET-MAC block.
> >> However, with switch enabled - only the DMA0 is used to
> >> send/receive data to/form switch (and then switch sends them to
> >> respecitive ports).  
> > 
> > Lots of sparse warnings and build issues here, at least on x86.
> > 
> > Could you make sure it's clean with an allmodconfig config, 
> > something like:
> > 
> > make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/   
> 
> ... and W=1 with clang as well.
> 

The sparse warnings are because of struct switch_t casting and register
access with this paradigm (as it is done with other drivers).

What is the advise here from the community?

> Best regards,
> Krzysztof




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
  2025-04-25  6:05       ` Lukasz Majewski
@ 2025-04-25  6:18         ` Krzysztof Kozlowski
  2025-04-25  7:49           ` Lukasz Majewski
  0 siblings, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-04-25  6:18 UTC (permalink / raw)
  To: Lukasz Majewski
  Cc: Jakub Kicinski, Andrew Lunn, davem, Eric Dumazet, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Andrew Lunn

On 25/04/2025 08:05, Lukasz Majewski wrote:
> Hi Krzysztof, Jakub,
> 
>> On 25/04/2025 03:11, Jakub Kicinski wrote:
>>> On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:  
>>>> This patch series provides support for More Than IP L2 switch
>>>> embedded in the imx287 SoC.
>>>>
>>>> This is a two port switch (placed between uDMA[01] and
>>>> MAC-NET[01]), which can be used for offloading the network traffic.
>>>>
>>>> It can be used interchangeably with current FEC driver - to be more
>>>> specific: one can use either of it, depending on the requirements.
>>>>
>>>> The biggest difference is the usage of DMA - when FEC is used,
>>>> separate DMAs are available for each ENET-MAC block.
>>>> However, with switch enabled - only the DMA0 is used to
>>>> send/receive data to/form switch (and then switch sends them to
>>>> respecitive ports).  
>>>
>>> Lots of sparse warnings and build issues here, at least on x86.
>>>
>>> Could you make sure it's clean with an allmodconfig config, 
>>> something like:
>>>
>>> make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/   
>>
>> ... and W=1 with clang as well.
>>
> 
> The sparse warnings are because of struct switch_t casting and register

clang W=1 fails on errors, so it is not only sparse:

error: cast to smaller integer type 'uint' (aka 'unsigned int') from
'struct cbd_t *' [-Werror,-Wpointer-to-int-cast]

You probably wanted there kenel_ulong_t.

> access with this paradigm (as it is done with other drivers).

I don't understand. I see code like:

	struct switch_t *fecp = fep->hwp;

But this is not a cast - the same types.
> 
> What is the advise here from the community?
> 
>> Best regards,
>> Krzysztof
> 
> 
> 
> 
> Best regards,
> 
> Lukasz Majewski
> 
> --
> 
> DENX Software Engineering GmbH,      Managing Director: Erika Unter
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
  2025-04-25  6:18         ` Krzysztof Kozlowski
@ 2025-04-25  7:49           ` Lukasz Majewski
  2025-04-25  8:08             ` Krzysztof Kozlowski
  0 siblings, 1 reply; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-25  7:49 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Jakub Kicinski, Andrew Lunn, davem, Eric Dumazet, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Andrew Lunn

[-- Attachment #1: Type: text/plain, Size: 3494 bytes --]

Hi Krzysztof, Jakub

> On 25/04/2025 08:05, Lukasz Majewski wrote:
> > Hi Krzysztof, Jakub,
> >   
> >> On 25/04/2025 03:11, Jakub Kicinski wrote:  
> >>> On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:    
> >>>> This patch series provides support for More Than IP L2 switch
> >>>> embedded in the imx287 SoC.
> >>>>
> >>>> This is a two port switch (placed between uDMA[01] and
> >>>> MAC-NET[01]), which can be used for offloading the network
> >>>> traffic.
> >>>>
> >>>> It can be used interchangeably with current FEC driver - to be
> >>>> more specific: one can use either of it, depending on the
> >>>> requirements.
> >>>>
> >>>> The biggest difference is the usage of DMA - when FEC is used,
> >>>> separate DMAs are available for each ENET-MAC block.
> >>>> However, with switch enabled - only the DMA0 is used to
> >>>> send/receive data to/form switch (and then switch sends them to
> >>>> respecitive ports).    
> >>>
> >>> Lots of sparse warnings and build issues here, at least on x86.
> >>>
> >>> Could you make sure it's clean with an allmodconfig config, 
> >>> something like:
> >>>
> >>> make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/     
> >>
> >> ... and W=1 with clang as well.
> >>  
> > 
> > The sparse warnings are because of struct switch_t casting and
> > register  
> 
> clang W=1 fails on errors, so it is not only sparse:
> 
> error: cast to smaller integer type 'uint' (aka 'unsigned int') from
> 'struct cbd_t *' [-Werror,-Wpointer-to-int-cast]
> 
> You probably wanted there kenel_ulong_t.

This I did not catch earlier (probably because of my testing on
imx287). Thanks for spotting it.

> 
> > access with this paradigm (as it is done with other drivers).  
> 
> I don't understand. I see code like:
> 
> 	struct switch_t *fecp = fep->hwp;
> 
> But this is not a cast - the same types.

For example:

The warning:

mtipl2sw.c:208:30: warning: incorrect type in argument 1 (different
address spaces) mtipl2sw.c:208:30:    expected void const volatile
[noderef] __iomem *addr mtipl2sw.c:208:30:    got unsigned int *

corresponds to:
 info->maclo = readl(&fecp->ESW_LREC0);   [*]

where:

struct switch_t {
        u32 ESW_REVISION;
        u32 ESW_SCRATCH;
	...
        /*from 0x420-0x4FC*/
        u32 esw_reserved9[57];
        /*0xFC0DC500---0xFC0DC508*/
        u32 ESW_LREC0;
        u32 ESW_LREC1;
        u32 ESW_LSR;
};


The 'u32' type seems to be valid here as this register is 32 bit wide.

To fix the sparse warnings - I think that I will replace [*] with:

info->maclo = readl((u32 __iomem *)&fecp->ESW_LREC0);

as such solution is used in a wide way in the mainline kernel.

Is this the acceptable solution?

> > 
> > What is the advise here from the community?
> >   
> >> Best regards,
> >> Krzysztof  
> > 
> > 
> > 
> > 
> > Best regards,
> > 
> > Lukasz Majewski
> > 
> > --
> > 
> > DENX Software Engineering GmbH,      Managing Director: Erika Unter
> > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,
> > Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email:
> > lukma@denx.de  
> 
> 
> Best regards,
> Krzysztof




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
  2025-04-25  7:49           ` Lukasz Majewski
@ 2025-04-25  8:08             ` Krzysztof Kozlowski
  2025-04-25 10:58               ` Lukasz Majewski
  0 siblings, 1 reply; 14+ messages in thread
From: Krzysztof Kozlowski @ 2025-04-25  8:08 UTC (permalink / raw)
  To: Lukasz Majewski
  Cc: Jakub Kicinski, Andrew Lunn, davem, Eric Dumazet, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Andrew Lunn

On 25/04/2025 09:49, Lukasz Majewski wrote:
> Hi Krzysztof, Jakub
> 
>> On 25/04/2025 08:05, Lukasz Majewski wrote:
>>> Hi Krzysztof, Jakub,
>>>   
>>>> On 25/04/2025 03:11, Jakub Kicinski wrote:  
>>>>> On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:    
>>>>>> This patch series provides support for More Than IP L2 switch
>>>>>> embedded in the imx287 SoC.
>>>>>>
>>>>>> This is a two port switch (placed between uDMA[01] and
>>>>>> MAC-NET[01]), which can be used for offloading the network
>>>>>> traffic.
>>>>>>
>>>>>> It can be used interchangeably with current FEC driver - to be
>>>>>> more specific: one can use either of it, depending on the
>>>>>> requirements.
>>>>>>
>>>>>> The biggest difference is the usage of DMA - when FEC is used,
>>>>>> separate DMAs are available for each ENET-MAC block.
>>>>>> However, with switch enabled - only the DMA0 is used to
>>>>>> send/receive data to/form switch (and then switch sends them to
>>>>>> respecitive ports).    
>>>>>
>>>>> Lots of sparse warnings and build issues here, at least on x86.
>>>>>
>>>>> Could you make sure it's clean with an allmodconfig config, 
>>>>> something like:
>>>>>
>>>>> make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/     
>>>>
>>>> ... and W=1 with clang as well.
>>>>  
>>>
>>> The sparse warnings are because of struct switch_t casting and
>>> register  
>>
>> clang W=1 fails on errors, so it is not only sparse:
>>
>> error: cast to smaller integer type 'uint' (aka 'unsigned int') from
>> 'struct cbd_t *' [-Werror,-Wpointer-to-int-cast]
>>
>> You probably wanted there kenel_ulong_t.
> 
> This I did not catch earlier (probably because of my testing on
> imx287). Thanks for spotting it.
> 
>>
>>> access with this paradigm (as it is done with other drivers).  
>>
>> I don't understand. I see code like:
>>
>> 	struct switch_t *fecp = fep->hwp;
>>
>> But this is not a cast - the same types.
> 
> For example:
> 
> The warning:
> 
> mtipl2sw.c:208:30: warning: incorrect type in argument 1 (different
> address spaces) mtipl2sw.c:208:30:    expected void const volatile
> [noderef] __iomem *addr mtipl2sw.c:208:30:    got unsigned int *
> 
> corresponds to:
>  info->maclo = readl(&fecp->ESW_LREC0);   [*]
> 
> where:
> 
> struct switch_t {
>         u32 ESW_REVISION;
>         u32 ESW_SCRATCH;
> 	...
>         /*from 0x420-0x4FC*/
>         u32 esw_reserved9[57];
>         /*0xFC0DC500---0xFC0DC508*/
>         u32 ESW_LREC0;
>         u32 ESW_LREC1;
>         u32 ESW_LSR;
> };
> 
> 
> The 'u32' type seems to be valid here as this register is 32 bit wide.

It is not about size, but IOMEM annotation and pointer/non-pointer.


> 
> To fix the sparse warnings - I think that I will replace [*] with:
> 
> info->maclo = readl((u32 __iomem *)&fecp->ESW_LREC0);

I don't understand why are you reading address of ESW_LREC0. This is
MMIO, right? So you are supposes to read base + offset (where base is a
proper iomem pointer).


Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [net-next v7 4/7] net: mtip: The L2 switch driver for imx287
  2025-04-25  8:08             ` Krzysztof Kozlowski
@ 2025-04-25 10:58               ` Lukasz Majewski
  0 siblings, 0 replies; 14+ messages in thread
From: Lukasz Majewski @ 2025-04-25 10:58 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Jakub Kicinski, Andrew Lunn, davem, Eric Dumazet, Paolo Abeni,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Richard Cochran, netdev, devicetree, linux-kernel, imx,
	linux-arm-kernel, Stefan Wahren, Simon Horman, Andrew Lunn

[-- Attachment #1: Type: text/plain, Size: 4182 bytes --]

Hi Krzysztof,

> On 25/04/2025 09:49, Lukasz Majewski wrote:
> > Hi Krzysztof, Jakub
> >   
> >> On 25/04/2025 08:05, Lukasz Majewski wrote:  
> >>> Hi Krzysztof, Jakub,
> >>>     
> >>>> On 25/04/2025 03:11, Jakub Kicinski wrote:    
> >>>>> On Wed, 23 Apr 2025 09:29:08 +0200 Lukasz Majewski wrote:      
> >>>>>> This patch series provides support for More Than IP L2 switch
> >>>>>> embedded in the imx287 SoC.
> >>>>>>
> >>>>>> This is a two port switch (placed between uDMA[01] and
> >>>>>> MAC-NET[01]), which can be used for offloading the network
> >>>>>> traffic.
> >>>>>>
> >>>>>> It can be used interchangeably with current FEC driver - to be
> >>>>>> more specific: one can use either of it, depending on the
> >>>>>> requirements.
> >>>>>>
> >>>>>> The biggest difference is the usage of DMA - when FEC is used,
> >>>>>> separate DMAs are available for each ENET-MAC block.
> >>>>>> However, with switch enabled - only the DMA0 is used to
> >>>>>> send/receive data to/form switch (and then switch sends them to
> >>>>>> respecitive ports).      
> >>>>>
> >>>>> Lots of sparse warnings and build issues here, at least on x86.
> >>>>>
> >>>>> Could you make sure it's clean with an allmodconfig config, 
> >>>>> something like:
> >>>>>
> >>>>> make C=1 W=1 drivers/net/ethernet/freescale/mtipsw/       
> >>>>
> >>>> ... and W=1 with clang as well.
> >>>>    
> >>>
> >>> The sparse warnings are because of struct switch_t casting and
> >>> register    
> >>
> >> clang W=1 fails on errors, so it is not only sparse:
> >>
> >> error: cast to smaller integer type 'uint' (aka 'unsigned int')
> >> from 'struct cbd_t *' [-Werror,-Wpointer-to-int-cast]
> >>
> >> You probably wanted there kenel_ulong_t.  
> > 
> > This I did not catch earlier (probably because of my testing on
> > imx287). Thanks for spotting it.
> >   
> >>  
> >>> access with this paradigm (as it is done with other drivers).    
> >>
> >> I don't understand. I see code like:
> >>
> >> 	struct switch_t *fecp = fep->hwp;
> >>
> >> But this is not a cast - the same types.  
> > 
> > For example:
> > 
> > The warning:
> > 
> > mtipl2sw.c:208:30: warning: incorrect type in argument 1 (different
> > address spaces) mtipl2sw.c:208:30:    expected void const volatile
> > [noderef] __iomem *addr mtipl2sw.c:208:30:    got unsigned int *
> > 
> > corresponds to:
> >  info->maclo = readl(&fecp->ESW_LREC0);   [*]
> > 
> > where:
> > 
> > struct switch_t {
> >         u32 ESW_REVISION;
> >         u32 ESW_SCRATCH;
> > 	...
> >         /*from 0x420-0x4FC*/
> >         u32 esw_reserved9[57];
> >         /*0xFC0DC500---0xFC0DC508*/
> >         u32 ESW_LREC0;
> >         u32 ESW_LREC1;
> >         u32 ESW_LSR;
> > };
> > 
> > 
> > The 'u32' type seems to be valid here as this register is 32 bit
> > wide.  
> 
> It is not about size, but IOMEM annotation and pointer/non-pointer.
> 

+1

> 
> > 
> > To fix the sparse warnings - I think that I will replace [*] with:
> > 
> > info->maclo = readl((u32 __iomem *)&fecp->ESW_LREC0);  
> 
> I don't understand why are you reading address of ESW_LREC0.

The driver (still) uses the apparently "old" programming paradigm, so
there is struct switch_t with u32 elements cast to the __iomem address.

If I want to have the address - I'm using & on the element of the
struct. That is why sparse is complaining as it in fact gets pointer to
u32.

In the fec.h the set of #defines are used and void __iomem *hwp;
pointer.

It looks like to make the spare happy - I need to use similar approach
with the mtip.

The other option would be to add (u32 __iomem *) explicit cast to
readl()/writel().

Or do you see another solution?

> This is
> MMIO, right? So you are supposes to read base + offset (where base is
> a proper iomem pointer).
> 
> 
> Best regards,
> Krzysztof




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-04-25 12:24 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-23  7:29 [net-next v7 0/7] net: mtip: Add support for MTIP imx287 L2 switch driver Lukasz Majewski
2025-04-23  7:29 ` [net-next v7 1/7] dt-bindings: net: Add MTIP L2 switch description Lukasz Majewski
2025-04-23  7:29 ` [net-next v7 2/7] ARM: dts: nxp: mxs: Adjust the imx28.dtsi " Lukasz Majewski
2025-04-23  7:29 ` [net-next v7 3/7] ARM: dts: nxp: mxs: Adjust XEA board's DTS to support L2 switch Lukasz Majewski
2025-04-23  7:29 ` [net-next v7 5/7] ARM: mxs_defconfig: Enable CONFIG_NFS_FSCACHE Lukasz Majewski
2025-04-23  7:29 ` [net-next v7 6/7] ARM: mxs_defconfig: Update mxs_defconfig to 6.15-rc1 Lukasz Majewski
2025-04-23  7:29 ` [net-next v7 7/7] ARM: mxs_defconfig: Enable CONFIG_FEC_MTIP_L2SW to support MTIP L2 switch Lukasz Majewski
     [not found] ` <20250423072911.3513073-5-lukma@denx.de>
2025-04-25  1:11   ` [net-next v7 4/7] net: mtip: The L2 switch driver for imx287 Jakub Kicinski
2025-04-25  5:33     ` Krzysztof Kozlowski
2025-04-25  6:05       ` Lukasz Majewski
2025-04-25  6:18         ` Krzysztof Kozlowski
2025-04-25  7:49           ` Lukasz Majewski
2025-04-25  8:08             ` Krzysztof Kozlowski
2025-04-25 10:58               ` Lukasz Majewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).