[PATCH v2] mtd: nand: Sunxi calculate timing cfg
Boris Brezillon
boris.brezillon at free-electrons.com
Tue Jun 9 07:20:07 PDT 2015
On Tue, 09 Jun 2015 15:18:58 +0200
Roy Spliet <r.spliet at ultimaker.com> wrote:
> >> +
> >> +static s32 sunxi_nand_lookup_timing(const s32 *lut, lut, u32
> period, u32 clk_period)
> > I'm not sure the period name is appropriate here, what you're actually
> > passing is the timing you're expecting.
> > How about renaming it 'min_timing'
>
> What it encodes is the minimum or maximum time or delay for given timing
> parameter in picoseconds. Given this definition, I think period actually
> describes the parameter better than "min_timing". Alternatively, I could go
> for period_ps or perhaps timing_period_ps (with matching clk_period_ps).
Hm, I don't agree here. From my POV, a period is something used to
describe cyclic operations. If you take a clk, the period encodes the
time required a clk cycle (a rising and a falling edge).
Here the timings you're passing are not cyclic at all.
>
> >> +{
> >> + u32 clks = (period + clk_period - 1) / clk_period;
> > u32 clks = DIV_ROUND_UP(period, clk_period);
> >
> > And again, IMO the variable name does not match what it's really
> > encoding. How about div or divisor ?
>
> This value encodes the period in number of clock cycles. If period_ps is
> acceptable, how about period_cycles here?
I'd rather use clk_cycles, or just cycles then.
> >> + tADL = DIV_ROUND_UP(timings->tADL_min, min_clk_period) >> 3;
> >> + tWHR = DIV_ROUND_UP(timings->tWHR_min, min_clk_period) >> 3;
> >> + tRHW = sunxi_nand_lookup_timing(tRHW_lut, timings->tRHW_min,
> >> + min_clk_period);
> >> + tCAD = 0x7;
> >> + chip->timing_cfg = (tWB & 0x3) |
> >> + (tADL & 0x3) << 2 |
> >> + (tWHR & 0x3) << 4 |
> >> + (tRHW & 0x3) << 6 |
> >> + (tCAD & 0x7) << 8;
> >> + /* \todo A83 has some more bits for CDQSS, CS, CLHZ, CCS, WC */
> > Use the "TODO:" or "FIXME:" keywords so that people greping on these
> > pattern will be able to find them.
>
> I used \todo as the (assumed) preferred notation for doxygen (... but
> omitted
> the second * denoting doxygen documentation formatting) Eclipse picks it up
> fine, but if you prefer TODO: for your toolchain, it's the same to me.
It depends on the kernel coding style rules, and AFAIR they use the
TODO and FIXME (in capital letters) keywords.
> >> /*
> >> - * TODO: replace these magic values with proper flags as soon as we
> >> - * know what they are encoding.
> >> + * TODO: replace this magic values with EDO flag
> >> */
> >> writel(0x100, nfc->regs + NFC_REG_TIMING_CTL);
> >> - writel(0x7ff, nfc->regs + NFC_REG_TIMING_CFG);
> > Are you planning to post another patch defining the EDO mode flag and
> > using it instead of keeping this magic value (note that I'm not
> > asking you to make this change in the same patch, but that would be
> > great to have it in the same patch series) ?
>
> I agree that it would be good, but it is derived from the 6th ID byte, which
> I have already seen omitted in several datasheets. I'm not sure if we can do
> this without at least offering the option for overriding this value in
> the DT?
Actually, I was just asking for a flag definition. You can keep the
assignment here till we find a proper solution to extract it from the
read-id (or ONFI information).
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
More information about the linux-arm-kernel
mailing list