linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Xiaoliang Yang <xiaoliang.yang_1@nxp.com>
To: Rui Sousa <rui.sousa@nxp.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"boon.leong.ong@intel.com" <boon.leong.ong@intel.com>,
	"weifeng.voon@intel.com" <weifeng.voon@intel.com>,
	"vee.khee.wong@intel.com" <vee.khee.wong@intel.com>,
	"tee.min.tan@intel.com" <tee.min.tan@intel.com>,
	"mohammad.athari.ismail@intel.com"
	<mohammad.athari.ismail@intel.com>,
	"linux-stm32@st-md-mailman.stormreply.com"
	<linux-stm32@st-md-mailman.stormreply.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Leo Li <leoyang.li@nxp.com>,
	Vladimir Oltean <vladimir.oltean@nxp.com>,
	Joakim Zhang <qiangqing.zhang@nxp.com>,
	Mingkai Hu <mingkai.hu@nxp.com>, "Y.b. Lu" <yangbo.lu@nxp.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"joabreu@synopsys.com" <joabreu@synopsys.com>,
	"kuba@kernel.org" <kuba@kernel.org>,
	"alexandre.torgue@st.com" <alexandre.torgue@st.com>,
	"peppe.cavallaro@st.com" <peppe.cavallaro@st.com>,
	 "mcoquelin.stm32@gmail.com" <mcoquelin.stm32@gmail.com>
Subject: RE: [PATCH v1 net-next 3/3] net: stmmac: ptp: update tas basetime after ptp adjust
Date: Wed, 9 Jun 2021 09:03:24 +0000	[thread overview]
Message-ID: <DB8PR04MB5785F472AC4F8ED66B9E128CF0369@DB8PR04MB5785.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <5d81bf51-6355-6b52-4653-412f9ce0c83a@nxp.com>

Hi Rui,

On 2021-06-02 18:18, Rui Sousa wrote:
> > After adjusting the ptp time, the Qbv base time may be the past time
> > of the new current time. dwmac5 hardware limited the base time cannot
> > be set as past time. This patch calculate the base time and reset the
> > Qbv configuration after ptp time adjust.
> >
> > Signed-off-by: Xiaoliang Yang <xiaoliang.yang_1@nxp.com>
> > ---
> > .../net/ethernet/stmicro/stmmac/stmmac_ptp.c  | 41
> ++++++++++++++++++-
> > 1 file changed, 40 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
> > b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
> > index 4e86cdf2bc9f..c573bc8b2595 100644
> > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
> > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c
> > @@ -62,7 +62,8 @@ static int stmmac_adjust_time(struct ptp_clock_info
> > *ptp, s64 delta)
> >      u32 sec, nsec;
> >      u32 quotient, reminder;
> >      int neg_adj = 0;
> > -    bool xmac;
> > +    bool xmac, est_rst = false;
> > +    int ret;
> >
> >      xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
> >
> > @@ -75,10 +76,48 @@ static int stmmac_adjust_time(struct
> > ptp_clock_info *ptp, s64 delta)
> >      sec = quotient;
> >      nsec = reminder;
> >
> > +    /* If EST is enabled, disabled it before adjust ptp time. */
> > +    if (priv->plat->est && priv->plat->est->enable) {
> > +        est_rst = true;
> > +        mutex_lock(&priv->plat->est->lock);
> > +        priv->plat->est->enable = false;
> > +        stmmac_est_configure(priv, priv->ioaddr, priv->plat->est,
> > +                     priv->plat->clk_ptp_rate);
> > +        mutex_unlock(&priv->plat->est->lock);
> > +    }
> > +
> >      spin_lock_irqsave(&priv->ptp_lock, flags);
> >      stmmac_adjust_systime(priv, priv->ptpaddr, sec, nsec, neg_adj,
> > xmac);
> >      spin_unlock_irqrestore(&priv->ptp_lock, flags);
> >
> > +    /* Caculate new basetime and re-configured EST after PTP time
> > adjust. */
> > +    if (est_rst) {
> > +        struct timespec64 current_time, time;
> > +        ktime_t current_time_ns, basetime;
> > +        u64 cycle_time;
> > +
> > +        priv->ptp_clock_ops.gettime64(&priv->ptp_clock_ops,
> > &current_time);
> > +        current_time_ns = timespec64_to_ktime(current_time);
> > +        time.tv_nsec = priv->plat->est->btr[0];
> > +        time.tv_sec = priv->plat->est->btr[1];
> 
> This time may no longer be what the user specified originally, it was adjusted
> based on the gptp time when the configuration was first made.
> IMHO, if we want to respect the user configuration then we need to do the
> calculation here based on the original time.
> Typically (using arbitrary units):
> a) User configures basetime of 0, at gptp time 1000
> b) btr is update to 1000, schedule starts
> c) later, gptp time is updated to 500
> d-1) with current patch, schedule will restart at 1000 (i.e remains disabled for
> 500)
> d-2) with my suggestion, schedule will restart at 500 (which matches the user
> request, "start as soon as possible".
> 
It is not the correct operation sequence for the user to configure Qbv before ptp clock synchronization. After adjusting the ptp clock time, it is no longer possible to determine whether the previously set basetime is what the user wants. I think our driver only needs to ensure that the set basetime meets the hardware regulations, and the hardware can work normally. So I only updated the past basetime. I am not sure if it is appropriate to reset EST configure in the PTP driver, but this case will cause the hardware to not work.

> > +        basetime = timespec64_to_ktime(time);
> > +        cycle_time = priv->plat->est->ctr[1] * NSEC_PER_SEC +
> > +                 priv->plat->est->ctr[0];
> > +        time = stmmac_calc_tas_basetime(basetime,
> > +                        current_time_ns,
> > +                        cycle_time);
> > +
> > +        mutex_lock(&priv->plat->est->lock);
> 
> Hmm... the locking needs to move up. Reading + writting btr/ctr should be
> atomic.
I will modify this.
> 
> > +        priv->plat->est->btr[0] = (u32)time.tv_nsec;
> > +        priv->plat->est->btr[1] = (u32)time.tv_sec;
> > +        priv->plat->est->enable = true;
> > +        ret = stmmac_est_configure(priv, priv->ioaddr,
> > +priv->plat->est,
> > +                       priv->plat->clk_ptp_rate);
> > +        mutex_unlock(&priv->plat->est->lock);
> > +        if (ret)
> > +            netdev_err(priv->dev, "failed to configure EST\n");
> > +    }
> > +
> >      return 0;
> > }

