e1000/base: add new devices
authorWenzhuo Lu <wenzhuo.lu@intel.com>
Fri, 16 Oct 2015 02:50:48 +0000 (10:50 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 26 Oct 2015 20:52:50 +0000 (21:52 +0100)
Add some new i218 devices.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
drivers/net/e1000/base/e1000_api.c
drivers/net/e1000/base/e1000_defines.h
drivers/net/e1000/base/e1000_hw.h
drivers/net/e1000/base/e1000_ich8lan.c

index bfddb79..5ec0ad1 100644 (file)
@@ -292,6 +292,10 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
        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_LM2:
+       case E1000_DEV_ID_PCH_I218_V2:
+       case E1000_DEV_ID_PCH_I218_LM3:
+       case E1000_DEV_ID_PCH_I218_V3:
                mac->type = e1000_pch_lpt;
                break;
        case E1000_DEV_ID_82575EB_COPPER:
index 605e26e..71bd2e0 100644 (file)
@@ -197,6 +197,7 @@ POSSIBILITY OF SUCH DAMAGE.
 #define E1000_RCTL_LBM_TCVR    0x000000C0 /* tcvr loopback mode */
 #define E1000_RCTL_DTYP_PS     0x00000400 /* Packet Split descriptor */
 #define E1000_RCTL_RDMTS_HALF  0x00000000 /* Rx desc min thresh size */
+#define E1000_RCTL_RDMTS_HEX   0x00010000
 #define E1000_RCTL_MO_SHIFT    12 /* multicast offset shift */
 #define E1000_RCTL_MO_3                0x00003000 /* multicast offset 15:4 */
 #define E1000_RCTL_BAM         0x00008000 /* broadcast enable */
@@ -1467,6 +1468,7 @@ POSSIBILITY OF SUCH DAMAGE.
 #define E1000_RXPBS_SIZE_I210_MASK     0x0000003F /* Rx packet buffer size */
 #define E1000_TXPB0S_SIZE_I210_MASK    0x0000003F /* Tx packet buffer 0 size */
 
+
 /* Proxy Filter Control */
 #define E1000_PROXYFC_D0               0x00000001 /* Enable offload in D0 */
 #define E1000_PROXYFC_EX               0x00000004 /* Directed exact proxy */
index b0e7a61..154b9e5 100644 (file)
@@ -132,6 +132,10 @@ struct e1000_hw;
 #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_LM2              0x15A0
+#define E1000_DEV_ID_PCH_I218_V2               0x15A1
+#define E1000_DEV_ID_PCH_I218_LM3              0x15A2 /* Wildcat Point PCH */
+#define E1000_DEV_ID_PCH_I218_V3               0x15A3 /* Wildcat Point PCH */
 #define E1000_DEV_ID_82576                     0x10C9
 #define E1000_DEV_ID_82576_FIBER               0x10E6
 #define E1000_DEV_ID_82576_SERDES              0x10E7
index f98d54e..6d998df 100644 (file)
@@ -62,6 +62,10 @@ POSSIBILITY OF SUCH DAMAGE.
  * Ethernet Connection I217-V
  * Ethernet Connection I218-V
  * Ethernet Connection I218-LM
+ * Ethernet Connection (2) I218-LM
+ * Ethernet Connection (2) I218-V
+ * Ethernet Connection (3) I218-LM
+ * Ethernet Connection (3) I218-V
  */
 
 #include "e1000_api.h"
@@ -1052,19 +1056,19 @@ s32 e1000_enable_ulp_lpt_lp(struct e1000_hw *hw, bool to_sx)
        if ((hw->mac.type < e1000_pch_lpt) ||
            (hw->device_id == E1000_DEV_ID_PCH_LPT_I217_LM) ||
            (hw->device_id == E1000_DEV_ID_PCH_LPT_I217_V) ||
+           (hw->device_id == E1000_DEV_ID_PCH_I218_LM2) ||
+           (hw->device_id == E1000_DEV_ID_PCH_I218_V2) ||
            (hw->dev_spec.ich8lan.ulp_state == e1000_ulp_state_on))
                return 0;
 
        if (!to_sx) {
                int i = 0;
-
                /* Poll up to 5 seconds for Cable Disconnected indication */
                while (!(E1000_READ_REG(hw, E1000_FEXT) &
                         E1000_FEXT_PHY_CABLE_DISCONNECTED)) {
                        /* Bail if link is re-acquired */
                        if (E1000_READ_REG(hw, E1000_STATUS) & E1000_STATUS_LU)
                                return -E1000_ERR_PHY;
-
                        if (i++ == 100)
                                break;
 
@@ -1197,6 +1201,8 @@ s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force)
        if ((hw->mac.type < e1000_pch_lpt) ||
            (hw->device_id == E1000_DEV_ID_PCH_LPT_I217_LM) ||
            (hw->device_id == E1000_DEV_ID_PCH_LPT_I217_V) ||
+           (hw->device_id == E1000_DEV_ID_PCH_I218_LM2) ||
+           (hw->device_id == E1000_DEV_ID_PCH_I218_V2) ||
            (hw->dev_spec.ich8lan.ulp_state == e1000_ulp_state_off))
                return 0;
 
@@ -1452,7 +1458,9 @@ STATIC s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
 
        /* 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_LM3) ||
+           (hw->device_id == E1000_DEV_ID_PCH_I218_V3)) {
                ret_val = e1000_k1_workaround_lpt_lp(hw, link);
                if (ret_val)
                        return ret_val;
@@ -4794,7 +4802,9 @@ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw)
                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_LM3) ||
+                   (device_id == E1000_DEV_ID_PCH_I218_V3)) {
                        u32 fextnvm6 = E1000_READ_REG(hw, E1000_FEXTNVM6);
 
                        E1000_WRITE_REG(hw, E1000_FEXTNVM6,