Add support for Microchip LAN969x
Subsystems (16)
v5 cover Add support for Microchip LAN969x
This series adds support for the Microchip LAN969x switch SoC family.
Series is a bit long since after discussions in previous versions, it was recommended[1][2] to add SoC specific compatibles for device nodes so it includes the required bindings updates.
[1] https://lore.kernel.org/all/20251203-splendor-cubbyhole-eda2d6982b46@spud/
[2] https://lore.kernel.org/all/[email protected]/
[3] https://lore.kernel.org/all/20251203-duly-leotard-86b83bd840c6@spud/
[4] https://lore.kernel.org/all/[email protected]/
Changes in v5:
* Picked Acked-by and Reviewed-by tags
* Change clock header license to match the DTSI one
* Alphabetize EV23X71A pin nodes
* Remove the requirment for all ethernet-port nodes to have phys property as when RGMII is used there is no SERDES being used
* Drop phys from RGMII port on EV23X71A
* Drop USB, DMA, MIIM, SPI and I2C bindings as those were already picked
Changes in v4:
* Pick Acked-by from Andi for I2C bindings
* Move clock indexes from dt-bindings into a DTS header as suggested by Krzysztof[4]
Changes in v3:
* Pick Acked-by from Conor
* Drop HWMON binding as it was picked into hwmon already
* Document EV23X71A into AT91 binding
* Drop SparX-5 and AT91 bindings merge
* Apply remark from Conor on DMA binding regarding merging cases
Changes in v2:
* Change LAN969x wildcards to LAN9691 in patches
* Split SoC DTSI and evaluation board patches
* Add the suggested binding changes required for SoC specific compatibles
* Merge SparX-5 and AT91 bindings as suggested[3]
Robert Marko (11):
dt-bindings: mfd: atmel,sama5d2-flexcom: add microchip,lan9691-flexcom
dt-bindings: serial: atmel,at91-usart: add microchip,lan9691-usart
dt-bindings: rng: atmel,at91-trng: add microchip,lan9691-trng
dt-bindings: crypto: atmel,at91sam9g46-aes: add microchip,lan9691-aes
dt-bindings: crypto: atmel,at91sam9g46-sha: add microchip,lan9691-sha
dt-bindings: pinctrl: pinctrl-microchip-sgpio: add LAN969x
arm64: dts: microchip: add LAN969x clock header file
arm64: dts: microchip: add LAN969x support
dt-bindings: arm: AT91: document EV23X71A board
dt-bindings: net: sparx5: do not require phys when RGMII is used
arm64: dts: microchip: add EV23X71A board
.../devicetree/bindings/arm/atmel-at91.yaml | 6 + .../crypto/atmel,at91sam9g46-aes.yaml | 1 + .../crypto/atmel,at91sam9g46-sha.yaml | 1 + .../bindings/mfd/atmel,sama5d2-flexcom.yaml | 1 + .../bindings/net/microchip,sparx5-switch.yaml | 15 +- .../pinctrl/microchip,sparx5-sgpio.yaml | 20 +- .../bindings/rng/atmel,at91-trng.yaml | 1 + .../bindings/serial/atmel,at91-usart.yaml | 1 + arch/arm64/boot/dts/microchip/Makefile | 1 + arch/arm64/boot/dts/microchip/clk-lan9691.h | 24 + arch/arm64/boot/dts/microchip/lan9691.dtsi | 488 +++++++++++ .../boot/dts/microchip/lan9696-ev23x71a.dts | 756 ++++++++++++++++++ 12 files changed, 1309 insertions(+), 6 deletions(-) create mode 100644 arch/arm64/boot/dts/microchip/clk-lan9691.h create mode 100644 arch/arm64/boot/dts/microchip/lan9691.dtsi create mode 100644 arch/arm64/boot/dts/microchip/lan9696-ev23x71a.dts
Signature · 1 line
2.52.0
PATCH v5 1/11 dt-bindings: mfd: atmel,sama5d2-flexcom: add microchip,lan9691-flexcom
Add binding documentation for Microchip LAN969x.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v3:
* Pick Acked-by from Conor
Documentation/devicetree/bindings/mfd/atmel,sama5d2-flexcom.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/mfd/atmel,sama5d2-flexcom.yaml +1 -0
@@ -20,6 +20,7 @@ properties: - const: atmel,sama5d2-flexcom - items: - enum: + - microchip,lan9691-flexcom - microchip,sam9x7-flexcom - microchip,sama7d65-flexcom - microchip,sama7g5-flexcom
Signature · 1 line
2.52.0
PATCH v5 2/11 dt-bindings: serial: atmel,at91-usart: add microchip,lan9691-usart
In reply to Robert MarkoDocument Microchip LAN969x USART compatible.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v3:
* Pick Acked-by from Conor
Documentation/devicetree/bindings/serial/atmel,at91-usart.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/serial/atmel,at91-usart.yaml +1 -0
@@ -24,6 +24,7 @@ properties: - const: atmel,at91sam9260-usart - items: - enum: + - microchip,lan9691-usart - microchip,sam9x60-usart - microchip,sam9x7-usart - microchip,sama7d65-usart
Signature · 1 line
2.52.0
PATCH v5 3/11 dt-bindings: rng: atmel,at91-trng: add microchip,lan9691-trng
In reply to Robert MarkoDocument Microchip LAN969X TRNG compatible.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v3:
* Pick Acked-by from Conor
Documentation/devicetree/bindings/rng/atmel,at91-trng.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/rng/atmel,at91-trng.yaml +1 -0
@@ -19,6 +19,7 @@ properties: - microchip,sam9x60-trng - items: - enum: + - microchip,lan9691-trng - microchip,sama7g5-trng - const: atmel,at91sam9g45-trng - items:
Signature · 1 line
2.52.0
PATCH v5 4/11 dt-bindings: crypto: atmel,at91sam9g46-aes: add microchip,lan9691-aes
In reply to Robert MarkoDocument Microchip LAN969x AES compatible.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v3:
* Pick Acked-by from Conor
.../devicetree/bindings/crypto/atmel,at91sam9g46-aes.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/crypto/atmel,at91sam9g46-aes.yaml +1 -0
@@ -16,6 +16,7 @@ properties: - const: atmel,at91sam9g46-aes - items: - enum: + - microchip,lan9691-aes - microchip,sam9x7-aes - microchip,sama7d65-aes - const: atmel,at91sam9g46-aes
Signature · 1 line
2.52.0
PATCH v5 5/11 dt-bindings: crypto: atmel,at91sam9g46-sha: add microchip,lan9691-sha
In reply to Robert MarkoDocument Microchip LAN969x SHA compatible.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v3:
* Pick Acked-by from Conor
.../devicetree/bindings/crypto/atmel,at91sam9g46-sha.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/crypto/atmel,at91sam9g46-sha.yaml +1 -0
@@ -16,6 +16,7 @@ properties: - const: atmel,at91sam9g46-sha - items: - enum: + - microchip,lan9691-sha - microchip,sam9x7-sha - microchip,sama7d65-sha - const: atmel,at91sam9g46-sha
Signature · 1 line
2.52.0
PATCH v5 6/11 dt-bindings: pinctrl: pinctrl-microchip-sgpio: add LAN969x
In reply to Robert MarkoDocument LAN969x compatibles for SGPIO.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v3:
* Pick Acked-by from Conor
.../pinctrl/microchip,sparx5-sgpio.yaml | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
Documentation/devicetree/bindings/pinctrl/microchip,sparx5-sgpio.yaml +15 -5
@@ -21,10 +21,15 @@ properties: pattern: '^gpio@[0-9a-f]+$' compatible: - enum: - - microchip,sparx5-sgpio - - mscc,ocelot-sgpio - - mscc,luton-sgpio + oneOf: + - enum: + - microchip,sparx5-sgpio + - mscc,ocelot-sgpio + - mscc,luton-sgpio + - items: + - enum: + - microchip,lan9691-sgpio + - const: microchip,sparx5-sgpio '#address-cells': const: 1
@@ -80,7 +85,12 @@ patternProperties: type: object properties: compatible: - const: microchip,sparx5-sgpio-bank + oneOf: + - items: + - enum: + - microchip,lan9691-sgpio-bank + - const: microchip,sparx5-sgpio-bank + - const: microchip,sparx5-sgpio-bank reg: description: |
Signature · 1 line
2.52.0
Linus Walleij
maintainerRe: [PATCH v5 06/11] dt-bindings: pinctrl: pinctrl-microchip-sgpio: add LAN969x
Hi Robert,
Quoted 5 lines · Robert Marko
Document LAN969x compatibles for SGPIO.
Signed-off-by Robert Marko <[email protected]>Acked-by Conor Dooley <[email protected]>Reviewed-by Claudiu Beznea <[email protected]>
Should I just merge this one patch to the pinctrl tree? Looks good to me.
Yours,
Linus Walleij
Re: [PATCH v5 06/11] dt-bindings: pinctrl: pinctrl-microchip-sgpio: add LAN969x
Quoted 5 lines · Linus Walleij
Hi Robert,
On Thu, Jan 15, 2026 at 12:41 PM Robert Marko <[email protected]> wrote:
Quoted 7 lines
Quoted 5 lines
Document LAN969x compatibles for SGPIO.
Signed-off-by Robert Marko <[email protected]>Acked-by Conor Dooley <[email protected]>Reviewed-by Claudiu Beznea <[email protected]>Should I just merge this one patch to the pinctrl tree?
That would be great as other bindings are slowly being picked into their respective trees.
Regards,
Robert
Quoted 4 lines
Looks good to me.
Yours,
Linus Walleij
Signature · 7 lines
Robert Marko Staff Embedded Linux Engineer Sartura d.d. Lendavska ulica 16a 10000 Zagreb, Croatia Email: [email protected] Web: www.sartura.hr
Linus Walleij
maintainerRe: [PATCH v5 06/11] dt-bindings: pinctrl: pinctrl-microchip-sgpio: add LAN969x
In reply to Robert MarkoQuoted 5 lines · Robert Marko
Document LAN969x compatibles for SGPIO.
Signed-off-by Robert Marko <[email protected]>Acked-by Conor Dooley <[email protected]>Reviewed-by Claudiu Beznea <[email protected]>
This patch 6/11 applied to the pinctrl tree!
Yours,
Linus Walleij
PATCH v5 7/11 arm64: dts: microchip: add LAN969x clock header file
In reply to Robert MarkoLAN969x uses hardware clock indexes, so document theses in a header to make them humanly readable.
---
Changes in v5:
* Relicense to GPL-2.0-or-later OR MIT to match DTSI
arch/arm64/boot/dts/microchip/clk-lan9691.h | 24 +++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 arch/arm64/boot/dts/microchip/clk-lan9691.h
arch/arm64/boot/dts/microchip/clk-lan9691.h new file +24 -0
@@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: (GPL-2.0-or-later OR MIT) */ + +#ifndef _DTS_CLK_LAN9691_H +#define _DTS_CLK_LAN9691_H + +#define GCK_ID_QSPI0 0 +#define GCK_ID_QSPI2 1 +#define GCK_ID_SDMMC0 2 +#define GCK_ID_SDMMC1 3 +#define GCK_ID_MCAN0 4 +#define GCK_ID_MCAN1 5 +#define GCK_ID_FLEXCOM0 6 +#define GCK_ID_FLEXCOM1 7 +#define GCK_ID_FLEXCOM2 8 +#define GCK_ID_FLEXCOM3 9 +#define GCK_ID_TIMER 10 +#define GCK_ID_USB_REFCLK 11 + +/* Gate clocks */ +#define GCK_GATE_USB_DRD 12 +#define GCK_GATE_MCRAMC 13 +#define GCK_GATE_HMATRIX 14 + +#endif
Signature · 1 line
2.52.0
Re: [PATCH v5 07/11] arm64: dts: microchip: add LAN969x clock header file
Quoted 4 lines · Robert Marko
LAN969x uses hardware clock indexes, so document theses in a header to make them humanly readable.
Signed-off-by Robert Marko<[email protected]>
PATCH v5 8/11 arm64: dts: microchip: add LAN969x support
In reply to Robert MarkoAdd support for Microchip LAN969x switch SoC series by adding the SoC DTSI.
---
Changes in v5:
* Pick Reviewed-by from Claudiu
Changes in v4:
* Adapt to clock indexes now being in a DTS header only
Changes in v2:
* Rename to lan9691
* Split SoC DTSI and evaluation board commits
* Use SoC specific compatibles for devices
* Alphanumerically sort remaining nodes
* Apply DTS coding style
arch/arm64/boot/dts/microchip/lan9691.dtsi | 488 +++++++++++++++++++++ 1 file changed, 488 insertions(+) create mode 100644 arch/arm64/boot/dts/microchip/lan9691.dtsi
arch/arm64/boot/dts/microchip/lan9691.dtsi new file +488 -0
@@ -0,0 +1,488 @@ +// SPDX-License-Identifier: (GPL-2.0-or-later OR MIT) +/* + * Copyright (c) 2025 Microchip Technology Inc. and its subsidiaries. + */ + +#include <dt-bindings/dma/at91.h> +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/mfd/at91-usart.h> +#include <dt-bindings/mfd/atmel-flexcom.h> + +#include "clk-lan9691.h" + +/ { + #address-cells = <1>; + #size-cells = <1>; + + model = "Microchip LAN969x"; + compatible = "microchip,lan9691"; + interrupt-parent = <&gic>; + + clocks { + fx100_clk: fx100-clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <320000000>; + }; + + cpu_clk: cpu-clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <1000000000>; + }; + + ddr_clk: ddr-clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <600000000>; + }; + + fabric_clk: fabric-clk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <250000000>; + }; + }; + + cpus { + #address-cells = <2>; + #size-cells = <0>; + + cpu0: cpu@0 { + compatible = "arm,cortex-a53"; + device_type = "cpu"; + reg = <0x0 0x0>; + next-level-cache = <&l2_0>; + }; + + l2_0: l2-cache { + compatible = "cache"; + cache-level = <2>; + cache-unified; + }; + }; + + psci { + compatible = "arm,psci-1.0"; + method = "smc"; + }; + + pmu { + compatible = "arm,cortex-a53-pmu"; + interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>, /* Secure Phys IRQ */ + <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>, /* Non-secure Phys IRQ */ + <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>, /* Virt IRQ */ + <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>; /* Hyp IRQ */ + }; + + axi: axi { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges; + + usb: usb@300000 { + compatible = "microchip,lan9691-dwc3", "snps,dwc3"; + reg = <0x300000 0x80000>; + interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&clks GCK_GATE_USB_DRD>, + <&clks GCK_ID_USB_REFCLK>; + clock-names = "bus_early", "ref"; + assigned-clocks = <&clks GCK_ID_USB_REFCLK>; + assigned-clock-rates = <60000000>; + maximum-speed = "high-speed"; + dr_mode = "host"; + status = "disabled"; + }; + + flx0: flexcom@e0040000 { + compatible = "microchip,lan9691-flexcom", "atmel,sama5d2-flexcom"; + reg = <0xe0040000 0x100>; + ranges = <0x0 0xe0040000 0x800>; + clocks = <&clks GCK_ID_FLEXCOM0>; + #address-cells = <1>; + #size-cells = <1>; + status = "disabled"; + + usart0: serial@200 { + compatible = "microchip,lan9691-usart", "atmel,at91sam9260-usart"; + reg = <0x200 0x200>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(3)>, + <&dma AT91_XDMAC_DT_PERID(2)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "usart"; + atmel,fifo-size = <32>; + atmel,usart-mode = <AT91_USART_MODE_SERIAL>; + status = "disabled"; + }; + + spi0: spi@400 { + compatible = "microchip,lan9691-spi", "atmel,at91rm9200-spi"; + reg = <0x400 0x200>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(3)>, + <&dma AT91_XDMAC_DT_PERID(2)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "spi_clk"; + #address-cells = <1>; + #size-cells = <0>; + atmel,fifo-size = <32>; + status = "disabled"; + }; + + i2c0: i2c@600 { + compatible = "microchip,lan9691-i2c", "microchip,sam9x60-i2c"; + reg = <0x600 0x200>; + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(3)>, + <&dma AT91_XDMAC_DT_PERID(2)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + }; + + flx1: flexcom@e0044000 { + compatible = "microchip,lan9691-flexcom", "atmel,sama5d2-flexcom"; + reg = <0xe0044000 0x100>; + ranges = <0x0 0xe0044000 0x800>; + clocks = <&clks GCK_ID_FLEXCOM1>; + #address-cells = <1>; + #size-cells = <1>; + status = "disabled"; + + usart1: serial@200 { + compatible = "microchip,lan9691-usart", "atmel,at91sam9260-usart"; + reg = <0x200 0x200>; + interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(3)>, + <&dma AT91_XDMAC_DT_PERID(2)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "usart"; + atmel,fifo-size = <32>; + atmel,usart-mode = <AT91_USART_MODE_SERIAL>; + status = "disabled"; + }; + + spi1: spi@400 { + compatible = "microchip,lan9691-spi", "atmel,at91rm9200-spi"; + reg = <0x400 0x200>; + interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(3)>, + <&dma AT91_XDMAC_DT_PERID(2)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "spi_clk"; + #address-cells = <1>; + #size-cells = <0>; + atmel,fifo-size = <32>; + status = "disabled"; + }; + + i2c1: i2c@600 { + compatible = "microchip,lan9691-i2c", "microchip,sam9x60-i2c"; + reg = <0x600 0x200>; + interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(3)>, + <&dma AT91_XDMAC_DT_PERID(2)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + }; + + trng: rng@e0048000 { + compatible = "microchip,lan9691-trng", "atmel,at91sam9g45-trng"; + reg = <0xe0048000 0x100>; + clocks = <&fabric_clk>; + status = "disabled"; + }; + + aes: crypto@e004c000 { + compatible = "microchip,lan9691-aes", "atmel,at91sam9g46-aes"; + reg = <0xe004c000 0x100>; + interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(12)>, + <&dma AT91_XDMAC_DT_PERID(13)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "aes_clk"; + status = "disabled"; + }; + + flx2: flexcom@e0060000 { + compatible = "microchip,lan9691-flexcom", "atmel,sama5d2-flexcom"; + reg = <0xe0060000 0x100>; + ranges = <0x0 0xe0060000 0x800>; + clocks = <&clks GCK_ID_FLEXCOM2>; + #address-cells = <1>; + #size-cells = <1>; + status = "disabled"; + + usart2: serial@200 { + compatible = "microchip,lan9691-usart", "atmel,at91sam9260-usart"; + reg = <0x200 0x200>; + interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(7)>, + <&dma AT91_XDMAC_DT_PERID(6)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "usart"; + atmel,fifo-size = <32>; + atmel,usart-mode = <AT91_USART_MODE_SERIAL>; + status = "disabled"; + }; + + spi2: spi@400 { + compatible = "microchip,lan9691-spi", "atmel,at91rm9200-spi"; + reg = <0x400 0x200>; + interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(7)>, + <&dma AT91_XDMAC_DT_PERID(6)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "spi_clk"; + #address-cells = <1>; + #size-cells = <0>; + atmel,fifo-size = <32>; + status = "disabled"; + }; + + i2c2: i2c@600 { + compatible = "microchip,lan9691-i2c", "microchip,sam9x60-i2c"; + reg = <0x600 0x200>; + interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(7)>, + <&dma AT91_XDMAC_DT_PERID(6)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + }; + + flx3: flexcom@e0064000 { + compatible = "microchip,lan9691-flexcom", "atmel,sama5d2-flexcom"; + reg = <0xe0064000 0x100>; + ranges = <0x0 0xe0064000 0x800>; + clocks = <&clks GCK_ID_FLEXCOM3>; + #address-cells = <1>; + #size-cells = <1>; + status = "disabled"; + + usart3: serial@200 { + compatible = "microchip,lan9691-usart", "atmel,at91sam9260-usart"; + reg = <0x200 0x200>; + interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(9)>, + <&dma AT91_XDMAC_DT_PERID(8)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "usart"; + atmel,fifo-size = <32>; + atmel,usart-mode = <AT91_USART_MODE_SERIAL>; + status = "disabled"; + }; + + spi3: spi@400 { + compatible = "microchip,lan9691-spi", "atmel,at91rm9200-spi"; + reg = <0x400 0x200>; + interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(9)>, + <&dma AT91_XDMAC_DT_PERID(8)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + clock-names = "spi_clk"; + #address-cells = <1>; + #size-cells = <0>; + atmel,fifo-size = <32>; + status = "disabled"; + }; + + i2c3: i2c@600 { + compatible = "microchip,lan9691-i2c", "microchip,sam9x60-i2c"; + reg = <0x600 0x200>; + interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(9)>, + <&dma AT91_XDMAC_DT_PERID(8)>; + dma-names = "tx", "rx"; + clocks = <&fabric_clk>; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + }; + }; + + dma: dma-controller@e0068000 { + compatible = "microchip,lan9691-dma", "microchip,sama7g5-dma"; + reg = <0xe0068000 0x1000>; + interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; + dma-channels = <16>; + #dma-cells = <1>; + clocks = <&fabric_clk>; + clock-names = "dma_clk"; + }; + + sha: crypto@e006c000 { + compatible = "microchip,lan9691-sha", "atmel,at91sam9g46-sha"; + reg = <0xe006c000 0xec>; + interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; + dmas = <&dma AT91_XDMAC_DT_PERID(14)>; + dma-names = "tx"; + clocks = <&fabric_clk>; + clock-names = "sha_clk"; + status = "disabled"; + }; + + timer: timer@e008c000 { + compatible = "snps,dw-apb-timer"; + reg = <0xe008c000 0x400>; + clocks = <&fabric_clk>; + clock-names = "timer"; + interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + }; + + watchdog: watchdog@e0090000 { + compatible = "snps,dw-wdt"; + reg = <0xe0090000 0x1000>; + interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&fabric_clk>; + }; + + cpu_ctrl: syscon@e00c0000 { + compatible = "microchip,lan966x-cpu-syscon", "syscon"; + reg = <0xe00c0000 0x350>; + }; + + switch: switch@e00c0000 { + compatible = "microchip,lan9691-switch"; + reg = <0xe00c0000 0x0010000>, + <0xe2010000 0x1410000>; + reg-names = "cpu", "devices"; + interrupt-names = "xtr", "fdma", "ptp"; + interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>; + resets = <&reset 0>; + reset-names = "switch"; + status = "disabled"; + }; + + clks: clock-controller@e00c00b4 { + compatible = "microchip,lan9691-gck"; + reg = <0xe00c00b4 0x30>, <0xe00c0308 0x4>; + #clock-cells = <1>; + clocks = <&cpu_clk>, <&ddr_clk>, <&fx100_clk>; + clock-names = "cpu", "ddr", "sys"; + }; + + reset: reset-controller@e201000c { + compatible = "microchip,lan9691-switch-reset", + "microchip,lan966x-switch-reset"; + reg = <0xe201000c 0x4>; + reg-names = "gcb"; + #reset-cells = <1>; + cpu-syscon = <&cpu_ctrl>; + }; + + gpio: pinctrl@e20100d4 { + compatible = "microchip,lan9691-pinctrl"; + reg = <0xe20100d4 0xd4>, + <0xe2010370 0xa8>; + gpio-controller; + #gpio-cells = <2>; + gpio-ranges = <&gpio 0 0 66>; + interrupt-controller; + interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; + #interrupt-cells = <2>; + }; + + mdio0: mdio@e20101a8 { + compatible = "microchip,lan9691-miim", "mscc,ocelot-miim"; + reg = <0xe20101a8 0x24>; + #address-cells = <1>; + #size-cells = <0>; + clocks = <&fx100_clk>; + status = "disabled"; + }; + + mdio1: mdio@e20101cc { + compatible = "microchip,lan9691-miim", "mscc,ocelot-miim"; + reg = <0xe20101cc 0x24>; + #address-cells = <1>; + #size-cells = <0>; + clocks = <&fx100_clk>; + status = "disabled"; + }; + + sgpio: gpio@e2010230 { + compatible = "microchip,lan9691-sgpio", "microchip,sparx5-sgpio"; + reg = <0xe2010230 0x118>; + clocks = <&fx100_clk>; + resets = <&reset 0>; + reset-names = "switch"; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + + sgpio_in: gpio@0 { + compatible = "microchip,lan9691-sgpio-bank", + "microchip,sparx5-sgpio-bank"; + reg = <0>; + gpio-controller; + #gpio-cells = <3>; + interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; + interrupt-controller; + #interrupt-cells = <3>; + }; + + sgpio_out: gpio@1 { + compatible = "microchip,lan9691-sgpio-bank", + "microchip,sparx5-sgpio-bank"; + reg = <1>; + gpio-controller; + #gpio-cells = <3>; + }; + }; + + tmon: hwmon@e2020100 { + compatible = "microchip,lan9691-temp", "microchip,sparx5-temp"; + reg = <0xe2020100 0xc>; + clocks = <&fx100_clk>; + #thermal-sensor-cells = <0>; + }; + + serdes: serdes@e3410000 { + compatible = "microchip,lan9691-serdes"; + reg = <0xe3410000 0x150000>; + #phy-cells = <1>; + clocks = <&fabric_clk>; + }; + + gic: interrupt-controller@e8c11000 { + compatible = "arm,gic-400"; + reg = <0xe8c11000 0x1000>, /* Distributor GICD_ */ + <0xe8c12000 0x2000>, /* CPU interface GICC_ */ + <0xe8c14000 0x2000>, /* Virt interface control */ + <0xe8c16000 0x2000>; /* Virt CPU interface */ + #interrupt-cells = <3>; + interrupt-controller; + interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>; + }; + }; +};
Signature · 1 line
2.52.0
Re: [PATCH v5 08/11] arm64: dts: microchip: add LAN969x support
Quoted 1 line
Add support for Microchip LAN969x switch SoC series by adding the SoC DTSI.
PATCH v5 9/11 dt-bindings: arm: AT91: document EV23X71A board
In reply to Robert MarkoMicrochip EV23X71A board is an LAN9696 based evaluation board.
---
Changes in v5:
* Pick Acked-by from Conor
* Pick Reviewed-by from Claudiu
Documentation/devicetree/bindings/arm/atmel-at91.yaml | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/arm/atmel-at91.yaml +6 -0
@@ -243,6 +243,12 @@ properties: - const: microchip,lan9668 - const: microchip,lan966 + - description: Microchip LAN9696 EV23X71A Evaluation Board + items: + - const: microchip,ev23x71a + - const: microchip,lan9696 + - const: microchip,lan9691 + - description: Kontron KSwitch D10 MMT series items: - enum:
Signature · 1 line
2.52.0
PATCH v5 10/11 dt-bindings: net: sparx5: do not require phys when RGMII is used
In reply to Robert MarkoLAN969x has 2 dedicated RGMII ports, so regular SERDES lanes are not used for RGMII.
So, lets not require phys to be defined when any of the rgmii phy-modes are set.
--- .../bindings/net/microchip,sparx5-switch.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
Documentation/devicetree/bindings/net/microchip,sparx5-switch.yaml +14 -1
@@ -151,10 +151,23 @@ properties: required: - reg - - phys - phy-mode - microchip,bandwidth + if: + not: + properties: + phy-mode: + contains: + enum: + - rgmii + - rgmii-id + - rgmii-rxid + - rgmii-txid + then: + required: + - phys + oneOf: - required: - phy-handle
Signature · 1 line
2.52.0
Re: [PATCH v5 10/11] dt-bindings: net: sparx5: do not require phys when RGMII is used
Quoted 11 lines · Robert Marko
LAN969x has 2 dedicated RGMII ports, so regular SERDES lanes are not used for RGMII.
So, lets not require phys to be defined when any of the rgmii phy-modes are set.
Signed-off-by Robert Marko <[email protected]>--- .../bindings/net/microchip,sparx5-switch.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
Re: [PATCH v5 10/11] dt-bindings: net: sparx5: do not require phys when RGMII is used
In reply to Robert MarkoQuoted 5 lines · On Thu, 15 Jan 2026 12:37:35 +0100 Robert Marko wrote:
LAN969x has 2 dedicated RGMII ports, so regular SERDES lanes are not used for RGMII.
So, lets not require phys to be defined when any of the rgmii phy-modes are set.
Applied, thanks!
PATCH v5 11/11 arm64: dts: microchip: add EV23X71A board
In reply to Robert MarkoMicrochip EV23X71A is an LAN9696 based evaluation board.
---
Changes in v5:
* Remove phys property from port 29
* Alphanumericaly sort pin nodes
Changes in v2:
* Split from SoC DTSI commit
* Apply DTS coding style
* Enclose array in i2c-mux
* Alphanumericaly sort nodes
* Change management port mode to RGMII-ID
arch/arm64/boot/dts/microchip/Makefile | 1 + .../boot/dts/microchip/lan9696-ev23x71a.dts | 756 ++++++++++++++++++ 2 files changed, 757 insertions(+) create mode 100644 arch/arm64/boot/dts/microchip/lan9696-ev23x71a.dts
arch/arm64/boot/dts/microchip/Makefile +1 -0
@@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 +dtb-$(CONFIG_ARCH_LAN969X) += lan9696-ev23x71a.dtb dtb-$(CONFIG_ARCH_SPARX5) += sparx5_pcb125.dtb dtb-$(CONFIG_ARCH_SPARX5) += sparx5_pcb134.dtb sparx5_pcb134_emmc.dtb dtb-$(CONFIG_ARCH_SPARX5) += sparx5_pcb135.dtb sparx5_pcb135_emmc.dtb
arch/arm64/boot/dts/microchip/lan9696-ev23x71a.dts new file +756 -0
756 lines not on this page · raw message
Signature · 1 line
2.52.0
Re: [PATCH v5 11/11] arm64: dts: microchip: add EV23X71A board
Quoted 3 lines · Robert Marko
Microchip EV23X71A is an LAN9696 based evaluation board.
Signed-off-by Robert Marko<[email protected]>
Re: [PATCH v5 11/11] arm64: dts: microchip: add EV23X71A board
In reply to Robert MarkoHi Robert,
Tested on EV23X71A.
Thanks!
Quoted 1 line
Microchip EV23X71A is an LAN9696 based evaluation board.
Herbert Xu
maintainerQuoted 53 lines · Robert Marko
This series adds support for the Microchip LAN969x switch SoC family.
Series is a bit long since after discussions in previous versions, it was recommended[1][2] to add SoC specific compatibles for device nodes so it includes the required bindings updates.
[1] https://lore.kernel.org/all/20251203-splendor-cubbyhole-eda2d6982b46@spud/
[2] https://lore.kernel.org/all/[email protected]/
[3] https://lore.kernel.org/all/20251203-duly-leotard-86b83bd840c6@spud/
[4] https://lore.kernel.org/all/[email protected]/Signed-off-by Robert Marko <[email protected]>Changes in v5:
* Picked Acked-by and Reviewed-by tags
* Change clock header license to match the DTSI one
* Alphabetize EV23X71A pin nodes
* Remove the requirment for all ethernet-port nodes to have phys property as when RGMII is used there is no SERDES being used
* Drop phys from RGMII port on EV23X71A
* Drop USB, DMA, MIIM, SPI and I2C bindings as those were already pickedChanges in v4:
* Pick Acked-by from Andi for I2C bindings
* Move clock indexes from dt-bindings into a DTS header as suggested by Krzysztof[4]Changes in v3:
* Pick Acked-by from Conor
* Drop HWMON binding as it was picked into hwmon already
* Document EV23X71A into AT91 binding
* Drop SparX-5 and AT91 bindings merge
* Apply remark from Conor on DMA binding regarding merging casesChanges in v2:
* Change LAN969x wildcards to LAN9691 in patches
* Split SoC DTSI and evaluation board patches
* Add the suggested binding changes required for SoC specific compatibles
* Merge SparX-5 and AT91 bindings as suggested[3]Robert Marko (11):
dt-bindings: mfd: atmel,sama5d2-flexcom: add microchip,lan9691-flexcom
dt-bindings: serial: atmel,at91-usart: add microchip,lan9691-usart
dt-bindings: rng: atmel,at91-trng: add microchip,lan9691-trng
dt-bindings: crypto: atmel,at91sam9g46-aes: add microchip,lan9691-aes
dt-bindings: crypto: atmel,at91sam9g46-sha: add microchip,lan9691-sha
dt-bindings: pinctrl: pinctrl-microchip-sgpio: add LAN969x
arm64: dts: microchip: add LAN969x clock header file
arm64: dts: microchip: add LAN969x support
dt-bindings: arm: AT91: document EV23X71A board
dt-bindings: net: sparx5: do not require phys when RGMII is used
arm64: dts: microchip: add EV23X71A board
Quoted 19 lines
.../devicetree/bindings/arm/atmel-at91.yaml | 6 + .../crypto/atmel,at91sam9g46-aes.yaml | 1 + .../crypto/atmel,at91sam9g46-sha.yaml | 1 + .../bindings/mfd/atmel,sama5d2-flexcom.yaml | 1 + .../bindings/net/microchip,sparx5-switch.yaml | 15 +- .../pinctrl/microchip,sparx5-sgpio.yaml | 20 +- .../bindings/rng/atmel,at91-trng.yaml | 1 + .../bindings/serial/atmel,at91-usart.yaml | 1 + arch/arm64/boot/dts/microchip/Makefile | 1 + arch/arm64/boot/dts/microchip/clk-lan9691.h | 24 + arch/arm64/boot/dts/microchip/lan9691.dtsi | 488 +++++++++++ .../boot/dts/microchip/lan9696-ev23x71a.dts | 756 ++++++++++++++++++ 12 files changed, 1309 insertions(+), 6 deletions(-) create mode 100644 arch/arm64/boot/dts/microchip/clk-lan9691.h create mode 100644 arch/arm64/boot/dts/microchip/lan9691.dtsi create mode 100644 arch/arm64/boot/dts/microchip/lan9696-ev23x71a.dtsSignature · 1 line
2.52.0
Patches 4-5 applied. Thanks.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt