From patchwork Mon Sep 15 14:08:03 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Karl Beldan X-Patchwork-Id: 279 Return-Path: X-Original-To: patchwork@ozlabs.org Delivered-To: patchwork@ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 35952DE356 for ; Tue, 16 Sep 2008 00:08:33 +1000 (EST) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.68 #1 (Red Hat Linux)) id 1KfEkR-0002mi-2m; Mon, 15 Sep 2008 14:08:15 +0000 Received: from rn-out-0910.google.com ([64.233.170.190]) by bombadil.infradead.org with esmtp (Exim 4.68 #1 (Red Hat Linux)) id 1KfEkO-0002ee-Tk for linux-mtd@lists.infradead.org; Mon, 15 Sep 2008 14:08:13 +0000 Received: by rn-out-0910.google.com with SMTP id m7so1453040rnd.3 for ; Mon, 15 Sep 2008 07:08:12 -0700 (PDT) Received: by 10.86.68.1 with SMTP id q1mr6022966fga.2.1221487691676; Mon, 15 Sep 2008 07:08:11 -0700 (PDT) Received: from ?192.168.2.205? ( [82.225.11.200]) by mx.google.com with ESMTPS id 3sm15019978fge.3.2008.09.15.07.08.03 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 15 Sep 2008 07:08:04 -0700 (PDT) Message-ID: <48CE6C43.8050500@gmail.com> Date: Mon, 15 Sep 2008 16:08:03 +0200 From: Karl Beldan User-Agent: Thunderbird 2.0.0.9 (X11/20071031) MIME-Version: 1.0 To: linux-mtd@lists.infradead.org Subject: Re: [PATCH] [MTD] [NAND] nand_base.c: reset chip first References: In-Reply-To: X-Spam-Score: 0.0 (/) Cc: David.Woodhouse@intel.com X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.9 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+patchwork=ozlabs.org@lists.infradead.org Some chips require a RESET after power-up (e.g. Micron MT29FxGxxxxx). The first command sent is NAND_CMD_READID. Issue a NAND_CMD_RESET in nand_scan_ident before reading the device id. Tested with an MT29F4G08AAC. Signed-off-by: Karl Beldan diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index d1129ba..2cfac9b 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -2318,6 +2318,12 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, /* Select the device */ chip->select_chip(mtd, 0); + /* + * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx) + * after power-up + */ + chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1); + /* Send the command for reading device ID */ chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1); @@ -2488,6 +2494,8 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips) /* Check for a chip array */ for (i = 1; i < maxchips; i++) { chip->select_chip(mtd, i); + /* See comment in nand_get_flash_type for reset */ + chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1); /* Send the command for reading device ID */ chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1); /* Read manufacturer and device IDs */