Skip to contentSkip to conversation

net/fec on i.MX28: promiscuous mode lost after reconnecting network cable

Bug Applied Stefan Wahren 5 participants 11 messages Mar 6, 2014 – Mar 13, 2014

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

Hello,

i'm using a i.MX28 custom board (I2SE Duckbill) with 2 different Ethernet interfaces. Both interfaces should be used as bridge using bridge utils. One Ethernet interface is the buildin fec and the other is connect by spi. The board runs under Linux mainline 3.10. But the following problem still occurs on 3.14-rc4.

Here is the problem, if i disconnect and reconnect the Ethernet cable on the buildin fec (eth0), the bridge says the port comes up, but it doesn't work. After that any traffic to the fec is okay, but traffic "through" the bridge is lost. But i expect no traffic is lost, after reconnect the network cable.

If i reset the board without disconnecting the cables, the traffic "through" the bridge works. If i force the promiscuous mode on the fec (eth0) after the reconnect, the bridge works too:

ifconfig eth0 promisc

After that, i made some research and probably found the cause of the problem. In the case that the bridge works (link state connected since reboot) the register HW_ENET_MAC_RCR of the i.MX28 returns 0x45EE011C (PROM=1, promiscuous mode on). Then I disconnect the ethernet cable and reconnect it. After that the register returns 0x45EE0114 (PROM=0, promiscuous mode off) and the bridge doesn't work.

Based on this information, i created a patch against Linux 3.10. I'm not sure it's a good solution but it works. After a fec reset all register values of HW_ENET_MAC_RCR must be restored, but fec_restart do not handle them at all. So set_multicast_list is called after fec_restart to restore the promiscuous mode of the fec.

drivers/net/ethernet/freescale/fec_main.c +2 -1
index d48099f..cb6b66e 100644
@@ -1063,6 +1063,8 @@ static void fec_get_mac(struct net_device *ndev)
 
 /* 
------------------------------------------------------------------------- */
 
+static void set_multicast_list(struct net_device *ndev);
+
 /*
  * Phy section

*/
@@ -1093,8 +1095,10 @@ static void fec_enet_adjust_link(struct net_device *ndev)

         }

         /* if any of the above changed restart the FEC */
-        if (status_change)
+        if (status_change) {
             fec_restart(ndev, phy_dev->duplex);
+            set_multicast_list(ndev);
+        }
     } else {
         if (fep->link) {
             fec_stop(ndev);

Is this solution correct?

Do you need more information?

Best regards
Stefan Wahren

#1 lore raw

Adding some more folks on Cc.

Quoted 71 lines · Stefan Wahren

Hello,

i'm using a i.MX28 custom board (I2SE Duckbill) with 2 different Ethernet interfaces. Both interfaces should be used as bridge using bridge utils. One Ethernet interface is the buildin fec and the other is connect by spi. The board runs under Linux mainline 3.10. But the following problem still occurs on 3.14-rc4.

Here is the problem, if i disconnect and reconnect the Ethernet cable on the buildin fec (eth0), the bridge says the port comes up, but it doesn't work. After that any traffic to the fec is okay, but traffic "through" the bridge is lost. But i expect no traffic is lost, after reconnect the network cable.

If i reset the board without disconnecting the cables, the traffic "through" the bridge works. If i force the promiscuous mode on the fec (eth0) after the reconnect, the bridge works too:

ifconfig eth0 promisc

After that, i made some research and probably found the cause of the problem. In the case that the bridge works (link state connected since reboot) the register HW_ENET_MAC_RCR of the i.MX28 returns 0x45EE011C (PROM=1, promiscuous mode on). Then I disconnect the ethernet cable and reconnect it. After that the register returns 0x45EE0114 (PROM=0, promiscuous mode off) and the bridge doesn't work.

Based on this information, i created a patch against Linux 3.10. I'm not sure it's a good solution but it works. After a fec reset all register values of HW_ENET_MAC_RCR must be restored, but fec_restart do not handle them at all. So set_multicast_list is called after fec_restart to restore the promiscuous mode of the fec.

drivers/net/ethernet/freescale/fec_main.c +5 -2
index d48099f..cb6b66e 100644
@@ -1063,6 +1063,8 @@ static void fec_get_mac(struct net_device *ndev)
 
 /*
------------------------------------------------------------------------- */
 
+static void set_multicast_list(struct net_device *ndev);
+
 /*
  * Phy section
  */
@@ -1093,8 +1095,10 @@ static void fec_enet_adjust_link(struct net_device
 *ndev)
         }
 
         /* if any of the above changed restart the FEC */
-        if (status_change)
+        if (status_change) {
             fec_restart(ndev, phy_dev->duplex);
+            set_multicast_list(ndev);
+        }
     } else {
         if (fep->link) {
             fec_stop(ndev);

Is this solution correct?

Do you need more information?

Best regards
Stefan Wahren
--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
Quoted 64 lines · Fabio Estevam

Adding some more folks on Cc.

Quoted 61 lines · Stefan Wahren

Hello,

i'm using a i.MX28 custom board (I2SE Duckbill) with 2 different Ethernet interfaces. Both interfaces should be used as bridge using bridge utils. One Ethernet interface is the buildin fec and the other is connect by spi. The board runs under Linux mainline 3.10. But the following problem still occurs on 3.14-rc4.

Here is the problem, if i disconnect and reconnect the Ethernet cable on the buildin fec (eth0), the bridge says the port comes up, but it doesn't work. After that any traffic to the fec is okay, but traffic "through" the bridge is lost. But i expect no traffic is lost, after reconnect the network cable.

If i reset the board without disconnecting the cables, the traffic "through" the bridge works. If i force the promiscuous mode on the fec (eth0) after the reconnect, the bridge works too:

ifconfig eth0 promisc

After that, i made some research and probably found the cause of the problem. In the case that the bridge works (link state connected since reboot) the register HW_ENET_MAC_RCR of the i.MX28 returns 0x45EE011C (PROM=1, promiscuous mode on). Then I disconnect the ethernet cable and reconnect it. After that the register returns 0x45EE0114 (PROM=0, promiscuous mode off) and the bridge doesn't work.

Based on this information, i created a patch against Linux 3.10. I'm not sure it's a good solution but it works. After a fec reset all register values of HW_ENET_MAC_RCR must be restored, but fec_restart do not handle them at all. So set_multicast_list is called after fec_restart to restore the promiscuous mode of the fec.

drivers/net/ethernet/freescale/fec_main.c +5 -2
index d48099f..cb6b66e 100644
@@ -1063,6 +1063,8 @@ static void fec_get_mac(struct net_device *ndev)
 
 /*
------------------------------------------------------------------------- */
 
+static void set_multicast_list(struct net_device *ndev);
+
 /*
  * Phy section
  */
@@ -1093,8 +1095,10 @@ static void fec_enet_adjust_link(struct net_device
 *ndev)
         }
 
         /* if any of the above changed restart the FEC */
-        if (status_change)
+        if (status_change) {
             fec_restart(ndev, phy_dev->duplex);
+            set_multicast_list(ndev);
+        }
     } else {
         if (fep->link) {
             fec_stop(ndev);
Quoted 1 line
Quoted 1 line

Is this solution correct?

There are many places to call fec_resart.
I suggest call set_multicase_list in fec_restart function.

Quoted 13 lines
Quoted 9 lines

Do you need more information?

Best regards
Stefan Wahren
--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw

From: Frank Li <[email protected]>
Data: Friday, March 07, 2014 1:43 AM

Quoted 78 lines

To: Fabio Estevam
Cc: Stefan Wahren; David Miller; [email protected]; linux-arm- [email protected]; Shawn Guo; Estevam Fabio-R49496; Li Frank-B20596; Duan Fugang-B38611; Sascha Hauer
Subject: Re: [Bug] net/fec on i.MX28: promiscuous mode lost after reconnecting network cable

Quoted 13 lines · Fabio Estevam

Adding some more folks on Cc.

Quoted 10 lines · Stefan Wahren

Hello,

i'm using a i.MX28 custom board (I2SE Duckbill) with 2 different Ethernet interfaces. Both interfaces should be used as bridge using bridge utils. One Ethernet interface is the buildin fec and the other is connect by spi. The board runs under Linux mainline 3.10. But the following problem still occurs on 3.14-rc4.

Here is the problem, if i disconnect and reconnect the Ethernet cable on the buildin fec (eth0), the bridge says the port comes up, but it doesn't

work.

Quoted 2 lines
Quoted 2 lines

After that any traffic to the fec is okay, but traffic "through" the bridge is lost. But i expect no traffic is lost, after reconnect the network

cable.

Quoted 53 lines
Quoted 53 lines

If i reset the board without disconnecting the cables, the traffic "through" the bridge works. If i force the promiscuous mode on the fec (eth0) after the reconnect, the bridge works too:

ifconfig eth0 promisc

After that, i made some research and probably found the cause of the problem. In the case that the bridge works (link state connected since
reboot) the register HW_ENET_MAC_RCR of the i.MX28 returns 0x45EE011C (PROM=1, promiscuous mode on). Then I disconnect the ethernet cable and reconnect it. After that the register returns 0x45EE0114 (PROM=0, promiscuous mode off) and the bridge doesn't work.

Based on this information, i created a patch against Linux 3.10. I'm not sure it's a good solution but it works. After a fec reset all register values of HW_ENET_MAC_RCR must be restored, but fec_restart do not handle them at all. So set_multicast_list is called after fec_restart to restore the promiscuous mode of the fec.

drivers/net/ethernet/freescale/fec_main.c +2 -2
index d48099f..cb6b66e 100644
@@ -1063,6 +1063,8 @@ static void fec_get_mac(struct net_device
 *ndev)
 
 /*
---------------------------------------------------------------------
---- */
 
+static void set_multicast_list(struct net_device *ndev);
+
 /*
  * Phy section
  */
@@ -1093,8 +1095,10 @@ static void fec_enet_adjust_link(struct

net_device
*ndev)

         }

         /* if any of the above changed restart the FEC */
drivers/net/ethernet/freescale/fec_main.c +3 -1
-        if (status_change)
+        if (status_change) {
             fec_restart(ndev, phy_dev->duplex);
+            set_multicast_list(ndev);
+        }
     } else {
         if (fep->link) {
             fec_stop(ndev);
Quoted 5 lines
Quoted 1 line
Quoted 1 line

Is this solution correct?

There are many places to call fec_resart.
I suggest call set_multicase_list in fec_restart function.

Yes, we had called set_multicase_list() in fec_restart() function. The patch is redundant.

Quoted 14 lines
Quoted 13 lines
Quoted 9 lines

Do you need more information?

Best regards
Stefan Wahren
--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#4 lore raw

Hi,

Am 07.03.2014 03:10, schrieb [email protected]:

Quoted 80 lines

From: Frank Li <[email protected]>
Data: Friday, March 07, 2014 1:43 AM

Quoted 77 lines

To: Fabio Estevam
Cc: Stefan Wahren; David Miller; [email protected]; linux-arm- [email protected]; Shawn Guo; Estevam Fabio-R49496; Li Frank-B20596; Duan Fugang-B38611; Sascha Hauer
Subject: Re: [Bug] net/fec on i.MX28: promiscuous mode lost after reconnecting network cable

Quoted 13 lines · Fabio Estevam

Adding some more folks on Cc.

Quoted 10 lines · Stefan Wahren

Hello,

i'm using a i.MX28 custom board (I2SE Duckbill) with 2 different Ethernet interfaces. Both interfaces should be used as bridge using bridge utils. One Ethernet interface is the buildin fec and the other is connect by spi. The board runs under Linux mainline 3.10. But the following problem still occurs on 3.14-rc4.

Here is the problem, if i disconnect and reconnect the Ethernet cable on the buildin fec (eth0), the bridge says the port comes up, but it doesn't

work.

Quoted 2 lines
Quoted 2 lines

After that any traffic to the fec is okay, but traffic "through" the bridge is lost. But i expect no traffic is lost, after reconnect the network

cable.

Quoted 52 lines
Quoted 52 lines

If i reset the board without disconnecting the cables, the traffic "through" the bridge works. If i force the promiscuous mode on the fec (eth0) after the reconnect, the bridge works too:

ifconfig eth0 promisc

After that, i made some research and probably found the cause of the problem. In the case that the bridge works (link state connected since
reboot) the register HW_ENET_MAC_RCR of the i.MX28 returns 0x45EE011C (PROM=1, promiscuous mode on). Then I disconnect the ethernet cable and reconnect it. After that the register returns 0x45EE0114 (PROM=0, promiscuous mode off) and the bridge doesn't work.

Based on this information, i created a patch against Linux 3.10. I'm not sure it's a good solution but it works. After a fec reset all register values of HW_ENET_MAC_RCR must be restored, but fec_restart do not handle them at all. So set_multicast_list is called after fec_restart to restore the promiscuous mode of the fec.

drivers/net/ethernet/freescale/fec_main.c +2 -2
index d48099f..cb6b66e 100644
@@ -1063,6 +1063,8 @@ static void fec_get_mac(struct net_device
 *ndev)
 
  /*
---------------------------------------------------------------------
---- */
 
+static void set_multicast_list(struct net_device *ndev);
+
  /*
   * Phy section
   */
@@ -1093,8 +1095,10 @@ static void fec_enet_adjust_link(struct

net_device
*ndev)

          }

          /* if any of the above changed restart the FEC */
drivers/net/ethernet/freescale/fec_main.c +3 -1
-        if (status_change)
+        if (status_change) {
              fec_restart(ndev, phy_dev->duplex);
+            set_multicast_list(ndev);
+        }
      } else {
          if (fep->link) {
              fec_stop(ndev);
Quoted 6 lines
Quoted 4 lines
Quoted 1 line
Quoted 1 line

Is this solution correct?

There are many places to call fec_resart.
I suggest call set_multicase_list in fec_restart function.

Yes, we had called set_multicase_list() in fec_restart() function. The patch is redundant.

thanks for the review. I didn't look too long at the linux-3.14-rc4, so i didn't see that. I only know that my problem is still reproducable in linux-3.14-rc5.

But i think i know why the problem still occurs. Both functions set_multicast_list() and fec_restart() write into the register FEC_R_CNTRL. The call of set_multicast_list() is too soon and has no effect in my case. The reason is that the register FEC_R_CNTRL is completly overwritten by the local variable rcntl of fec_restart.

Here is a patch against linux-3.14-rc5 which fixes my problem. I moved the function call to set_multicast_list() behind the register write to FEC_R_CNTRL.

drivers/net/ethernet/freescale/fec_main.c 2014-03-07 16:38:16.564026150 +0100 renamed from drivers/net/ethernet/freescale/fec_main.c 2014-03-03 03:56:16.000000000 +0100 +7 -7
@@ -527,13 +527,6 @@
     /* Clear any outstanding interrupt. */
     writel(0xffc00000, fep->hwp + FEC_IEVENT);
 
-    /* Setup multicast filter. */
-    set_multicast_list(ndev);
-#ifndef CONFIG_M5272
-    writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
-    writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
-#endif
-
     /* Set maximum receive buffer size. */
     writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE);
 
@@ -654,6 +647,13 @@
 
     writel(rcntl, fep->hwp + FEC_R_CNTRL);
 
+    /* Setup multicast filter. */
+    set_multicast_list(ndev);
+#ifndef CONFIG_M5272
+    writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
+    writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
+#endif
+
     if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
         /* enable ENET endian swap */
         ecntl |= (1 << 8);

Is this better? If so i'll create a proper patch.

BR Stefan

Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
Quoted 8 lines

Do you need more information?

Best regards
Stefan Wahren
--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#5 lore raw

Hi Stefan,

Quoted 1 line · Stefan Wahren

Is this better? If so i'll create a proper patch.

Your explanation and patch make sense. Please send it as a proper patch and put all these people on Cc.

Thanks,

Fabio Estevam

#6 lore raw

PATCH 1/1 eth: fec: Fix lost promiscuous mode after reconnecting cable

In reply to Stefan Wahren

If the Freescale i.MX28 fec is in promiscuous mode and network cable is reconnected then the promiscuous mode get lost. The problem is caused by a too soon call of set_multicast_list to re-enable promisc mode. The FEC_R_CNTRL register changes are overwritten by fec_restart.

This patch fixes this by moving the call behind the init of FEC_R_CNTRL register in fec_restart.

Successful tested on a i.MX28 board.

---
 drivers/net/ethernet/freescale/fec_main.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
(quoted diff) +0 -0

b/drivers/net/ethernet/freescale/fec_main.c
index 479a7cb..03a3513 100644

drivers/net/ethernet/freescale/fec_main.c +7 -7
@@ -528,13 +528,6 @@ fec_restart(struct net_device *ndev, int duplex)
     /* Clear any outstanding interrupt. */
     writel(0xffc00000, fep->hwp + FEC_IEVENT);
 
-    /* Setup multicast filter. */
-    set_multicast_list(ndev);
-#ifndef CONFIG_M5272
-    writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
-    writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
-#endif
-
     /* Set maximum receive buffer size. */
     writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE);
 
@@ -655,6 +648,13 @@ fec_restart(struct net_device *ndev, int duplex)
 
     writel(rcntl, fep->hwp + FEC_R_CNTRL);
 
+    /* Setup multicast filter. */
+    set_multicast_list(ndev);
+#ifndef CONFIG_M5272
+    writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
+    writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
+#endif
+
     if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
         /* enable ENET endian swap */
         ecntl |= (1 << 8);
Signature · 1 line
1.7.10.4
Acked-by Fugang Duan on v1 1/1
#7 lore raw

RE: [PATCH net] eth: fec: Fix lost promiscuous mode after reconnecting cable

From: Stefan Wahren <[email protected]>
Data: Tuesday, March 11, 2014 2:19 AM

Quoted 55 lines

To: Duan Fugang-B38611; Frank Li; Fabio Estevam
Cc: David Miller; [email protected]; linux-arm- [email protected]; Shawn Guo; Estevam Fabio-R49496; Li Frank-B20596; Sascha Hauer
Subject: [PATCH net] eth: fec: Fix lost promiscuous mode after reconnecting cable

If the Freescale i.MX28 fec is in promiscuous mode and network cable is reconnected then the promiscuous mode get lost. The problem is caused by a too soon call of set_multicast_list to re-enable promisc mode.
The FEC_R_CNTRL register changes are overwritten by fec_restart.

