linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Boris Brezillon <boris.brezillon@free-electrons.com>,
	Richard Weinberger <richard@nod.at>,
	linux-mtd@lists.infradead.org,
	David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Marek Vasut <marek.vasut@gmail.com>,
	Cyrille Pitchen <cyrille.pitchen@atmel.com>
Cc: Icenowy Zheng <icenowy@aosc.xyz>,
	Valdis.Kletnieks@vt.edu, Aleksei Mamlin <mamlinav@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH v6 15/17] mtd: nand: samsung: Retrieve ECC requirements from extended ID
Date: Mon,  9 Jan 2017 11:04:22 +0100	[thread overview]
Message-ID: <1483956264-3335-16-git-send-email-boris.brezillon@free-electrons.com> (raw)
In-Reply-To: <1483956264-3335-1-git-send-email-boris.brezillon@free-electrons.com>

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>
Acked-by: Richard Weinberger <richard@nod.at>
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 5c259dd5b652..9cfc4035a420 100644
--- a/drivers/mtd/nand/nand_samsung.c
+++ b/drivers/mtd/nand/nand_samsung.c
@@ -66,6 +66,26 @@ static void 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;
+			}
+		}
 	} else {
 		nand_decode_ext_id(chip);
 	}
-- 
2.7.4

  parent reply	other threads:[~2017-01-09 11:26 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-09 10:04 [PATCH v6 00/17] mtd: nand: allow vendor specific detection/initialization Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 01/17] mtd: nand: Get rid of the mtd parameter in all auto-detection functions Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 02/17] mtd: nand: Store nand ID in struct nand_chip Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 03/17] mtd: nand: Get rid of busw parameter Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 04/17] mtd: nand: Rename nand_get_flash_type() into nand_detect() Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 05/17] mtd: nand: Rename the nand_manufacturers struct Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 06/17] mtd: nand: Kill the MTD_NAND_IDS Kconfig option Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 07/17] mtd: nand: Do not expose the NAND manufacturer table directly Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 08/17] mtd: nand: Add manufacturer specific initialization/detection steps Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 09/17] mtd: nand: Move Samsung specific init/detection logic in nand_samsung.c Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 10/17] mtd: nand: Move Hynix specific init/detection logic in nand_hynix.c Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 11/17] mtd: nand: Move Toshiba specific init/detection logic in nand_toshiba.c Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 12/17] mtd: nand: Move Micron specific init logic in nand_micron.c Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 13/17] mtd: nand: Move AMD/Spansion specific init/detection logic in nand_amd.c Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 14/17] mtd: nand: Move Macronix specific initialization in nand_macronix.c Boris Brezillon
2017-01-09 10:04 ` Boris Brezillon [this message]
2017-01-09 10:04 ` [PATCH v6 16/17] mtd: nand: hynix: Rework NAND ID decoding to extract more information Boris Brezillon
2017-01-09 10:04 ` [PATCH v6 17/17] mtd: nand: hynix: Add read-retry support for 1x nm MLC NANDs Boris Brezillon
2017-03-16  8:44 ` [PATCH v6 00/17] mtd: nand: allow vendor specific detection/initialization Boris Brezillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1483956264-3335-16-git-send-email-boris.brezillon@free-electrons.com \
    --to=boris.brezillon@free-electrons.com \
    --cc=Valdis.Kletnieks@vt.edu \
    --cc=computersforpeace@gmail.com \
    --cc=cyrille.pitchen@atmel.com \
    --cc=dwmw2@infradead.org \
    --cc=hdegoede@redhat.com \
    --cc=icenowy@aosc.xyz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=mamlinav@gmail.com \
    --cc=marek.vasut@gmail.com \
    --cc=richard@nod.at \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).