Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp336964imm; Sat, 22 Sep 2018 01:12:20 -0700 (PDT) X-Google-Smtp-Source: ACcGV63cZmJy+CTRTFMYGTuA/yz91J9MO2QRD89cpe8EErL757pnKKfKDSkaoXI6OHzUIuULo1Xg X-Received: by 2002:a63:844:: with SMTP id 65-v6mr1398221pgi.144.1537603940655; Sat, 22 Sep 2018 01:12:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537603940; cv=none; d=google.com; s=arc-20160816; b=sKy/5M5E+PctxNxVKr0sGe6uRvcNvS4mjztQpKXi1F8J3aGmWvVVCEbVvZEM8lOcZ1 460m0kckdMwqCQ/b3QN1ivjm+a2PWyYZeHWijC9dPY0KnNCRuaIvGRQXj7hsxo7c5mcU TcFq2n1jW/ZgSR2SU6NLf6RnOKGXMSbXVLfZXOpTkqMTxrGiBjmtLc8XvrKFB5U4dD7h hfzjV9Bpxw6DvE+b/3isZX9YCOY05ywXxgVXXN1RL6r5M+Ab1rgguTxSzwqsi71F5nSh arQSlYDn6xlBDGFcUBbxGrGA7StEv68K5iCfl5+Oy4opTCWFthUwvFq3HwcKLQ3W1nJX rqXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date; bh=HANPPBo40EYkLQ5xhQNWfmrC+AFak1cd5UuZhS2IChA=; b=Ti+X0SP0hOkhimHywJjgBa4qCWAWChuIK11qRZt0NrnaKReuk02GxhZpIPqEOCKR4y +N8GMPHEUF+xhDOFTTh1KL1KnSRs5tqQrh7e/FOYlxsQLCglZ35rWyBu+4VsB3iR2gmW nZzSJ5iCjdaP9l0EtuJvwh+Y0Fsqv1ViRfqa+qWjkQOdkqB6f2l7hqMGyYAXy10mfUJc JNwGJfVEq9hmsphFFU6b0rTK6vDHu7VS5JBIbe1bwOvsD5znRhre/lRBsZDwOR4vUSHA O1uySXh3fQrjSXhyxrJO/iXVcndro3VW/yMKxcME1zy7tF76ewFO4Xv6G8uPdD5Ta8HS TLDA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r16-v6si28964553pgg.254.2018.09.22.01.12.05; Sat, 22 Sep 2018 01:12:20 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727171AbeIVOEA (ORCPT + 99 others); Sat, 22 Sep 2018 10:04:00 -0400 Received: from mail.bootlin.com ([62.4.15.54]:57423 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725837AbeIVOEA (ORCPT ); Sat, 22 Sep 2018 10:04:00 -0400 Received: by mail.bootlin.com (Postfix, from userid 110) id DA82B20795; Sat, 22 Sep 2018 10:11:16 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT shortcircuit=ham autolearn=disabled version=3.4.0 Received: from bbrezillon (unknown [91.160.177.164]) by mail.bootlin.com (Postfix) with ESMTPSA id 8CED920726; Sat, 22 Sep 2018 10:11:16 +0200 (CEST) Date: Sat, 22 Sep 2018 10:11:16 +0200 From: Boris Brezillon To: Miquel Raynal Cc: Masahiro Yamada , Dinh Nguyen , Rob Herring , linux-mtd , Mark Rutland , DTML , Richard Weinberger , Linux Kernel Mailing List , Marek Vasut , Brian Norris , David Woodhouse Subject: Re: [PATCH] mtd: rawnand: denali: add DT property to specify skipped bytes in OOB Message-ID: <20180922101116.7c9b4767@bbrezillon> In-Reply-To: <20180922094111.1c2969e8@xps13> References: <1536317783-4942-1-git-send-email-yamada.masahiro@socionext.com> <20180907160822.319047c8@bbrezillon> <20180907165348.3e0027ee@bbrezillon> <20180922094111.1c2969e8@xps13> X-Mailer: Claws Mail 3.15.0-dirty (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 22 Sep 2018 09:41:11 +0200 Miquel Raynal wrote: > Hi Masahiro, > > Masahiro Yamada wrote on Sat, 8 Sep > 2018 01:10:25 +0900: > > > Hi Boris, > > > > 2018-09-07 23:53 GMT+09:00 Boris Brezillon : > > > On Fri, 7 Sep 2018 23:42:53 +0900 > > > Masahiro Yamada wrote: > > > > > >> Hi Boris, > > >> > > >> 2018-09-07 23:08 GMT+09:00 Boris Brezillon : > > >> > Hi Masahiro, > > >> > > > >> > On Fri, 7 Sep 2018 19:56:23 +0900 > > >> > Masahiro Yamada wrote: > > >> > > > >> >> NAND devices need additional data area (OOB) for error correction, > > >> >> but it is also used for Bad Block Marker (BBM). In many cases, the > > >> >> first byte in OOB is used for BBM, but the location actually depends > > >> >> on chip vendors. The NAND controller should preserve the precious > > >> >> BBM to keep track of bad blocks. > > >> >> > > >> >> In Denali IP, the SPARE_AREA_SKIP_BYTES register is used to specify > > >> >> the number of bytes to skip from the start of OOB. The ECC engine > > >> >> will automatically skip the specified number of bytes when it gets > > >> >> access to OOB area. > > >> >> > > >> >> The same value for SPARE_AREA_SKIP_BYTES should be used between > > >> >> firmware and the operating system if you intend to use the NAND > > >> >> device across the control hand-off. > > >> >> > > >> >> In fact, the current denali.c code expects firmware to have already > > >> >> set the SPARE_AREA_SKIP_BYTES register, then reads the value out. > > >> >> > > >> >> If no firmware (or bootloader) has initialized the controller, the > > >> >> register value is zero, which is the default after power-on-reset. > > >> >> > > >> >> In other words, the Linux driver cannot initialize the controller > > >> >> by itself. You cannot support the reset control either because > > >> >> resetting the controller will get register values lost. > > >> >> > > >> >> This commit adds a way to specify it via DT. If the property > > >> >> "denali,oob-skip-bytes" exists, the value will be set to the register. > > >> > > > >> > Hm, do we really need to make this config customizable? I mean, either > > >> > you have a large-page NAND (page > 512 bytes) and the 2 first bytes > > >> > must be reserved for the BBM or you have a small-page NAND and the BBM > > >> > is at position 4 and 5. Are you sure people configure that differently? > > >> > Don't you always have SPARE_AREA_SKIP_BYTES set to 6 or 2? > > >> > > >> > > >> As I said in the patch description, > > >> I need to use the same SPARE_AREA_SKIP_BYTES value > > >> across firmware, boot-loader, Linux, and whatever. > > >> > > >> I want to set the value to 8 for my platform > > >> because the on-chip boot ROM expects 8. > > >> I cannot change it since the boot ROM is hard-wired. > > >> > > >> > > >> The boot ROM skips 8 bytes in OOB > > >> when it loads images from the on-board NAND device. > > >> > > >> So, when I update the image from U-Boot or Linux, > > >> I need to make sure to set the register to 8. > > >> > > >> If I update the image with a different value, > > >> the Boot ROM fails to boot. > > >> > > >> > > >> > > >> When the system has booted from NAND, > > >> the register is already set to 8. It works. > > >> > > >> However, when the system has booted from eMMC, > > >> the register is not initialized by anyone. > > >> I am searching for a way to set the register to 8 > > >> in this case. Maybe there's a solution which does not involve attaching a per-compat value or adding a DT prop. If the FW/bootloader has not initialized this register the value is 0, right? Why not testing the value and assigning it to the default (8) if it's not been initialized by the bootloader. That shouldn't break existing platforms since I don't think 0 is a valid value anyway. denali->oob_skip_bytes = ioread32(denali->reg + SPARE_AREA_SKIP_BYTES); if (!denali->oob_skip_bytes) { denali->oob_skip_bytes = DEFAULT_OOB_SKIP_BYTES; iowrite32(denali->oob_skip_bytes, denali->reg + SPARE_AREA_SKIP_BYTES); }