This patch fixes this by moving the call behind the init of FEC_R_CNTRL register in fec_restart.

Successful tested on a i.MX28 board.

---
drivers/net/ethernet/freescale/fec_main.c | 14 +++++++-------

1 file changed, 7 insertions(+), 7 deletions(-)
drivers/net/ethernet/freescale/fec_main.c +6 -8
index 479a7cb..03a3513 100644
@@ -528,13 +528,6 @@ fec_restart(struct net_device *ndev, int duplex)
    /* Clear any outstanding interrupt. */
    writel(0xffc00000, fep->hwp + FEC_IEVENT);
 
-    /* Setup multicast filter. */
-    set_multicast_list(ndev);
-#ifndef CONFIG_M5272
-    writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
-    writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
-#endif
-
    /* Set maximum receive buffer size. */
    writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE);
 
@@ -655,6 +648,13 @@ fec_restart(struct net_device *ndev, int duplex)
 
    writel(rcntl, fep->hwp + FEC_R_CNTRL);
 
+    /* Setup multicast filter. */
+    set_multicast_list(ndev);
+#ifndef CONFIG_M5272
+    writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
+    writel(0, fep->hwp + FEC_HASH_TABLE_LOW); #endif
+
    if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
        /* enable ENET endian swap */
        ecntl |= (1 << 8);
