e1000e: log when swflag is cleared unexpectedly on ICH/PCH devices
Since EXTCNF_CTRL.SWFLAG (used in the ownership arbitration of shared resources, e.g. the PHY shared between the s/w, f/w, and h/w clients) can be cleared by any of those clients, log a debug message when software attempts to clear it and it is already cleared unexpectedly. And since the swflag is cleared by a hardware reset, the driver does not need to do that, but the mutex acquired when the bit is set must still be cleared. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
Родитель
99730e4c13
Коммит
c5caf4825b
|
@ -889,8 +889,13 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
|
|||
u32 extcnf_ctrl;
|
||||
|
||||
extcnf_ctrl = er32(EXTCNF_CTRL);
|
||||
|
||||
if (extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG) {
|
||||
extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
|
||||
ew32(EXTCNF_CTRL, extcnf_ctrl);
|
||||
} else {
|
||||
e_dbg("Semaphore unexpectedly released by sw/fw/hw\n");
|
||||
}
|
||||
|
||||
mutex_unlock(&swflag_mutex);
|
||||
}
|
||||
|
@ -3066,7 +3071,7 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
|
|||
msleep(20);
|
||||
|
||||
if (!ret_val)
|
||||
e1000_release_swflag_ich8lan(hw);
|
||||
mutex_unlock(&swflag_mutex);
|
||||
|
||||
if (ctrl & E1000_CTRL_PHY_RST) {
|
||||
ret_val = hw->phy.ops.get_cfg_done(hw);
|
||||
|
|
Загрузка…
Ссылка в новой задаче