All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] fix OOB size decoding on SK Hynix H27UCG8T2BTR
@ 2018-05-19 12:44 Martin Blumenstingl
  2018-05-19 12:44 ` [PATCH 1/1] mtd: rawnand: hynix: fix decoding the OOB size on H27UCG8T2BTR Martin Blumenstingl
  0 siblings, 1 reply; 3+ messages in thread
From: Martin Blumenstingl @ 2018-05-19 12:44 UTC (permalink / raw)
  To: linux-mtd, boris.brezillon, richard
  Cc: dwmw2, computersforpeace, marek.vasut, Martin Blumenstingl

The OOB size of the SK Hynix H27UCG8T2BTR is currently detected to be
640 bytes, while the datasheet states that it should be 1280 bytes.

I only have one single device with a SK Hynix NAND flash, so I cannot
say whether this fix may or may not break other chips. other datasheets
I have checked:
- H27UBG8T2B uses a page size of 8KiB -> not applicable
- H27UBG8T2A also uses a page size of 8KiB -> not applicable either

so I would appreciate if someone else could confirm (even if it's
"just" by looking at a datasheet) that this patch should work for other
SK Hynix NAND chips with 16KiB page size.

I decided not to add a "Fixes" tag because it seems H27UCG8T2BTR was
not supported properly at any point in the past (upstream at least).


Martin Blumenstingl (1):
  mtd: rawnand: hynix: fix decoding the OOB size on H27UCG8T2BTR

 drivers/mtd/nand/raw/nand_hynix.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.17.0

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/1] mtd: rawnand: hynix: fix decoding the OOB size on H27UCG8T2BTR
  2018-05-19 12:44 [PATCH 0/1] fix OOB size decoding on SK Hynix H27UCG8T2BTR Martin Blumenstingl
@ 2018-05-19 12:44 ` Martin Blumenstingl
  2018-05-20 17:32   ` Miquel Raynal
  0 siblings, 1 reply; 3+ messages in thread
From: Martin Blumenstingl @ 2018-05-19 12:44 UTC (permalink / raw)
  To: linux-mtd, boris.brezillon, richard
  Cc: dwmw2, computersforpeace, marek.vasut, Martin Blumenstingl

The datasheet of the H27UCG8T2BTR states that this chip has a page size
of "16,384 + 1,280(Spare) bytes". The description of the "4th Byte of
Device Identifier Description" indicates that bits 6, 3 and 2 are
encoding the "Redundant Area Size / 8KB", where 640 bytes is a value of
0x6 (110 in binary notation).

hynix_nand_extract_oobsize decodes an OOB size of 640 bytes for this
chip. Kernel boot log extract before this patch:
nand: Could not find valid ONFI parameter page; aborting
nand: device found, Manufacturer ID: 0xad, Chip ID: 0xde
nand: Hynix NAND 8GiB 3,3V 8-bit
nand: 8192 MiB, MLC, erase size: 4096 KiB, page size: 16384,
      OOB size: 640

However, based on the description in the datasheet we need to multiply
the OOB size with 2, because it's "640 spare bytes per 8192 bytes page
size" and this NAND chip has a page size of 16384 (= 2 * 8192). After
this patch the kernel boot log reports:
nand: Could not find valid ONFI parameter page; aborting
nand: device found, Manufacturer ID: 0xad, Chip ID: 0xde
nand: Hynix NAND 8GiB 3,3V 8-bit
nand: 8192 MiB, MLC, erase size: 4096 KiB, page size: 16384,
      OOB size: 1280

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 drivers/mtd/nand/raw/nand_hynix.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mtd/nand/raw/nand_hynix.c b/drivers/mtd/nand/raw/nand_hynix.c
index d542908a0ebb..60d9c54b769f 100644
--- a/drivers/mtd/nand/raw/nand_hynix.c
+++ b/drivers/mtd/nand/raw/nand_hynix.c
@@ -473,6 +473,10 @@ static void hynix_nand_extract_oobsize(struct nand_chip *chip,
 			WARN(1, "Invalid OOB size");
 			break;
 		}
+
+		/* Reference: H27UCG8T2BTR - "Redundant Area Size / 8KB" */
+		if (mtd->writesize == SZ_16K)
+			mtd->oobsize *= 2;
 	}
 }
 
-- 
2.17.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/1] mtd: rawnand: hynix: fix decoding the OOB size on H27UCG8T2BTR
  2018-05-19 12:44 ` [PATCH 1/1] mtd: rawnand: hynix: fix decoding the OOB size on H27UCG8T2BTR Martin Blumenstingl
