Use different rxdctl register for 82575 cards.
authorGerd Zellweger <mail@gerdzellweger.com>
Fri, 24 May 2013 06:44:29 +0000 (08:44 +0200)
committerGerd Zellweger <mail@gerdzellweger.com>
Fri, 24 May 2013 09:12:36 +0000 (11:12 +0200)
devices/e1000.dev
usr/drivers/e1000/e1000n_hwinit.c

index 0aa6168..a5cbc81 100644 (file)
@@ -616,15 +616,28 @@ device e1000 lsbfirst ( addr base ) "Intel e1000 Gigabit Ethernet" {
     gran_cache = 0 "Cache line granularity";
     gran_desc  = 1 "Descriptor granularity";
   };
+
   regarray rxdctl rw addr(base, 0x2828)[2;0x100] "Rx descriptor control" {
-    pthresh    6 "Prefetch threshold";
-    _          2 mbz;
-    hthresh    6 "Host threshold";
-    _          2 mbz;
-    wthresh    6 "Write back threshold";
-    _          2 mbz;
-    gran       1 type(threshgran) "Granularity";
-    _          7 mbz;
+    pthresh 6 "Prefetch threshold";
+    _       2 mbz;
+    hthresh 6 "Host threshold";
+    _       2 mbz;
+    wthresh 6 "Write back threshold";
+    _       2 mbz;
+    gran    1 type(threshgran) "Granularity";
+    _       7 mbz;
+  };
+
+  regarray rxdctl_82575 rw also addr(base, 0x2828)[2;0x100] "Rx descriptor control" {
+    pthresh 6 "Prefetch threshold";
+    _       2 mbz;
+    hthresh 6 "Host threshold";
+    _       2 mbz;
+    wthresh 6 "Write back threshold";
+    _       3 mbz;
+    enable  1 "Granularity";
+    swflush 1 "Receive Software Flush";
+    _       5 mbz;
   };
 
   // 13.3.45
index c8ac9e9..fda09ae 100644 (file)
@@ -717,7 +717,14 @@ void e1000_hwinit(e1000_device_t *dev, struct device_mem *bar_info,
 
     /* --------------------- receive setup --------------------- */
     /* receive descriptor control */
-    {
+    if (dev->mac_type == e1000_82575 || dev->mac_type == e1000_82576) {
+        e1000_rxdctl_82575_t rxdctl = 0;
+
+        rxdctl = e1000_rxdctl_82575_enable_insert(rxdctl, 1);
+        rxdctl = e1000_rxdctl_82575_wthresh_insert(rxdctl, 1);
+        e1000_rxdctl_82575_wr(dev->device, 0, rxdctl);
+    }
+    else {
         e1000_rxdctl_t rxdctl = 0;
 
         rxdctl = e1000_rxdctl_gran_insert(rxdctl, 1);