[PATCH net-next 2/2] net: stmmac: dwmac-imx: add support for PHY WOL

Florian Fainelli f.fainelli at gmail.com
Thu Mar 7 10:52:50 PST 2024



On 3/7/2024 1:13 AM, POPESCU Catalin wrote:
> On 06.03.24 18:41, Florian Fainelli wrote:
>> [Some people who received this message don't often get email from
>> f.fainelli at gmail.com. Learn why this is important at
>> https://aka.ms/LearnAboutSenderIdentification ]
>>
>> This email is not from Hexagon’s Office 365 instance. Please be
>> careful while clicking links, opening attachments, or replying to this
>> email.
>>
>>
>> On 3/6/24 09:24, Catalin Popescu wrote:
>>> Add support for PHY WOL capability into dwmac-imx MAC driver.
>>> This is required to enable WOL feature on a platform where MAC
>>> WOL capability is not sufficient and WOL capability built into
>>> the PHY is actually needed.
>>>
>>> Signed-off-by: Catalin Popescu <catalin.popescu at leica-geosystems.com>
>>
>> Nope, this is not about how to do this. You use a Device Tree property
>> as a policy rather than properly describe your systems capabilities.
> I'm not sure what policy means in that context.
> BTW, dwmac-mediatek does the same with binding "mediatek,mac-wol" which
> is a commit from 03/2022.

Policy here means you want a certain behavior from the OS that is 
consuming the Device Tree, and that behavior is encoded via a Device 
Tree property. This is different from describing how the hardware works 
which does not make any provisions for getting a behavior out of the OS.

> I understand this way of doing became "unacceptable" since then ??

It was not acceptable then, but there is only a limited reviewer time, 
and it is easy unfortunately to sneak through reviewers.

>>
>> What sort of Wake-on-LAN do you want to be done by the PHY exactly? Does
>> the PHY have packet matching capabilities, or do you want to wake-up
>> from a PHY event like link up/down/any interrupt?
> 
> PHY is TI dp83826 and has secure magic packet capability. For the wakeup
> we rely on a external MCU which is signaled through a PHY's GPIO which
> toggles only on magic packet reception.
> We want to wakeup _only_ on magic packet reception.

Then you need to represent that wake-up GPIO line in the Device Tree, 
associate it with the PHY's Device Tree node for starters and add in a 
'wakeup-source' property in the Device Tree.

Now the PHY driver can know about the existence of a GPIO and it can 
know the PHY is a system wake-up source, so the driver can call 
device_set_wakeup_capable().

In user-space you have to configure the network interface with 
WAKE_MAGICSECURE which needs to propagate to the PHY driver for adequate 
configuration. Still in user-space you need to make the PHY device 
wake-up *enabled* by doing:

echo "enable" > /sys/class/net/ethX/attached_phydev/power/wakeup

If both WAKE_MAGICSECURE is enabled and the PHY device in sysfs reports 
that it is wake-up enabled would you wake-up from the PHY's GPIO. Your 
PHY driver ought to be modified to check for both

device_wakeup_enabled() and wolopts being non-zero to call 
enable_irq_wake() on the GPIO interrupt line.

That's how I would go about doing this, yes it's a tad more complicated 
than adding an ad-hoc Device Tree property, but it's more flexible and 
it's transposable to other configurations, too. Whether that sort of 
encoding needs to be in the individual PHY drivers or somewhere in the 
PHY library can be decided if we have more than one similar 
configuration to support.

> 
>>
>> If the former, then you would need to interrogate the PHY driver via
>> phy_ethtool_get_wol() to figure out what Wake-on-LAN modes it is capable
>> of supporting and then make a decision whether to prioritize Wake-on-LAN
>> from the PHY or the MAC, or maybe only the PHY can actually wake-up the
>> system in your case.
>>
> stmmac already calls phy_ethtool_get_wol/phy_ethtool_set_wol through
> phylink_ethtool_get_wol/phylink_ethtool_set_wol. But needs flag
> STMMAC_FLAG_USE_PHY_WOL to be set. Otherwise, it will only work with MAC
> WOL which we don't want. With the new binding we just allow the MAC
> driver to call the PHY for the WOL capability. This doesn't force WOL to
> enabled or disabled, as it is still up to ethtool to configure it.
>> If the latter, then you need to add support for WAKE_PHY to the stmmac
>> driver.
> No, we don't want WAKE_PHY, we want WAKE_MAGIC/WAKE_MAGICSECURE which
> stmmac driver already supports.

Does not matter, it should be up to user-space to intersect between what 
the PHY is capable of waking you from, and what the intent is.
-- 
Florian



More information about the linux-arm-kernel mailing list