[{"id":1767492,"web_url":"http://patchwork.ozlabs.org/comment/1767492/","msgid":"<b7bc2678-bb43-07e1-4661-1510d8518412@Microchip.com>","list_archive_url":null,"date":"2017-09-13T02:45:36","subject":"Re: [PATCH v2 1/2] mtd: nand: introduce NAND_ROW_ADDR_3 flag","submitter":{"id":69532,"url":"http://patchwork.ozlabs.org/api/people/69532/","name":"Wenyou Yang","email":"Wenyou.Yang@microchip.com"},"content":"On 2017/9/13 10:05, Masahiro Yamada wrote:\n> Several drivers check ->chipsize to see if the third row address cycle\n> is needed.  Instead of embedding magic sizes such as 32MB, 128MB in\n> drivers, introduce a new flag NAND_ROW_ADDR_3 for clean-up.  Since\n> nand_scan_ident() knows well about the device, it can handle this\n> properly.  The flag is set if the row address bit width is greater\n> than 16.\n>\n> Delete comments such as \"One more address cycle for ...\" because\n> intention is now clear enough from the code.\n>\n> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>\n\nFor atmel/nand-controller,\nAcked-by: Wenyou Yang <wenyou.yang@microchip.com>\n\n> ---\n>\n> Changes in v2:\n>   - Fix build error\n>\n>   drivers/mtd/nand/atmel/nand-controller.c | 3 +--\n>   drivers/mtd/nand/au1550nd.c              | 3 +--\n>   drivers/mtd/nand/diskonchip.c            | 3 +--\n>   drivers/mtd/nand/hisi504_nand.c          | 3 +--\n>   drivers/mtd/nand/mxc_nand.c              | 3 +--\n>   drivers/mtd/nand/nand_base.c             | 9 +++++----\n>   drivers/mtd/nand/nuc900_nand.c           | 2 +-\n>   include/linux/mtd/rawnand.h              | 3 +++\n>   8 files changed, 14 insertions(+), 15 deletions(-)\n>\n> diff --git a/drivers/mtd/nand/atmel/nand-controller.c b/drivers/mtd/nand/atmel/nand-controller.c\n> index f25eca7..7bc8d20 100644\n> --- a/drivers/mtd/nand/atmel/nand-controller.c\n> +++ b/drivers/mtd/nand/atmel/nand-controller.c\n> @@ -718,8 +718,7 @@ static void atmel_nfc_set_op_addr(struct nand_chip *chip, int page, int column)\n>   \t\tnc->op.addrs[nc->op.naddrs++] = page;\n>   \t\tnc->op.addrs[nc->op.naddrs++] = page >> 8;\n>   \n> -\t\tif ((mtd->writesize > 512 && chip->chipsize > SZ_128M) ||\n> -\t\t    (mtd->writesize <= 512 && chip->chipsize > SZ_32M))\n> +\t\tif (chip->options & NAND_ROW_ADDR_3)\n>   \t\t\tnc->op.addrs[nc->op.naddrs++] = page >> 16;\n>   \t}\n>   }\n> diff --git a/drivers/mtd/nand/au1550nd.c b/drivers/mtd/nand/au1550nd.c\n> index 9d4a28f..8ab827e 100644\n> --- a/drivers/mtd/nand/au1550nd.c\n> +++ b/drivers/mtd/nand/au1550nd.c\n> @@ -331,8 +331,7 @@ static void au1550_command(struct mtd_info *mtd, unsigned command, int column, i\n>   \n>   \t\t\tctx->write_byte(mtd, (u8)(page_addr >> 8));\n>   \n> -\t\t\t/* One more address cycle for devices > 32MiB */\n> -\t\t\tif (this->chipsize > (32 << 20))\n> +\t\t\tif (this->options & NAND_ROW_ADDR_3)\n>   \t\t\t\tctx->write_byte(mtd,\n>   \t\t\t\t\t\t((page_addr >> 16) & 0x0f));\n>   \t\t}\n> diff --git a/drivers/mtd/nand/diskonchip.c b/drivers/mtd/nand/diskonchip.c\n> index c3aa53c..72671dc 100644\n> --- a/drivers/mtd/nand/diskonchip.c\n> +++ b/drivers/mtd/nand/diskonchip.c\n> @@ -705,8 +705,7 @@ static void doc2001plus_command(struct mtd_info *mtd, unsigned command, int colu\n>   \t\tif (page_addr != -1) {\n>   \t\t\tWriteDOC((unsigned char)(page_addr & 0xff), docptr, Mplus_FlashAddress);\n>   \t\t\tWriteDOC((unsigned char)((page_addr >> 8) & 0xff), docptr, Mplus_FlashAddress);\n> -\t\t\t/* One more address cycle for higher density devices */\n> -\t\t\tif (this->chipsize & 0x0c000000) {\n> +\t\t\tif (this->options & NAND_ROW_ADDR_3) {\n>   \t\t\t\tWriteDOC((unsigned char)((page_addr >> 16) & 0x0f), docptr, Mplus_FlashAddress);\n>   \t\t\t\tprintk(\"high density\\n\");\n>   \t\t\t}\n> diff --git a/drivers/mtd/nand/hisi504_nand.c b/drivers/mtd/nand/hisi504_nand.c\n> index d9ee1a7..0897261 100644\n> --- a/drivers/mtd/nand/hisi504_nand.c\n> +++ b/drivers/mtd/nand/hisi504_nand.c\n> @@ -432,8 +432,7 @@ static void set_addr(struct mtd_info *mtd, int column, int page_addr)\n>   \t\thost->addr_value[0] |= (page_addr & 0xffff)\n>   \t\t\t<< (host->addr_cycle * 8);\n>   \t\thost->addr_cycle    += 2;\n> -\t\t/* One more address cycle for devices > 128MiB */\n> -\t\tif (chip->chipsize > (128 << 20)) {\n> +\t\tif (chip->options & NAND_ROW_ADDR_3) {\n>   \t\t\thost->addr_cycle += 1;\n>   \t\t\tif (host->command == NAND_CMD_ERASE1)\n>   \t\t\t\thost->addr_value[0] |= ((page_addr >> 16) & 0xff) << 16;\n> diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c\n> index 53e5e03..bacdd04 100644\n> --- a/drivers/mtd/nand/mxc_nand.c\n> +++ b/drivers/mtd/nand/mxc_nand.c\n> @@ -859,8 +859,7 @@ static void mxc_do_addr_cycle(struct mtd_info *mtd, int column, int page_addr)\n>   \t\t\t\thost->devtype_data->send_addr(host,\n>   \t\t\t\t\t\t(page_addr >> 8) & 0xff, true);\n>   \t\t} else {\n> -\t\t\t/* One more address cycle for higher density devices */\n> -\t\t\tif (mtd->size >= 0x4000000) {\n> +\t\t\tif (nand_chip->options & NAND_ROW_ADDR_3) {\n>   \t\t\t\t/* paddr_8 - paddr_15 */\n>   \t\t\t\thost->devtype_data->send_addr(host,\n>   \t\t\t\t\t\t(page_addr >> 8) & 0xff,\n> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c\n> index bcc8cef1..3bc4404 100644\n> --- a/drivers/mtd/nand/nand_base.c\n> +++ b/drivers/mtd/nand/nand_base.c\n> @@ -727,8 +727,7 @@ static void nand_command(struct mtd_info *mtd, unsigned int command,\n>   \t\tchip->cmd_ctrl(mtd, page_addr, ctrl);\n>   \t\tctrl &= ~NAND_CTRL_CHANGE;\n>   \t\tchip->cmd_ctrl(mtd, page_addr >> 8, ctrl);\n> -\t\t/* One more address cycle for devices > 32MiB */\n> -\t\tif (chip->chipsize > (32 << 20))\n> +\t\tif (chip->options & NAND_ROW_ADDR_3)\n>   \t\t\tchip->cmd_ctrl(mtd, page_addr >> 16, ctrl);\n>   \t}\n>   \tchip->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);\n> @@ -854,8 +853,7 @@ static void nand_command_lp(struct mtd_info *mtd, unsigned int command,\n>   \t\t\tchip->cmd_ctrl(mtd, page_addr, ctrl);\n>   \t\t\tchip->cmd_ctrl(mtd, page_addr >> 8,\n>   \t\t\t\t       NAND_NCE | NAND_ALE);\n> -\t\t\t/* One more address cycle for devices > 128MiB */\n> -\t\t\tif (chip->chipsize > (128 << 20))\n> +\t\t\tif (chip->options & NAND_ROW_ADDR_3)\n>   \t\t\t\tchip->cmd_ctrl(mtd, page_addr >> 16,\n>   \t\t\t\t\t       NAND_NCE | NAND_ALE);\n>   \t\t}\n> @@ -4000,6 +3998,9 @@ static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)\n>   \t\tchip->chip_shift += 32 - 1;\n>   \t}\n>   \n> +\tif (chip->chip_shift - chip->page_shift > 16)\n> +\t\tchip->options |= NAND_ROW_ADDR_3;\n> +\n>   \tchip->badblockbits = 8;\n>   \tchip->erase = single_erase;\n>   \n> diff --git a/drivers/mtd/nand/nuc900_nand.c b/drivers/mtd/nand/nuc900_nand.c\n> index 7bb4d2e..af5b32c9 100644\n> --- a/drivers/mtd/nand/nuc900_nand.c\n> +++ b/drivers/mtd/nand/nuc900_nand.c\n> @@ -154,7 +154,7 @@ static void nuc900_nand_command_lp(struct mtd_info *mtd, unsigned int command,\n>   \t\tif (page_addr != -1) {\n>   \t\t\twrite_addr_reg(nand, page_addr);\n>   \n> -\t\t\tif (chip->chipsize > (128 << 20)) {\n> +\t\t\tif (chip->options & NAND_ROW_ADDR_3) {\n>   \t\t\t\twrite_addr_reg(nand, page_addr >> 8);\n>   \t\t\t\twrite_addr_reg(nand, page_addr >> 16 | ENDADDR);\n>   \t\t\t} else {\n> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h\n> index 2b05f42..749bb08 100644\n> --- a/include/linux/mtd/rawnand.h\n> +++ b/include/linux/mtd/rawnand.h\n> @@ -177,6 +177,9 @@ enum nand_ecc_algo {\n>    */\n>   #define NAND_NEED_SCRAMBLING\t0x00002000\n>   \n> +/* Device needs 3rd row address cycle */\n> +#define NAND_ROW_ADDR_3\t\t0x00004000\n> +\n>   /* Options valid for Samsung large page devices */\n>   #define NAND_SAMSUNG_LP_OPTIONS NAND_CACHEPRG\n>   \n\nRegards,\nWenyou Yang","headers":{"Return-Path":"<linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org; spf=none (mailfrom)\n\tsmtp.mailfrom=lists.infradead.org (client-ip=65.50.211.133;\n\thelo=bombadil.infradead.org;\n\tenvelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=lists.infradead.org\n\theader.i=@lists.infradead.org header.b=\"KStV8MUO\"; \n\tdkim-atps=neutral"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n\t[65.50.211.133])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xsQz53ZSHz9t1G\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 13 Sep 2017 12:46:25 +1000 (AEST)","from localhost ([127.0.0.1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux))\n\tid 1drxgo-000706-29; Wed, 13 Sep 2017 02:46:10 +0000","from esa2.microchip.iphmx.com ([68.232.149.84])\n\tby bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux))\n\tid 1drxgk-0006uS-1I; Wed, 13 Sep 2017 02:46:08 +0000","from smtpout.microchip.com (HELO email.microchip.com)\n\t([198.175.253.82])\n\tby esa2.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA;\n\t12 Sep 2017 19:45:44 -0700","from [10.160.137.68] (10.10.76.4) by chn-sv-exch06.mchp-main.com\n\t(10.10.76.107) with Microsoft SMTP Server id 14.3.352.0;\n\tTue, 12 Sep 2017 19:45:43 -0700"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type:\n\tContent-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive:\n\tList-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From:\n\tReferences:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner;\n\tbh=OM556gXwwpP9WqxxZxVKANVHTfAAS5JoOuJHIadYyLk=;\n\tb=KStV8MUO6qsXcj95Hca9jeSNg\n\tRfcJanW66C0eOvIKOuzqI/BlUcXTbBFOClKS39zQ7LEzRbHrg0HEmKY98wcgGKbITk7dd1dRvY/KY\n\td/nqGJ65iZ+TkxxinyqX22YxGVi2LzfaUFu/5fGj2SbxiVk5ZkkG/nJeDClCdCOPp2I1oNFI90KUU\n\tP0ubcytANH+PGUIeZwfeEg+BDMBAoCk8mhSWOsTsnSljnWBySXDgMH0yS+4o4TPhHnZjMh67pcIv0\n\tEoICsn0QMBr7uJvr9Bl0wTi7TVXSn7F//3n9DF0s1NPcDFD5QOkbDRni4CL5pwtxymkGDSvZQBnol\n\trzkAwWgsg==;","X-IronPort-AV":"E=Sophos;i=\"5.42,385,1500966000\"; d=\"scan'208\";a=\"6947125\"","Subject":"Re: [PATCH v2 1/2] mtd: nand: introduce NAND_ROW_ADDR_3 flag","To":"Masahiro Yamada <yamada.masahiro@socionext.com>,\n\t<linux-mtd@lists.infradead.org>","References":"<1505268351-31941-1-git-send-email-yamada.masahiro@socionext.com>\n\t<1505268351-31941-2-git-send-email-yamada.masahiro@socionext.com>","From":"\"Yang, Wenyou\" <Wenyou.Yang@Microchip.com>","Message-ID":"<b7bc2678-bb43-07e1-4661-1510d8518412@Microchip.com>","Date":"Wed, 13 Sep 2017 10:45:36 +0800","User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<1505268351-31941-2-git-send-email-yamada.masahiro@socionext.com>","Content-Language":"en-US","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20170912_194606_191063_27C7D1C9 ","X-CRM114-Status":"GOOD (  14.37  )","X-Spam-Score":"-2.6 (--)","X-Spam-Report":"SpamAssassin version 3.4.1 on bombadil.infradead.org summary:\n\tContent analysis details:   (-2.6 points)\n\tpts rule name              description\n\t---- ----------------------\n\t--------------------------------------------------\n\t-0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,\n\tlow trust [68.232.149.84 listed in list.dnswl.org]\n\t-0.0 SPF_PASS               SPF: sender matches SPF record\n\t-1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n\t[score: 0.0000]","X-BeenThere":"linux-mtd@lists.infradead.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"Linux MTD discussion mailing list <linux-mtd.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/linux-mtd/>","List-Post":"<mailto:linux-mtd@lists.infradead.org>","List-Help":"<mailto:linux-mtd-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=subscribe>","Cc":"Boris Brezillon <boris.brezillon@free-electrons.com>,\n\tRichard Weinberger <richard@nod.at>, Wan ZongShun <mcuos.com@gmail.com>, \n\tJosh Wu <rainyfeeling@outlook.com>, linux-kernel@vger.kernel.org,\n\tWenyou Yang <wenyou.yang@atmel.com>,\n\tMarek Vasut <marek.vasut@gmail.com>, \n\tCyrille Pitchen <cyrille.pitchen@wedev4u.fr>,\n\tBrian Norris <computersforpeace@gmail.com>,\n\tDavid Woodhouse <dwmw2@infradead.org>,\n\tlinux-arm-kernel@lists.infradead.org","Content-Transfer-Encoding":"7bit","Content-Type":"text/plain; charset=\"us-ascii\"; Format=\"flowed\"","Sender":"\"linux-mtd\" <linux-mtd-bounces@lists.infradead.org>","Errors-To":"linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]