Subject: Re: [PATCH V6 net-next 06/11] net: Introduce a new MII time stamping interface.

From: Andrew Lunn <[email-masked]>
Date: Tue, 17 Dec 2019 10:21:55 +0100

> +static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
> +			    struct ifreq *ifr);
> +static int dp83640_ts_info(struct mii_timestamper *mii_ts,
> +			   struct ethtool_ts_info *info);
> +static bool dp83640_rxtstamp(struct mii_timestamper *mii_ts,
> +			     struct sk_buff *skb, int type);
> +static void dp83640_txtstamp(struct mii_timestamper *mii_ts,
> +			     struct sk_buff *skb, int type);
>  static void rx_timestamp_work(struct work_struct *work);

Hi Richard

Forward declarations are considered bad. Please add a new patch to the
series which moves code around first. You can probably move
dp83640_probe() further down.

> -static bool dp83640_rxtstamp(struct phy_device *phydev,
> +static bool dp83640_rxtstamp(struct mii_timestamper *mii_ts,
>  			     struct sk_buff *skb, int type)
>  {
> -	struct dp83640_private *dp83640 = phydev->priv;
> +	struct dp83640_private *dp83640 =
> +		container_of(mii_ts, struct dp83640_private, mii_ts);
>  	struct dp83640_skb_info *skb_info = (struct dp83640_skb_info *)skb->cb;
>  	struct list_head *this, *next;
>  	struct rxts *rxts;

David will probably complain about reverse christmas tree. Having to
fold dp83640_private is unfortunate here. Maybe consider adding a
macro for the container_of() so you can avoid the fold?

> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> index 0887ed2bb050..ee45838f90c9 100644
> --- a/drivers/net/phy/phy_device.c
> +++ b/drivers/net/phy/phy_device.c
> @@ -919,6 +919,8 @@ static void phy_link_change(struct phy_device *phydev, bool up, bool do_carrier)
>  			netif_carrier_off(netdev);
>  	}
>  	phydev->adjust_link(netdev);
> +	if (phydev->mii_ts && phydev->mii_ts->link_state)
> +		phydev->mii_ts->link_state(phydev->mii_ts, phydev);
>  }

FYI:

When using phylink, not phylib, this call will not happen. You need to
add a similar bit of code in phylink_mac_config().

For the moment what you have is sufficient. I doubt anybody is using
the dp83640 with phylink, and the new hardware you are targeting seems
to be RGMII based, not SERDES, which is the main use case for PHYLINK.

   Andrew