Message ID | 20170724212109.586e3512@bbrezillon (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello Boris, Am Montag, 24. Juli 2017, 21:21:09 schrieb Boris Brezillon: > There is a good reason for this "- 1": the doc says the exact number > of tDF cycles is TDF_CYCLES + 1. When you are expressing timings in > ns it does matter, because you don't want to wait more than > necessary. Say the master clk period is X ns and you want a tDF of X > ns. If you divide tDF_ns by the clk period you get one, and you only > want to wait 1 cycle, not two. This makes sense. I tried several values through the same algorithm with a small test program and it gives the expected results. Thanks for the explanation. :-) > The NAND driver seems to do the right thing already [1]. > > Below is my suggestion below to fix the problem. Did you have > something else in mind? In any case, can you send a patch to fix it > (either using my suggestion or something else if you prefer). I prepared a small patch series together with two other small fixes for the atmel ebi driver and will send it to the list in a minute. Greets Alex
diff --git a/drivers/memory/atmel-ebi.c b/drivers/memory/atmel-ebi.c index 99e644cda4d1..d94604590d02 100644 --- a/drivers/memory/atmel-ebi.c +++ b/drivers/memory/atmel-ebi.c @@ -120,12 +120,14 @@ static int atmel_ebi_xslate_smc_timings(struct atmel_ebi_dev *ebid, if (!ret) { required = true; ncycles = DIV_ROUND_UP(val, clk_period_ns); - if (ncycles > ATMEL_SMC_MODE_TDF_MAX || - ncycles < ATMEL_SMC_MODE_TDF_MIN) { + if (ncycles > ATMEL_SMC_MODE_TDF_MAX) { ret = -EINVAL; goto out; } + if (ncycles < ATMEL_SMC_MODE_TDF_MIN) + ncycles = ATMEL_SMC_MODE_TDF_MIN; + smcconf->mode |= ATMEL_SMC_MODE_TDF(ncycles); }