Message ID | 20181113111633.20189-4-jagan@amarulasolutions.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/sun4i: Allwinner A64 MIPI-DSI support | expand |
On Tue, Nov 13, 2018 at 04:46:10PM +0530, Jagan Teki wrote: > Some NKM PLLs, frequency can be set above PLL working range. > > Add a constraint for maximum supported rate. This way, drivers can > specify which is maximum allowed rate for PLL. > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > Acked-by: Stephen Boyd <sboyd@kernel.org> As Vasily reported on a previous version, this should be squashed with the patch 2. > --- > drivers/clk/sunxi-ng/ccu_nkm.c | 3 +++ > drivers/clk/sunxi-ng/ccu_nkm.h | 1 + > 2 files changed, 4 insertions(+) > > diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c > index 6b5ad990f802..b8b66cdd30bf 100644 > --- a/drivers/clk/sunxi-ng/ccu_nkm.c > +++ b/drivers/clk/sunxi-ng/ccu_nkm.c > @@ -128,6 +128,9 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux, > if (rate < nkm->min_rate) > return nkm->min_rate; > > + if (nkm->max_rate && rate > nkm->max_rate) > + return nkm->max_rate; > + I would expect the test to be the same for the minimum and maximum cases. Maxime
On Tue, Nov 13, 2018 at 6:57 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote: > > On Tue, Nov 13, 2018 at 04:46:10PM +0530, Jagan Teki wrote: > > Some NKM PLLs, frequency can be set above PLL working range. > > > > Add a constraint for maximum supported rate. This way, drivers can > > specify which is maximum allowed rate for PLL. > > > > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com> > > Acked-by: Stephen Boyd <sboyd@kernel.org> > > As Vasily reported on a previous version, this should be squashed with > the patch 2. Sorry, I missed it. > > > --- > > drivers/clk/sunxi-ng/ccu_nkm.c | 3 +++ > > drivers/clk/sunxi-ng/ccu_nkm.h | 1 + > > 2 files changed, 4 insertions(+) > > > > diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c > > index 6b5ad990f802..b8b66cdd30bf 100644 > > --- a/drivers/clk/sunxi-ng/ccu_nkm.c > > +++ b/drivers/clk/sunxi-ng/ccu_nkm.c > > @@ -128,6 +128,9 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux, > > if (rate < nkm->min_rate) > > return nkm->min_rate; > > > > + if (nkm->max_rate && rate > nkm->max_rate) > > + return nkm->max_rate; > > + > > I would expect the test to be the same for the minimum and maximum cases. I don't have proper use-case for max rate test, I do verify by using higher the rate on dclock, but nor sure. May be I can skip the max_rate patch? Apart from this, any idea about this issue where SUN4I_TCON0_DCLK_REG will only work with div upto 6 on A64 DSI panels[1], did you find the same issue on A33? With parent rate 330MHz, the resulting tcon divider for 30MHz [2] clock is 11 and for the same for 55MHz [3] clock is 6. [3] https://paste.ubuntu.com/p/drvzfHFMtY/ [2] https://paste.ubuntu.com/p/hz29CTJY2J/ [1] https://elixir.bootlin.com/linux/v4.20-rc2/source/drivers/gpu/drm/sun4i/sun4i_dotclock.c#L125
On Thu, Nov 15, 2018 at 08:51:04PM +0530, Jagan Teki wrote: > > > drivers/clk/sunxi-ng/ccu_nkm.c | 3 +++ > > > drivers/clk/sunxi-ng/ccu_nkm.h | 1 + > > > 2 files changed, 4 insertions(+) > > > > > > diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c > > > index 6b5ad990f802..b8b66cdd30bf 100644 > > > --- a/drivers/clk/sunxi-ng/ccu_nkm.c > > > +++ b/drivers/clk/sunxi-ng/ccu_nkm.c > > > @@ -128,6 +128,9 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux, > > > if (rate < nkm->min_rate) > > > return nkm->min_rate; > > > > > > + if (nkm->max_rate && rate > nkm->max_rate) > > > + return nkm->max_rate; > > > + > > > > I would expect the test to be the same for the minimum and maximum cases. > > I don't have proper use-case for max rate test, I do verify by using > higher the rate on dclock, but nor sure. May be I can skip the > max_rate patch? So you're sending more patches that you haven't really tested? Why are you sending them then? > Apart from this, any idea about this issue where SUN4I_TCON0_DCLK_REG > will only work with div upto 6 on A64 DSI panels[1], did you find the > same issue on A33? IIRC my panel was falling into the case where the divider was 4, so I've not fallen into that case. > With parent rate 330MHz, the resulting tcon divider for 30MHz [2] > clock is 11 and for the same for 55MHz [3] clock is 6. I'm not sure what the question is? Maxime
On Tue, Nov 20, 2018 at 4:26 PM Maxime Ripard <maxime.ripard@bootlin.com> wrote: > > On Thu, Nov 15, 2018 at 08:51:04PM +0530, Jagan Teki wrote: > > > > drivers/clk/sunxi-ng/ccu_nkm.c | 3 +++ > > > > drivers/clk/sunxi-ng/ccu_nkm.h | 1 + > > > > 2 files changed, 4 insertions(+) > > > > > > > > diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c > > > > index 6b5ad990f802..b8b66cdd30bf 100644 > > > > --- a/drivers/clk/sunxi-ng/ccu_nkm.c > > > > +++ b/drivers/clk/sunxi-ng/ccu_nkm.c > > > > @@ -128,6 +128,9 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux, > > > > if (rate < nkm->min_rate) > > > > return nkm->min_rate; > > > > > > > > + if (nkm->max_rate && rate > nkm->max_rate) > > > > + return nkm->max_rate; > > > > + > > > > > > I would expect the test to be the same for the minimum and maximum cases. > > > > I don't have proper use-case for max rate test, I do verify by using > > higher the rate on dclock, but nor sure. May be I can skip the > > max_rate patch? > > So you're sending more patches that you haven't really tested? I didn't understand this question. > Why are you sending them then? I think I've mentioned in the first version patch itself, since it's common code and many other callers might have used for rate alternative I did it how other ccu dividers does. I have not added just as simple. > > > Apart from this, any idea about this issue where SUN4I_TCON0_DCLK_REG > > will only work with div upto 6 on A64 DSI panels[1], did you find the > > same issue on A33? > > IIRC my panel was falling into the case where the divider was 4, so > I've not fallen into that case. OK, thanks.
diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c index 6b5ad990f802..b8b66cdd30bf 100644 --- a/drivers/clk/sunxi-ng/ccu_nkm.c +++ b/drivers/clk/sunxi-ng/ccu_nkm.c @@ -128,6 +128,9 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux, if (rate < nkm->min_rate) return nkm->min_rate; + if (nkm->max_rate && rate > nkm->max_rate) + return nkm->max_rate; + ccu_nkm_find_best(*parent_rate, rate, &_nkm); rate = *parent_rate * _nkm.n * _nkm.k / _nkm.m; diff --git a/drivers/clk/sunxi-ng/ccu_nkm.h b/drivers/clk/sunxi-ng/ccu_nkm.h index ff5bd00f429f..c82590481188 100644 --- a/drivers/clk/sunxi-ng/ccu_nkm.h +++ b/drivers/clk/sunxi-ng/ccu_nkm.h @@ -36,6 +36,7 @@ struct ccu_nkm { unsigned int fixed_post_div; unsigned int min_rate; + unsigned int max_rate; struct ccu_common common; };