2015-02-04 09:32:32

by Nicholas Mc Guire

[permalink] [raw]
Subject: [PATCH] mtd: nand: omap: conditions with no effect

The if and the else branch code are identical - so the condition has no
effect on the effective code - this patch removes the condition and the
duplicated code.

Signed-off-by: Nicholas Mc Guire <[email protected]>
---

The conditions in the OMAP_ECC_BCH8_CODE_HW_DETECTION_SW and
OMAP_ECC_BCH4_CODE_HW_DETECTION_SW case have no effect and can
be removed. As there are no comments it is not possible to say
if this is the correct solution or if this is actually a bug and
the two branches should be different.

This patch needs a review by someone who knows the details of the driver

Patch was only compile tested with arm-linux-gnueabi-4.7-, current
crosstool-ng did no not seem to compile omap2 properly.
Config is omap2plus_defconfig which implies CONFIG_MTD_NAND_OMAP2=y.

Patch is against 3.19.0-rc6 (localversion-next is -next-20150203)

drivers/mtd/nand/omap2.c | 24 ++++++------------------
1 file changed, 6 insertions(+), 18 deletions(-)

diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index 63f858e..5bcdd66 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1071,15 +1071,9 @@ static void __maybe_unused omap_enable_hwecc_bch(struct mtd_info *mtd, int mode)
case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
bch_type = 0;
nsectors = 1;
- if (mode == NAND_ECC_READ) {
- wr_mode = BCH_WRAPMODE_6;
- ecc_size0 = BCH_ECC_SIZE0;
- ecc_size1 = BCH_ECC_SIZE1;
- } else {
- wr_mode = BCH_WRAPMODE_6;
- ecc_size0 = BCH_ECC_SIZE0;
- ecc_size1 = BCH_ECC_SIZE1;
- }
+ wr_mode = BCH_WRAPMODE_6;
+ ecc_size0 = BCH_ECC_SIZE0;
+ ecc_size1 = BCH_ECC_SIZE1;
break;
case OMAP_ECC_BCH4_CODE_HW:
bch_type = 0;
@@ -1097,15 +1091,9 @@ static void __maybe_unused omap_enable_hwecc_bch(struct mtd_info *mtd, int mode)
case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
bch_type = 1;
nsectors = 1;
- if (mode == NAND_ECC_READ) {
- wr_mode = BCH_WRAPMODE_6;
- ecc_size0 = BCH_ECC_SIZE0;
- ecc_size1 = BCH_ECC_SIZE1;
- } else {
- wr_mode = BCH_WRAPMODE_6;
- ecc_size0 = BCH_ECC_SIZE0;
- ecc_size1 = BCH_ECC_SIZE1;
- }
+ wr_mode = BCH_WRAPMODE_6;
+ ecc_size0 = BCH_ECC_SIZE0;
+ ecc_size1 = BCH_ECC_SIZE1;
break;
case OMAP_ECC_BCH8_CODE_HW:
bch_type = 1;
--
1.7.10.4


2015-02-04 11:18:12

by Roger Quadros

[permalink] [raw]
Subject: Re: [PATCH] mtd: nand: omap: conditions with no effect

Nicholas,

On 04/02/15 11:27, Nicholas Mc Guire wrote:
> The if and the else branch code are identical - so the condition has no
> effect on the effective code - this patch removes the condition and the
> duplicated code.
>
> Signed-off-by: Nicholas Mc Guire <[email protected]>
> ---
>
> The conditions in the OMAP_ECC_BCH8_CODE_HW_DETECTION_SW and
> OMAP_ECC_BCH4_CODE_HW_DETECTION_SW case have no effect and can
> be removed. As there are no comments it is not possible to say
> if this is the correct solution or if this is actually a bug and
> the two branches should be different.
>
> This patch needs a review by someone who knows the details of the driver
>
> Patch was only compile tested with arm-linux-gnueabi-4.7-, current
> crosstool-ng did no not seem to compile omap2 properly.
> Config is omap2plus_defconfig which implies CONFIG_MTD_NAND_OMAP2=y.
>
> Patch is against 3.19.0-rc6 (localversion-next is -next-20150203)
>
> drivers/mtd/nand/omap2.c | 24 ++++++------------------
> 1 file changed, 6 insertions(+), 18 deletions(-)

