On 05.10.2020 17:41, Florian Fainelli wrote:
> 
> 
> On 10/5/2020 1:53 AM, Jisheng Zhang wrote:
>> On Wed, 30 Sep 2020 13:23:29 -0700 Florian Fainelli wrote:
>>
>>
>>>
>>> On 9/30/2020 1:11 PM, Andrew Lunn wrote:
>>>> On Wed, Sep 30, 2020 at 01:07:19PM -0700, Florian Fainelli wrote:
>>>>>
>>>>>
>>>>> On 9/30/2020 12:09 PM, Andrew Lunn wrote:
>>>>>> On Wed, Sep 30, 2020 at 05:47:43PM +0800, Jisheng Zhang wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> A GE phy supports pad isolation which can save power in WOL mode. But 
>>>>>>> once the
>>>>>>> isolation is enabled, the MAC can't send/receive pkts to/from the phy 
>>>>>>> because
>>>>>>> the phy is "isolated". To make the PHY work normally, I need to move the
>>>>>>> enabling isolation to suspend hook, so far so good. But the isolation 
>>>>>>> isn't
>>>>>>> enabled in system shutdown case, to support this, I want to add 
>>>>>>> shutdown hook
>>>>>>> to net phy_driver, then also enable the isolation in the shutdown hook. 
>>>>>>> Is
>>>>>>> there any elegant solution?
>>>>>>  
>>>>>>> Or we can break the assumption: ethernet can still send/receive pkts 
>>>>>>> after
>>>>>>> enabling WoL, no?
>>>>>>
>>>>>> That is not an easy assumption to break. The MAC might be doing WOL,
>>>>>> so it needs to be able to receive packets.
>>>>>>
>>>>>> What you might be able to assume is, if this PHY device has had WOL
>>>>>> enabled, it can assume the MAC does not need to send/receive after
>>>>>> suspend. The problem is, phy_suspend() will not call into the driver
>>>>>> is WOL is enabled, so you have no idea when you can isolate the MAC
>>>>>> from the PHY.
>>>>>>
>>>>>> So adding a shutdown in mdio_driver_register() seems reasonable.  But
>>>>>> you need to watch out for ordering. Is the MDIO bus driver still
>>>>>> running?
>>>>>
>>>>> If your Ethernet MAC controller implements a shutdown callback and that
>>>>> callback takes care of unregistering the network device which should also
>>>>> ensure that phy_disconnect() gets called, then your PHY's suspend function
>>>>> will be called.
>>>>
>>>> Hi Florian
>>>>
>>>> I could be missing something here, but:
>>>>
>>>> phy_suspend does not call into the PHY driver if WOL is enabled. So
>>>> Jisheng needs a way to tell the PHY it should isolate itself from the
>>>> MAC, and suspend is not that.
>>>
>>> I missed that part, that's right if WoL is enabled at the PHY level then
>>> the suspend callback is not called, how about we change that and we
>>> always call the PHY's suspend callback? This would require that we audit
>>
>> Hi all,
>>
>> The PHY's suspend callback usually calls genphy_suspend() which will set
>> BMCR_PDOWN bit, this may break WoL. I think this is one the reason why
>> we ignore the phydrv->suspend() when WoL is enabled. If we goes to this
>> directly, it looks like we need to change each phy's suspend implementation,
>> I.E if WoL is enabled, ignore genphy_suspend() and do possible isolation;
>> If WoL is disabled, keep the code path as is.
>>
>> So compared with the shutdown hook, which direction is better?
> 
> I believe you will have an easier time to add an argument to the PHY driver 
> suspend's function to indicate the WoL status, or to move down the check for 
> WoL being enabled/supported compared to adding support for shutdown into the 
> MDIO bus layer, and then PHY drivers.

Maybe the shutdown callback of mdio_bus_type could be implemented.
It could iterate over all PHY's on the bus, check for WoL (similar to
mdio_bus_phy_may_suspend) and do whatever is needed.
Seems to me to be the most generic way.

Reply via email to