* [PATCH v4 0/2] Add support for ICSSM Ethernet on AM57x, AM437x, and AM335x
@ 2026-01-05 16:21 Parvathi Pudi
2026-01-05 16:21 ` [PATCH v4 1/2] arm: dts: ti: Adds device tree nodes for PRU Cores, IEP and eCAP modules of PRU-ICSS2 Instance Parvathi Pudi
2026-01-05 16:21 ` [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x Parvathi Pudi
0 siblings, 2 replies; 10+ messages in thread
From: Parvathi Pudi @ 2026-01-05 16:21 UTC (permalink / raw)
To: nm, vigneshr, afd, khilman, rogerq, tony, robh, krzk+dt, conor+dt,
richardcochran, aaro.koskinen, andreas
Cc: andrew, linux-omap, devicetree, linux-kernel, netdev, danishanwar,
pratheesh, j-rameshbabu, praneeth, srk, rogerq, krishna, mohan,
pmohan, basharath, parvathi
Hi,
This series adds support for ICSSM Ethernet on Texas Instruments AM57x,
AM437x and AM335x platforms.
The AM57x and AM437x IDKs support two PRU-ICSS instances, each consisting
of two PRU cores, with each PRU-ICSS instance capable of handling two
Ethernet ports. For the AM57x platforms, the PRU-ICSS2 node has been added
to the am57xx-idk-common.dtsi, while for the AM437x platform, the PRU-ICSS1
node has been added to the am437x-idk-evm.dts.
The AM335x ICE features a single PRU-ICSS instance. A new device tree overlay
source file, am335x-icev2-prueth-overlay.dtso, has been introduced to define the
PRU-ICSS node for the AM335x platform.
This is v4 of the patch series [v1]. It has no changes from [v3].
This series is based on the latest next-20260105 linux-next.
Changes from v3 to v4 :
*) No code changes were made, only the version was updated.
*) Rebased the series on latest linux-next.
Changes from v2 to v3 :
*) Addressed Andrew Davis's comment by placing PRUETH nodes in a new overlay file
am335x-icev2-prueth-overlay.dtso.
*) Rebased the series on latest linux-next.
Changes from v1 to v2 :
*) Addressed Andrew Lunn's comment on patch 1 of the series.
*) Addressed MD Danish Anwar comment on patch 1 of the series.
*) Rebased the series on latest linux-next.
[v1] https://lore.kernel.org/all/20251013125401.1435486-1-parvathi@couthit.com/
[v2] https://lore.kernel.org/all/20251103124820.1679167-1-parvathi@couthit.com/
[v3] https://lore.kernel.org/all/20251217130715.1327138-1-parvathi@couthit.com/
Thanks and Regards,
Parvathi.
Roger Quadros (2):
arm: dts: ti: Adds device tree nodes for PRU Cores, IEP and eCAP
modules of PRU-ICSS2 Instance.
arm: dts: ti: Adds support for AM335x and AM437x
arch/arm/boot/dts/ti/omap/Makefile | 5 +
.../ti/omap/am335x-icev2-prueth-overlay.dtso | 190 ++++++++++++++++++
arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi | 11 +
arch/arm/boot/dts/ti/omap/am4372.dtsi | 11 +
arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts | 137 ++++++++++++-
arch/arm/boot/dts/ti/omap/am57-pruss.dtsi | 11 +
arch/arm/boot/dts/ti/omap/am571x-idk.dts | 8 +-
arch/arm/boot/dts/ti/omap/am572x-idk.dts | 10 +-
arch/arm/boot/dts/ti/omap/am574x-idk.dts | 10 +-
.../boot/dts/ti/omap/am57xx-idk-common.dtsi | 61 ++++++
10 files changed, 444 insertions(+), 10 deletions(-)
create mode 100644 arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 1/2] arm: dts: ti: Adds device tree nodes for PRU Cores, IEP and eCAP modules of PRU-ICSS2 Instance.
2026-01-05 16:21 [PATCH v4 0/2] Add support for ICSSM Ethernet on AM57x, AM437x, and AM335x Parvathi Pudi
@ 2026-01-05 16:21 ` Parvathi Pudi
2026-01-05 16:21 ` [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x Parvathi Pudi
1 sibling, 0 replies; 10+ messages in thread
From: Parvathi Pudi @ 2026-01-05 16:21 UTC (permalink / raw)
To: nm, vigneshr, afd, khilman, rogerq, tony, robh, krzk+dt, conor+dt,
richardcochran, aaro.koskinen, andreas
Cc: andrew, linux-omap, devicetree, linux-kernel, netdev, danishanwar,
pratheesh, j-rameshbabu, praneeth, srk, rogerq, krishna, mohan,
pmohan, basharath, parvathi, Murali Karicheri
From: Roger Quadros <rogerq@ti.com>
The TI Sitara AM57xx series of devices consists of 2 PRU-ICSS instances
(PRU-ICSS1 and PRU-ICSS2). This patch adds the device tree nodes for the
PRU-ICSS2 instance to support DUAL-MAC mode of operation.
Each PRU-ICSS instance consists of two PRU cores along with various
peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
Ethernet Peripheral(IEP), the Real Time Media Independent Interface
controller (MII_RT), and the Enhanced Capture (eCAP) event module.
am57-pruss.dtsi - Adds IEP and eCAP peripheral as child nodes of
the PRUSS subsystem node.
am57xx-idk-common.dtsi - Adds PRU-ICSS2 instance node along with
PRU eth port information and corresponding port configuration. It includes
interrupt mapping for packet reception, HW timestamp collection, and
PRU Ethernet ports in MII mode.
am571x-idk.dts, am572x-idk.dts and am574x-idk.dts - GPIO configuration
along with delay configuration for individual PRU Ethernet port.
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Andrew F. Davis <afd@ti.com>
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
Signed-off-by: Basharath Hussain Khaja <basharath@couthit.com>
Signed-off-by: Parvathi Pudi <parvathi@couthit.com>
---
arch/arm/boot/dts/ti/omap/am57-pruss.dtsi | 11 ++++
arch/arm/boot/dts/ti/omap/am571x-idk.dts | 8 ++-
arch/arm/boot/dts/ti/omap/am572x-idk.dts | 10 +--
arch/arm/boot/dts/ti/omap/am574x-idk.dts | 10 +--
.../boot/dts/ti/omap/am57xx-idk-common.dtsi | 61 +++++++++++++++++++
5 files changed, 91 insertions(+), 9 deletions(-)
diff --git a/arch/arm/boot/dts/ti/omap/am57-pruss.dtsi b/arch/arm/boot/dts/ti/omap/am57-pruss.dtsi
index 46c5383f0eee..f73316625608 100644
--- a/arch/arm/boot/dts/ti/omap/am57-pruss.dtsi
+++ b/arch/arm/boot/dts/ti/omap/am57-pruss.dtsi
@@ -170,6 +170,17 @@ pruss2_iepclk_mux: iepclk-mux@30 {
};
};
+ pruss2_iep: iep@2e000 {
+ compatible = "ti,am5728-icss-iep";
+ reg = <0x2e000 0x31c>;
+ clocks = <&pruss2_iepclk_mux>;
+ };
+
+ pruss2_ecap: ecap@30000 {
+ compatible = "ti,pruss-ecap";
+ reg = <0x30000 0x60>;
+ };
+
pruss2_mii_rt: mii-rt@32000 {
compatible = "ti,pruss-mii", "syscon";
reg = <0x32000 0x58>;
diff --git a/arch/arm/boot/dts/ti/omap/am571x-idk.dts b/arch/arm/boot/dts/ti/omap/am571x-idk.dts
index 322cf79d22e9..02653b440585 100644
--- a/arch/arm/boot/dts/ti/omap/am571x-idk.dts
+++ b/arch/arm/boot/dts/ti/omap/am571x-idk.dts
@@ -214,5 +214,11 @@ &pruss1_mdio {
};
&pruss2_mdio {
- status = "disabled";
+ reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
+ reset-delay-us = <2>; /* PHY datasheet states 1uS min */
+};
+
+&pruss2_eth {
+ ti,pruss-gp-mux-sel = <4>, /* MII2, needed for PRUSS1_MII0 */
+ <4>; /* MII2, needed for PRUSS1_MII1 */
};
diff --git a/arch/arm/boot/dts/ti/omap/am572x-idk.dts b/arch/arm/boot/dts/ti/omap/am572x-idk.dts
index 94a738cb0a4d..54a8ccb9ca14 100644
--- a/arch/arm/boot/dts/ti/omap/am572x-idk.dts
+++ b/arch/arm/boot/dts/ti/omap/am572x-idk.dts
@@ -28,10 +28,12 @@ &mmc2 {
pinctrl-2 = <&mmc2_pins_ddr_rev20>;
};
-&pruss1_mdio {
- status = "disabled";
+&pruss2_eth0_phy {
+ reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <2>; /* PHY datasheet states 1uS min */
};
-&pruss2_mdio {
- status = "disabled";
+&pruss2_eth1_phy {
+ reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <2>; /* PHY datasheet states 1uS min */
};
diff --git a/arch/arm/boot/dts/ti/omap/am574x-idk.dts b/arch/arm/boot/dts/ti/omap/am574x-idk.dts
index 47b9174d2353..47b6c6cb210c 100644
--- a/arch/arm/boot/dts/ti/omap/am574x-idk.dts
+++ b/arch/arm/boot/dts/ti/omap/am574x-idk.dts
@@ -40,10 +40,12 @@ &emif1 {
status = "okay";
};
-&pruss1_mdio {
- status = "disabled";
+&pruss2_eth0_phy {
+ reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <2>; /* PHY datasheet states 1uS min */
};
-&pruss2_mdio {
- status = "disabled";
+&pruss2_eth1_phy {
+ reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <2>; /* PHY datasheet states 1uS min */
};
diff --git a/arch/arm/boot/dts/ti/omap/am57xx-idk-common.dtsi b/arch/arm/boot/dts/ti/omap/am57xx-idk-common.dtsi
index 43e3623f079c..5eccff3bb4b6 100644
--- a/arch/arm/boot/dts/ti/omap/am57xx-idk-common.dtsi
+++ b/arch/arm/boot/dts/ti/omap/am57xx-idk-common.dtsi
@@ -155,6 +155,52 @@ src_clk_x1: src_clk_x1 {
compatible = "fixed-clock";
clock-frequency = <20000000>;
};
+
+ /* Dual-MAC Ethernet application node on PRU-ICSS2 */
+ pruss2_eth: pruss2-eth {
+ compatible = "ti,am57-prueth";
+ ti,prus = <&pru2_0>, <&pru2_1>;
+ sram = <&ocmcram1>;
+ ti,mii-rt = <&pruss2_mii_rt>;
+ ti,iep = <&pruss2_iep>;
+ ti,ecap = <&pruss2_ecap>;
+ interrupts = <20 2 2>, <21 3 3>;
+ interrupt-names = "rx_hp", "rx_lp";
+ interrupt-parent = <&pruss2_intc>;
+
+ ethernet-ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pruss2_emac0: ethernet-port@0 {
+ reg = <0>;
+ phy-handle = <&pruss2_eth0_phy>;
+ phy-mode = "mii";
+ interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
+ interrupt-names = "rx", "emac_ptp_tx",
+ "hsr_ptp_tx";
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+
+ pruss2_emac1: ethernet-port@1 {
+ reg = <1>;
+ phy-handle = <&pruss2_eth1_phy>;
+ phy-mode = "mii";
+ interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
+ interrupt-names = "rx", "emac_ptp_tx",
+ "hsr_ptp_tx";
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+ };
+ };
+
+};
+
+&pruss2_iep {
+ interrupt-parent = <&pruss2_intc>;
+ interrupts = <7 7 8>;
+ interrupt-names = "iep_cap_cmp";
};
&dra7_pmx_core {
@@ -606,3 +652,18 @@ dpi_out: endpoint {
};
};
};
+
+&pruss2_mdio {
+ status = "okay";
+ pruss2_eth0_phy: ethernet-phy@0 {
+ reg = <0>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <30 IRQ_TYPE_LEVEL_LOW>;
+ };
+
+ pruss2_eth1_phy: ethernet-phy@1 {
+ reg = <1>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <31 IRQ_TYPE_LEVEL_LOW>;
+ };
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-05 16:21 [PATCH v4 0/2] Add support for ICSSM Ethernet on AM57x, AM437x, and AM335x Parvathi Pudi
2026-01-05 16:21 ` [PATCH v4 1/2] arm: dts: ti: Adds device tree nodes for PRU Cores, IEP and eCAP modules of PRU-ICSS2 Instance Parvathi Pudi
@ 2026-01-05 16:21 ` Parvathi Pudi
2026-01-05 19:22 ` Andrew Davis
2026-02-24 8:48 ` H. Nikolaus Schaller
1 sibling, 2 replies; 10+ messages in thread
From: Parvathi Pudi @ 2026-01-05 16:21 UTC (permalink / raw)
To: nm, vigneshr, afd, khilman, rogerq, tony, robh, krzk+dt, conor+dt,
richardcochran, aaro.koskinen, andreas
Cc: andrew, linux-omap, devicetree, linux-kernel, netdev, danishanwar,
pratheesh, j-rameshbabu, praneeth, srk, rogerq, krishna, mohan,
pmohan, basharath, parvathi, Murali Karicheri
From: Roger Quadros <rogerq@ti.com>
PRU-ICSS instance consists of two PRU cores along with various
peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
Ethernet Peripheral(IEP), the Real Time Media Independent Interface
controller (MII_RT), and the Enhanced Capture (eCAP) event module.
The TI Sitara AM335x ICE-V2 consists of single PRU-ICSS instance,
This patch adds the new device tree overlay file in-order to enable
PRU-ICSS instance, along with makefile changes.
The TI Sitara AM437x series of devices consists of 2 PRU-ICSS instances
(PRU-ICSS0 and PRU-ICSS1). This patch adds the device tree nodes for the
PRU-ICSS1 instance to support DUAL-MAC mode of operation. Support for
Ethernet over PRU is available only for ICSS1 instance.
am33xx-l4.dtsi, am4372.dtsi - Adds IEP and eCAP peripheral as child nodes
of the PRUSS subsystem node.
am335x-icev2-prueth.dtso, am437x-idk-evm.dts - Adds PRU-ICSS
instance node along with PRU eth port information and corresponding
port configuration. It includes interrupt mapping for packet reception,
HW timestamp collection, and PRU Ethernet ports in MII mode,
GPIO configuration, boot strapping along with delay configuration for
individual PRU Ethernet port and other required nodes.
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Andrew F. Davis <afd@ti.com>
Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
Signed-off-by: Basharath Hussain Khaja <basharath@couthit.com>
Signed-off-by: Parvathi Pudi <parvathi@couthit.com>
---
arch/arm/boot/dts/ti/omap/Makefile | 5 +
.../ti/omap/am335x-icev2-prueth-overlay.dtso | 190 ++++++++++++++++++
arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi | 11 +
arch/arm/boot/dts/ti/omap/am4372.dtsi | 11 +
arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts | 137 ++++++++++++-
5 files changed, 353 insertions(+), 1 deletion(-)
create mode 100644 arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
diff --git a/arch/arm/boot/dts/ti/omap/Makefile b/arch/arm/boot/dts/ti/omap/Makefile
index 14e500846875..c68948035eca 100644
--- a/arch/arm/boot/dts/ti/omap/Makefile
+++ b/arch/arm/boot/dts/ti/omap/Makefile
@@ -82,6 +82,10 @@ dtb-$(CONFIG_ARCH_OMAP4) += \
omap4-var-stk-om44.dtb \
omap4-xyboard-mz609.dtb \
omap4-xyboard-mz617.dtb
+
+am335x-icev2-prueth-dtbs := am335x-icev2.dtb \
+ am335x-icev2-prueth-overlay.dtbo
+
dtb-$(CONFIG_SOC_AM33XX) += \
am335x-baltos-ir2110.dtb \
am335x-baltos-ir3220.dtb \
@@ -100,6 +104,7 @@ dtb-$(CONFIG_SOC_AM33XX) += \
am335x-evmsk.dtb \
am335x-guardian.dtb \
am335x-icev2.dtb \
+ am335x-icev2-prueth.dtb \
am335x-lxm.dtb \
am335x-mba335x.dtb \
am335x-moxa-uc-2101.dtb \
diff --git a/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
new file mode 100644
index 000000000000..abde5119875f
--- /dev/null
+++ b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
@@ -0,0 +1,190 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DT overlay for IDK AM335x
+ *
+ * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
+ */
+
+/*
+ * AM335x ICE V2 board
+ * http://www.ti.com/tool/tmdsice3359
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/bus/ti-sysc.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/pinctrl/am33xx.h>
+#include <dt-bindings/clock/am3.h>
+
+&{/} {
+ /* Dual-MAC Ethernet application node on PRU-ICSS */
+ pruss_eth: pruss-eth {
+ compatible = "ti,am3359-prueth";
+ ti,prus = <&pru0>, <&pru1>;
+ sram = <&ocmcram>;
+ ti,mii-rt = <&pruss_mii_rt>;
+ ti,iep = <&pruss_iep>;
+ ti,ecap = <&pruss_ecap>;
+ interrupts = <20 2 2>, <21 3 3>;
+ interrupt-names = "rx_hp", "rx_lp";
+ interrupt-parent = <&pruss_intc>;
+
+ pinctrl-0 = <&pruss_eth_default>;
+ pinctrl-names = "default";
+
+ ethernet-ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pruss_emac0: ethernet-port@0 {
+ reg = <0>;
+ phy-handle = <&pruss_eth0_phy>;
+ phy-mode = "mii";
+ interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
+ interrupt-names = "rx", "emac_ptp_tx",
+ "hsr_ptp_tx";
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+
+ pruss_emac1: ethernet-port@1 {
+ reg = <1>;
+ phy-handle = <&pruss_eth1_phy>;
+ phy-mode = "mii";
+ interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
+ interrupt-names = "rx", "emac_ptp_tx",
+ "hsr_ptp_tx";
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+ };
+ };
+};
+
+&am33xx_pinmux {
+ /* MDIO node for PRU-ICSS */
+ pruss_mdio_default: pruss_mdio_default {
+ pinctrl-single,pins = <
+ /* gpmc_clk.pr1_mdio_mdclk */
+ AM33XX_PADCONF(0x88c, PIN_OUTPUT, MUX_MODE5)
+ /* gpmc_csn3.pr1_mdio_data */
+ AM33XX_PADCONF(0x888, PIN_INPUT, MUX_MODE5)
+ /* gpmc_ben0_cle.gpio2_5 */
+ AM33XX_PADCONF(0x89c, PIN_INPUT_PULLUP, MUX_MODE7)
+ /* disable CPSW MDIO */
+ /* mdio_data.gpio0_0 */
+ AM33XX_PADCONF(0x948, PIN_INPUT_PULLUP, MUX_MODE7)
+ /* mdio_clk.gpio0_1 */
+ AM33XX_PADCONF(0x94c, PIN_INPUT_PULLUP, MUX_MODE7)
+ >;
+ };
+
+ /* Pinmux configuration for PRU-ICSS */
+ pruss_eth_default: pruss_eth_default {
+ pinctrl-single,pins = <
+ /* dss_data0.pr1_mii_mt0_clk */
+ AM33XX_PADCONF(0x8a0, PIN_INPUT, MUX_MODE2)
+ /* dss_data5.pr1_mii0_txd0 */
+ AM33XX_PADCONF(0x8b4, PIN_OUTPUT, MUX_MODE2)
+ /* dss_data4.pr1_mii0_txd1 */
+ AM33XX_PADCONF(0x8b0, PIN_OUTPUT, MUX_MODE2)
+ /* dss_data3.pr1_mii0_txd2 */
+ AM33XX_PADCONF(0x8ac, PIN_OUTPUT, MUX_MODE2)
+ /* dss_data2.pr1_mii0_txd3 */
+ AM33XX_PADCONF(0x8a8, PIN_OUTPUT, MUX_MODE2)
+ /* dss_data11.pr1_mii0_rxd0 */
+ AM33XX_PADCONF(0x8cc, PIN_INPUT, MUX_MODE5)
+ /* dss_data10.pr1_mii0_rxd1 */
+ AM33XX_PADCONF(0x8c8, PIN_INPUT, MUX_MODE5)
+ /* dss_data9.pr1_mii0_rxd2 */
+ AM33XX_PADCONF(0x8c4, PIN_INPUT, MUX_MODE5)
+ /* dss_data8.pr1_mii0_rxd3 */
+ AM33XX_PADCONF(0x8c0, PIN_INPUT, MUX_MODE5)
+ /* dss_data1.pr1_mii0_txen */
+ AM33XX_PADCONF(0x8a4, PIN_OUTPUT, MUX_MODE2)
+ /* dss_data14.pr1_mii_mr0_clk */
+ AM33XX_PADCONF(0x8d8, PIN_INPUT, MUX_MODE5)
+ /* dss_data15.pr1_mii0_rxdv */
+ AM33XX_PADCONF(0x8dc, PIN_INPUT, MUX_MODE5)
+ /* dss_data13.pr1_mii0_rxer */
+ AM33XX_PADCONF(0x8d4, PIN_INPUT, MUX_MODE5)
+ /* dss_data12.pr1_mii0_rxlink */
+ AM33XX_PADCONF(0x8d0, PIN_INPUT, MUX_MODE5)
+ /* dss_pclk.pr1_mii0_crs */
+ AM33XX_PADCONF(0x8e8, PIN_INPUT, MUX_MODE2)
+
+ /* gpmc_a0.pr1_mii_mt1_clk */
+ AM33XX_PADCONF(0x840, PIN_INPUT, MUX_MODE5)
+ /* gpmc_a4.pr1_mii1_txd0 */
+ AM33XX_PADCONF(0x850, PIN_OUTPUT, MUX_MODE5)
+ /* gpmc_a3.pr1_mii1_txd1 */
+ AM33XX_PADCONF(0x84c, PIN_OUTPUT, MUX_MODE5)
+ /* gpmc_a2.pr1_mii1_txd2 */
+ AM33XX_PADCONF(0x848, PIN_OUTPUT, MUX_MODE5)
+ /* gpmc_a1.pr1_mii1_txd3 */
+ AM33XX_PADCONF(0x844, PIN_OUTPUT, MUX_MODE5)
+ /* gpmc_a8.pr1_mii1_rxd0 */
+ AM33XX_PADCONF(0x860, PIN_INPUT, MUX_MODE5)
+ /* gpmc_a7.pr1_mii1_rxd1 */
+ AM33XX_PADCONF(0x85c, PIN_INPUT, MUX_MODE5)
+ /* gpmc_a6.pr1_mii1_rxd2 */
+ AM33XX_PADCONF(0x858, PIN_INPUT, MUX_MODE5)
+ /* gpmc_a5.pr1_mii1_rxd3 */
+ AM33XX_PADCONF(0x854, PIN_INPUT, MUX_MODE5)
+ /* gpmc_wpn.pr1_mii1_txen */
+ AM33XX_PADCONF(0x874, PIN_OUTPUT, MUX_MODE5)
+ /* gpmc_a9.pr1_mii_mr1_clk */
+ AM33XX_PADCONF(0x864, PIN_INPUT, MUX_MODE5)
+ /* gpmc_a10.pr1_mii1_rxdv */
+ AM33XX_PADCONF(0x868, PIN_INPUT, MUX_MODE5)
+ /* gpmc_a11.pr1_mii1_rxer */
+ AM33XX_PADCONF(0x86c, PIN_INPUT, MUX_MODE5)
+ /* gpmc_ben1.pr1_mii1_rxlink */
+ AM33XX_PADCONF(0x878, PIN_INPUT, MUX_MODE5)
+ /* lcd_ac_bias_en.pr1_mii1_crs */
+ AM33XX_PADCONF(0x8ec, PIN_INPUT, MUX_MODE2)
+ /* gpmc_wait0.pr1_mii1_col */
+ AM33XX_PADCONF(0x870, PIN_INPUT, MUX_MODE5)
+ >;
+ };
+};
+
+&gpio3 {
+ mux-mii-hog {
+ /* ETH1 mux: Low for MII-PRU, high for RMII-CPSW */
+ output-low;
+ };
+};
+
+/*
+ * Disable CPSW switch node and
+ * MDIO configuration to prevent
+ * conflict with PRU-ICSS
+ */
+&mac_sw {
+ status = "disable";
+};
+
+&davinci_mdio_sw {
+ status = "disable";
+};
+
+/* PRU-ICSS MDIO configuration */
+&pruss_mdio {
+ pinctrl-0 = <&pruss_mdio_default>;
+ pinctrl-names = "default";
+ reset-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>;
+ reset-delay-us = <2>; /* PHY datasheet states 1uS min */
+ status = "okay";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ pruss_eth0_phy: ethernet-phy@1 {
+ reg = <1>;
+ };
+
+ pruss_eth1_phy: ethernet-phy@3 {
+ reg = <3>;
+ };
+};
diff --git a/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi b/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi
index 89d16fcc773e..a63ef307d918 100644
--- a/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi
+++ b/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi
@@ -896,6 +896,17 @@ pruss_mii_rt: mii-rt@32000 {
reg = <0x32000 0x58>;
};
+ pruss_iep: iep@2e000 {
+ compatible = "ti,am3356-icss-iep";
+ reg = <0x2e000 0x31c>;
+ clocks = <&pruss_iepclk_mux>;
+ };
+
+ pruss_ecap: ecap@30000 {
+ compatible = "ti,pruss-ecap";
+ reg = <0x30000 0x60>;
+ };
+
pruss_intc: interrupt-controller@20000 {
compatible = "ti,pruss-intc";
reg = <0x20000 0x2000>;
diff --git a/arch/arm/boot/dts/ti/omap/am4372.dtsi b/arch/arm/boot/dts/ti/omap/am4372.dtsi
index 504fa6b57d39..494f251c8e6a 100644
--- a/arch/arm/boot/dts/ti/omap/am4372.dtsi
+++ b/arch/arm/boot/dts/ti/omap/am4372.dtsi
@@ -476,6 +476,17 @@ pruss1_mii_rt: mii-rt@32000 {
reg = <0x32000 0x58>;
};
+ pruss1_iep: iep@2e000 {
+ compatible = "ti,am4376-icss-iep";
+ reg = <0x2e000 0x31c>;
+ clocks = <&pruss1_iepclk_mux>;
+ };
+
+ pruss1_ecap: ecap@30000 {
+ compatible = "ti,pruss-ecap";
+ reg = <0x30000 0x60>;
+ };
+
pruss1_intc: interrupt-controller@20000 {
compatible = "ti,pruss-intc";
reg = <0x20000 0x2000>;
diff --git a/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts b/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts
index 826f687c368a..3d755d875a70 100644
--- a/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts
+++ b/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts
@@ -168,6 +168,48 @@ led-out7 {
default-state = "off";
};
};
+
+ /* Dual-MAC Ethernet application node on PRU-ICSS1 */
+ pruss1_eth: pruss1-eth {
+ compatible = "ti,am4376-prueth";
+ ti,prus = <&pru1_0>, <&pru1_1>;
+ sram = <&ocmcram>;
+ ti,mii-rt = <&pruss1_mii_rt>;
+ ti,iep = <&pruss1_iep>;
+ ti,ecap = <&pruss1_ecap>;
+ interrupts = <20 2 2>, <21 3 3>;
+ interrupt-names = "rx_hp", "rx_lp";
+ interrupt-parent = <&pruss1_intc>;
+
+ pinctrl-0 = <&pruss1_eth_default>;
+ pinctrl-names = "default";
+
+ ethernet-ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pruss1_emac0: ethernet-port@0 {
+ reg = <0>;
+ phy-handle = <&pruss1_eth0_phy>;
+ phy-mode = "mii";
+ interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
+ interrupt-names = "rx", "emac_ptp_tx",
+ "hsr_ptp_tx";
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+
+ pruss1_emac1: ethernet-port@1 {
+ reg = <1>;
+ phy-handle = <&pruss1_eth1_phy>;
+ phy-mode = "mii";
+ interrupts = <21 3 3>, <27 9 5>, <24 9 5>;
+ interrupt-names = "rx", "emac_ptp_tx",
+ "hsr_ptp_tx";
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+ };
+ };
};
&am43xx_pinmux {
@@ -303,6 +345,86 @@ AM4372_IOPAD(0x94c, PIN_INPUT_PULLDOWN | MUX_MODE7)
>;
};
+ pruss1_mdio_default: pruss1_mdio_default {
+ pinctrl-single,pins = <
+ /* gpmc_clk.pr1_mdio_mdclk */
+ AM4372_IOPAD(0x88c, (PIN_OUTPUT | MUX_MODE5))
+ /* xdma_event_intr0.pr1_mdio_data */
+ AM4372_IOPAD(0xa70, (PIN_INPUT | MUX_MODE8))
+ /* cam1_data6.gpio4_20 */
+ AM4372_IOPAD(0xa00, (PIN_INPUT_PULLUP | MUX_MODE7))
+ >;
+ };
+
+ pruss1_eth_default: pruss1_eth_default {
+ pinctrl-single,pins = <
+ /* dss_data0.pr1_mii_mt0_clk */
+ AM4372_IOPAD(0x8a0, (PIN_INPUT | MUX_MODE2))
+ /* dss_data5.pr1_mii0_txd0 */
+ AM4372_IOPAD(0x8b4, (PIN_OUTPUT | MUX_MODE2))
+ /* dss_data4.pr1_mii0_txd1 */
+ AM4372_IOPAD(0x8b0, (PIN_OUTPUT | MUX_MODE2))
+ /* dss_data3.pr1_mii0_txd2 */
+ AM4372_IOPAD(0x8ac, (PIN_OUTPUT | MUX_MODE2))
+ /* dss_data2.pr1_mii0_txd3 */
+ AM4372_IOPAD(0x8a8, (PIN_OUTPUT | MUX_MODE2))
+ /* dss_data11.pr1_mii0_rxd0 */
+ AM4372_IOPAD(0x8cc, (PIN_INPUT | MUX_MODE5))
+ /* dss_data10.pr1_mii0_rxd1 */
+ AM4372_IOPAD(0x8c8, (PIN_INPUT | MUX_MODE5))
+ /* dss_data9.pr1_mii0_rxd2 */
+ AM4372_IOPAD(0x8c4, (PIN_INPUT | MUX_MODE5))
+ /* dss_data8.pr1_mii0_rxd3 */
+ AM4372_IOPAD(0x8c0, (PIN_INPUT | MUX_MODE5))
+ /* dss_data1.pr1_mii0_txen */
+ AM4372_IOPAD(0x8a4, (PIN_OUTPUT | MUX_MODE2))
+ /* dss_data14.pr1_mii_mr0_clk */
+ AM4372_IOPAD(0x8d8, (PIN_INPUT | MUX_MODE5))
+ /* dss_data15.pr1_mii0_rxdv */
+ AM4372_IOPAD(0x8dc, (PIN_INPUT | MUX_MODE5))
+ /* dss_data13.pr1_mii0_rxer */
+ AM4372_IOPAD(0x8d4, (PIN_INPUT | MUX_MODE5))
+ /* dss_data12.pr1_mii0_rxlink */
+ AM4372_IOPAD(0x8d0, (PIN_INPUT | MUX_MODE5))
+ /* gpio5_10.pr1_mii0_crs */
+ AM4372_IOPAD(0xa40, (PIN_INPUT | MUX_MODE5))
+ /* gpio5_8.pr1_mii0_col */
+ AM4372_IOPAD(0xa38, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a6.pr1_mii_mt1_clk */
+ AM4372_IOPAD(0x858, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a5.pr1_mii1_txd0 */
+ AM4372_IOPAD(0x854, (PIN_OUTPUT | MUX_MODE5))
+ /* gpmc_a4.pr1_mii1_txd1 */
+ AM4372_IOPAD(0x850, (PIN_OUTPUT | MUX_MODE5))
+ /* gpmc_a3.pr1_mii1_txd2 */
+ AM4372_IOPAD(0x84c, (PIN_OUTPUT | MUX_MODE5))
+ /* gpmc_a2.pr1_mii1_txd3 */
+ AM4372_IOPAD(0x848, (PIN_OUTPUT | MUX_MODE5))
+ /* gpmc_a11.pr1_mii1_rxd0 */
+ AM4372_IOPAD(0x86c, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a10.pr1_mii1_rxd1 */
+ AM4372_IOPAD(0x868, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a9.pr1_mii1_rxd2 */
+ AM4372_IOPAD(0x864, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a8.pr1_mii1_rxd3 */
+ AM4372_IOPAD(0x860, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a0.pr1_mii1_txen */
+ AM4372_IOPAD(0x840, (PIN_OUTPUT | MUX_MODE5))
+ /* gpmc_a7.pr1_mii_mr1_clk */
+ AM4372_IOPAD(0x85c, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_a1.pr1_mii1_rxdv */
+ AM4372_IOPAD(0x844, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_wpn.pr1_mii1_rxer */
+ AM4372_IOPAD(0x874, (PIN_INPUT | MUX_MODE5))
+ /* gpio5_13.pr1_mii1_rxlink */
+ AM4372_IOPAD(0xa4c, (PIN_INPUT | MUX_MODE5))
+ /* gpio5_11.pr1_mii1_crs */
+ AM4372_IOPAD(0xa44, (PIN_INPUT | MUX_MODE5))
+ /* gpmc_be1n.pr1_mii1_col */
+ AM4372_IOPAD(0x878, (PIN_INPUT | MUX_MODE5))
+ >;
+ };
+
qspi_pins_default: qspi-default-pins {
pinctrl-single,pins = <
AM4372_IOPAD(0x87c, PIN_OUTPUT_PULLUP | MUX_MODE3) /* gpmc_csn0.qspi_csn */
@@ -539,5 +661,18 @@ opp-100-600000000 {
};
&pruss1_mdio {
- status = "disabled";
+ pinctrl-0 = <&pruss1_mdio_default>;
+ pinctrl-names = "default";
+ status = "okay";
+
+ reset-gpios = <&gpio4 20 GPIO_ACTIVE_LOW>;
+ reset-delay-us = <2>; /* PHY datasheet states 1uS min */
+
+ pruss1_eth0_phy: ethernet-phy@0 {
+ reg = <0>;
+ };
+
+ pruss1_eth1_phy: ethernet-phy@1 {
+ reg = <1>;
+ };
};
--
2.43.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-05 16:21 ` [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x Parvathi Pudi
@ 2026-01-05 19:22 ` Andrew Davis
2026-01-08 12:02 ` Parvathi Pudi
2026-02-24 8:48 ` H. Nikolaus Schaller
1 sibling, 1 reply; 10+ messages in thread
From: Andrew Davis @ 2026-01-05 19:22 UTC (permalink / raw)
To: Parvathi Pudi, nm, vigneshr, khilman, rogerq, tony, robh, krzk+dt,
conor+dt, richardcochran, aaro.koskinen, andreas
Cc: andrew, linux-omap, devicetree, linux-kernel, netdev, danishanwar,
pratheesh, j-rameshbabu, praneeth, srk, rogerq, krishna, mohan,
pmohan, basharath, Murali Karicheri
On 1/5/26 10:21 AM, Parvathi Pudi wrote:
> From: Roger Quadros <rogerq@ti.com>
>
> PRU-ICSS instance consists of two PRU cores along with various
> peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
> Ethernet Peripheral(IEP), the Real Time Media Independent Interface
> controller (MII_RT), and the Enhanced Capture (eCAP) event module.
>
> The TI Sitara AM335x ICE-V2 consists of single PRU-ICSS instance,
> This patch adds the new device tree overlay file in-order to enable
> PRU-ICSS instance, along with makefile changes.
>
> The TI Sitara AM437x series of devices consists of 2 PRU-ICSS instances
> (PRU-ICSS0 and PRU-ICSS1). This patch adds the device tree nodes for the
> PRU-ICSS1 instance to support DUAL-MAC mode of operation. Support for
> Ethernet over PRU is available only for ICSS1 instance.
>
> am33xx-l4.dtsi, am4372.dtsi - Adds IEP and eCAP peripheral as child nodes
> of the PRUSS subsystem node.
>
> am335x-icev2-prueth.dtso, am437x-idk-evm.dts - Adds PRU-ICSS
> instance node along with PRU eth port information and corresponding
> port configuration. It includes interrupt mapping for packet reception,
> HW timestamp collection, and PRU Ethernet ports in MII mode,
>
> GPIO configuration, boot strapping along with delay configuration for
> individual PRU Ethernet port and other required nodes.
>
> Signed-off-by: Roger Quadros <rogerq@ti.com>
> Signed-off-by: Andrew F. Davis <afd@ti.com>
> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
> Signed-off-by: Basharath Hussain Khaja <basharath@couthit.com>
> Signed-off-by: Parvathi Pudi <parvathi@couthit.com>
> ---
> arch/arm/boot/dts/ti/omap/Makefile | 5 +
> .../ti/omap/am335x-icev2-prueth-overlay.dtso | 190 ++++++++++++++++++
> arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi | 11 +
> arch/arm/boot/dts/ti/omap/am4372.dtsi | 11 +
> arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts | 137 ++++++++++++-
> 5 files changed, 353 insertions(+), 1 deletion(-)
> create mode 100644 arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>
> diff --git a/arch/arm/boot/dts/ti/omap/Makefile b/arch/arm/boot/dts/ti/omap/Makefile
> index 14e500846875..c68948035eca 100644
> --- a/arch/arm/boot/dts/ti/omap/Makefile
> +++ b/arch/arm/boot/dts/ti/omap/Makefile
> @@ -82,6 +82,10 @@ dtb-$(CONFIG_ARCH_OMAP4) += \
> omap4-var-stk-om44.dtb \
> omap4-xyboard-mz609.dtb \
> omap4-xyboard-mz617.dtb
> +
> +am335x-icev2-prueth-dtbs := am335x-icev2.dtb \
> + am335x-icev2-prueth-overlay.dtbo
> +
> dtb-$(CONFIG_SOC_AM33XX) += \
> am335x-baltos-ir2110.dtb \
> am335x-baltos-ir3220.dtb \
> @@ -100,6 +104,7 @@ dtb-$(CONFIG_SOC_AM33XX) += \
> am335x-evmsk.dtb \
> am335x-guardian.dtb \
> am335x-icev2.dtb \
> + am335x-icev2-prueth.dtb \
> am335x-lxm.dtb \
> am335x-mba335x.dtb \
> am335x-moxa-uc-2101.dtb \
> diff --git a/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
> new file mode 100644
> index 000000000000..abde5119875f
> --- /dev/null
> +++ b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
> @@ -0,0 +1,190 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * DT overlay for IDK AM335x
> + *
> + * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
> + */
> +
> +/*
> + * AM335x ICE V2 board
> + * http://www.ti.com/tool/tmdsice3359
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/bus/ti-sysc.h>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/pinctrl/am33xx.h>
> +#include <dt-bindings/clock/am3.h>
> +
> +&{/} {
> + /* Dual-MAC Ethernet application node on PRU-ICSS */
> + pruss_eth: pruss-eth {
> + compatible = "ti,am3359-prueth";
> + ti,prus = <&pru0>, <&pru1>;
> + sram = <&ocmcram>;
> + ti,mii-rt = <&pruss_mii_rt>;
> + ti,iep = <&pruss_iep>;
> + ti,ecap = <&pruss_ecap>;
> + interrupts = <20 2 2>, <21 3 3>;
> + interrupt-names = "rx_hp", "rx_lp";
> + interrupt-parent = <&pruss_intc>;
> +
> + pinctrl-0 = <&pruss_eth_default>;
> + pinctrl-names = "default";
> +
> + ethernet-ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + pruss_emac0: ethernet-port@0 {
> + reg = <0>;
> + phy-handle = <&pruss_eth0_phy>;
> + phy-mode = "mii";
> + interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
> + interrupt-names = "rx", "emac_ptp_tx",
> + "hsr_ptp_tx";
> + /* Filled in by bootloader */
> + local-mac-address = [00 00 00 00 00 00];
> + };
> +
> + pruss_emac1: ethernet-port@1 {
> + reg = <1>;
> + phy-handle = <&pruss_eth1_phy>;
> + phy-mode = "mii";
> + interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
> + interrupt-names = "rx", "emac_ptp_tx",
> + "hsr_ptp_tx";
> + /* Filled in by bootloader */
> + local-mac-address = [00 00 00 00 00 00];
> + };
> + };
> + };
> +};
> +
> +&am33xx_pinmux {
> + /* MDIO node for PRU-ICSS */
> + pruss_mdio_default: pruss_mdio_default {
> + pinctrl-single,pins = <
> + /* gpmc_clk.pr1_mdio_mdclk */
> + AM33XX_PADCONF(0x88c, PIN_OUTPUT, MUX_MODE5)
> + /* gpmc_csn3.pr1_mdio_data */
> + AM33XX_PADCONF(0x888, PIN_INPUT, MUX_MODE5)
Have you regenerated this list lately? The pinmux tool usually puts the
comment after the PADCONF entry. It also now also shows the pin number
in the comment which is nice:
AM33XX_IOPAD(0x88c, PIN_OUTPUT, MUX_MODE5) /* (V12) gpmc_clk.pr1_mdio_mdclk */
AM33XX_IOPAD(0x888, PIN_INPUT, MUX_MODE5) /* (T13) gpmc_csn3.pr1_mdio_data */
I'd recommend regenerating these nodes to match the latest pinmux tool output.
> + /* gpmc_ben0_cle.gpio2_5 */
> + AM33XX_PADCONF(0x89c, PIN_INPUT_PULLUP, MUX_MODE7)
> + /* disable CPSW MDIO */
Is this needed? If you disable the CPSW MDIO node the pinmux should be unset,
so not sure why you are muxing these to GPIO pins.
Also, this patch is a bit busy, might be easier to review if you split it
into one for AM335x and one for AM437x changes.
Andrew
> + /* mdio_data.gpio0_0 */
> + AM33XX_PADCONF(0x948, PIN_INPUT_PULLUP, MUX_MODE7)
> + /* mdio_clk.gpio0_1 */
> + AM33XX_PADCONF(0x94c, PIN_INPUT_PULLUP, MUX_MODE7)
> + >;
> + };
> +
> + /* Pinmux configuration for PRU-ICSS */
> + pruss_eth_default: pruss_eth_default {
> + pinctrl-single,pins = <
> + /* dss_data0.pr1_mii_mt0_clk */
> + AM33XX_PADCONF(0x8a0, PIN_INPUT, MUX_MODE2)
> + /* dss_data5.pr1_mii0_txd0 */
> + AM33XX_PADCONF(0x8b4, PIN_OUTPUT, MUX_MODE2)
> + /* dss_data4.pr1_mii0_txd1 */
> + AM33XX_PADCONF(0x8b0, PIN_OUTPUT, MUX_MODE2)
> + /* dss_data3.pr1_mii0_txd2 */
> + AM33XX_PADCONF(0x8ac, PIN_OUTPUT, MUX_MODE2)
> + /* dss_data2.pr1_mii0_txd3 */
> + AM33XX_PADCONF(0x8a8, PIN_OUTPUT, MUX_MODE2)
> + /* dss_data11.pr1_mii0_rxd0 */
> + AM33XX_PADCONF(0x8cc, PIN_INPUT, MUX_MODE5)
> + /* dss_data10.pr1_mii0_rxd1 */
> + AM33XX_PADCONF(0x8c8, PIN_INPUT, MUX_MODE5)
> + /* dss_data9.pr1_mii0_rxd2 */
> + AM33XX_PADCONF(0x8c4, PIN_INPUT, MUX_MODE5)
> + /* dss_data8.pr1_mii0_rxd3 */
> + AM33XX_PADCONF(0x8c0, PIN_INPUT, MUX_MODE5)
> + /* dss_data1.pr1_mii0_txen */
> + AM33XX_PADCONF(0x8a4, PIN_OUTPUT, MUX_MODE2)
> + /* dss_data14.pr1_mii_mr0_clk */
> + AM33XX_PADCONF(0x8d8, PIN_INPUT, MUX_MODE5)
> + /* dss_data15.pr1_mii0_rxdv */
> + AM33XX_PADCONF(0x8dc, PIN_INPUT, MUX_MODE5)
> + /* dss_data13.pr1_mii0_rxer */
> + AM33XX_PADCONF(0x8d4, PIN_INPUT, MUX_MODE5)
> + /* dss_data12.pr1_mii0_rxlink */
> + AM33XX_PADCONF(0x8d0, PIN_INPUT, MUX_MODE5)
> + /* dss_pclk.pr1_mii0_crs */
> + AM33XX_PADCONF(0x8e8, PIN_INPUT, MUX_MODE2)
> +
> + /* gpmc_a0.pr1_mii_mt1_clk */
> + AM33XX_PADCONF(0x840, PIN_INPUT, MUX_MODE5)
> + /* gpmc_a4.pr1_mii1_txd0 */
> + AM33XX_PADCONF(0x850, PIN_OUTPUT, MUX_MODE5)
> + /* gpmc_a3.pr1_mii1_txd1 */
> + AM33XX_PADCONF(0x84c, PIN_OUTPUT, MUX_MODE5)
> + /* gpmc_a2.pr1_mii1_txd2 */
> + AM33XX_PADCONF(0x848, PIN_OUTPUT, MUX_MODE5)
> + /* gpmc_a1.pr1_mii1_txd3 */
> + AM33XX_PADCONF(0x844, PIN_OUTPUT, MUX_MODE5)
> + /* gpmc_a8.pr1_mii1_rxd0 */
> + AM33XX_PADCONF(0x860, PIN_INPUT, MUX_MODE5)
> + /* gpmc_a7.pr1_mii1_rxd1 */
> + AM33XX_PADCONF(0x85c, PIN_INPUT, MUX_MODE5)
> + /* gpmc_a6.pr1_mii1_rxd2 */
> + AM33XX_PADCONF(0x858, PIN_INPUT, MUX_MODE5)
> + /* gpmc_a5.pr1_mii1_rxd3 */
> + AM33XX_PADCONF(0x854, PIN_INPUT, MUX_MODE5)
> + /* gpmc_wpn.pr1_mii1_txen */
> + AM33XX_PADCONF(0x874, PIN_OUTPUT, MUX_MODE5)
> + /* gpmc_a9.pr1_mii_mr1_clk */
> + AM33XX_PADCONF(0x864, PIN_INPUT, MUX_MODE5)
> + /* gpmc_a10.pr1_mii1_rxdv */
> + AM33XX_PADCONF(0x868, PIN_INPUT, MUX_MODE5)
> + /* gpmc_a11.pr1_mii1_rxer */
> + AM33XX_PADCONF(0x86c, PIN_INPUT, MUX_MODE5)
> + /* gpmc_ben1.pr1_mii1_rxlink */
> + AM33XX_PADCONF(0x878, PIN_INPUT, MUX_MODE5)
> + /* lcd_ac_bias_en.pr1_mii1_crs */
> + AM33XX_PADCONF(0x8ec, PIN_INPUT, MUX_MODE2)
> + /* gpmc_wait0.pr1_mii1_col */
> + AM33XX_PADCONF(0x870, PIN_INPUT, MUX_MODE5)
> + >;
> + };
> +};
> +
> +&gpio3 {
> + mux-mii-hog {
> + /* ETH1 mux: Low for MII-PRU, high for RMII-CPSW */
> + output-low;
> + };
> +};
> +
> +/*
> + * Disable CPSW switch node and
> + * MDIO configuration to prevent
> + * conflict with PRU-ICSS
> + */
> +&mac_sw {
> + status = "disable";
> +};
> +
> +&davinci_mdio_sw {
> + status = "disable";
> +};
> +
> +/* PRU-ICSS MDIO configuration */
> +&pruss_mdio {
> + pinctrl-0 = <&pruss_mdio_default>;
> + pinctrl-names = "default";
> + reset-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>;
> + reset-delay-us = <2>; /* PHY datasheet states 1uS min */
> + status = "okay";
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + pruss_eth0_phy: ethernet-phy@1 {
> + reg = <1>;
> + };
> +
> + pruss_eth1_phy: ethernet-phy@3 {
> + reg = <3>;
> + };
> +};
> diff --git a/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi b/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi
> index 89d16fcc773e..a63ef307d918 100644
> --- a/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi
> +++ b/arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi
> @@ -896,6 +896,17 @@ pruss_mii_rt: mii-rt@32000 {
> reg = <0x32000 0x58>;
> };
>
> + pruss_iep: iep@2e000 {
> + compatible = "ti,am3356-icss-iep";
> + reg = <0x2e000 0x31c>;
> + clocks = <&pruss_iepclk_mux>;
> + };
> +
> + pruss_ecap: ecap@30000 {
> + compatible = "ti,pruss-ecap";
> + reg = <0x30000 0x60>;
> + };
> +
> pruss_intc: interrupt-controller@20000 {
> compatible = "ti,pruss-intc";
> reg = <0x20000 0x2000>;
> diff --git a/arch/arm/boot/dts/ti/omap/am4372.dtsi b/arch/arm/boot/dts/ti/omap/am4372.dtsi
> index 504fa6b57d39..494f251c8e6a 100644
> --- a/arch/arm/boot/dts/ti/omap/am4372.dtsi
> +++ b/arch/arm/boot/dts/ti/omap/am4372.dtsi
> @@ -476,6 +476,17 @@ pruss1_mii_rt: mii-rt@32000 {
> reg = <0x32000 0x58>;
> };
>
> + pruss1_iep: iep@2e000 {
> + compatible = "ti,am4376-icss-iep";
> + reg = <0x2e000 0x31c>;
> + clocks = <&pruss1_iepclk_mux>;
> + };
> +
> + pruss1_ecap: ecap@30000 {
> + compatible = "ti,pruss-ecap";
> + reg = <0x30000 0x60>;
> + };
> +
> pruss1_intc: interrupt-controller@20000 {
> compatible = "ti,pruss-intc";
> reg = <0x20000 0x2000>;
> diff --git a/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts b/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts
> index 826f687c368a..3d755d875a70 100644
> --- a/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts
> +++ b/arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts
> @@ -168,6 +168,48 @@ led-out7 {
> default-state = "off";
> };
> };
> +
> + /* Dual-MAC Ethernet application node on PRU-ICSS1 */
> + pruss1_eth: pruss1-eth {
> + compatible = "ti,am4376-prueth";
> + ti,prus = <&pru1_0>, <&pru1_1>;
> + sram = <&ocmcram>;
> + ti,mii-rt = <&pruss1_mii_rt>;
> + ti,iep = <&pruss1_iep>;
> + ti,ecap = <&pruss1_ecap>;
> + interrupts = <20 2 2>, <21 3 3>;
> + interrupt-names = "rx_hp", "rx_lp";
> + interrupt-parent = <&pruss1_intc>;
> +
> + pinctrl-0 = <&pruss1_eth_default>;
> + pinctrl-names = "default";
> +
> + ethernet-ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + pruss1_emac0: ethernet-port@0 {
> + reg = <0>;
> + phy-handle = <&pruss1_eth0_phy>;
> + phy-mode = "mii";
> + interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
> + interrupt-names = "rx", "emac_ptp_tx",
> + "hsr_ptp_tx";
> + /* Filled in by bootloader */
> + local-mac-address = [00 00 00 00 00 00];
> + };
> +
> + pruss1_emac1: ethernet-port@1 {
> + reg = <1>;
> + phy-handle = <&pruss1_eth1_phy>;
> + phy-mode = "mii";
> + interrupts = <21 3 3>, <27 9 5>, <24 9 5>;
> + interrupt-names = "rx", "emac_ptp_tx",
> + "hsr_ptp_tx";
> + /* Filled in by bootloader */
> + local-mac-address = [00 00 00 00 00 00];
> + };
> + };
> + };
> };
>
> &am43xx_pinmux {
> @@ -303,6 +345,86 @@ AM4372_IOPAD(0x94c, PIN_INPUT_PULLDOWN | MUX_MODE7)
> >;
> };
>
> + pruss1_mdio_default: pruss1_mdio_default {
> + pinctrl-single,pins = <
> + /* gpmc_clk.pr1_mdio_mdclk */
> + AM4372_IOPAD(0x88c, (PIN_OUTPUT | MUX_MODE5))
> + /* xdma_event_intr0.pr1_mdio_data */
> + AM4372_IOPAD(0xa70, (PIN_INPUT | MUX_MODE8))
> + /* cam1_data6.gpio4_20 */
> + AM4372_IOPAD(0xa00, (PIN_INPUT_PULLUP | MUX_MODE7))
> + >;
> + };
> +
> + pruss1_eth_default: pruss1_eth_default {
> + pinctrl-single,pins = <
> + /* dss_data0.pr1_mii_mt0_clk */
> + AM4372_IOPAD(0x8a0, (PIN_INPUT | MUX_MODE2))
> + /* dss_data5.pr1_mii0_txd0 */
> + AM4372_IOPAD(0x8b4, (PIN_OUTPUT | MUX_MODE2))
> + /* dss_data4.pr1_mii0_txd1 */
> + AM4372_IOPAD(0x8b0, (PIN_OUTPUT | MUX_MODE2))
> + /* dss_data3.pr1_mii0_txd2 */
> + AM4372_IOPAD(0x8ac, (PIN_OUTPUT | MUX_MODE2))
> + /* dss_data2.pr1_mii0_txd3 */
> + AM4372_IOPAD(0x8a8, (PIN_OUTPUT | MUX_MODE2))
> + /* dss_data11.pr1_mii0_rxd0 */
> + AM4372_IOPAD(0x8cc, (PIN_INPUT | MUX_MODE5))
> + /* dss_data10.pr1_mii0_rxd1 */
> + AM4372_IOPAD(0x8c8, (PIN_INPUT | MUX_MODE5))
> + /* dss_data9.pr1_mii0_rxd2 */
> + AM4372_IOPAD(0x8c4, (PIN_INPUT | MUX_MODE5))
> + /* dss_data8.pr1_mii0_rxd3 */
> + AM4372_IOPAD(0x8c0, (PIN_INPUT | MUX_MODE5))
> + /* dss_data1.pr1_mii0_txen */
> + AM4372_IOPAD(0x8a4, (PIN_OUTPUT | MUX_MODE2))
> + /* dss_data14.pr1_mii_mr0_clk */
> + AM4372_IOPAD(0x8d8, (PIN_INPUT | MUX_MODE5))
> + /* dss_data15.pr1_mii0_rxdv */
> + AM4372_IOPAD(0x8dc, (PIN_INPUT | MUX_MODE5))
> + /* dss_data13.pr1_mii0_rxer */
> + AM4372_IOPAD(0x8d4, (PIN_INPUT | MUX_MODE5))
> + /* dss_data12.pr1_mii0_rxlink */
> + AM4372_IOPAD(0x8d0, (PIN_INPUT | MUX_MODE5))
> + /* gpio5_10.pr1_mii0_crs */
> + AM4372_IOPAD(0xa40, (PIN_INPUT | MUX_MODE5))
> + /* gpio5_8.pr1_mii0_col */
> + AM4372_IOPAD(0xa38, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a6.pr1_mii_mt1_clk */
> + AM4372_IOPAD(0x858, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a5.pr1_mii1_txd0 */
> + AM4372_IOPAD(0x854, (PIN_OUTPUT | MUX_MODE5))
> + /* gpmc_a4.pr1_mii1_txd1 */
> + AM4372_IOPAD(0x850, (PIN_OUTPUT | MUX_MODE5))
> + /* gpmc_a3.pr1_mii1_txd2 */
> + AM4372_IOPAD(0x84c, (PIN_OUTPUT | MUX_MODE5))
> + /* gpmc_a2.pr1_mii1_txd3 */
> + AM4372_IOPAD(0x848, (PIN_OUTPUT | MUX_MODE5))
> + /* gpmc_a11.pr1_mii1_rxd0 */
> + AM4372_IOPAD(0x86c, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a10.pr1_mii1_rxd1 */
> + AM4372_IOPAD(0x868, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a9.pr1_mii1_rxd2 */
> + AM4372_IOPAD(0x864, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a8.pr1_mii1_rxd3 */
> + AM4372_IOPAD(0x860, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a0.pr1_mii1_txen */
> + AM4372_IOPAD(0x840, (PIN_OUTPUT | MUX_MODE5))
> + /* gpmc_a7.pr1_mii_mr1_clk */
> + AM4372_IOPAD(0x85c, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_a1.pr1_mii1_rxdv */
> + AM4372_IOPAD(0x844, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_wpn.pr1_mii1_rxer */
> + AM4372_IOPAD(0x874, (PIN_INPUT | MUX_MODE5))
> + /* gpio5_13.pr1_mii1_rxlink */
> + AM4372_IOPAD(0xa4c, (PIN_INPUT | MUX_MODE5))
> + /* gpio5_11.pr1_mii1_crs */
> + AM4372_IOPAD(0xa44, (PIN_INPUT | MUX_MODE5))
> + /* gpmc_be1n.pr1_mii1_col */
> + AM4372_IOPAD(0x878, (PIN_INPUT | MUX_MODE5))
> + >;
> + };
> +
> qspi_pins_default: qspi-default-pins {
> pinctrl-single,pins = <
> AM4372_IOPAD(0x87c, PIN_OUTPUT_PULLUP | MUX_MODE3) /* gpmc_csn0.qspi_csn */
> @@ -539,5 +661,18 @@ opp-100-600000000 {
> };
>
> &pruss1_mdio {
> - status = "disabled";
> + pinctrl-0 = <&pruss1_mdio_default>;
> + pinctrl-names = "default";
> + status = "okay";
> +
> + reset-gpios = <&gpio4 20 GPIO_ACTIVE_LOW>;
> + reset-delay-us = <2>; /* PHY datasheet states 1uS min */
> +
> + pruss1_eth0_phy: ethernet-phy@0 {
> + reg = <0>;
> + };
> +
> + pruss1_eth1_phy: ethernet-phy@1 {
> + reg = <1>;
> + };
> };
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-05 19:22 ` Andrew Davis
@ 2026-01-08 12:02 ` Parvathi Pudi
2026-01-16 12:47 ` Parvathi Pudi
0 siblings, 1 reply; 10+ messages in thread
From: Parvathi Pudi @ 2026-01-08 12:02 UTC (permalink / raw)
To: Andrew Davis
Cc: Parvathi Pudi, nm, Vignesh Raghavendra, Kevin Hilman, rogerq,
tony, robh, krzk+dt, conor+dt, richardcochran, aaro koskinen,
andreas, Andrew Lunn, linux-omap, devicetree, linux-kernel,
netdev, danishanwar, pratheesh, j-rameshbabu, praneeth, srk,
rogerq, krishna, mohan, pmohan, basharath, Murali Karicheri
Hi,
> On 1/5/26 10:21 AM, Parvathi Pudi wrote:
>> From: Roger Quadros <rogerq@ti.com>
>>
>> PRU-ICSS instance consists of two PRU cores along with various
>> peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
>> Ethernet Peripheral(IEP), the Real Time Media Independent Interface
>> controller (MII_RT), and the Enhanced Capture (eCAP) event module.
>>
>> The TI Sitara AM335x ICE-V2 consists of single PRU-ICSS instance,
>> This patch adds the new device tree overlay file in-order to enable
>> PRU-ICSS instance, along with makefile changes.
>>
>> The TI Sitara AM437x series of devices consists of 2 PRU-ICSS instances
>> (PRU-ICSS0 and PRU-ICSS1). This patch adds the device tree nodes for the
>> PRU-ICSS1 instance to support DUAL-MAC mode of operation. Support for
>> Ethernet over PRU is available only for ICSS1 instance.
>>
>> am33xx-l4.dtsi, am4372.dtsi - Adds IEP and eCAP peripheral as child nodes
>> of the PRUSS subsystem node.
>>
>> am335x-icev2-prueth.dtso, am437x-idk-evm.dts - Adds PRU-ICSS
>> instance node along with PRU eth port information and corresponding
>> port configuration. It includes interrupt mapping for packet reception,
>> HW timestamp collection, and PRU Ethernet ports in MII mode,
>>
>> GPIO configuration, boot strapping along with delay configuration for
>> individual PRU Ethernet port and other required nodes.
>>
>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>> Signed-off-by: Andrew F. Davis <afd@ti.com>
>> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
>> Signed-off-by: Basharath Hussain Khaja <basharath@couthit.com>
>> Signed-off-by: Parvathi Pudi <parvathi@couthit.com>
>> ---
>> arch/arm/boot/dts/ti/omap/Makefile | 5 +
>> .../ti/omap/am335x-icev2-prueth-overlay.dtso | 190 ++++++++++++++++++
>> arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi | 11 +
>> arch/arm/boot/dts/ti/omap/am4372.dtsi | 11 +
>> arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts | 137 ++++++++++++-
>> 5 files changed, 353 insertions(+), 1 deletion(-)
>> create mode 100644 arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>>
>> diff --git a/arch/arm/boot/dts/ti/omap/Makefile
>> b/arch/arm/boot/dts/ti/omap/Makefile
>> index 14e500846875..c68948035eca 100644
>> --- a/arch/arm/boot/dts/ti/omap/Makefile
>> +++ b/arch/arm/boot/dts/ti/omap/Makefile
>> @@ -82,6 +82,10 @@ dtb-$(CONFIG_ARCH_OMAP4) += \
>> omap4-var-stk-om44.dtb \
>> omap4-xyboard-mz609.dtb \
>> omap4-xyboard-mz617.dtb
>> +
>> +am335x-icev2-prueth-dtbs := am335x-icev2.dtb \
>> + am335x-icev2-prueth-overlay.dtbo
>> +
>> dtb-$(CONFIG_SOC_AM33XX) += \
>> am335x-baltos-ir2110.dtb \
>> am335x-baltos-ir3220.dtb \
>> @@ -100,6 +104,7 @@ dtb-$(CONFIG_SOC_AM33XX) += \
>> am335x-evmsk.dtb \
>> am335x-guardian.dtb \
>> am335x-icev2.dtb \
>> + am335x-icev2-prueth.dtb \
>> am335x-lxm.dtb \
>> am335x-mba335x.dtb \
>> am335x-moxa-uc-2101.dtb \
>> diff --git a/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>> b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>> new file mode 100644
>> index 000000000000..abde5119875f
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>> @@ -0,0 +1,190 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/*
>> + * DT overlay for IDK AM335x
>> + *
>> + * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
>> + */
>> +
>> +/*
>> + * AM335x ICE V2 board
>> + * http://www.ti.com/tool/tmdsice3359
>> + */
>> +
>> +/dts-v1/;
>> +/plugin/;
>> +
>> +#include <dt-bindings/bus/ti-sysc.h>
>> +#include <dt-bindings/gpio/gpio.h>
>> +#include <dt-bindings/pinctrl/am33xx.h>
>> +#include <dt-bindings/clock/am3.h>
>> +
>> +&{/} {
>> + /* Dual-MAC Ethernet application node on PRU-ICSS */
>> + pruss_eth: pruss-eth {
>> + compatible = "ti,am3359-prueth";
>> + ti,prus = <&pru0>, <&pru1>;
>> + sram = <&ocmcram>;
>> + ti,mii-rt = <&pruss_mii_rt>;
>> + ti,iep = <&pruss_iep>;
>> + ti,ecap = <&pruss_ecap>;
>> + interrupts = <20 2 2>, <21 3 3>;
>> + interrupt-names = "rx_hp", "rx_lp";
>> + interrupt-parent = <&pruss_intc>;
>> +
>> + pinctrl-0 = <&pruss_eth_default>;
>> + pinctrl-names = "default";
>> +
>> + ethernet-ports {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + pruss_emac0: ethernet-port@0 {
>> + reg = <0>;
>> + phy-handle = <&pruss_eth0_phy>;
>> + phy-mode = "mii";
>> + interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
>> + interrupt-names = "rx", "emac_ptp_tx",
>> + "hsr_ptp_tx";
>> + /* Filled in by bootloader */
>> + local-mac-address = [00 00 00 00 00 00];
>> + };
>> +
>> + pruss_emac1: ethernet-port@1 {
>> + reg = <1>;
>> + phy-handle = <&pruss_eth1_phy>;
>> + phy-mode = "mii";
>> + interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
>> + interrupt-names = "rx", "emac_ptp_tx",
>> + "hsr_ptp_tx";
>> + /* Filled in by bootloader */
>> + local-mac-address = [00 00 00 00 00 00];
>> + };
>> + };
>> + };
>> +};
>> +
>> +&am33xx_pinmux {
>> + /* MDIO node for PRU-ICSS */
>> + pruss_mdio_default: pruss_mdio_default {
>> + pinctrl-single,pins = <
>> + /* gpmc_clk.pr1_mdio_mdclk */
>> + AM33XX_PADCONF(0x88c, PIN_OUTPUT, MUX_MODE5)
>> + /* gpmc_csn3.pr1_mdio_data */
>> + AM33XX_PADCONF(0x888, PIN_INPUT, MUX_MODE5)
>
> Have you regenerated this list lately? The pinmux tool usually puts the
> comment after the PADCONF entry. It also now also shows the pin number
> in the comment which is nice:
>
> AM33XX_IOPAD(0x88c, PIN_OUTPUT, MUX_MODE5) /* (V12) gpmc_clk.pr1_mdio_mdclk */
> AM33XX_IOPAD(0x888, PIN_INPUT, MUX_MODE5) /* (T13) gpmc_csn3.pr1_mdio_data */
>
> I'd recommend regenerating these nodes to match the latest pinmux tool output.
>
Sure, we will check and regenerate these nodes using the pinmux tool and
update accordingly.
>> + /* gpmc_ben0_cle.gpio2_5 */
>> + AM33XX_PADCONF(0x89c, PIN_INPUT_PULLUP, MUX_MODE7)
>> + /* disable CPSW MDIO */
>
> Is this needed? If you disable the CPSW MDIO node the pinmux should be unset,
> so not sure why you are muxing these to GPIO pins.
>
We will review and get back with more details on this.
> Also, this patch is a bit busy, might be easier to review if you split it
> into one for AM335x and one for AM437x changes.
>
We will split the changes into two patches, one for AM335x
and one for AM437x, and address this in the next version.
Thanks and Regards,
Parvathi.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-08 12:02 ` Parvathi Pudi
@ 2026-01-16 12:47 ` Parvathi Pudi
2026-01-16 13:55 ` Andrew Lunn
0 siblings, 1 reply; 10+ messages in thread
From: Parvathi Pudi @ 2026-01-16 12:47 UTC (permalink / raw)
To: Andrew Davis
Cc: nm, Vignesh Raghavendra, Kevin Hilman, rogerq, tony, robh,
krzk+dt, conor+dt, richardcochran, aaro koskinen, andreas,
Andrew Lunn, linux-omap, devicetree, linux-kernel, netdev,
danishanwar, pratheesh, j-rameshbabu, praneeth, srk, rogerq,
krishna, mohan, pmohan, basharath, Murali Karicheri, parvathi
Hi,
> Hi,
>
>> On 1/5/26 10:21 AM, Parvathi Pudi wrote:
>>> From: Roger Quadros <rogerq@ti.com>
>>>
>>> PRU-ICSS instance consists of two PRU cores along with various
>>> peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
>>> Ethernet Peripheral(IEP), the Real Time Media Independent Interface
>>> controller (MII_RT), and the Enhanced Capture (eCAP) event module.
>>>
>>> The TI Sitara AM335x ICE-V2 consists of single PRU-ICSS instance,
>>> This patch adds the new device tree overlay file in-order to enable
>>> PRU-ICSS instance, along with makefile changes.
>>>
>>> The TI Sitara AM437x series of devices consists of 2 PRU-ICSS instances
>>> (PRU-ICSS0 and PRU-ICSS1). This patch adds the device tree nodes for the
>>> PRU-ICSS1 instance to support DUAL-MAC mode of operation. Support for
>>> Ethernet over PRU is available only for ICSS1 instance.
>>>
>>> am33xx-l4.dtsi, am4372.dtsi - Adds IEP and eCAP peripheral as child nodes
>>> of the PRUSS subsystem node.
>>>
>>> am335x-icev2-prueth.dtso, am437x-idk-evm.dts - Adds PRU-ICSS
>>> instance node along with PRU eth port information and corresponding
>>> port configuration. It includes interrupt mapping for packet reception,
>>> HW timestamp collection, and PRU Ethernet ports in MII mode,
>>>
>>> GPIO configuration, boot strapping along with delay configuration for
>>> individual PRU Ethernet port and other required nodes.
>>>
>>> Signed-off-by: Roger Quadros <rogerq@ti.com>
>>> Signed-off-by: Andrew F. Davis <afd@ti.com>
>>> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
>>> Signed-off-by: Basharath Hussain Khaja <basharath@couthit.com>
>>> Signed-off-by: Parvathi Pudi <parvathi@couthit.com>
>>> ---
>>> arch/arm/boot/dts/ti/omap/Makefile | 5 +
>>> .../ti/omap/am335x-icev2-prueth-overlay.dtso | 190 ++++++++++++++++++
>>> arch/arm/boot/dts/ti/omap/am33xx-l4.dtsi | 11 +
>>> arch/arm/boot/dts/ti/omap/am4372.dtsi | 11 +
>>> arch/arm/boot/dts/ti/omap/am437x-idk-evm.dts | 137 ++++++++++++-
>>> 5 files changed, 353 insertions(+), 1 deletion(-)
>>> create mode 100644 arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>>>
>>> diff --git a/arch/arm/boot/dts/ti/omap/Makefile
>>> b/arch/arm/boot/dts/ti/omap/Makefile
>>> index 14e500846875..c68948035eca 100644
>>> --- a/arch/arm/boot/dts/ti/omap/Makefile
>>> +++ b/arch/arm/boot/dts/ti/omap/Makefile
>>> @@ -82,6 +82,10 @@ dtb-$(CONFIG_ARCH_OMAP4) += \
>>> omap4-var-stk-om44.dtb \
>>> omap4-xyboard-mz609.dtb \
>>> omap4-xyboard-mz617.dtb
>>> +
>>> +am335x-icev2-prueth-dtbs := am335x-icev2.dtb \
>>> + am335x-icev2-prueth-overlay.dtbo
>>> +
>>> dtb-$(CONFIG_SOC_AM33XX) += \
>>> am335x-baltos-ir2110.dtb \
>>> am335x-baltos-ir3220.dtb \
>>> @@ -100,6 +104,7 @@ dtb-$(CONFIG_SOC_AM33XX) += \
>>> am335x-evmsk.dtb \
>>> am335x-guardian.dtb \
>>> am335x-icev2.dtb \
>>> + am335x-icev2-prueth.dtb \
>>> am335x-lxm.dtb \
>>> am335x-mba335x.dtb \
>>> am335x-moxa-uc-2101.dtb \
>>> diff --git a/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>>> b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>>> new file mode 100644
>>> index 000000000000..abde5119875f
>>> --- /dev/null
>>> +++ b/arch/arm/boot/dts/ti/omap/am335x-icev2-prueth-overlay.dtso
>>> @@ -0,0 +1,190 @@
>>> +// SPDX-License-Identifier: GPL-2.0
>>> +/*
>>> + * DT overlay for IDK AM335x
>>> + *
>>> + * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
>>> + */
>>> +
>>> +/*
>>> + * AM335x ICE V2 board
>>> + * http://www.ti.com/tool/tmdsice3359
>>> + */
>>> +
>>> +/dts-v1/;
>>> +/plugin/;
>>> +
>>> +#include <dt-bindings/bus/ti-sysc.h>
>>> +#include <dt-bindings/gpio/gpio.h>
>>> +#include <dt-bindings/pinctrl/am33xx.h>
>>> +#include <dt-bindings/clock/am3.h>
>>> +
>>> +&{/} {
>>> + /* Dual-MAC Ethernet application node on PRU-ICSS */
>>> + pruss_eth: pruss-eth {
>>> + compatible = "ti,am3359-prueth";
>>> + ti,prus = <&pru0>, <&pru1>;
>>> + sram = <&ocmcram>;
>>> + ti,mii-rt = <&pruss_mii_rt>;
>>> + ti,iep = <&pruss_iep>;
>>> + ti,ecap = <&pruss_ecap>;
>>> + interrupts = <20 2 2>, <21 3 3>;
>>> + interrupt-names = "rx_hp", "rx_lp";
>>> + interrupt-parent = <&pruss_intc>;
>>> +
>>> + pinctrl-0 = <&pruss_eth_default>;
>>> + pinctrl-names = "default";
>>> +
>>> + ethernet-ports {
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> + pruss_emac0: ethernet-port@0 {
>>> + reg = <0>;
>>> + phy-handle = <&pruss_eth0_phy>;
>>> + phy-mode = "mii";
>>> + interrupts = <20 2 2>, <26 6 6>, <23 6 6>;
>>> + interrupt-names = "rx", "emac_ptp_tx",
>>> + "hsr_ptp_tx";
>>> + /* Filled in by bootloader */
>>> + local-mac-address = [00 00 00 00 00 00];
>>> + };
>>> +
>>> + pruss_emac1: ethernet-port@1 {
>>> + reg = <1>;
>>> + phy-handle = <&pruss_eth1_phy>;
>>> + phy-mode = "mii";
>>> + interrupts = <21 3 3>, <27 9 7>, <24 9 7>;
>>> + interrupt-names = "rx", "emac_ptp_tx",
>>> + "hsr_ptp_tx";
>>> + /* Filled in by bootloader */
>>> + local-mac-address = [00 00 00 00 00 00];
>>> + };
>>> + };
>>> + };
>>> +};
>>> +
>>> +&am33xx_pinmux {
>>> + /* MDIO node for PRU-ICSS */
>>> + pruss_mdio_default: pruss_mdio_default {
>>> + pinctrl-single,pins = <
>>> + /* gpmc_clk.pr1_mdio_mdclk */
>>> + AM33XX_PADCONF(0x88c, PIN_OUTPUT, MUX_MODE5)
>>> + /* gpmc_csn3.pr1_mdio_data */
>>> + AM33XX_PADCONF(0x888, PIN_INPUT, MUX_MODE5)
>>
>> Have you regenerated this list lately? The pinmux tool usually puts the
>> comment after the PADCONF entry. It also now also shows the pin number
>> in the comment which is nice:
>>
>> AM33XX_IOPAD(0x88c, PIN_OUTPUT, MUX_MODE5) /* (V12) gpmc_clk.pr1_mdio_mdclk */
>> AM33XX_IOPAD(0x888, PIN_INPUT, MUX_MODE5) /* (T13) gpmc_csn3.pr1_mdio_data */
>>
>> I'd recommend regenerating these nodes to match the latest pinmux tool output.
>>
>
> Sure, we will check and regenerate these nodes using the pinmux tool and
> update accordingly.
>
>>> + /* gpmc_ben0_cle.gpio2_5 */
>>> + AM33XX_PADCONF(0x89c, PIN_INPUT_PULLUP, MUX_MODE7)
>>> + /* disable CPSW MDIO */
>>
>> Is this needed? If you disable the CPSW MDIO node the pinmux should be unset,
>> so not sure why you are muxing these to GPIO pins.
>>
>
> We will review and get back with more details on this.
>
On the AM335x board, the CPSW MDIO and PRUSS MDIO signals are routed to the same physical
pins (as shown in the schematic, see page 10 “MII_MUX” in tmdxice3359_sch_3h0013_v2_1a.pdf
from https://www.ti.com/lit/zip/TIDR336 ). Because of this shared routing, the pinmux
configuration applied by U-Boot for CPSW MDIO remains active even if the CPSW MDIO node is
later disabled in Linux, and Linux does not automatically revert the pins to their reset state.
To prevent signal contention and ensure correct PRUSS MDIO operation, we explicitly re-mux
the CPSW MDIO pins to GPIO in the PRUSS pinctrl. Without this explicit reconfiguration, we
observed PHY connection issues during startup.
Thanks and Regards,
Parvathi.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-16 12:47 ` Parvathi Pudi
@ 2026-01-16 13:55 ` Andrew Lunn
2026-02-24 8:09 ` Parvathi Pudi
0 siblings, 1 reply; 10+ messages in thread
From: Andrew Lunn @ 2026-01-16 13:55 UTC (permalink / raw)
To: Parvathi Pudi
Cc: Andrew Davis, nm, Vignesh Raghavendra, Kevin Hilman, rogerq, tony,
robh, krzk+dt, conor+dt, richardcochran, aaro koskinen, andreas,
linux-omap, devicetree, linux-kernel, netdev, danishanwar,
pratheesh, j-rameshbabu, praneeth, srk, rogerq, krishna, mohan,
pmohan, basharath, Murali Karicheri
> On the AM335x board, the CPSW MDIO and PRUSS MDIO signals are routed to the same physical
> pins (as shown in the schematic, see page 10 “MII_MUX” in tmdxice3359_sch_3h0013_v2_1a.pdf
> from https://www.ti.com/lit/zip/TIDR336 ). Because of this shared routing, the pinmux
> configuration applied by U-Boot for CPSW MDIO remains active even if the CPSW MDIO node is
> later disabled in Linux, and Linux does not automatically revert the pins to their reset state.
It is generally a bad idea to rely on the bootloader. I would make the
CPSW MDIO configure the pins how it needs it. The PRUSS MDIO should
also configure the pins how it needs them. However, it is not as
simple as that...
Looking at the schematic, what you have is ugly. You literally wire
the outputs together, without a hardware mux. For MDC you assume one
is Hi-Z, while the other drives the line. For MDIO it does not matter,
both are inputs. so Hi-Z.
I actually think you might need to represent this in Linux, with
something i would call a pinmux-mux. You give it two sets of pinmux
configurations. The active device claims the mux and gets it to set
the two sets of pinmux as needed. Also, just setting the pinmux to
GPIO is not sufficient, you also need to ensure the GPIO is configured
for input, so the lines go Hi-Z. Often pinmux and GPIO controllers are
interconnected, so the pinmux subsystem might be able to do that for
you.
I don't know if a pinmux-mux already exists in Linux. You probably
want to ask on the pinmux mailing list, or they might have a different
idea how to cleanly do this.
Andrew
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-16 13:55 ` Andrew Lunn
@ 2026-02-24 8:09 ` Parvathi Pudi
0 siblings, 0 replies; 10+ messages in thread
From: Parvathi Pudi @ 2026-02-24 8:09 UTC (permalink / raw)
To: Andrew Lunn
Cc: Andrew Davis, nm, Vignesh Raghavendra, Kevin Hilman, rogerq, tony,
robh, krzk+dt, conor+dt, richardcochran, aaro koskinen, andreas,
linux-omap, devicetree, linux-kernel, netdev, danishanwar,
pratheesh, j-rameshbabu, praneeth, srk, rogerq, krishna, mohan,
pmohan, basharath, Murali Karicheri, Parvathi Pudi
Hi,
>> On the AM335x board, the CPSW MDIO and PRUSS MDIO signals are routed to the same
>> physical
>> pins (as shown in the schematic, see page 10 “MII_MUX” in
>> tmdxice3359_sch_3h0013_v2_1a.pdf
>> from https://www.ti.com/lit/zip/TIDR336 ). Because of this shared routing, the
>> pinmux
>> configuration applied by U-Boot for CPSW MDIO remains active even if the CPSW
>> MDIO node is
>> later disabled in Linux, and Linux does not automatically revert the pins to
>> their reset state.
>
> It is generally a bad idea to rely on the bootloader. I would make the
> CPSW MDIO configure the pins how it needs it. The PRUSS MDIO should
> also configure the pins how it needs them. However, it is not as
> simple as that...
>
On AM335x, the MDIO interface is selected by a hardware jumper before the
bootloader runs. The selection is latched in hardware, so only one MDIO
controller (CPSW or PRUSS) is active at a time.
Since the hardware choice is fixed prior to Linux boot, we decided to ensure
in U-Boot that the pins are configured according to the selected hardware latch.
Linux still configures the active MDIO controller as required via its DT and
pinctrl settings. The U‑Boot change ensures a clean initial state that matches
the hardware latched configuration, and we have this prepared as a patch that
will be submitted to mainline U‑Boot shortly.
> Looking at the schematic, what you have is ugly. You literally wire
> the outputs together, without a hardware mux. For MDC you assume one
> is Hi-Z, while the other drives the line. For MDIO it does not matter,
> both are inputs. so Hi-Z.
>
Although the schematic shows the signals tied together without an explicit mux,
the hardware jumper selects RMII (CPSW) or MII (PRUSS) before boot. Only the
selected block is enabled, and the other remains inactive, so the lines are never
driven concurrently.
> I actually think you might need to represent this in Linux, with
> something i would call a pinmux-mux. You give it two sets of pinmux
> configurations. The active device claims the mux and gets it to set
> the two sets of pinmux as needed. Also, just setting the pinmux to
> GPIO is not sufficient, you also need to ensure the GPIO is configured
> for input, so the lines go Hi-Z. Often pinmux and GPIO controllers are
> interconnected, so the pinmux subsystem might be able to do that for
> you.
>
> I don't know if a pinmux-mux already exists in Linux. You probably
> want to ask on the pinmux mailing list, or they might have a different
> idea how to cleanly do this.
>
> Andrew
In this case, the selection is static and determined by hardware via a jumper,
not switchable at runtime. Linux reflects this by choosing the Device Tree
configuration corresponding to the latched jumper, it enables the selected
MDIO controller and sets up its pinmux, while the other MDIO controller
remains disabled.
We will update the patches by removing the CPSW pin reset configuration in
ICSS context and post the next version shortly.
Thanks and Regards,
Parvathi
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-01-05 16:21 ` [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x Parvathi Pudi
2026-01-05 19:22 ` Andrew Davis
@ 2026-02-24 8:48 ` H. Nikolaus Schaller
2026-02-26 8:28 ` Parvathi Pudi
1 sibling, 1 reply; 10+ messages in thread
From: H. Nikolaus Schaller @ 2026-02-24 8:48 UTC (permalink / raw)
To: Parvathi Pudi
Cc: nm, vigneshr, afd, khilman, rogerq, tony, robh, krzk+dt, conor+dt,
richardcochran, aaro.koskinen, andreas, andrew, linux-omap,
devicetree, linux-kernel, netdev, danishanwar, pratheesh,
j-rameshbabu, praneeth, srk, rogerq, krishna, mohan, pmohan,
basharath, Murali Karicheri
Hi,
> Am 05.01.2026 um 17:21 schrieb Parvathi Pudi <parvathi@couthit.com>:
>
> From: Roger Quadros <rogerq@ti.com>
>
> PRU-ICSS instance consists of two PRU cores along with various
> peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
> Ethernet Peripheral(IEP), the Real Time Media Independent Interface
> controller (MII_RT), and the Enhanced Capture (eCAP) event module.
>
I am just wondering about the subject of this patch.
It reads as if general AM335x and AM437x support is introduced for the first time.
IMHO it should tell which subsystem/improvement is added.
BR and thanks,
Nikolaus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x
2026-02-24 8:48 ` H. Nikolaus Schaller
@ 2026-02-26 8:28 ` Parvathi Pudi
0 siblings, 0 replies; 10+ messages in thread
From: Parvathi Pudi @ 2026-02-26 8:28 UTC (permalink / raw)
To: H. Nikolaus Schaller
Cc: nm, Vignesh Raghavendra, afd, Kevin Hilman, rogerq, tony, robh,
krzk+dt, conor+dt, richardcochran, aaro koskinen, andreas,
Andrew Lunn, linux-omap, devicetree, linux-kernel, netdev,
danishanwar, pratheesh, j-rameshbabu, praneeth, srk, rogerq,
krishna, mohan, pmohan, basharath, Murali Karicheri
Hi,
> Hi,
>
>> Am 05.01.2026 um 17:21 schrieb Parvathi Pudi <parvathi@couthit.com>:
>>
>> From: Roger Quadros <rogerq@ti.com>
>>
>> PRU-ICSS instance consists of two PRU cores along with various
>> peripherals such as the Interrupt Controller (PRU_INTC), the Industrial
>> Ethernet Peripheral(IEP), the Real Time Media Independent Interface
>> controller (MII_RT), and the Enhanced Capture (eCAP) event module.
>>
>
> I am just wondering about the subject of this patch.
>
> It reads as if general AM335x and AM437x support is introduced for the first
> time.
> IMHO it should tell which subsystem/improvement is added.
>
Sure, we will address this in the next version.
Thanks and Regards,
Parvathi
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-02-26 8:29 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-05 16:21 [PATCH v4 0/2] Add support for ICSSM Ethernet on AM57x, AM437x, and AM335x Parvathi Pudi
2026-01-05 16:21 ` [PATCH v4 1/2] arm: dts: ti: Adds device tree nodes for PRU Cores, IEP and eCAP modules of PRU-ICSS2 Instance Parvathi Pudi
2026-01-05 16:21 ` [PATCH v4 2/2] arm: dts: ti: Adds support for AM335x and AM437x Parvathi Pudi
2026-01-05 19:22 ` Andrew Davis
2026-01-08 12:02 ` Parvathi Pudi
2026-01-16 12:47 ` Parvathi Pudi
2026-01-16 13:55 ` Andrew Lunn
2026-02-24 8:09 ` Parvathi Pudi
2026-02-24 8:48 ` H. Nikolaus Schaller
2026-02-26 8:28 ` Parvathi Pudi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox