[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d22285c6-8286-4db0-86ca-90fff08e3a42@lunn.ch>
Date: Tue, 12 Nov 2024 17:32:18 +0100
From: Andrew Lunn <andrew@...n.ch>
To: Jijie Shao <shaojijie@...wei.com>
Cc: davem@...emloft.net, edumazet@...gle.com, kuba@...nel.org,
pabeni@...hat.com, andrew+netdev@...n.ch, horms@...nel.org,
shenjian15@...wei.com, wangpeiyang1@...wei.com,
liuyonglong@...wei.com, chenhao418@...wei.com,
sudongming1@...wei.com, xujunsheng@...wei.com,
shiyongbang@...wei.com, libaihan@...wei.com,
jonathan.cameron@...wei.com, shameerali.kolothum.thodi@...wei.com,
salil.mehta@...wei.com, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH V3 net-next 5/7] net: hibmcge: Add pauseparam supported
in this module
On Tue, Nov 12, 2024 at 10:37:27PM +0800, Jijie Shao wrote:
>
> on 2024/11/12 1:58, Andrew Lunn wrote:
> > On Mon, Nov 11, 2024 at 10:55:56PM +0800, Jijie Shao wrote:
> > > The MAC can automatically send or respond to pause frames.
> > > This patch supports the function of enabling pause frames
> > > by using ethtool.
> > >
> > > Pause auto-negotiation is not supported currently.
> > What is actually missing to support auto-neg pause? You are using
> > phylib, so it will do most of the work. You just need your adjust_link
> > callback to configure the hardware to the result of the negotiation.
> > And call phy_support_asym_pause() to let phylib know what the MAC
> > supports.
> >
> > Andrew
>
> Thanks for your guidance,
>
> I haven't really figured out the difference between phy_support_sym_pause()
> and phy_support_asym_paus().
sym_pause means that when the MAC pauses, it does it in both
directions, receive and transmit. Asymmetric pause means it can pause
just receive, or just transmit.
Since you have both tx_pause and rx_pause, you can do both.
> +static void hbg_ethtool_get_pauseparam(struct net_device *net_dev,
> + struct ethtool_pauseparam *param)
> +{
> + struct hbg_priv *priv = netdev_priv(net_dev);
> +
> + param->autoneg = priv->mac.pause_autoneg;
> + hbg_hw_get_pause_enable(priv, ¶m->tx_pause, ¶m->rx_pause);
> +}
> +
> +static int hbg_ethtool_set_pauseparam(struct net_device *net_dev,
> + struct ethtool_pauseparam *param)
> +{
> + struct hbg_priv *priv = netdev_priv(net_dev);
> + struct phy_device *phydev = priv->mac.phydev;
> +
> + phy_set_asym_pause(phydev, param->rx_pause, param->tx_pause);
Not needed. This just tells phylib what the MAC is capable of. The
capabilities does not change, so telling it once in hbg_phy_connect()
is sufficient.
Andrew
Powered by blists - more mailing lists