Bug 191192 - [e1000] [patch] add support for Intel I218 V2 (0x15a1 PCI ID) network controller in the H97I chipset
Summary: [e1000] [patch] add support for Intel I218 V2 (0x15a1 PCI ID) network control...
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 10.0-RELEASE
Hardware: Any Any
: --- Affects Some People
Assignee: jfv
URL:
Keywords: IntelNetworking
Depends on:
Blocks:
 
Reported: 2014-06-19 19:30 UTC by Nick Chernyy
Modified: 2015-06-30 17:48 UTC (History)
3 users (show)

See Also:
bugmeister: mfc-stable8?
bugmeister: mfc-stable9?
bugmeister: mfc-stable10?


Attachments
tar file of diffs (5.00 KB, application/x-tar)
2014-06-19 19:31 UTC, Nick Chernyy
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Nick Chernyy 2014-06-19 19:30:26 UTC
Hello!
  I am running FreeBSD 10-RELEASE on a system with the H97I chipset which has an Intel network controller based on I218 with ID 0x15A1 (as seen in pciconf -lv). I looked around the internet and saw that this was still not supported and was able to find this patch from intel for Linux: https://lists.ubuntu.com/archives/kernel-team/2013-August/031363.html . I ported those changes to files in /usr/src/sys/dev/e1000 (diffs attached) and rebuilt GENERIC kernel and was able to use the network interface. I checked svn head for -CURRENT and didn't see this hardware ID yet so I decided to file this bug report in case there is interest to have support added. Thanks.
Comment 1 Nick Chernyy 2014-06-19 19:31:23 UTC
Created attachment 143933 [details]
tar file of diffs
Comment 2 Mark Linimon freebsd_committer freebsd_triage 2014-06-26 01:59:32 UTC
Over to maintainers.
Comment 3 Hiren Panchasara freebsd_committer 2014-06-26 17:55:20 UTC
Unified version of the submitted diffs. 
Assigning to jfv@

% svn diff
Index: sys/dev/e1000/e1000_api.c
===================================================================
--- sys/dev/e1000/e1000_api.c   (revision 267197)
+++ sys/dev/e1000/e1000_api.c   (working copy)
@@ -293,6 +293,7 @@
        case E1000_DEV_ID_PCH_LPT_I217_V:
        case E1000_DEV_ID_PCH_LPTLP_I218_LM:
        case E1000_DEV_ID_PCH_LPTLP_I218_V:
+       case E1000_DEV_ID_PCH_I218_V2:
                mac->type = e1000_pch_lpt;
                break;
        case E1000_DEV_ID_82575EB_COPPER:
Index: sys/dev/e1000/e1000_hw.h
===================================================================
--- sys/dev/e1000/e1000_hw.h    (revision 267197)
+++ sys/dev/e1000/e1000_hw.h    (working copy)
@@ -133,6 +133,7 @@
 #define E1000_DEV_ID_PCH_LPT_I217_V            0x153B
 #define E1000_DEV_ID_PCH_LPTLP_I218_LM         0x155A
 #define E1000_DEV_ID_PCH_LPTLP_I218_V          0x1559
+#define E1000_DEV_ID_PCH_I218_V2               0x15A1
 #define E1000_DEV_ID_82576                     0x10C9
 #define E1000_DEV_ID_82576_FIBER               0x10E6
 #define E1000_DEV_ID_82576_SERDES              0x10E7
Index: sys/dev/e1000/e1000_ich8lan.c
===================================================================
--- sys/dev/e1000/e1000_ich8lan.c       (revision 267197)
+++ sys/dev/e1000/e1000_ich8lan.c       (working copy)
@@ -61,7 +61,7 @@
  * 82579V Gigabit Network Connection
  * Ethernet Connection I217-LM
  * Ethernet Connection I217-V
- * Ethernet Connection I218-V
+ * Ethernet Connection I218-V2
  * Ethernet Connection I218-LM
  */
 
@@ -1246,7 +1246,8 @@
 
        /* Work-around I218 hang issue */
        if ((hw->device_id == E1000_DEV_ID_PCH_LPTLP_I218_LM) ||
-           (hw->device_id == E1000_DEV_ID_PCH_LPTLP_I218_V)) {
+           (hw->device_id == E1000_DEV_ID_PCH_LPTLP_I218_V) ||
+           (hw->device_id == E1000_DEV_ID_PCH_I218_V2)) {
                ret_val = e1000_k1_workaround_lpt_lp(hw, link);
                if (ret_val)
                        return ret_val;
@@ -4597,7 +4598,8 @@
                u16 phy_reg, device_id = hw->device_id;
 
                if ((device_id == E1000_DEV_ID_PCH_LPTLP_I218_LM) ||
-                   (device_id == E1000_DEV_ID_PCH_LPTLP_I218_V)) {
+                   (device_id == E1000_DEV_ID_PCH_LPTLP_I218_V) ||
+                   (device_id == E1000_DEV_ID_PCH_I218_V2)) {
                        u32 fextnvm6 = E1000_READ_REG(hw, E1000_FEXTNVM6);
 
                        E1000_WRITE_REG(hw, E1000_FEXTNVM6,
Comment 4 John Baldwin freebsd_committer freebsd_triage 2014-06-27 15:22:49 UTC
Looks like Jack just committed an update to the driver yesterday that is a superset of this.