mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Frank <Frank.Sae@motor-comm.com>
To: Peter Geis <pgwipeout@gmail.com>, Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	"David S . Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>
Cc: yinghong.zhang@motor-comm.com, fei.zhang@motor-comm.com,
	hua.sun@motor-comm.com, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, Frank <Frank.Sae@motor-comm.com>
Subject: Re: Re: [PATCH v2] net: phy: Add driver for Motorcomm yt8521 gigabit
Date: Wed, 29 Jun 2022 20:48:48 +0800	[thread overview]
Message-ID: <20220629124848.142-1-Frank.Sae@motor-comm.com> (raw)

Hi Andrew,
	Thanks for your comments.
	This driver is for an utp-fiber combo phy and sometimes, it has to
switch register spaces between utp and fiber for same operation. That is why it
looks that there are duplicated operations. 

> > + * yt8521_soft_reset() - called to issue a PHY software reset
> > + * @phydev: a pointer to a &struct phy_device
> > + *
> > + * returns 0 or negative errno code
> > + */
> > +int yt8521_soft_reset(struct phy_device *phydev)
> > +{
> > + int old_page;
> > + int ret = 0;
> > +
> > + old_page = phy_save_page(phydev);
> > + if (old_page < 0)
> > +  goto err_restore_page;
> > +
> > + ret = yt8521_modify_UTP_FIBER_BMCR(phydev, 0, BMCR_RESET);
> > + if (ret < 0)
> > +  goto err_restore_page;
> 
> You should wait for the reset to completed. Can you actually use the
> core helper? Is the BMCR in the usual place? So long as you hold the
> lock, nothing is going to change the page, so you should be able to
> use the helper.
> 

yes, you said it. we will add codes to check if the reset is completed at all.

> 
> > +int yt8521_config_aneg(struct phy_device *phydev)
> > +{
> > + struct yt8521_priv *priv = phydev->priv;
> > + u8 polling_mode = priv->polling_mode;
> > + int old_page;
> > + int ret;
> > +
> > + old_page = yt8521_read_page_with_lock(phydev);
> > + if (old_page)
> > +  return old_page;
> > +
> > + if (polling_mode == YT8521_MODE_FIBER ||
> > +     polling_mode == YT8521_MODE_POLL) {
> > +  ret = yt8521_write_page_with_lock(phydev,
> > +        YT8521_RSSR_FIBER_SPACE);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > +
> > +  ret = genphy_config_aneg(phydev);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > + }
> > +
> > + if (polling_mode == YT8521_MODE_UTP ||
> > +     polling_mode == YT8521_MODE_POLL) {
> > +  ret = yt8521_write_page_with_lock(phydev,
> > +        YT8521_RSSR_UTP_SPACE);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > +
> > +  ret = genphy_config_aneg(phydev);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > + }
> 
> Looks like this could be refactored to reduce duplication.
> 

sure, as the reason said above, the same operation is required in both utp and
fiber spaces.

> 
> > +int yt8521_aneg_done(struct phy_device *phydev)
> > +{
> > + struct yt8521_priv *priv = phydev->priv;
> > + u8 polling_mode = priv->polling_mode;
> > + int link_fiber = 0;
> > + int link_utp = 0;
> > + int old_page;
> > + int ret = 0;
> > +
> > + old_page = phy_save_page(phydev);
> > + if (old_page < 0)
> > +  goto err_restore_page;
> > +
> > + if (polling_mode == YT8521_MODE_FIBER ||
> > +     polling_mode == YT8521_MODE_POLL) {
> > +  /* switch to FIBER reg space*/
> > +  ret = yt8521_write_page(phydev, YT8521_RSSR_FIBER_SPACE);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > +
> > +  ret = __phy_read(phydev, YTPHY_SPECIFIC_STATUS_REG);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > +
> > +  link_fiber = !!(ret & YTPHY_SSR_LINK);
> > + }
> > +
> > + if (polling_mode == YT8521_MODE_UTP ||
> > +     polling_mode == YT8521_MODE_POLL) {
> > +  /* switch to UTP reg space */
> > +  ret = yt8521_write_page(phydev, YT8521_RSSR_UTP_SPACE);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > +
> > +  ret = __phy_read(phydev, YTPHY_SPECIFIC_STATUS_REG);
> > +  if (ret < 0)
> > +   goto err_restore_page;
> > +
> > +  link_utp = !!(ret & YTPHY_SSR_LINK);
> > + }
> > +
> > + ret = !!(link_fiber | link_utp);
> 
> Does this mean it can do both copper and fibre at the same time. And
> whichever gives up first wins?

Sure, the phy supports utp, fiber, and both. In the case of both, this driver
supposes that fiber is of priority.

Thaks again and we will chnaged codes based on your comments.

Cheers and BR,
Frank

-- 
2.31.0.windows.1


             reply	other threads:[~2022-06-29 12:50 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-29 12:48 Frank [this message]
2022-06-29 12:56 ` Andrew Lunn
2022-06-29 13:30 Frank

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220629124848.142-1-Frank.Sae@motor-comm.com \
    --to=frank.sae@motor-comm.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=fei.zhang@motor-comm.com \
    --cc=hkallweit1@gmail.com \
    --cc=hua.sun@motor-comm.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=pgwipeout@gmail.com \
    --cc=yinghong.zhang@motor-comm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®