Author: erj
Date: Thu Jun  4 20:39:28 2020
New Revision: 361805
URL: https://svnweb.freebsd.org/changeset/base/361805

Log:
  em(4): Add support for Comet Lake Mobile Platform, update shared code
  
  This change introduces Comet Lake Mobile Platform support in the e1000
  driver along with shared code patches described below.
  
  - Cast return value of e1000_ltr2ns() to higher type to avoid overflow
  - Remove useless statement of assigning act_offset
  - Add initialization of identification LED
  - Fix flow control setup after connected standby:
    After connected standby the driver blocks resets during
    "AdapterStart" and skips flow control setup. This change adds
    condition in e1000_setup_link_ich8lan() to always setup flow control
    and to setup physical interface only when there is no need to block
    resets.
  
  Signed-off-by: Piotr Pietruszewski <piotr.pietruszew...@intel.com>
  
  Submitted by: Piotr Pietruszewski <piotr.pietruszew...@intel.com>
  Reviewed by:  erj@
  Tested by:    Jeffrey Pieper <jeffrey.e.pie...@intel.com>
  MFC after:    1 week
  Relnotes:     yes
  Sponsored by: Intel Corporation
  Differential Revision:        https://reviews.freebsd.org/D25035

Modified:
  head/sys/dev/e1000/e1000_api.c
  head/sys/dev/e1000/e1000_hw.h
  head/sys/dev/e1000/e1000_i210.c
  head/sys/dev/e1000/e1000_ich8lan.c
  head/sys/dev/e1000/if_em.c

Modified: head/sys/dev/e1000/e1000_api.c
==============================================================================
--- head/sys/dev/e1000/e1000_api.c      Thu Jun  4 20:12:34 2020        
(r361804)
+++ head/sys/dev/e1000/e1000_api.c      Thu Jun  4 20:39:28 2020        
(r361805)
@@ -309,6 +309,8 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
        case E1000_DEV_ID_PCH_SPT_I219_V4:
        case E1000_DEV_ID_PCH_SPT_I219_LM5:
        case E1000_DEV_ID_PCH_SPT_I219_V5:
+       case E1000_DEV_ID_PCH_CMP_I219_LM12:
+       case E1000_DEV_ID_PCH_CMP_I219_V12:
                mac->type = e1000_pch_spt;
                break;
        case E1000_DEV_ID_PCH_CNP_I219_LM6:
@@ -319,7 +321,10 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
        case E1000_DEV_ID_PCH_ICP_I219_V8:
        case E1000_DEV_ID_PCH_ICP_I219_LM9:
        case E1000_DEV_ID_PCH_ICP_I219_V9:
-       case E1000_DEV_ID_PCH_ICP_I219_V10:
+       case E1000_DEV_ID_PCH_CMP_I219_LM10:
+       case E1000_DEV_ID_PCH_CMP_I219_V10:
+       case E1000_DEV_ID_PCH_CMP_I219_LM11:
+       case E1000_DEV_ID_PCH_CMP_I219_V11:
                mac->type = e1000_pch_cnp;
                break;
        case E1000_DEV_ID_82575EB_COPPER:

Modified: head/sys/dev/e1000/e1000_hw.h
==============================================================================
--- head/sys/dev/e1000/e1000_hw.h       Thu Jun  4 20:12:34 2020        
(r361804)
+++ head/sys/dev/e1000/e1000_hw.h       Thu Jun  4 20:39:28 2020        
(r361805)
@@ -155,7 +155,12 @@ struct e1000_hw;
 #define E1000_DEV_ID_PCH_ICP_I219_V8           0x15E0
 #define E1000_DEV_ID_PCH_ICP_I219_LM9          0x15E1
 #define E1000_DEV_ID_PCH_ICP_I219_V9           0x15E2
-#define E1000_DEV_ID_PCH_ICP_I219_V10          0x0D4F
+#define E1000_DEV_ID_PCH_CMP_I219_LM10         0x0D4E
+#define E1000_DEV_ID_PCH_CMP_I219_V10          0x0D4F
+#define E1000_DEV_ID_PCH_CMP_I219_LM11         0x0D4C
+#define E1000_DEV_ID_PCH_CMP_I219_V11          0x0D4D
+#define E1000_DEV_ID_PCH_CMP_I219_LM12         0x0D53
+#define E1000_DEV_ID_PCH_CMP_I219_V12          0x0D55
 #define E1000_DEV_ID_82576                     0x10C9
 #define E1000_DEV_ID_82576_FIBER               0x10E6
 #define E1000_DEV_ID_82576_SERDES              0x10E7

