AnsweredAssumed Answered

Dual FEC not working - extremely many RX errors

Question asked by Daniel Kleine-Albers on Sep 1, 2016
Latest reply on Sep 2, 2016 by Daniel Kleine-Albers

Dear community,


we try to get the two FECs on i.MX28 to run. Our hardware setup is that we have two Micrel KSZ8091 PHYs connected with a shared interrupt line. Software-wise we are running a Linux 4.4 kernel.


Our current status is that we

  • get a link on one or both ethernet interfaces as expected; speed auto-neg works; FEC interrupts work
  • link down / up (removing and plugging the cable) is working as expected
  • bootup looks good (both FECs and both PHYs detected and PHYs correctly assigned to the FECs)


The issue now is that whenever only a cable is plugged to eth0 we can send packets (and they look correct according to wireshark) but cannot receive anyhting.


As soon as we additionally connect a cable to eth1 we can send packets on both interfaces correctly and very randomly receive a valid packet; but most of the time only the RX frame error counter (as seen in ifconfig) goes up for eth0 and eth1.


Please let me know if anyone has also seen a similar behaviour or which further information I can provide? Thanks!


Excerpt from device tree:

mac0: ethernet@800f0000 {   phy-mode = "rmii";   phy-handle = <&phy0>;   pinctrl-names = "default";   pinctrl-0 = <&mac0_pins_a &mac0_rx_er>;   phy-supply = <&reg_dummy_3v3>;   phy-reset-gpios = <&gpio4 13 0>;   phy-reset-duration = <100>;   status = "okay";             mdio {     #address-cells = <1>;     #size-cells = <0>;     phy0: ethernet-phy@0 {                 interrupt-parent = <&gpio4>;                 interrupts = <5 8>;                 reg = <0>;     };        phy1: ethernet-phy@3 {                 interrupt-parent = <&gpio4>;                 interrupts = <5 8>;                 reg = <3>;        };        };
mac1: ethernet@800f4000 {   phy-mode = "rmii";   phy-handle = <&phy1>;   pinctrl-names = "default";   pinctrl-0 = <&mac1_pins_a &mac1_rx_er>;   phy-supply = <&reg_dummy_3v3>;   status = "okay";};