We are working in an ARMv7 embedded system running kernel 4.9 (LEDE build).
It is an imx6 board with 2 ethernet interfaces. One of them is connected to
a Marvell switch.

The schema of the system is the following:

 +-------------------+ eth0
 |                   +--+
 |                   |  |
 | Embedded system   +--+
 |                   |
 |      ARMv7        |
 |                   | Marvell 88E8057(sky2) +-------------+
 |                   +--+ +--+             +--+ eth1
 |                   |  +---------------------+ |             |  +------+
 |                   +--+      CPU port       +--+ mv88e6176  +--+
 +------+--+---------+ |             |
emulated|  | |             |
GPIO    +--+ +--+             +--+ eth2
MDIO      +-----------------------------------+ |             |  +------+
                              MDIO +--+             +--+
+-------------+

There is a bridge (br-lan) which includes eth0/eth1/eth2

If I connect the eth1/eth2, the link is up and I can do ping through it. But, once
I start sending a heavy traffic load the link fails and the kernel sends the
following messages:

[ 48.557140] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 48.564964] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 48.572110] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 48.579263] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 48.586417] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 48.593573] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 48.600718] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518
[   54.877567] net_ratelimit: 6 callbacks suppressed
[ 54.882293] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518 [ 61.413552] sky2 0000:04:00.0 marvell: rx error, status 0x5f20010 length 1518

I have a modified device-tree of imx6 which includes the mdio and dsa nodes. This device-tree works in a kernel 4.1.6, but I know that these parts of the kernel have a lot of changes. The changes included for mdio and dsa in the device-tree are the following (diff arch/arm/boot/dts/imx6qdl-gw53xx.dtsi arch/arm/boot/dts/imx6qdl-gw53xx-mdio.dtsi):

16a17,18
>     can0 = &can1;
>     ethernet0 = &fec;
21a24
>     sky2 = &eth1;
24a28,29
>     usdhc2 = &usdhc3;
>     mdio-gpio0 = &mdio0;
62a68,125
>   mdio0: mdio {
>     compatible = "virtual,mdio-gpio";
>     #address-cells = <1>;
>     #size-cells = <0>;
>     /* MDC = gpio-17, MDIO = gpio-20 */
>     gpios =  <&gpio1 17 1
>         &gpio1 20 0>;
>                 ethernet-phy@0  {
>           compatible = "marvell,dsa";
>                 };
>   };
>
>   dsa {
>     compatible = "marvell,dsa";
>     #address-cells = <2>;
>     #size-cells = <0>;
>
>     interrupts = <10>;
>     dsa,ethernet = <&eth1>;
>     dsa,mii-bus = <&mdio0>;
>
>     switch@0 {
>       #address-cells = <1>;
>       #size-cells = <0>;
>       reg = <0 0>;  /* MDIO address 0, switch 0 in tree */
>
>       port@0 {
>         reg = <0>;
>         label = "cpu";
>       };
>
>       port@1 {
>         reg = <1>;
>         label = "eth1";
>       };
>
>       port@2 {
>         reg = <2>;
>         label = "eth2";
>       };
>
>       port@3 {
>         reg = <3>;
>         label = "eth3";
>       };
>
>       port@4 {
>         reg = <4>;
>         label = "eth4";
>       };
>     };
>   };
>
361a425,430
> &mdio0 {
>   pinctrl-names = "default";
>   pinctrl-0 = <&pinctrl_mdio>;
>   status = "okay";
> };
>
363c432
<   imx6qdl-gw53xx {
---
>   imx6qdl-gw53xx-mdio {
448a518,524
>       >;
>     };
>
>     pinctrl_mdio: mdiogrp {
>       fsl,pins = <
>         MX6QDL_PAD_SD1_DAT1__GPIO1_IO17   0x1b0b9
>         MX6QDL_PAD_SD1_CLK__GPIO1_IO20    0x1b0b9

Do you know of any possible reason why this could be happening?

Thanks in advance.

Rafa

Reply via email to