[PATCH 1/4] of: Add device tree bindings for Evatronix
Ricard Wanderlof
ricard.wanderlof at axis.com
Fri Oct 28 07:35:20 PDT 2016
Hi Boris,
On Wed, 26 Oct 2016, Boris Brezillon wrote:
> > However, mildly accelerated chip timing (i.e. ONFi mode 2) I wouldn't call
> > an advanced feature, and it seems to be supported by all of the chips in
> > the 1..4 Gb range that we've seen, although I wouldn't be so bold and go
> > so far as to say that I know all available flash chips (at least in this
> > size range) support that mode. That's why I'm reluctant to suggest
> > changing the entries for these flashes in the table in nand_ids.c, which
> > would be another alternative. And if we did make that change, it might
> > cause problems in systems which currently use onfi_timing_mode_default if
> > the timing suddenly becomes faster after a kernel update. Although, at
> > least looking at the 4.8 tree I'm using for development, it's only the
> > sunxi NAND driver which uses it, so I guess it would be alright to change
> > as it is not in widespread use yet?
>
> I would definitely prefer this approach.
I don't mind making a patch for nand_ids.c which sets a more aggressive
timing mode for at least flashes in the 1..4 Gb range. As I mentioned
though I'm not entirely confident saying that that is in fact the case for
_all_ flashes of that size, but perhaps it's good enough for now making
that assumption given the flashes I've actually looked at? (I could refer
to a number of chips in the commit message for reference).
> > The sunxi driver seems to presume the latter, whereas the entries in
> > nand_ids.c would seem to imply the former, with values such as 2 (for
> > the TC58NVG0S3E) and 4 (for the H27UCG8T2ATR-BC) - surely these chips
> > support more than a single timing mode?
> >
> Hm, no it's not. As can be seen here [1], if the NAND is not ONFi, then
> we're using the onfi_timing_mode_default value, which is encoding the
> highest supported mode. The other case is when the chip is ONFi
> compliant, and in this case, the timing_mode field in exposing
> supported modes as a bitmap.
> [1]http://lxr.free-electrons.com/source/drivers/mtd/nand/sunxi_nand.c#L1723
Yes, you're right of course, I was thrown by the fact that the mode
variable in the sunxi_nand_chip_init_timings() function is used to
both represent the bit vector and the actual timing mode.
> One last thing, we recently introduced a generic timing selection/setup
> infrastructure [2] to avoid duplicating the code pointed here [1] in all
> drivers. It's been merged in 4.9, and that'd would be better to use
> this infrastructure in your driver.
>
> [2]https://www.spinics.net/lists/arm-kernel/msg532007.html
One thing I would have liked to have is to have the actual timing mode
number in the nand_data_interface struct, for controllers like in my case
where it's problematic to take the numeric timing values and map them to
register values, and the timing register values need to be pre-computed.
There might be other reasons where the driver might want to know the mode
number. Sure, once a mode has been agreed on it is set in
chip->onfi_timing_mode_default, but that won't help
nand_init_data_interface() when it calls
chip->setup_data_interface(..., true) to determine if a given mode is in
fact supported by the controller.
A minor related issue which I been pondering over is that the fact that
the supported timing modes of an ONFi flash are expressed as a bit vector
rather than just a single 'highest possible mode' value, which indicates
that the idea is that a flash may support a certain mode but not
necessarily all the ones below, e.g. supporting modes 3, 2 and 0. A
cursory look at the timing mode definition gives the impression that lower
speeds are subcases of the higher speed ones, but it's hard to say if
there are relationships between certain parameters that mean this is not
necessarily so,
However, when we take the highest supported mode from the ID table, we
convert it into a continguous bit vector using GENMASK() in
nand_base.c:nand_init_data_interface(), thus assuming that the flash will
in fact support all slower modes as well.
Perhaps there are no flashes which support a non-contiguous range of
timing modes (I don't have enough experience with ONFi flashes to say
one way or the other), it just seemed to me an odd discrepency and
limitation for non-ONFi flashes.
/Ricard
--
Ricard Wolf Wanderlöf ricardw(at)axis.com
Axis Communications AB, Lund, Sweden www.axis.com
Phone +46 46 272 2016 Fax +46 46 13 61 30
More information about the linux-mtd
mailing list