aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/realtek/8139cp.c
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2011-12-30 18:44:42 -0500
committerDavid S. Miller <davem@davemloft.net>2012-01-03 12:47:50 -0500
commitf872b237c1750221932e715da2552225afe4a95c (patch)
tree02cea369e33f73f09cb4c77f208b4de33d79617b /drivers/net/ethernet/realtek/8139cp.c
parent7d03f5a48e4d90854275b06433626243b3b3db17 (diff)
8139cp: properly config rx mode after resuming
Rx mode should be reset after resming, so unconditionally updating rx mode rather than conditionally updating based on the value we remembered, otherwise unexpected value may be used by the nic after resuming. btw. I find and test this when debugging guest hibernation in qemu, as I did not have a 8139cp card in hand, this patch is untested in a physical 8139cp card, plase review it carefully. Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/realtek/8139cp.c')
-rw-r--r--drivers/net/ethernet/realtek/8139cp.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
index 886e6bec971a..cc6b391479ca 100644
--- a/drivers/net/ethernet/realtek/8139cp.c
+++ b/drivers/net/ethernet/realtek/8139cp.c
@@ -859,7 +859,6 @@ static void __cp_set_rx_mode (struct net_device *dev)
859 struct cp_private *cp = netdev_priv(dev); 859 struct cp_private *cp = netdev_priv(dev);
860 u32 mc_filter[2]; /* Multicast hash filter */ 860 u32 mc_filter[2]; /* Multicast hash filter */
861 int rx_mode; 861 int rx_mode;
862 u32 tmp;
863 862
864 /* Note: do not reorder, GCC is clever about common statements. */ 863 /* Note: do not reorder, GCC is clever about common statements. */
865 if (dev->flags & IFF_PROMISC) { 864 if (dev->flags & IFF_PROMISC) {
@@ -886,11 +885,9 @@ static void __cp_set_rx_mode (struct net_device *dev)
886 } 885 }
887 886
888 /* We can safely update without stopping the chip. */ 887 /* We can safely update without stopping the chip. */
889 tmp = cp_rx_config | rx_mode; 888 cp->rx_config = cp_rx_config | rx_mode;
890 if (cp->rx_config != tmp) { 889 cpw32_f(RxConfig, cp->rx_config);
891 cpw32_f (RxConfig, tmp); 890
892 cp->rx_config = tmp;
893 }
894 cpw32_f (MAR0 + 0, mc_filter[0]); 891 cpw32_f (MAR0 + 0, mc_filter[0]);
895 cpw32_f (MAR0 + 4, mc_filter[1]); 892 cpw32_f (MAR0 + 4, mc_filter[1]);
896} 893}