[PATCH 2/6] clk: actions: Add SD/MMC clocks

Amit Tomer amittomer25 at gmail.com
Mon Dec 14 15:12:53 CET 2020


Hi,

Thanks for having the detailed look and providing comments:

> According to the datasheet the clock source could also be NAND_PLL,
> depending on bit 9.
> Both PLLs use the same rate calculation, so it's just matter of the PLL
> address offset to use for covering both.

Ok, should I change the comment as Clock output of DEV/NAND_PLL ?

> > +
> > +     /* Clock output of DEV_PLL
> > +      * Range: 48M ~ 756M
> > +      * Frequency= DEVPLLCLK * 6
> > +      */
> > +     parent_rate = readl(priv->base + CMU_DEVPLL) & 0x7f;
> > +     parent_rate *= 6000000;
> > +
> > +     rate *= 2;
>
> Where does this come from?

While experimenting about it, I found that doubling input rate doubles the
speed , and BSP code does the same.

Not sure if it is a good enough explanation or maybe its side effect of not
programming divider value well when its >=128. Would check it again.

> > +     div = (parent_rate / rate) - 1;
>
> Please check rate being not zero before you dividing by it. And I would
> keep the real divider value for now, so drop the -1 here.

Ok. I would make the check.

> > +
> > +     if (div >= 128)
> > +             div |= 0x100;
>
> This does not seem right. You would need to divide the value by 128,
> once you decided to use the "divide-by-128" bit (which is bit 8).
> What about moving this below, after you know the register value?
> Then you can divide by 128 and set bit 8.

Sure, Thanks for explaining it in detail. It helped understanding
ACTIONS not so usual
clock design.

> > +     val = readl(priv->base + (CMU_SD0CLK + sd_index*0x4));
> > +     /* Bits 4..0 is used to program div value */
> > +     val &= ~0x1f;
> > +     val |= div;
>
> Please mask div before applying.

But I am masking the first 4.0 bit above , ~0x1f;

> > +     /* As per Manuals Bits 31..10 are reserved but Bits 11 and
> > +      * 10 needed to be set for proper operation
> > +      */
> > +     val |= 0xc00;
>
> Where does this come from? I don't see the Linux driver doing that?

Actually if I don't set 11th and 10th bit , I see SD speed of 2KiB/s
and unstable behaviour
while loading files from the card.
BSP U-boot driver chooses a value 0xfffffce0 for it.


Thanks
Amit


More information about the U-Boot mailing list