[PATCH meson-clk-next] clk: meson: meson8b: enable CLK_MESON_MPLL_ROUND_CLOSEST for all MPLLs
Jerome Brunet
jbrunet at baylibre.com
Tue May 15 07:48:40 PDT 2018
On Sat, 2018-04-28 at 17:01 +0200, Jerome Brunet wrote:
> On Sat, 2018-04-28 at 15:23 +0200, Martin Blumenstingl wrote:
> > Until recently the clk-mpll implementation always used
> > DIV_ROUND_UP_ULL(). However, since commit 1b0e500dc606e9 ("clk: meson:
> > mpll: add round closest support") the default was changed to round down
> > the SDM divisor.
> > This broke RGMII Ethernet on Meson8b (which uses MPLL2 as RGMII TX
> > clock). With the old implementation the MPLL2 output was 249999701Hz,
> > but with "round closest" disabled the output is 212500000Hz.
> >
> > Enabling CLK_MESON_MPLL_ROUND_CLOSEST for all MPLL2 clocks on Meson8b
> > fixes this because we now get the same 249999701Hz from MPLL2 as before.
>
> It should either be rounding up or down, not down or 'more down'
> I guess I need to revisit this series. In the mean time, I'll drop it.
> Thanks for reporting the issue
Hi Martin,
I think I found the problem in the mpll round closest code.
It does not seem to be a 32bit overflow, as we had before. Apparently, I got
confused with rounding up and down stuff :(
I'll post a v2 soon. I'll wait for your feedback before applying it this time
Thanks again for reporting the issue.
Cheers
Jerome
>
> >
> > Fixes: 1b0e500dc606e9 ("clk: meson: mpll: add round closest support")
> > Signed-off-by: Martin Blumenstingl <martin.blumenstingl at googlemail.com>
> > ---
> > drivers/clk/meson/meson8b.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
> > index d0524ec71aad..2639a892a5d4 100644
> > --- a/drivers/clk/meson/meson8b.c
> > +++ b/drivers/clk/meson/meson8b.c
> > @@ -382,6 +382,7 @@ static struct clk_regmap meson8b_mpll0_div = {
> > .width = 1,
> > },
> > .lock = &meson_clk_lock,
> > + .flags = CLK_MESON_MPLL_ROUND_CLOSEST,
> > },
> > .hw.init = &(struct clk_init_data){
> > .name = "mpll0_div",
> > @@ -423,6 +424,7 @@ static struct clk_regmap meson8b_mpll1_div = {
> > .width = 9,
> > },
> > .lock = &meson_clk_lock,
> > + .flags = CLK_MESON_MPLL_ROUND_CLOSEST,
> > },
> > .hw.init = &(struct clk_init_data){
> > .name = "mpll1_div",
> > @@ -464,6 +466,7 @@ static struct clk_regmap meson8b_mpll2_div = {
> > .width = 9,
> > },
> > .lock = &meson_clk_lock,
> > + .flags = CLK_MESON_MPLL_ROUND_CLOSEST,
> > },
> > .hw.init = &(struct clk_init_data){
> > .name = "mpll2_div",
>
>
More information about the linux-amlogic
mailing list