Netdev List
 help / color / mirror / Atom feed
* [GIT PULL] wireless-next-2026-04-30
From: Johannes Berg @ 2026-04-30 12:02 UTC (permalink / raw)
  To: netdev; +Cc: linux-wireless

Hi,

Looks like 7.2 is going to be interesting with NAN and UHR
both getting major work, but for now we have some (relatively)
minor things - the biggest is the station bandwidth rework,
which is needed en route to UHR.

Please pull and let us know if there's any problem.

Thanks,
johannes



The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:

  Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)

are available in the Git repository at:

  https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git tags/wireless-next-2026-04-30

for you to fetch changes up to 7baf5857e15d722776898510a10546d6b2f18645:

  wifi: brcmsmac: phy_lcn: Remove dead code in wlc_lcnphy_radio_2064_channel_tune_4313() (2026-04-28 10:43:27 +0200)

----------------------------------------------------------------
Some new content already, notably:
 - mac80211: major rework of station bandwidth handling,
             fixing issues with lower capability than AP
 - general: cleanups for EMLSR spec issues (drafts differed)
 - ath9k: GPIO interface improvements
 - ath12k: replace dynamic memory allocation in WMI RX path

----------------------------------------------------------------
Aaradhana Sahu (1):
      wifi: ath12k: Fix invalid IRQ requests during AHB probe

Chelsy Ratnawat (1):
      wifi: brcmsmac: phy_lcn: Remove dead code in wlc_lcnphy_radio_2064_channel_tune_4313()

Daniel Gabay (1):
      wifi: cfg80211: validate cipher suite for NAN Data keys

Dmitry Antipov (1):
      wifi: mac80211: use kstrtobool_from_user() in debugfs callbacks

Jeff Johnson (3):
      wifi: ath12k: Fix HTC prototype ath12k_base parameters
      wifi: ath12k: Fix ath12k_dp_htt_tlv_iter()'s iter() signature
      wifi: ath12k: Remove macro HAL_RX_EHT_SIG_OFDMA_EB2_MCS

Johannes Berg (24):
      wifi: mac80211: remove NAN guards on ieee80211_sta_cur_vht_bw() calls
      wifi: mac80211: set cur_max_bandwidth to maximum
      wifi: mac80211: use max BW for HT channel width update
      wifi: mac80211: use chandef in ieee80211_get_sta_bw()
      wifi: mac80211: use chandef in TDLS chanctx handling
      wifi: mac80211: remove ieee80211_sta_cap_chan_bw()
      wifi: nl80211: document channel opmode change channel width
      wifi: mac80211: simplify ieee80211_sta_rx_bw_to_chan_width()
      wifi: mac80211: clean up STA NSS handling
      wifi: mac80211: clean up initial STA NSS/bandwidth handling
      wifi: mac80211: clean up ieee80211_sta_cap_rx_bw()
      wifi: mac80211: remove ieee80211_sta_cur_vht_bw()
      wifi: cfg80211: remove HE/SAE H2E required fields
      wifi: nl80211: reject beacons with bad HE operation
      wifi: cfg80211: move AP HT/VHT/... operation to beacon info
      wifi: nl80211: reject too short HT/VHT/HE/EHT capability/operation
      wifi: cfg80211: provide HT/VHT operation for AP beacon
      wifi: nl80211: always validate AP operation/PHY regulatory
      wifi: mac80211: clarify per-STA bandwidth handling
      wifi: mac80211: fix per-station PHY capability bandwidth
      wifi: mac80211: clarify an 802.11 VHT spec reference
      wifi: nl80211: check link is beaconing for color change
      wifi: mac80211: always allow transmitting null-data on TXQs
      Merge tag 'ath-next-20260427' of git://git.kernel.org/pub/scm/linux/kernel/git/ath/ath

Linus Walleij (1):
      wifi: ath9k: Obtain system GPIOS from descriptors

Louis Kotze (1):
      wifi: cfg80211: fix grammar in MLO group key error message

Nicolas Escande (1):
      wifi: ath12k: avoid dynamic alloc when parsing wmi tb

Pablo Martin-Gomez (4):
      wifi: Remove invalid 128TU transition timeout constant
      wifi: Remove EMLMR Delay subfield definitions
      wifi: Rename EMLSR delay constants and add EMLMR helpers and definitions
      wifi: Update EML function documentation to remove EMLSR-specific references

Ping-Ke Shih (1):
      wifi: mac80211: add __packed to union members of struct ieee80211_rx_status

Yuqi Xu (1):
      wifi: cfg80211: reject duplicate wiphy cipher suite entries

 drivers/gpio/gpio-ath79.c                          |  57 +++-
 drivers/net/wireless/ath/ath12k/ahb.c              |  25 +-
 drivers/net/wireless/ath/ath12k/core.c             |   6 +
 drivers/net/wireless/ath/ath12k/dp_htt.c           |   2 +-
 drivers/net/wireless/ath/ath12k/dp_htt.h           |   2 +-
 drivers/net/wireless/ath/ath12k/htc.h              |   8 +-
 drivers/net/wireless/ath/ath12k/wifi7/hal_rx.h     |   1 -
 drivers/net/wireless/ath/ath12k/wmi.c              | 217 +++++--------
 drivers/net/wireless/ath/ath12k/wmi.h              |   3 +
 drivers/net/wireless/ath/ath9k/hw.c                |  33 +-
 drivers/net/wireless/ath/ath9k/hw.h                |   3 +-
 .../broadcom/brcm80211/brcmsmac/phy/phy_lcn.c      |  13 +-
 drivers/net/wireless/intel/iwlwifi/mld/iface.c     |   2 +-
 drivers/net/wireless/intel/iwlwifi/mld/mac80211.c  |   6 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c  |   6 +-
 drivers/net/wireless/mediatek/mt76/mt7925/mcu.c    |   4 +-
 drivers/net/wireless/quantenna/qtnfmac/commands.c  |   4 +-
 drivers/net/wireless/realtek/rtw89/fw.c            |   2 +-
 include/linux/ieee80211-eht.h                      | 115 +++++--
 include/net/cfg80211.h                             |  25 +-
 include/net/mac80211.h                             |  10 +-
 include/uapi/linux/nl80211.h                       |  10 +-
 net/mac80211/cfg.c                                 | 136 +++++++-
 net/mac80211/chan.c                                |  66 ++--
 net/mac80211/debugfs.c                             |  47 +--
 net/mac80211/eht.c                                 |  11 +-
 net/mac80211/he.c                                  |   9 +-
 net/mac80211/ht.c                                  |  59 +---
 net/mac80211/ibss.c                                |   3 +
 net/mac80211/ieee80211_i.h                         |  28 +-
 net/mac80211/mesh_plink.c                          |   3 +
 net/mac80211/mlme.c                                |  25 +-
 net/mac80211/ocb.c                                 |   5 +-
 net/mac80211/rate.c                                |   4 +-
 net/mac80211/sta_info.c                            | 294 ++++++++++++++++-
 net/mac80211/sta_info.h                            |  16 +-
 net/mac80211/tdls.c                                |  24 +-
 net/mac80211/tx.c                                  |   2 +-
 net/mac80211/util.c                                |  23 +-
 net/mac80211/vht.c                                 | 350 +--------------------
 net/wireless/core.c                                |  21 ++
 net/wireless/core.h                                |   3 +-
 net/wireless/nl80211.c                             | 260 +++++++++------
 net/wireless/util.c                                |  10 +
 net/wireless/wext-compat.c                         |   3 +-
 45 files changed, 1097 insertions(+), 859 deletions(-)

^ permalink raw reply

* Re: [PATCH v2 3/3] arm64: dts: imx8dxl: Add SolidRun SoM and HummingBoard
From: Vladimir Oltean @ 2026-04-30 12:03 UTC (permalink / raw)
  To: Josua Mayer
  Cc: Andrew Lunn, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Shawn Guo, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
	Fabio Estevam, Vladimir Oltean, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Yazan Shhady, Mikhail Anikin,
	Alexander Dahl, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org, Conor Dooley,
	Krzysztof Kozlowski, netdev@vger.kernel.org
In-Reply-To: <75e338eb-afd2-4e2e-9b93-e9fc36871854@solid-run.com>

On Thu, Apr 30, 2026 at 11:48:45AM +0000, Josua Mayer wrote:
> > Also, can you use udev for user
> > interface naming?
> Possibly .... I am aware of systemd (udev) based default behaviour
> for network interface aliases (eth0, eth1, ...).
> 
> However I have not seen it for dsa switch ports.

In /etc/udev/rules.d/10-network.rules:

ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p0", NAME="lan0"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p1", NAME="lan1"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p2", NAME="lan2"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p3", NAME="lan3"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p4", NAME="lan4"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p5", NAME="lan5"

> 
> It has been common practice for switch ports to be named lan[0-9]+,
> and I'd prefer to keep it that way here too.
> Predictable names are important for users in particular when interfaces
> are of different types and at different connectors.
> 
> Re. the T1 ports names I didn't know whether to use "lan" or "trx".
> For those if "lan" is preferred, I can change them.

No objection to your naming choice. Just want to point out that we
encourage DSA users to use the same naming infrastructure as any other
net device. The device tree labels mostly come from deeply embedded
environments where a full udev implementation is missing (like OpenWrt).
If you don't have that excuse, you can try to leave the labels in the
device tree out and set up predictable names through an udev rule.

^ permalink raw reply

* Re: [PATCH v7 phy-next 17/27] phy: introduce phy_get_max_link_rate() helper for consumers
From: Geert Uytterhoeven @ 2026-04-30 11:59 UTC (permalink / raw)
  To: Vladimir Oltean
  Cc: linux-phy, Vinod Koul, Neil Armstrong, dri-devel, freedreno,
	linux-arm-kernel, linux-arm-msm, linux-can, linux-gpio, linux-ide,
	linux-kernel, linux-media, linux-pci, linux-renesas-soc,
	linux-riscv, linux-rockchip, linux-samsung-soc, linux-scsi,
	linux-sunxi, linux-tegra, linux-usb, netdev, spacemit,
	UNGLinuxDriver, Markus Schneider-Pargmann, Andrzej Hajda,
	Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Andy Yan, Marc Kleine-Budde, Vincent Mailhol,
	Nicolas Ferre, Alexandre Belloni, Claudiu Beznea,
	Geert Uytterhoeven, Magnus Damm
In-Reply-To: <20260430110652.558622-18-vladimir.oltean@nxp.com>

Hi Vladimir,

On Thu, 30 Apr 2026 at 13:07, Vladimir Oltean <vladimir.oltean@nxp.com> wrote:
> Consumer drivers shouldn't dereference struct phy, not even to get to
> its attributes.
>
> We have phy_get_bus_width() as a precedent for getting the bus_width
> attribute, so let's add phy_get_max_link_rate() and use it in DRM and
> CAN drivers.
>
> In CAN drivers, the transceiver is acquired through devm_phy_optional_get()
> and NULL is given by the API as a non-error case, so the PHY API should
> also tolerate NULL coming back to it. This means we can further simplify
> the call sites that test for the NULL quality of the transceiver.
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> Acked-by: Markus Schneider-Pargmann <msp@baylibre.com> # m_can

Thanks for your patch!

>  drivers/net/can/rcar/rcar_canfd.c                   | 3 +--

Acked-by: Geert Uytterhoeven <geert+renesas@glider.be> # rcar_canfd

> --- a/include/linux/phy/phy.h
> +++ b/include/linux/phy/phy.h
> @@ -57,6 +57,7 @@ int phy_notify_disconnect(struct phy *phy, int port);
>  int phy_notify_state(struct phy *phy, union phy_notify state);
>  int phy_get_bus_width(struct phy *phy);
>  void phy_set_bus_width(struct phy *phy, int bus_width);
> +u32 phy_get_max_link_rate(struct phy *phy);

This (and all the existing getters) should take a "const struct phy *".

