Re: [RESEND v5 09/21] mtd: rawnand: Create a new enumeration to describe properly ECC types

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 27 May 2020 10:33:56 +0200
Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote:

> Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx> wrote on Wed, 27 May
> 2020 00:59:28 +0200:
> 
> > On Tue, 26 May 2020 21:56:21 +0200
> > Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote:
> >   
> > > Now that the misleading mix between ECC engine type and OOB placement
> > > has been addressed, add a new enumeration to properly define ECC types
> > > (also called provider or mode).
> > > 
> > > Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
> > > Reviewed-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx>
> > > ---
> > >  drivers/mtd/nand/raw/nand_base.c |  7 +++++++
> > >  include/linux/mtd/rawnand.h      | 16 ++++++++++++++++
> > >  2 files changed, 23 insertions(+)
> > > 
> > > diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> > > index 515cd4681660..5c6ab5b93270 100644
> > > --- a/drivers/mtd/nand/raw/nand_base.c
> > > +++ b/drivers/mtd/nand/raw/nand_base.c
> > > @@ -5018,6 +5018,13 @@ static const char * const nand_ecc_modes[] = {
> > >  	[NAND_ECC_ON_DIE]	= "on-die",
> > >  };
> > >  
> > > +static const char * const nand_ecc_engine_providers[] = {    
> > 
> > This table is not used here, are you sure it should be introduced now?
> >   
> > > +	[NAND_ECC_ENGINE_NONE] = "none",
> > > +	[NAND_ECC_ENGINE_SOFT] = "soft",
> > > +	[NAND_ECC_ENGINE_CONTROLLER] = "hw",    
> > 
> > 					^ "on-controller" ?  
> 
> This would break DT backward compatibility, I am afraid I cannot do
> that.

You can always keep a translation table for the old prop
(nand-ecc-mode) and have a new one for the new prop
(nand-ecc-engine-type). But maybe you're not introducing a new property
in this series, in which case the translation table here is just fine.

> Honnestly, I find "hw" good enough because "on-controller" is
> also too restrictive.

How about "on-host", it doesn't say anything about where the engine is
on the host (can be embedded in the controller, or an external block),
yet clearly describe the fact that it's not on-die ECC.

> What about an external (non-pipelined) engine
> like the one I am about to introduce?
> 
> >   
> > > +	[NAND_ECC_ENGINE_ON_DIE] = "on-die",

Well, this one is also a HW engine, and that's the problem I have with
the "hw" string.

> > > +};
> > > +
> > >  static const char * const nand_ecc_placement[] = {
> > >  	[NAND_ECC_PLACEMENT_INTERLEAVED] = "interleaved",
> > >  };
> > > diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> > > index dc909fb977c7..a2078c5f3d21 100644
> > > --- a/include/linux/mtd/rawnand.h
> > > +++ b/include/linux/mtd/rawnand.h
> > > @@ -92,6 +92,22 @@ enum nand_ecc_mode {
> > >  	NAND_ECC_ON_DIE,
> > >  };
> > >  
> > > +/**
> > > + * enum nand_ecc_engine_type - NAND ECC engine type/provider
> > > + * @NAND_ECC_ENGINE_INVALID: Invalid value
> > > + * @NAND_ECC_ENGINE_NONE: No ECC correction
> > > + * @NAND_ECC_ENGINE_SOFT: Software ECC correction
> > > + * @NAND_ECC_ENGINE_CONTROLLER: Hardware controller ECC correction
> > > + * @NAND_ECC_ENGINE_ON_DIE: On chip hardware ECC correction
> > > + */
> > > +enum nand_ecc_engine_type {
> > > +	NAND_ECC_ENGINE_INVALID,
> > > +	NAND_ECC_ENGINE_NONE,
> > > +	NAND_ECC_ENGINE_SOFT,
> > > +	NAND_ECC_ENGINE_CONTROLLER,
> > > +	NAND_ECC_ENGINE_ON_DIE,
> > > +};
> > > +
> > >  /**
> > >   * enum nand_ecc_placement - NAND ECC placement
> > >   * @NAND_ECC_PLACEMENT_FREE: The driver can decide where to put ECC bytes.    
> >   




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux