[Intel-wired-lan] [PATCH v2] igc: Add PHY power management control
Neftin, Sasha
sasha.neftin at intel.com
Thu Dec 26 08:13:08 UTC 2019
On 12/12/2019 20:00, Neftin, Sasha wrote:
> On 12/12/2019 19:49, Vinicius Costa Gomes wrote:
>>
>> Sasha Neftin <sasha.neftin at intel.com> writes:
>>
>>> PHY power management control should provide a reliable and accurate
>>> indication of PHY reset completion and decrease the delay time
>>> after a PHY reset
>>>
>>> v1 -> v2: add hw_dbg print for a timeout
>>>
>>> Signed-off-by: Sasha Neftin <sasha.neftin at intel.com>
>>> ---
>>> drivers/net/ethernet/intel/igc/igc_defines.h | 1 +
>>> drivers/net/ethernet/intel/igc/igc_phy.c | 12 ++++++++++++
>>> drivers/net/ethernet/intel/igc/igc_regs.h | 1 +
>>> 3 files changed, 14 insertions(+)
>>>
>>> diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h
>>> b/drivers/net/ethernet/intel/igc/igc_defines.h
>>> index 2121fc34e300..71a4b0281c03 100644
>>> --- a/drivers/net/ethernet/intel/igc/igc_defines.h
>>> +++ b/drivers/net/ethernet/intel/igc/igc_defines.h
>>> @@ -460,6 +460,7 @@
>>> /* PHY Status Register */
>>> #define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */
>>> #define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */
>>> +#define IGC_PHY_RST_COMP 0x0100 /* Internal PHY reset completion */
>>> /* PHY 1000 MII Register/Bit Definitions */
>>> /* PHY Registers defined by IEEE */
>>> diff --git a/drivers/net/ethernet/intel/igc/igc_phy.c
>>> b/drivers/net/ethernet/intel/igc/igc_phy.c
>>> index f4b05af0dd2f..a5483368690a 100644
>>> --- a/drivers/net/ethernet/intel/igc/igc_phy.c
>>> +++ b/drivers/net/ethernet/intel/igc/igc_phy.c
>>> @@ -173,6 +173,7 @@ s32 igc_check_downshift(struct igc_hw *hw)
>>> s32 igc_phy_hw_reset(struct igc_hw *hw)
>>> {
>>> struct igc_phy_info *phy = &hw->phy;
>>> + u32 phpm = 0, timeout = 10000;
>>> s32 ret_val;
>>> u32 ctrl;
>>> @@ -186,6 +187,8 @@ s32 igc_phy_hw_reset(struct igc_hw *hw)
>>> if (ret_val)
>>> goto out;
>>> + phpm = rd32(IGC_I225_PHPM);
>>> +
>>> ctrl = rd32(IGC_CTRL);
>>> wr32(IGC_CTRL, ctrl | IGC_CTRL_PHY_RST);
>>> wrfl();
>>> @@ -195,6 +198,15 @@ s32 igc_phy_hw_reset(struct igc_hw *hw)
>>> wr32(IGC_CTRL, ctrl);
>>> wrfl();
>>> + do {
>>> + phpm = rd32(IGC_I225_PHPM);
>>> + timeout--;
>>> + udelay(1);
>>> + } while (!(phpm & IGC_PHY_RST_COMP) && timeout);
>>> +
>>> + if (!timeout)
>>> + hw_dbg("Timeoui is expired after a phy reset\n");
>>
>> nitpick: Timeoui -> Timeout
>>
> thanks - I will send v3 and fix the typo
RST_COMP still not works as properly. Let's disregard this patch.
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan at osuosl.org
> https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
More information about the Intel-wired-lan
mailing list