On Tue, 6 Oct 2020 07:45:10 +0200
Heiner Kallweit <hkallwe...@gmail.com> wrote:


> 
> On 05.10.2020 18:00, Florian Fainelli wrote:
> >
> >
> > On 10/5/2020 8:54 AM, Heiner Kallweit wrote:  
> >> 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.  
> >
> > OK and we optionally call into a PHY device's shutdown function if defined 
> > so it can perform PHY specific work? That would work for me.  
> 
> If suspend and shutdown procedure are the same for the PHY, then we may not
> need a shutdown hook in phy_driver. This seems to be the case here.
> I just wonder what the actual use case is, because typically MAC drivers
> call phy_stop (that calls phy_suspend) in their shutdown hook.

Thank you all, I will follow this direction and send out an RFC for review.

Thanks a lot,
Jisheng

Reply via email to