From patchwork Mon Jul 22 05:56:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134720 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tzwSS+lZ"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NMh1rXdk"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWDP5mQmz9sBZ for ; Mon, 22 Jul 2019 16:00:21 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AesoOMbkOnLHhA6p0Z2SZnVPlE+xe4bzXwMj9SyPcKk=; b=tzwSS+lZSeKKdK STc7mEg4Ww6oCmB2OsInBZJs33snmsmUP6p38RC9+tkQLCufDOUV8gDQhPT8w/DiSK65TBfYdnh64 ilRDa0YUH+U907LQeiAJVAoS/DGHQR+yRVTMBe+/XYk+PN4KEqGAQGj/3WTRclog/nsizYD2LbIdC 2q3+XShxGDNsTVp2MxO04TaeHQYb52Ajc209pAD6Qrx7H0h9gmE6CeRONSZnF4vjru6L22Lbqwy/l voKZN6Rpxo10Yz5EwuFcpAkCdh9toZWKPKzAvzYQzAg+RKyB/YtXv4YjR88ic7zMbJ8kXuZIvTxtB vZ20R10mtvqvS0hY0A+w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpRMZ-0008W6-S7; Mon, 22 Jul 2019 05:59:56 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJm-00063p-8e for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:06 +0000 Received: by mail-ed1-x52c.google.com with SMTP id i11so39484457edq.0 for ; Sun, 21 Jul 2019 22:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=V0NauvuKcIG8OsEXlRR/U4pgQmro8nJ1gsHE95WvQnI=; b=NMh1rXdkfWbuWDt+z3yLdkH/Y3Ouh+MzrzHaN3CeC/8ltQHQSE6EGFxxH/BDFynb01 1ZVuNU0zwSR+XjqzhCJOUbVvmP/unkNMf52OSqhfkjAfHp6QeEqWuNd5j2blDRPgDolT GA1zL+pryQepcxHDTFH5RAjThr3ky8HcL/HqE0W+f0+Hl5Vn69QH/854SL+CcgibT7pq Emr4BgMusm690fBWxx8lvWeFX7UUve1x+F58dX8Wuyyai6smP9BAOKBjzxWcR22VY8SZ 7i3rCiy/wYQLtgP0dvxLAuGjZ+A2vQHls8QLiK7rrdT+QumCXd4V0sPa6zSXZk2Kilwj H2oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=V0NauvuKcIG8OsEXlRR/U4pgQmro8nJ1gsHE95WvQnI=; b=MsTPVl9OgPclJtiuweTu81i0ARMgSXpgi8SgE/MLGbihxpZC0ANpbaqPGX+EDUZoJi 36+grDyBXfY6yMyIZn5V1qn4aUEtaoJwLbt8yBBvt/gaXLgzJqqzSQdodt9+xSmiV4S4 Tw98QqLzEwU32Sh6YwhbZcigM2U3DFKBAsOgt71AfqQvwhNt2PWNGKd90mwBsEQRzPJ0 MrsoOpThpbWyyk5q2G7+39W4W5PHxoSsCX8nficjdRSzDr3Grlb72Ctsz9pHo01QTPkv LBZz6HgoJ5unC6nRgzDvIV4Y7hCVFfk/PoL4nY3ch5mndzVurdpiBr9Y98gmoXLWjiY4 cQWw== X-Gm-Message-State: APjAAAWKWtTZUJWIMsOegzxGDdbsSh6WjLSCUa4YMiefx//Z0cYXv5TD 5bC+oQa1rzgKmgSOT49uCNQ= X-Google-Smtp-Source: APXvYqzalEzwxMf39q5qKDrV92KYncql/CQqlOTzgBM0FoITMmwp3crIM1iaLnWdTd/EYvyTCCPPEQ== X-Received: by 2002:a05:6402:609:: with SMTP id n9mr58825921edv.159.1563775020497; Sun, 21 Jul 2019 22:57:00 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.56.59 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:00 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 1/8] mtd: nand: move ONFI related functions to onfi.h Date: Mon, 22 Jul 2019 07:56:14 +0200 Message-Id: <20190722055621.23526-2-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225702_437531_DEB3BAF4 X-CRM114-Status: GOOD ( 11.55 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:52c listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri These functions will be used by both raw NAND and SPI NAND, which supports ONFI like standards. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/raw/internals.h | 1 - include/linux/mtd/onfi.h | 9 +++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/raw/internals.h b/drivers/mtd/nand/raw/internals.h index cba6fe7dd8c4..ed323087d884 100644 --- a/drivers/mtd/nand/raw/internals.h +++ b/drivers/mtd/nand/raw/internals.h @@ -140,7 +140,6 @@ void nand_legacy_adjust_cmdfunc(struct nand_chip *chip); int nand_legacy_check_hooks(struct nand_chip *chip); /* ONFI functions */ -u16 onfi_crc16(u16 crc, u8 const *p, size_t len); int nand_onfi_detect(struct nand_chip *chip); /* JEDEC functions */ diff --git a/include/linux/mtd/onfi.h b/include/linux/mtd/onfi.h index 339ac798568e..2c8a05a02bb0 100644 --- a/include/linux/mtd/onfi.h +++ b/include/linux/mtd/onfi.h @@ -10,6 +10,7 @@ #ifndef __LINUX_MTD_ONFI_H #define __LINUX_MTD_ONFI_H +#include #include /* ONFI version bits */ @@ -175,4 +176,12 @@ struct onfi_params { u8 vendor[88]; }; +/* ONFI functions */ +u16 onfi_crc16(u16 crc, u8 const *p, size_t len); +void nand_bit_wise_majority(const void **srcbufs, + unsigned int nsrcbufs, + void *dstbuf, + unsigned int bufsize); +void sanitize_string(u8 *s, size_t len); + #endif /* __LINUX_MTD_ONFI_H */ From patchwork Mon Jul 22 05:56:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134721 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Hj7y/eKZ"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="izR8ii6T"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWFC2C1Tz9s7T for ; Mon, 22 Jul 2019 16:01:03 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aA/CHnEq1LO+MUVb6F4gL+cZbzw6vxbu4oxOXIAALBw=; b=Hj7y/eKZjVVsfg HLnjBXrIaJZALIYzVnchxY1nMKkLPhA672fO9JTULF5KiYDzMWF+ydD1NTr006iVfqHDsUXTXCmaX UapwZP6YJnSx1SqDeBoews7Dm7BUbjojrEWgjJBTOJKu1CWm44o7LPueqn55SUMTnxnF7mlkg1ewx odZFjqTEruPONkvmGOnoo+8+UfL4w77wu6+NHf6yQlWugCYPXq69/8XPmYHUlR1dyWoWqtpW/T/TE /4xbpBwej7RPhjlX90jyCMCV9RYXVPl14ahodbgNMWjt2Rn0Rvmjl4jam4UBuXNQ/5whyB2Fb94PE /it3i69Kj19iNYF+1izQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpRNA-0001Wj-Dp; Mon, 22 Jul 2019 06:00:32 +0000 Received: from mail-ed1-x544.google.com ([2a00:1450:4864:20::544]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJo-00065o-Lm for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:07 +0000 Received: by mail-ed1-x544.google.com with SMTP id x19so33565753eda.12 for ; Sun, 21 Jul 2019 22:57:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=pxcu0gzYmTJg7/SYH6P7gGwh+xb3swxEoUjuPM97X8E=; b=izR8ii6TUtZgW0Q9fEINbTEuN2xIz0P0cbES4aGgk1EH/q4LAUZwfQZuEoAaGwgSKE if+hmX1Le73Kqi3SAd8MHkaj69W5eb/WDdt4i/p7UPWlchyZXFDgmc1JArZtSfp9Ltm+ 8UtZPQLx5W4IC4zHe7UBFYcgR0GfnH/i2Fw1ORF6nSu3u57ENNT6mW00ruWPHa0anpDG rGb7lnztbsD/0vXx/sEMP0AhtB6ss1GRE7r1DNeOs1jk+YrJhSqPeGRpBhPcbAGDFzbA nGek0VxIh5DGA9sRnELQWmLPicPSlPc3AUihK7N0agjpwnG5lXj+h3kNYLBRrkuIjdTr gdjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=pxcu0gzYmTJg7/SYH6P7gGwh+xb3swxEoUjuPM97X8E=; b=Jl9En7MmY5PEOHBwGpMhxArUtAX9ZyP/+96QQ1yWfDK/7zvs9MhCddApdPpPzAaRgv 0KcnroGYUPdbr1FOwOVf4MuouMlJ1giYAzWsfzOg04o1x0j204bnCS5ntA1y67hwNOg9 6UJK1yyDIirR/XXQ/ZpH5cHFakHtcJBM4eKhxnwxwvdhOo2+pNbcARo+j6IJBMWLdV68 D/YSVdSy/9xNr3Pgxt0Y6+RmSZMeVk3g18U1HamZQcOq2orHzbBsghw0R2LNt+Ez5O5T bzoCYSTi3ZYHyNlGzkux/2hggpuT/VF6IdCmvsMKJ1e4YsCqXHqp8Uxd43BFXDZmmTZL wo2A== X-Gm-Message-State: APjAAAXg9Qrf9/UKodFo9kNJ0m78KJasHnB4llGOq6jfCSfxJI05RsQw /q5L+YRHvhU7X2GT4JLl6Mo= X-Google-Smtp-Source: APXvYqweD+JMsI/+uYUfECWwa5adY6VjJlXf4MWo+dcT51D1LyLnFBl2SJStG0qHkEMfz5DusOsPWQ== X-Received: by 2002:a17:906:5c4e:: with SMTP id c14mr49957402ejr.73.1563775022894; Sun, 21 Jul 2019 22:57:02 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.00 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:02 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 2/8] mtd: nand: move support functions for ONFI to nand/onfi.c Date: Mon, 22 Jul 2019 07:56:15 +0200 Message-Id: <20190722055621.23526-3-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225704_833921_11226C8A X-CRM114-Status: GOOD ( 19.71 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:544 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri These functions are support functions for enabling ONFI standard and common between raw NAND and SPI NAND. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/Makefile | 2 +- drivers/mtd/nand/onfi.c | 89 ++++++++++++++++++++++++++++++++ drivers/mtd/nand/raw/nand_base.c | 18 ------- drivers/mtd/nand/raw/nand_onfi.c | 43 --------------- 4 files changed, 90 insertions(+), 62 deletions(-) create mode 100644 drivers/mtd/nand/onfi.c diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index 7ecd80c0a66e..221945c223c3 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 -nandcore-objs := core.o bbt.o +nandcore-objs := core.o bbt.o onfi.o obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o obj-y += onenand/ diff --git a/drivers/mtd/nand/onfi.c b/drivers/mtd/nand/onfi.c new file mode 100644 index 000000000000..7aaf36dfc5e0 --- /dev/null +++ b/drivers/mtd/nand/onfi.c @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0 + +#define pr_fmt(fmt) "nand-onfi: " fmt + +#include +#include + +/** + * onfi_crc16() - Check CRC of ONFI table + * @crc: base CRC + * @p: buffer pointing to ONFI table + * @len: length of ONFI table + * + * Return: CRC of the ONFI table + */ +u16 onfi_crc16(u16 crc, u8 const *p, size_t len) +{ + int i; + + while (len--) { + crc ^= *p++ << 8; + for (i = 0; i < 8; i++) + crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0); + } + + return crc; +} +EXPORT_SYMBOL_GPL(onfi_crc16); + +/** + * nand_bit_wise_majority() - Recover data with bit-wise majority + * @srcbufs: buffer pointing to ONFI table + * @nsrcbufs: length of ONFI table + * @dstbuf: valid ONFI table to be returned + * @bufsize: length og valid ONFI table + * + */ +void nand_bit_wise_majority(const void **srcbufs, + unsigned int nsrcbufs, + void *dstbuf, + unsigned int bufsize) +{ + int i, j, k; + + for (i = 0; i < bufsize; i++) { + u8 val = 0; + + for (j = 0; j < 8; j++) { + unsigned int cnt = 0; + + for (k = 0; k < nsrcbufs; k++) { + const u8 *srcbuf = srcbufs[k]; + + if (srcbuf[i] & BIT(j)) + cnt++; + } + + if (cnt > nsrcbufs / 2) + val |= BIT(j); + } + + ((u8 *)dstbuf)[i] = val; + } +} +EXPORT_SYMBOL_GPL(nand_bit_wise_majority); + +/** + * sanitize_string() - Sanitize ONFI strings so we can safely print them + * @s: string to be sanitized + * @len: length of the string + * + */ +void sanitize_string(u8 *s, size_t len) +{ + ssize_t i; + + /* Null terminate */ + s[len - 1] = 0; + + /* Remove non printable chars */ + for (i = 0; i < len - 1; i++) { + if (s[i] < ' ' || s[i] > 127) + s[i] = '?'; + } + + /* Remove trailing spaces */ + strim(s); +} +EXPORT_SYMBOL_GPL(sanitize_string); diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index 6ecd1c496ce3..c198829bcd79 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -4375,24 +4375,6 @@ static void nand_set_defaults(struct nand_chip *chip) chip->buf_align = 1; } -/* Sanitize ONFI strings so we can safely print them */ -void sanitize_string(uint8_t *s, size_t len) -{ - ssize_t i; - - /* Null terminate */ - s[len - 1] = 0; - - /* Remove non printable chars */ - for (i = 0; i < len - 1; i++) { - if (s[i] < ' ' || s[i] > 127) - s[i] = '?'; - } - - /* Remove trailing spaces */ - strim(s); -} - /* * nand_id_has_period - Check if an ID string has a given wraparound period * @id_data: the ID string diff --git a/drivers/mtd/nand/raw/nand_onfi.c b/drivers/mtd/nand/raw/nand_onfi.c index 0b879bd0a68c..2e8edfa636ef 100644 --- a/drivers/mtd/nand/raw/nand_onfi.c +++ b/drivers/mtd/nand/raw/nand_onfi.c @@ -16,18 +16,6 @@ #include "internals.h" -u16 onfi_crc16(u16 crc, u8 const *p, size_t len) -{ - int i; - while (len--) { - crc ^= *p++ << 8; - for (i = 0; i < 8; i++) - crc = (crc << 1) ^ ((crc & 0x8000) ? 0x8005 : 0); - } - - return crc; -} - /* Parse the Extended Parameter Page. */ static int nand_flash_detect_ext_param_page(struct nand_chip *chip, struct nand_onfi_params *p) @@ -103,37 +91,6 @@ static int nand_flash_detect_ext_param_page(struct nand_chip *chip, return ret; } -/* - * Recover data with bit-wise majority - */ -static void nand_bit_wise_majority(const void **srcbufs, - unsigned int nsrcbufs, - void *dstbuf, - unsigned int bufsize) -{ - int i, j, k; - - for (i = 0; i < bufsize; i++) { - u8 val = 0; - - for (j = 0; j < 8; j++) { - unsigned int cnt = 0; - - for (k = 0; k < nsrcbufs; k++) { - const u8 *srcbuf = srcbufs[k]; - - if (srcbuf[i] & BIT(j)) - cnt++; - } - - if (cnt > nsrcbufs / 2) - val |= BIT(j); - } - - ((u8 *)dstbuf)[i] = val; - } -} - /* * Check if the NAND chip is ONFI compliant, returns 1 if it is, 0 otherwise. */ From patchwork Mon Jul 22 05:56:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134722 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hyV7q93c"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="txJ5ZWv3"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWFD2gl0z9sBZ for ; Mon, 22 Jul 2019 16:01:04 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7cP9b5/k5FdilevKzkx38RonOmxZj3ukxDbThkFUbQk=; b=hyV7q93cHPNBe4 Q1SAHt140nOIsQLO38a9nAa2f7eZ1ox5hrunqrlBXpSxtiGLtMSvUsOe0+KD+z6k06Us1LZ2COyIq UqzYvy2rQ8cj4bWPtF8eTuNHDC3VApKLxBmkN7qZwo1kmjpI7hL6U++S/mlq1M1QrP9zCZ3dn319U toS9CG5mpzh5qp6z6Twch9XDZai2YgDpOJT5UvPRi6eQ29ubtwpgrAgtHJbyZk+Ov5OeXW3BinLlM ouXbm1QLG4xc1ftOYuXr0hIeB3qrKtf8PJ3H2Z3GcyzMh/0B0OtpEt4mEVFvFSZ0PNXofRBrZn+kT GveJ6YItju8jqZsXyFdA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpRNe-0001pr-3e; Mon, 22 Jul 2019 06:01:02 +0000 Received: from mail-ed1-x542.google.com ([2a00:1450:4864:20::542]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJq-00067R-Cb for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:08 +0000 Received: by mail-ed1-x542.google.com with SMTP id i11so39484582edq.0 for ; Sun, 21 Jul 2019 22:57:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=bhNuL7XR6WEpgsenxUTTXd4yjWX8/ASS+IMSViWNwpg=; b=txJ5ZWv3UKmiuk5ssBeCveRyf9AJmr1QKUJybWC0DM2RF05KdMQrda6cmGBnCr/QLL ri+3uMOvgMfnu5d9xee6QcqvW2HvouJ8Xbm2s8JGvAU2ttSe3kiq+gBc6Uvvk0yKhmpV XwJ6dAmbOuW84v95gcIv4W5StOdwXDniKeA+ehK7WNVllMzF3y8a3/fT5lsOO+uyisDN LR49ltmjpBVUcbybXcr+5ta4q7B/Q9GWSbi5kUwp2kNbgcGBQJ0hLPRfcKpeJlR0WNwr tgkAJxU/LcV2m4fO6Dh+FsET5x4I8fmAYsKV6Ve4wm9jabUusrK0vFrJ28ybe257oVBA IXtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=bhNuL7XR6WEpgsenxUTTXd4yjWX8/ASS+IMSViWNwpg=; b=G5FerVADB5MMgEapZwTcIge+zbUTcnORuW/ka7caTSDntGDR8m5JZtdbi48pH5jgbB VAY2K3+3ZJI84bRva/E77VrvgoDMPUPSJ5ynBuYWS66Lz9rffjbFjl/XiycJyz79mE66 7pHirgQNMACwivFiR54MEdPnTuY+tiScUCe8aHMN04uMcaf+1szl4w3QZG1lBnxs1wJg CduDpxGi6KAioxs2wR1L/btvkLyurciKUCTJBUbNyjY+9igQwAn7fiFvxRkqiGHzzJBE t0gp3eURDVYxDbKV43/bEmkk7iGe7siyjCOyL60McsbYCEbGi6XGObGgckapAJegrCPl VLZQ== X-Gm-Message-State: APjAAAWkeGQ5AOyMr+wDlZGujyNl4N7kvpLSMXOpbYjRpb0d4TUTSY3P BfQQFOwFxJtokbZSm1UASF0bS5yBaSMUpA== X-Google-Smtp-Source: APXvYqxG50dPPkeMZPABlYE+bDSQXe0vmIiBeaCAjtUOw965SYgsTWI6lWdD9a3aFJBew6lyZc17xQ== X-Received: by 2002:a17:906:a481:: with SMTP id m1mr27835309ejz.87.1563775025026; Sun, 21 Jul 2019 22:57:05 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.02 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:04 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 3/8] mtd: nand: create ONFI table parsing instance Date: Mon, 22 Jul 2019 07:56:16 +0200 Message-Id: <20190722055621.23526-4-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225706_677343_25695536 X-CRM114-Status: GOOD ( 13.58 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:542 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri ONFI table parsing is common, as most of the variables are common between raw and SPI NAND. The parsing function is instantiated in onfi.c, which fills ONFI parameters into nand_memory_organization. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/onfi.c | 32 ++++++++++++++++++++++++++++++++ drivers/mtd/nand/raw/nand_onfi.c | 22 ++-------------------- include/linux/mtd/onfi.h | 2 ++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/drivers/mtd/nand/onfi.c b/drivers/mtd/nand/onfi.c index 7aaf36dfc5e0..e78700894aea 100644 --- a/drivers/mtd/nand/onfi.c +++ b/drivers/mtd/nand/onfi.c @@ -87,3 +87,35 @@ void sanitize_string(u8 *s, size_t len) strim(s); } EXPORT_SYMBOL_GPL(sanitize_string); + +/** + * fill_nand_memorg() - Parse ONFI table and fill memorg + * @memorg: NAND memorg to be filled + * @p: ONFI table to be parsed + * + */ +void parse_onfi_params(struct nand_memory_organization *memorg, + struct nand_onfi_params *p) +{ + memorg->pagesize = le32_to_cpu(p->byte_per_page); + + /* + * pages_per_block and blocks_per_lun may not be a power-of-2 size + * (don't ask me who thought of this...). MTD assumes that these + * dimensions will be power-of-2, so just truncate the remaining area. + */ + memorg->pages_per_eraseblock = + 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1); + + memorg->oobsize = le16_to_cpu(p->spare_bytes_per_page); + + memorg->luns_per_target = p->lun_count; + memorg->planes_per_lun = 1 << p->interleaved_bits; + + /* See erasesize comment */ + memorg->eraseblocks_per_lun = + 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1); + memorg->max_bad_eraseblocks_per_lun = le32_to_cpu(p->blocks_per_lun); + memorg->bits_per_cell = p->bits_per_cell; +} +EXPORT_SYMBOL_GPL(parse_onfi_params); diff --git a/drivers/mtd/nand/raw/nand_onfi.c b/drivers/mtd/nand/raw/nand_onfi.c index 2e8edfa636ef..263796d3298c 100644 --- a/drivers/mtd/nand/raw/nand_onfi.c +++ b/drivers/mtd/nand/raw/nand_onfi.c @@ -181,30 +181,12 @@ int nand_onfi_detect(struct nand_chip *chip) goto free_onfi_param_page; } - memorg->pagesize = le32_to_cpu(p->byte_per_page); - mtd->writesize = memorg->pagesize; + parse_onfi_params(memorg, p); - /* - * pages_per_block and blocks_per_lun may not be a power-of-2 size - * (don't ask me who thought of this...). MTD assumes that these - * dimensions will be power-of-2, so just truncate the remaining area. - */ - memorg->pages_per_eraseblock = - 1 << (fls(le32_to_cpu(p->pages_per_block)) - 1); + mtd->writesize = memorg->pagesize; mtd->erasesize = memorg->pages_per_eraseblock * memorg->pagesize; - - memorg->oobsize = le16_to_cpu(p->spare_bytes_per_page); mtd->oobsize = memorg->oobsize; - memorg->luns_per_target = p->lun_count; - memorg->planes_per_lun = 1 << p->interleaved_bits; - - /* See erasesize comment */ - memorg->eraseblocks_per_lun = - 1 << (fls(le32_to_cpu(p->blocks_per_lun)) - 1); - memorg->max_bad_eraseblocks_per_lun = le32_to_cpu(p->blocks_per_lun); - memorg->bits_per_cell = p->bits_per_cell; - if (le16_to_cpu(p->features) & ONFI_FEATURE_16_BIT_BUS) chip->options |= NAND_BUSWIDTH_16; diff --git a/include/linux/mtd/onfi.h b/include/linux/mtd/onfi.h index 2c8a05a02bb0..4cacf4e9db6d 100644 --- a/include/linux/mtd/onfi.h +++ b/include/linux/mtd/onfi.h @@ -183,5 +183,7 @@ void nand_bit_wise_majority(const void **srcbufs, void *dstbuf, unsigned int bufsize); void sanitize_string(u8 *s, size_t len); +void parse_onfi_params(struct nand_memory_organization *memorg, + struct nand_onfi_params *p); #endif /* __LINUX_MTD_ONFI_H */ From patchwork Mon Jul 22 05:56:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134723 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="mK/y+X0W"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Ym0q0ag5"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWFs0mb3z9s7T for ; Mon, 22 Jul 2019 16:01:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=eMqfNier+VPOeTGJnPIULfu3TUe8grbrQrorqkzbq1I=; b=mK/y+X0WBwDGyy reP5lljUDB2rzxhtuPXOrC44B9AFhK3AiooZ1Duu1lj0Uv1kr5AGRT9Gkoc8PFCWwbQYRR09220RB t+hCARayLYoVc27lMZoH6+7fiTnmhRXewsDubKGPWt8aEKQkgLTUDmGdLeVLcHYGdIFzRZ6eNdFT7 U/Lh4jfwQNBVhM6HeS7JCVp6kQRomdp8T+zSPYZicXjZ17MZgHPIqTxI01DtPPo5fchStZRCVGVtD x6wtwhc2bCXfRrkAeDItcVbjS3qXvXxL/pzOw4ztrDIoqn/4Ks5HCTp3LyQeZ6DqOPxLK4RiTKcBw sWkkC+cSmvGu03M7BQ+w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpRNy-00026b-0A; Mon, 22 Jul 2019 06:01:22 +0000 Received: from mail-ed1-x542.google.com ([2a00:1450:4864:20::542]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJs-00069a-JQ for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:11 +0000 Received: by mail-ed1-x542.google.com with SMTP id v15so39502389eds.9 for ; Sun, 21 Jul 2019 22:57:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=iMlH/BYqbAh4REkdZXe54Nv2D1l55hhhpJHFooXoPH0=; b=Ym0q0ag5yqQqLX/IsCxjkPoRHUyTN5NoYbQvyfK8War1pID/3YChEiEjhavjfOk3UU 2ykmSz5cS7SUuhYcviJls6J1SwWLuAQozyFl1lXn7Awk2IYQmToDgSOhw8qghRymhnJ+ yC8j4IXCGIeWw1c4wIrc8J2n8KlcuXue6fVtgFwgRGuS10SkWQTNQGdwmNHviffDqn4b c7n92Eb+7LSQDkmb8h4XS5doko3q2Jt4Dw34cE2cboG+vI1SvVRDYCOcumcawJbCjcrJ 77UzTovNf3hqYxkmeGmoVEYrtnx9HFdeywFbU08/Th/PXjFIUxz17lQGZlciBrB9eZxp yIuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=iMlH/BYqbAh4REkdZXe54Nv2D1l55hhhpJHFooXoPH0=; b=oKtLF3oRNiwuVnk3YgM1CVTvf1UIVx9LVFZ1+VmgTsDcrdkT9F1guxQGHEfik5aTeB fFbXImA1vKmxWCCFdwJfk8OxzzoT5qVONwoKYmx3WyX4nAFxur8eCNLWaWDBZ1IAB8Ya TUlZM+kUrC9NjK2Xgt5yegIRYmzIMLQUutTlw5MxocpGqq5w0yK2E0hgbiAyS0U2GDfE A3/604Y0lEww4fsecIq/BCNCPLvQuOtTZO2JyEf3yHWRqe+qKWoBJizzC+mduFXC6Ry9 g/6CBmJ1TDOw8Zt2/mCcE31x91MU0jlvrsSn+RKOJqfWP5MvIg5ObOoDdfiCDN+Pmyc7 xBPg== X-Gm-Message-State: APjAAAW54w7Q3A9V3STRUfGg8o+IstuHUqAxTRaldbI7P6yDEBQN6lQ/ OEpKL43qkfaWASy6MrjsH0N4jHUc1Qb0Pg== X-Google-Smtp-Source: APXvYqyMcOm1g8pB9ctwTxhdfq5bvQ4iIn4xrBML8nSEMEUpaszUlrmNnvVIPgwihnggFB/zjxendA== X-Received: by 2002:a50:9999:: with SMTP id m25mr59306263edb.183.1563775027233; Sun, 21 Jul 2019 22:57:07 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.05 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:06 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 4/8] mtd: spinand: enabled parameter page support Date: Mon, 22 Jul 2019 07:56:17 +0200 Message-Id: <20190722055621.23526-5-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225709_794519_44793590 X-CRM114-Status: GOOD ( 19.75 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:542 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri Some of the SPI NAND devices has parameter page, which is similar to ONFI table. But, it may not be self sufficient to propagate all the required parameters. Fixup function has been added in struct manufacturer to accommodate this. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/spi/core.c | 134 ++++++++++++++++++++++++++++++++++++ include/linux/mtd/spinand.h | 3 + 2 files changed, 137 insertions(+) diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index 89f6beefb01c..7ae76dab9141 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -400,6 +400,131 @@ static int spinand_lock_block(struct spinand_device *spinand, u8 lock) return spinand_write_reg_op(spinand, REG_BLOCK_LOCK, lock); } +/** + * spinand_read_param_page_op - Read parameter page operation + * @spinand: the spinand + * @page: page number where parameter page tables can be found + * @buf: buffer used to store the parameter page + * @len: length of the buffer + * + * Read parameter page + * + * Returns 0 on success, a negative error code otherwise. + */ +static int spinand_parameter_page_read(struct spinand_device *spinand, + u8 page, void *buf, unsigned int len) +{ + struct spi_mem_op pread_op = SPINAND_PAGE_READ_OP(page); + struct spi_mem_op pread_cache_op = + SPINAND_PAGE_READ_FROM_CACHE_OP(false, + 0, + 1, + buf, + len); + u8 feature; + u8 status; + int ret; + + if (len && !buf) + return -EINVAL; + + ret = spinand_read_reg_op(spinand, REG_CFG, + &feature); + if (ret) + return ret; + + /* CFG_OTP_ENABLE is used to enable parameter page access */ + feature |= CFG_OTP_ENABLE; + + spinand_write_reg_op(spinand, REG_CFG, feature); + + ret = spi_mem_exec_op(spinand->spimem, &pread_op); + if (ret) + return ret; + + ret = spinand_wait(spinand, &status); + if (ret < 0) + return ret; + + ret = spi_mem_exec_op(spinand->spimem, &pread_cache_op); + if (ret) + return ret; + + ret = spinand_read_reg_op(spinand, REG_CFG, + &feature); + if (ret) + return ret; + + feature &= ~CFG_OTP_ENABLE; + + spinand_write_reg_op(spinand, REG_CFG, feature); + + return 0; +} + +static int spinand_param_page_detect(struct spinand_device *spinand) +{ + struct mtd_info *mtd = spinand_to_mtd(spinand); + struct nand_memory_organization *memorg; + struct nand_onfi_params *p; + struct nand_device *base = spinand_to_nand(spinand); + int i, ret; + + memorg = nanddev_get_memorg(base); + + /* Allocate buffer to hold parameter page */ + p = kzalloc((sizeof(*p) * 3), GFP_KERNEL); + if (!p) + return -ENOMEM; + + ret = spinand_parameter_page_read(spinand, 0x01, p, sizeof(*p) * 3); + if (ret) { + ret = 0; + goto free_param_page; + } + + for (i = 0; i < 3; i++) { + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)&p[i], 254) == + le16_to_cpu(p->crc)) { + if (i) + memcpy(p, &p[i], sizeof(*p)); + break; + } + } + + if (i == 3) { + const void *srcbufs[3] = {p, p + 1, p + 2}; + + pr_warn("Could not find a valid ONFI parameter page, trying bit-wise majority to recover it\n"); + nand_bit_wise_majority(srcbufs, ARRAY_SIZE(srcbufs), p, + sizeof(*p)); + + if (onfi_crc16(ONFI_CRC_BASE, (u8 *)p, 254) != + le16_to_cpu(p->crc)) { + pr_err("ONFI parameter recovery failed, aborting\n"); + goto free_param_page; + } + } + + parse_onfi_params(memorg, p); + + mtd->writesize = memorg->pagesize; + mtd->erasesize = memorg->pages_per_eraseblock * memorg->pagesize; + mtd->oobsize = memorg->oobsize; + + /* Manufacturers may interpret the parameter page differently */ + if (spinand->manufacturer->ops->fixup_param_page) + spinand->manufacturer->ops->fixup_param_page(spinand, p); + + /* Identification done, free the full parameter page and exit */ + ret = 1; + +free_param_page: + kfree(p); + + return ret; +} + static int spinand_check_ecc_status(struct spinand_device *spinand, u8 status) { struct nand_device *nand = spinand_to_nand(spinand); @@ -911,6 +1036,15 @@ static int spinand_detect(struct spinand_device *spinand) return ret; } + if (!spinand->base.memorg.pagesize) { + ret = spinand_param_page_detect(spinand); + if (ret <= 0) { + dev_err(dev, "no parameter page for %*phN\n", + SPINAND_MAX_ID_LEN, spinand->id.data); + return -ENODEV; + } + } + if (nand->memorg.ntargets > 1 && !spinand->select_target) { dev_err(dev, "SPI NANDs with more than one die must implement ->select_target()\n"); diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h index 4ea558bd3c46..fea820a20bc9 100644 --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h @@ -15,6 +15,7 @@ #include #include #include +#include /** * Standard SPI NAND flash operations @@ -209,6 +210,8 @@ struct spinand_manufacturer_ops { int (*detect)(struct spinand_device *spinand); int (*init)(struct spinand_device *spinand); void (*cleanup)(struct spinand_device *spinand); + void (*fixup_param_page)(struct spinand_device *spinand, + struct nand_onfi_params *p); }; /** From patchwork Mon Jul 22 05:56:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134724 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="CiOyOIdn"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="qA6B8TEQ"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWGC5Rb1z9s7T for ; Mon, 22 Jul 2019 16:01:55 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ECmeYJvqogdllhA0gt9D755GihC5T0blKPwkrU5L+ao=; b=CiOyOIdnrl0xHH dGtoUqMKvMRHAa+6bBFcLLbhXAo5AyK2xzLmtVEY+HoHrcgLElFbMbE+R8kLDWZZIjKTPdMtVP1Qy AOmjuFn00NXNyWsR4KxXuwYgmqAdAanHRz8KjrTYSZQjaNvmPMc/hls/GSY1mDZWprIyC62PPbMTC YM4PdrH97qlAqCNUQ3k3F7luiJMgxtWFqWzSiYQVbotHOC4tn3XjDVUKRql6rB5Q3gVIOzU2rsgIO URLIEnLziAkLH5rXvRBLlYUXiq4R6udyA0TTMtKFKXT8HpcvmJ9RtSlpOHWp25QQLY3zKNGBFnUol reuG0SlFGTfQYU74YLFw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpROG-0002Lp-FS; Mon, 22 Jul 2019 06:01:40 +0000 Received: from mail-ed1-x544.google.com ([2a00:1450:4864:20::544]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJu-0006B7-Uf for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:12 +0000 Received: by mail-ed1-x544.google.com with SMTP id r12so4687269edo.5 for ; Sun, 21 Jul 2019 22:57:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=kwPXLWN6H/COBfq884oPFZycA/+QGtJcjDeTrXDDWXs=; b=qA6B8TEQd3lxAieBE5VShYd/sB2OekDZ7Wip64ey/4vmgfB2ZuTx5Ap++zZxQw2Bn2 VnNdRK4E+Zl2U/nHs8h5fpJY7tlpaTP18X0yd/07GmFPqNW+JVuJJMDFcP9HspjEyNvc RpRpCL5sBViuPKHNPlChq6q5JBX3bpP9rqMaI0ypkwS4Pd1EtwU1CpAziFbkdwUG4LUK 0EiMpQhWAJAqEWrjvSa+awIR5dWOr+cdHvzSNaaCy66Kpj1ZXhq2lIcORgD8Ym8d+rZZ 6KPPC5qtiHV/EVhfWHBHAbfw6Mak4n6ZPBpI33URJsy2odYg4TlMSalo3jTmFMpORmwi CCrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=kwPXLWN6H/COBfq884oPFZycA/+QGtJcjDeTrXDDWXs=; b=TcOL1s150WEW5OJQuYTYsdaO1C/Iy1kqodrhGzpZlXoLGoEIObcBfbnP5BJlM5RLn3 PuXhNpRtezK6f/D6ngTd8BYDpQtPNLcHXT2ykVpi7D8JVjPq14Vqgkb4v1Dxxped7U6v E5QJV7u2QrRhJ78tOY8F2kwKfw9FX0cp/i50t6SB+XqSdO/Y0SED8Qisw6ta4EPm4Dej DbHHOBpBAaqW9veU39VfdiYS+84NbzdMYlAoL80SEi6aXA1A0S5GGEVSBR8Z2vA5+SlY PF460e3bFrP/dg9Bdwz4io3ETbTfHy6MP6Afn+D2bG4wdJG9+CzQdDzvf1oLloM1Z6LO RC3g== X-Gm-Message-State: APjAAAWGTLGhDYmcRLLfXAscS4x9+vlpUGiZS4nIWPbFbpai/37AqSpt CvWyn8EQQcfjUnnhNvnzGt8= X-Google-Smtp-Source: APXvYqwCtu9XPj5RwCf+z9IbEvNwKl31zZN+U2AKja8o8344MGFPPgPlXldvB082TO9Ayxm07z1GJQ== X-Received: by 2002:a17:906:4bcb:: with SMTP id x11mr51998939ejv.1.1563775029720; Sun, 21 Jul 2019 22:57:09 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.07 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:09 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 5/8] mtd: spinand: micron: prepare for generalizing driver Date: Mon, 22 Jul 2019 07:56:18 +0200 Message-Id: <20190722055621.23526-6-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225711_216789_CC8C215A X-CRM114-Status: GOOD ( 11.74 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:544 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri Generalize OOB layout structure and function names. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/spi/micron.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 7d7b1f7fcf71..95bc5264ebc1 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -34,38 +34,38 @@ static SPINAND_OP_VARIANTS(update_cache_variants, SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), SPINAND_PROG_LOAD(false, 0, NULL, 0)); -static int mt29f2g01abagd_ooblayout_ecc(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) +static int micron_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *region) { if (section) return -ERANGE; - region->offset = 64; - region->length = 64; + region->offset = mtd->oobsize / 2; + region->length = mtd->oobsize / 2; return 0; } -static int mt29f2g01abagd_ooblayout_free(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) +static int micron_ooblayout_free(struct mtd_info *mtd, int section, + struct mtd_oob_region *region) { if (section) return -ERANGE; /* Reserve 2 bytes for the BBM. */ region->offset = 2; - region->length = 62; + region->length = (mtd->oobsize / 2) - 2; return 0; } -static const struct mtd_ooblayout_ops mt29f2g01abagd_ooblayout = { - .ecc = mt29f2g01abagd_ooblayout_ecc, - .free = mt29f2g01abagd_ooblayout_free, +static const struct mtd_ooblayout_ops micron_ooblayout_ops = { + .ecc = micron_ooblayout_ecc, + .free = micron_ooblayout_free, }; -static int mt29f2g01abagd_ecc_get_status(struct spinand_device *spinand, - u8 status) +static int micron_ecc_get_status(struct spinand_device *spinand, + u8 status) { switch (status & MICRON_STATUS_ECC_MASK) { case STATUS_ECC_NO_BITFLIPS: @@ -98,8 +98,8 @@ static const struct spinand_info micron_spinand_table[] = { &write_cache_variants, &update_cache_variants), 0, - SPINAND_ECCINFO(&mt29f2g01abagd_ooblayout, - mt29f2g01abagd_ecc_get_status)), + SPINAND_ECCINFO(µn_ooblayout_ops, + micron_ecc_get_status)), }; static int micron_spinand_detect(struct spinand_device *spinand) From patchwork Mon Jul 22 05:56:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134725 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ONd0z3N9"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="KFXR9KV6"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWGh6nR9z9s7T for ; Mon, 22 Jul 2019 16:02:20 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aqLdtx1IjsFozN5oF1HkuitSmpXkvdCZ1n7bUrL0lK8=; b=ONd0z3N9QERSNb Uhh6HfG6Ct8t+55+qMzd+Go7AKI0fBCP6N1WZ3lj4KcXREIrIAiu8kl/e8nT0tyJTWaG/QkN5fGfY 768fFtagmZSoYPuaX1k2mqcv+bS9vicdeacmLaAqH9NP1GsHjzyK+czjvzD6SS54PrW43UT6m4Zcj qG1+A4mGR4I76pvfmQl7KlouMglZjlmlekH6j2STcii2Iwu5lXAnV3v7KSuOrrzKX5TRa87N2XZB8 1XOZFm66vMU5aH+ABWinuAODg6OZ0vgFPztCsZP6ejAd4pFLcUSHokzpQr94H0LC8E5NZ/HFg2SVZ 5d7AhLwbtjrmKbzfNsRQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpROf-0002dF-1I; Mon, 22 Jul 2019 06:02:05 +0000 Received: from mail-ed1-x543.google.com ([2a00:1450:4864:20::543]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJx-0006DD-Eh for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:15 +0000 Received: by mail-ed1-x543.google.com with SMTP id m10so39477640edv.6 for ; Sun, 21 Jul 2019 22:57:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=zO4yKVmIa9YvWgGk/0+i5c9t3cZGy5igpPanc2xkxac=; b=KFXR9KV64XDKn922AuqENwVrvCjE5sS60Icms22EU6DorpQM4EBvfpwMj8nobQXz/n JwiUQ+HOs2oxOhUOtysnquS5y6RNE6xI63FVzJkXqKctxQbHtQOT2a51PqEDvVlxh17v LEwFiLvvdhmLx6oYeIJhckiHRE2choX19rY881IOvYusmq8B4FRWkukpM/sUeDCzxAKi o8Az9+2SQwtdN+WmToyjY1eYB7uYxujxfyLducTlZRmgQdUckoCOxGSI2wWRgmVrvjWR //IZqCFnuYpI4MwGzU0YPgHLBzICycAnP+aXVnBPtdGwhTrxINfgbVtQpMmyahkvrH4e MzfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=zO4yKVmIa9YvWgGk/0+i5c9t3cZGy5igpPanc2xkxac=; b=KyiHTCRi1coKxfqjf+waQtDl+ChSesbO/rkESfukOka8XPwytguymFrE6ADDd9zeyZ sb/gtwAra4i71HyPHX0DwF3MOE/YWUFBJ+w4eg/wGe4uaRY7r543nIwHkZPMct2csHHz iFkegc/ylP3OIcIGZZxwIreFElMImHdf0dMjK7k/Ehos7uU8IHCVSCaYXoIGcKDribfU 9L1KNQiTcRgpuMCsBLQear2JKvBUJEapZ98GpJNBumvUneKvHscci1DDTUiFsh+SRV/t Tbft6dlZ9g+DooPIBrxuKeP+l7Is0nwsU7H42JshaZVdl1ihE0wbMXa52pGqRqaOR4CL dPJg== X-Gm-Message-State: APjAAAU+exyBjcCL0M61FLXhX4bnpuUEc4ObLVmTeDLYrrBKPBex9V1k e63C6jaQX17v9s3Ru8kLVJU= X-Google-Smtp-Source: APXvYqw6Q7piGD5BWsnPoIG/2OE+vGWUkd+9athz6x7RRFsj5kPgeYBstb8EQbao8+w1NA+vfp3YFw== X-Received: by 2002:a50:ae8f:: with SMTP id e15mr58257582edd.74.1563775031758; Sun, 21 Jul 2019 22:57:11 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.09 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:11 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 6/8] mtd: spinand: micron: Turn driver implementation generic Date: Mon, 22 Jul 2019 07:56:19 +0200 Message-Id: <20190722055621.23526-7-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225713_530252_AA8CA740 X-CRM114-Status: GOOD ( 15.27 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:543 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri Driver is redesigned using parameter page to support Micron SPI NAND flashes. The reason why spinand_select_op_variant globalized is that the Micron driver no longer calling spinand_match_and_init. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/spi/core.c | 2 +- drivers/mtd/nand/spi/micron.c | 61 +++++++++++++++++++++++++---------- include/linux/mtd/spinand.h | 4 +++ 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index 7ae76dab9141..aae715d388b7 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -920,7 +920,7 @@ static void spinand_manufacturer_cleanup(struct spinand_device *spinand) return spinand->manufacturer->ops->cleanup(spinand); } -static const struct spi_mem_op * +const struct spi_mem_op * spinand_select_op_variant(struct spinand_device *spinand, const struct spinand_op_variants *variants) { diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 95bc5264ebc1..6fde93ec23a1 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -90,22 +90,10 @@ static int micron_ecc_get_status(struct spinand_device *spinand, return -EINVAL; } -static const struct spinand_info micron_spinand_table[] = { - SPINAND_INFO("MT29F2G01ABAGD", 0x24, - NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1), - NAND_ECCREQ(8, 512), - SPINAND_INFO_OP_VARIANTS(&read_cache_variants, - &write_cache_variants, - &update_cache_variants), - 0, - SPINAND_ECCINFO(µn_ooblayout_ops, - micron_ecc_get_status)), -}; - static int micron_spinand_detect(struct spinand_device *spinand) { + const struct spi_mem_op *op; u8 *id = spinand->id.data; - int ret; /* * Micron SPI NAND read ID need a dummy byte, @@ -114,16 +102,55 @@ static int micron_spinand_detect(struct spinand_device *spinand) if (id[1] != SPINAND_MFR_MICRON) return 0; - ret = spinand_match_and_init(spinand, micron_spinand_table, - ARRAY_SIZE(micron_spinand_table), id[2]); - if (ret) - return ret; + spinand->flags = 0; + spinand->eccinfo.get_status = micron_ecc_get_status; + spinand->eccinfo.ooblayout = µn_ooblayout_ops; + + op = spinand_select_op_variant(spinand, + &read_cache_variants); + if (!op) + return -ENOTSUPP; + + spinand->op_templates.read_cache = op; + + op = spinand_select_op_variant(spinand, + &write_cache_variants); + if (!op) + return -ENOTSUPP; + + spinand->op_templates.write_cache = op; + + op = spinand_select_op_variant(spinand, + &update_cache_variants); + spinand->op_templates.update_cache = op; return 1; } +static void micron_fixup_param_page(struct spinand_device *spinand, + struct nand_onfi_params *p) +{ + /* + * As per Micron datasheets vendor[83] is defined as + * die_select_feature + */ + if (p->vendor[83] && !p->interleaved_bits) + spinand->base.memorg.planes_per_lun = 1 << p->vendor[0]; + + spinand->base.memorg.ntargets = p->lun_count; + spinand->base.memorg.luns_per_target = 1; + + /* + * As per Micron datasheets, + * vendor[82] is ECC maximum correctability + */ + spinand->base.eccreq.strength = p->vendor[82]; + spinand->base.eccreq.step_size = 512; +} + static const struct spinand_manufacturer_ops micron_spinand_manuf_ops = { .detect = micron_spinand_detect, + .fixup_param_page = micron_fixup_param_page, }; const struct spinand_manufacturer micron_spinand_manufacturer = { diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h index fea820a20bc9..ddb2194273a8 100644 --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h @@ -461,4 +461,8 @@ int spinand_match_and_init(struct spinand_device *dev, int spinand_upd_cfg(struct spinand_device *spinand, u8 mask, u8 val); int spinand_select_target(struct spinand_device *spinand, unsigned int target); +const struct spi_mem_op * +spinand_select_op_variant(struct spinand_device *spinand, + const struct spinand_op_variants *variants); + #endif /* __LINUX_MTD_SPINAND_H */ From patchwork Mon Jul 22 05:56:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134727 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="bAtm6oao"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="gezfKoa3"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWH228fBz9sBZ for ; Mon, 22 Jul 2019 16:02:38 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Q9xmkiaqIcVyWixYm7t0T3kJwiayDZoxST1hda7Fc7I=; b=bAtm6oaoFpQkXr 35ZRAZVhccvYTIwhYUIR+Pgp68XUT+gAoqMfk/oK5AwgVoUtcTx1FCHhDVS1v1o2WKOtoI2QiSO0f 6PLdJeKxLdYBqk0J2O6naX6LjeH+K2o95s4JkZoqpzzkAH0n7Ks+kPtae0ZkX8wgcDHBaPoCqnEZP XtmgIO+p5uHEsLgjswbAswfE2uh40EwJ7UUHIeCBZ+8W+hhs1Hl2zB+2ec2FjcMMqLg5cXXRQXYuE HSH0nwwgRzLMA4ythA/++BpvxH4iGa+igDEX77xzW3T2Zwu9OWCtNzHu5CBOx0iWIF3rQY7/N+L2N LoA8zVRCbHi1orothdgw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpROv-0002rZ-S2; Mon, 22 Jul 2019 06:02:21 +0000 Received: from mail-ed1-x542.google.com ([2a00:1450:4864:20::542]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRJz-0006EZ-7F for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:16 +0000 Received: by mail-ed1-x542.google.com with SMTP id k21so39510180edq.3 for ; Sun, 21 Jul 2019 22:57:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=TqB0rOZLlIYh0a/SpSOrS2aG6wy2S7sHIDUEyeUZVZg=; b=gezfKoa3qKy7xPyCUHoxaFJthIwAlw54R2fUek3dXgLyhqVEMHotVYj8+wwaIHrNjC IYvfBBQU/JhMWxByqEbyyQipkJJ54h9RUgitieBUKDeIrPLVY7V3O+ZCwxnlxto2GTIb UlZj2kUAdLp0mDSWbArVC1AiJO1iT7lxNdWDZdQ6U35CzScgzRWjVOJd16sg0WeTOc6e R6fadiWy9m1YNkLIJ3JCB7mVUUuAh5EASppf0MiPR1eA9/fxkO4H0IiGWym1mYJgJu45 uGUXlOj3BVHEYF+D3xNbDQotLWAdcNhlTTsomh7E+7jYzNqmCSntkgR8PpAV36Coqcrq jjKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=TqB0rOZLlIYh0a/SpSOrS2aG6wy2S7sHIDUEyeUZVZg=; b=MKCIjZOrBJ+ny+5Kc+Ssa3qisefbG34l5OqZakWsJkqQ3VwKk1ZFIkBD6HN70TI3Jb c7LueeRo0MFe2und/gCY6+sL0FocIf/zxmLmxgcCsg8bgSbMPr4uZvxXWuV9RI7Bwpy6 2ZkrL7odRaMLDI93EYxTi06x+Ka3wJV6CA+WNJVMj1FvcfOwQ8y+YZhYTG/4lJ0INuu2 vozZlCYrizIZ53PezFlcjc6j1qjYvA+UL8mns3G4NHqaQQnvVXaozAjUIXBedI68ygFE fKGX5lfuc0JpQzyVfrtRrrS+0qun8hW9s1NHAtjjX67JujU/fPI2gy55Ht8kfNUiWTle DWvg== X-Gm-Message-State: APjAAAXecviTc7PmNf3Lve7VpCptv2GY49fSoLsqnT70o4w9JYFMQQ15 WP/iLAw3hExUajnIkPFCe5U= X-Google-Smtp-Source: APXvYqx6ImEFwf8Is2ljvvdc4l0y2Rhn6dNHfM+qK/yx45nzcqfiYPSyeBCbYyIS9F+jcjplkkTHxQ== X-Received: by 2002:a17:906:af86:: with SMTP id mj6mr6292915ejb.157.1563775033987; Sun, 21 Jul 2019 22:57:13 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.11 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:13 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 7/8] mtd: spinand: micron: Fix read failure in Micron M70A flashes Date: Mon, 22 Jul 2019 07:56:20 +0200 Message-Id: <20190722055621.23526-8-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225715_339423_14D9266F X-CRM114-Status: GOOD ( 12.74 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:542 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri M70A series flashes by default enable continuous read feature (BIT0 in configuration register). This feature will not expose the ECC to host and causing read failure. Signed-off-by: Shivamurthy Shastri Reviewed-by: Miquel Raynal --- drivers/mtd/nand/spi/micron.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 6fde93ec23a1..1e28ea3d1362 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -127,6 +127,15 @@ static int micron_spinand_detect(struct spinand_device *spinand) return 1; } +static int micron_spinand_init(struct spinand_device *spinand) +{ + /* + * Some of the Micron flashes enable this BIT by default, + * and there is a chance of read failure due to this. + */ + return spinand_upd_cfg(spinand, CFG_QUAD_ENABLE, 0); +} + static void micron_fixup_param_page(struct spinand_device *spinand, struct nand_onfi_params *p) { @@ -150,6 +159,7 @@ static void micron_fixup_param_page(struct spinand_device *spinand, static const struct spinand_manufacturer_ops micron_spinand_manuf_ops = { .detect = micron_spinand_detect, + .init = micron_spinand_init, .fixup_param_page = micron_fixup_param_page, }; From patchwork Mon Jul 22 05:56:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivamurthy Shastri X-Patchwork-Id: 1134728 X-Patchwork-Delegate: miquel.raynal@bootlin.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="OpSxCYRl"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="iAeg5YAb"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 45sWH56LHzz9s7T for ; Mon, 22 Jul 2019 16:02:41 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zuUDmboQOrRHeyJGd4FuhKJGc710IgcCKz3jNU5sSN4=; b=OpSxCYRlxA5/k2 CVQfXVJ03ExWQT9pQYQHj8xwxn5EXgcn1B8s8YSRHYRicZlrrWJEUwr0mkTS4D3Acq2un+bAleORr FEcrH7xMsU9fpCKbbsL427Fj6vRzhDKdjR8un8oz+fCKN41cPhTGAnf/0A+agTFd++fp+6f9dpr8+ xVU5Y0o0gf/enaVmAOGDtCVrBDJc63UemYnNKqOSkKQxkSPJ6XBDgUm3UsL8c8IgNE4dv/lDchKVC jFl8UBNAc0fltnrVhcWjf6xLcIC7HsApNLHQ3BuDQc9sjjTqsf2SIRXN3MNrfi0U/drKOD93DEbmQ hVzGq5yIyg6WK/etwNaw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hpRPD-00036W-Lm; Mon, 22 Jul 2019 06:02:39 +0000 Received: from mail-ed1-x542.google.com ([2a00:1450:4864:20::542]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hpRK1-0006Gq-C2 for linux-mtd@lists.infradead.org; Mon, 22 Jul 2019 05:57:18 +0000 Received: by mail-ed1-x542.google.com with SMTP id e3so39499348edr.10 for ; Sun, 21 Jul 2019 22:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=JWav04oSOMMfjnrIfRfnbnhq134i7LRODNuQ+JDA4d8=; b=iAeg5YAbgEc4aYUgaNNECEsRpX+e9jc1I5YBQtLvCy5UcbJE62lDIR8qMw5Uo0URLB OR5S1U843vWDtFQk2NDReGy4Qxb7N98CbYzYs19BsFtoqLD5DWV07b8V1JPSFcBXbjyW HWYtON8kw3CBY7KNYNNyGUBHFOA2grIb+ldo42JgaM/4i3ZcSJ6dGqY8b5ov1FKoVBoE u87X+cv6T+p3shg/9BvIHVmZMWjV6L+fwDaG0iRgxd82oLNaJqJYY0HpMvnJNy+GF4+3 1xdSCLtQ22Jf1yyhsfFqpq9MU4Nvy6SLNJPh91tNdAwCOX3JwyfS85HihQlxDN91dRgF e32w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=JWav04oSOMMfjnrIfRfnbnhq134i7LRODNuQ+JDA4d8=; b=F6cDVadVcRi2GHilnt4doTglaoj/AUJ/23qcO04wCruI5NlMFsJjMbVnWGUjDNRRRd DPhVw0lPaOmD4L/UDAF4lLZxKNSLqzYIepvfjGMlv1Q+yMwkFux1Cn2F3Wnt3TgMJ1a+ EjN2CA2VmL3zKTszUrgO1YZVzpmktqSQiW57KL3GDep3TXY0aEdbx6SD5k9PLXgKYWMZ cEWFj3XwE7fen0HiViMiteFT4eZWTgEVdr8lBIeu/bhXUky75plHSSvZZQpepY0rfJmq Dq5bCf/neEpa7M2qRI4V8qbzhkYcXAXoPoX5YM5Ax13B4lALZiqtnnxfm8BE3LLJPEvt /Xgg== X-Gm-Message-State: APjAAAVkUtOpvSVlcmco3zBAUAWidkDOURkfpn88bsU0CFqd4e3WlD+E Vo+zIbbfGyJNKabthCkDgr8= X-Google-Smtp-Source: APXvYqzUeEvZzXubeuDVswHFU5kKDVfDWDqDmcg24fW79naD2l793eQa7IXung57mhGRdtZ8MAtoew== X-Received: by 2002:a50:89b4:: with SMTP id g49mr58295914edg.39.1563775036035; Sun, 21 Jul 2019 22:57:16 -0700 (PDT) Received: from opensdev.fritz.box (business-178-015-117-054.static.arcor-ip.net. [178.15.117.54]) by smtp.gmail.com with ESMTPSA id a6sm10351725eds.19.2019.07.21.22.57.14 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Sun, 21 Jul 2019 22:57:15 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Vignesh Raghavendra , Boris Brezillon , Marcel Ziswiler , Frieder Schrempf , Shivamurthy Shastri , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Kletsky , Chuanhong Guo , liaoweixiong Subject: [PATCH 8/8] mtd: spinand: micron: Enable micron flashes with multi-die Date: Mon, 22 Jul 2019 07:56:21 +0200 Message-Id: <20190722055621.23526-9-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190722055621.23526-1-sshivamurthy@micron.com> References: <20190722055621.23526-1-sshivamurthy@micron.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190721_225717_549043_82343D06 X-CRM114-Status: GOOD ( 10.70 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:542 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (shiva.linuxworks[at]gmail.com) -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Shivamurthy Shastri Some of the Micron flashes has multi-die, and need to select the die each time while accessing it. Signed-off-by: Shivamurthy Shastri --- drivers/mtd/nand/spi/micron.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 1e28ea3d1362..fa2b43caf39d 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -90,6 +90,19 @@ static int micron_ecc_get_status(struct spinand_device *spinand, return -EINVAL; } +static int micron_select_target(struct spinand_device *spinand, + unsigned int target) +{ + struct spi_mem_op op = SPINAND_SET_FEATURE_OP(0xd0, + spinand->scratchbuf); + + if (target == 1) + target = 0x40; + + *spinand->scratchbuf = target; + return spi_mem_exec_op(spinand->spimem, &op); +} + static int micron_spinand_detect(struct spinand_device *spinand) { const struct spi_mem_op *op; @@ -105,6 +118,7 @@ static int micron_spinand_detect(struct spinand_device *spinand) spinand->flags = 0; spinand->eccinfo.get_status = micron_ecc_get_status; spinand->eccinfo.ooblayout = µn_ooblayout_ops; + spinand->select_target = micron_select_target; op = spinand_select_op_variant(spinand, &read_cache_variants);