2023-09-22 03:18:36

by MD Danish Anwar

[permalink] [raw]
Subject: [PATCH v2 2/4] arm64: dts: ti: k3-am654-base-board: add ICSSG2 Ethernet support

ICSSG2 provides dual Gigabit Ethernet support.

For support SR2.0 ICSSG Ethernet firmware:
- provide different firmware blobs and use TX_PRU.
- IEP0 is used as PTP Hardware Clock and can only be used for one port.
- TX timestamp notification comes via INTC interrupt.

Signed-off-by: MD Danish Anwar <[email protected]>
---
arch/arm64/boot/dts/ti/Makefile | 4 +-
...se-board.dts => k3-am654-common-board.dts} | 0
arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso | 145 ++++++++++++++++++
3 files changed, 148 insertions(+), 1 deletion(-)
rename arch/arm64/boot/dts/ti/{k3-am654-base-board.dts => k3-am654-common-board.dts} (100%)
create mode 100644 arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso

diff --git a/arch/arm64/boot/dts/ti/Makefile b/arch/arm64/boot/dts/ti/Makefile
index e7b8e2e7f083..85c91f5e832e 100644
--- a/arch/arm64/boot/dts/ti/Makefile
+++ b/arch/arm64/boot/dts/ti/Makefile
@@ -42,12 +42,14 @@ dtb-$(CONFIG_ARCH_K3) += k3-am642-tqma64xxl-mbax4xxl-sdcard.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am642-tqma64xxl-mbax4xxl-wlan.dtb

# Boards with AM65x SoC
-k3-am654-gp-evm-dtbs := k3-am654-base-board.dtb k3-am654-base-board-rocktech-rk101-panel.dtbo
+k3-am654-gp-evm-dtbs := k3-am654-common-board.dtb k3-am654-base-board-rocktech-rk101-panel.dtbo
+k3-am654-base-board-dtbs := k3-am654-common-board.dtb k3-am654-icssg2.dtbo
dtb-$(CONFIG_ARCH_K3) += k3-am6528-iot2050-basic.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am6528-iot2050-basic-pg2.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am6548-iot2050-advanced.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am6548-iot2050-advanced-m2.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am6548-iot2050-advanced-pg2.dtb
+dtb-$(CONFIG_ARCH_K3) += k3-am654-common-board.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am654-base-board.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am654-gp-evm.dtb

diff --git a/arch/arm64/boot/dts/ti/k3-am654-base-board.dts b/arch/arm64/boot/dts/ti/k3-am654-common-board.dts
similarity index 100%
rename from arch/arm64/boot/dts/ti/k3-am654-base-board.dts
rename to arch/arm64/boot/dts/ti/k3-am654-common-board.dts
diff --git a/arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso b/arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso
new file mode 100644
index 000000000000..e91c20947d05
--- /dev/null
+++ b/arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso
@@ -0,0 +1,145 @@
+// SPDX-License-Identifier: GPL-2.0
+/**
+ * DT overlay for IDK application board on AM654 EVM
+ *
+ * Copyright (C) 2018-2023 Texas Instruments Incorporated - https://www.ti.com/
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/net/ti-dp83867.h>
+#include "k3-pinctrl.h"
+
+&{/} {
+ aliases {
+ ethernet1 = &icssg2_emac0;
+ ethernet2 = &icssg2_emac1;
+ };
+
+ /* Dual Ethernet application node on PRU-ICSSG2 */
+ icssg2_eth: icssg2-eth {
+ compatible = "ti,am654-icssg-prueth";
+ pinctrl-names = "default";
+ pinctrl-0 = <&icssg2_rgmii_pins_default>;
+ sram = <&msmc_ram>;
+ ti,prus = <&pru2_0>, <&rtu2_0>, <&tx_pru2_0>,
+ <&pru2_1>, <&rtu2_1>, <&tx_pru2_1>;
+ firmware-name = "ti-pruss/am65x-sr2-pru0-prueth-fw.elf",
+ "ti-pruss/am65x-sr2-rtu0-prueth-fw.elf",
+ "ti-pruss/am65x-sr2-txpru0-prueth-fw.elf",
+ "ti-pruss/am65x-sr2-pru1-prueth-fw.elf",
+ "ti-pruss/am65x-sr2-rtu1-prueth-fw.elf",
+ "ti-pruss/am65x-sr2-txpru1-prueth-fw.elf";
+
+ ti,pruss-gp-mux-sel = <2>, /* MII mode */
+ <2>,
+ <2>,
+ <2>, /* MII mode */
+ <2>,
+ <2>;
+
+ ti,mii-g-rt = <&icssg2_mii_g_rt>;
+ ti,mii-rt = <&icssg2_mii_rt>;
+ ti,iep = <&icssg2_iep0>, <&icssg2_iep1>;
+
+ interrupt-parent = <&icssg2_intc>;
+ interrupts = <24 0 2>, <25 1 3>;
+ interrupt-names = "tx_ts0", "tx_ts1";
+
+ dmas = <&main_udmap 0xc300>, /* egress slice 0 */
+ <&main_udmap 0xc301>, /* egress slice 0 */
+ <&main_udmap 0xc302>, /* egress slice 0 */
+ <&main_udmap 0xc303>, /* egress slice 0 */
+ <&main_udmap 0xc304>, /* egress slice 1 */
+ <&main_udmap 0xc305>, /* egress slice 1 */
+ <&main_udmap 0xc306>, /* egress slice 1 */
+ <&main_udmap 0xc307>, /* egress slice 1 */
+ <&main_udmap 0x4300>, /* ingress slice 0 */
+ <&main_udmap 0x4301>; /* ingress slice 1 */
+
+ dma-names = "tx0-0", "tx0-1", "tx0-2", "tx0-3",
+ "tx1-0", "tx1-1", "tx1-2", "tx1-3",
+ "rx0", "rx1";
+ ethernet-ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ icssg2_emac0: port@0 {
+ reg = <0>;
+ phy-handle = <&icssg2_phy0>;
+ phy-mode = "rgmii-id";
+ ti,syscon-rgmii-delay = <&scm_conf 0x4120>;
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+ icssg2_emac1: port@1 {
+ reg = <1>;
+ phy-handle = <&icssg2_phy1>;
+ phy-mode = "rgmii-id";
+ ti,syscon-rgmii-delay = <&scm_conf 0x4124>;
+ /* Filled in by bootloader */
+ local-mac-address = [00 00 00 00 00 00];
+ };
+ };
+ };
+};
+
+&main_pmx0 {
+
+ icssg2_mdio_pins_default: icssg2-mdio-default-pins {
+ pinctrl-single,pins = <
+ AM65X_IOPAD(0x0094, PIN_INPUT, 2) /* (AC19) PRG2_PRU0_GPO7.PRG2_MDIO0_MDIO */
+ AM65X_IOPAD(0x00c8, PIN_OUTPUT, 2) /* (AE15) PRG2_PRU1_GPO7.PRG2_MDIO0_MDC */
+ >;
+ };
+
+ icssg2_rgmii_pins_default: icssg2-rgmii-default-pins {
+ pinctrl-single,pins = <
+ AM65X_IOPAD(0x00ac, PIN_INPUT, 2) /* (AH15) PRG2_PRU1_GPO0.PRG2_RGMII2_RD0 */
+ AM65X_IOPAD(0x00b0, PIN_INPUT, 2) /* (AC16) PRG2_PRU1_GPO1.PRG2_RGMII2_RD1 */
+ AM65X_IOPAD(0x00b4, PIN_INPUT, 2) /* (AD17) PRG2_PRU1_GPO2.PRG2_RGMII2_RD2 */
+ AM65X_IOPAD(0x00b8, PIN_INPUT, 2) /* (AH14) PRG2_PRU1_GPO3.PRG2_RGMII2_RD3 */
+ AM65X_IOPAD(0x00cc, PIN_OUTPUT, 2) /* (AD15) PRG2_PRU1_GPO8.PRG2_RGMII2_TD0 */
+ AM65X_IOPAD(0x00d0, PIN_OUTPUT, 2) /* (AF14) PRG2_PRU1_GPO9.PRG2_RGMII2_TD1 */
+ AM65X_IOPAD(0x00d4, PIN_OUTPUT, 2) /* (AC15) PRG2_PRU1_GPO10.PRG2_RGMII2_TD2 */
+ AM65X_IOPAD(0x00d8, PIN_OUTPUT, 2) /* (AD14) PRG2_PRU1_GPO11.PRG2_RGMII2_TD3 */
+ AM65X_IOPAD(0x00dc, PIN_INPUT, 2) /* (AE14) PRG2_PRU1_GPO16.PRG2_RGMII2_TXC */
+ AM65X_IOPAD(0x00c4, PIN_OUTPUT, 2) /* (AC17) PRG2_PRU1_GPO6.PRG2_RGMII2_TX_CTL */
+ AM65X_IOPAD(0x00c0, PIN_INPUT, 2) /* (AG15) PRG2_PRU1_GPO5.PRG2_RGMII2_RXC */
+ AM65X_IOPAD(0x00bc, PIN_INPUT, 2) /* (AG14) PRG2_PRU1_GPO4.PRG2_RGMII2_RX_CTL */
+
+ AM65X_IOPAD(0x0078, PIN_INPUT, 2) /* (AF18) PRG2_PRU0_GPO0.PRG2_RGMII1_RD0 */
+ AM65X_IOPAD(0x007c, PIN_INPUT, 2) /* (AE18) PRG2_PRU0_GPO1.PRG2_RGMII1_RD1 */
+ AM65X_IOPAD(0x0080, PIN_INPUT, 2) /* (AH17) PRG2_PRU0_GPO2.PRG2_RGMII1_RD2 */
+ AM65X_IOPAD(0x0084, PIN_INPUT, 2) /* (AG18) PRG2_PRU0_GPO3.PRG2_RGMII1_RD3 */
+ AM65X_IOPAD(0x0098, PIN_OUTPUT, 2) /* (AH16) PRG2_PRU0_GPO8.PRG2_RGMII1_TD0 */
+ AM65X_IOPAD(0x009c, PIN_OUTPUT, 2) /* (AG16) PRG2_PRU0_GPO9.PRG2_RGMII1_TD1 */
+ AM65X_IOPAD(0x00a0, PIN_OUTPUT, 2) /* (AF16) PRG2_PRU0_GPO10.PRG2_RGMII1_TD2 */
+ AM65X_IOPAD(0x00a4, PIN_OUTPUT, 2) /* (AE16) PRG2_PRU0_GPO11.PRG2_RGMII1_TD3 */
+ AM65X_IOPAD(0x00a8, PIN_INPUT, 2) /* (AD16) PRG2_PRU0_GPO16.PRG2_RGMII1_TXC */
+ AM65X_IOPAD(0x0090, PIN_OUTPUT, 2) /* (AE17) PRG2_PRU0_GPO6.PRG2_RGMII1_TX_CTL */
+ AM65X_IOPAD(0x008c, PIN_INPUT, 2) /* (AF17) PRG2_PRU0_GPO5.PRG2_RGMII1_RXC */
+ AM65X_IOPAD(0x0088, PIN_INPUT, 2) /* (AG17) PRG2_PRU0_GPO4.PRG2_RGMII1_RX_CTL */
+ >;
+ };
+};
+
+&icssg2_mdio {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&icssg2_mdio_pins_default>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ icssg2_phy0: ethernet-phy@0 {
+ reg = <0>;
+ ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
+ ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
+ };
+
+ icssg2_phy1: ethernet-phy@3 {
+ reg = <3>;
+ ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
+ ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
+ };
+};
--
2.34.1


