Commit e086ba2f authored by Vitaly Lifshits's avatar Vitaly Lifshits Committed by Jeff Kirsher

e1000e: disable s0ix entry and exit flows for ME systems

Since ME systems do not support SLP_S0 in S0ix state, and S0ix entry
and exit flows may cause errors on them it is best to avoid using
e1000e_s0ix_entry_flow and e1000e_s0ix_exit_flow functions.

This was done by creating a struct of all devices that comes with ME
and by checking if the current device has ME.
Signed-off-by: default avatarVitaly Lifshits <vitaly.lifshits@intel.com>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent f2980103
...@@ -107,6 +107,45 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = { ...@@ -107,6 +107,45 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {
{0, NULL} {0, NULL}
}; };
struct e1000e_me_supported {
u16 device_id; /* supported device ID */
};
static const struct e1000e_me_supported me_supported[] = {
{E1000_DEV_ID_PCH_LPT_I217_LM},
{E1000_DEV_ID_PCH_LPTLP_I218_LM},
{E1000_DEV_ID_PCH_I218_LM2},
{E1000_DEV_ID_PCH_I218_LM3},
{E1000_DEV_ID_PCH_SPT_I219_LM},
{E1000_DEV_ID_PCH_SPT_I219_LM2},
{E1000_DEV_ID_PCH_LBG_I219_LM3},
{E1000_DEV_ID_PCH_SPT_I219_LM4},
{E1000_DEV_ID_PCH_SPT_I219_LM5},
{E1000_DEV_ID_PCH_CNP_I219_LM6},
{E1000_DEV_ID_PCH_CNP_I219_LM7},
{E1000_DEV_ID_PCH_ICP_I219_LM8},
{E1000_DEV_ID_PCH_ICP_I219_LM9},
{E1000_DEV_ID_PCH_CMP_I219_LM10},
{E1000_DEV_ID_PCH_CMP_I219_LM11},
{E1000_DEV_ID_PCH_CMP_I219_LM12},
{E1000_DEV_ID_PCH_TGP_I219_LM13},
{E1000_DEV_ID_PCH_TGP_I219_LM14},
{E1000_DEV_ID_PCH_TGP_I219_LM15},
{0}
};
static bool e1000e_check_me(u16 device_id)
{
struct e1000e_me_supported *id;
for (id = (struct e1000e_me_supported *)me_supported;
id->device_id; id++)
if (device_id == id->device_id)
return true;
return false;
}
/** /**
* __ew32_prepare - prepare to write to MAC CSR register on certain parts * __ew32_prepare - prepare to write to MAC CSR register on certain parts
* @hw: pointer to the HW structure * @hw: pointer to the HW structure
...@@ -6916,7 +6955,8 @@ static int e1000e_pm_suspend(struct device *dev) ...@@ -6916,7 +6955,8 @@ static int e1000e_pm_suspend(struct device *dev)
e1000e_pm_thaw(dev); e1000e_pm_thaw(dev);
/* Introduce S0ix implementation */ /* Introduce S0ix implementation */
if (hw->mac.type >= e1000_pch_cnp) if (hw->mac.type >= e1000_pch_cnp &&
!e1000e_check_me(hw->adapter->pdev->device))
e1000e_s0ix_entry_flow(adapter); e1000e_s0ix_entry_flow(adapter);
return rc; return rc;
...@@ -6931,7 +6971,8 @@ static int e1000e_pm_resume(struct device *dev) ...@@ -6931,7 +6971,8 @@ static int e1000e_pm_resume(struct device *dev)
int rc; int rc;
/* Introduce S0ix implementation */ /* Introduce S0ix implementation */
if (hw->mac.type >= e1000_pch_cnp) if (hw->mac.type >= e1000_pch_cnp &&
!e1000e_check_me(hw->adapter->pdev->device))
e1000e_s0ix_exit_flow(adapter); e1000e_s0ix_exit_flow(adapter);
rc = __e1000_resume(pdev); rc = __e1000_resume(pdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment