From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E1CD1C25B10 for ; Mon, 13 May 2024 07:42:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aiXaEkJ2SXVccf3LXzkZXAl9OODSB319uHxRjUEzx+k=; b=xC6q1P1JbI8zVd WqdWQq/BypUiMHGhof7eimEnd8CMd9gPH1hiLNZapQxa7tgUY4Jbe3V/yf53M6PlVxAOg4Uv+T36N 8lVo2aMEBZVkmlr6PmaT97ghI7bC1+xOXpMBXYNp+rbfYs8CZLRTlP/mF+ZkWuANS6776JCrR4i9K eiwuqpBDPBMHA7shClIjWmuz6nxi6Wej6LoW7eYWeWz7QbLIFWdHdm5iEFZTCzCdfgauwLtHt8V/m fyt2WfYF31F042te2uLNVAus3NZ3Cw+DV81Xe9RcHBQ4wRKZLtewX5N9myw78gj89X4D4Y0ZML05x MenryRO3o8yjwVlTTHJg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s6QKG-0000000C3sV-0Cah; Mon, 13 May 2024 07:42:24 +0000 Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s6QKD-0000000C3ru-27WC for linux-mtd@lists.infradead.org; Mon, 13 May 2024 07:42:23 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id B7F10E0070; Mon, 13 May 2024 07:42:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1715586138; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+dDor7bdmkwOSRGCuBAJQQIoJD+BBzutL1t/QhzKUfc=; b=SN8EruZmgvDjmf7NTjlt1VZtsF2qArsga9lQiQ4GoheJnVL/opvgagI5SLWG5hctaITWTz 6FhamsD0/im3RZkspGxRzDS2MN+86F8AdP95DJQ5PWBBjPeaOzpkP8sI5rUgD3mHWGG2C+ N4My9jFvajhdy431RQuiZSzYlIAYHrng/SQi/vPWqBibyaqyVt48cbiApvotWsoha1ZuNh hBosGqHHHsFxZ4umOCRg6ulk92dvdmlSCz+v3ll6S8ny4ndx2XR9oK/zegiHfX5egksBDq JqprPEkEGoRY8Sh5pnPsMb3np28qLdAGnJek3wbSRT0T/dVgETTcRuDqYsVcxw== Date: Mon, 13 May 2024 09:42:17 +0200 From: Miquel Raynal To: Sascha Hauer Cc: Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/3] mtd: nand: mxc_nand: support software ECC Message-ID: <20240513094217.4c1a0fc2@xps-13> In-Reply-To: <20240508-mtd-nand-mxc-nand-exec-op-v2-3-6b7366b7831f@pengutronix.de> References: <20240508-mtd-nand-mxc-nand-exec-op-v2-0-6b7366b7831f@pengutronix.de> <20240508-mtd-nand-mxc-nand-exec-op-v2-3-6b7366b7831f@pengutronix.de> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240513_004221_854963_004FD09D X-CRM114-Status: GOOD ( 31.81 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgU2FzY2hhLAoKcy5oYXVlckBwZW5ndXRyb25peC5kZSB3cm90ZSBvbiBXZWQsIDA4IE1heSAy MDI0IDEzOjA4OjI5ICswMjAwOgoKPiBXaXRoIHRoZXNlIGNoYW5nZXMgdGhlIGRyaXZlciBjYW4g YmUgdXNlZCB3aXRoIHNvZnR3YXJlIEJDSCBFQ0Mgd2hpY2gKPiBpcyB1c2VmdWwgZm9yIE5BTkQg Y2hpcHMgdGhhdCByZXF1aXJlIGEgc3Ryb25nZXIgRUNDIHRoYW4gdGhlIGkuTVgKPiBoYXJkd2Fy ZSBzdXBwb3J0cy4KPiAKPiBUaGUgY29udHJvbGxlciBub3JtYWxseSBpbnRlcmxlYXZlcyB1c2Vy IGRhdGEgd2l0aCBPT0IgZGF0YSB3aGVuCj4gYWNjZXNzaW5nIHRoZSBOQU5EIGNoaXAuIFdpdGgg U29mdHdhcmUgQkNIIEVDQyB3ZSB3cml0ZSB0aGUgZGF0YQo+IHRvIHRoZSBOQU5EIGluIGEgd2F5 IHRoYXQgdGhlIHJhdyBkYXRhIG9uIHRoZSBOQU5EIGNoaXAgbWF0Y2hlcyB0aGUKPiB3YXkgdGhl IE5BTkQgbGF5ZXIgc2VlcyBpdC4gVGhpcyB3YXkgY29tbWFuZHMgbGlrZSBOQU5EX0NNRF9STkRP VVQKPiB3b3JrIGFzIGV4cGVjdGVkLgo+IAo+IFRoaXMgd2FzIHRlc3RlZCBvbiBpLk1YMjcgYnV0 IHNob3VsZCB3b3JrIG9uIHRoZSBvdGhlciBTb0NzIHN1cHBvcnRlZAo+IGJ5IHRoaXMgZHJpdmVy IGFzIHdlbGwuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1 dHJvbml4LmRlPgo+IC0tLQo+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9teGNfbmFuZC5jIHwgODQg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiAgMSBmaWxlIGNoYW5n ZWQsIDc1IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbXRkL25hbmQvcmF3L214Y19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9teGNf bmFuZC5jCj4gaW5kZXggMWU4YjQ1NTNlMDNiYS4uNzAwNGZkNTdjODBmNyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9teGNfbmFuZC5jCj4gKysrIGIvZHJpdmVycy9tdGQvbmFu ZC9yYXcvbXhjX25hbmQuYwo+IEBAIC0xNzgsNiArMTc4LDcgQEAgc3RydWN0IG14Y19uYW5kX2hv c3Qgewo+ICAJaW50CQkJdXNlZF9vb2JzaXplOwo+ICAJaW50CQkJYWN0aXZlX2NzOwo+ICAJdW5z aWduZWQgaW50CQllY2Nfc3RhdHNfdjE7Cj4gKwl1bnNpZ25lZCBpbnQJCWNvbHVtbjsKPiAgCj4g IAlzdHJ1Y3QgY29tcGxldGlvbglvcF9jb21wbGV0aW9uOwo+ICAKPiBAQCAtMTM5NywxMCArMTM5 OCwxMCBAQCBzdGF0aWMgaW50IG14Y25kX2F0dGFjaF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKmNo aXApCj4gIAljaGlwLT5lY2MuYnl0ZXMgPSBob3N0LT5kZXZ0eXBlX2RhdGEtPmVjY2J5dGVzOwo+ ICAJaG9zdC0+ZWNjc2l6ZSA9IGhvc3QtPmRldnR5cGVfZGF0YS0+ZWNjc2l6ZTsKPiAgCWNoaXAt PmVjYy5zaXplID0gNTEyOwo+IC0JbXRkX3NldF9vb2JsYXlvdXQobXRkLCBob3N0LT5kZXZ0eXBl X2RhdGEtPm9vYmxheW91dCk7Cj4gIAo+ICAJc3dpdGNoIChjaGlwLT5lY2MuZW5naW5lX3R5cGUp IHsKPiAgCWNhc2UgTkFORF9FQ0NfRU5HSU5FX1RZUEVfT05fSE9TVDoKPiArCQltdGRfc2V0X29v YmxheW91dChtdGQsIGhvc3QtPmRldnR5cGVfZGF0YS0+b29ibGF5b3V0KTsKPiAgCQljaGlwLT5l Y2MucmVhZF9wYWdlID0gbXhjX25hbmRfcmVhZF9wYWdlOwo+ICAJCWNoaXAtPmVjYy5yZWFkX3Bh Z2VfcmF3ID0gbXhjX25hbmRfcmVhZF9wYWdlX3JhdzsKPiAgCQljaGlwLT5lY2MucmVhZF9vb2Ig PSBteGNfbmFuZF9yZWFkX29vYjsKPiBAQCAtMTQ2NSw2ICsxNDY2LDU0IEBAIHN0YXRpYyBpbnQg bXhjbmRfc2V0dXBfaW50ZXJmYWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBjaGlwbnIs Cj4gIAlyZXR1cm4gaG9zdC0+ZGV2dHlwZV9kYXRhLT5zZXR1cF9pbnRlcmZhY2UoY2hpcCwgY2hp cG5yLCBjb25mKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgY29weV9wYWdlX3RvX3NyYW0oc3Ry dWN0IG10ZF9pbmZvICptdGQpCj4gK3sKPiArCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRf dG9fbmFuZChtdGQpOwo+ICsJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2dldF9j b250cm9sbGVyX2RhdGEodGhpcyk7Cj4gKwl2b2lkICpidWYgPSBob3N0LT5kYXRhX2J1ZjsKPiAr CXVuc2lnbmVkIGludCBuX3N1YnBhZ2VzID0gbXRkLT53cml0ZXNpemUgLyA1MTI7Cj4gKwlpbnQg b29iX3Blcl9zdWJwYWdlLCBpOwo+ICsKPiArCS8qIG10ZC0+d3JpdGVzaXplIGlzIG5vdCBzZXQg ZHVyaW5nIGlkZW50IHNjYW5uaW5nICovCj4gKwlpZiAoIW5fc3VicGFnZXMpCj4gKwkJbl9zdWJw YWdlcyA9IDE7Cj4gKwo+ICsJb29iX3Blcl9zdWJwYWdlID0gKG10ZC0+b29ic2l6ZSAvIG5fc3Vi cGFnZXMpICYgfjE7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5fc3VicGFnZXM7IGkrKykgewo+ ICsJCW1lbWNweTE2X3RvaW8oaG9zdC0+bWFpbl9hcmVhMCArIGkgKiA1MTIsIGJ1ZiwgNTEyKTsK PiArCQlidWYgKz0gNTEyOwo+ICsKPiArCQltZW1jcHkxNl90b2lvKGhvc3QtPnNwYXJlMCArIGkg KiBob3N0LT5kZXZ0eXBlX2RhdGEtPnNwYXJlX2xlbiwgYnVmLAo+ICsJCQkgICAgICBvb2JfcGVy X3N1YnBhZ2UpOwo+ICsJCWJ1ZiArPSBvb2JfcGVyX3N1YnBhZ2U7Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNvcHlfcGFnZV9mcm9tX3NyYW0oc3RydWN0IG10ZF9pbmZvICptdGQpCj4g K3sKPiArCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsJc3Ry dWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEodGhpcyk7 Cj4gKwl2b2lkICpidWYgPSBob3N0LT5kYXRhX2J1ZjsKPiArCXVuc2lnbmVkIGludCBuX3N1YnBh Z2VzID0gbXRkLT53cml0ZXNpemUgLyA1MTI7Cj4gKwlpbnQgb29iX3Blcl9zdWJwYWdlLCBpOwo+ ICsKPiArCS8qIG10ZC0+d3JpdGVzaXplIGlzIG5vdCBzZXQgZHVyaW5nIGlkZW50IHNjYW5uaW5n ICovCj4gKwlpZiAoIW5fc3VicGFnZXMpCj4gKwkJbl9zdWJwYWdlcyA9IDE7Cj4gKwo+ICsJb29i X3Blcl9zdWJwYWdlID0gKG10ZC0+b29ic2l6ZSAvIG5fc3VicGFnZXMpICYgfjE7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IG5fc3VicGFnZXM7IGkrKykgewo+ICsJCW1lbWNweTE2X2Zyb21pbyhi dWYsIGhvc3QtPm1haW5fYXJlYTAgKyBpICogNTEyLCA1MTIpOwo+ICsJCWJ1ZiArPSA1MTI7Cj4g Kwo+ICsJCW1lbWNweTE2X2Zyb21pbyhidWYsIGhvc3QtPnNwYXJlMCArIGkgKiBob3N0LT5kZXZ0 eXBlX2RhdGEtPnNwYXJlX2xlbiwKPiArCQkJCW9vYl9wZXJfc3VicGFnZSk7Cj4gKwkJYnVmICs9 IG9vYl9wZXJfc3VicGFnZTsKPiArCX0KPiArfQo+ICsKPiAgc3RhdGljIGludCBteGNuZF9leGVj X29wKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4gIAkJCSBjb25zdCBzdHJ1Y3QgbmFuZF9vcGVy YXRpb24gKm9wLAo+ICAJCQkgYm9vbCBjaGVja19vbmx5KQo+IEBAIC0xNDk2LDggKzE1NDUsMTEg QEAgc3RhdGljIGludCBteGNuZF9leGVjX29wKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4gIAkJ CSAqLwo+ICAJCQlicmVhazsKPiAgCQljYXNlIE5BTkRfT1BfQ01EX0lOU1RSOgo+IC0JCQlpZiAo aW5zdHItPmN0eC5jbWQub3Bjb2RlID09IE5BTkRfQ01EX1BBR0VQUk9HKQo+ICsJCQlpZiAoaW5z dHItPmN0eC5jbWQub3Bjb2RlID09IE5BTkRfQ01EX1BBR0VQUk9HKSB7Cj4gKwkJCQlpZiAoY2hp cC0+ZWNjLmVuZ2luZV90eXBlICE9IE5BTkRfRUNDX0VOR0lORV9UWVBFX09OX0hPU1QpCj4gKwkJ CQkJY29weV9wYWdlX3RvX3NyYW0obXRkKTsKPiAgCQkJCWhvc3QtPmRldnR5cGVfZGF0YS0+c2Vu ZF9wYWdlKG10ZCwgTkZDX0lOUFVUKTsKPiArCQkJfQoKU2FtZSBhcyBiZWZvcmU6IGRhdGEgbW92 ZXMgc2hvdWxkIG5vdCBoYXBwZW4gaGVyZS4KCj4gIAo+ICAJCQlob3N0LT5kZXZ0eXBlX2RhdGEt PnNlbmRfY21kKGhvc3QsIGluc3RyLT5jdHguY21kLm9wY29kZSwgdHJ1ZSk7Cj4gIAo+IEBAIC0x NTA2LDYgKzE1NTgsOCBAQCBzdGF0aWMgaW50IG14Y25kX2V4ZWNfb3Aoc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwKPiAgCQkJaWYgKGluc3RyLT5jdHguY21kLm9wY29kZSA9PSBOQU5EX0NNRF9TVEFU VVMpCj4gIAkJCQlzdGF0dXNyZXEgPSB0cnVlOwo+ICAKPiArCQkJaG9zdC0+Y29sdW1uID0gMDsK PiArCgpUaGlzIGlzIHJpc2t5IGJ1dCBtYXliZSB0aGlzIGlzIHRoZSB0cmljayB0byBnZXQgTkFO RF9DTURfUk5ET1VUCndvcmtpbmc/IElmIHllcyBtYXliZSBpdCBpcyB3b3J0aCBzZXBhcmF0aW5n IGZyb20gdGhpcyBwYXRjaHNldCwgaWYKcG9zc2libGUsIHdpdGggYSBjb21tZW50IGV4cGxhaW5p bmcgd2hhdCB0aGlzIGlzIGFsbCBhYm91dCAodGhlCmNvbnRyb2xsZXIncyBTUkFNIGJlaW5nIHNv bWUga2luZCBvZiAxOjEgbWFwcGluZyB3aXRoIHRoZSBOQU5EIFNSQU0sCnRodXMgd2UgbmVlZCB0 byB3cml0ZSB0aGUgZGF0YSBhdCB0aGUgY29ycmVjdCBvZmZzZXQgaW4gdGhlIGNvbnRyb2xsZXIK U1JBTSwgSSBndWVzcz8pLgoKUGxlYXNlIHdyaXRlIHRoZSBjb21tZW50IGFib3ZlIHdoZW4gZGVm aW5pbmcgdGhlIGNvbHVtbiBmaWVsZCwgYW5kCmFsc28sIGlmIG15IHVuZGVyc3RhbmRpbmcgaXMg Y29ycmVjdCwgY2FuIHdlIHJlbmFtZSBpdCB0byBzcmFtX2NvbHVtbgpvciBzb21ldGhpbmcgbGlr ZSB0aGF0PwoKPiAgCQkJYnJlYWs7Cj4gIAkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6Cj4gIAkJ CWZvciAoaiA9IDA7IGogPCBpbnN0ci0+Y3R4LmFkZHIubmFkZHJzOyBqKyspIHsKPiBAQCAtMTUx Nyw5ICsxNTcxLDE0IEBAIHN0YXRpYyBpbnQgbXhjbmRfZXhlY19vcChzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLAo+ICAJCQlidWZfd3JpdGUgPSBpbnN0ci0+Y3R4LmRhdGEuYnVmLm91dDsKPiAgCQkJ YnVmX2xlbiA9IGluc3RyLT5jdHguZGF0YS5sZW47Cj4gIAo+IC0JCQltZW1jcHkzMl90b2lvKGhv c3QtPm1haW5fYXJlYTAsIGJ1Zl93cml0ZSwgYnVmX2xlbik7Cj4gLQkJCWlmIChjaGlwLT5vb2Jf cG9pKQo+IC0JCQkJY29weV9zcGFyZShtdGQsIGZhbHNlLCBjaGlwLT5vb2JfcG9pKTsKPiArCQkJ aWYgKGNoaXAtPmVjYy5lbmdpbmVfdHlwZSA9PSBOQU5EX0VDQ19FTkdJTkVfVFlQRV9PTl9IT1NU KSB7Cj4gKwkJCQltZW1jcHkzMl90b2lvKGhvc3QtPm1haW5fYXJlYTAsIGJ1Zl93cml0ZSwgYnVm X2xlbik7Cj4gKwkJCQlpZiAoY2hpcC0+b29iX3BvaSkKPiArCQkJCQljb3B5X3NwYXJlKG10ZCwg ZmFsc2UsIGNoaXAtPm9vYl9wb2kpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJbWVtY3B5KGhvc3Qt PmRhdGFfYnVmICsgaG9zdC0+Y29sdW1uLCBidWZfd3JpdGUsIGJ1Zl9sZW4pOwo+ICsJCQkJaG9z dC0+Y29sdW1uICs9IGJ1Zl9sZW47Cj4gKwkJCX0KPiAgCj4gIAkJCWJyZWFrOwo+ICAJCWNhc2Ug TkFORF9PUF9EQVRBX0lOX0lOU1RSOgo+IEBAIC0xNTUyLDExICsxNjExLDE4IEBAIHN0YXRpYyBp bnQgbXhjbmRfZXhlY19vcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ICAKPiAgCQkJaG9zdC0+ ZGV2dHlwZV9kYXRhLT5yZWFkX3BhZ2UoY2hpcCk7Cj4gIAo+IC0JCQlpZiAoSVNfQUxJR05FRChi dWZfbGVuLCA0KSkgewo+IC0JCQkJbWVtY3B5MzJfZnJvbWlvKGJ1Zl9yZWFkLCBob3N0LT5tYWlu X2FyZWEwLCBidWZfbGVuKTsKPiArCQkJaWYgKGNoaXAtPmVjYy5lbmdpbmVfdHlwZSA9PSBOQU5E X0VDQ19FTkdJTkVfVFlQRV9PTl9IT1NUKSB7Cj4gKwkJCQlpZiAoSVNfQUxJR05FRChidWZfbGVu LCA0KSkgewo+ICsJCQkJCW1lbWNweTMyX2Zyb21pbyhidWZfcmVhZCwgaG9zdC0+bWFpbl9hcmVh MCwgYnVmX2xlbik7Cj4gKwkJCQl9IGVsc2Ugewo+ICsJCQkJCW1lbWNweTMyX2Zyb21pbyhob3N0 LT5kYXRhX2J1ZiwgaG9zdC0+bWFpbl9hcmVhMCwgbXRkLT53cml0ZXNpemUpOwo+ICsJCQkJCW1l bWNweShidWZfcmVhZCwgaG9zdC0+ZGF0YV9idWYsIGJ1Zl9sZW4pOwo+ICsJCQkJfQo+ICAJCQl9 IGVsc2Ugewo+IC0JCQkJbWVtY3B5MzJfZnJvbWlvKGhvc3QtPmRhdGFfYnVmLCBob3N0LT5tYWlu X2FyZWEwLCBtdGQtPndyaXRlc2l6ZSk7Cj4gLQkJCQltZW1jcHkoYnVmX3JlYWQsIGhvc3QtPmRh dGFfYnVmLCBidWZfbGVuKTsKPiArCQkJCWlmICghaG9zdC0+Y29sdW1uKQo+ICsJCQkJCWNvcHlf cGFnZV9mcm9tX3NyYW0obXRkKTsKPiArCQkJCW1lbWNweShidWZfcmVhZCwgaG9zdC0+ZGF0YV9i dWYgKyBob3N0LT5jb2x1bW4sIGJ1Zl9sZW4pOwo+ICsJCQkJaG9zdC0+Y29sdW1uICs9IGJ1Zl9s ZW47Cj4gIAkJCX0KPiAgCj4gIAkJCWJyZWFrOwo+IAoKClRoYW5rcywKTWlxdcOobAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1U RCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82060168DA for ; Mon, 13 May 2024 07:42:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.196 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715586142; cv=none; b=twAGTpReptwgJXWnUPV0kqgOMnFes4yb8WklK3evRN23SKm/DKI/U6Ne+TobjNVgCEm+6qwGpzhfJiOcqY2m3o0KdDUR6eRi7dTu95GmDob35pB8lqp3Vx6rYupPcK6pZDEEu+kXPXb8ARw6RUJOVH9Sqg1hsWRtBEsZ09epsdE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715586142; c=relaxed/simple; bh=WeoXoUQG4Spg2BNA3NuECdzYTo+AevDS5kWMpRMHe8c=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=bGF5gaGbXTD9SK5la4XMgrVTOuzCgjcHXjqEN8Ka24VUZ9E3faHFY9SEWtzj+eA2RJl23Pa3OL0zvgr02w6XGz3d2HBXKymkOlvs7NdFgUygJCYANBRYyeFGqF304/wZNQiQyFuV6C9qQ5iLPs6Ji66w+f6VEElM3Ocju/oZY90= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=SN8EruZm; arc=none smtp.client-ip=217.70.183.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="SN8EruZm" Received: by mail.gandi.net (Postfix) with ESMTPSA id B7F10E0070; Mon, 13 May 2024 07:42:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1715586138; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+dDor7bdmkwOSRGCuBAJQQIoJD+BBzutL1t/QhzKUfc=; b=SN8EruZmgvDjmf7NTjlt1VZtsF2qArsga9lQiQ4GoheJnVL/opvgagI5SLWG5hctaITWTz 6FhamsD0/im3RZkspGxRzDS2MN+86F8AdP95DJQ5PWBBjPeaOzpkP8sI5rUgD3mHWGG2C+ N4My9jFvajhdy431RQuiZSzYlIAYHrng/SQi/vPWqBibyaqyVt48cbiApvotWsoha1ZuNh hBosGqHHHsFxZ4umOCRg6ulk92dvdmlSCz+v3ll6S8ny4ndx2XR9oK/zegiHfX5egksBDq JqprPEkEGoRY8Sh5pnPsMb3np28qLdAGnJek3wbSRT0T/dVgETTcRuDqYsVcxw== Date: Mon, 13 May 2024 09:42:17 +0200 From: Miquel Raynal To: Sascha Hauer Cc: Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/3] mtd: nand: mxc_nand: support software ECC Message-ID: <20240513094217.4c1a0fc2@xps-13> In-Reply-To: <20240508-mtd-nand-mxc-nand-exec-op-v2-3-6b7366b7831f@pengutronix.de> References: <20240508-mtd-nand-mxc-nand-exec-op-v2-0-6b7366b7831f@pengutronix.de> <20240508-mtd-nand-mxc-nand-exec-op-v2-3-6b7366b7831f@pengutronix.de> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; x86_64-pc-linux-gnu) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-GND-Sasl: miquel.raynal@bootlin.com Hi Sascha, s.hauer@pengutronix.de wrote on Wed, 08 May 2024 13:08:29 +0200: > With these changes the driver can be used with software BCH ECC which > is useful for NAND chips that require a stronger ECC than the i.MX > hardware supports. >=20 > The controller normally interleaves user data with OOB data when > accessing the NAND chip. With Software BCH ECC we write the data > to the NAND in a way that the raw data on the NAND chip matches the > way the NAND layer sees it. This way commands like NAND_CMD_RNDOUT > work as expected. >=20 > This was tested on i.MX27 but should work on the other SoCs supported > by this driver as well. >=20 > Signed-off-by: Sascha Hauer > --- > drivers/mtd/nand/raw/mxc_nand.c | 84 +++++++++++++++++++++++++++++++++++= +----- > 1 file changed, 75 insertions(+), 9 deletions(-) >=20 > diff --git a/drivers/mtd/nand/raw/mxc_nand.c b/drivers/mtd/nand/raw/mxc_n= and.c > index 1e8b4553e03ba..7004fd57c80f7 100644 > --- a/drivers/mtd/nand/raw/mxc_nand.c > +++ b/drivers/mtd/nand/raw/mxc_nand.c > @@ -178,6 +178,7 @@ struct mxc_nand_host { > int used_oobsize; > int active_cs; > unsigned int ecc_stats_v1; > + unsigned int column; > =20 > struct completion op_completion; > =20 > @@ -1397,10 +1398,10 @@ static int mxcnd_attach_chip(struct nand_chip *ch= ip) > chip->ecc.bytes =3D host->devtype_data->eccbytes; > host->eccsize =3D host->devtype_data->eccsize; > chip->ecc.size =3D 512; > - mtd_set_ooblayout(mtd, host->devtype_data->ooblayout); > =20 > switch (chip->ecc.engine_type) { > case NAND_ECC_ENGINE_TYPE_ON_HOST: > + mtd_set_ooblayout(mtd, host->devtype_data->ooblayout); > chip->ecc.read_page =3D mxc_nand_read_page; > chip->ecc.read_page_raw =3D mxc_nand_read_page_raw; > chip->ecc.read_oob =3D mxc_nand_read_oob; > @@ -1465,6 +1466,54 @@ static int mxcnd_setup_interface(struct nand_chip = *chip, int chipnr, > return host->devtype_data->setup_interface(chip, chipnr, conf); > } > =20 > +static void copy_page_to_sram(struct mtd_info *mtd) > +{ > + struct nand_chip *this =3D mtd_to_nand(mtd); > + struct mxc_nand_host *host =3D nand_get_controller_data(this); > + void *buf =3D host->data_buf; > + unsigned int n_subpages =3D mtd->writesize / 512; > + int oob_per_subpage, i; > + > + /* mtd->writesize is not set during ident scanning */ > + if (!n_subpages) > + n_subpages =3D 1; > + > + oob_per_subpage =3D (mtd->oobsize / n_subpages) & ~1; > + > + for (i =3D 0; i < n_subpages; i++) { > + memcpy16_toio(host->main_area0 + i * 512, buf, 512); > + buf +=3D 512; > + > + memcpy16_toio(host->spare0 + i * host->devtype_data->spare_len, buf, > + oob_per_subpage); > + buf +=3D oob_per_subpage; > + } > +} > + > +static void copy_page_from_sram(struct mtd_info *mtd) > +{ > + struct nand_chip *this =3D mtd_to_nand(mtd); > + struct mxc_nand_host *host =3D nand_get_controller_data(this); > + void *buf =3D host->data_buf; > + unsigned int n_subpages =3D mtd->writesize / 512; > + int oob_per_subpage, i; > + > + /* mtd->writesize is not set during ident scanning */ > + if (!n_subpages) > + n_subpages =3D 1; > + > + oob_per_subpage =3D (mtd->oobsize / n_subpages) & ~1; > + > + for (i =3D 0; i < n_subpages; i++) { > + memcpy16_fromio(buf, host->main_area0 + i * 512, 512); > + buf +=3D 512; > + > + memcpy16_fromio(buf, host->spare0 + i * host->devtype_data->spare_len, > + oob_per_subpage); > + buf +=3D oob_per_subpage; > + } > +} > + > static int mxcnd_exec_op(struct nand_chip *chip, > const struct nand_operation *op, > bool check_only) > @@ -1496,8 +1545,11 @@ static int mxcnd_exec_op(struct nand_chip *chip, > */ > break; > case NAND_OP_CMD_INSTR: > - if (instr->ctx.cmd.opcode =3D=3D NAND_CMD_PAGEPROG) > + if (instr->ctx.cmd.opcode =3D=3D NAND_CMD_PAGEPROG) { > + if (chip->ecc.engine_type !=3D NAND_ECC_ENGINE_TYPE_ON_HOST) > + copy_page_to_sram(mtd); > host->devtype_data->send_page(mtd, NFC_INPUT); > + } Same as before: data moves should not happen here. > =20 > host->devtype_data->send_cmd(host, instr->ctx.cmd.opcode, true); > =20 > @@ -1506,6 +1558,8 @@ static int mxcnd_exec_op(struct nand_chip *chip, > if (instr->ctx.cmd.opcode =3D=3D NAND_CMD_STATUS) > statusreq =3D true; > =20 > + host->column =3D 0; > + This is risky but maybe this is the trick to get NAND_CMD_RNDOUT working? If yes maybe it is worth separating from this patchset, if possible, with a comment explaining what this is all about (the controller's SRAM being some kind of 1:1 mapping with the NAND SRAM, thus we need to write the data at the correct offset in the controller SRAM, I guess?). Please write the comment above when defining the column field, and also, if my understanding is correct, can we rename it to sram_column or something like that? > break; > case NAND_OP_ADDR_INSTR: > for (j =3D 0; j < instr->ctx.addr.naddrs; j++) { > @@ -1517,9 +1571,14 @@ static int mxcnd_exec_op(struct nand_chip *chip, > buf_write =3D instr->ctx.data.buf.out; > buf_len =3D instr->ctx.data.len; > =20 > - memcpy32_toio(host->main_area0, buf_write, buf_len); > - if (chip->oob_poi) > - copy_spare(mtd, false, chip->oob_poi); > + if (chip->ecc.engine_type =3D=3D NAND_ECC_ENGINE_TYPE_ON_HOST) { > + memcpy32_toio(host->main_area0, buf_write, buf_len); > + if (chip->oob_poi) > + copy_spare(mtd, false, chip->oob_poi); > + } else { > + memcpy(host->data_buf + host->column, buf_write, buf_len); > + host->column +=3D buf_len; > + } > =20 > break; > case NAND_OP_DATA_IN_INSTR: > @@ -1552,11 +1611,18 @@ static int mxcnd_exec_op(struct nand_chip *chip, > =20 > host->devtype_data->read_page(chip); > =20 > - if (IS_ALIGNED(buf_len, 4)) { > - memcpy32_fromio(buf_read, host->main_area0, buf_len); > + if (chip->ecc.engine_type =3D=3D NAND_ECC_ENGINE_TYPE_ON_HOST) { > + if (IS_ALIGNED(buf_len, 4)) { > + memcpy32_fromio(buf_read, host->main_area0, buf_len); > + } else { > + memcpy32_fromio(host->data_buf, host->main_area0, mtd->writesize); > + memcpy(buf_read, host->data_buf, buf_len); > + } > } else { > - memcpy32_fromio(host->data_buf, host->main_area0, mtd->writesize); > - memcpy(buf_read, host->data_buf, buf_len); > + if (!host->column) > + copy_page_from_sram(mtd); > + memcpy(buf_read, host->data_buf + host->column, buf_len); > + host->column +=3D buf_len; > } > =20 > break; >=20 Thanks, Miqu=C3=A8l