@ -237,7 +237,7 @@ static bool e1000_phy_is_accessible_pchlan(struct e1000_hw *hw)
if ( ret_val )
return false ;
out :
if ( ( hw - > mac . type = = e1000_pch_lpt ) | | ( hw - > mac . type = = e1000_pch_spt ) ) {
if ( hw - > mac . type > = e1000_pch_lpt ) {
/* Only unforce SMBus if ME is not active */
if ( ! ( er32 ( FWSM ) & E1000_ICH_FWSM_FW_VALID ) ) {
/* Unforce SMBus mode in PHY */
@ -333,6 +333,7 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
switch ( hw - > mac . type ) {
case e1000_pch_lpt :
case e1000_pch_spt :
case e1000_pch_cnp :
if ( e1000_phy_is_accessible_pchlan ( hw ) )
break ;
@ -474,6 +475,7 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
case e1000_pch2lan :
case e1000_pch_lpt :
case e1000_pch_spt :
case e1000_pch_cnp :
/* In case the PHY needs to be in mdio slow mode,
* set slow mode and try to get the PHY id again .
*/
@ -607,7 +609,7 @@ static s32 e1000_init_nvm_params_ich8lan(struct e1000_hw *hw)
nvm - > type = e1000_nvm_flash_sw ;
if ( hw - > mac . type = = e1000_pch_spt ) {
if ( hw - > mac . type > = e1000_pch_spt ) {
/* in SPT, gfpreg doesn't exist. NVM size is taken from the
* STRAP register . This is because in SPT the GbE Flash region
* is no longer accessed through the flash registers . Instead ,
@ -715,6 +717,7 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
/* fall-through */
case e1000_pch_lpt :
case e1000_pch_spt :
case e1000_pch_cnp :
case e1000_pchlan :
/* check management mode */
mac - > ops . check_mng_mode = e1000_check_mng_mode_pchlan ;
@ -732,7 +735,7 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
break ;
}
if ( ( mac - > type = = e1000_pch_lpt ) | | ( mac - > type = = e1000_pch_spt ) ) {
if ( mac - > type > = e1000_pch_lpt ) {
mac - > rar_entry_count = E1000_PCH_LPT_RAR_ENTRIES ;
mac - > ops . rar_set = e1000_rar_set_pch_lpt ;
mac - > ops . setup_physical_interface =
@ -1399,9 +1402,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
* aggressive resulting in many collisions . To avoid this , increase
* the IPG and reduce Rx latency in the PHY .
*/
if ( ( ( hw - > mac . type = = e1000_pch2lan ) | |
( hw - > mac . type = = e1000_pch_lpt ) | |
( hw - > mac . type = = e1000_pch_spt ) ) & & link ) {
if ( ( hw - > mac . type > = e1000_pch2lan ) & & link ) {
u16 speed , duplex ;
e1000e_get_speed_and_duplex_copper ( hw , & speed , & duplex ) ;
@ -1412,7 +1413,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
tipg_reg | = 0xFF ;
/* Reduce Rx latency in analog PHY */
emi_val = 0 ;
} else if ( hw - > mac . type = = e1000_pch_spt & &
} else if ( hw - > mac . type > = e1000_pch_spt & &
duplex = = FULL_DUPLEX & & speed ! = SPEED_1000 ) {
tipg_reg | = 0xC ;
emi_val = 1 ;
@ -1435,8 +1436,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
emi_addr = I217_RX_CONFIG ;
ret_val = e1000_write_emi_reg_locked ( hw , emi_addr , emi_val ) ;
if ( hw - > mac . type = = e1000_pch_lpt | |
hw - > mac . type = = e1000_pch_spt ) {
if ( hw - > mac . type > = e1000_pch_lpt ) {
u16 phy_reg ;
e1e_rphy_locked ( hw , I217_PLL_CLOCK_GATE_REG , & phy_reg ) ;
@ -1452,7 +1452,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
if ( ret_val )
return ret_val ;
if ( hw - > mac . type = = e1000_pch_spt ) {
if ( hw - > mac . type > = e1000_pch_spt ) {
u16 data ;
u16 ptr_gap ;
@ -1502,7 +1502,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
* on power up .
* Set the Beacon Duration for I217 to 8 usec
*/
if ( ( hw - > mac . type = = e1000_pch_lpt ) | | ( hw - > mac . type = = e1000_pch_spt ) ) {
if ( hw - > mac . type > = e1000_pch_lpt ) {
u32 mac_reg ;
mac_reg = er32 ( FEXTNVM4 ) ;
@ -1520,8 +1520,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
if ( ret_val )
return ret_val ;
}
if ( ( hw - > mac . type = = e1000_pch_lpt ) | |
( hw - > mac . type = = e1000_pch_spt ) ) {
if ( hw - > mac . type > = e1000_pch_lpt ) {
/* Set platform power management values for
* Latency Tolerance Reporting ( LTR )
*/
@ -1533,15 +1532,18 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
/* Clear link partner's EEE ability */
hw - > dev_spec . ich8lan . eee_lp_ability = 0 ;
/* FEXTNVM6 K1-off workaround */
if ( hw - > mac . type = = e1000_pch_spt ) {
u32 pcieanacfg = er32 ( PCIEANACFG ) ;
if ( hw - > mac . type > = e1000_pch_lpt ) {
u32 fextnvm6 = er32 ( FEXTNVM6 ) ;
if ( pcieanacfg & E1000_FEXTNVM6_K1_OFF_ENABLE )
fextnvm6 | = E1000_FEXTNVM6_K1_OFF_ENABLE ;
else
fextnvm6 & = ~ E1000_FEXTNVM6_K1_OFF_ENABLE ;
if ( hw - > mac . type = = e1000_pch_spt ) {
/* FEXTNVM6 K1-off workaround - for SPT only */
u32 pcieanacfg = er32 ( PCIEANACFG ) ;
if ( pcieanacfg & E1000_FEXTNVM6_K1_OFF_ENABLE )
fextnvm6 | = E1000_FEXTNVM6_K1_OFF_ENABLE ;
else
fextnvm6 & = ~ E1000_FEXTNVM6_K1_OFF_ENABLE ;
}
ew32 ( FEXTNVM6 , fextnvm6 ) ;
}
@ -1640,6 +1642,7 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
case e1000_pch2lan :
case e1000_pch_lpt :
case e1000_pch_spt :
case e1000_pch_cnp :
rc = e1000_init_phy_params_pchlan ( hw ) ;
break ;
default :
@ -2091,6 +2094,7 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
case e1000_pch2lan :
case e1000_pch_lpt :
case e1000_pch_spt :
case e1000_pch_cnp :
sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M ;
break ;
default :
@ -3125,6 +3129,7 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
switch ( hw - > mac . type ) {
case e1000_pch_spt :
case e1000_pch_cnp :
bank1_offset = nvm - > flash_bank_size ;
act_offset = E1000_ICH_NVM_SIG_WORD ;
@ -3380,7 +3385,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw)
/* Clear FCERR and DAEL in hw status by writing 1 */
hsfsts . hsf_status . flcerr = 1 ;
hsfsts . hsf_status . dael = 1 ;
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS , hsfsts . regval & 0xFFFF ) ;
else
ew16flash ( ICH_FLASH_HSFSTS , hsfsts . regval ) ;
@ -3399,7 +3404,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw)
* Begin by setting Flash Cycle Done .
*/
hsfsts . hsf_status . flcdone = 1 ;
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS , hsfsts . regval & 0xFFFF ) ;
else
ew16flash ( ICH_FLASH_HSFSTS , hsfsts . regval ) ;
@ -3423,7 +3428,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw)
* now set the Flash Cycle Done .
*/
hsfsts . hsf_status . flcdone = 1 ;
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS ,
hsfsts . regval & 0xFFFF ) ;
else
@ -3450,13 +3455,13 @@ static s32 e1000_flash_cycle_ich8lan(struct e1000_hw *hw, u32 timeout)
u32 i = 0 ;
/* Start a cycle by writing 1 in Flash Cycle Go in Hw Flash Control */
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
hsflctl . regval = er32flash ( ICH_FLASH_HSFSTS ) > > 16 ;
else
hsflctl . regval = er16flash ( ICH_FLASH_HSFCTL ) ;
hsflctl . hsf_ctrl . flcgo = 1 ;
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS , hsflctl . regval < < 16 ) ;
else
ew16flash ( ICH_FLASH_HSFCTL , hsflctl . regval ) ;
@ -3527,7 +3532,7 @@ static s32 e1000_read_flash_byte_ich8lan(struct e1000_hw *hw, u32 offset,
/* In SPT, only 32 bits access is supported,
* so this function should not be called .
*/
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
return - E1000_ERR_NVM ;
else
ret_val = e1000_read_flash_data_ich8lan ( hw , offset , 1 , & word ) ;
@ -3634,8 +3639,7 @@ static s32 e1000_read_flash_data32_ich8lan(struct e1000_hw *hw, u32 offset,
s32 ret_val = - E1000_ERR_NVM ;
u8 count = 0 ;
if ( offset > ICH_FLASH_LINEAR_ADDR_MASK | |
hw - > mac . type ! = e1000_pch_spt )
if ( offset > ICH_FLASH_LINEAR_ADDR_MASK | | hw - > mac . type < e1000_pch_spt )
return - E1000_ERR_NVM ;
flash_linear_addr = ( ( ICH_FLASH_LINEAR_ADDR_MASK & offset ) +
hw - > nvm . flash_base_addr ) ;
@ -4068,6 +4072,7 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
switch ( hw - > mac . type ) {
case e1000_pch_lpt :
case e1000_pch_spt :
case e1000_pch_cnp :
word = NVM_COMPAT ;
valid_csum_mask = NVM_COMPAT_VALID_CSUM ;
break ;
@ -4153,7 +4158,7 @@ static s32 e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
s32 ret_val ;
u8 count = 0 ;
if ( hw - > mac . type = = e1000_pch_spt ) {
if ( hw - > mac . type > = e1000_pch_spt ) {
if ( size ! = 4 | | offset > ICH_FLASH_LINEAR_ADDR_MASK )
return - E1000_ERR_NVM ;
} else {
@ -4173,7 +4178,7 @@ static s32 e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
/* In SPT, This register is in Lan memory space, not
* flash . Therefore , only 32 bit access is supported
*/
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
hsflctl . regval = er32flash ( ICH_FLASH_HSFSTS ) > > 16 ;
else
hsflctl . regval = er16flash ( ICH_FLASH_HSFCTL ) ;
@ -4185,7 +4190,7 @@ static s32 e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
* not flash . Therefore , only 32 bit access is
* supported
*/
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS , hsflctl . regval < < 16 ) ;
else
ew16flash ( ICH_FLASH_HSFCTL , hsflctl . regval ) ;
@ -4243,7 +4248,7 @@ static s32 e1000_write_flash_data32_ich8lan(struct e1000_hw *hw, u32 offset,
s32 ret_val ;
u8 count = 0 ;
if ( hw - > mac . type = = e1000_pch_spt ) {
if ( hw - > mac . type > = e1000_pch_spt ) {
if ( offset > ICH_FLASH_LINEAR_ADDR_MASK )
return - E1000_ERR_NVM ;
}
@ -4259,7 +4264,7 @@ static s32 e1000_write_flash_data32_ich8lan(struct e1000_hw *hw, u32 offset,
/* In SPT, This register is in Lan memory space, not
* flash . Therefore , only 32 bit access is supported
*/
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
hsflctl . regval = er32flash ( ICH_FLASH_HSFSTS )
> > 16 ;
else
@ -4272,7 +4277,7 @@ static s32 e1000_write_flash_data32_ich8lan(struct e1000_hw *hw, u32 offset,
* not flash . Therefore , only 32 bit access is
* supported
*/
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS , hsflctl . regval < < 16 ) ;
else
ew16flash ( ICH_FLASH_HSFCTL , hsflctl . regval ) ;
@ -4464,14 +4469,14 @@ static s32 e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank)
/* Write a value 11 (block Erase) in Flash
* Cycle field in hw flash control
*/
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
hsflctl . regval =
er32flash ( ICH_FLASH_HSFSTS ) > > 16 ;
else
hsflctl . regval = er16flash ( ICH_FLASH_HSFCTL ) ;
hsflctl . hsf_ctrl . flcycle = ICH_CYCLE_ERASE ;
if ( hw - > mac . type = = e1000_pch_spt )
if ( hw - > mac . type > = e1000_pch_spt )
ew32flash ( ICH_FLASH_HSFSTS ,
hsflctl . regval < < 16 ) ;
else
@ -4894,8 +4899,7 @@ static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw)
ew32 ( RFCTL , reg ) ;
/* Enable ECC on Lynxpoint */
if ( ( hw - > mac . type = = e1000_pch_lpt ) | |
( hw - > mac . type = = e1000_pch_spt ) ) {
if ( hw - > mac . type > = e1000_pch_lpt ) {
reg = er32 ( PBECCSTS ) ;
reg | = E1000_PBECCSTS_ECC_ENABLE ;
ew32 ( PBECCSTS , reg ) ;
@ -5299,7 +5303,7 @@ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw)
( 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 ) | |
( hw - > mac . type = = e1000_pch_spt ) ) {
( hw - > mac . type > = e1000_pch_spt ) ) {
u32 fextnvm6 = er32 ( FEXTNVM6 ) ;
ew32 ( FEXTNVM6 , fextnvm6 & ~ E1000_FEXTNVM6_REQ_PLL_CLK ) ;