From: Grygorii Strashko <grygorii.strashko@ti.com> To: Richard Cochran <richardcochran@gmail.com> Cc: "David S. Miller" <davem@davemloft.net>, <netdev@vger.kernel.org>, Mugunthan V N <mugunthanvnm@ti.com>, Sekhar Nori <nsekhar@ti.com>, <linux-kernel@vger.kernel.org>, <linux-omap@vger.kernel.org>, WingMan Kwok <w-kwok2@ti.com>, John Stultz <john.stultz@linaro.org> Subject: Re: [PATCH 7/9] net: ethernet: ti: cpts: calc mult and shift from refclk freq Date: Wed, 14 Sep 2016 23:47:46 +0300 [thread overview] Message-ID: <4add2983-bdfe-8436-de62-4b2fdc2ea750@ti.com> (raw) In-Reply-To: <20160914202618.GC12195@netboy> On 09/14/2016 11:26 PM, Richard Cochran wrote: > On Wed, Sep 14, 2016 at 04:02:29PM +0300, Grygorii Strashko wrote: >> +static void cpts_calc_mult_shift(struct cpts *cpts) >> +{ >> + u64 maxsec; >> + u32 freq; >> + u32 mult; >> + u32 shift; >> + u64 ns; >> + u64 frac; >> + >> + if (cpts->cc_mult || cpts->cc.shift) >> + return; >> + >> + freq = clk_get_rate(cpts->refclk); >> + >> + /* Calc the maximum number of seconds which we can run before >> + * wrapping around. >> + */ >> + maxsec = cpts->cc.mask; >> + do_div(maxsec, freq); >> + if (!maxsec) >> + maxsec = 1; > > This doesn't pass the smell test. If the max counter value is M, you > are figuring M*1/F which is the time in seconds corresponding to M. > We set M=2^32-1, and so 'freq' would have to be greater than 4 GHz in > order for 'maxsec' to be zero. Do you really expect such high > frequency input clocks? no. can drop it. > >> + else if (maxsec > 600 && cpts->cc.mask > UINT_MAX) >> + maxsec = 600; > > What is this all about? cc.mask is always 2^32 - 1. Oh. Not sure if we will update CPTS to support this, but on KS2 E/L (66AK2E) CPTS counter can work in 64bit mode. > >> + clocks_calc_mult_shift(&mult, &shift, freq, NSEC_PER_SEC, maxsec); >> + >> + cpts->cc_mult = mult; >> + cpts->cc.mult = mult; > > In order to get good resolution on the frequency adjustment, we want > to keep 'mult' as large as possible. I don't see your code doing > this. We can rely on the watchdog reader (work queue) to prevent > overflows. As I understand (and tested), clocks_calc_mult_shift() will return max possible mult which can be used without overflow. if calculated results do not satisfy end user - the custom values can be passed in DT. -- regards, -grygorii
WARNING: multiple messages have this Message-ID (diff)
From: Grygorii Strashko <grygorii.strashko@ti.com> To: Richard Cochran <richardcochran@gmail.com> Cc: "David S. Miller" <davem@davemloft.net>, netdev@vger.kernel.org, Mugunthan V N <mugunthanvnm@ti.com>, Sekhar Nori <nsekhar@ti.com>, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, WingMan Kwok <w-kwok2@ti.com>, John Stultz <john.stultz@linaro.org> Subject: Re: [PATCH 7/9] net: ethernet: ti: cpts: calc mult and shift from refclk freq Date: Wed, 14 Sep 2016 23:47:46 +0300 [thread overview] Message-ID: <4add2983-bdfe-8436-de62-4b2fdc2ea750@ti.com> (raw) In-Reply-To: <20160914202618.GC12195@netboy> On 09/14/2016 11:26 PM, Richard Cochran wrote: > On Wed, Sep 14, 2016 at 04:02:29PM +0300, Grygorii Strashko wrote: >> +static void cpts_calc_mult_shift(struct cpts *cpts) >> +{ >> + u64 maxsec; >> + u32 freq; >> + u32 mult; >> + u32 shift; >> + u64 ns; >> + u64 frac; >> + >> + if (cpts->cc_mult || cpts->cc.shift) >> + return; >> + >> + freq = clk_get_rate(cpts->refclk); >> + >> + /* Calc the maximum number of seconds which we can run before >> + * wrapping around. >> + */ >> + maxsec = cpts->cc.mask; >> + do_div(maxsec, freq); >> + if (!maxsec) >> + maxsec = 1; > > This doesn't pass the smell test. If the max counter value is M, you > are figuring M*1/F which is the time in seconds corresponding to M. > We set M=2^32-1, and so 'freq' would have to be greater than 4 GHz in > order for 'maxsec' to be zero. Do you really expect such high > frequency input clocks? no. can drop it. > >> + else if (maxsec > 600 && cpts->cc.mask > UINT_MAX) >> + maxsec = 600; > > What is this all about? cc.mask is always 2^32 - 1. Oh. Not sure if we will update CPTS to support this, but on KS2 E/L (66AK2E) CPTS counter can work in 64bit mode. > >> + clocks_calc_mult_shift(&mult, &shift, freq, NSEC_PER_SEC, maxsec); >> + >> + cpts->cc_mult = mult; >> + cpts->cc.mult = mult; > > In order to get good resolution on the frequency adjustment, we want > to keep 'mult' as large as possible. I don't see your code doing > this. We can rely on the watchdog reader (work queue) to prevent > overflows. As I understand (and tested), clocks_calc_mult_shift() will return max possible mult which can be used without overflow. if calculated results do not satisfy end user - the custom values can be passed in DT. -- regards, -grygorii
next prev parent reply other threads:[~2016-09-14 20:52 UTC|newest] Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-14 13:02 [PATCH 0/9] net: ethernet: ti: cpts: update and fixes Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 13:02 ` [PATCH 1/9] net: ethernet: ti: exclude cpts from build when disabled Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 13:02 ` [PATCH 2/9] net: ethernet: ti: cpsw: minimize direct access to struct cpts Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 13:02 ` [PATCH 3/9] net: ethernet: ti: cpts: rework initialization/deinitialization Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 13:52 ` Richard Cochran 2016-09-14 20:10 ` Grygorii Strashko 2016-09-14 20:10 ` Grygorii Strashko 2016-09-14 20:32 ` Richard Cochran 2016-09-14 20:37 ` Grygorii Strashko 2016-09-14 20:37 ` Grygorii Strashko 2016-09-14 20:52 ` Richard Cochran 2016-09-14 20:59 ` Grygorii Strashko 2016-09-14 20:59 ` Grygorii Strashko 2016-09-15 8:13 ` Richard Cochran 2016-09-14 13:02 ` [PATCH 4/9] net: ethernet: ti: cpts: move dt props parsing to cpts driver Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 13:55 ` Richard Cochran 2016-09-14 19:45 ` Grygorii Strashko 2016-09-14 19:45 ` Grygorii Strashko 2016-09-14 20:03 ` Richard Cochran 2016-09-14 13:02 ` [PATCH 5/9] net: ethernet: ti: cpts: add return value to tx and rx timestamp funcitons Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 14:00 ` Richard Cochran 2016-09-14 13:02 ` [PATCH 6/9] net: ethernet: ti: cpts: clean up event list if event pool is empty Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 14:14 ` Richard Cochran 2016-09-14 19:54 ` Grygorii Strashko 2016-09-14 19:54 ` Grygorii Strashko 2016-09-14 13:02 ` [PATCH 7/9] net: ethernet: ti: cpts: calc mult and shift from refclk freq Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 14:22 ` Richard Cochran 2016-09-14 19:59 ` Grygorii Strashko 2016-09-14 19:59 ` Grygorii Strashko 2016-09-14 20:26 ` Richard Cochran 2016-09-14 20:47 ` Grygorii Strashko [this message] 2016-09-14 20:47 ` Grygorii Strashko 2016-09-14 21:03 ` Richard Cochran 2016-09-14 21:14 ` Grygorii Strashko 2016-09-14 21:14 ` Grygorii Strashko 2016-09-15 11:58 ` Richard Cochran 2016-09-15 13:49 ` Richard Cochran 2016-09-14 13:02 ` [PATCH 8/9] net: ethernet: ti: cpts: fix overflow check period Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko 2016-09-14 14:25 ` Richard Cochran 2016-09-14 20:03 ` Grygorii Strashko 2016-09-14 20:03 ` Grygorii Strashko 2016-09-14 20:08 ` Richard Cochran 2016-09-14 20:23 ` Grygorii Strashko 2016-09-14 20:23 ` Grygorii Strashko 2016-09-14 20:43 ` Richard Cochran 2016-09-14 20:48 ` Grygorii Strashko 2016-09-14 20:48 ` Grygorii Strashko 2016-09-14 13:02 ` [PATCH 9/9] net: ethernet: ti: cpts: switch to readl/writel_relaxed() Grygorii Strashko 2016-09-14 13:02 ` Grygorii Strashko
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=4add2983-bdfe-8436-de62-4b2fdc2ea750@ti.com \ --to=grygorii.strashko@ti.com \ --cc=davem@davemloft.net \ --cc=john.stultz@linaro.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=mugunthanvnm@ti.com \ --cc=netdev@vger.kernel.org \ --cc=nsekhar@ti.com \ --cc=richardcochran@gmail.com \ --cc=w-kwok2@ti.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.