>  #else
>  static inline struct phy *phy_get(struct device *dev, const char *string)
>  {

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply

* Re: [PATCH v2 3/3] arm64: dts: imx8dxl: Add SolidRun SoM and HummingBoard
From: Josua Mayer @ 2026-04-30 12:14 UTC (permalink / raw)
  To: Vladimir Oltean
  Cc: Andrew Lunn, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Shawn Guo, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
	Fabio Estevam, Vladimir Oltean, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Yazan Shhady, Mikhail Anikin,
	Alexander Dahl, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org, Conor Dooley,
	Krzysztof Kozlowski, netdev@vger.kernel.org
In-Reply-To: <20260430120341.4sqmblbt2hqoklsb@skbuf>

Am 30.04.26 um 14:03 schrieb Vladimir Oltean:
> On Thu, Apr 30, 2026 at 11:48:45AM +0000, Josua Mayer wrote:
>>> Also, can you use udev for user
>>> interface naming?
>> Possibly .... I am aware of systemd (udev) based default behaviour
>> for network interface aliases (eth0, eth1, ...).
>>
>> However I have not seen it for dsa switch ports.
> In /etc/udev/rules.d/10-network.rules:
>
> ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p0", NAME="lan0"
> ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p1", NAME="lan1"
> ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p2", NAME="lan2"
> ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p3", NAME="lan3"
> ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p4", NAME="lan4"
> ACTION=="add", SUBSYSTEM=="net", KERNELS=="spi2.0", DRIVERS=="sja1105", ATTR{phys_port_name}=="p5", NAME="lan5"
>
>> It has been common practice for switch ports to be named lan[0-9]+,
>> and I'd prefer to keep it that way here too.
>> Predictable names are important for users in particular when interfaces
>> are of different types and at different connectors.
>>
>> Re. the T1 ports names I didn't know whether to use "lan" or "trx".
>> For those if "lan" is preferred, I can change them.
> No objection to your naming choice. Just want to point out that we
> encourage DSA users to use the same naming infrastructure as any other
> net device.
Understood.
> The device tree labels mostly come from deeply embedded
> environments where a full udev implementation is missing (like OpenWrt).
> If you don't have that excuse, you can try to leave the labels in the
> device tree out and set up predictable names through an udev rule.
Today I would claim that even OpenWRT has sufficient mechanisms
for interface naming.

The board in question can run a full OS due to sufficient RAM storage.
So I will drop the labels as suggested, for v3.

Note there is one other board using this same ethernet switch, and it specifies all the labels:
arch/arm64/boot/dts/freescale/fsl-lx2160a-bluebox3.dts

^ permalink raw reply

* [PATCH v3 1/2] dt-bindings: arm: fsl: Add SolidRun i.MX8DXL SoM and HummingBoard
From: Josua Mayer @ 2026-04-30 12:17 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Andrew Lunn, Vladimir Oltean, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni
  Cc: Yazan Shhady, Mikhail Anikin, Alexander Dahl, devicetree,
	linux-kernel, imx, linux-arm-kernel, Vladimir Oltean,
	Conor Dooley, Krzysztof Kozlowski, netdev, Josua Mayer,
	Krzysztof Kozlowski
In-Reply-To: <20260430-imx8dxl-sr-som-v3-0-ce2b86cf75bc@solid-run.com>

Add binding for the SolidRun i.MX8DXL based System on Module, and the
reference HummingBoard Telematics.

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Josua Mayer <josua@solid-run.com>
---
 Documentation/devicetree/bindings/arm/fsl.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml
index 0023cd1268075..17cd47e8efce8 100644
--- a/Documentation/devicetree/bindings/arm/fsl.yaml
+++ b/Documentation/devicetree/bindings/arm/fsl.yaml
@@ -1394,6 +1394,13 @@ properties:
               - fsl,imx8dxl-evk           # i.MX8DXL EVK Board
           - const: fsl,imx8dxl
 
+      - description: SolidRun i.MX8DXL SoM based boards
+        items:
+          - enum:
+              - solidrun,imx8dxl-hummingboard-telematics # SolidRun i.MX8DXL SoM EVK Board
+          - const: solidrun,imx8dxl-sr-som
+          - const: fsl,imx8dxl
+
       - description: i.MX8QXP/i.MX8DX Boards with Toradex Colibri iMX8X Modules
         items:
           - enum:

-- 
2.51.0


^ permalink raw reply related

* [PATCH v3 2/2] arm64: dts: imx8dxl: Add SolidRun SoM and HummingBoard
From: Josua Mayer @ 2026-04-30 12:17 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Andrew Lunn, Vladimir Oltean, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni
  Cc: Yazan Shhady, Mikhail Anikin, Alexander Dahl, devicetree,
	linux-kernel, imx, linux-arm-kernel, Vladimir Oltean,
	Conor Dooley, Krzysztof Kozlowski, netdev, Josua Mayer
In-Reply-To: <20260430-imx8dxl-sr-som-v3-0-ce2b86cf75bc@solid-run.com>

Add support for the SolidRun i.MX8DXL System-on-Module (revision 2.1)
and its corresponding evaluation carrier board, the HummingBoard
Telematics (revision 2.0).

The SoM features:
- eMMC
- GNSS with 1PPS
- V2X DSRC Radio
- Secure Element for V2X Applications
- Inertial Sensor
- Pressure Sensor
- Compass

The HummingBoard Telematics carrier board features:
- Cellular Modem
- WiFi & Bluetooth
- RTC with backup battery
- CAN
- 100Base-TX Ethernet
- 100Base-T1 Ethernet
- Multi-interface I/O connector
- Multi-interface add-on board connector

The multi-interface I/O connector supplies power and provides basic I/O
(Console UART, 100Base-TX, 100Base-T1, CAN, and power-supply logic level
GPIOs). The SolidRun Evaluation Kit includes a suitable cable and
adapter board that breaks these out into RJ45, USB Type-A, microUSB
Console, and Terminal Block connectors.

The multi-interface add-on board connector provides additional
interfaces (4x 100Base-T1, 2x SGMII, USB 2.0 shared with the cellular
modem, CAN, MDIO, SPI, UART, PCIe, I2C, and GPIO). These add-on
interfaces are disabled by default in the base device tree and are
intended to be enabled and extended via device tree overlays.

Note that a few components physically present on the SoM were omitted
from this description due to a lack of upstream bindings and drivers:
- Pressure Sensor
- V2X DSRC Radio
- Secure Element

Signed-off-by: Josua Mayer <josua@solid-run.com>
---
 arch/arm64/boot/dts/freescale/Makefile             |   2 +
 .../freescale/imx8dxl-hummingboard-telematics.dts  | 523 +++++++++++++++++++++
 arch/arm64/boot/dts/freescale/imx8dxl-sr-som.dtsi  | 458 ++++++++++++++++++
 3 files changed, 983 insertions(+)

diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
index 711e36cc2c990..7db459f666610 100644
--- a/arch/arm64/boot/dts/freescale/Makefile
+++ b/arch/arm64/boot/dts/freescale/Makefile
@@ -111,6 +111,8 @@ dtb-$(CONFIG_ARCH_MXC) += imx8dxl-evk.dtb
 
 imx8dxl-evk-pcie-ep-dtbs += imx8dxl-evk.dtb imx-pcie0-ep.dtbo
 dtb-$(CONFIG_ARCH_MXC) += imx8dxl-evk-pcie-ep.dtb
+DTC_FLAGS_imx8dxl-hummingboard-telematics := -@
+dtb-$(CONFIG_ARCH_MXC) += imx8dxl-hummingboard-telematics.dtb
 
 dtb-$(CONFIG_ARCH_MXC) += imx8dxp-tqma8xdp-mba8xx.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx8dxp-tqma8xdps-mb-smarc-2.dtb
diff --git a/arch/arm64/boot/dts/freescale/imx8dxl-hummingboard-telematics.dts b/arch/arm64/boot/dts/freescale/imx8dxl-hummingboard-telematics.dts
new file mode 100644
index 0000000000000..7e822cbd7a528
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8dxl-hummingboard-telematics.dts
@@ -0,0 +1,523 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2022-2026 Josua Mayer <josua@solid-run.com>
+ */
+
+/dts-v1/;
+
+#include "imx8dxl-sr-som.dtsi"
+
+/ {
+	compatible = "solidrun,imx8dxl-hummingboard-telematics",
+		     "solidrun,imx8dxl-sr-som", "fsl,imx8dxl";
+	model = "SolidRun i.MX8DXL HummingBoard Telematics";
+
+	aliases {
+		/* override ethernet aliases from imx8dxl.dtsi */
+		ethernet0 = &eqos;
+		/delete-property/ ethernet1;
+		gpio8 = &tca6408_u2;
+		mmc2 = &usdhc3;
+		rtc0 = &carrier_rtc;
+		rtc1 = &rtc;
+		serial1 = &lpuart1;
+	};
+
+	v_1_1: regulator-1-1 {
+		compatible = "regulator-fixed";
+		regulator-name = "1v1";
+		pinctrl-0 = <&regulator_1v1_pins>;
+		pinctrl-names = "default";
+		regulator-always-on;
+		regulator-max-microvolt = <1100000>;
+		regulator-min-microvolt = <1100000>;
+		vin-supply = <&v_5_0>;
+		gpio = <&lsio_gpio4 5 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	v_5_0: regulator-5-0 {
+		compatible = "regulator-fixed";
+		regulator-name = "5v0";
+		regulator-max-microvolt = <5000000>;
+		regulator-min-microvolt = <5000000>;
+	};
+
+	/* can transceiver builtin regulator (STBN1 pin) */
+	reg_flexcan1_stby: regulator-flexcan1-standby {
+		compatible = "regulator-fixed";
+		regulator-name = "flexcan1-standby";
+		regulator-max-microvolt = <3300000>;
+		regulator-min-microvolt = <3300000>;
+		gpio = <&tca6408_u2 2 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	/* can transceiver builtin regulator (STBN2 pin) */
+	reg_flexcan2_stby: regulator-flexcan2-standby {
+		compatible = "regulator-fixed";
+		regulator-name = "flexcan2-standby";
+		regulator-max-microvolt = <3300000>;
+		regulator-min-microvolt = <3300000>;
+		gpio = <&tca6408_u2 3 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	modem_vbat: regulator-modem-vbat {
+		compatible = "regulator-fixed";
+		regulator-name = "vbat";
+		pinctrl-0 = <&regulator_modem_vbat_pins>;
+		pinctrl-names = "default";
+		regulator-max-microvolt = <3600000>;
+		regulator-min-microvolt = <3600000>;
+		vin-supply = <&v_5_0>;
+		gpio = <&lsio_gpio0 14 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	vbus1: regulator-vbus-1 {
+		compatible = "regulator-fixed";
+		regulator-name = "vbus1";
+		pinctrl-0 = <&regulator_usb1_vbus_pins>;
+		pinctrl-names = "default";
+		regulator-max-microvolt = <5000000>;
+		regulator-min-microvolt = <5000000>;
+		gpio = <&lsio_gpio0 16 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	usdhc3_pwrseq: usdhc3-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&lsio_gpio0 15 GPIO_ACTIVE_LOW>;
+	};
+};
+
+&dma_apbh {
+	status = "disabled";
+};
+
+&eqos {
+	/* delays are added by connected ethernet-switch cpu port */
+	phy-mode = "rgmii";
+	pinctrl-0 = <&eqos_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	fixed-link {
+		full-duplex;
+		speed = <1000>;
+	};
+};
+
+&flexcan1 {
+	pinctrl-0 = <&flexcan1_pins>;
+	pinctrl-names = "default";
+	xceiver-supply = <&reg_flexcan1_stby>;
+	status = "okay";
+
+	can-transceiver {
+		max-bitrate = <5000000>;
+	};
+};
+
+&flexcan2 {
+	pinctrl-0 = <&flexcan2_pins>;
+	pinctrl-names = "default";
+	xceiver-supply = <&reg_flexcan2_stby>;
+	status = "okay";
+
+	can-transceiver {
+		max-bitrate = <5000000>;
+	};
+};
+
+&i2c2 {
+	/* routed to J14: SDA(51), SCL(53) */
+
+	/* regulator@18 */
+
+	tca6408_u2: gpio@20 {
+		compatible = "ti,tca6408";
+		reg = <0x20>;
+		#interrupt-cells = <2>;
+		interrupt-controller;
+		#gpio-cells = <2>;
+		gpio-controller;
+		gpio-line-names = "DIG_IN1", "DIG_IN2", "CAN_STNB1", "CAN_STNB2",
+				  "DIG_OUT1", "DIG_OUT2", "", "";
+		interrupts-extended = <&lsio_gpio0 20 IRQ_TYPE_EDGE_FALLING>;
+		pinctrl-0 = <&tca6408_u2_int_pins>;
+		pinctrl-names = "default";
+	};
+
+	carrier_rtc: rtc@32 {
+		compatible = "epson,rx8111";
+		reg = <0x32>;
+	};
+};
+
+&iomuxc {
+	bluetooth_pins: pinctrl-bluetooth-grp {
+		fsl,pins = <
+			/* BT_REG_ON: io without pull (module integrates pd) */
+			IMX8DXL_SPI3_SCK_LSIO_GPIO0_IO13			0x0000061
+		>;
+	};
+
+	eqos_pins: pinctrl-eqos-grp {
+		fsl,pins = <
+			/* MDIO to Switch */
+			/* enet0 mdio pads supplied with 3.3v */
+			/* IMX8DXL_COMP_CTL_GPIO_1V8_3V3_GPIOCT */
+			IMX8DXL_ENET0_MDC_CONN_EQOS_MDC				0x06000020
+			IMX8DXL_ENET0_MDIO_CONN_EQOS_MDIO			0x06000020
+			/* RGMII to Switch */
+			IMX8DXL_ENET1_RGMII_TX_CTL_CONN_EQOS_RGMII_TX_CTL	0x06000020
+			IMX8DXL_ENET1_RGMII_TXC_CONN_EQOS_RGMII_TXC		0x06000020
+			IMX8DXL_ENET1_RGMII_TXD0_CONN_EQOS_RGMII_TXD0		0x06000020
+			IMX8DXL_ENET1_RGMII_TXD1_CONN_EQOS_RGMII_TXD1		0x06000020
+			IMX8DXL_ENET1_RGMII_TXD2_CONN_EQOS_RGMII_TXD2		0x06000020
+			IMX8DXL_ENET1_RGMII_TXD3_CONN_EQOS_RGMII_TXD3		0x06000020
+			IMX8DXL_ENET1_RGMII_RXC_CONN_EQOS_RGMII_RXC		0x06000020
+			IMX8DXL_ENET1_RGMII_RX_CTL_CONN_EQOS_RGMII_RX_CTL	0x06000020
+			IMX8DXL_ENET1_RGMII_RXD0_CONN_EQOS_RGMII_RXD0		0x06000020
+			IMX8DXL_ENET1_RGMII_RXD1_CONN_EQOS_RGMII_RXD1		0x06000020
+			IMX8DXL_ENET1_RGMII_RXD2_CONN_EQOS_RGMII_RXD2		0x06000020
+			IMX8DXL_ENET1_RGMII_RXD3_CONN_EQOS_RGMII_RXD3		0x06000020
+		>;
+	};
+
+	flexcan1_pins: pinctrl-flexcan1-grp {
+		fsl,pins = <
+			IMX8DXL_FLEXCAN0_TX_ADMA_FLEXCAN0_TX			0x00000021
+			IMX8DXL_FLEXCAN0_RX_ADMA_FLEXCAN0_RX			0x00000021
+		>;
+	};
+
+	flexcan2_pins: pinctrl-flexcan2-grp {
+		fsl,pins = <
+			IMX8DXL_FLEXCAN1_TX_ADMA_FLEXCAN1_TX			0x00000021
+			IMX8DXL_FLEXCAN1_RX_ADMA_FLEXCAN1_RX			0x00000021
+		>;
+	};
+
+	lpspi0_pins: pinctrl-lpspi0-grp {
+		fsl,pins = <
+			IMX8DXL_SPI0_SCK_ADMA_SPI0_SCK				0x600004c
+			IMX8DXL_SPI0_SDO_ADMA_SPI0_SDO				0x600004c
+			IMX8DXL_SPI0_SDI_ADMA_SPI0_SDI				0x600004c
+			IMX8DXL_SPI0_CS0_LSIO_GPIO1_IO08			0x0000021
+			IMX8DXL_SPI0_CS1_LSIO_GPIO1_IO07			0x0000021
+		>;
+	};
+
+	lpuart1_pins: pinctrl-lpuart1-grp {
+		fsl,pins = <
+			IMX8DXL_UART1_RX_ADMA_UART1_RX				0x06000020
+			IMX8DXL_UART1_TX_ADMA_UART1_TX				0x06000020
+			IMX8DXL_UART1_CTS_B_ADMA_UART1_CTS_B			0x06000020
+			IMX8DXL_UART1_RTS_B_ADMA_UART1_RTS_B			0x06000020
+		>;
+	};
+
+	modem_pins: pinctrl-lte-grp {
+		fsl,pins = <
+			/* modem RESET_N: io open drain drive 2mA */
+			IMX8DXL_ADC_IN3_LSIO_GPIO1_IO11	0x2000061
+
+			/* modem PWRKEY: io open drain with pull-up, drive 2mA */
+			IMX8DXL_ADC_IN2_LSIO_GPIO1_IO12	0x2000021
+		>;
+	};
+
+	regulator_1v1_pins: pinctrl-regulator-1-1-grp {
+		fsl,pins = <
+			/* SW_PE: io without pull-up */
+			IMX8DXL_USB_SS3_TC2_LSIO_GPIO4_IO05			0x0000061
+		>;
+	};
+
+	regulator_modem_vbat_pins: pinctrl-regulator-modem-vbat-grp {
+		fsl,pins = <
+			/*
+			 * RF_PWR: io without pull-up,
+			 * has either external pull-up (R1117) or pull-down (R1118).
+			 * With pull-up Modem will boot at system power-up,
+			 * with pull-down modem will enter power-down mode once
+			 * vbat is enabled -> toggle pwrkey to boot modem.
+			 * Hence pull-up (R1117) is preferred.
+			 */
+			IMX8DXL_SPI3_SDO_LSIO_GPIO0_IO14			0x0000061
+		>;
+	};
+
+	regulator_usb1_vbus_pins: pinctrl-regulator-usb1-vbus-grp {
+		fsl,pins = <
+			/* regulator enable: open-drain with pull-up & low drive strength */
+			IMX8DXL_SPI3_CS0_LSIO_GPIO0_IO16			0x2000021
+		>;
+	};
+
+	switch_pins: pinctrl-switch-grp {
+		fsl,pins = <
+			/* SW_RSTn: io without pull-up */
+			IMX8DXL_USB_SS3_TC0_LSIO_GPIO4_IO03			0x0000021
+
+			/* SW_CORE_RSTn: io without pull-up */
+			IMX8DXL_USB_SS3_TC1_LSIO_GPIO4_IO04			0x0000021
+
+			/* INT_N: io without pull-up */
+			IMX8DXL_USB_SS3_TC3_LSIO_GPIO4_IO06			0x0000021
+		>;
+	};
+
+	tca6408_u2_int_pins: pinctrl-tca6408-u2-int-grp {
+		fsl,pins = <
+			/* gpio-expander interrupt: io with pull-up */
+			IMX8DXL_MCLK_OUT0_LSIO_GPIO0_IO20			0x0000021
+		>;
+	};
+
+	usdhc3_pins: pinctrl-usdhc3-grp {
+		fsl,pins = <
+			IMX8DXL_ENET0_RGMII_TXC_CONN_USDHC2_CLK			0x06000040
+			IMX8DXL_ENET0_RGMII_TX_CTL_CONN_USDHC2_CMD		0x00000021
+			IMX8DXL_ENET0_RGMII_TXD0_CONN_USDHC2_DATA0		0x00000021
+			IMX8DXL_ENET0_RGMII_TXD1_CONN_USDHC2_DATA1		0x00000021
+			IMX8DXL_ENET0_RGMII_TXD2_CONN_USDHC2_DATA2		0x00000021
+			IMX8DXL_ENET0_RGMII_TXD3_CONN_USDHC2_DATA3		0x00000021
+		>;
+	};
+
+	wifi_pins: pinctrl-wifi-grp {
+		fsl,pins = <
+			/* WL_REG_ON: io without pull (module integrates pd) */
+			IMX8DXL_SPI3_SDI_LSIO_GPIO0_IO15			0x0000061
+		>;
+	};
+};
+
+&lpspi0 {
+	cs-gpios = <&lsio_gpio1 8 GPIO_ACTIVE_LOW>, <&lsio_gpio1 7 GPIO_ACTIVE_LOW>;
+	pinctrl-0 = <&lpspi0_pins>, <&switch_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	ethernet-switch@0 {
+		compatible = "nxp,sja1110a";
+		reg = <0>;
+		reset-gpios = <&lsio_gpio4 3 GPIO_ACTIVE_LOW>;
+		spi-max-frequency = <4000000>;
+
+		ethernet-ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			/* 100Base-TX on connector J26 */
+			port@1 {
+				reg = <0x1>;
+				phy-handle = <&switch_port1_base_tx_phy>;
+				phy-mode = "internal";
+			};
+
+			/* CPU */
+			port@2 {
+				reg = <0x2>;
+				ethernet = <&eqos>;
+				phy-mode = "rgmii-id";
+				rx-internal-delay-ps = <2000>;
+				tx-internal-delay-ps = <2000>;
+
+				fixed-link {
+					full-duplex;
+					speed = <1000>;
+				};
+			};
+
+			/* sgmii on addon board connector J21 */
+			port@3 {
+				reg = <0x3>;
+				status = "disabled";
+			};
+
+			/* sgmii on addon board connector J21 */
+			port@4 {
+				reg = <0x4>;
+				status = "disabled";
+			};
+
+			/* 100base-t1 on addon board connector J21 */
+			port@5 {
+				reg = <0x5>;
+				phy-handle = <&switch_port5_base_t1_phy>;
+				phy-mode = "internal";
+				status = "disabled";
+			};
+
+			/* 100base-t1 on addon board connector J21 */
+			port@6 {
+				reg = <0x6>;
+				phy-handle = <&switch_port6_base_t1_phy>;
+				phy-mode = "internal";
+				status = "disabled";
+			};
+
+			/* 100base-t1 on addon board connector J21 */
+			port@7 {
+				reg = <0x7>;
+				phy-handle = <&switch_port7_base_t1_phy>;
+				phy-mode = "internal";
+				status = "disabled";
+			};
+
+			/* 100base-t1 on addon board connector J21 */
+			port@8 {
+				reg = <0x8>;
+				phy-handle = <&switch_port8_base_t1_phy>;
+				phy-mode = "internal";
+				status = "disabled";
+			};
+
+			/* 100base-t1 on addon board connector J21 */
+			port@9 {
+				reg = <0x9>;
+				phy-handle = <&switch_port9_base_t1_phy>;
+				phy-mode = "internal";
+				status = "disabled";
+			};
+
+			/* 100Base-T1 on connector J26 */
+			port@a {
+				reg = <0xa>;
+				phy-handle = <&switch_port10_base_t1_phy>;
+				phy-mode = "internal";
+			};
+		};
+
+		mdios {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			mdio@0 {
+				compatible = "nxp,sja1110-base-t1-mdio";
+				reg = <0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				/* 100base-t1 on addon board connector J21 */
+				switch_port5_base_t1_phy: ethernet-phy@1 {
+					compatible = "ethernet-phy-ieee802.3-c45";
+					reg = <0x1>;
+					status = "disabled";
+				};
+
+				/* 100base-t1 on addon board connector J21 */
+				switch_port6_base_t1_phy: ethernet-phy@2 {
+					compatible = "ethernet-phy-ieee802.3-c45";
+					reg = <0x2>;
+					status = "disabled";
+				};
+
+				/* 100base-t1 on addon board connector J21 */
+				switch_port7_base_t1_phy: ethernet-phy@3 {
+					compatible = "ethernet-phy-ieee802.3-c45";
+					reg = <0x3>;
+					status = "disabled";
+				};
+
+				/* 100base-t1 on addon board connector J21 */
+				switch_port8_base_t1_phy: ethernet-phy@4 {
+					compatible = "ethernet-phy-ieee802.3-c45";
+					reg = <0x4>;
+					status = "disabled";
+				};
+
+				/* 100base-t1 on addon board connector J21 */
+				switch_port9_base_t1_phy: ethernet-phy@5 {
+					compatible = "ethernet-phy-ieee802.3-c45";
+					reg = <0x5>;
+					status = "disabled";
+				};
+
+				/* 100Base-T1 on connector J26 */
+				switch_port10_base_t1_phy: ethernet-phy@6 {
+					compatible = "ethernet-phy-ieee802.3-c45";
+					reg = <0x6>;
+				};
+			};
+
+			mdio@1 {
+				compatible = "nxp,sja1110-base-tx-mdio";
+				reg = <1>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				/* 100Base-TX on connector J26 */
+				switch_port1_base_tx_phy: ethernet-phy@1 {
+					reg = <0x1>;
+				};
+			};
+		};
+	};
+};
+
+/* bluetooth */
+&lpuart1 {
+	pinctrl-0 = <&lpuart1_pins>, <&bluetooth_pins>;
+	pinctrl-names = "default";
+	uart-has-rtscts;
+	status = "okay";
+
+	bluetooth {
+		compatible = "brcm,bcm4345c5";
+		/* Murata 1MW module supports max. 3M baud */
+		max-speed = <3000000>;
+		shutdown-gpios = <&lsio_gpio0 13 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&usbotg1 {
+	vbus-supply = <&vbus1>;
+};
+
+/* cellular modem */
+&usbotg2 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	adp-disable;
+	disable-over-current;
+	dr_mode = "host";
+	hnp-disable;
+	pinctrl-0 = <&modem_pins>;
+	pinctrl-names = "default";
+	power-active-high;
+	srp-disable;
+	vbus-supply = <&v_5_0>;
+	status = "okay";
+
+	usb-device@1 {
+		compatible = "usb2c7c,125";
+		reg = <1>;
+		reset-duration-us = <150000>;
+		reset-gpios = <&lsio_gpio1 11 GPIO_ACTIVE_LOW>;
+		vbus-supply = <&v_3_3>;
+		vdd-supply = <&modem_vbat>;
+	};
+};
+
+&usbphy2 {
+	status = "okay";
+};
+
+/* WiFi */
+&usdhc3 {
+	bus-width = <4>;
+	mmc-pwrseq = <&usdhc3_pwrseq>;
+	non-removable;
+	no-sd;
+	pinctrl-0 = <&usdhc3_pins>, <&wifi_pins>;
+	pinctrl-names = "default";
+	vmmc-supply = <&v_3_3>;
+	vqmmc-supply = <&v_1_8>;
+	status = "okay";
+};
diff --git a/arch/arm64/boot/dts/freescale/imx8dxl-sr-som.dtsi b/arch/arm64/boot/dts/freescale/imx8dxl-sr-som.dtsi
new file mode 100644
index 0000000000000..93a0eb4d7f770
--- /dev/null
+++ b/arch/arm64/boot/dts/freescale/imx8dxl-sr-som.dtsi
@@ -0,0 +1,458 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2022-2026 Josua Mayer <josua@solid-run.com>
+ */
+
+#include "imx8dxl.dtsi"
+/ {
+	compatible = "solidrun,imx8dxl-sr-som", "fsl,imx8dxl";
+	model = "SolidRun i.MX8DXL SoM";
+
+	aliases {
+		i2c2 = &i2c2;
+		i2c3 = &i2c3;
+		mmc0 = &usdhc1;
+		mmc1 = &usdhc2;
+		serial0 = &lpuart0;
+		serial2 = &lpuart2;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	imx8dxl-cm4 {
+		compatible = "fsl,imx8qxp-cm4";
+		clocks = <&clk_dummy>;
+		mboxes = <&lsio_mu5 0 1 &lsio_mu5 1 1 &lsio_mu5 3 1>;
+		mbox-names = "tx", "rx", "rxdb";
+		memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>,
+				<&vdev1vring0>, <&vdev1vring1>, <&rsc_table>;
+		power-domains = <&pd IMX_SC_R_M4_0_PID0>, <&pd IMX_SC_R_M4_0_MU_1A>;
+		fsl,entry-address = <0x34fe0000>;
+		fsl,resource-id = <IMX_SC_R_M4_0_PID0>;
+	};
+
+	pps {
+		compatible = "pps-gpio";
+		gpios = <&lsio_gpio2 6 GPIO_ACTIVE_HIGH>;
+		pinctrl-0 = <&gnss_pps_pins>;
+		pinctrl-names = "default";
+	};
+
+	v_1_2: regulator-1-2 {
+		compatible = "regulator-fixed";
+		regulator-name = "1v2";
+		pinctrl-0 = <&regulator_1_2_pins>;
+		pinctrl-names = "default";
+		regulator-max-microvolt = <1200000>;
+		regulator-min-microvolt = <1200000>;
+		gpio = <&lsio_gpio1 13 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	v_1_6: regulator-1-6 {
+		compatible = "regulator-fixed";
+		regulator-name = "1v6";
+		pinctrl-0 = <&regulator_1_6_pins>;
+		pinctrl-names = "default";
+		regulator-max-microvolt = <1600000>;
+		regulator-min-microvolt = <1600000>;
+		vin-supply = <&v_1_8>;
+		gpio = <&lsio_gpio1 14 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	v_1_8: regulator-1-8 {
+		compatible = "regulator-fixed";
+		regulator-name = "1v8";
+		regulator-max-microvolt = <1800000>;
+		regulator-min-microvolt = <1800000>;
+	};
+
+	v_1_8_se: regulator-1-8-secure-element {
+		compatible = "regulator-fixed";
+		regulator-name = "1v8-se";
+		pinctrl-0 = <&regulator_1_8_se_pins>;
+		pinctrl-names = "default";
+		regulator-max-microvolt = <1800000>;
+		regulator-min-microvolt = <1800000>;
+		vin-supply = <&v_1_8>;
+		gpio = <&lsio_gpio3 18 GPIO_ACTIVE_HIGH>;
+		enable-active-high;
+	};
+
+	v_3_3: regulator-3-3 {
+		compatible = "regulator-fixed";
+		regulator-name = "3v3";
+		regulator-max-microvolt = <3300000>;
+		regulator-min-microvolt = <3300000>;
+	};
+
+	reserved-memory {
+		ranges;
+		#address-cells = <2>;
+		#size-cells = <2>;
+
+		/* global autoconfigured region for contiguous allocations */
+		linux,cma {
+			compatible = "shared-dma-pool";
+			alloc-ranges = <0 0x98000000 0 0x14000000>;
+			reusable;
+			size = <0 0x14000000>;
+			linux,cma-default;
+		};
+
+		vdev0vring0: memory0@90000000 {
+			reg = <0 0x90000000 0 0x8000>;
+			no-map;
+		};
+
+		vdev0vring1: memory@90008000 {
+			reg = <0 0x90008000 0 0x8000>;
+			no-map;
+		};
+
+		vdev1vring0: memory@90010000 {
+			reg = <0 0x90010000 0 0x8000>;
+			no-map;
+		};
+
+		vdev1vring1: memory@90018000 {
+			reg = <0 0x90018000 0 0x8000>;
+			no-map;
+		};
+
+		rsc_table: memory-rsc-table@900ff000 {
+			reg = <0 0x900ff000 0 0x1000>;
+			no-map;
+		};
+
+		vdevbuffer: memory-vdevbuffer@90400000 {
+			compatible = "shared-dma-pool";
+			reg = <0 0x90400000 0 0x100000>;
+			no-map;
+		};
+
+		/*
+		 * Memory reserved for optee usage. Please do not use.
+		 * This will be automatically added to dtb if OP-TEE is installed.
+		 * optee@96000000 {
+		 *     reg = <0 0x96000000 0 0x2000000>;
+		 *     no-map;
+		 * };
+		 */
+	};
+
+	memory@80000000 {
+		reg = <0x00000000 0x80000000 0 0x40000000>;
+		device_type = "memory";
+	};
+};
+
+&i2c2 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	clock-frequency = <100000>;
+	pinctrl-0 = <&i2c2_pins>;
+	pinctrl-1 = <&i2c2_gpio_pins>;
+	pinctrl-names = "default", "gpio";
+	scl-gpios = <&lsio_gpio3 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	sda-gpios = <&lsio_gpio3 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	status = "okay";
+};
+
+&i2c3 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	clock-frequency = <100000>;
+	pinctrl-0 = <&i2c3_pins>;
+	pinctrl-1 = <&i2c3_gpio_pins>;
+	pinctrl-names = "default", "gpio";
+	scl-gpios = <&lsio_gpio3 2 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	sda-gpios = <&lsio_gpio3 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	status = "okay";
+
+	magnetometer@1e {
+		compatible = "st,iis2mdc";
+		reg = <0x1e>;
+		interrupt-parent = <&lsio_gpio2>;
+		interrupts = <10 IRQ_TYPE_EDGE_RISING>;
+		pinctrl-0 = <&magnetometer_pins>;
+		pinctrl-names = "default";
+		st,drdy-int-pin = <1>;
+	};
+
+	/* pressure-sensor@5c */
+
+	inertial-sensor@6b {
+		compatible = "st,ism330dhcx";
+		reg = <0x6b>;
+		interrupt-parent = <&lsio_gpio2>;
+		interrupts = <11 IRQ_TYPE_EDGE_RISING>;
+		pinctrl-0 = <&imu_pins>;
+		pinctrl-names = "default";
+		st,drdy-int-pin = <1>;
+	};
+};
+
+&iomuxc {
+	pinctrl-0 = <&pinctrl_hog>;
+	pinctrl-names = "default";
+
+	pinctrl_hog: hoggrp {
+		fsl,pins = <
+			IMX8DXL_COMP_CTL_GPIO_1V8_3V3_GPIORHB_PAD	0x000514a0
+			IMX8DXL_COMP_CTL_GPIO_1V8_3V3_GPIORHK_PAD	0x000014a0
+		>;
+	};
+
+	dsrc_pins: pinctrl-dsrc-grp {
+		fsl,pins = <
+			/* reset: io without pull */
+			IMX8DXL_ADC_IN0_LSIO_GPIO1_IO10			0x0000060
+
+			/*
+			 * boot0: io without pull
+			 * After reset, this pin selects radio boot media:
+			 * - 0: flash spi
+			 * - 1: slave sdio
+			 * Once the firmware boots however, the radio controls
+			 * this pin for flow-control to signal readiness.
+			 */
+			IMX8DXL_ADC_IN1_LSIO_GPIO1_IO09			0x0000060
+		>;
+	};
+
+	gnss_pins: pinctrl-gnss-grp {
+		fsl,pins = <
+			/* gps reset: input with pull-up */
+			IMX8DXL_SNVS_TAMPER_OUT4_LSIO_GPIO2_IO08_IN	0x0000021
+			/* gps interrupt: io without pull-up */
+			IMX8DXL_SNVS_TAMPER_IN0_LSIO_GPIO2_IO09_IN	0x0000061
+		>;
+	};
+
+	gnss_pps_pins: pinctrl-gnss-pps-grp {
+		fsl,pins = <
+			/* gps timepulse: input without pull-up */
+			IMX8DXL_SNVS_TAMPER_OUT2_LSIO_GPIO2_IO06_IN	0x0000061
+		>;
+	};
+
+	i2c2_gpio_pins: pinctrl-i2c2-gpio-grp {
+		fsl,pins = <
+			/* io with pull-up and weak drive */
+			IMX8DXL_SPI1_SCK_LSIO_GPIO3_IO00		0x00000021
+			/* io with pull-up, weak drive, open-drain */
+			IMX8DXL_SPI1_SDO_LSIO_GPIO3_IO01		0x02000021
+		>;
+	};
+
+	i2c2_pins: pinctrl-i2c2-grp {
+		fsl,pins = <
+			/* io with pull-up and weak drive */
+			IMX8DXL_SPI1_SCK_ADMA_I2C2_SDA			0x06000021
+			IMX8DXL_SPI1_SDO_ADMA_I2C2_SCL			0x06000021
+		>;
+	};
+
+	i2c3_gpio_pins: pinctrl-i2c3-gpio-grp {
+		fsl,pins = <
+			/* io with pull-up and weak drive */
+			IMX8DXL_SPI1_CS0_LSIO_GPIO3_IO03		0x00000021
+			/* io with pull-up, weak drive, open-drain */
+			IMX8DXL_SPI1_SDI_LSIO_GPIO3_IO02		0x02000021
+		>;
+	};
+
+	i2c3_pins: pinctrl-i2c3-grp {
+		fsl,pins = <
+			/* io with pull-up and weak drive */
+			IMX8DXL_SPI1_CS0_ADMA_I2C3_SDA			0x06000021
+			IMX8DXL_SPI1_SDI_ADMA_I2C3_SCL			0x06000021
+		>;
+	};
+
+	imu_pins: pinctrl-imu-grp {
+		fsl,pins = <
+			/* interrupt: io with pull-down */
+			IMX8DXL_SNVS_TAMPER_IN2_LSIO_GPIO2_IO11_IN	0x0000041
+		>;
+	};
+
+	lpspi2_pins: pinctrl-lpspi2-grp {
+		fsl,pins = <
+			IMX8DXL_USDHC1_RESET_B_ADMA_SPI2_SCK		0x600004c
+			IMX8DXL_USDHC1_VSELECT_ADMA_SPI2_SDO		0x600004c
+			IMX8DXL_USDHC1_WP_ADMA_SPI2_SDI			0x600004c
+			IMX8DXL_USDHC1_CD_B_LSIO_GPIO4_IO22		0x6000021
+		>;
+	};
+
+	lpuart0_pins: pinctrl-lpuart0-grp {
+		fsl,pins = <
+			IMX8DXL_UART0_RX_ADMA_UART0_RX			0x06000020
+			IMX8DXL_UART0_TX_ADMA_UART0_TX			0x06000020
+		>;
+	};
+
+	lpuart2_pins: pinctrl-lpuart2-grp {
+		fsl,pins = <
+			IMX8DXL_UART2_TX_ADMA_UART2_TX			0x06000020
+			IMX8DXL_UART2_RX_ADMA_UART2_RX			0x06000020
+		>;
+	};
+
+	magnetometer_pins: pinctrl-magnetometer-grp {
+		fsl,pins = <
+			/* interrupt: io with pull-down */
+			IMX8DXL_SNVS_TAMPER_IN1_LSIO_GPIO2_IO10_IN	0x0000041
+		>;
+	};
+
+	regulator_1_2_pins: pinctrl-regulator-1-2-grp {
+		fsl,pins = <
+			/* io without pull-up */
+			/* has etxernal pull-down */
+			IMX8DXL_ADC_IN5_LSIO_GPIO1_IO13			0x0000061
+		>;
+	};
+
+	regulator_1_6_pins: pinctrl-regulator-1-6-grp {
+		fsl,pins = <
+			/* io without pull-up */
+			/* has etxernal pull-down */
+			IMX8DXL_ADC_IN4_LSIO_GPIO1_IO14			0x0000061
+		>;
+	};
+
+	regulator_1_8_se_pins: pinctrl-regulator-1-8-secure-element-grp {
+		fsl,pins = <
+			/* v2x-secure-element power switch: io with pull-down */
+			IMX8DXL_QSPI0B_DATA0_LSIO_GPIO3_IO18		0x0000041
+		>;
+	};
+
+	se_pins: pinctrl-secure-element-grp {
+		fsl,pins = <
+			/* v2x-secure-element reset: io with pull-up */
+			IMX8DXL_QSPI0B_DATA1_LSIO_GPIO3_IO19		0x0000021
+
+			/*
+			 * v2x-secure-element gpio0: io with pull-up
+			 * pulled low by sxf after boot indicating ready for commands
+			 */
+			IMX8DXL_QSPI0B_DATA2_LSIO_GPIO3_IO20		0x0000021
+
+			/* v2x-secure-element gpio1: io with pull-up */
+			IMX8DXL_QSPI0B_DATA3_LSIO_GPIO3_IO21		0x0000021
+		>;
+	};
+
+	usdhc1_pins: pinctrl-usdhc1-grp {
+		fsl,pins = <
+			IMX8DXL_EMMC0_CLK_CONN_EMMC0_CLK		0x06000041
+			IMX8DXL_EMMC0_CMD_CONN_EMMC0_CMD		0x00000021
+			IMX8DXL_EMMC0_DATA0_CONN_EMMC0_DATA0		0x00000021
+			IMX8DXL_EMMC0_DATA1_CONN_EMMC0_DATA1		0x00000021
+			IMX8DXL_EMMC0_DATA2_CONN_EMMC0_DATA2		0x00000021
+			IMX8DXL_EMMC0_DATA3_CONN_EMMC0_DATA3		0x00000021
+			IMX8DXL_EMMC0_DATA4_CONN_EMMC0_DATA4		0x00000021
+			IMX8DXL_EMMC0_DATA5_CONN_EMMC0_DATA5		0x00000021
+			IMX8DXL_EMMC0_DATA6_CONN_EMMC0_DATA6		0x00000021
+			IMX8DXL_EMMC0_DATA7_CONN_EMMC0_DATA7		0x00000021
+			IMX8DXL_EMMC0_STROBE_CONN_EMMC0_STROBE		0x00000041
+			IMX8DXL_EMMC0_RESET_B_CONN_EMMC0_RESET_B	0x00000061
+		>;
+	};
+
+	usdhc2_pins: pinctrl-usdhc2-grp {
+		fsl,pins = <
+			IMX8DXL_ENET0_RGMII_RXC_CONN_USDHC1_CLK		0x06000040
+			IMX8DXL_ENET0_RGMII_RX_CTL_CONN_USDHC1_CMD	0x00000021
+			IMX8DXL_ENET0_RGMII_RXD0_CONN_USDHC1_DATA0	0x00000021
+			IMX8DXL_ENET0_RGMII_RXD1_CONN_USDHC1_DATA1	0x00000021
+			IMX8DXL_ENET0_RGMII_RXD2_CONN_USDHC1_DATA2	0x00000021
+			IMX8DXL_ENET0_RGMII_RXD3_CONN_USDHC1_DATA3	0x00000021
+		>;
+	};
+};
+
+&lpspi2 {
+	cs-gpios = <&lsio_gpio4 22 GPIO_ACTIVE_LOW>;
+	num-cs = <1>;
+	pinctrl-0 = <&lpspi2_pins>, <&se_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+/* console */
+&lpuart0 {
+	pinctrl-0 = <&lpuart0_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+/* gnss */
+&lpuart2 {
+	pinctrl-0 = <&lpuart2_pins>, <&gnss_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&lsio_gpio3 {
+	gpio-line-names = "", "", "", "", "", "", "", "",
+			  "", "", "", "", "", "", "", "",
+			  "", "", "", "SXF_RST", "SXF_GPIO0", "SXF_GPIO1", "", "",
+			  "", "", "", "", "", "", "", "";
+};
+
+&lsio_mu5 {
+	status = "okay";
+};
+
+/* OTG port for boot */
+&usbotg1 {
+	adp-disable;
+	disable-over-current;
+	dr_mode = "peripheral";
+	hnp-disable;
+	power-active-high;
+	srp-disable;
+	status = "okay";
+};
+
+&usbphy1 {
+	status = "okay";
+};
+
+/* eMMC */
+&usdhc1 {
+	bus-width = <8>;
+	cap-mmc-hw-reset;
+	non-removable;
+	no-sd;
+	no-sdio;
+	pinctrl-0 = <&usdhc1_pins>;
+	pinctrl-1 = <&usdhc1_pins>;
+	pinctrl-2 = <&usdhc1_pins>;
+	pinctrl-names = "default", "state_100mhz", "state_200mhz";
+	vmmc-supply = <&v_3_3>;
+	vqmmc-supply = <&v_1_8>;
+	status = "okay";
+};
+
+/* DSRC Radio */
+&usdhc2 {
+	bus-width = <4>;
+	keep-power-in-suspend;
+	max-frequency = <40000000>;
+	non-removable;
+	no-sd;
+	pinctrl-0 = <&usdhc2_pins>, <&dsrc_pins>;
+	pinctrl-names = "default";
+	vmmc-supply = <&v_3_3>;
+	vqmmc-supply = <&v_1_8>;
+	status = "okay";
+};

-- 
2.51.0


^ permalink raw reply related

* [PATCH v3 0/2] arm64: dts: imx8dxl: Add SolidRun SoM and HummingBoard
From: Josua Mayer @ 2026-04-30 12:17 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Andrew Lunn, Vladimir Oltean, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni
  Cc: Yazan Shhady, Mikhail Anikin, Alexander Dahl, devicetree,
	linux-kernel, imx, linux-arm-kernel, Vladimir Oltean,
	Conor Dooley, Krzysztof Kozlowski, netdev, Josua Mayer,
	Krzysztof Kozlowski

Add bindings and description for SolidRUn i.MX8DXL based SoM and
HummingBoard Telematics.

Modify SJA1110 Ethernet Switch bindings to allow SPI Mode 0.

This patch-set is based on v7.0-rc2, because rc1 was experiencing
deadlocks with imx8qxp clock driver.

Signed-off-by: Josua Mayer <josua@solid-run.com>
---
Changes in v3:
- rebased on v7.1-rc1.
- dropped dsa swtch port labels, should be handled by udev rules if
  required.
- Fixed spelling error in alias comment.
- Dropped superfluous status okay properties from switch sub-nodes.
- Link to v2: https://lore.kernel.org/r/20260409-imx8dxl-sr-som-v2-0-83ff20629ba0@solid-run.com

Changes in v2:
- Dropped accidental change to unrelated imx8mp-sr-som.dtsi file.
- Fixed phy-mode on fixed link between cpu and ethernet switch.
  (Reported-by: Andrew Lunn <andrew@lunn.ch>)
- Removed spi-cpol property from ethernet-switch on spi bus, fixing
  sja1110a driver probe.
- Changed SJA1110 bindings to allow removing spi-cpol property.
- Aligned comments on all ethernet switch port nodes to be consistent.
- Dropped regulator-always-on from dsrc radio power-supplies.
- Link to v1: https://lore.kernel.org/r/20260408-imx8dxl-sr-som-v1-0-ce5a39acd713@solid-run.com

---
Josua Mayer (2):
      dt-bindings: arm: fsl: Add SolidRun i.MX8DXL SoM and HummingBoard
      arm64: dts: imx8dxl: Add SolidRun SoM and HummingBoard

 Documentation/devicetree/bindings/arm/fsl.yaml     |   7 +
 arch/arm64/boot/dts/freescale/Makefile             |   2 +
 .../freescale/imx8dxl-hummingboard-telematics.dts  | 523 +++++++++++++++++++++
 arch/arm64/boot/dts/freescale/imx8dxl-sr-som.dtsi  | 458 ++++++++++++++++++
 4 files changed, 990 insertions(+)
---
base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
change-id: 20260408-imx8dxl-sr-som-f141ec343173

Best regards,
-- 
Josua Mayer <josua@solid-run.com>


^ permalink raw reply

* Re: [PATCH net v2] net: airoha: Move entries to queue head in case of DMA mapping failure in airoha_dev_xmit()
From: Lorenzo Bianconi @ 2026-04-30 12:23 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Jacob Keller
  Cc: Simon Horman, linux-arm-kernel, linux-mediatek, netdev
In-Reply-To: <20260429-airoha-xmit-unmap-error-path-v2-1-32e43b7c6d25@kernel.org>

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

> In order to respect the original descriptor order and avoid any
> potential IOMMU fault or memory corruption, move pending queue entries
> to the head of hw queue tx_list if the DMA mapping of current inflight
> packet fails in airoha_dev_xmit routine.
> 
> Fixes: 3f47e67dff1f7 ("net: airoha: Add the capability to consume out-of-order DMA tx descriptors")
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> Changes in v2:
> - Remove leftover airoha_queue_entry initialization inside the loop from
>   the previous version.
> - Link to v1: https://lore.kernel.org/r/20260428-airoha-xmit-unmap-error-path-v1-1-aec44c6765c1@kernel.org
> ---
>  drivers/net/ethernet/airoha/airoha_eth.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c
> index 5effb4a4ae84..fb4f51d67dd7 100644
> --- a/drivers/net/ethernet/airoha/airoha_eth.c
> +++ b/drivers/net/ethernet/airoha/airoha_eth.c
> @@ -2123,14 +2123,12 @@ static netdev_tx_t airoha_dev_xmit(struct sk_buff *skb,
>  	return NETDEV_TX_OK;
>  
>  error_unmap:
> -	while (!list_empty(&tx_list)) {
> -		e = list_first_entry(&tx_list, struct airoha_queue_entry,
> -				     list);
> +	list_for_each_entry(e, &tx_list, list) {
>  		dma_unmap_single(dev->dev.parent, e->dma_addr, e->dma_len,
>  				 DMA_TO_DEVICE);
>  		e->dma_addr = 0;
> -		list_move_tail(&e->list, &q->tx_list);
>  	}
> +	list_splice(&tx_list, &q->tx_list);
>  
>  	spin_unlock_bh(&q->lock);
>  error:

commenting on Sashiko's reported issues:
https://sashiko.dev/#/patchset/20260429-airoha-xmit-unmap-error-path-v2-1-32e43b7c6d25%40kernel.org

- Should the driver be updated to use skb_frag_dma_map() for mapping the SKB
  fragments, and correspondingly use dma_unmap_page() for those fragments in
  this error handling path?
  As we already pointed out here [0], we decided to skip this request and keep
  using dma_map_single() even for skb fragments.

Regards,
Lorenzo

[0] https://lore.kernel.org/netdev/20260427173935.6a1e36ee@kernel.org/

> 
> ---
> base-commit: 0c7a5ba011d336df4fcd1f667fcc16ea5549be12
> change-id: 20260428-airoha-xmit-unmap-error-path-8125594efb23
> 
> Best regards,
> -- 
> Lorenzo Bianconi <lorenzo@kernel.org>
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply

* [PATCH 0/5] ice: five small fixes and cleanups
From: Aleksandr Loktionov @ 2026-04-30 12:25 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev

Three correctness fixes and two cleanups for the ice driver.

Patch 1 corrects a kernel-doc comment in ice_ptp_hw.h that described the
ETH56G MAC Rx offset field as unsigned when it is signed (trivial doc fix,
no functional change).

Patch 2 removes the PF_SB_REM_DEV_CTL sideband register write from
ice_ptp_init_phc_e82x().  PHY access is enabled by default on E82X and
the register write was a leftover from an earlier SWITCH_MODE workaround
that is no longer needed.

Patch 3 renames ICE_SMA2_UFL2_RX_DIS to ICE_SMA2_UFL2_RX_EN to match
the actual active-high hardware semantics and inverts the three use sites
in ice_dpll.c so that the logic remains correct.

Patch 4 replaces the static per-type frequency tables for CGU pins with a
single DPLL_PIN_FREQUENCY_RANGE(1, 25 MHz) entry.  The firmware defines
an any_freq capability for configurable CGU inputs, but the old tables
restricted users to 1 PPS or 10 MHz.  GNSS pins retain a 1 PPS-only
entry since they are physically constrained.

Patch 5 exports ice_dcb_need_recfg() and calls it in the four SW LLDP
netlink setters instead of memcmp() on a non-packed struct, which is
undefined behaviour due to uninitialised padding bytes.  The redundant
memcmp in ice_pf_dcb_cfg() is removed since callers now guard it.

Aleksandr Loktionov (2):
  ice: add correct handling of SMA/u.FL states
  ice: use element-by-element comparison for DCB config changes

Arkadiusz Kubalewski (1):
  ice: fix DPLL pin frequency range in CGU pin descriptors

Karol Kolacinski (2):
  ice: fix ETH56G Rx offset type description in kernel-doc comment
  ice: remove unnecessary PF_SB_REM_DEV_CTL write for E82X

 drivers/net/ethernet/intel/ice/ice_dcb_lib.c |  13 +-
 drivers/net/ethernet/intel/ice/ice_dcb_lib.h |   2 +
 drivers/net/ethernet/intel/ice/ice_dcb_nl.c  |  30 +++-
 drivers/net/ethernet/intel/ice/ice_dpll.c    |   6 +-
 drivers/net/ethernet/intel/ice/ice_ptp_hw.c  | 141 ++++++++++---------
 drivers/net/ethernet/intel/ice/ice_ptp_hw.h  |   8 +-
 6 files changed, 113 insertions(+), 87 deletions(-)

-- 
2.52.0


^ permalink raw reply

* [PATCH 1/5] ice: fix ETH56G Rx offset type description in kernel-doc comment
From: Aleksandr Loktionov @ 2026-04-30 12:25 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev
In-Reply-To: <20260430122602.126722-1-aleksandr.loktionov@intel.com>

From: Karol Kolacinski <karol.kolacinski@intel.com>

The ETH56G MAC register configuration Rx offset field stores a signed
integer, not an unsigned one. Correct the struct comment that incorrectly
described it as '11 bit unsigned int'. Also update 'unsigned ints' to
'unsigned integers' for consistency.

Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ptp_hw.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
index 9bfd3e7..c1aa408 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
+++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
@@ -144,9 +144,9 @@ struct ice_vernier_info_e82x {
  * @tx_offset: total Tx offset, fixed point
  * @rx_offset: total Rx offset, contains value for bitslip/deskew, fixed point
  *
- * All fixed point registers except Rx offset are 23 bit unsigned ints with
+ * All fixed point registers except Rx offset are 23 bit unsigned integers with
  * a 9 bit fractional.
- * Rx offset is 11 bit unsigned int with a 9 bit fractional.
+ * Rx offset is 11 bit signed integer with a 9 bit fractional.
  */
 struct ice_eth56g_mac_reg_cfg {
 	struct {
-- 
2.52.0


^ permalink raw reply related

* [PATCH 2/5] ice: remove unnecessary PF_SB_REM_DEV_CTL write for E82X
From: Aleksandr Loktionov @ 2026-04-30 12:25 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev
In-Reply-To: <20260430122602.126722-1-aleksandr.loktionov@intel.com>

From: Karol Kolacinski <karol.kolacinski@intel.com>

Remove the PF_SB_REM_DEV_CTL register write from ice_ptp_init_phc_e82x().
PHY access is enabled by default on E82X devices and the driver does not
need to configure switch device access. The register write was a
remnant of an earlier SWITCH_MODE workaround for a FIFO issue and is
no longer needed.

Also update the kernel-doc comment to refer to the E82X family rather than
E822.

Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
index 61c0a0d..7b1b402 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
@@ -2767,22 +2767,13 @@ static int ice_ptp_set_vernier_wl(struct ice_hw *hw)
 }
 
 /**
- * ice_ptp_init_phc_e82x - Perform E822 specific PHC initialization
+ * ice_ptp_init_phc_e82x - Perform E82X specific PHC initialization
  * @hw: pointer to HW struct
  *
- * Perform PHC initialization steps specific to E822 devices.
+ * Perform PHC initialization steps specific to E82X devices.
  */
 static int ice_ptp_init_phc_e82x(struct ice_hw *hw)
 {
-	u32 val;
-
-	/* Enable reading switch and PHY registers over the sideband queue */
-#define PF_SB_REM_DEV_CTL_SWITCH_READ BIT(1)
-#define PF_SB_REM_DEV_CTL_PHY0 BIT(2)
-	val = rd32(hw, PF_SB_REM_DEV_CTL);
-	val |= (PF_SB_REM_DEV_CTL_SWITCH_READ | PF_SB_REM_DEV_CTL_PHY0);
-	wr32(hw, PF_SB_REM_DEV_CTL, val);
-
 	/* Set window length for all the ports */
 	return ice_ptp_set_vernier_wl(hw);
 }
-- 
2.52.0


^ permalink raw reply related

* [PATCH 3/5] ice: add correct handling of SMA/u.FL states
From: Aleksandr Loktionov @ 2026-04-30 12:26 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev
In-Reply-To: <20260430122602.126722-1-aleksandr.loktionov@intel.com>

The ICE_SMA2_UFL2_RX_DIS bit name is wrong: the bit is active high
(setting it *enables* RX for u.FL2 / SMA2), not active low.  Rename
it to ICE_SMA2_UFL2_RX_EN and invert the use sites in ice_dpll.c so
that enabling the u.FL2 pin clears the bit (as it used to do) and
disabling sets it.

Fixes: 2dd5d03c77e2 ("ice: redesign dpll sma/u.fl pins control")
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_dpll.c   | 6 +++---
 drivers/net/ethernet/intel/ice/ice_ptp_hw.h | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_dpll.c b/drivers/net/ethernet/intel/ice/ice_dpll.c
index 62f75701d..7e8bb63 100644
--- a/drivers/net/ethernet/intel/ice/ice_dpll.c
+++ b/drivers/net/ethernet/intel/ice/ice_dpll.c
@@ -672,7 +672,7 @@ ice_dpll_sw_pins_update(struct ice_pf *pf)
 		p->active = false;
 
 	p = &d->ufl[ICE_DPLL_PIN_SW_2_IDX];
-	p->active = (data & ICE_SMA2_DIR_EN) && !(data & ICE_SMA2_UFL2_RX_DIS);
+	p->active = (data & ICE_SMA2_DIR_EN) && !(data & ICE_SMA2_UFL2_RX_EN);
 	d->sma_data = data;
 
 	return 0;
@@ -1264,10 +1264,10 @@ ice_dpll_ufl_pin_state_set(const struct dpll_pin *pin, void *pin_priv,
 	case ICE_DPLL_PIN_SW_2_IDX:
 		if (state == DPLL_PIN_STATE_SELECTABLE) {
 			data |= ICE_SMA2_DIR_EN;
-			data &= ~ICE_SMA2_UFL2_RX_DIS;
+			data &= ~ICE_SMA2_UFL2_RX_EN;
 			enable = true;
 		} else if (state == DPLL_PIN_STATE_DISCONNECTED) {
-			data |= ICE_SMA2_UFL2_RX_DIS;
+			data |= ICE_SMA2_UFL2_RX_EN;
 			enable = false;
 		} else {
 			goto unlock;
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
index c1aa408..278d757 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
+++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.h
@@ -655,12 +655,12 @@ static inline u64 ice_get_base_incval(struct ice_hw *hw)
 /* SMA controller pin control */
 #define ICE_SMA1_DIR_EN		BIT(4)
 #define ICE_SMA1_TX_EN		BIT(5)
-#define ICE_SMA2_UFL2_RX_DIS	BIT(3)
+#define ICE_SMA2_UFL2_RX_EN	BIT(3)
 #define ICE_SMA2_DIR_EN		BIT(6)
 #define ICE_SMA2_TX_EN		BIT(7)
 
 #define ICE_SMA1_MASK		(ICE_SMA1_DIR_EN | ICE_SMA1_TX_EN)
-#define ICE_SMA2_MASK		(ICE_SMA2_UFL2_RX_DIS | ICE_SMA2_DIR_EN | \
+#define ICE_SMA2_MASK		(ICE_SMA2_UFL2_RX_EN | ICE_SMA2_DIR_EN | \
 				 ICE_SMA2_TX_EN)
 #define ICE_SMA2_INACTIVE_MASK	(ICE_SMA2_DIR_EN | ICE_SMA2_TX_EN)
 #define ICE_ALL_SMA_MASK	(ICE_SMA1_MASK | ICE_SMA2_MASK)
-- 
2.52.0


^ permalink raw reply related

* [PATCH 4/5] ice: fix DPLL pin frequency range in CGU pin descriptors
From: Aleksandr Loktionov @ 2026-04-30 12:26 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov
  Cc: netdev, Arkadiusz Kubalewski
In-Reply-To: <20260430122602.126722-1-aleksandr.loktionov@intel.com>

From: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>

Replace the per-type frequency tables (ice_cgu_pin_freq_1_hz and
ice_cgu_pin_freq_10_mhz) and the two-entry ice_cgu_pin_freq_common array
with a named range constant ICE_CGU_MAX_FREQ_HZ (25 MHz), a new
ice_cgu_pin_freq_range array containing DPLL_PIN_FREQUENCY_RANGE(1,
ICE_CGU_MAX_FREQ_HZ), and a separate ice_cgu_pin_freq_gnss array that
retains DPLL_PIN_FREQUENCY_1PPS for GNSS input pins.

The hardware firmware spec defines an any_freq capability for CGU inputs
(ICE_AQC_GET_CGU_IN_CFG_FLG1_ANYFREQ), but the static pin descriptor
tables constrained configurable pins to 1PPS or 10MHz, preventing users
from setting valid intermediate frequencies. Use a range entry so the
DPLL netlink interface correctly reflects what the firmware will accept.
The firmware validates the actual value and rejects out-of-range requests.

MUX, SyncE ETH port, and configurable EXT pins now advertise the full
frequency range, matching the hardware capability. GNSS input pins retain
the 1PPS-only advertisement since a GNSS receiver is physically
constrained to 1 Hz.

Fixes: 6db5f2cd9ebb ("ice: dpll: fix output pin capabilities")
Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 128 +++++++++++---------
 1 file changed, 72 insertions(+), 56 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
index 7b1b402..3949138 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
@@ -7,127 +7,143 @@
 #include "ice_ptp_hw.h"
 #include "ice_ptp_consts.h"
 
-static struct dpll_pin_frequency ice_cgu_pin_freq_common[] = {
-	DPLL_PIN_FREQUENCY_1PPS,
-	DPLL_PIN_FREQUENCY_10MHZ,
-};
+/* Maximum frequency supported by CGU pins, in Hz */
+#define ICE_CGU_MAX_FREQ_HZ	25000000
 
-static struct dpll_pin_frequency ice_cgu_pin_freq_1_hz[] = {
-	DPLL_PIN_FREQUENCY_1PPS,
+static struct dpll_pin_frequency ice_cgu_pin_freq_range[] = {
+	DPLL_PIN_FREQUENCY_RANGE(1, ICE_CGU_MAX_FREQ_HZ),
 };
 
-static struct dpll_pin_frequency ice_cgu_pin_freq_10_mhz[] = {
-	DPLL_PIN_FREQUENCY_10MHZ,
+static struct dpll_pin_frequency ice_cgu_pin_freq_gnss[] = {
+	DPLL_PIN_FREQUENCY_1PPS,
 };
 
 static const struct ice_cgu_pin_desc ice_e810t_sfp_cgu_inputs[] = {
 	{ "CVL-SDP22",	  ZL_REF0P, DPLL_PIN_TYPE_INT_OSCILLATOR,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CVL-SDP20",	  ZL_REF0N, DPLL_PIN_TYPE_INT_OSCILLATOR,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
-	{ "C827_0-RCLKA", ZL_REF1P, DPLL_PIN_TYPE_MUX, 0, },
-	{ "C827_0-RCLKB", ZL_REF1N, DPLL_PIN_TYPE_MUX, 0, },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "C827_0-RCLKA", ZL_REF1P, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "C827_0-RCLKB", ZL_REF1N, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "SMA1",	  ZL_REF3P, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "SMA2/U.FL2",	  ZL_REF3N, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "GNSS-1PPS",	  ZL_REF4P, DPLL_PIN_TYPE_GNSS,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_gnss), ice_cgu_pin_freq_gnss },
 };
 
 static const struct ice_cgu_pin_desc ice_e810t_qsfp_cgu_inputs[] = {
 	{ "CVL-SDP22",	  ZL_REF0P, DPLL_PIN_TYPE_INT_OSCILLATOR,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CVL-SDP20",	  ZL_REF0N, DPLL_PIN_TYPE_INT_OSCILLATOR,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
-	{ "C827_0-RCLKA", ZL_REF1P, DPLL_PIN_TYPE_MUX, },
-	{ "C827_0-RCLKB", ZL_REF1N, DPLL_PIN_TYPE_MUX, },
-	{ "C827_1-RCLKA", ZL_REF2P, DPLL_PIN_TYPE_MUX, },
-	{ "C827_1-RCLKB", ZL_REF2N, DPLL_PIN_TYPE_MUX, },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "C827_0-RCLKA", ZL_REF1P, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "C827_0-RCLKB", ZL_REF1N, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "C827_1-RCLKA", ZL_REF2P, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "C827_1-RCLKB", ZL_REF2N, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "SMA1",	  ZL_REF3P, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "SMA2/U.FL2",	  ZL_REF3N, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "GNSS-1PPS",	  ZL_REF4P, DPLL_PIN_TYPE_GNSS,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_gnss), ice_cgu_pin_freq_gnss },
 };
 
 static const struct ice_cgu_pin_desc ice_e810t_sfp_cgu_outputs[] = {
 	{ "REF-SMA1",	    ZL_OUT0, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "REF-SMA2/U.FL2", ZL_OUT1, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
-	{ "PHY-CLK",	    ZL_OUT2, DPLL_PIN_TYPE_SYNCE_ETH_PORT, },
-	{ "MAC-CLK",	    ZL_OUT3, DPLL_PIN_TYPE_SYNCE_ETH_PORT, },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "PHY-CLK",	    ZL_OUT2, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "MAC-CLK",	    ZL_OUT3, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CVL-SDP21",	    ZL_OUT4, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CVL-SDP23",	    ZL_OUT5, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 };
 
 static const struct ice_cgu_pin_desc ice_e810t_qsfp_cgu_outputs[] = {
 	{ "REF-SMA1",	    ZL_OUT0, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "REF-SMA2/U.FL2", ZL_OUT1, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
-	{ "PHY-CLK",	    ZL_OUT2, DPLL_PIN_TYPE_SYNCE_ETH_PORT, 0 },
-	{ "PHY2-CLK",	    ZL_OUT3, DPLL_PIN_TYPE_SYNCE_ETH_PORT, 0 },
-	{ "MAC-CLK",	    ZL_OUT4, DPLL_PIN_TYPE_SYNCE_ETH_PORT, 0 },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "PHY-CLK",	    ZL_OUT2, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "PHY2-CLK",	    ZL_OUT3, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "MAC-CLK",	    ZL_OUT4, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CVL-SDP21",	    ZL_OUT5, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CVL-SDP23",	    ZL_OUT6, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 };
 
 static const struct ice_cgu_pin_desc ice_e823_si_cgu_inputs[] = {
 	{ "NONE",	  SI_REF0P, 0, 0 },
 	{ "NONE",	  SI_REF0N, 0, 0 },
-	{ "SYNCE0_DP",	  SI_REF1P, DPLL_PIN_TYPE_MUX, 0 },
-	{ "SYNCE0_DN",	  SI_REF1N, DPLL_PIN_TYPE_MUX, 0 },
+	{ "SYNCE0_DP",	  SI_REF1P, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "SYNCE0_DN",	  SI_REF1N, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "EXT_CLK_SYNC", SI_REF2P, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "NONE",	  SI_REF2N, 0, 0 },
 	{ "EXT_PPS_OUT",  SI_REF3,  DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "INT_PPS_OUT",  SI_REF4,  DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 };
 
 static const struct ice_cgu_pin_desc ice_e823_si_cgu_outputs[] = {
 	{ "1588-TIME_SYNC", SI_OUT0, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
-	{ "PHY-CLK",	    SI_OUT1, DPLL_PIN_TYPE_SYNCE_ETH_PORT, 0 },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "PHY-CLK",	    SI_OUT1, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "10MHZ-SMA2",	    SI_OUT2, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_10_mhz), ice_cgu_pin_freq_10_mhz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "PPS-SMA1",	    SI_OUT3, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 };
 
 static const struct ice_cgu_pin_desc ice_e823_zl_cgu_inputs[] = {
 	{ "NONE",	  ZL_REF0P, 0, 0 },
 	{ "INT_PPS_OUT",  ZL_REF0N, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
-	{ "SYNCE0_DP",	  ZL_REF1P, DPLL_PIN_TYPE_MUX, 0 },
-	{ "SYNCE0_DN",	  ZL_REF1N, DPLL_PIN_TYPE_MUX, 0 },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "SYNCE0_DP",	  ZL_REF1P, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "SYNCE0_DN",	  ZL_REF1N, DPLL_PIN_TYPE_MUX,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "NONE",	  ZL_REF2P, 0, 0 },
 	{ "NONE",	  ZL_REF2N, 0, 0 },
 	{ "EXT_CLK_SYNC", ZL_REF3P, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "NONE",	  ZL_REF3N, 0, 0 },
 	{ "EXT_PPS_OUT",  ZL_REF4P, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "OCXO",	  ZL_REF4N, DPLL_PIN_TYPE_INT_OSCILLATOR, 0 },
 };
 
 static const struct ice_cgu_pin_desc ice_e823_zl_cgu_outputs[] = {
 	{ "PPS-SMA1",	   ZL_OUT0, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_1_hz), ice_cgu_pin_freq_1_hz },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "10MHZ-SMA2",	   ZL_OUT1, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_10_mhz), ice_cgu_pin_freq_10_mhz },
-	{ "PHY-CLK",	   ZL_OUT2, DPLL_PIN_TYPE_SYNCE_ETH_PORT, 0 },
-	{ "1588-TIME_REF", ZL_OUT3, DPLL_PIN_TYPE_SYNCE_ETH_PORT, 0 },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "PHY-CLK",	   ZL_OUT2, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
+	{ "1588-TIME_REF", ZL_OUT3, DPLL_PIN_TYPE_SYNCE_ETH_PORT,
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "CPK-TIME_SYNC", ZL_OUT4, DPLL_PIN_TYPE_EXT,
-		ARRAY_SIZE(ice_cgu_pin_freq_common), ice_cgu_pin_freq_common },
+		ARRAY_SIZE(ice_cgu_pin_freq_range), ice_cgu_pin_freq_range },
 	{ "NONE",	   ZL_OUT5, 0, 0 },
 };
 
-- 
2.52.0


^ permalink raw reply related

* [PATCH 5/5] ice: use element-by-element comparison for DCB config changes
From: Aleksandr Loktionov @ 2026-04-30 12:26 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev
In-Reply-To: <20260430122602.126722-1-aleksandr.loktionov@intel.com>

Comparing two ice_dcbx_cfg structs with memcmp() is unreliable on
non-packed structs due to uninitialised padding bytes.  The HW DCB
path already has ice_dcb_need_recfg() that compares fields
individually; export it and use it in the SW DCB netlink setters
(setets, setpfc, setapp, cee_set_all) instead of the unsafe memcmp.

Remove the now-redundant memcmp check from ice_pf_dcb_cfg() so that
function always attempts the HW reconfiguration when called.

Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 13 ++-------
 drivers/net/ethernet/intel/ice/ice_dcb_lib.h |  2 ++
 drivers/net/ethernet/intel/ice/ice_dcb_nl.c  | 30 ++++++++++++++++++--
 3 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
index bd77f1c..2e85fae 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
@@ -353,15 +353,11 @@ int ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked)
 	struct ice_dcbx_cfg *old_cfg, *curr_cfg;
 	struct device *dev = ice_pf_to_dev(pf);
 	struct iidc_rdma_event *event;
-	int ret = ICE_DCB_NO_HW_CHG;
 	struct ice_vsi *pf_vsi;
+	int ret;
 
 	curr_cfg = &pf->hw.port_info->qos_cfg.local_dcbx_cfg;
 
-	/* FW does not care if change happened */
-	if (!pf->hw.port_info->qos_cfg.is_sw_lldp)
-		ret = ICE_DCB_HW_CHG_RST;
-
 	/* Enable DCB tagging only when more than one TC */
 	if (ice_dcb_get_num_tc(new_cfg) > 1) {
 		dev_dbg(dev, "DCB tagging enabled (num TC > 1)\n");
@@ -377,11 +373,6 @@ int ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked)
 		clear_bit(ICE_FLAG_DCB_ENA, pf->flags);
 	}
 
-	if (!memcmp(new_cfg, curr_cfg, sizeof(*new_cfg))) {
-		dev_dbg(dev, "No change in DCB config required\n");
-		return ret;
-	}
-
 	if (ice_dcb_bwchk(pf, new_cfg))
 		return -EINVAL;
 
@@ -481,7 +472,7 @@ static void ice_cfg_etsrec_defaults(struct ice_port_info *pi)
  * @old_cfg: current DCB config
  * @new_cfg: new DCB config
  */
-static bool
+bool
 ice_dcb_need_recfg(struct ice_pf *pf, struct ice_dcbx_cfg *old_cfg,
 		   struct ice_dcbx_cfg *new_cfg)
 {
diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.h b/drivers/net/ethernet/intel/ice/ice_dcb_lib.h
index da9ba81..a7eaa2f9 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.h
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.h
@@ -20,6 +20,8 @@ u8 ice_dcb_get_num_tc(struct ice_dcbx_cfg *dcbcfg);
 void ice_vsi_set_dcb_tc_cfg(struct ice_vsi *vsi);
 bool ice_is_pfc_causing_hung_q(struct ice_pf *pf, unsigned int txqueue);
 u8 ice_dcb_get_tc(struct ice_vsi *vsi, int queue_index);
+bool ice_dcb_need_recfg(struct ice_pf *pf, struct ice_dcbx_cfg *old_cfg,
+			struct ice_dcbx_cfg *new_cfg);
 int
 ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked);
 int ice_dcb_bwchk(struct ice_pf *pf, struct ice_dcbx_cfg *dcbcfg);
diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_nl.c b/drivers/net/ethernet/intel/ice/ice_dcb_nl.c
index a10c1c8d..13a52c1 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_nl.c
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_nl.c
@@ -108,11 +108,17 @@ static int ice_dcbnl_setets(struct net_device *netdev, struct ieee_ets *ets)
 	if (!bwrec)
 		new_cfg->etsrec.tcbwtable[0] = 100;
 
+	if (!ice_dcb_need_recfg(pf, &pf->hw.port_info->qos_cfg.local_dcbx_cfg,
+				new_cfg)) {
+		err = ICE_DCB_NO_HW_CHG;
+		goto ets_out;
+	}
+
 	err = ice_pf_dcb_cfg(pf, new_cfg, true);
 	/* return of zero indicates new cfg applied */
-	if (err == ICE_DCB_HW_CHG_RST)
+	if (!err)
 		ice_dcbnl_devreset(netdev);
-	if (err == ICE_DCB_NO_HW_CHG)
+	else if (err == ICE_DCB_NO_HW_CHG)
 		err = ICE_DCB_HW_CHG_RST;
 
 ets_out:
@@ -287,11 +293,18 @@ static int ice_dcbnl_setpfc(struct net_device *netdev, struct ieee_pfc *pfc)
 
 	new_cfg->pfc.pfcena = pfc->pfc_en;
 
+	if (!ice_dcb_need_recfg(pf, &pf->hw.port_info->qos_cfg.local_dcbx_cfg,
+				new_cfg)) {
+		err = ICE_DCB_NO_HW_CHG;
+		goto pfc_out;
+	}
+
 	err = ice_pf_dcb_cfg(pf, new_cfg, true);
 	if (err == ICE_DCB_HW_CHG_RST)
 		ice_dcbnl_devreset(netdev);
 	if (err == ICE_DCB_NO_HW_CHG)
 		err = ICE_DCB_HW_CHG_RST;
+pfc_out:
 	mutex_unlock(&pf->tc_mutex);
 	return err;
 }
@@ -845,6 +858,12 @@ static int ice_dcbnl_setapp(struct net_device *netdev, struct dcb_app *app)
 	new_cfg->dscp_map[app->protocol] = app->priority;
 	new_cfg->app[new_cfg->numapps++] = new_app;
 
+	if (!ice_dcb_need_recfg(pf, &pf->hw.port_info->qos_cfg.local_dcbx_cfg,
+				new_cfg)) {
+		ret = ICE_DCB_NO_HW_CHG;
+		goto setapp_out;
+	}
+
 	ret = ice_pf_dcb_cfg(pf, new_cfg, true);
 	/* return of zero indicates new cfg applied */
 	if (ret == ICE_DCB_HW_CHG_RST)
@@ -991,8 +1010,15 @@ static u8 ice_dcbnl_cee_set_all(struct net_device *netdev)
 
 	mutex_lock(&pf->tc_mutex);
 
+	if (!ice_dcb_need_recfg(pf, &pf->hw.port_info->qos_cfg.local_dcbx_cfg,
+				new_cfg)) {
+		err = ICE_DCB_NO_HW_CHG;
+		goto out;
+	}
+
 	err = ice_pf_dcb_cfg(pf, new_cfg, true);
 
+out:
 	mutex_unlock(&pf->tc_mutex);
 	return (err != ICE_DCB_HW_CHG_RST) ? ICE_DCB_NO_HW_CHG : err;
 }
-- 
2.52.0


^ permalink raw reply related

* [PATCH net] vsock/virtio: fix potential unbounded skb queue
From: Eric Dumazet @ 2026-04-30 12:26 UTC (permalink / raw)
  To: David S . Miller, Jakub Kicinski, Paolo Abeni
  Cc: Simon Horman, netdev, eric.dumazet, Eric Dumazet, Arseniy Krasnov,
	Stefan Hajnoczi, Stefano Garzarella, Michael S. Tsirkin,
	Jason Wang, Xuan Zhuo, Eugenio Pérez, kvm, virtualization

virtio_transport_inc_rx_pkt() checks vvs->rx_bytes + len > vvs->buf_alloc.

virtio_transport_recv_enqueue() skips coalescing for packets
with VIRTIO_VSOCK_SEQ_EOM.

If fed with packets with len == 0 and VIRTIO_VSOCK_SEQ_EOM,
a very large number of packets can be queued
because vvs->rx_bytes stays at 0.

Fix this by estimating the skb metadata size:

	(Number of skbs in the queue) * SKB_TRUESIZE(0)

Fixes: 077706165717 ("virtio/vsock: don't use skbuff state to account credit")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Stefano Garzarella <sgarzare@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: "Eugenio Pérez" <eperezma@redhat.com>
Cc: kvm@vger.kernel.org
Cc: virtualization@lists.linux.dev
---
 net/vmw_vsock/virtio_transport_common.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index 416d533f493d7b07e9c77c43f741d28cfcd0953e..9b8014516f4fb1130ae184635fbba4dfee58bd64 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -447,7 +447,9 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
 static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs,
 					u32 len)
 {
-	if (vvs->buf_used + len > vvs->buf_alloc)
+	u64 skb_overhead = (skb_queue_len(&vvs->rx_queue) + 1) * SKB_TRUESIZE(0);
+
+	if (skb_overhead + vvs->buf_used + len > vvs->buf_alloc)
 		return false;
 
 	vvs->rx_bytes += len;
-- 
2.54.0.545.g6539524ca2-goog


^ permalink raw reply related

* [PATCH linux-firmware v1] ice: add DDP COMMS triple VLAN package 1.3.2.0
From: Aleksandr Loktionov @ 2026-04-30 12:30 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev, Mark Craig

Add ice_comms_triple_vlan-1.3.2.0.pkg, a variant of the ICE COMMS DDP
package that enables transparent passthrough of a third inner VLAN tag
to a SR-IOV Virtual Function.

The standard COMMS DDP package operates in Double VLAN Mode (DVM),
which gives the hardware two VLAN tag slots: one consumed by the outer
port-VLAN (used for DCB traffic classification) and one visible to the
VF. Any third tag present in the frame is stripped before delivery. This
package extends the classification pipeline so that the third tag is
treated as opaque payload and forwarded intact to the VF.

The outermost tag remains subject to DVM constraints because it drives
DCB scheduling; only 0x8100 and 0x88a8 are supported as the outermost
TPID. The middle and innermost tags, including 0x88e7 (ETH_P_8021AH),
are forwarded transparently without modification. Frames with 0x88e7 as
the outermost tag are out of scope as they conflict with DCB
classification.

Testing hints:
  # Install ice_comms_triple_vlan package - refer to Dynamic Device
  # Personalization section in:
  # Documentation/networking/device_drivers/ethernet/intel/ice.rst
  # in kernel tree.
  modprobe ice
  echo 1 > /sys/class/net/$PF/device/sriov_numvfs
  ip link set dev $PF vf 0 trust on spoofchk off
  ip link set $VF promisc on
  ethtool -K $PF rx-vlan-offload off tx-vlan-offload off
  ethtool -K $VF rx-vlan-offload off tx-vlan-offload off
  # Create triple VLAN stack on link partner and ping through VF:
  ip link add link $LP type vlan proto 802.1Q id 100
  ip link add link $LP.100 type vlan proto 802.1ad id 200
  ip link add link $LP.100.200 type vlan proto 802.1Q id 300
  ip addr add 192.168.1.1/24 dev $LP.100.200
  ip link set $LP.100 up; ip link set $LP.100.200 up; ip link set $LP.100.200.300 up
  # On the VF side create matching stack and verify ping succeeds:
  ip link add link $VF type vlan proto 802.1Q id 200
  ip link add link $VF.200 type vlan proto 802.1Q id 300
  ip addr add 192.168.1.2/24 dev $VF.200.300
  ip link set $VF.200 up; ip link set $VF.200.300 up
  ping -c 3 192.168.1.1

Signed-off-by: Mark Craig <mark.craig@intel.com>
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 .../ice_comms_triple_vlan-1.3.2.0.pkg         | Bin 0 -> 1442692 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 intel/ice/ddp-comms/ice_comms_triple_vlan-1.3.2.0.pkg

diff --git a/intel/ice/ddp-comms/ice_comms_triple_vlan-1.3.2.0.pkg b/intel/ice/ddp-comms/ice_comms_triple_vlan-1.3.2.0.pkg
new file mode 100644
index 0000000000000000000000000000000000000000..2eda04565817ff94e74642adff31ffc17d638b97
GIT binary patch
literal 1442692
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

literal 0
HcmV?d00001

-- 
2.52.0


^ permalink raw reply

* Re: [PATCH net-next 5/5] selftests: net: add veth BQL stress test
From: Jesper Dangaard Brouer @ 2026-04-30 12:31 UTC (permalink / raw)
  To: Simon Schippers, Jonas Köppeler
  Cc: andrew+netdev, davem, edumazet, horms, jhs, jiri, kernel-team,
	kuba, netdev, pabeni
In-Reply-To: <7bc8edc9-1b46-471a-9a6e-cd2c27aebcfc@tu-dortmund.de>



On 30/04/2026 11.45, Simon Schippers wrote:
> On 4/30/26 11:17, Jonas Köppeler wrote:
>> On 3/28/26 4:19 PM, Simon Schippers wrote:
>>> Hi, thanks for your work! I am really interested in this patchset.
>>>
>>> I am planning to submit a similar patch set (see [1]) for the tun/tap
>>> driver, where I am currently implementing qdisc backpressure similar
>>> to that used in veth.
>>>
>>> Can you run pktgen [2] to see if there is a regression?
>>> I think that there might be a slowdown due to BQL not choosing a big
>>> enough queue size.
>> I ran some tests using pktgen by replacing the trafficgen from the
>> selftest with samples/pktgen/pktgen_sample01_simple.sh (Patch v3)
>> and used --nrules 0. In general the throughput is quite similar:
>>
>> BQL disabled (using --bql-disable):
>>    2378694pps 1141Mb/sec (1141773120bps) errors: 0
>>    2400898pps 1152Mb/sec (1152431040bps) errors: 0
>>    2358125pps 1131Mb/sec (1131900000bps) errors: 0
>>    2402034pps 1152Mb/sec (1152976320bps) errors: 0
>>    2362061pps 1133Mb/sec (1133789280bps) errors: 0
>>    2416301pps 1159Mb/sec (1159824480bps) errors: 0
>>    2398496pps 1151Mb/sec (1151278080bps) errors: 0
>>    2415200pps 1159Mb/sec (1159296000bps) errors: 0
>>    2375921pps 1140Mb/sec (1140442080bps) errors: 0
>>    2427419pps 1165Mb/sec (1165161120bps) errors: 0
>>    2382461pps 1143Mb/sec (1143581280bps) errors: 0
>>
>>    mean: 2392510pps
>>
>> BQL enabled:
>>    2159545pps 1036Mb/sec (1036581600bps) errors: 0
>>    2321899pps 1114Mb/sec (1114511520bps) errors: 0
>>    2477853pps 1189Mb/sec (1189369440bps) errors: 0
>>    2447857pps 1174Mb/sec (1174971360bps) errors: 0
>>    2400284pps 1152Mb/sec (1152136320bps) errors: 0
>>    2442841pps 1172Mb/sec (1172563680bps) errors: 0
>>    2442540pps 1172Mb/sec (1172419200bps) errors: 0
>>    2410585pps 1157Mb/sec (1157080800bps) errors: 0
>>    2395902pps 1150Mb/sec (1150032960bps) errors: 0
>>    2393260pps 1148Mb/sec (1148764800bps) errors: 0
>>    2401959pps 1152Mb/sec (1152940320bps) errors: 0
>>
>>    mean: 2390411pps
>>
>> BQL enabled is ~2099pps (~0.09%) lower than BQL disabled.
> 
> Sounds great!
> 
> One more thing:
> Could you check what BQL limit settles during the test run using
> something like:
> 
> watch -n 0.1 'cat /sys/class/net/XXXXX/queues/tx-0/byte_queue_limits/limit'

FYI: The selftest already tracks BQL "limit" and "inflight".
- Jonas can just report those BQL inflight logs

+print_periodic_stats() {
+    local elapsed="$1"
+
+    # BQL stats and watchdog counter
+    WD_CNT=$(cat /sys/class/net/${VETH_A}/queues/tx-0/tx_timeout \
+        2>/dev/null) || WD_CNT="?"
+    if [ -n "$BQL_DIR" ] && [ -d "$BQL_DIR" ]; then
+        INFLIGHT=$(cat "$BQL_DIR/inflight" 2>/dev/null || echo "?")
+        LIMIT=$(cat "$BQL_DIR/limit" 2>/dev/null || echo "?")
+        echo "  [${elapsed}s] BQL inflight=${INFLIGHT} limit=${LIMIT}" \
+            "watchdog=${WD_CNT}"
+    else
+        echo "  [${elapsed}s] watchdog=${WD_CNT} (no BQL sysfs)"
+    fi


> I guess it will just choose the ptr_ring size as limit in this case,
> but it would be nice if you could briefly verify this :)
> 
> Thanks!
> 
>>
>>> Thanks!
>>>
>>> [1] Link:https://lore.kernel.org/all/20260312130639.138988-1-simon.schippers@tu-dortmund.de/
>>> [2] Link:https://www.kernel.org/doc/html/latest/networking/pktgen.html


^ permalink raw reply

* [PATCH net] ixgbe: fix X550 AQ PHY identification returning ixgbe_phy_unknown
From: Aleksandr Loktionov @ 2026-04-30 12:31 UTC (permalink / raw)
  To: intel-wired-lan, anthony.l.nguyen, aleksandr.loktionov; +Cc: netdev

ixgbe_get_phy_id() reads the two MII_PHYSID registers and combines them
into hw->phy.id with the lower 4 revision bits masked out by
IXGBE_PHY_REVISION_MASK (0xFFFFFFF0).

Commit 5f1c3589b0f0 ("ixgbe: Correct X550 phy ID") replaced
X550_PHY_ID (0x01540220) with X550_PHY_ID2 (0x01540223) and
X550_PHY_ID3 (0x01540221).  These are the raw values read directly off
hardware, but after revision-bit masking both reduce to 0x01540220.
The switch cases in ixgbe_get_phy_type_from_id() therefore never match,
and X550 AQ PHY devices always fall through to ixgbe_phy_unknown.  A
wrong PHY type means the wrong ops vector is selected, resulting in
failed PHY initialization and no link.

Restore X550_PHY_ID (0x01540220) as the match value -- the
revision-stripped ID that the driver actually stores.  Keep X550_PHY_ID2
and X550_PHY_ID3 as documentation of the hardware-reported values.

Fixes: 5f1c3589b0f0 ("ixgbe: Correct X550 phy ID")
Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c  | 3 +--
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 1 +
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
index ab733e7..ca98dad 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
@@ -364,8 +364,7 @@ static enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
 	case TN1010_PHY_ID:
 		phy_type = ixgbe_phy_tn;
 		break;
-	case X550_PHY_ID2:
-	case X550_PHY_ID3:
+	case X550_PHY_ID:
 	case X540_PHY_ID:
 		phy_type = ixgbe_phy_aq;
 		break;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
index 61f2ef6..0d47622 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
@@ -1412,6 +1412,7 @@ struct ixgbe_nvm_version {
 #define TN1010_PHY_ID    0x00A19410
 #define TNX_FW_REV       0xB
 #define X540_PHY_ID      0x01540200
+#define X550_PHY_ID      0x01540220
 #define X550_PHY_ID2	0x01540223
 #define X550_PHY_ID3	0x01540221
 #define X557_PHY_ID      0x01540240
-- 
2.52.0


^ permalink raw reply related

* Re: [PATCH net] ipvs: fix shift-out-of-bounds in ip_vs_rht_desired_size
From: Simon Horman @ 2026-04-30 12:39 UTC (permalink / raw)
  To: ja
  Cc: 'Simon Horman', horms, pablo, fw, lvs-devel,
	netfilter-devel, netdev
In-Reply-To: <20260427234014.86256-1-ja@ssi.bg>

From: 'Simon Horman' <horms@kernel.org>

This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
Full review at: https://sashiko.dev
---
ipvs: fix shift-out-of-bounds in ip_vs_rht_desired_size

This commit addresses a shift-out-of-bounds issue when roundup_pow_of_two()
is called with 0 in ip_vs_rht_desired_size. It updates the assignment to fall
back to 1 if n is 0.

> diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
> index f5b7a2047291..ea450944465f 100644
> --- a/net/netfilter/ipvs/ip_vs_core.c
> +++ b/net/netfilter/ipvs/ip_vs_core.c
> @@ -237,7 +237,7 @@ int ip_vs_rht_desired_size(struct netns_ipvs *ipvs, struct ip_vs_rht *t, int n,
>  {
>  	if (!t)
>  		return 1 << min_bits;
> -	n = roundup_pow_of_two(n);
> +	n = n ? roundup_pow_of_two(n) : 1;

The parameter n is a signed int. If n happens to be negative, it will evaluate
to true and be passed to roundup_pow_of_two().

Because roundup_pow_of_two() casts the input to unsigned long, a negative
value like -1 becomes ULONG_MAX. This results in a shift exponent of 64,
triggering a shift-out-of-bounds regression. Would it be safer to check
for n <= 0 instead?

Additionally, if n exceeds 1.07 billion (1 << 30) on systems with large
amounts of RAM, roundup_pow_of_two(n) evaluates to 1UL << 31. Since n is
a 32-bit signed int, assigning 1UL << 31 back to n overflows and results
in a negative number.

Since subsequent bounds checks use signed comparisons:

>  	if (lfactor < 0) {
>  		int factor = min(-lfactor, max_bits);
>  
>  		n = min(n, 1 << (max_bits - factor));

These checks will fail to constrain the size correctly.

[ ... ]

>  	/* Shrink but keep it n * 2 to prevent frequent resizing */
>  	return clamp(n << 1, 1 << min_bits, 1 << max_bits);
>  }

Eventually, the function returns clamp(n << 1, 1 << min_bits, 1 << max_bits).
Shifting a negative number causes undefined behavior, and the clamp operation
will force the hash table to its absolute minimum size.

Could this cause millions of connections to be placed into a minimally sized
hash table, causing severe collisions during RCU hash lookups?

^ permalink raw reply

* [PATCH 0/3] Add Reorder Completion Queue (RCQ) support
From: Abhijit Gangurde @ 2026-04-30 12:39 UTC (permalink / raw)
  To: jgg, leon, brett.creeley, andrew+netdev, davem, edumazet, kuba,
	pabeni
  Cc: allen.hubbe, nikhil.agarwal, linux-rdma, netdev, linux-kernel,
	Abhijit Gangurde

This series adds support for the Reorder Completion Queue (RCQ) feature in the
ionic RDMA driver, enabling userspace to create and configure QPs.

Patch 1 extends the net/ionic firmware identity structure to expose the
default_qp_transport_mode and rcq_sign_bit fields from the RDMA LIF identity.

Patch 2 plumbs these new firmware capabilities through the RDMA driver's LIF
configuration and exposes them to userspace via the ucontext response,
so that rdma-core can discover device support at context allocation time.

Patch 3 allows userspace to select the QP transport mode during QP creation.
The transport mode maps to the corresponding firmware QP type, and the
RCQ path count is forwarded to firmware during QP modify.

Together, these patches provide the kernel-side plumbing needed for the
rdma-core ionic provider to make use of the RCQ feature on capable hardware.
PR: https://github.com/linux-rdma/rdma-core/pull/1733


Abhijit Gangurde (3):
  net: ionic: Fetch default QP transport mode and RCQ capabilities from
    firmware
  RDMA/ionic: Expose QP transport mode and RCQ sign bit to userspace
  RDMA/ionic: Support QP transport mode selection in create and modify

 .../infiniband/hw/ionic/ionic_controlpath.c   | 20 +++++++++++++------
 drivers/infiniband/hw/ionic/ionic_fw.h        | 18 ++++++++++++++---
 drivers/infiniband/hw/ionic/ionic_ibdev.h     |  1 +
 drivers/infiniband/hw/ionic/ionic_lif_cfg.c   |  2 ++
 drivers/infiniband/hw/ionic/ionic_lif_cfg.h   |  2 ++
 .../net/ethernet/pensando/ionic/ionic_if.h    | 12 ++++++++++-
 include/uapi/rdma/ionic-abi.h                 |  9 +++++++--
 7 files changed, 52 insertions(+), 12 deletions(-)

-- 
2.43.0


^ permalink raw reply

* [PATCH 1/3] net: ionic: Fetch default QP transport mode and RCQ capabilities from firmware
From: Abhijit Gangurde @ 2026-04-30 12:39 UTC (permalink / raw)
  To: jgg, leon, brett.creeley, andrew+netdev, davem, edumazet, kuba,
	pabeni
  Cc: allen.hubbe, nikhil.agarwal, linux-rdma, netdev, linux-kernel,
	Abhijit Gangurde
In-Reply-To: <20260430123931.3256130-1-abhijit.gangurde@amd.com>

Read the default_qp_transport_mode and rcq_sign_bit from the RDMA
LIF identity reported by firmware.

Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
---
 drivers/net/ethernet/pensando/ionic/ionic_if.h | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/pensando/ionic/ionic_if.h b/drivers/net/ethernet/pensando/ionic/ionic_if.h
index 23d6e2b4791e..f6c2ca335dfb 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_if.h
+++ b/drivers/net/ethernet/pensando/ionic/ionic_if.h
@@ -553,6 +553,11 @@ enum ionic_lif_rdma_cap_stats {
  *	@rdma.eq_qtype:        RDMA Event Qtype
  *	@rdma.stats_type:      Supported statistics type
  *	                       (enum ionic_lif_rdma_cap_stats)
+ *	@rdma.rsvd:            Reserved byte
+ *	@rdma.rcq_sign_bit:    RCQ sign bit
+ *	@rdma.srq_qtype:       RDMA Shared Receive Qtype
+ *	@rdma.rsvd2:           Reserved byte
+ *	@rdma.default_qp_transport_mode: Default QP transport mode
  *	@rdma.rsvd1:           Reserved byte(s)
  * @words:               word access to struct contents
  */
@@ -598,7 +603,12 @@ union ionic_lif_identity {
 			struct ionic_lif_logical_qtype cq_qtype;
 			struct ionic_lif_logical_qtype eq_qtype;
 			__le16 stats_type;
-			u8 rsvd1[162];
+			u8 rsvd;
+			u8 rcq_sign_bit;
+			struct ionic_lif_logical_qtype srq_qtype;
+			u8 rsvd2;
+			u8 default_qp_transport_mode;
+			u8 rsvd1[146];
 		} __packed rdma;
 	} __packed;
 	__le32 words[478];
-- 
2.43.0


^ permalink raw reply related

* [PATCH 2/3] RDMA/ionic: Expose QP transport mode and RCQ sign bit to userspace
From: Abhijit Gangurde @ 2026-04-30 12:39 UTC (permalink / raw)
  To: jgg, leon, brett.creeley, andrew+netdev, davem, edumazet, kuba,
	pabeni
  Cc: allen.hubbe, nikhil.agarwal, linux-rdma, netdev, linux-kernel,
	Abhijit Gangurde
In-Reply-To: <20260430123931.3256130-1-abhijit.gangurde@amd.com>

Read the default_qp_transport_mode and rcq_sign_bit fields from the
RDMA LIF identity reported by firmware, store them in the driver's
lif_cfg, and expose them to userspace via the ucontext response.

The default_qp_transport_mode indicates which QP transport type the device
uses. The rcq_sign_bit indicates the Reorder Completion Queue
(RCQ) sign bit capability.

Co-developed-by: Allen Hubbe <allen.hubbe@amd.com>
Signed-off-by: Allen Hubbe <allen.hubbe@amd.com>
Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
---
 drivers/infiniband/hw/ionic/ionic_controlpath.c | 4 +++-
 drivers/infiniband/hw/ionic/ionic_lif_cfg.c     | 2 ++
 drivers/infiniband/hw/ionic/ionic_lif_cfg.h     | 2 ++
 include/uapi/rdma/ionic-abi.h                   | 4 +++-
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/hw/ionic/ionic_controlpath.c b/drivers/infiniband/hw/ionic/ionic_controlpath.c
index 7051a81cca94..6bb645713d6b 100644
--- a/drivers/infiniband/hw/ionic/ionic_controlpath.c
+++ b/drivers/infiniband/hw/ionic/ionic_controlpath.c
@@ -408,13 +408,15 @@ int ionic_alloc_ucontext(struct ib_ucontext *ibctx, struct ib_udata *udata)
 
 	resp.udma_count = dev->lif_cfg.udma_count;
 	resp.expdb_mask = dev->lif_cfg.expdb_mask;
+	resp.rcq_sign_bit = dev->lif_cfg.rcq_sign_bit;
+	resp.default_qp_transport_mode = dev->lif_cfg.default_qp_transport_mode;
 
 	if (dev->lif_cfg.sq_expdb)
 		resp.expdb_qtypes |= IONIC_EXPDB_SQ;
 	if (dev->lif_cfg.rq_expdb)
 		resp.expdb_qtypes |= IONIC_EXPDB_RQ;
 
-	rc = ib_copy_to_udata(udata, &resp, sizeof(resp));
+	rc = ib_respond_udata(udata, resp);
 	if (rc)
 		goto err_resp;
 
diff --git a/drivers/infiniband/hw/ionic/ionic_lif_cfg.c b/drivers/infiniband/hw/ionic/ionic_lif_cfg.c
index f3cd281c3a2f..2a27dd22e4c4 100644
--- a/drivers/infiniband/hw/ionic/ionic_lif_cfg.c
+++ b/drivers/infiniband/hw/ionic/ionic_lif_cfg.c
@@ -84,6 +84,8 @@ void ionic_fill_lif_cfg(struct ionic_lif *lif, struct ionic_lif_cfg *cfg)
 	cfg->udma_count = 2;
 
 	cfg->max_stride = ident->rdma.max_stride;
+	cfg->rcq_sign_bit = ident->rdma.rcq_sign_bit;
+	cfg->default_qp_transport_mode = ident->rdma.default_qp_transport_mode;
 	cfg->expdb_mask = ionic_get_expdb(lif);
 
 	cfg->sq_expdb =
diff --git a/drivers/infiniband/hw/ionic/ionic_lif_cfg.h b/drivers/infiniband/hw/ionic/ionic_lif_cfg.h
index 20853429f623..abf169d2727a 100644
--- a/drivers/infiniband/hw/ionic/ionic_lif_cfg.h
+++ b/drivers/infiniband/hw/ionic/ionic_lif_cfg.h
@@ -56,6 +56,8 @@ struct ionic_lif_cfg {
 	bool sq_expdb;
 	bool rq_expdb;
 	u8 expdb_mask;
+	u8 rcq_sign_bit;
+	u8 default_qp_transport_mode;
 };
 
 void ionic_fill_lif_cfg(struct ionic_lif *lif, struct ionic_lif_cfg *cfg);
diff --git a/include/uapi/rdma/ionic-abi.h b/include/uapi/rdma/ionic-abi.h
index 7b589d3e9728..fb0d13094c12 100644
--- a/include/uapi/rdma/ionic-abi.h
+++ b/include/uapi/rdma/ionic-abi.h
@@ -46,8 +46,10 @@ struct ionic_ctx_resp {
 	__u8 udma_count;
 	__u8 expdb_mask;
 	__u8 expdb_qtypes;
+	__u8 rcq_sign_bit;
+	__u8 default_qp_transport_mode;
 
-	__u8 rsvd2[3];
+	__u8 rsvd2;
 };
 
 struct ionic_qdesc {
-- 
2.43.0


^ permalink raw reply related

* [PATCH 3/3] RDMA/ionic: Support QP transport mode selection in create and modify
From: Abhijit Gangurde @ 2026-04-30 12:39 UTC (permalink / raw)
  To: jgg, leon, brett.creeley, andrew+netdev, davem, edumazet, kuba,
	pabeni
  Cc: allen.hubbe, nikhil.agarwal, linux-rdma, netdev, linux-kernel,
	Abhijit Gangurde
In-Reply-To: <20260430123931.3256130-1-abhijit.gangurde@amd.com>

Allow userspace to specify the QP transport mode and number of
reorder completion queue paths during QP creation and modification.

Extend ionic_qp_req with transport_mode, num_rcq_paths, and
ionic_flags fields. The transport mode selects the firmware QP type,
ionic_flags are forwarded in the upper bits of priv_flags during
QP creation, and num_rcq_paths is passed to firmware during QP
modify.

Co-developed-by: Allen Hubbe <allen.hubbe@amd.com>
Signed-off-by: Allen Hubbe <allen.hubbe@amd.com>
Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com>
---
 .../infiniband/hw/ionic/ionic_controlpath.c    | 16 +++++++++++-----
 drivers/infiniband/hw/ionic/ionic_fw.h         | 18 +++++++++++++++---
 drivers/infiniband/hw/ionic/ionic_ibdev.h      |  1 +
 include/uapi/rdma/ionic-abi.h                  |  5 ++++-
 4 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/drivers/infiniband/hw/ionic/ionic_controlpath.c b/drivers/infiniband/hw/ionic/ionic_controlpath.c
index 6bb645713d6b..5a6d4036ea98 100644
--- a/drivers/infiniband/hw/ionic/ionic_controlpath.c
+++ b/drivers/infiniband/hw/ionic/ionic_controlpath.c
@@ -1326,7 +1326,9 @@ static int ionic_create_qp_cmd(struct ionic_ibdev *dev,
 			       struct ionic_qp *qp,
 			       struct ionic_tbl_buf *sq_buf,
 			       struct ionic_tbl_buf *rq_buf,
-			       struct ib_qp_init_attr *attr)
+			       struct ib_qp_init_attr *attr,
+			       u32 ionic_flags,
+			       enum ionic_qp_transport_mode transport_mode)
 {
 	const u16 dbid = ionic_obj_dbid(dev, pd->ibpd.uobject);
 	const u32 flags = to_ionic_qp_flags(0, 0,
@@ -1342,8 +1344,9 @@ static int ionic_create_qp_cmd(struct ionic_ibdev *dev,
 			.len = cpu_to_le16(IONIC_ADMIN_CREATE_QP_IN_V1_LEN),
 			.cmd.create_qp = {
 				.pd_id = cpu_to_le32(pd->pdid),
-				.priv_flags = cpu_to_be32(flags),
-				.type_state = to_ionic_qp_type(attr->qp_type),
+				.priv_flags = cpu_to_be32(flags |
+						(ionic_flags & IONIC_QP_USER_FLAGS_MASK)),
+				.type_state = to_ionic_qp_type(attr->qp_type, transport_mode),
 				.dbid_flags = cpu_to_le16(dbid),
 				.id_ver = cpu_to_le32(qp->qpid),
 			}
@@ -1412,6 +1415,7 @@ static int ionic_modify_qp_cmd(struct ionic_ibdev *dev,
 					  (attr->rnr_retry << 4)),
 				.rnr_timer = attr->min_rnr_timer,
 				.retry_timeout = attr->timeout,
+				.mrc_num_paths = qp->num_rcq_paths,
 				.type_state = state,
 				.id_ver = cpu_to_le32(qp->qpid),
 			}
@@ -2156,7 +2160,7 @@ int ionic_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attr,
 	int rc;
 
 	if (udata) {
-		rc = ib_copy_validate_udata_in(udata, req, rsvd);
+		rc = ib_copy_validate_udata_in(udata, req, ionic_flags);
 		if (rc)
 			return rc;
 	} else {
@@ -2203,6 +2207,7 @@ int ionic_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attr,
 
 	qp->sig_all = attr->sq_sig_type == IB_SIGNAL_ALL_WR;
 	qp->has_ah = attr->qp_type == IB_QPT_RC;
+	qp->num_rcq_paths = req.num_rcq_paths;
 
 	if (qp->has_ah) {
 		qp->hdr = kzalloc_obj(*qp->hdr);
@@ -2239,7 +2244,8 @@ int ionic_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attr,
 	rc = ionic_create_qp_cmd(dev, pd,
 				 to_ionic_vcq_cq(attr->send_cq, qp->udma_idx),
 				 to_ionic_vcq_cq(attr->recv_cq, qp->udma_idx),
-				 qp, &sq_buf, &rq_buf, attr);
+				 qp, &sq_buf, &rq_buf, attr, req.ionic_flags,
+				 req.transport_mode);
 	if (rc)
 		goto err_cmd;
 
diff --git a/drivers/infiniband/hw/ionic/ionic_fw.h b/drivers/infiniband/hw/ionic/ionic_fw.h
index adfbb89d856c..3a31cd9073ca 100644
--- a/drivers/infiniband/hw/ionic/ionic_fw.h
+++ b/drivers/infiniband/hw/ionic/ionic_fw.h
@@ -105,6 +105,8 @@ enum ionic_qp_flags {
 	IONIC_QPF_SQ_CMB		= BIT(13),
 	IONIC_QPF_RQ_CMB		= BIT(14),
 	IONIC_QPF_PRIVILEGED		= BIT(15),
+
+	IONIC_QP_USER_FLAGS_MASK	= GENMASK(31, 16),
 };
 
 static inline int from_ionic_qp_flags(int flags)
@@ -218,6 +220,11 @@ static inline int ionic_to_ib_status(int sts)
 	}
 }
 
+enum ionic_qp_transport_mode {
+	IONIC_QPT_TRANSPORT_ROCE_V2 = BIT(0),
+	IONIC_QPT_TRANSPORT_MRC = BIT(1),
+};
+
 /* admin queue qp type */
 enum ionic_qp_type {
 	IONIC_QPT_RC,
@@ -228,16 +235,21 @@ enum ionic_qp_type {
 	IONIC_QPT_XRC_INI,
 	IONIC_QPT_XRC_TGT,
 	IONIC_QPT_XRC_SRQ,
+	IONIC_QPT_MRC,
 };
 
-static inline int to_ionic_qp_type(enum ib_qp_type type)
+static inline int to_ionic_qp_type(enum ib_qp_type type,
+				   enum ionic_qp_transport_mode tm)
 {
 	switch (type) {
 	case IB_QPT_GSI:
 	case IB_QPT_UD:
 		return IONIC_QPT_UD;
 	case IB_QPT_RC:
-		return IONIC_QPT_RC;
+		if (tm == IONIC_QPT_TRANSPORT_MRC)
+			return IONIC_QPT_MRC;
+		else
+			return IONIC_QPT_RC;
 	case IB_QPT_UC:
 		return IONIC_QPT_UC;
 	case IB_QPT_XRC_INI:
@@ -808,7 +820,7 @@ struct ionic_admin_mod_qp {
 	__le32		ah_id_len;
 	__u8		en_pcp;
 	__u8		ip_dscp;
-	__u8		rsvd2;
+	__u8		mrc_num_paths;
 	__u8		type_state;
 	union {
 		struct {
diff --git a/drivers/infiniband/hw/ionic/ionic_ibdev.h b/drivers/infiniband/hw/ionic/ionic_ibdev.h
index 63828240d659..24a7f93e1f00 100644
--- a/drivers/infiniband/hw/ionic/ionic_ibdev.h
+++ b/drivers/infiniband/hw/ionic/ionic_ibdev.h
@@ -253,6 +253,7 @@ struct ionic_qp {
 	u8			has_sq:1;
 	u8			has_rq:1;
 	u8			sig_all:1;
+	u8			num_rcq_paths;
 
 	struct list_head	qp_list_counter;
 
diff --git a/include/uapi/rdma/ionic-abi.h b/include/uapi/rdma/ionic-abi.h
index fb0d13094c12..bd02e4541d85 100644
--- a/include/uapi/rdma/ionic-abi.h
+++ b/include/uapi/rdma/ionic-abi.h
@@ -85,7 +85,10 @@ struct ionic_qp_req {
 	__u8 sq_cmb;
 	__u8 rq_cmb;
 	__u8 udma_mask;
-	__u8 rsvd[3];
+	__u8 num_rcq_paths;
+	__u8 transport_mode;
+	__u8 rsvd;
+	__u32 ionic_flags;
 };
 
 struct ionic_qp_resp {
-- 
2.43.0


^ permalink raw reply related

* Re: [PATCH net v5] ipv6: Implement limits on extension header parsing
From: Ido Schimmel @ 2026-04-30 12:40 UTC (permalink / raw)
  To: Daniel Borkmann
  Cc: kuba, edumazet, dsahern, tom, willemdebruijn.kernel, pabeni,
	justin.iurman, netdev
In-Reply-To: <20260429154648.809751-1-daniel@iogearbox.net>

On Wed, Apr 29, 2026 at 05:46:48PM +0200, Daniel Borkmann wrote:
> ipv6_{skip_exthdr,find_hdr}() and ip6_{tnl_parse_tlv_enc_lim,
> protocol_deliver_rcu}() iterate over IPv6 extension headers until they
> find a non-extension-header protocol or run out of packet data. The
> loops have no iteration counter, relying solely on the packet length
> to bound them. For a crafted packet with 8-byte extension headers
> filling a 64KB jumbogram, this means a worst case of up to ~8k
> iterations with a skb_header_pointer call each. ipv6_skip_exthdr(),
> for example, is used where it parses the inner quoted packet inside
> an incoming ICMPv6 error:
> 
>   - icmpv6_rcv
>     - checksum validation
>     - case ICMPV6_DEST_UNREACH
>       - icmpv6_notify
>         - pskb_may_pull()       <- pull inner IPv6 header
>         - ipv6_skip_exthdr()    <- iterates here
>         - pskb_may_pull()
>         - ipprot->err_handler() <- sk lookup
> 
> The per-iteration cost of ipv6_skip_exthdr itself is generally
> light, but skb_header_pointer becomes more costly on reassembled
> packets: the first ~1232 bytes of the inner packet are in the skb's
> linear area, but the remaining ~63KB are in the frag_list where
> skb_copy_bits is needed to read data.
> 
> Initially, the idea was to add a configurable limit via a new
> sysctl knob with default 8, in line with knobs from commit
> 47d3d7ac656a ("ipv6: Implement limits on Hop-by-Hop and Destination
> options"), but two reasons eventually argued against it:
> 
> - It adds to UAPI that needs to be maintained forever, and
>   upcoming work is restricting extension header ordering anyway,
>   leaving little reason for another sysctl knob
> - exthdrs_core.c is always built-in even when CONFIG_IPV6=n,
>   where struct net has no .ipv6 member, so the read site would
>   need an ifdef'd fallback to a constant anyway
> 
> Therefore, just use a constant (IP6_MAX_EXT_HDRS_CNT). All four
> extension header walking functions are now bound by this limit.
> 
> Note that the check in ip6_protocol_deliver_rcu() happens right
> before the goto resubmit, such that we don't have to have a test
> for ipv6_ext_hdr() in the fast-path.
> 
> There's an ongoing IETF draft-iurman-6man-eh-occurrences to enforce
> IPv6 extension headers ordering and occurrence. The latter also
> discusses security implications. As per RFC8200 section 4.1, the
> occurrence rules for extension headers provide a practical upper
> bound which is 8. In order to be conservative, let's define
> IP6_MAX_EXT_HDRS_CNT as 12 to leave enough room for quirky setups.
> In the unlikely event that this is still not enough, then we might
> need to reconsider a sysctl.
> 
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>

Reviewed-by: Ido Schimmel <idosch@nvidia.com>

^ permalink raw reply

* [PATCH net-next v2 0/2] mv88e6xxx: SERDES on mv88e6321 letter
From: Fidan Aliyeva @ 2026-04-30 12:49 UTC (permalink / raw)
  To: andrew, olteanv, davem, edumazet, kuba, pabeni, netdev
  Cc: linux-kernel, thomas.eckerman.ext, Fidan Aliyeva

This patch series add code support to be able to use SERDES feature of
mv88e6321 version of Marvel mv88e6xxx series. mv88e6321 has 2 ports to
support high speed SERDES but the support is lacking in the driver.

mv88e6321 version has a similar architecture to mv88e6352 version making it
possible to reuse its pcs functions. That's why the patch series consist of
2 parts:
1. Refactor the serdes functions and pcs_init of mv88e6352 to be more
generic
2. Add the SERDES support for mv88e6321 reusing 6352's pcs functions

The final code has been built on top of net-next tree and tested on
mv88e6321 ethernet device directly by ip ping tests, performance tests and
also verifying the switch's expected register values.

Referred document: 88E6321/88E6320 Functional Specification

Code has been built with allmodconfig and allyesconfig. checkpatch.pl was
also run

---
Changes in v2:
  - Removed 6321-specific pcs_init and made 6352's pcs_init more generic
  as suggested by Andrew Lunn
  - Added the correct mailing list

---
Fidan Aliyeva (2):
  mv88e6xxx: Refactor 6352's serdes functions
  mv88e6xxx: Add SERDES Support for mv88e6321

 drivers/net/dsa/mv88e6xxx/chip.c     |  8 +++
 drivers/net/dsa/mv88e6xxx/pcs-6352.c | 12 ++--
 drivers/net/dsa/mv88e6xxx/serdes.c   | 87 ++++++++++++++++++++++------
 drivers/net/dsa/mv88e6xxx/serdes.h   |  5 ++
 4 files changed, 86 insertions(+), 26 deletions(-)

--
2.36.0


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox