This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM6442: On the custom board design with AM6442 SoC, CPSW works, but ICSS does not work.

Part Number: AM6442
Other Parts Discussed in Thread: TMDS64EVM, DP83869

Tool/software:

HI TI Experts

I'm trying to run icss Ethernet on a custom board designed using AM64 SoC. The custom board I mentioned has 2 eth phy models, DP83869. 
I want to use these ethernet phys on Linux. I was able to run these phys as eth0 and eth1 in CPSW mode on Linux.
I can perform ping operations. Below I am sharing the devicetree file in which I can run 2 phys as CPSW.
Since the 2 ethernet phys were connected to different MDIO lines, I tried them separately.

rgmii1_pins_default: rgmii1-pins-default {
	pinctrl-single,pins = <
		AM64X_IOPAD(0x01cc, PIN_INPUT, 4) /* (W5) PRG0_PRU1_GPO7.RGMII1_RD0 */
		AM64X_IOPAD(0x01d4, PIN_INPUT, 4) /* (Y5) PRG0_PRU1_GPO9.RGMII1_RD1 */
		AM64X_IOPAD(0x01d8, PIN_INPUT, 4) /* (V6) PRG0_PRU1_GPO10.RGMII1_RD2 */
		AM64X_IOPAD(0x01f4, PIN_INPUT, 4) /* (V5) PRG0_PRU1_GPO17.RGMII1_RD3 */
		AM64X_IOPAD(0x0188, PIN_INPUT, 4) /* (AA5) PRG0_PRU0_GPO10.RGMII1_RXC */
		AM64X_IOPAD(0x0184, PIN_INPUT, 4) /* (W6) PRG0_PRU0_GPO9.RGMII1_RX_CTL */
		AM64X_IOPAD(0x0124, PIN_OUTPUT, 4) /* (V15) PRG1_PRU1_GPO7.RGMII1_TD0 */
		AM64X_IOPAD(0x012c, PIN_OUTPUT, 4) /* (V14) PRG1_PRU1_GPO9.RGMII1_TD1 */
		AM64X_IOPAD(0x0130, PIN_OUTPUT, 4) /* (W14) PRG1_PRU1_GPO10.RGMII1_TD2 */
		AM64X_IOPAD(0x014c, PIN_OUTPUT, 4) /* (AA14) PRG1_PRU1_GPO17.RGMII1_TD3 */
		AM64X_IOPAD(0x00e0, PIN_OUTPUT, 4) /* (U14) PRG1_PRU0_GPO10.RGMII1_TXC */
		AM64X_IOPAD(0x00dc, PIN_OUTPUT, 4) /* (U15) PRG1_PRU0_GPO9.RGMII1_TX_CTL */
	>;
};

mdio1_pins_default: mdio1-pins-default {
	pinctrl-single,pins = <
		AM64X_IOPAD(0x01fc, PIN_OUTPUT, 4) /* (R2) PRG0_PRU1_GPO19.MDIO0_MDC */
		AM64X_IOPAD(0x01f8, PIN_INPUT, 4) /* (P5) PRG0_PRU1_GPO18.MDIO0_MDIO */
	>;
};

&cpsw3g {
	pinctrl-names = "default";
	pinctrl-0 = <&rgmii1_pins_default>;
};

&cpsw_port1 {
	phy-mode = "rgmii-rxid";
	phy-handle = <&cpsw3g_phy0>;
};

&cpsw_port2 {
	status = "disabled";
};

&cpsw3g_mdio {
	status = "okay";
	pinctrl-0 = <&mdio1_pins_default>
	cpsw3g_phy0: ethernet-phy@0 {
		reg = <0xf>;
        tx-fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
        rx-fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
		ti,op-mode = <DP83869_RGMII_COPPER_ETHERNET>;
        ti,rx-internal-delay-ps = <2000>;
	};
};
rgmii2_pins_default: rgmii2-pins-default {
    pinctrl-single,pins = <
        AM64X_IOPAD(0x0108, PIN_INPUT, 4) /* (W11) PRG1_PRU1_GPO0.RGMII2_RD0 */
        AM64X_IOPAD(0x010c, PIN_INPUT, 4) /* (V11) PRG1_PRU1_GPO1.RGMII2_RD1 */
        AM64X_IOPAD(0x0110, PIN_INPUT, 4) /* (AA12) PRG1_PRU1_GPO2.RGMII2_RD2 */
        AM64X_IOPAD(0x0114, PIN_INPUT, 4) /* (Y12) PRG1_PRU1_GPO3.RGMII2_RD3 */
        AM64X_IOPAD(0x0120, PIN_INPUT, 4) /* (U11) PRG1_PRU1_GPO6.RGMII2_RXC */
        AM64X_IOPAD(0x0118, PIN_INPUT, 4) /* (W12) PRG1_PRU1_GPO4.RGMII2_RX_CTL */
        AM64X_IOPAD(0x0134, PIN_OUTPUT, 4) /* (AA10) PRG1_PRU1_GPO11.RGMII2_TD0 */
        AM64X_IOPAD(0x0138, PIN_OUTPUT, 4) /* (V10) PRG1_PRU1_GPO12.RGMII2_TD1 */
        AM64X_IOPAD(0x013c, PIN_OUTPUT, 4) /* (U10) PRG1_PRU1_GPO13.RGMII2_TD2 */
        AM64X_IOPAD(0x0140, PIN_OUTPUT, 4) /* (AA11) PRG1_PRU1_GPO14.RGMII2_TD3 */
        AM64X_IOPAD(0x0148, PIN_OUTPUT, 4) /* (Y10) PRG1_PRU1_GPO16.RGMII2_TXC */
        AM64X_IOPAD(0x0144, PIN_OUTPUT, 4) /* (Y11) PRG1_PRU1_GPO15.RGMII2_TX_CTL */
    >;
};

mdio1_pins_default: mdio1-pins-default {
	pinctrl-single,pins = <
		AM64X_IOPAD(0x015c, PIN_OUTPUT, 4) /* (Y6) PRG1_MDIO0_MDC */
		AM64X_IOPAD(0x0158, PIN_INPUT, 4) /* (AA6) PRG1_MDIO0_MDIO */
	>;
};

&cpsw3g {
	pinctrl-names = "default";
	pinctrl-0 = <&rgmii2_pins_default>;
};

&cpsw_port1 {
	status = "disabled";
};

&cpsw_port2 {
    phy-mode = "rgmii-rxid";
	phy-handle = <&cpsw3g_phy0>;
};

&cpsw3g_mdio {
	status = "okay";
	pinctrl-0 = <&mdio1_pins_default>
	cpsw3g_phy0: ethernet-phy@0 {
		reg = <0x3>;
        tx-fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
        rx-fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
		ti,op-mode = <DP83869_RGMII_COPPER_ETHERNET>;
        ti,rx-internal-delay-ps = <2000>;
	};
};

By the way, a maximum of 100 Mbit is supported in hardware. That's why I ran the ping tests with 100 Mbit full duplex configurations.


However, when I want to run the phy connected to address 0x3 in ICSS mode, I do not see any errors regarding the
icssg-prueth driver in the dmesg logs. PHY device is found, an interface is created as eth1. When I physically connect the cable,
I see that the PHY connection is established, but I cannot ping it. What could be the reason for this?
I leave below the devicetree file with which I am trying to run ICSS.
icssg1_rgmii2_pins_default: icssg1-rgmii2-pins-default {
    pinctrl-single,pins = <
        AM64X_IOPAD(0x0108, PIN_INPUT, 2) /* (W11) PRG1_PRU1_GPO0.RGMII2_RD0 */
        AM64X_IOPAD(0x010c, PIN_INPUT, 2) /* (V11) PRG1_PRU1_GPO1.RGMII2_RD1 */
        AM64X_IOPAD(0x0110, PIN_INPUT, 2) /* (AA12) PRG1_PRU1_GPO2.RGMII2_RD2 */
        AM64X_IOPAD(0x0114, PIN_INPUT, 2) /* (Y12) PRG1_PRU1_GPO3.RGMII2_RD3 */
        AM64X_IOPAD(0x0120, PIN_INPUT, 2) /* (U11) PRG1_PRU1_GPO6.RGMII2_RXC */
        AM64X_IOPAD(0x0118, PIN_INPUT, 2) /* (W12) PRG1_PRU1_GPO4.RGMII2_RX_CTL */
        AM64X_IOPAD(0x0134, PIN_OUTPUT, 2) /* (AA10) PRG1_PRU1_GPO11.RGMII2_TD0 */
        AM64X_IOPAD(0x0138, PIN_OUTPUT, 2) /* (V10) PRG1_PRU1_GPO12.RGMII2_TD1 */
        AM64X_IOPAD(0x013c, PIN_OUTPUT, 2) /* (U10) PRG1_PRU1_GPO13.RGMII2_TD2 */
        AM64X_IOPAD(0x0140, PIN_OUTPUT, 2) /* (AA11) PRG1_PRU1_GPO14.RGMII2_TD3 */
        AM64X_IOPAD(0x0148, PIN_OUTPUT, 2) /* (Y10) PRG1_PRU1_GPO16.RGMII2_TXC */
        AM64X_IOPAD(0x0144, PIN_OUTPUT, 2) /* (Y11) PRG1_PRU1_GPO15.RGMII2_TX_CTL */
    >;
};

icssg1_mdio1_pins_default: icssg1-mdio1-pins-default {
	pinctrl-single,pins = <
		AM64X_IOPAD(0x015c, PIN_OUTPUT, 0) /* (Y6) PRG1_MDIO0_MDC */
		AM64X_IOPAD(0x0158, PIN_INPUT, 0) /* (AA6) PRG1_MDIO0_MDIO */
	>;
};

icssg1_iep0_pins_default: icssg1-iep0-default-pins {
	pinctrl-single,pins = <
		AM65X_IOPAD(0x0104, PIN_OUTPUT, 2) /* (W7) PRG1_PRU0_GPO19.PRG1_IEP0_EDC_SYNC_OUT0 */
	>;
};

icssg1_eth: icssg1-eth {
    compatible = "ti,am642-icssg-prueth";
    pinctrl-names = "default";
    pinctrl-0 = <&icssg1_rgmii2_pins_default>;
    
    sram = <&oc_sram>;
    ti,prus = <&pru1_0>, <&rtu1_0>, <&tx_pru1_0>, <&pru1_1>, <&rtu1_1>, <&tx_pru1_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 = <&icssg1_mii_g_rt>;
    ti,mii-rt = <&icssg1_mii_rt>;
    ti,iep = <&icssg1_iep0>,  <&icssg1_iep1>;

    interrupt-parent = <&icssg1_intc>;
    interrupts = <24 0 2>, <25 1 3>;
    interrupt-names = "tx_ts0", "tx_ts1";

    dmas =  <&main_pktdma 0xc200 15>, /* egress slice 0 */
            <&main_pktdma 0xc201 15>, /* egress slice 0 */
            <&main_pktdma 0xc202 15>, /* egress slice 0 */
            <&main_pktdma 0xc203 15>, /* egress slice 0 */
            <&main_pktdma 0xc204 15>, /* egress slice 1 */
            <&main_pktdma 0xc205 15>, /* egress slice 1 */
            <&main_pktdma 0xc206 15>, /* egress slice 1 */
            <&main_pktdma 0xc207 15>, /* egress slice 1 */

            <&main_pktdma 0x4200 15>, /* ingress slice 0 */
            <&main_pktdma 0x4201 15>, /* ingress slice 1 */
            <&main_pktdma 0x4202 0>, /* mgmnt rsp slice 0 */
            <&main_pktdma 0x4203 0>; /* mgmnt rsp 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>;

        icssg1_emac0: port@0 {
            reg = <0>;
            ti,syscon-rgmii-delay = <&scm_conf 0x4110>;
            /* Filled in by bootloader */
            local-mac-address = [00 00 00 00 00 00];
            status = "disabled";
        };
        icssg1_emac1: port@1 {
            reg = <1>;
            phy-handle = <&icssg1_phy1>;
            phy-mode = "rgmii-id";
            ti,syscon-rgmii-delay = <&main_conf 0x4114>;
            /* Filled in by bootloader */
            local-mac-address = [00 00 00 00 00 00];
            status = "okay";
        };
    };
};