--
Quoted 3 lines

1.7.10.4

maintainer
#8 lore raw

Re: [PATCH net] eth: fec: Fix lost promiscuous mode after reconnecting cable

In reply to Stefan Wahren

From: Stefan Wahren <[email protected]>
Date: Mon, 10 Mar 2014 19:18:56 +0100

Quoted 11 lines

If the Freescale i.MX28 fec is in promiscuous mode and network cable is reconnected then the promiscuous mode get lost. The problem is caused by a too soon call of set_multicast_list to re-enable promisc mode. The FEC_R_CNTRL register changes are overwritten by fec_restart.

This patch fixes this by moving the call behind the init of FEC_R_CNTRL register in fec_restart.

Successful tested on a i.MX28 board.

Your email client has corrupted your patch, making it unusable for us.

In particular, it has transformed TAB characters into spaces.

Please fix this and resubmit your patch, thank you.

#9 lore raw

Re: [PATCH net resend] eth: fec: Fix lost promiscuous mode after reconnecting cable

If the Freescale fec is in promiscuous mode and network cable is reconnected then the promiscuous mode get lost. The problem is caused by a too soon call of set_multicast_list to re-enable promisc mode. The FEC_R_CNTRL register changes are overwritten by fec_restart.

This patch fixes this by moving the call behind the init of FEC_R_CNTRL register in fec_restart.

