Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1408059

[PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID

From Boris Brezillon <boris.brezillon@free-electrons.com>
Newsgroups linux.kernel
Subject [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID
Date 2016-05-27 15:00 +0200
Message-ID <rDpwS-3xK-35@gated-at.bofh.it> (permalink)
References <rDpwR-3xK-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Hans de Goede <hdegoede@redhat.com>

On some nand controllers with hw-ecc the controller code wants to know
the ecc strength and size and having these as 0, 0 is not accepted.

Specifying these in devicetree is possible but undesirable as the nand
may be different in different production runs of the same board, so it
is better to get this info from the nand id where possible.

This commit adds code to read the ecc strength and size from the nand
for Samsung extended-id nands. This code is based on the info for the 5th
id byte in the datasheets for the following Samsung nands: K9GAG08U0E,
K9GAG08U0F, K9GAG08X0D, K9GBG08U0A, K9GBG08U0B. These all use these bits
in the exact same way.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/nand_samsung.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/mtd/nand/nand_samsung.c b/drivers/mtd/nand/nand_samsung.c
index 27ede41..39448ff 100644
--- a/drivers/mtd/nand/nand_samsung.c
+++ b/drivers/mtd/nand/nand_samsung.c
@@ -61,6 +61,26 @@ static int samsung_nand_decode_id(struct nand_chip *chip)
 		extid >>= 2;
 		mtd->erasesize = (128 * 1024) <<
 				 (((extid >> 1) & 0x04) | (extid & 0x03));
+
+		/* Extract ECC requirements from 5th id byte*/
+		extid = (chip->id.data[4] >> 4) & 0x07;
+		if (extid < 5) {
+			chip->ecc_step_ds = 512;
+			chip->ecc_strength_ds = 1 << extid;
+		} else {
+			chip->ecc_step_ds = 1024;
+			switch (extid) {
+			case 5:
+				chip->ecc_strength_ds = 24;
+				break;
+			case 6:
+				chip->ecc_strength_ds = 40;
+				break;
+			case 7:
+				chip->ecc_strength_ds = 60;
+				break;
+			}
+		}
 	}
 
 	if (mtd->writesize > 512)
-- 
2.7.4

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/15] mtd: nand: allow vendor specific detection/initialization Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-27 15:00 +0200
  [PATCH 05/15] mtd: nand: add vendor specific initialization step Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-27 15:00 +0200
  [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-27 15:00 +0200
    Re: [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID Valdis.Kletnieks@vt.edu - 2016-05-30 02:30 +0200
      Re: [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements  from extended ID Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-30 09:50 +0200
        Re: [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID Valdis.Kletnieks@vt.edu - 2016-05-30 23:00 +0200
          Re: [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements  from extended ID Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-31 00:30 +0200
            Re: [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements  from extended ID Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-31 00:40 +0200
  [PATCH 14/15] mtd: nand: hynix: rework NAND ID decoding to extract more information Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-27 15:00 +0200
  [PATCH 09/15] mtd: nand: move toshiba specific initialization in nand_toshiba.c Boris Brezillon <boris.brezillon@free-electrons.com> - 2016-05-27 15:00 +0200

csiph-web