&icssg1_mdio {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&icssg1_mdio1_pins_default>;

	icssg1_phy1: ethernet-phy@ {
		reg = <0x3>;
        tx-fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
        rx-fifo-depth = <DP83869_PHYCR_FIFO_DEPTH_4_B_NIB>;
		ti,op-mode = <DP83869_RGMII_COPPER_ETHERNET>;
		ti,rx-internal-delay-ps = <2000>;
        ti,tx-internal-delay-ps = <2000>;
	};
};

&icssg1_iep0 {
	pinctrl-names = "default";
	pinctrl-0 = <&icssg1_iep0_pins_default>;
};


&cpsw3g {
    status = "disabled";
};

&cpsw_port1 {
	status = "disabled";
};

&cpsw_port2 {
	status = "disabled";
};

&cpsw3g_mdio {
	status = "disabled";
};
By the way, I am using Linux kernel 6.1.80 version.
 Thanks.


  • Ahmet: I believe you must be using TI AM64X Linux SDK v9.2 - true? (e2e support really needs to know the SDK version, not the Linux kernel version; TI modifies and excludes some things from the Linux kernel version)

    Nevertheless, you have an interesting question.

    regards

    Jim (ex TI-er '82-'97)

  • Hi

    Sorry for delayed response.

    I believe you must be using

    Yes, I am using processor SDK version 09.02.01.09.

    Yes, I think it's a strange situation. I do not think that the CPSW and ICSS subunits on the custom board I use have a different hardware design.
    As a result, CPSW works with the same pin settings. I request your help in this matter.
    Thanks
  • Ahmet:

     I am a former TI employee. 

    Surprised someone has not addressed this.  I would suggest (+) Daolin Qiu's Profile - Daolin Qiu - TI E2E support forums in Dallas might be a starting point of contact.

    regards

    Jim (ex-TI '82-'97)

  • Hi Jim

    I hope helps me.

    Thanks

  • I see that the PHY connection is established, but I cannot ping it

    Can you share the PHY register dumps: 0x0 to 0xF for both Ports in ICSSG case.

    Is ICSSG and PHY configured in RGMII mode?

    > 100 Mbit full duplex configurations.

    How did you enforce this?

    Is your schematics matches TMDS64EVM when it comes to RGMII pins?

    You might also want to look at ICSSG HW stats to debug this further...

  • This is Register addresses of phy at address 0x3 (icssg1_phy1)

    PHY: 3 | REG: 0 --> 0x1140
    PHY: 3 | REG: 1 --> 0x796d
    PHY: 3 | REG: 2 --> 0x2000
    PHY: 3 | REG: 3 --> 0xa0f3
    PHY: 3 | REG: 4 --> 0x0101
    PHY: 3 | REG: 5 --> 0xc1e1
    PHY: 3 | REG: 6 --> 0x006f
    PHY: 3 | REG: 7 --> 0x2001
    PHY: 3 | REG: 8 --> 0x4806
    PHY: 3 | REG: 9 --> 0x0800
    PHY: 3 | REG: 10 --> 0x0800
    PHY: 3 | REG: 11 --> 0x0000
    PHY: 3 | REG: 12 --> 0x0000
    PHY: 3 | REG: 13 --> 0x401f
    PHY: 3 | REG: 14 --> 0x00d2
    PHY: 3 | REG: 15 --> 0xf000
    PHY: 3 | REG: 16 --> 0x5048
    PHY: 3 | REG: 17 --> 0x7c02
    PHY: 3 | REG: 18 --> 0x0000
    PHY: 3 | REG: 19 --> 0x9ce0
    PHY: 3 | REG: 20 --> 0x2bc7
    PHY: 3 | REG: 21 --> 0x0000
    PHY: 3 | REG: 22 --> 0x0000
    PHY: 3 | REG: 23 --> 0x0040
    PHY: 3 | REG: 24 --> 0x6150
    PHY: 3 | REG: 25 --> 0x4444
    PHY: 3 | REG: 26 --> 0x0002
    PHY: 3 | REG: 27 --> 0x0000
    PHY: 3 | REG: 28 --> 0x0000
    PHY: 3 | REG: 29 --> 0x0000
    PHY: 3 | REG: 30 --> 0x0012
    PHY: 3 | REG: 31 --> 0x0000

    Is ICSSG and PHY configured in RGMII mode?

    Yes,You can see it in the form of "phy-mode = "rgmii-id"" in the dts file I shared above.

    How did you enforce this?

    with "ethtool -s eth0 speed 100 duplex full" command

    Is your schematics matches TMDS64EVM when it comes to RGMII pins?

    yes. I can ping in cpsw mode with same pinout 

    I hope you will get back to me soon with good news. 

    Thanks

  • Can you share the PHY register dumps: 0x0 to 0xF for both Ports in ICSSG case.

    Sorry, there was a typo, can you share 0x0 to 0x1F (for both ports)

  • Hi 


    I updated my answer above to include 0x0 to 0x1F. Also I only use one port for icssg (eth0).

  • > REG: 19  (0x13) --> 0x9ce0

    This indicates Auto Negotiation Error, Overflow / underflow has been detected in one of ADC's FIFOs. May be a misconfiguration of PHY settings. Assigning this thread to PHY expert to check

  • Hi Ahmet,

    In the case with link up but failure to ping in RGMII, the issue is likely with RGMII timing requirements.

    I recommend iterating with RGMII internal delay settings in the PHY and attempting ping for each. This can be configured through registers or device tree:

    0x32[1:0] = '00' -> '01' -> '10' -> '11'

    Does ping fail for each of these settings?

    Thank you,

    Evan

  • Hi 

    Thanks for your reply.

    rx-internal-delay-ps and tx-internal-delay-ps values ​​are 2 ns for icss as seen in the dts file above.

    0x32[1:0] = '00' -> '01' -> '10' -> '11'

    I don't understand how to make this setting in device tree. Can you explain in more detail?

    Thanks.

  • Hi Ahmet,

    Setting delay to 0ns should set device in align mode.

    // 0ps = align mode
    // delay options: {1, 1.5, 2, 3, 3.5}ns
    ti,rx-internal-delay-ps = <2000>; 
    ti,tx-internal-delay-ps = <2000>;

    I'm not certain if this device tree setting is taking effect in the PHY, so I recommend writing the values in registers 0x32 and 0x86 manually as the first step during communication tests.

    Thank you,

    Evan

  • Hi

    In the dp83869_config_init() function in the dp83869.c file, I wrote the 0th and 1st bits of the 0x32 address as 0-0, 0-1, 1-0, 1-1 as you said and tried it. However, I couldn't see any difference, so it didn't solve my problem.

    Do you have any idea?

    Thanks.

  • Hi Ahmet,

    Thanks for confirming these tests.

    We can run through two loopback tests to isolate the issue to the MDI or MAC signal chain:

    1) Reverse loopback (0x16[5] = '1'). Send packets from the link partner - verify packets looped back without error on MDI side.

    2) MAC-side loopback (0x16[2] = '1'). Send packets from the MAC - verify packets looped back without error to MAC.

    If the root cause is RGMII timing violation, I expect (1) to pass and (2) to fail. In this case, we can further adjust the RGMII timing delays in shift mode with register 0x86.

    Could you also please share the "ethtool" log for the port after ping? This will help confirm if MAC is receiving packets and any errors seen.

    Thank you,
    Evan

  • Hi

    These are "ethtool -S eth0" logs after tests

    Reverse loopback
    -------------------
    rx_good_frames = 0
    rx_broadcast_frames = 0
    rx_multicast_frames = 0
    rx_crc_error_frames = 0
    rx_mii_error_frames = 0
    rx_odd_nibble_frames = 0
    rx_frame_max_size = 14000
    rx_max_size_error_frames = 0
    rx_frame_min_size = 448
    rx_min_size_error_frames = 0
    rx_overrun_frames = 0
    rx_class0_hits = 0
    rx_class1_hits = 0
    rx_class2_hits = 0
    rx_class3_hits = 0
    rx_class4_hits = 0
    rx_class5_hits = 0
    rx_class6_hits = 0
    rx_class7_hits = 0
    rx_class8_hits = 0
    rx_class9_hits = 0
    rx_class10_hits = 0
    rx_class11_hits = 0
    rx_class12_hits = 0
    rx_class13_hits = 0
    rx_class14_hits = 0
    rx_class15_hits = 0
    rx_smd_frags = 0
    rx_bucket1_size = 448
    rx_bucket2_size = 896
    rx_bucket3_size = 1792
    rx_bucket4_size = 3584
    rx_64B_frames = 0
    rx_bucket1_frames = 0
    rx_bucket2_frames = 0
    rx_bucket3_frames = 0
    rx_bucket4_frames = 0
    rx_bucket5_frames = 0
    rx_total_bytes = 0
    rx_tx_total_bytes = 0
    tx_good_frames = 0
    tx_broadcast_frames = 0
    tx_multicast_frames = 0
    tx_odd_nibble_frames = 0
    tx_underflow_errors = 0
    tx_frame_max_size = 14000
    tx_max_size_error_frames = 0
    tx_frame_min_size = 448
    tx_min_size_error_frames = 0
    tx_bucket1_size = 448
    tx_bucket2_size = 896
    tx_bucket3_size = 1792
    tx_bucket4_size = 3584
    tx_64B_frames = 0
    tx_bucket1_frames = 0
    tx_bucket2_frames = 0
    tx_bucket3_frames = 0
    tx_bucket4_frames = 0
    tx_bucket5_frames = 0
    tx_total_bytes = 0
    
    MAC-side loopback
    -----------------
    rx_good_frames = 0
    rx_broadcast_frames = 0
    rx_multicast_frames = 0
    rx_crc_error_frames = 0
    rx_mii_error_frames = 0
    rx_odd_nibble_frames = 0
    rx_frame_max_size = 28000
    rx_max_size_error_frames = 0
    rx_frame_min_size = 896
    rx_min_size_error_frames = 0
    rx_overrun_frames = 0
    rx_class0_hits = 0
    rx_class1_hits = 0
    rx_class2_hits = 0
    rx_class3_hits = 0
    rx_class4_hits = 0
    rx_class5_hits = 0
    rx_class6_hits = 0
    rx_class7_hits = 0
    rx_class8_hits = 0
    rx_class9_hits = 0
    rx_class10_hits = 0
    rx_class11_hits = 0
    rx_class12_hits = 0
    rx_class13_hits = 0
    rx_class14_hits = 0
    rx_class15_hits = 0
    rx_smd_frags = 0
    rx_bucket1_size = 896
    rx_bucket2_size = 1792
    rx_bucket3_size = 3584
    rx_bucket4_size = 7168
    rx_64B_frames = 0
    rx_bucket1_frames = 0
    rx_bucket2_frames = 0
    rx_bucket3_frames = 0
    rx_bucket4_frames = 0
    rx_bucket5_frames = 0
    rx_total_bytes = 0
    rx_tx_total_bytes = 0
    tx_good_frames = 0
    tx_broadcast_frames = 0
    tx_multicast_frames = 0
    tx_odd_nibble_frames = 0
    tx_underflow_errors = 0
    tx_frame_max_size = 28000
    tx_max_size_error_frames = 0
    tx_frame_min_size = 896
    tx_min_size_error_frames = 0
    tx_bucket1_size = 896
    tx_bucket2_size = 1792
    tx_bucket3_size = 3584
    tx_bucket4_size = 7168
    tx_64B_frames = 0
    tx_bucket1_frames = 0
    tx_bucket2_frames = 0
    tx_bucket3_frames = 0
    tx_bucket4_frames = 0
    tx_bucket5_frames = 0
    tx_total_bytes = 0

    Also, in MAC-side loopback mode, eth0 was in ethernet down state.

    Thanks.

  • Hi Ahmet,

    Please share the PHY register dump after ping:

    https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1164499/faq-how-to-read-and-write-ethernet-phy-registers-using-a-linux-terminal

    In the dp83869_config_init() function in the dp83869.c file, I wrote the 0th and 1st bits of the 0x32 address as 0-0, 0-1, 1-0, 1-1 as you said and tried it. However, I couldn't see any difference, so it didn't solve my problem.

    Were these separate test cases, or 0x32 was written as 0-0 -> 0-1 -> ... in one complete sequence in config_init()?

    Thank you,

    Evan

  • Hi

    This is the PHY reg dump.

    PHY: 3 | REG: 0 --> 0x1140
    PHY: 3 | REG: 1 --> 0x796d
    PHY: 3 | REG: 2 --> 0x2000
    PHY: 3 | REG: 3 --> 0xa0f3
    PHY: 3 | REG: 4 --> 0x0101
    PHY: 3 | REG: 5 --> 0xc1e1
    PHY: 3 | REG: 6 --> 0x006f
    PHY: 3 | REG: 7 --> 0x2001
    PHY: 3 | REG: 8 --> 0x4806
    PHY: 3 | REG: 9 --> 0x0800
    PHY: 3 | REG: 10 --> 0x0800
    PHY: 3 | REG: 11 --> 0x0000
    PHY: 3 | REG: 12 --> 0x0000
    PHY: 3 | REG: 13 --> 0x401f
    PHY: 3 | REG: 14 --> 0x00d0
    PHY: 3 | REG: 15 --> 0xf000
    PHY: 3 | REG: 16 --> 0x5048
    PHY: 3 | REG: 17 --> 0x7c02
    PHY: 3 | REG: 18 --> 0x0000
    PHY: 3 | REG: 19 --> 0x1c40
    PHY: 3 | REG: 20 --> 0x2bc7
    PHY: 3 | REG: 21 --> 0x0000
    PHY: 3 | REG: 22 --> 0x0000
    PHY: 3 | REG: 23 --> 0x0040
    PHY: 3 | REG: 24 --> 0x6150
    PHY: 3 | REG: 25 --> 0x4444
    PHY: 3 | REG: 26 --> 0x0002
    PHY: 3 | REG: 27 --> 0x0000
    PHY: 3 | REG: 28 --> 0x0000
    PHY: 3 | REG: 29 --> 0x0000
    PHY: 3 | REG: 30 --> 0x0012
    PHY: 3 | REG: 31 --> 0x0000

    Were these separate test cases, or 0x32 was written as 0-0 -> 0-1 -> ... in one complete sequence in config_init()?

    Actually, I created a new image for each test scenario (0-0, 0-1, 1-1, 1-0) and flashed it to the custom board.

    Thanks.

  • Hi Ahmet,

    Thanks for confirming.

    The PHY register & DTS configuration are equivalent between cpsw and icssg test cases? If so, the root cause is likely not with PHY.
    Following up with MPU team to get more feedback.

    Best regards,
    Evan

  • Hi

    The PHY register & DTS configuration are equivalent between cpsw and icssg test cases?

    yes, we can say the same.

    Thanks.

  • Hi Ahmet,

    In this case, I believe PHY config is acceptable for communication in icssg.

    Thank you,
    Evan

  • Hi 

    So what should I do in this situation? I checked the hardware. So I don't think it is a hardware related reason.