2023-09-22 04:55:29

by Andrew Lunn

[permalink] [raw]
Subject: Re: [PATCH v2 2/4] arm64: dts: ti: k3-am654-base-board: add ICSSG2 Ethernet support

> + /* Dual Ethernet application node on PRU-ICSSG2 */

How relevant is "Dual Ethernet" here? You are talking of adding
switchdev support, and runtime swapping the application. All these
properties should be valid for the switch application as well?

In fact, you are describing hardware here, so the application should
not actually matter.

So maybe this comment should be:

Ethernet node on PRU-ICSSG2

Andrew

2023-09-22 14:23:45

by MD Danish Anwar

[permalink] [raw]
Subject: Re: [PATCH v2 2/4] arm64: dts: ti: k3-am654-base-board: add ICSSG2 Ethernet support

On 21/09/23 21:40, Andrew Lunn wrote:
>> + /* Dual Ethernet application node on PRU-ICSSG2 */
>
> How relevant is "Dual Ethernet" here? You are talking of adding
> switchdev support, and runtime swapping the application. All these
> properties should be valid for the switch application as well?
>

All these properties and nodes are valid for switch mode as well. The
comment of "Dual Ethernet application node" is mainly to describe the
two physical ports that are present on the AM654x-EVM.

> In fact, you are describing hardware here, so the application should
> not actually matter.
>
> So maybe this comment should be:
>
> Ethernet node on PRU-ICSSG2
>

Sure, this makes more sense. I will change the comment.

> Andrew

--
Thanks and Regards,
Danish

2023-09-25 16:23:22

by Andrew Davis

[permalink] [raw]
Subject: Re: [PATCH v2 2/4] arm64: dts: ti: k3-am654-base-board: add ICSSG2 Ethernet support

