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 CF641C3ABC9 for ; Fri, 16 May 2025 14:58:23 +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:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=11VOkChwQX25WDkC2+Bzd0TJB8T2FMyGeBIS5b2kMOU=; b=sUbN+xWEGu5VdQ scPVfwXeYkFdgNWvjbxd8iTULRkNt6+8KlLuigH2M8neBwQi85lskqybdXrsFJDWav8jCYH5NxR3A UZponGnzHB6ymjUEaLkRrJX7BRBfY8uAHBmEbU3f8ohoHExsjibn20UR5vW8cfi6Ao5QAXabgz836 xRnsCXw5mKHk27hjHs6bR/XB6VikT5jnYLWt2z2HYgen7thKcHYXbmBU60JZd7m96F9PEeNX5amwV K9wQAeFXJHRGSRiI4fxaw85L6iowljJPT5TihQxjB6NQXBK1LBtkItol3gOO8M9RIlfVux3qaRvDQ NH3vIdxm+hcluZQYG8og==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uFwVx-00000003keC-43hd; Fri, 16 May 2025 14:58:21 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uFw6l-00000003fry-0y0w for linux-mtd@lists.infradead.org; Fri, 16 May 2025 14:32:20 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id C03B843B63; Fri, 16 May 2025 14:32:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1747405937; 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=Cx+R6Ss+hRUkdPKaV+SmJaLvjR4vIHIih0chKUPxnCs=; b=oK4UAnTZbf3QFQSp7nPHE1kshQcN+92jeNk5DmLXcz3ZnCf5oD4mLLn+nn1FVl5tQ4FqQ8 SKzN53hHN7Grvbf3dYNhr/my9mH75FZ/nMpxklZJYIU5D6/DS31ZVgY5EYg44BkH8yZ2mG hqJYqe8ALXiw2L/HeFt2N/wzwO/bJ5XesgIE40pJxVUYralBRd5CxfUSlLtAfBxGSufVAN n+hiavGZsyv2oe496seLHTh70/TMfYXCcKgNSktZbhZVASDUinctI8WGxftoCgE4/PVYuV YPunZJJEpzwevwEq2daR1DCInvI7TQAqHnBWSBg7YtW/3sfZ3LcfZuHJkQnMww== From: Miquel Raynal To: =?utf-8?Q?=C3=81lvaro_Fern=C3=A1ndez?= Rojas Cc: linux-mtd@lists.infradead.org, dregan@broadcom.com, bcm-kernel-feedback-list@broadcom.com, florian.fainelli@broadcom.com, rafal@milecki.pl, computersforpeace@gmail.com, kamal.dasu@broadcom.com, dan.beygelman@broadcom.com, william.zhang@broadcom.com, frieder.schrempf@kontron.de, linux-kernel@vger.kernel.org, vigneshr@ti.com, richard@nod.at, bbrezillon@kernel.org, kdasu.kdev@gmail.com, jaimeliao.tw@gmail.com, kilobyte@angband.pl, jonas.gorski@gmail.com, dgcbueu@gmail.com Subject: Re: [PATCH v4] mtd: rawnand: brcmnand: legacy exec_op implementation In-Reply-To: <20250515050759.1016697-1-noltari@gmail.com> (=?utf-8?Q?=22?= =?utf-8?Q?=C3=81lvaro_Fern=C3=A1ndez?= Rojas"'s message of "Thu, 15 May 2025 07:07:59 +0200") References: <20250515050759.1016697-1-noltari@gmail.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Fri, 16 May 2025 16:32:16 +0200 Message-ID: <87o6vsd3tb.fsf@bootlin.com> MIME-Version: 1.0 X-GND-State: clean X-GND-Score: 0 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdefuddvleelucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecunecujfgurhephffvvefujghffgffkfggtgfgsehtqhertddtreejnecuhfhrohhmpefoihhquhgvlhcutfgrhihnrghluceomhhiqhhuvghlrdhrrgihnhgrlhessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepueeijeduvefgkeeuveffgeejleegledtvdduveeftdetfeejvdfffedvgfduffeknecuffhomhgrihhnpegsuhhfrdhinhenucfkphepledtrdekledrudeifedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeltddrkeelrdduieefrdduvdejpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopedvtddprhgtphhtthhopehnohhlthgrrhhisehgmhgrihhlrdgtohhmpdhrtghpthhtoheplhhinhhugidqmhhtugeslhhishhtshdrihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopegurhgvghgrnhessghrohgruggtohhmrdgtohhmpdhrtghpthhtohepsggtmhdqkhgvrhhnvghlqdhfvggvuggsrggtkhdqlhhishhtsegsrhhorggutghomhdrtghomhdprhgtphhtthhopehflhhorhhirghnrdhfrghin hgvlhhlihessghrohgruggtohhmrdgtohhmpdhrtghpthhtoheprhgrfhgrlhesmhhilhgvtghkihdrphhlpdhrtghpthhtoheptghomhhpuhhtvghrshhfohhrphgvrggtvgesghhmrghilhdrtghomhdprhgtphhtthhopehkrghmrghlrdgurghsuhessghrohgruggtohhmrdgtohhm X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250516_073219_404131_AA6ED16C X-CRM114-Status: GOOD ( 26.09 ) 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 SGVsbG8gQWx2YXJvLAoKT24gMTUvMDUvMjAyNSBhdCAwNzowNzo1OSArMDIsIMOBbHZhcm8gRmVy bsOhbmRleiBSb2phcyA8bm9sdGFyaUBnbWFpbC5jb20+IHdyb3RlOgoKPiBDb21taXQgM2M4MjYw Y2U3NjYzICgibXRkOiByYXduYW5kOiBicmNtbmFuZDogZXhlY19vcCBpbXBsZW1lbnRhdGlvbiIp Cj4gcmVtb3ZlZCBsZWdhY3kgaW50ZXJmYWNlIGZ1bmN0aW9ucywgYnJlYWtpbmcgPCB2NS4wIGNv bnRyb2xsZXJzIHN1cHBvcnQuCj4gSW4gb3JkZXIgdG8gZml4IG9sZGVyIGNvbnRyb2xsZXJzIHdl IG5lZWQgdG8gYWRkIGFuIGFsdGVybmF0aXZlIGV4ZWNfb3AKPiBpbXBsZW1lbnRhdGlvbiB3aGlj aCBkb2Vzbid0IHJlbHkgb24gbG93IGxldmVsIHJlZ2lzdGVycy4KPgo+IEZpeGVzOiAzYzgyNjBj ZTc2NjMgKCJtdGQ6IHJhd25hbmQ6IGJyY21uYW5kOiBleGVjX29wIGltcGxlbWVudGF0aW9uIikK PiBTaWduZWQtb2ZmLWJ5OiDDgWx2YXJvIEZlcm7DoW5kZXogUm9qYXMgPG5vbHRhcmlAZ21haWwu Y29tPgoKU2luY2UgeW91IGhhdmUgYSBwcmVjaXNlIGxpc3Qgb2Ygd2hhdCBpcyBzdXBwb3J0ZWQg YW5kIHdoYXQncyBub3QsIEknZApoYXZlIGV4cGVjdGVkIHRoZSByZXN0IG9mIHRoZSBiZWhhdmlv ciB0byBiZSBpZGVudGljYWwuIEFyZSB0aGVzZQpjb250cm9sbGVycyBzbyBkaWZmZXJlbnQgaW4g aG93IHRvIHByb2dyYW0gdGhlbT8gQ2FuJ3Qgd2UgdXNlIHRoZQpleGlzdGluZyBleGVjX29wKCkg aW1wbGVtZW50YXRpb24gd2l0aG91dCBzb21lIG9mIHRoZSBvcGNvZGVzPwoKCj4gKy8qIE5hdGl2 ZSBjb21tYW5kIGNvbnZlcnNpb24gKi8KClNob3VsZCBtZW50aW9uICJsZWdhY3kiIHNvbWV3aGVy ZSBJIGd1ZXNzLCBhbmQgZXZlbiB3aGF0IGxlZ2FjeSBtZWFucyBpbgp0aGlzIGNvbnRleHQsIHdo aWNoIGlzIHZlcnNpb24oY29udHJvbGxlcikgPCBYWFguCgo+ICtzdGF0aWMgY29uc3QgdTggbmF0 aXZlX2NtZF9jb252W10gPSB7Cj4gKwlbTkFORF9DTURfUkVBRDBdCT0gQ01EX05PVF9TVVBQT1JU RUQsCj4gKwlbTkFORF9DTURfUkVBRDFdCT0gQ01EX05PVF9TVVBQT1JURUQsCj4gKwlbTkFORF9D TURfUk5ET1VUXQk9IENNRF9QQVJBTUVURVJfQ0hBTkdFX0NPTCwKPiArCVtOQU5EX0NNRF9QQUdF UFJPR10JPSBDTURfTk9UX1NVUFBPUlRFRCwKPiArCVtOQU5EX0NNRF9SRUFET09CXQk9IENNRF9O T1RfU1VQUE9SVEVELAo+ICsJW05BTkRfQ01EX0VSQVNFMV0JPSBDTURfQkxPQ0tfRVJBU0UsCj4g KwlbTkFORF9DTURfU1RBVFVTXQk9IENNRF9OT1RfU1VQUE9SVEVELAo+ICsJW05BTkRfQ01EX1NF UUlOXQk9IENNRF9OT1RfU1VQUE9SVEVELAo+ICsJW05BTkRfQ01EX1JORElOXQk9IENNRF9OT1Rf U1VQUE9SVEVELAo+ICsJW05BTkRfQ01EX1JFQURJRF0JPSBDTURfREVWSUNFX0lEX1JFQUQsCj4g KwlbTkFORF9DTURfRVJBU0UyXQk9IENNRF9OVUxMLAo+ICsJW05BTkRfQ01EX1BBUkFNXQk9IENN RF9QQVJBTUVURVJfUkVBRCwKPiArCVtOQU5EX0NNRF9HRVRfRkVBVFVSRVNdCT0gQ01EX05PVF9T VVBQT1JURUQsCj4gKwlbTkFORF9DTURfU0VUX0ZFQVRVUkVTXQk9IENNRF9OT1RfU1VQUE9SVEVE LAo+ICsJW05BTkRfQ01EX1JFU0VUXQk9IENNRF9OT1RfU1VQUE9SVEVELAo+ICsJW05BTkRfQ01E X1JFQURTVEFSVF0JPSBDTURfTk9UX1NVUFBPUlRFRCwKPiArCVtOQU5EX0NNRF9SRUFEQ0FDSEVT RVFdCT0gQ01EX05PVF9TVVBQT1JURUQsCj4gKwlbTkFORF9DTURfUkVBRENBQ0hFRU5EXQk9IENN RF9OT1RfU1VQUE9SVEVELAo+ICsJW05BTkRfQ01EX1JORE9VVFNUQVJUXQk9IENNRF9OVUxMLAo+ ICsJW05BTkRfQ01EX0NBQ0hFRFBST0ddCT0gQ01EX05PVF9TVVBQT1JURUQsCj4gK307Cj4gKwo+ ICAvKiBDb250cm9sbGVyIGZlYXR1cmUgZmxhZ3MgKi8KPiAgZW51bSB7Cj4gIAlCUkNNTkFORF9I QVNfMUtfU0VDVE9SUwkJCT0gQklUKDApLAo+IEBAIC0yMzcsNiArMjYyLDEwIEBAIHN0cnVjdCBi cmNtbmFuZF9jb250cm9sbGVyIHsKPiAgCS8qIExpc3Qgb2YgTkFORCBob3N0cyAob25lIGZvciBl YWNoIGNoaXAtc2VsZWN0KSAqLwo+ICAJc3RydWN0IGxpc3RfaGVhZCBob3N0X2xpc3Q7Cj4gIAo+ ICsJLyogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gZXhlY19vcCAqLwo+ICsJaW50ICgqZXhl Y19pbnN0cikoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPiArCQkJICBjb25zdCBzdHJ1Y3QgbmFu ZF9vcGVyYXRpb24gKm9wKTsKPiArCj4gIAkvKiBFRFUgaW5mbywgcGVyLXRyYW5zYWN0aW9uICov Cj4gIAljb25zdCB1MTYgICAgICAgICAgICAgICAqZWR1X29mZnNldHM7Cj4gIAl2b2lkIF9faW9t ZW0gICAgICAgICAgICAqZWR1X2Jhc2U7Cj4gQEAgLTI0OTAsMTQgKzI1MTksMTUyIEBAIHN0YXRp YyBpbnQgYnJjbW5hbmRfb3BfaXNfcmVzZXQoY29uc3Qgc3RydWN0IG5hbmRfb3BlcmF0aW9uICpv cCkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGJyY21uYW5kX2V4ZWNfaW5z dHJ1Y3Rpb25zKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4gKwkJCQkgICAgICBjb25zdCBzdHJ1 Y3QgbmFuZF9vcGVyYXRpb24gKm9wKQo+ICt7Cj4gKwlzdHJ1Y3QgYnJjbW5hbmRfaG9zdCAqaG9z dCA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiArCXVuc2lnbmVkIGludCBpOwo+ ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG9wLT5uaW5zdHJzOyBpKysp IHsKPiArCQlyZXQgPSBicmNtbmFuZF9leGVjX2luc3RyKGhvc3QsIGksIG9wKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGJyY21uYW5kX2V4ZWNfaW5zdHJ1Y3Rpb25zX2xlZ2FjeShzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLAo+ICsJCQkJCSAgICAgY29uc3Qgc3RydWN0IG5hbmRfb3BlcmF0aW9uICpvcCkK PiArewo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPiArCXN0 cnVjdCBicmNtbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXAp Owo+ICsJc3RydWN0IGJyY21uYW5kX2NvbnRyb2xsZXIgKmN0cmwgPSBob3N0LT5jdHJsOwo+ICsJ Y29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmluc3RyOwo+ICsJdW5zaWduZWQgaW50IGksIGo7 Cj4gKwl1OCBjbWQgPSBDTURfTlVMTCwgbGFzdF9jbWQgPSBDTURfTlVMTDsKPiArCWludCByZXQg PSAwOwo+ICsJdTY0IGxhc3RfYWRkcjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgb3AtPm5pbnN0 cnM7IGkrKykgewo+ICsJCWluc3RyID0gJm9wLT5pbnN0cnNbaV07Cj4gKwo+ICsJCWlmIChpbnN0 ci0+dHlwZSA9PSBOQU5EX09QX0NNRF9JTlNUUikgewoKQ291bGQgd2UgdXNlIGEgc3dpdGNoIGNh c2UgaGVyZT8gU2VlbXMgbW9yZSBhcHByb3ByaWF0ZS4KCj4gKwkJCWNtZCA9IG5hdGl2ZV9jbWRf Y29udltpbnN0ci0+Y3R4LmNtZC5vcGNvZGVdOwo+ICsJCQlpZiAoY21kID09IENNRF9OT1RfU1VQ UE9SVEVEKSB7Cj4gKwkJCQlkZXZfZXJyKGN0cmwtPmRldiwgInVuc3VwcG9ydGVkIGNtZD0lZFxu IiwKPiArCQkJCQlpbnN0ci0+Y3R4LmNtZC5vcGNvZGUpOwo+ICsJCQkJcmV0ID0gLUVPUE5PVFNV UFA7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0gZWxzZSBpZiAoaW5zdHItPnR5cGUgPT0g TkFORF9PUF9BRERSX0lOU1RSKSB7Cj4gKwkJCXU2NCBhZGRyID0gMDsKPiArCj4gKwkJCWlmIChj bWQgPT0gQ01EX05VTEwpCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCWlmIChpbnN0ci0+Y3R4 LmFkZHIubmFkZHJzID4gOCkgewo+ICsJCQkJZGV2X2VycihjdHJsLT5kZXYsICJ1bnN1cHBvcnRl ZCBuYWRkcnM9JXVcbiIsCj4gKwkJCQkJaW5zdHItPmN0eC5hZGRyLm5hZGRycyk7Cj4gKwkJCQly ZXQgPSAtRU9QTk9UU1VQUDsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJCQlmb3IgKGog PSAwOyBqIDwgaW5zdHItPmN0eC5hZGRyLm5hZGRyczsgaisrKQo+ICsJCQkJYWRkciB8PSAoaW5z dHItPmN0eC5hZGRyLmFkZHJzW2pdKSA8PCAoaiA8PCAzKTsKPiArCj4gKwkJCWlmIChjbWQgPT0g Q01EX0JMT0NLX0VSQVNFKQo+ICsJCQkJYWRkciA8PD0gY2hpcC0+cGFnZV9zaGlmdDsKPiArCQkJ ZWxzZSBpZiAoY21kID09IENNRF9QQVJBTUVURVJfQ0hBTkdFX0NPTCkKPiArCQkJCWFkZHIgJj0g figodTY0KShGQ19CWVRFUyAtIDEpKTsKPiArCj4gKwkJCWJyY21uYW5kX3NldF9jbWRfYWRkciht dGQsIGFkZHIpOwo+ICsJCQlicmNtbmFuZF9zZW5kX2NtZChob3N0LCBjbWQpOwo+ICsJCQlsYXN0 X2FkZHIgPSBhZGRyOwo+ICsJCQlsYXN0X2NtZCA9IGNtZDsKPiArCQkJY21kID0gQ01EX05VTEw7 Cj4gKwkJCWJyY21uYW5kX3dhaXRmdW5jKGNoaXApOwoKV2FpdGZ1bmMgaXMgYSBsZWdhY3kgaW50 ZXJmYWNlLCBhcmUgeW91IHN1cmUgdGhpcyBpcyB0aGUgY29ycmVjdApmdW5jdGlvbiBjYWxsIGhl cmU/Cgo+ICsKPiArCQkJaWYgKGxhc3RfY21kID09IENNRF9QQVJBTUVURVJfUkVBRCB8fAo+ICsJ CQkgICAgbGFzdF9jbWQgPT0gQ01EX1BBUkFNRVRFUl9DSEFOR0VfQ09MKSB7Cj4gKwkJCQkvKiBD b3B5IGZsYXNoIGNhY2hlIHdvcmQtd2lzZSAqLwo+ICsJCQkJdTMyICpmbGFzaF9jYWNoZSA9ICh1 MzIgKiljdHJsLT5mbGFzaF9jYWNoZTsKPiArCj4gKwkJCQlicmNtbmFuZF9zb2NfZGF0YV9idXNf cHJlcGFyZShjdHJsLT5zb2MsIHRydWUpOwo+ICsKPiArCQkJCS8qCj4gKwkJCQkgKiBNdXN0IGNh Y2hlIHRoZSBGTEFTSF9DQUNIRSBub3csIHNpbmNlIGNoYW5nZXMgaW4KPiArCQkJCSAqIFNFQ1RP Ul9TSVpFXzFLIG1heSBpbnZhbGlkYXRlIGl0Cj4gKwkJCQkgKi8KPiArCQkJCWZvciAoaiA9IDA7 IGogPCBGQ19XT1JEUzsgaisrKQo+ICsJCQkJCS8qCj4gKwkJCQkJICogRmxhc2ggY2FjaGUgaXMg YmlnIGVuZGlhbiBmb3IgcGFyYW1ldGVyIHBhZ2VzLCBhdAo+ICsJCQkJCSAqIGxlYXN0IG9uIFNU QiBTb0NzCj4gKwkJCQkJICovCj4gKwkJCQkJZmxhc2hfY2FjaGVbal0gPSBiZTMyX3RvX2NwdShi cmNtbmFuZF9yZWFkX2ZjKGN0cmwsIGopKTsKPiArCj4gKwkJCQlicmNtbmFuZF9zb2NfZGF0YV9i dXNfdW5wcmVwYXJlKGN0cmwtPnNvYywgdHJ1ZSk7Cj4gKwkJCX0KPiArCQl9IGVsc2UgaWYgKGlu c3RyLT50eXBlID09IE5BTkRfT1BfREFUQV9JTl9JTlNUUikgewo+ICsJCQl1OCAqaW4gPSBpbnN0 ci0+Y3R4LmRhdGEuYnVmLmluOwo+ICsKPiArCQkJaWYgKGxhc3RfY21kID09IENNRF9ERVZJQ0Vf SURfUkVBRCkgewo+ICsJCQkJdTMyIHZhbDsKPiArCj4gKwkJCQlpZiAoaW5zdHItPmN0eC5kYXRh LmxlbiA+IDgpIHsKPiArCQkJCQlkZXZfZXJyKGN0cmwtPmRldiwgInVuc3VwcG9ydGVkIGxlbj0l dVxuIiwKPiArCQkJCQkJaW5zdHItPmN0eC5kYXRhLmxlbik7Cj4gKwkJCQkJcmV0ID0gLUVPUE5P VFNVUFA7Cj4gKwkJCQkJYnJlYWs7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJZm9yIChqID0gMDsgaiA8 IGluc3RyLT5jdHguZGF0YS5sZW47IGorKykgewo+ICsJCQkJCWlmIChqID09IDApCj4gKwkJCQkJ CXZhbCA9IGJyY21uYW5kX3JlYWRfcmVnKGN0cmwsIEJSQ01OQU5EX0lEKTsKPiArCQkJCQllbHNl IGlmIChqID09IDQpCj4gKwkJCQkJCXZhbCA9IGJyY21uYW5kX3JlYWRfcmVnKGN0cmwsIEJSQ01O QU5EX0lEX0VYVCk7Cj4gKwo+ICsJCQkJCWluW2pdID0gKHZhbCA+PiAoMjQgLSAoKGogJSA0KSA8 PCAzKSkpICYgMHhmZjsKPiArCQkJCX0KPiArCQkJfSBlbHNlIGlmIChsYXN0X2NtZCA9PSBDTURf UEFSQU1FVEVSX1JFQUQgfHwKPiArCQkJCSAgIGxhc3RfY21kID09IENNRF9QQVJBTUVURVJfQ0hB TkdFX0NPTCkgewo+ICsJCQkJdTY0IGFkZHI7Cj4gKwkJCQl1MzIgb2ZmczsKPiArCj4gKwkJCQlm b3IgKGogPSAwOyBqIDwgaW5zdHItPmN0eC5kYXRhLmxlbjsgaisrKSB7Cj4gKwkJCQkJYWRkciA9 IGxhc3RfYWRkciArIGo7Cj4gKwkJCQkJb2ZmcyA9IGFkZHIgJiAoRkNfQllURVMgLSAxKTsKPiAr Cj4gKwkJCQkJaWYgKGogPiAwICYmIG9mZnMgPT0gMCkKPiArCQkJCQkJbmFuZF9jaGFuZ2VfcmVh ZF9jb2x1bW5fb3AoY2hpcCwgYWRkciwgTlVMTCwgMCwKPiArCQkJCQkJCQkJICAgZmFsc2UpOwo+ ICsKPiArCQkJCQlpbltqXSA9IGN0cmwtPmZsYXNoX2NhY2hlW29mZnNdOwo+ICsJCQkJfQo+ICsJ CQl9Cj4gKwkJfSBlbHNlIGlmIChpbnN0ci0+dHlwZSA9PSBOQU5EX09QX1dBSVRSRFlfSU5TVFIp IHsKPiArCQkJcmV0ID0gYmNtbmFuZF9jdHJsX3BvbGxfc3RhdHVzKGhvc3QsIE5BTkRfQ1RSTF9S RFksIE5BTkRfQ1RSTF9SRFksIDApOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJYnJlYWs7Cj4gKwkJ fSBlbHNlIHsKPiArCQkJZGV2X2VycihjdHJsLT5kZXYsICJ1bnN1cHBvcnRlZCBpbnN0cnVjdGlv biB0eXBlOiAlZFxuIiwgaW5zdHItPnR5cGUpOwo+ICsJCQlyZXQgPSAtRUlOVkFMOwoKRU9QTk9U U1VQUCBJIGd1ZXNzPwoKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQgYnJjbW5hbmRfZXhlY19vcChzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IG5hbmRfb3BlcmF0aW9uICpvcCwKPiAg CQkJICAgIGJvb2wgY2hlY2tfb25seSkKPiAgewo+ICAJc3RydWN0IGJyY21uYW5kX2hvc3QgKmhv c3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gKwlzdHJ1Y3QgYnJjbW5hbmRf Y29udHJvbGxlciAqY3RybCA9IGhvc3QtPmN0cmw7Cj4gIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9 IG5hbmRfdG9fbXRkKGNoaXApOwo+ICAJdTggKnN0YXR1czsKPiAtCXVuc2lnbmVkIGludCBpOwo+ ICAJaW50IHJldCA9IDA7Cj4gIAo+ICAJaWYgKGNoZWNrX29ubHkpClthZGRpbmcgb25lIG1vcmUg Y29udGV4dCBsaW5lXQogICAgICAgICAgICAgICAgIHJldHVybiAwOwoKVGhlcmUgaXMgYSBsb3Qg dGhhdCBpcyB1bnN1cHBvcnRlZCwgYW5kIHRoaXMgaXMgb2theSwgYnV0IHlvdSBuZWVkIHRvCmNv bnRyb2wgYWxsIHRoZXNlIGVhcmxpZXIgYW5kIGltcGxlbWVudCBhIGZ1bmN0aW9uIHRoYXQgZG9l cyBhbGwgdGhlCmNoZWNrcyB3aGVuIGV4ZWNfb3AoKSBpcyBjYWxsZWQgd2l0aCB0aGUgY2hlY2tf b25seSBwYXJhbWV0ZXIgc2V0IChqdXN0CmFib3ZlKS4gVGhlIHN1cHBvcnQgZm9yIHRoZSBvbGQg U29DcyAqbXVzdCogbm90IHJldHVybiAwIGJ5IGRlZmF1bHQgYW5kCmluc3RlYWQgY2hlY2sgdGhl IHZhbGlkaXR5IG9mIHRoZSBvcCB3aGVuIHJlcXVlc3RlZC4KCj4gQEAgLTI1MjUsMTEgKzI2OTIs NyBAQCBzdGF0aWMgaW50IGJyY21uYW5kX2V4ZWNfb3Aoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwK PiAgCWlmIChvcC0+ZGVhc3NlcnRfd3ApCj4gIAkJYnJjbW5hbmRfd3AobXRkLCAwKTsKPiAgCj4g LQlmb3IgKGkgPSAwOyBpIDwgb3AtPm5pbnN0cnM7IGkrKykgewo+IC0JCXJldCA9IGJyY21uYW5k X2V4ZWNfaW5zdHIoaG9zdCwgaSwgb3ApOwo+IC0JCWlmIChyZXQpCj4gLQkJCWJyZWFrOwo+IC0J fQo+ICsJcmV0ID0gY3RybC0+ZXhlY19pbnN0cihjaGlwLCBvcCk7Cj4gIAo+ICAJaWYgKG9wLT5k ZWFzc2VydF93cCkKPiAgCQlicmNtbmFuZF93cChtdGQsIDEpOwo+IEBAIC0zMTQyLDYgKzMzMDUs MTIgQEAgaW50IGJyY21uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0 cnVjdCBicmNtbmFuZF9zb2MgKnNvYykKPiAgCWlmIChyZXQpCj4gIAkJZ290byBlcnI7Cj4gIAo+ ICsJLyogT25seSB2NS4wKyBjb250cm9sbGVycyBoYXZlIGxvdyBsZXZlbCBvcHMgc3VwcG9ydCAq Lwo+ICsJaWYgKGN0cmwtPm5hbmRfdmVyc2lvbiA+PSAweDA1MDApCgpEaWQgSSBqdXN0IHJlYWQg dGhhdCA0IG9yIDQuMSB3YXMgdGhlIGNvcnJlY3QgYm91bmRhcnkgaW5zdGVhZCBvZiA1PwoKPiAr CQljdHJsLT5leGVjX2luc3RyID0gYnJjbW5hbmRfZXhlY19pbnN0cnVjdGlvbnM7Cj4gKwllbHNl Cj4gKwkJY3RybC0+ZXhlY19pbnN0ciA9IGJyY21uYW5kX2V4ZWNfaW5zdHJ1Y3Rpb25zX2xlZ2Fj eTsKPiArCj4gIAkvKgo+ICAJICogTW9zdCBjaGlwcyBoYXZlIHRoaXMgY2FjaGUgYXQgYSBmaXhl ZCBvZmZzZXQgd2l0aGluICduYW5kJyBibG9jay4KPiAgCSAqIFNvbWUgbXVzdCBzcGVjaWZ5IHRo aXMgcmVnaW9uIHNlcGFyYXRlbHkuCgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lv biBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1tdGQvCg== 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 84EAF14884C for ; Fri, 16 May 2025 14:32:25 +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=1747405947; cv=none; b=jY3kx3RMqMvIi1aaftc4bqVLJS3mb4WxjWfjAsCVSGsEVFMfdNuki6/ygT2YLzs1csyL9SVyD4RlvskdRG4CxF0sngC0WGOmFBivSvrBLFSKRYpyMbz1EW7+roob9VW+1aMMM9XQ6xhJwdt7l7ZEzEeSC3GAqheQ1ZuHKPuoPps= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747405947; c=relaxed/simple; bh=AUSWPpp8SI2mmg4oBzYhM6nAv/gioMP9u8pxX9JHqAM=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=UdhtStEXA+aBkuSJr6XuEs8EUYSyCr9hcqfdQNey6WjLRpozLeYcp3oXaNpb8GB63bugkEOpD7lI5g8eqssW1uq0ZS7poJCYZPSy+UN2OAAF2/iZrUUmRTuKb0aluaj0OYFkXJoVhSs5t1c1Kt6rwZ/txA5t6p5/wdHYndlXR1w= 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=oK4UAnTZ; 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="oK4UAnTZ" Received: by mail.gandi.net (Postfix) with ESMTPSA id C03B843B63; Fri, 16 May 2025 14:32:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1747405937; 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=Cx+R6Ss+hRUkdPKaV+SmJaLvjR4vIHIih0chKUPxnCs=; b=oK4UAnTZbf3QFQSp7nPHE1kshQcN+92jeNk5DmLXcz3ZnCf5oD4mLLn+nn1FVl5tQ4FqQ8 SKzN53hHN7Grvbf3dYNhr/my9mH75FZ/nMpxklZJYIU5D6/DS31ZVgY5EYg44BkH8yZ2mG hqJYqe8ALXiw2L/HeFt2N/wzwO/bJ5XesgIE40pJxVUYralBRd5CxfUSlLtAfBxGSufVAN n+hiavGZsyv2oe496seLHTh70/TMfYXCcKgNSktZbhZVASDUinctI8WGxftoCgE4/PVYuV YPunZJJEpzwevwEq2daR1DCInvI7TQAqHnBWSBg7YtW/3sfZ3LcfZuHJkQnMww== From: Miquel Raynal To: =?utf-8?Q?=C3=81lvaro_Fern=C3=A1ndez?= Rojas Cc: linux-mtd@lists.infradead.org, dregan@broadcom.com, bcm-kernel-feedback-list@broadcom.com, florian.fainelli@broadcom.com, rafal@milecki.pl, computersforpeace@gmail.com, kamal.dasu@broadcom.com, dan.beygelman@broadcom.com, william.zhang@broadcom.com, frieder.schrempf@kontron.de, linux-kernel@vger.kernel.org, vigneshr@ti.com, richard@nod.at, bbrezillon@kernel.org, kdasu.kdev@gmail.com, jaimeliao.tw@gmail.com, kilobyte@angband.pl, jonas.gorski@gmail.com, dgcbueu@gmail.com Subject: Re: [PATCH v4] mtd: rawnand: brcmnand: legacy exec_op implementation In-Reply-To: <20250515050759.1016697-1-noltari@gmail.com> (=?utf-8?Q?=22?= =?utf-8?Q?=C3=81lvaro_Fern=C3=A1ndez?= Rojas"'s message of "Thu, 15 May 2025 07:07:59 +0200") References: <20250515050759.1016697-1-noltari@gmail.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Fri, 16 May 2025 16:32:16 +0200 Message-ID: <87o6vsd3tb.fsf@bootlin.com> 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-State: clean X-GND-Score: 0 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdefuddvleelucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecunecujfgurhephffvvefujghffgffkfggtgfgsehtqhertddtreejnecuhfhrohhmpefoihhquhgvlhcutfgrhihnrghluceomhhiqhhuvghlrdhrrgihnhgrlhessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepueeijeduvefgkeeuveffgeejleegledtvdduveeftdetfeejvdfffedvgfduffeknecuffhomhgrihhnpegsuhhfrdhinhenucfkphepledtrdekledrudeifedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeltddrkeelrdduieefrdduvdejpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihhquhgvlhdrrhgrhihnrghlsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopedvtddprhgtphhtthhopehnohhlthgrrhhisehgmhgrihhlrdgtohhmpdhrtghpthhtoheplhhinhhugidqmhhtugeslhhishhtshdrihhnfhhrrgguvggrugdrohhrghdprhgtphhtthhopegurhgvghgrnhessghrohgruggtohhmrdgtohhmpdhrtghpthhtohepsggtmhdqkhgvrhhnvghlqdhfvggvuggsrggtkhdqlhhishhtsegsrhhorggutghomhdrtghomhdprhgtphhtthhopehflhhorhhirghnrdhfrghin hgvlhhlihessghrohgruggtohhmrdgtohhmpdhrtghpthhtoheprhgrfhgrlhesmhhilhgvtghkihdrphhlpdhrtghpthhtoheptghomhhpuhhtvghrshhfohhrphgvrggtvgesghhmrghilhdrtghomhdprhgtphhtthhopehkrghmrghlrdgurghsuhessghrohgruggtohhmrdgtohhm X-GND-Sasl: miquel.raynal@bootlin.com Hello Alvaro, On 15/05/2025 at 07:07:59 +02, =C3=81lvaro Fern=C3=A1ndez Rojas wrote: > Commit 3c8260ce7663 ("mtd: rawnand: brcmnand: exec_op implementation") > removed legacy interface functions, breaking < v5.0 controllers support. > In order to fix older controllers we need to add an alternative exec_op > implementation which doesn't rely on low level registers. > > Fixes: 3c8260ce7663 ("mtd: rawnand: brcmnand: exec_op implementation") > Signed-off-by: =C3=81lvaro Fern=C3=A1ndez Rojas Since you have a precise list of what is supported and what's not, I'd have expected the rest of the behavior to be identical. Are these controllers so different in how to program them? Can't we use the existing exec_op() implementation without some of the opcodes? > +/* Native command conversion */ Should mention "legacy" somewhere I guess, and even what legacy means in this context, which is version(controller) < XXX. > +static const u8 native_cmd_conv[] =3D { > + [NAND_CMD_READ0] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_READ1] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_RNDOUT] =3D CMD_PARAMETER_CHANGE_COL, > + [NAND_CMD_PAGEPROG] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_READOOB] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_ERASE1] =3D CMD_BLOCK_ERASE, > + [NAND_CMD_STATUS] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_SEQIN] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_RNDIN] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_READID] =3D CMD_DEVICE_ID_READ, > + [NAND_CMD_ERASE2] =3D CMD_NULL, > + [NAND_CMD_PARAM] =3D CMD_PARAMETER_READ, > + [NAND_CMD_GET_FEATURES] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_SET_FEATURES] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_RESET] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_READSTART] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_READCACHESEQ] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_READCACHEEND] =3D CMD_NOT_SUPPORTED, > + [NAND_CMD_RNDOUTSTART] =3D CMD_NULL, > + [NAND_CMD_CACHEDPROG] =3D CMD_NOT_SUPPORTED, > +}; > + > /* Controller feature flags */ > enum { > BRCMNAND_HAS_1K_SECTORS =3D BIT(0), > @@ -237,6 +262,10 @@ struct brcmnand_controller { > /* List of NAND hosts (one for each chip-select) */ > struct list_head host_list; >=20=20 > + /* Function to be called from exec_op */ > + int (*exec_instr)(struct nand_chip *chip, > + const struct nand_operation *op); > + > /* EDU info, per-transaction */ > const u16 *edu_offsets; > void __iomem *edu_base; > @@ -2490,14 +2519,152 @@ static int brcmnand_op_is_reset(const struct nan= d_operation *op) > return 0; > } >=20=20 > +static int brcmnand_exec_instructions(struct nand_chip *chip, > + const struct nand_operation *op) > +{ > + struct brcmnand_host *host =3D nand_get_controller_data(chip); > + unsigned int i; > + int ret =3D 0; > + > + for (i =3D 0; i < op->ninstrs; i++) { > + ret =3D brcmnand_exec_instr(host, i, op); > + if (ret) > + break; > + } > + > + return ret; > +} > + > +static int brcmnand_exec_instructions_legacy(struct nand_chip *chip, > + const struct nand_operation *op) > +{ > + struct mtd_info *mtd =3D nand_to_mtd(chip); > + struct brcmnand_host *host =3D nand_get_controller_data(chip); > + struct brcmnand_controller *ctrl =3D host->ctrl; > + const struct nand_op_instr *instr; > + unsigned int i, j; > + u8 cmd =3D CMD_NULL, last_cmd =3D CMD_NULL; > + int ret =3D 0; > + u64 last_addr; > + > + for (i =3D 0; i < op->ninstrs; i++) { > + instr =3D &op->instrs[i]; > + > + if (instr->type =3D=3D NAND_OP_CMD_INSTR) { Could we use a switch case here? Seems more appropriate. > + cmd =3D native_cmd_conv[instr->ctx.cmd.opcode]; > + if (cmd =3D=3D CMD_NOT_SUPPORTED) { > + dev_err(ctrl->dev, "unsupported cmd=3D%d\n", > + instr->ctx.cmd.opcode); > + ret =3D -EOPNOTSUPP; > + break; > + } > + } else if (instr->type =3D=3D NAND_OP_ADDR_INSTR) { > + u64 addr =3D 0; > + > + if (cmd =3D=3D CMD_NULL) > + continue; > + > + if (instr->ctx.addr.naddrs > 8) { > + dev_err(ctrl->dev, "unsupported naddrs=3D%u\n", > + instr->ctx.addr.naddrs); > + ret =3D -EOPNOTSUPP; > + break; > + } > + > + for (j =3D 0; j < instr->ctx.addr.naddrs; j++) > + addr |=3D (instr->ctx.addr.addrs[j]) << (j << 3); > + > + if (cmd =3D=3D CMD_BLOCK_ERASE) > + addr <<=3D chip->page_shift; > + else if (cmd =3D=3D CMD_PARAMETER_CHANGE_COL) > + addr &=3D ~((u64)(FC_BYTES - 1)); > + > + brcmnand_set_cmd_addr(mtd, addr); > + brcmnand_send_cmd(host, cmd); > + last_addr =3D addr; > + last_cmd =3D cmd; > + cmd =3D CMD_NULL; > + brcmnand_waitfunc(chip); Waitfunc is a legacy interface, are you sure this is the correct function call here? > + > + if (last_cmd =3D=3D CMD_PARAMETER_READ || > + last_cmd =3D=3D CMD_PARAMETER_CHANGE_COL) { > + /* Copy flash cache word-wise */ > + u32 *flash_cache =3D (u32 *)ctrl->flash_cache; > + > + brcmnand_soc_data_bus_prepare(ctrl->soc, true); > + > + /* > + * Must cache the FLASH_CACHE now, since changes in > + * SECTOR_SIZE_1K may invalidate it > + */ > + for (j =3D 0; j < FC_WORDS; j++) > + /* > + * Flash cache is big endian for parameter pages, at > + * least on STB SoCs > + */ > + flash_cache[j] =3D be32_to_cpu(brcmnand_read_fc(ctrl, j)); > + > + brcmnand_soc_data_bus_unprepare(ctrl->soc, true); > + } > + } else if (instr->type =3D=3D NAND_OP_DATA_IN_INSTR) { > + u8 *in =3D instr->ctx.data.buf.in; > + > + if (last_cmd =3D=3D CMD_DEVICE_ID_READ) { > + u32 val; > + > + if (instr->ctx.data.len > 8) { > + dev_err(ctrl->dev, "unsupported len=3D%u\n", > + instr->ctx.data.len); > + ret =3D -EOPNOTSUPP; > + break; > + } > + > + for (j =3D 0; j < instr->ctx.data.len; j++) { > + if (j =3D=3D 0) > + val =3D brcmnand_read_reg(ctrl, BRCMNAND_ID); > + else if (j =3D=3D 4) > + val =3D brcmnand_read_reg(ctrl, BRCMNAND_ID_EXT); > + > + in[j] =3D (val >> (24 - ((j % 4) << 3))) & 0xff; > + } > + } else if (last_cmd =3D=3D CMD_PARAMETER_READ || > + last_cmd =3D=3D CMD_PARAMETER_CHANGE_COL) { > + u64 addr; > + u32 offs; > + > + for (j =3D 0; j < instr->ctx.data.len; j++) { > + addr =3D last_addr + j; > + offs =3D addr & (FC_BYTES - 1); > + > + if (j > 0 && offs =3D=3D 0) > + nand_change_read_column_op(chip, addr, NULL, 0, > + false); > + > + in[j] =3D ctrl->flash_cache[offs]; > + } > + } > + } else if (instr->type =3D=3D NAND_OP_WAITRDY_INSTR) { > + ret =3D bcmnand_ctrl_poll_status(host, NAND_CTRL_RDY, NAND_CTRL_RDY, = 0); > + if (ret) > + break; > + } else { > + dev_err(ctrl->dev, "unsupported instruction type: %d\n", instr->type); > + ret =3D -EINVAL; EOPNOTSUPP I guess? > + break; > + } > + } > + > + return ret; > +} > + > static int brcmnand_exec_op(struct nand_chip *chip, > const struct nand_operation *op, > bool check_only) > { > struct brcmnand_host *host =3D nand_get_controller_data(chip); > + struct brcmnand_controller *ctrl =3D host->ctrl; > struct mtd_info *mtd =3D nand_to_mtd(chip); > u8 *status; > - unsigned int i; > int ret =3D 0; >=20=20 > if (check_only) [adding one more context line] return 0; There is a lot that is unsupported, and this is okay, but you need to control all these earlier and implement a function that does all the checks when exec_op() is called with the check_only parameter set (just above). The support for the old SoCs *must* not return 0 by default and instead check the validity of the op when requested. > @@ -2525,11 +2692,7 @@ static int brcmnand_exec_op(struct nand_chip *chip, > if (op->deassert_wp) > brcmnand_wp(mtd, 0); >=20=20 > - for (i =3D 0; i < op->ninstrs; i++) { > - ret =3D brcmnand_exec_instr(host, i, op); > - if (ret) > - break; > - } > + ret =3D ctrl->exec_instr(chip, op); >=20=20 > if (op->deassert_wp) > brcmnand_wp(mtd, 1); > @@ -3142,6 +3305,12 @@ int brcmnand_probe(struct platform_device *pdev, s= truct brcmnand_soc *soc) > if (ret) > goto err; >=20=20 > + /* Only v5.0+ controllers have low level ops support */ > + if (ctrl->nand_version >=3D 0x0500) Did I just read that 4 or 4.1 was the correct boundary instead of 5? > + ctrl->exec_instr =3D brcmnand_exec_instructions; > + else > + ctrl->exec_instr =3D brcmnand_exec_instructions_legacy; > + > /* > * Most chips have this cache at a fixed offset within 'nand' block. > * Some must specify this region separately. Thanks, Miqu=C3=A8l