@ 2018-05-20 17:32   ` Miquel Raynal
  0 siblings, 0 replies; 3+ messages in thread
From: Miquel Raynal @ 2018-05-20 17:32 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: linux-mtd, boris.brezillon, richard, marek.vasut,
	computersforpeace, dwmw2

Hi Martin,

On Sat, 19 May 2018 14:44:31 +0200, Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:

> The datasheet of the H27UCG8T2BTR states that this chip has a page size
> of "16,384 + 1,280(Spare) bytes". The description of the "4th Byte of
> Device Identifier Description" indicates that bits 6, 3 and 2 are
> encoding the "Redundant Area Size / 8KB", where 640 bytes is a value of
> 0x6 (110 in binary notation).
> 
> hynix_nand_extract_oobsize decodes an OOB size of 640 bytes for this
> chip. Kernel boot log extract before this patch:
> nand: Could not find valid ONFI parameter page; aborting
> nand: device found, Manufacturer ID: 0xad, Chip ID: 0xde
> nand: Hynix NAND 8GiB 3,3V 8-bit
> nand: 8192 MiB, MLC, erase size: 4096 KiB, page size: 16384,
>       OOB size: 640
> 
> However, based on the description in the datasheet we need to multiply
> the OOB size with 2, because it's "640 spare bytes per 8192 bytes page
> size" and this NAND chip has a page size of 16384 (= 2 * 8192). After
> this patch the kernel boot log reports:
> nand: Could not find valid ONFI parameter page; aborting
> nand: device found, Manufacturer ID: 0xad, Chip ID: 0xde
> nand: Hynix NAND 8GiB 3,3V 8-bit
> nand: 8192 MiB, MLC, erase size: 4096 KiB, page size: 16384,
>       OOB size: 1280
> 
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> ---
>  drivers/mtd/nand/raw/nand_hynix.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/mtd/nand/raw/nand_hynix.c b/drivers/mtd/nand/raw/nand_hynix.c
> index d542908a0ebb..60d9c54b769f 100644
> --- a/drivers/mtd/nand/raw/nand_hynix.c
> +++ b/drivers/mtd/nand/raw/nand_hynix.c
> @@ -473,6 +473,10 @@ static void hynix_nand_extract_oobsize(struct nand_chip *chip,
>  			WARN(1, "Invalid OOB size");
>  			break;
>  		}
> +
> +		/* Reference: H27UCG8T2BTR - "Redundant Area Size / 8KB" */
> +		if (mtd->writesize == SZ_16K)
> +			mtd->oobsize *= 2;

As we're not entirely sure this is the case for all Hynix 16k pages
NAND chips, would you mind narrowing the fix to only this reference?
Something like the following:

    if (!strcmp("H27UCG8T2BTR", chip->parameters.model))

with a nice comment forward explaining why you do it.

>  	}
>  }
>  

Thanks,
Miquèl

-- 
Miquel Raynal, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-05-20 17:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-19 12:44 [PATCH 0/1] fix OOB size decoding on SK Hynix H27UCG8T2BTR Martin Blumenstingl
2018-05-19 12:44 ` [PATCH 1/1] mtd: rawnand: hynix: fix decoding the OOB size on H27UCG8T2BTR Martin Blumenstingl
2018-05-20 17:32   ` Miquel Raynal

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.