Thanks,
xiaoliang
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-06-09  9:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-01  8:38 [PATCH v1 net-next 0/3] net: stmmac: re-configure tas basetime after ptp time adjust Xiaoliang Yang
2021-06-01  8:38 ` [PATCH v1 net-next 1/3] net: stmmac: separate the tas basetime calculation function Xiaoliang Yang
2021-06-01  8:38 ` [PATCH v1 net-next 2/3] net: stmmac: add mutex lock to protect est parameters Xiaoliang Yang
2021-06-01  8:38 ` [PATCH v1 net-next 3/3] net: stmmac: ptp: update tas basetime after ptp adjust Xiaoliang Yang
2021-06-02 10:18   ` Rui Sousa
2021-06-09  9:03     ` Xiaoliang Yang [this message]
2021-06-16 17:12       ` Rui Sousa

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=DB8PR04MB5785F472AC4F8ED66B9E128CF0369@DB8PR04MB5785.eurprd04.prod.outlook.com \
    --to=xiaoliang.yang_1@nxp.com \
    --cc=alexandre.torgue@st.com \
    --cc=boon.leong.ong@intel.com \
    --cc=davem@davemloft.net \
    --cc=joabreu@synopsys.com \
    --cc=kuba@kernel.org \
    --cc=leoyang.li@nxp.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=mingkai.hu@nxp.com \
    --cc=mohammad.athari.ismail@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=peppe.cavallaro@st.com \
    --cc=qiangqing.zhang@nxp.com \
    --cc=rui.sousa@nxp.com \
    --cc=tee.min.tan@intel.com \
    --cc=vee.khee.wong@intel.com \
    --cc=vladimir.oltean@nxp.com \
    --cc=weifeng.voon@intel.com \
    --cc=yangbo.lu@nxp.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;
as well as URLs for NNTP newsgroup(s).