On 9/25/23 3:21 AM, MD Danish Anwar wrote:
> Hi Andrew,
>
> On 22/09/23 09:52, MD Danish Anwar wrote:
>> On 21/09/23 22:57, Andrew Davis wrote:
>>> On 9/21/23 1:09 AM, MD Danish Anwar wrote:
>>>> ICSSG2 provides dual Gigabit Ethernet support.
>>>>
>>>> For support SR2.0 ICSSG Ethernet firmware:
>>>> - provide different firmware blobs and use TX_PRU.
>>>> - IEP0 is used as PTP Hardware Clock and can only be used for one port.
>>>> - TX timestamp notification comes via INTC interrupt.
>>>>
>>>> Signed-off-by: MD Danish Anwar <[email protected]>
>>>> ---
>>>>   arch/arm64/boot/dts/ti/Makefile               |   4 +-
>>>>   ...se-board.dts => k3-am654-common-board.dts} |   0
>>>>   arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso   | 145 ++++++++++++++++++
>>>>   3 files changed, 148 insertions(+), 1 deletion(-)
>>>>   rename arch/arm64/boot/dts/ti/{k3-am654-base-board.dts =>
>>>> k3-am654-common-board.dts} (100%)
>>>>   create mode 100644 arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso
>>>>
>>>> diff --git a/arch/arm64/boot/dts/ti/Makefile
>>>> b/arch/arm64/boot/dts/ti/Makefile
>>>> index e7b8e2e7f083..85c91f5e832e 100644
>>>> --- a/arch/arm64/boot/dts/ti/Makefile
>>>> +++ b/arch/arm64/boot/dts/ti/Makefile
>>>> @@ -42,12 +42,14 @@ dtb-$(CONFIG_ARCH_K3) +=
>>>> k3-am642-tqma64xxl-mbax4xxl-sdcard.dtb
>>>>   dtb-$(CONFIG_ARCH_K3) += k3-am642-tqma64xxl-mbax4xxl-wlan.dtb
>>>>     # Boards with AM65x SoC
>>>> -k3-am654-gp-evm-dtbs := k3-am654-base-board.dtb
>>>> k3-am654-base-board-rocktech-rk101-panel.dtbo
>>>> +k3-am654-gp-evm-dtbs := k3-am654-common-board.dtb
>>>> k3-am654-base-board-rocktech-rk101-panel.dtbo
>>>
>>> Should the k3-am654-gp-evm.dtb not also have this icssg2 support? Does
>>> it work
>>> to keep this line like before or is there some conflict having both
>>> enabled?
>>>
>>
>> I have not tested this dtb (k3-am654-gp-evm.dtb). So just to be on the
>> safe side I kept gp-evm.dtb as it was. Ideally gp-evm.dtb should have
>> icssg2 support as well. But I haven't tested the combination of
>> base-board + icssg dtbo + rockteck dtbo. That is why I kept gp-evm dtb
>> as it was. Anyways, for ICSSG2's use case only k3-am654-base-board.dtb
>> is used so I think it's ok to leave k3-am654-gp-evm.dtb to as it was.
>>
>>> Andrew
>>>
>
> I tested AM654x-GP EVM with k3-am654-gp-evm.dtb with both the
> combination below (having k3-am654-base-board-dtbs :=
> k3-am654-common-board.dtb k3-am654-icssg2.dtbo), ICSSG worked fine in
> both the scenarios and I didn't see any issue. I don't have a rocktech
> panel with me so couldn't test that. But as far as ICSSG is concerned it
> works fine with the both the combinations. Please let me know which one
> should I use. Should I keep gp-evm as it is (use dtb without the icssg2
> overlay) or should I add icssg2 overlay in gp-evm.dtb as well.
>
>
> 1. k3-am654-gp-evm-dtbs := k3-am654-base-board.dtb
> k3-am654-base-board-rocktech-rk101-panel.dtbo
>
>
> 2. k3-am654-gp-evm-dtbs := k3-am654-common-board.dtb
> k3-am654-base-board-rocktech-rk101-panel.dtbo
>

As you said here before, most will expect the icssg2 to work
on the EVM out of box, you should include it. If anyone wants
something else they can apply the set of overlays that match
on their own.

So, use base-board.

Andrew

2023-09-26 08:45:19

by Anwar, Md Danish

[permalink] [raw]
Subject: Re: [PATCH v2 2/4] arm64: dts: ti: k3-am654-base-board: add ICSSG2 Ethernet support