Successful tested on a i.MX28 board.

---
 drivers/net/ethernet/freescale/fec_main.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/net/ethernet/freescale/fec_main.c +7 -7
index 479a7cb..03a3513 100644
@@ -528,13 +528,6 @@ fec_restart(struct net_device *ndev, int duplex)
 	/* Clear any outstanding interrupt. */
 	writel(0xffc00000, fep->hwp + FEC_IEVENT);
 
-	/* Setup multicast filter. */
-	set_multicast_list(ndev);
-#ifndef CONFIG_M5272
-	writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
-	writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
-#endif
-
 	/* Set maximum receive buffer size. */
 	writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE);
 
@@ -655,6 +648,13 @@ fec_restart(struct net_device *ndev, int duplex)
 
 	writel(rcntl, fep->hwp + FEC_R_CNTRL);
 
+	/* Setup multicast filter. */
+	set_multicast_list(ndev);
+#ifndef CONFIG_M5272
+	writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
+	writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
+#endif
+
 	if (id_entry->driver_data & FEC_QUIRK_ENET_MAC) {
 		/* enable ENET endian swap */
 		ecntl |= (1 << 8);
Signature · 1 line
1.7.10.4
maintainer Applied
#10 lore raw

Re: [PATCH net resend] eth: fec: Fix lost promiscuous mode after reconnecting cable

From: Stefan Wahren <[email protected]>
Date: Wed, 12 Mar 2014 11:28:19 +0100

Quoted 11 lines

If the Freescale fec is in promiscuous mode and network cable is reconnected then the promiscuous mode get lost. The problem is caused by a too soon call of set_multicast_list to re-enable promisc mode. The FEC_R_CNTRL register changes are overwritten by fec_restart.

This patch fixes this by moving the call behind the init of FEC_R_CNTRL register in fec_restart.

Successful tested on a i.MX28 board.

Applied, thank you.