Re: [PATCH v2] clk: at91: fix programmable clock for sama5d2
From: Stephen Boyd
Date: Mon Mar 18 2019 - 15:54:06 EST
Quoting Nicolas Ferre (2019-03-18 03:50:45)
> From: Matthias Wieloch <matthias.wieloch@xxxxxxxxxxxx>
>
> The prescaler formula of the programmable clock has changed for sama5d2. Update
> the driver accordingly.
>
> Fixes: a2038077de9a ("clk: at91: add sama5d2 PMC driver")
> Cc: <stable@xxxxxxxxxxxxxxx> # v4.20+
> Signed-off-by: Nicolas Ferre <nicolas.ferre@xxxxxxxxxxxxx>
> [nicolas.ferre@xxxxxxxxxxxxx: adapt the prescaler range,
> fix clk_programmable_recalc_rate, split patch]
> Signed-off-by: Matthias Wieloch <matthias.wieloch@xxxxxxxxxxxx>
> Signed-off-by: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>
> ---
> v2: adapt to v5.1-rc1
> remove unneeded sentence about DT in commit message
>
> Stephen,
>
> I think it would be good to see this fix going upstream during v5.1-rc phase.
Ok. I can apply this clk-fixes. I presume that things are real bad and
it can't wait until v5.2?
> @@ -60,10 +68,18 @@ static int clk_programmable_determine_rate(struct clk_hw *hw,
> continue;
>
> parent_rate = clk_hw_get_rate(parent);
> - for (shift = 0; shift < PROG_PRES_MASK; shift++) {
> - tmp_rate = parent_rate >> shift;
> - if (tmp_rate <= req->rate)
> - break;
> + if (layout->is_pres_direct) {
> + for (shift = 0; shift <= layout->pres_mask; shift++) {
> + tmp_rate = parent_rate / (shift + 1);
> + if (tmp_rate <= req->rate)
> + break;
> + }
> + } else {
> + for (shift = 0; shift < layout->pres_mask; shift++) {
> + tmp_rate = parent_rate >> shift;
> + if (tmp_rate <= req->rate)
> + break;
> + }
This looks like a lot of copy paste when the if statement could have been
pulled into the for loop instead of duplicating the loops and
surrounding if condition check for tmp_rate.
> }
>
> if (tmp_rate > req->rate)