On 9/25/2023 7:15 PM, Andrew Davis wrote:
> On 9/25/23 3:21 AM, MD Danish Anwar wrote:
>> Hi Andrew,
>>
>> On 22/09/23 09:52, MD Danish Anwar wrote:
>>> On 21/09/23 22:57, Andrew Davis wrote:
>>>> On 9/21/23 1:09 AM, MD Danish Anwar wrote:
>>>>> ICSSG2 provides dual Gigabit Ethernet support.
>>>>>
>>>>> For support SR2.0 ICSSG Ethernet firmware:
>>>>> - provide different firmware blobs and use TX_PRU.
>>>>> - IEP0 is used as PTP Hardware Clock and can only be used for one
>>>>> port.
>>>>> - TX timestamp notification comes via INTC interrupt.
>>>>>
>>>>> Signed-off-by: MD Danish Anwar <[email protected]>
>>>>> ---
>>>>>    arch/arm64/boot/dts/ti/Makefile               |   4 +-
>>>>>    ...se-board.dts => k3-am654-common-board.dts} |   0
>>>>>    arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso   | 145
>>>>> ++++++++++++++++++
>>>>>    3 files changed, 148 insertions(+), 1 deletion(-)
>>>>>    rename arch/arm64/boot/dts/ti/{k3-am654-base-board.dts =>
>>>>> k3-am654-common-board.dts} (100%)
>>>>>    create mode 100644 arch/arm64/boot/dts/ti/k3-am654-icssg2.dtso
>>>>>
>>>>> diff --git a/arch/arm64/boot/dts/ti/Makefile
>>>>> b/arch/arm64/boot/dts/ti/Makefile
>>>>> index e7b8e2e7f083..85c91f5e832e 100644
>>>>> --- a/arch/arm64/boot/dts/ti/Makefile
>>>>> +++ b/arch/arm64/boot/dts/ti/Makefile
>>>>> @@ -42,12 +42,14 @@ dtb-$(CONFIG_ARCH_K3) +=
>>>>> k3-am642-tqma64xxl-mbax4xxl-sdcard.dtb
>>>>>    dtb-$(CONFIG_ARCH_K3) += k3-am642-tqma64xxl-mbax4xxl-wlan.dtb
>>>>>      # Boards with AM65x SoC
>>>>> -k3-am654-gp-evm-dtbs := k3-am654-base-board.dtb
>>>>> k3-am654-base-board-rocktech-rk101-panel.dtbo
>>>>> +k3-am654-gp-evm-dtbs := k3-am654-common-board.dtb
>>>>> k3-am654-base-board-rocktech-rk101-panel.dtbo
>>>>
>>>> Should the k3-am654-gp-evm.dtb not also have this icssg2 support? Does
>>>> it work
>>>> to keep this line like before or is there some conflict having both
>>>> enabled?
>>>>
>>>
>>> I have not tested this dtb (k3-am654-gp-evm.dtb). So just to be on the
>>> safe side I kept gp-evm.dtb as it was. Ideally gp-evm.dtb should have
>>> icssg2 support as well. But I haven't tested the combination of
>>> base-board + icssg dtbo + rockteck dtbo. That is why I kept gp-evm dtb
>>> as it was. Anyways, for ICSSG2's use case only k3-am654-base-board.dtb
>>> is used so I think it's ok to leave k3-am654-gp-evm.dtb to as it was.
>>>
>>>> Andrew
>>>>
>>
>> I tested AM654x-GP EVM with k3-am654-gp-evm.dtb with both the
>> combination below (having k3-am654-base-board-dtbs :=
>> k3-am654-common-board.dtb k3-am654-icssg2.dtbo), ICSSG worked fine in
>> both the scenarios and I didn't see any issue. I don't have a rocktech
>> panel with me so couldn't test that. But as far as ICSSG is concerned it
>> works fine with the both the combinations. Please let me know which one
>> should I use. Should I keep gp-evm as it is (use dtb without the icssg2
>> overlay) or should I add icssg2 overlay in gp-evm.dtb as well.
>>
>>
>> 1. k3-am654-gp-evm-dtbs := k3-am654-base-board.dtb
>> k3-am654-base-board-rocktech-rk101-panel.dtbo
>>
>>
>> 2. k3-am654-gp-evm-dtbs := k3-am654-common-board.dtb
>> k3-am654-base-board-rocktech-rk101-panel.dtbo
>>
>
> As you said here before, most will expect the icssg2 to work
> on the EVM out of box, you should include it. If anyone wants
> something else they can apply the set of overlays that match
> on their own.
>
> So, use base-board.
>
> Andrew

Sure Andrew, I will make the change and send v3.

--
Thanks and Regards,
Md Danish Anwar