From patchwork Wed Apr 26 07:36:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 8663 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp69311vqo; Wed, 26 Apr 2023 00:46:15 -0700 (PDT) X-Google-Smtp-Source: AKy350ZaUG3kCpPY6LFbFHsLipB8zGdleZ/Oxwqc0bQfSB4u7qVeobF2NXEn/ejUOlohz7bNRRwh X-Received: by 2002:a17:90b:1103:b0:23f:1165:b49f with SMTP id gi3-20020a17090b110300b0023f1165b49fmr18321218pjb.38.1682495175070; Wed, 26 Apr 2023 00:46:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682495175; cv=none; d=google.com; s=arc-20160816; b=DDyZG5B2FdTlZznc2dVFjpVU60LW5DXQ5iZnYOjlvAl86Z5awPbsnyluB9gu6DUxC0 raEDsw74vOnTxtx/iv3f3xM7kTSttpYvDnT75bmIVWXeATHH4HTrHmk7J/ept5m6hnf5 6bwtGOGGhf62U52wVlJiDTvh6Qak8i/nXRcNfCk/5iXyosZsUxWCmMFUFUeMtW9NDhF5 PS6UYMoGSSs9JunFFavZC4c+GdpSZ2YFgB0fBDCApExsGBSqVefL2+tRXmvuUyNMscBt nrn8VUmeys//jjUrvzyg3V+1LYSwqLNC+qluyIKtsbkTz1XYb5HRvLXQ26u/HCP94BEW q89A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=kH/83HIe7gsu4U9b3IuFMWDR2wI8ee/0EC6PkeDFzmU=; b=dCHQrm6c1T+TgI99+XBBtWx0fFQiJoyKfjZnRS1PorYPuaxfYOCjPe2CjsgGd4xtnR nYuyoZ7hc/0BDhj25WX0XfEqdnIT+EYDCz+BFn1p+gEziwTArJqU8pqqgJKWqGLRCn+R ACfTatRWa/amZZNi5r4EzO/dtzWGfS6gq6hsdyRugHxejT6Ru3P4LdUAh083WQ+x7aPQ WieiiHBE3fSfbzIhG/9AT4h8598XOFpUY8SZuB+/XtjqUSJTxsWXAUr59tczdINsEZYp K1JY2jv1t1Whj/hiOoOl5Ng7jwHE+ChYUA4r4DX8/xhv1BJfXWL8HuiNp3BRNx0UIk+J dENA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=SUngLhDq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t12-20020a17090a3e4c00b00247a0948f52si15451661pjm.58.2023.04.26.00.46.01; Wed, 26 Apr 2023 00:46:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=SUngLhDq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239720AbjDZHlO (ORCPT + 99 others); Wed, 26 Apr 2023 03:41:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43086 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239449AbjDZHlM (ORCPT ); Wed, 26 Apr 2023 03:41:12 -0400 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 786DF30F1 for ; Wed, 26 Apr 2023 00:41:10 -0700 (PDT) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id D3ADB5FD6E; Wed, 26 Apr 2023 10:41:08 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1682494868; bh=kH/83HIe7gsu4U9b3IuFMWDR2wI8ee/0EC6PkeDFzmU=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; b=SUngLhDqkuszemhCr2x9A+KNk8qzjMksyz4wnTJcvasJ0eJyXTyERFugEJOKXvECM cpBJEZ4mvjO5vk9A41bVxBD9sDPaDBeiR9TY4xDFUQp5jkdTiKY07+wopi/Xh+v3AS EAoCWRZEL09NC36XGx7DQjq7/uPdgfUqzELyX/pz+68nvONqgBthCDn2+Ko0u42QhP 9NLfUHCW17wFGaZ2fnIjeA0DcyUAmP1iKttZah9f2pvtsx+j7I1gNdVzNtVH/kw1sS fEF7Wml4jSk1JvOVaxjoJ4YkKu1GEhS9dRt3KBZUui51kaawg5JfnhBYUU+9MqtoF4 9cAdd3hDDyCaA== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Wed, 26 Apr 2023 10:41:07 +0300 (MSK) From: Arseniy Krasnov To: Liang Yang , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Jianxin Pan , Yixun Lan CC: , , Arseniy Krasnov , , , , Subject: [PATCH v2 0/5] refactoring and fix for Meson NAND Date: Wed, 26 Apr 2023 10:36:26 +0300 Message-ID: <20230426073632.3905682-1-AVKrasnov@sberdevices.ru> X-Mailer: git-send-email 2.35.0 MIME-Version: 1.0 X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH02.sberdevices.ru (172.16.1.5) To S-MS-EXCH01.sberdevices.ru (172.16.1.4) X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/04/26 04:45:00 #21166225 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764224060405343794?= X-GMAIL-MSGID: =?utf-8?q?1764224060405343794?= Hello, this patchset does several things: 1) It fixes unstable behaviour of Meson driver, for example random ECC errors during reads. It is done by changing command sequence to access NAND controller. Source of this update is old vendor's driver. 2) It changes OOB layout by moving it out of ECC area. Current OOB data is 4 bytes (2 x 2 user bytes) under ECC engine. Here is how OOB looks in the current implementation: [ 2B user bytes ][ 14B ECC codes ] [ 2B user bytes ][ 14B ECC codes ] [ 16B unused area, not protected by ECC ] [ 16B unused area, not protected by ECC ] All 4 user bytes are protected by ECC. This patch changes OOB layout in this way: [ 2B unused area ][ 14B ECC codes ] [ 2B unused area ][ 14B ECC codes ] [ 16B OOB area, not protected by ECC ] [ 16B OOB area, not protected by ECC ] Now OOB is 32 bytes instead of 4 bytes and not protected by ECC. Origin of this layout comes from problem with JFFS2. It uses OOB for cleanmarkers. Each cleanmarker is 4 bytes and written by JFFS2 driver. We have two ways to write this data to OOB (e.g. user bytes): 1) ECC mode. In this case it will be ECC covered user bytes, e.g. writing this bytes will update ECC codes. Problem fires, when JFFS2 tries to write this page later - this write makes controller to update ECC codes again, but it is impossible to do it correctly, because we can't update bits from 0 to 1 (only from 1 to 0). 2) Raw mode. In this case ECC codes won't be updated. But later, it will be impossible to read this page in ECC mode, because we have some user bytes, but ECC codes are missed. So let's move OOB out of ECC area. In this case we can read/write OOB separately in raw mode and at the same time work with data in ECC mode. JFFS2 is happy now. User bytes are untouched - all of them are ignored during non-OOB access. Also this patch changes size of OOB data during read. Now whole OOB is read (including unused user bytes, ECC codes and OOB data itself). I've tested this with mount/unmount/read/write cases for JFFS2 and nanddump/nandwrite utlities on AXG family (A113X SoC). 3) Renames device tree node's name for chip selection from "reg" to "cs". See commit message. 4) Checks buffer length on accesses to NAND controller. 5) Removes useless bitwise OR with zeroes. Link to v1: https://lore.kernel.org/linux-mtd/20230412061700.1492474-1-AVKrasnov@sberdevices.ru/ Arseniy Krasnov (5): mtd: rawnand: meson: fix NAND access for read/write mtd: rawnand: meson: move OOB to non-protected ECC area mtd: rawnand: meson: check buffer length mtd: rawnand: meson: remove unneeded bitwise OR with zeroes mtd: rawnand: meson: rename node for chip select drivers/mtd/nand/raw/meson_nand.c | 406 +++++++++++++++++++++++++----- 1 file changed, 347 insertions(+), 59 deletions(-)