Your patch is correct as far as I can tell based on commits 2ef9f3ddec55, 62116e5171e0
and 8d602cf50d3b.

The idea was to use BCH_WRAPMODE_6 for both reads and writes when we're not using the ELM
module for error correction. i.e. BCH4_SW or BCH8_SW.
This is mentioned in the header of omap_enable_hwecc_bch() but it is not very clear.
So let's fix that as well with this patch.

diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index 63f858e..a133780 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1048,10 +1048,9 @@ static int omap_dev_ready(struct mtd_info *mtd)
* @mtd: MTD device structure
* @mode: Read/Write mode
*
- * When using BCH, sector size is hardcoded to 512 bytes.
- * Using wrapping mode 6 both for reading and writing if ELM module not uses
- * for error correction.
- * On writing,
+ * When using BCH with SW correction (i.e. no ELM), sector size is set
+ * to 512 bytes and we use BCH_WRAPMODE_6 wrapping mode
+ * for both reading and writing with:
* eccsize0 = 0 (no additional protected byte in spare area)
* eccsize1 = 32 (skip 32 nibbles = 16 bytes per sector in spare area)
*/

Then you can also add my

Acked-by: Roger Quadros <[email protected]>

cheers,
-roger

>
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 63f858e..5bcdd66 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -1071,15 +1071,9 @@ static void __maybe_unused omap_enable_hwecc_bch(struct mtd_info *mtd, int mode)
> case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
> bch_type = 0;
> nsectors = 1;
> - if (mode == NAND_ECC_READ) {
> - wr_mode = BCH_WRAPMODE_6;
> - ecc_size0 = BCH_ECC_SIZE0;
> - ecc_size1 = BCH_ECC_SIZE1;
> - } else {
> - wr_mode = BCH_WRAPMODE_6;
> - ecc_size0 = BCH_ECC_SIZE0;
> - ecc_size1 = BCH_ECC_SIZE1;
> - }
> + wr_mode = BCH_WRAPMODE_6;
> + ecc_size0 = BCH_ECC_SIZE0;
> + ecc_size1 = BCH_ECC_SIZE1;
> break;
> case OMAP_ECC_BCH4_CODE_HW:
> bch_type = 0;
> @@ -1097,15 +1091,9 @@ static void __maybe_unused omap_enable_hwecc_bch(struct mtd_info *mtd, int mode)
> case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
> bch_type = 1;
> nsectors = 1;
> - if (mode == NAND_ECC_READ) {
> - wr_mode = BCH_WRAPMODE_6;
> - ecc_size0 = BCH_ECC_SIZE0;
> - ecc_size1 = BCH_ECC_SIZE1;
> - } else {
> - wr_mode = BCH_WRAPMODE_6;
> - ecc_size0 = BCH_ECC_SIZE0;
> - ecc_size1 = BCH_ECC_SIZE1;
> - }
> + wr_mode = BCH_WRAPMODE_6;
> + ecc_size0 = BCH_ECC_SIZE0;
> + ecc_size1 = BCH_ECC_SIZE1;
> break;
> case OMAP_ECC_BCH8_CODE_HW:
> bch_type = 1;
>

2015-02-04 11:42:14

by Nicholas Mc Guire

[permalink] [raw]
Subject: Re: [PATCH] mtd: nand: omap: conditions with no effect

On Wed, 04 Feb 2015, Roger Quadros wrote:

