Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp795103ybh; Wed, 11 Mar 2020 10:59:46 -0700 (PDT) X-Google-Smtp-Source: ADFU+vusDplDYsBSldHgU6gNuzpE6tTr0TR2ol8OV1UN/rQi7TBxXg0lWyOc5XQsaYMap9nsu1dk X-Received: by 2002:a4a:9b4e:: with SMTP id e14mr1133995ook.41.1583949586368; Wed, 11 Mar 2020 10:59:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583949586; cv=none; d=google.com; s=arc-20160816; b=U5ypZJxv8CTe3sP6dIPXgVQ/xqFPK6dk4AoVqkeNdxPyI5IYLRJlcGGOVYhyt+A3rH WuxHTBHg8493KkdDdkJxgiVbxZm/lTR884hL93LH7R9+cHaMyYrnFYmbitCIbnRWfJVn 5gX5clfpjW66NOsp66EoVpG1ZqfldL1Kg5HW5eKKPpyGx6oV2kWloVM9H0dadhRTzObw 4XxqIp2tkQYwYX4H/q5GDiiIK4bK7h2BPfxYBm71u6tosaQROSWBHOBs/nqjGYmirKvS Wn6mBbk8P2F62IXEvzJSxEtTbZ5NSpfLvysG6yjAEP94oe6ledwEje7uXvb47BZv46NY qGAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=inRJj7F/F+AbnrSRtqE2WRG/KTJ90ug0HSiEeq5Pj94=; b=NciQUDtFYyMJqP6CzEskzgyBqE7323hKz2uzvMoins8sOn0UMjLaZrS/xj+4+BN3wI z+WCpJtkKMIEFZTudLH0G8n7TQ/bTDsW9/0EJ2ChMZi4oQ2XN4QbLDbbciSJIpFLQue4 GTDR0dWmFnoqthflzgzIpgSpAOMPDu1IKibsf78ddjVaZ6c3liKN0T/4IJ2Q1EkNCFaF ZI8zschumSm4otu9f6Cgw10MaYw3JTDKDRSWpQPQyPUH/e89551XuAayI/yn5PMkAnCG aU7KFqjs9ZCuTRgVdqn5AMXoKdQK7M/TFm12RTHce9zIJl3N0xiwK/g87f2VlkNSYxAn SJrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hnncAEEt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p6si433377ook.66.2020.03.11.10.59.34; Wed, 11 Mar 2020 10:59:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hnncAEEt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730703AbgCKR7A (ORCPT + 99 others); Wed, 11 Mar 2020 13:59:00 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:41145 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730375AbgCKR6z (ORCPT ); Wed, 11 Mar 2020 13:58:55 -0400 Received: by mail-wr1-f66.google.com with SMTP id s14so3816767wrt.8 for ; Wed, 11 Mar 2020 10:58:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=inRJj7F/F+AbnrSRtqE2WRG/KTJ90ug0HSiEeq5Pj94=; b=hnncAEEtg+JuFokx6qluoIDGPjGjDCUHe/CaMVrGS+t8kul2ZMdoTNwxanLMkn/tsS kB2NMrxOHdP3ZxRW8Gt1a9jwj8JXYYz7ggw/FyNAovZG0yeV4aSObJLAAjZq6JuS9oE5 nKhHiosX8ZuVzjK5Pp5BEwixnPaplON1R/rgy4cHIAl8sj1r/TCh5xZ9H487/nqztatL 7vYiGZnNCRfGgnT5FXLOKMVgzgSmHVU4rUMhttkHDxudcOcy0rvtLOYW1piFZGoO3Ol+ wvk8XB9vG//vjjjZU4mm9IC5RrMksT7ERrHgxS1FyRUdxp7LjuR8yJ4XCxrCxJu2x40b g6EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=inRJj7F/F+AbnrSRtqE2WRG/KTJ90ug0HSiEeq5Pj94=; b=pmawbI6wrplzA+cNrDPpUjj6EBfclnT4exeBoxTHYsZ/Y7w3kLscyYfISkaBQ3na5d mSqsCfRlZkOTdZ+2/ZoAjojcK7IsNemFKkfiRq5iaFlip55fKePlY4ZQPOe0oNSVgQIn js9I5hcT4Peb46r1fiZsAS9sl20RvNDMOd7UTSLE1mM+m1fNwYZe9bsHW69gpz8SVDFQ 4qc1Sa5pzr7A3AkXfwsa4t6qkicEbu0XhpDOsWwYAAOmE7OAcsjQiZXv2yIa3PpIF+rQ 1/JgnCfpcLxOkI8KI+agxOVwb++UjNR1fddF3KJsTtTkJm0qFYIrcxJIPeXWaqKcGaUS hEZA== X-Gm-Message-State: ANhLgQ1l/d7wkB53O6Ozoj1fSNiu7JC4zG+Vn98B518pRDzbYqqMmC8O HLJRmjwcjMmWKtMMxilUpwg= X-Received: by 2002:adf:94a3:: with SMTP id 32mr6039829wrr.276.1583949532613; Wed, 11 Mar 2020 10:58:52 -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 l18sm1502107wrr.17.2020.03.11.10.58.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2020 10:58:51 -0700 (PDT) From: shiva.linuxworks@gmail.com X-Google-Original-From: sshivamurthy@micron.com To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Boris Brezillon , Chuanhong Guo , Frieder Schrempf , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Shivamurthy Shastri Subject: [PATCH v7 4/6] mtd: spinand: micron: identify SPI NAND device with Continuous Read mode Date: Wed, 11 Mar 2020 18:57:33 +0100 Message-Id: <20200311175735.2007-5-sshivamurthy@micron.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200311175735.2007-1-sshivamurthy@micron.com> References: <20200311175735.2007-1-sshivamurthy@micron.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Shivamurthy Shastri Add SPINAND_HAS_CR_FEAT_BIT flag to identify the SPI NAND device with the Continuous Read mode. Some of the Micron SPI NAND devices have the "Continuous Read" feature enabled by default, which does not fit the subsystem needs. In this mode, the READ CACHE command doesn't require the starting column address. The device always output the data starting from the first column of the cache register, and once the end of the cache register reached, the data output continues through the next page. With the continuous read mode, it is possible to read out the entire block using a single READ command, and once the end of the block reached, the output pins become High-Z state. However, during this mode the read command doesn't output the OOB area. Hence, we disable the feature at probe time. Signed-off-by: Shivamurthy Shastri Reviewed-by: Boris Brezillon --- drivers/mtd/nand/spi/micron.c | 16 ++++++++++++++++ include/linux/mtd/spinand.h | 1 + 2 files changed, 17 insertions(+) diff --git a/drivers/mtd/nand/spi/micron.c b/drivers/mtd/nand/spi/micron.c index 26925714a9fb..956f7710aca2 100644 --- a/drivers/mtd/nand/spi/micron.c +++ b/drivers/mtd/nand/spi/micron.c @@ -18,6 +18,8 @@ #define MICRON_STATUS_ECC_4TO6_BITFLIPS (3 << 4) #define MICRON_STATUS_ECC_7TO8_BITFLIPS (5 << 4) +#define MICRON_CFG_CR BIT(0) + static SPINAND_OP_VARIANTS(read_cache_variants, SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), @@ -137,7 +139,21 @@ static const struct spinand_info micron_spinand_table[] = { micron_8_ecc_get_status)), }; +static int micron_spinand_init(struct spinand_device *spinand) +{ + /* + * M70A device series enable Continuous Read feature at Power-up, + * which is not supported. Disable this bit to avoid any possible + * failure. + */ + if (spinand->flags & SPINAND_HAS_CR_FEAT_BIT) + return spinand_upd_cfg(spinand, MICRON_CFG_CR, 0); + + return 0; +} + static const struct spinand_manufacturer_ops micron_spinand_manuf_ops = { + .init = micron_spinand_init, }; const struct spinand_manufacturer micron_spinand_manufacturer = { diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h index f4c4ae87181b..1077c45721ff 100644 --- a/include/linux/mtd/spinand.h +++ b/include/linux/mtd/spinand.h @@ -284,6 +284,7 @@ struct spinand_ecc_info { }; #define SPINAND_HAS_QE_BIT BIT(0) +#define SPINAND_HAS_CR_FEAT_BIT BIT(1) /** * struct spinand_info - Structure used to describe SPI NAND chips -- 2.17.1