Modified: head/sys/dev/e1000/e1000_i210.c
==============================================================================
--- head/sys/dev/e1000/e1000_i210.c     Thu Jun  4 20:12:34 2020        
(r361804)
+++ head/sys/dev/e1000/e1000_i210.c     Thu Jun  4 20:39:28 2020        
(r361805)
@@ -774,6 +774,7 @@ static s32 e1000_get_cfg_done_i210(struct e1000_hw *hw
  **/
 s32 e1000_init_hw_i210(struct e1000_hw *hw)
 {
+       struct e1000_mac_info *mac = &hw->mac;
        s32 ret_val;
 
        DEBUGFUNC("e1000_init_hw_i210");
@@ -784,6 +785,10 @@ s32 e1000_init_hw_i210(struct e1000_hw *hw)
                        return ret_val;
        }
        hw->phy.ops.get_cfg_done = e1000_get_cfg_done_i210;
+
+       /* Initialize identification LED */
+       mac->ops.id_led_init(hw);
+
        ret_val = e1000_init_hw_82575(hw);
        return ret_val;
 }

Modified: head/sys/dev/e1000/e1000_ich8lan.c
==============================================================================
--- head/sys/dev/e1000/e1000_ich8lan.c  Thu Jun  4 20:12:34 2020        
(r361804)
+++ head/sys/dev/e1000/e1000_ich8lan.c  Thu Jun  4 20:39:28 2020        
(r361805)
@@ -1091,7 +1091,7 @@ static u64 e1000_ltr2ns(u16 ltr)
        value = ltr & E1000_LTRV_VALUE_MASK;
        scale = (ltr & E1000_LTRV_SCALE_MASK) >> E1000_LTRV_SCALE_SHIFT;
 
-       return value * (1 << (scale * E1000_LTRV_SCALE_FACTOR));
+       return value * (1ULL << (scale * E1000_LTRV_SCALE_FACTOR));
 }
 
 /**
@@ -4161,13 +4161,6 @@ static s32 e1000_update_nvm_checksum_spt(struct e1000_
        if (ret_val)
                goto release;
 
-       /* And invalidate the previously valid segment by setting
-        * its signature word (0x13) high_byte to 0b. This can be
-        * done without an erase because flash erase sets all bits
-        * to 1's. We can write 1's to 0's without an erase
-        */
-       act_offset = (old_bank_offset + E1000_ICH_NVM_SIG_WORD) * 2 + 1;
-
        /* offset in words but we read dword*/
        act_offset = old_bank_offset + E1000_ICH_NVM_SIG_WORD - 1;
        ret_val = e1000_read_flash_dword_ich8lan(hw, act_offset, &dword);
@@ -5235,9 +5228,6 @@ static s32 e1000_setup_link_ich8lan(struct e1000_hw *h
 
        DEBUGFUNC("e1000_setup_link_ich8lan");
 
-       if (hw->phy.ops.check_reset_block(hw))
-               return E1000_SUCCESS;
-
        /* ICH parts do not have a word in the NVM to determine
         * the default flow control setting, so we explicitly
         * set it to full.
@@ -5253,10 +5243,12 @@ static s32 e1000_setup_link_ich8lan(struct e1000_hw *h
        DEBUGOUT1("After fix-ups FlowControl is now = %x\n",
                hw->fc.current_mode);
 
-       /* Continue to configure the copper link. */
-       ret_val = hw->mac.ops.setup_physical_interface(hw);
-       if (ret_val)
-               return ret_val;
+       if (!hw->phy.ops.check_reset_block(hw)) {
+               /* Continue to configure the copper link. */
+               ret_val = hw->mac.ops.setup_physical_interface(hw);
+               if (ret_val)
+                       return ret_val;
+       }
 
        E1000_WRITE_REG(hw, E1000_FCTTV, hw->fc.pause_time);
        if ((hw->phy.type == e1000_phy_82578) ||

Modified: head/sys/dev/e1000/if_em.c
==============================================================================
--- head/sys/dev/e1000/if_em.c  Thu Jun  4 20:12:34 2020        (r361804)
+++ head/sys/dev/e1000/if_em.c  Thu Jun  4 20:39:28 2020        (r361805)
@@ -174,7 +174,12 @@ static pci_vendor_info_t em_vendor_info_array[] =
        PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_V8, "Intel(R) PRO/1000 Network 
Connection"),
        PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_LM9, "Intel(R) PRO/1000 Network 
Connection"),
        PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_V9, "Intel(R) PRO/1000 Network 
Connection"),
-       PVID(0x8086, E1000_DEV_ID_PCH_ICP_I219_V10, "Intel(R) PRO/1000 Network 
Connection"),
+       PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM10, "Intel(R) PRO/1000 Network 
Connection"),
+       PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V10, "Intel(R) PRO/1000 Network 
Connection"),
+       PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM11, "Intel(R) PRO/1000 Network 
Connection"),
+       PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V11, "Intel(R) PRO/1000 Network 
Connection"),
+       PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_LM12, "Intel(R) PRO/1000 Network 
Connection"),
+       PVID(0x8086, E1000_DEV_ID_PCH_CMP_I219_V12, "Intel(R) PRO/1000 Network 
Connection"),
        /* required last entry */
        PVID_END
 };
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to