> Nicholas,
>
> On 04/02/15 11:27, Nicholas Mc Guire wrote:
> > The if and the else branch code are identical - so the condition has no
> > effect on the effective code - this patch removes the condition and the
> > duplicated code.
> >
> > Signed-off-by: Nicholas Mc Guire <[email protected]>
> > ---
> >
> > The conditions in the OMAP_ECC_BCH8_CODE_HW_DETECTION_SW and
> > OMAP_ECC_BCH4_CODE_HW_DETECTION_SW case have no effect and can
> > be removed. As there are no comments it is not possible to say
> > if this is the correct solution or if this is actually a bug and
> > the two branches should be different.
> >
> > This patch needs a review by someone who knows the details of the driver
> >
> > Patch was only compile tested with arm-linux-gnueabi-4.7-, current
> > crosstool-ng did no not seem to compile omap2 properly.
> > Config is omap2plus_defconfig which implies CONFIG_MTD_NAND_OMAP2=y.
> >
> > Patch is against 3.19.0-rc6 (localversion-next is -next-20150203)
> >
> > drivers/mtd/nand/omap2.c | 24 ++++++------------------
> > 1 file changed, 6 insertions(+), 18 deletions(-)
>
> Your patch is correct as far as I can tell based on commits 2ef9f3ddec55, 62116e5171e0
> and 8d602cf50d3b.
>
> The idea was to use BCH_WRAPMODE_6 for both reads and writes when we're not using the ELM
> module for error correction. i.e. BCH4_SW or BCH8_SW.
> This is mentioned in the header of omap_enable_hwecc_bch() but it is not very clear.
> So let's fix that as well with this patch.
>
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 63f858e..a133780 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -1048,10 +1048,9 @@ static int omap_dev_ready(struct mtd_info *mtd)
> * @mtd: MTD device structure
> * @mode: Read/Write mode
> *
> - * When using BCH, sector size is hardcoded to 512 bytes.
> - * Using wrapping mode 6 both for reading and writing if ELM module not uses
> - * for error correction.
> - * On writing,
> + * When using BCH with SW correction (i.e. no ELM), sector size is set
> + * to 512 bytes and we use BCH_WRAPMODE_6 wrapping mode
> + * for both reading and writing with:
> * eccsize0 = 0 (no additional protected byte in spare area)
> * eccsize1 = 32 (skip 32 nibbles = 16 bytes per sector in spare area)
> */
>
> Then you can also add my
>
> Acked-by: Roger Quadros <[email protected]>
>

thanks for the clarification !

will merge this and repost

thx!
hofrat


>
> >
> > diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> > index 63f858e..5bcdd66 100644
> > --- a/drivers/mtd/nand/omap2.c
> > +++ b/drivers/mtd/nand/omap2.c
> > @@ -1071,15 +1071,9 @@ static void __maybe_unused omap_enable_hwecc_bch(struct mtd_info *mtd, int mode)
> > case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
> > bch_type = 0;
> > nsectors = 1;
> > - if (mode == NAND_ECC_READ) {
> > - wr_mode = BCH_WRAPMODE_6;
> > - ecc_size0 = BCH_ECC_SIZE0;
> > - ecc_size1 = BCH_ECC_SIZE1;
> > - } else {
> > - wr_mode = BCH_WRAPMODE_6;
> > - ecc_size0 = BCH_ECC_SIZE0;
> > - ecc_size1 = BCH_ECC_SIZE1;
> > - }
> > + wr_mode = BCH_WRAPMODE_6;
> > + ecc_size0 = BCH_ECC_SIZE0;
> > + ecc_size1 = BCH_ECC_SIZE1;
> > break;
> > case OMAP_ECC_BCH4_CODE_HW:
> > bch_type = 0;
> > @@ -1097,15 +1091,9 @@ static void __maybe_unused omap_enable_hwecc_bch(struct mtd_info *mtd, int mode)
> > case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
> > bch_type = 1;
> > nsectors = 1;
> > - if (mode == NAND_ECC_READ) {
> > - wr_mode = BCH_WRAPMODE_6;
> > - ecc_size0 = BCH_ECC_SIZE0;
> > - ecc_size1 = BCH_ECC_SIZE1;
> > - } else {
> > - wr_mode = BCH_WRAPMODE_6;
> > - ecc_size0 = BCH_ECC_SIZE0;
> > - ecc_size1 = BCH_ECC_SIZE1;
> > - }
> > + wr_mode = BCH_WRAPMODE_6;
> > + ecc_size0 = BCH_ECC_SIZE0;
> > + ecc_size1 = BCH_ECC_SIZE1;
> > break;
> > case OMAP_ECC_BCH8_CODE_HW:
> > bch_type = 1;
> >
>