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 X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 37BD0C43219 for ; Tue, 30 Apr 2019 07:55:32 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0307E2075E for ; Tue, 30 Apr 2019 07:55:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tIVTShjy" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0307E2075E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject: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=EdP29aE/7rRdEtwrZIZHaoYpVNBB15py6N6GET7/DMU=; b=tIVTShjygRA1F4 Nfxp44834q4qLwnGCXsHWcwbRODHdCP46amc4ZUPQ2wrgVi2NYCexXA4ffpQhbRS9eplLD4Tm94Jb x3xkoytAJHrx+ywAlbJBTqhZ1LF83gujJtQ1NKCml9rWbuPYRhB9Jckcmsdr6ynnl4kSQ1CF1nKkE C5HDp6RHOYlfR5glFVJlYvxNxzYXkZ0L/KvQu43C0Vbl7W8b5fiFJFAxxvTvQU9V4oKqvs4S5xZ+6 gpKENU3C2B9GEPq1ALdqkrF/mYnOpST6uCtyDfndVSimlilUt3tqcWikiwVwPC3vLxzReHgvq+gdv DkQ517rSFGokKMhAWfbg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hLNbs-0007y1-Ve; Tue, 30 Apr 2019 07:55:28 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hLNbp-0007xU-JM for linux-mtd@lists.infradead.org; Tue, 30 Apr 2019 07:55:27 +0000 X-Originating-IP: 90.88.147.33 Received: from xps13 (aaubervilliers-681-1-27-33.w90-88.abo.wanadoo.fr [90.88.147.33]) (Authenticated sender: miquel.raynal@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 7D7A41C0015; Tue, 30 Apr 2019 07:55:09 +0000 (UTC) Date: Tue, 30 Apr 2019 09:55:08 +0200 From: Miquel Raynal To: "Shivamurthy Shastri (sshivamurthy)" Subject: Re: [PATCH 3/4] mtd: spinand: Enabled support to detect parameter page Message-ID: <20190430095508.706fa125@xps13> In-Reply-To: References: Organization: Bootlin X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190430_005525_940892_B1EB422C X-CRM114-Status: GOOD ( 25.24 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Boris Brezillon , Richard Weinberger , "linux-kernel@vger.kernel.org" , Marek Vasut , Frieder Schrempf , "linux-mtd@lists.infradead.org" , Brian Norris , David Woodhouse 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 SGkgU2hpdmFtdXJ0aHksCgoiU2hpdmFtdXJ0aHkgU2hhc3RyaSAoc3NoaXZhbXVydGh5KSIgPHNz aGl2YW11cnRoeUBtaWNyb24uY29tPiB3cm90ZSBvbgpUdWUsIDI2IE1hciAyMDE5IDEwOjUyOjAw ICswMDAwOgoKPiBTb21lIG9mIHRoZSBTUEkgTkFORCBkZXZpY2VzIGhhcyBwYXJhbWV0ZXIgcGFn ZSB3aGljaCBpcyBzaW1pbGFyIHRvIE9ORkkKPiB0YWJsZS4KPiAKPiBCdXQsIGl0IG1heSBub3Qg YmUgc2VsZiBzdWZmaWNpZW50IHRvIHByb3BhZ2F0ZSBhbGwgdGhlIHJlcXVpcmVkCj4gcGFyYW1l dGVycy4gRml4dXAgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQgaW4gc3RydWN0IG1hbnVmYWN0dXJl ciB0bwo+IGFjY29tbW9kYXRlIHRoaXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2hpdmFtdXJ0aHkg U2hhc3RyaSA8c3NoaXZhbXVydGh5QG1pY3Jvbi5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvbXRkL25h bmQvc3BpL2NvcmUuYyB8IDExMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K PiAgaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oIHwgICA1ICsrCj4gIDIgZmlsZXMgY2hhbmdl ZCwgMTE3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tdGQvbmFuZC9zcGkvY29yZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jCj4g aW5kZXggOTg1YWQ1MmNkYWE3Li40MDg4MmExZDJiYzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9t dGQvbmFuZC9zcGkvY29yZS5jCj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jCj4g QEAgLTU3NCw2ICs1NzQsMTA4IEBAIHN0YXRpYyBpbnQgc3BpbmFuZF9sb2NrX2Jsb2NrKHN0cnVj dCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCwgdTggbG9jaykKPiAgCXJldHVybiBzcGluYW5kX3dy aXRlX3JlZ19vcChzcGluYW5kLCBSRUdfQkxPQ0tfTE9DSywgbG9jayk7Cj4gIH0KPiAgCj4gKy8q Kgo+ICsgKiBzcGluYW5kX3JlYWRfcGFyYW1fcGFnZV9vcCAtIFJlYWQgcGFyYW1ldGVyIHBhZ2Ug b3BlcmF0aW9uCj4gKyAqIEBzcGluYW5kOiB0aGUgc3BpbmFuZCBkZXZpY2UKPiArICogQHBhZ2U6 IHBhZ2UgbnVtYmVyIHdoZXJlIHBhcmFtZXRlciBwYWdlIHRhYmxlcyBjYW4gYmUgZm91bmQKPiAr ICogQHBhcmFtZXRlcnM6IGJ1ZmZlciB1c2VkIHRvIHN0b3JlIHRoZSBwYXJhbWV0ZXIgcGFnZQoK RG9lcyBub3QgbWF0Y2ggdGhlIHByb3RvdHlwZQoKPiArICogQGxlbjogbGVuZ3RoIG9mIHRoZSBi dWZmZXIKPiArICoKPiArICogUmVhZCBwYXJhbWV0ZXIgcGFnZQo+ICsgKgo+ICsgKiBSZXR1cm5z IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiArICovCj4g K3N0YXRpYyBpbnQgc3BpbmFuZF9wYXJhbWV0ZXJfcGFnZV9yZWFkKHN0cnVjdCBuYW5kX2Rldmlj ZSAqYmFzZSwKClBsZWFzZSB1c2UgYSBzcGluYW5kIHN0cnVjdHVyZSBhcyBwYXJhbWV0ZXIsIHlv dSBkb24ndCBuZWVkIGEKbmFuZF9kZXZpY2UgaGVyZSAoc2FtZSBmb3Igb3RoZXIgc3BpbmFuZCBm dW5jdGlvbnMpLgoKPiArCQkJCSAgICAgICB1OCBwYWdlLCB2b2lkICpidWYsIHVuc2lnbmVkIGlu dCBsZW4pCj4gK3sKPiArCXN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCA9IG5hbmRfdG9f c3BpbmFuZChiYXNlKTsKPiArCXN0cnVjdCBzcGlfbWVtX29wIHByZWFkX29wID0gU1BJTkFORF9Q QUdFX1JFQURfT1AocGFnZSk7Cj4gKwlzdHJ1Y3Qgc3BpX21lbV9vcCBwcmVhZF9jYWNoZV9vcCA9 Cj4gKwkJCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX09QKGZhbHNlLAo+ICsJCQkJCQkJ CTAsCj4gKwkJCQkJCQkJMSwKPiArCQkJCQkJCQlidWYsCj4gKwkJCQkJCQkJbGVuKTsKPiArCXU4 IGZlYXR1cmU7Cj4gKwl1OCBzdGF0dXM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChsZW4gJiYg IWJ1ZikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXQgPSBzcGluYW5kX3JlYWRfcmVn X29wKHNwaW5hbmQsIFJFR19DRkcsCj4gKwkJCQkgICZmZWF0dXJlKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBDRkdfT1RQX0VOQUJMRSBpcyB1c2VkIHRvIGVuYWJs ZSBwYXJhbWV0ZXIgcGFnZSBhY2Nlc3MgKi8KPiArCWZlYXR1cmUgfD0gQ0ZHX09UUF9FTkFCTEU7 Cj4gKwo+ICsJc3BpbmFuZF93cml0ZV9yZWdfb3Aoc3BpbmFuZCwgUkVHX0NGRywgZmVhdHVyZSk7 Cj4gKwo+ICsJcmV0ID0gc3BpX21lbV9leGVjX29wKHNwaW5hbmQtPnNwaW1lbSwgJnByZWFkX29w KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBzcGluYW5kX3dh aXQoc3BpbmFuZCwgJnN0YXR1cyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCXJldCA9IHNwaV9tZW1fZXhlY19vcChzcGluYW5kLT5zcGltZW0sICZwcmVhZF9jYWNo ZV9vcCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gc3BpbmFu ZF9yZWFkX3JlZ19vcChzcGluYW5kLCBSRUdfQ0ZHLAo+ICsJCQkJICAmZmVhdHVyZSk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZmVhdHVyZSAmPSB+Q0ZHX09UUF9FTkFC TEU7Cj4gKwo+ICsJc3BpbmFuZF93cml0ZV9yZWdfb3Aoc3BpbmFuZCwgUkVHX0NGRywgZmVhdHVy ZSk7Cj4gKwo+ICsJcmV0dXJuIDE7CgpTaG91bGQgcmV0dXJuIDAKCj4gK30KPiArCj4gK3N0YXRp YyBpbnQgY2hlY2tfdmVyc2lvbihzdHJ1Y3QgbmFuZF9kZXZpY2UgKmJhc2UsCj4gKwkJCSBzdHJ1 Y3QgbmFuZF9vbmZpX3BhcmFtcyAqcCwgaW50ICpvbmZpX3ZlcnNpb24pCj4gK3sKPiArCS8qKgoK SSBkb24ndCB0aGluayB5b3UgbmVlZCB0aGVzZSAvKiogaGVyZSwganVzdCB1c2UgLyoKCj4gKwkg KiBTUEkgTkFORCBkbyBub3Qgc3VwcG9ydCBPTkZJIHN0YW5kYXJkCgpXaGF0IGFib3V0OgoKICAg ICAgICAvKgogICAgICAgICAqIFNQSSBOQU5EcyBkbyBub3QgbmVjZXNzYXJpbHkgc3VwcG9ydCBP TkZJIHN0YW5kYXJkLCBidXQKICAgICAgICAgKiBwYXJhbWV0ZXIgcGFnZSBsb29rcyB0aGUgc2Ft ZSBhcyBhbiBPTkZJIHRhYmxlLgogICAgICAgICAqLwoKPiArCSAqIEJ1dCwgcGFyYW1ldGVyIHBh Z2UgbG9va3Mgc2FtZSBhcyBPTkZJIHRhYmxlCj4gKwkgKi8KPiArCWlmICghbGUxNl90b19jcHUo cC0+cmV2aXNpb24pKQo+ICsJCSpvbmZpX3ZlcnNpb24gPSAwOwo+ICsKPiArCXJldHVybiAxOwoK RnVuY3Rpb25zIHNob3VsZCByZXR1cm4gMCBpbiBub3JtYWwgc3RhdGUsIG5vdCAxLgoKPiArfQo+ ICsKPiArc3RhdGljIGludCBzcGluYW5kX2ludGZfZGF0YShzdHJ1Y3QgbmFuZF9kZXZpY2UgKmJh c2UsCj4gKwkJCSAgICAgc3RydWN0IG5hbmRfb25maV9wYXJhbXMgKnApCj4gK3sKPiArCXN0cnVj dCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCA9IG5hbmRfdG9fc3BpbmFuZChiYXNlKTsKPiArCj4g KwkvKioKPiArCSAqCU1hbnVmYWN0dXJlcnMgbWF5IGludGVycHJldCB0aGUgcGFyYW1ldGVyIHBh Z2UgZGlmZmVyZW50bHkKCiAgICAgICAgICAgXl5eXl4gZXh0cmEgc3BhY2VzCgo+ICsJICovCgpP bmUtbGluZSBjb21tZW50IHNob3VsZCBiZSBpbiB0aGUgZm9ybSAvKiA8Y29tbWVudD4gKi8KCj4g KwlpZiAoc3BpbmFuZC0+bWFudWZhY3R1cmVyLT5vcHMtPmZpeHVwX3BhcmFtX3BhZ2UpCj4gKwkJ c3BpbmFuZC0+bWFudWZhY3R1cmVyLT5vcHMtPmZpeHVwX3BhcmFtX3BhZ2Uoc3BpbmFuZCwgcCk7 Cj4gKwo+ICsJcmV0dXJuIDE7CgogICAgICAgIHJldHVybiAwOwoKPiArfQo+ICsKPiArc3RhdGlj IGludCBzcGluYW5kX3BhcmFtX3BhZ2VfZGV0ZWN0KHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3Bp bmFuZCkKPiArewo+ICsJc3RydWN0IG5hbmRfZGV2aWNlICpiYXNlID0gc3BpbmFuZF90b19uYW5k KHNwaW5hbmQpOwo+ICsKPiArCWJhc2UtPmhlbHBlci5wYWdlID0gMHgwMTsKPiArCWJhc2UtPmhl bHBlci5jaGVja19yZXZpc2lvbiA9IGNoZWNrX3ZlcnNpb247Cj4gKwliYXNlLT5oZWxwZXIucGFy YW1ldGVyX3BhZ2VfcmVhZCA9IHNwaW5hbmRfcGFyYW1ldGVyX3BhZ2VfcmVhZDsKPiArCWJhc2Ut PmhlbHBlci5pbml0X2ludGZfZGF0YSA9IHNwaW5hbmRfaW50Zl9kYXRhOwo+ICsKPiArCXJldHVy biBuYW5kX29uZmlfZGV0ZWN0KGJhc2UpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHNwaW5hbmRf cmVhZF9wYWdlKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCwKPiAgCQkJICAgICBjb25z dCBzdHJ1Y3QgbmFuZF9wYWdlX2lvX3JlcSAqcmVxKQo+ICB7Cj4gQEAgLTg5Niw3ICs5OTgsNyBA QCBzdGF0aWMgdm9pZCBzcGluYW5kX21hbnVmYWN0dXJlcl9jbGVhbnVwKHN0cnVjdCBzcGluYW5k X2RldmljZSAqc3BpbmFuZCkKPiAgCQlyZXR1cm4gc3BpbmFuZC0+bWFudWZhY3R1cmVyLT5vcHMt PmNsZWFudXAoc3BpbmFuZCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX21l bV9vcCAqCj4gK2NvbnN0IHN0cnVjdCBzcGlfbWVtX29wICoKPiAgc3BpbmFuZF9zZWxlY3Rfb3Bf dmFyaWFudChzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQsCj4gIAkJCSAgY29uc3Qgc3Ry dWN0IHNwaW5hbmRfb3BfdmFyaWFudHMgKnZhcmlhbnRzKQo+ICB7Cj4gQEAgLTEwMTIsNiArMTEx NCwxNSBAQCBzdGF0aWMgaW50IHNwaW5hbmRfZGV0ZWN0KHN0cnVjdCBzcGluYW5kX2RldmljZSAq c3BpbmFuZCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiArCWlmICghc3BpbmFuZC0+YmFz ZS5tZW1vcmcucGFnZXNpemUpIHsKPiArCQlyZXQgPSBzcGluYW5kX3BhcmFtX3BhZ2VfZGV0ZWN0 KHNwaW5hbmQpOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAibm8gcGFy YW1ldGVyIHBhZ2UgZm9yICUqcGhOXG4iLAo+ICsJCQkJU1BJTkFORF9NQVhfSURfTEVOLCBzcGlu YW5kLT5pZC5kYXRhKTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9Cj4gKwoKSSB0aGlu ayB0aGlzIGNvdWxkIGJlIGFkZGVkIGluIGEgc2VwYXJhdGUgcGF0Y2guIElzIHRoaXMgdGhlIG9u bHkKY29uZGl0aW9uIHdoZXJlIHdlIHdhbnQgdG8gcmVhZCB0aGUgcGFyYW0gcGFnZSA/Cgo+ICAJ aWYgKG5hbmQtPm1lbW9yZy5udGFyZ2V0cyA+IDEgJiYgIXNwaW5hbmQtPnNlbGVjdF90YXJnZXQp IHsKPiAgCQlkZXZfZXJyKGRldiwKPiAgCQkJIlNQSSBOQU5EcyB3aXRoIG1vcmUgdGhhbiBvbmUg ZGllIG11c3QgaW1wbGVtZW50IC0+c2VsZWN0X3RhcmdldCgpXG4iKTsKPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5o Cj4gaW5kZXggZDA5M2QyMzdmYmE4Li41N2IzYjViMDc1ZjIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVk ZS9saW51eC9tdGQvc3BpbmFuZC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5o Cj4gQEAgLTE3OSw2ICsxNzksOCBAQCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXJfb3BzIHsK PiAgCWludCAoKmRldGVjdCkoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kKTsKPiAgCWlu dCAoKmluaXQpKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCk7Cj4gIAl2b2lkICgqY2xl YW51cCkoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kKTsKPiArCXZvaWQgKCpmaXh1cF9w YXJhbV9wYWdlKShzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQsCj4gKwkJCQkgc3RydWN0 IG5hbmRfb25maV9wYXJhbXMgKnApOwoKWW91IGNvdWxkIHByb2JhYmx5IGFkZCB0aGlzIGhvb2sg aW4gYSBzZXBhcmF0ZSBwYXRjaC4KCj4gIH07Cj4gIAo+ICAvKioKPiBAQCAtNDI5LDQgKzQzMSw3 IEBAIGludCBzcGluYW5kX21hdGNoX2FuZF9pbml0KHN0cnVjdCBzcGluYW5kX2RldmljZSAqZGV2 LAo+ICBpbnQgc3BpbmFuZF91cGRfY2ZnKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCwg dTggbWFzaywgdTggdmFsKTsKPiAgaW50IHNwaW5hbmRfc2VsZWN0X3RhcmdldChzdHJ1Y3Qgc3Bp bmFuZF9kZXZpY2UgKnNwaW5hbmQsIHVuc2lnbmVkIGludCB0YXJnZXQpOwo+ICAKPiArY29uc3Qg c3RydWN0IHNwaV9tZW1fb3AgKnNwaW5hbmRfc2VsZWN0X29wX3ZhcmlhbnQoc3RydWN0IHNwaW5h bmRfZGV2aWNlICpzcGluYW5kLAo+ICsJICAgY29uc3Qgc3RydWN0IHNwaW5hbmRfb3BfdmFyaWFu dHMgKnZhcmlhbnRzKTsKCldoYXQgaXMgaXQgZm9yPwoKPiArCj4gICNlbmRpZiAvKiBfX0xJTlVY X01URF9TUElOQU5EX0ggKi8KCgoKClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9u IG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LW10ZC8K 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 X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25FE9C43219 for ; Tue, 30 Apr 2019 07:55:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E374B21670 for ; Tue, 30 Apr 2019 07:55:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726452AbfD3HzM convert rfc822-to-8bit (ORCPT ); Tue, 30 Apr 2019 03:55:12 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:49545 "EHLO relay5-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725938AbfD3HzM (ORCPT ); Tue, 30 Apr 2019 03:55:12 -0400 X-Originating-IP: 90.88.147.33 Received: from xps13 (aaubervilliers-681-1-27-33.w90-88.abo.wanadoo.fr [90.88.147.33]) (Authenticated sender: miquel.raynal@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 7D7A41C0015; Tue, 30 Apr 2019 07:55:09 +0000 (UTC) Date: Tue, 30 Apr 2019 09:55:08 +0200 From: Miquel Raynal To: "Shivamurthy Shastri (sshivamurthy)" Cc: Boris Brezillon , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Richard Weinberger , David Woodhouse , Brian Norris , "Marek Vasut" , Frieder Schrempf Subject: Re: [PATCH 3/4] mtd: spinand: Enabled support to detect parameter page Message-ID: <20190430095508.706fa125@xps13> In-Reply-To: References: Organization: Bootlin X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Shivamurthy, "Shivamurthy Shastri (sshivamurthy)" wrote on Tue, 26 Mar 2019 10:52:00 +0000: > Some of the SPI NAND devices has parameter page which is similar to ONFI > table. > > But, it may not be self sufficient to propagate all the required > parameters. Fixup function has been added in struct manufacturer to > accommodate this. > > Signed-off-by: Shivamurthy Shastri > --- > drivers/mtd/nand/spi/core.c | 113 +++++++++++++++++++++++++++++++++++- > include/linux/mtd/spinand.h | 5 ++ > 2 files changed, 117 insertions(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c > index 985ad52cdaa7..40882a1d2bc1 100644 > --- a/drivers/mtd/nand/spi/core.c > +++ b/drivers/mtd/nand/spi/core.c > @@ -574,6 +574,108 @@ static int spinand_lock_block(struct spinand_device *spinand, u8 lock) > return spinand_write_reg_op(spinand, REG_BLOCK_LOCK, lock); > } > > +/** > + * spinand_read_param_page_op - Read parameter page operation > + * @spinand: the spinand device > + * @page: page number where parameter page tables can be found > + * @parameters: buffer used to store the parameter page Does not match the prototype > + * @len: length of the buffer > + * > + * Read parameter page > + * > + * Returns 0 on success, a negative error code otherwise. > + */ > +static int spinand_parameter_page_read(struct nand_device *base, Please use a spinand structure as parameter, you don't need a nand_device here (same for other spinand functions). > + u8 page, void *buf, unsigned int len) > +{ > + struct spinand_device *spinand = nand_to_spinand(base); > + struct spi_mem_op pread_op = SPINAND_PAGE_READ_OP(page); > + struct spi_mem_op pread_cache_op = > + SPINAND_PAGE_READ_FROM_CACHE_OP(false, > + 0, > + 1, > + buf, > + len); > + u8 feature; > + u8 status; > + int ret; > + > + if (len && !buf) > + return -EINVAL; > + > + ret = spinand_read_reg_op(spinand, REG_CFG, > + &feature); > + if (ret) > + return ret; > + > + /* CFG_OTP_ENABLE is used to enable parameter page access */ > + feature |= CFG_OTP_ENABLE; > + > + spinand_write_reg_op(spinand, REG_CFG, feature); > + > + ret = spi_mem_exec_op(spinand->spimem, &pread_op); > + if (ret) > + return ret; > + > + ret = spinand_wait(spinand, &status); > + if (ret < 0) > + return ret; > + > + ret = spi_mem_exec_op(spinand->spimem, &pread_cache_op); > + if (ret) > + return ret; > + > + ret = spinand_read_reg_op(spinand, REG_CFG, > + &feature); > + if (ret) > + return ret; > + > + feature &= ~CFG_OTP_ENABLE; > + > + spinand_write_reg_op(spinand, REG_CFG, feature); > + > + return 1; Should return 0 > +} > + > +static int check_version(struct nand_device *base, > + struct nand_onfi_params *p, int *onfi_version) > +{ > + /** I don't think you need these /** here, just use /* > + * SPI NAND do not support ONFI standard What about: /* * SPI NANDs do not necessarily support ONFI standard, but * parameter page looks the same as an ONFI table. */ > + * But, parameter page looks same as ONFI table > + */ > + if (!le16_to_cpu(p->revision)) > + *onfi_version = 0; > + > + return 1; Functions should return 0 in normal state, not 1. > +} > + > +static int spinand_intf_data(struct nand_device *base, > + struct nand_onfi_params *p) > +{ > + struct spinand_device *spinand = nand_to_spinand(base); > + > + /** > + * Manufacturers may interpret the parameter page differently ^^^^^ extra spaces > + */ One-line comment should be in the form /* */ > + if (spinand->manufacturer->ops->fixup_param_page) > + spinand->manufacturer->ops->fixup_param_page(spinand, p); > + > + return 1; return 0; > +} > + > +static int spinand_param_page_detect(struct spinand_device *spinand) > +{ > + struct nand_device *base = spinand_to_nand(spinand); > + > + base->helper.page = 0x01; > + base->helper.check_revision = check_version; > + base->helper.parameter_page_read = spinand_parameter_page_read; > + base->helper.init_intf_data = spinand_intf_data; > + > + return nand_onfi_detect(base); > +} > + > static int spinand_read_page(struct spinand_device *spinand, > const struct nand_page_io_req *req) > { > @@ -896,7 +998,7 @@ static void spinand_manufacturer_cleanup(struct spinand_device *spinand) > return spinand->manufacturer->ops->cleanup(spinand); > } > > -static const struct spi_mem_op * > +const struct spi_mem_op * > spinand_select_op_variant(struct spinand_device *spinand, > const struct spinand_op_variants *variants) > { > @@ -1012,6 +1114,15 @@ static int spinand_detect(struct spinand_device *spinand) > return ret; > } > > + if (!spinand->base.memorg.pagesize) { > + ret = spinand_param_page_detect(spinand); > + if (ret < 0) { > + dev_err(dev, "no parameter page for %*phN\n", > + SPINAND_MAX_ID_LEN, spinand->id.data); > + return ret; > + } > + } > + I think this could be added in a separate patch. Is this the only condition where we want to read the param page ? > if (nand->memorg.ntargets > 1 && !spinand->select_target) { > dev_err(dev, > "SPI NANDs with more than one die must implement ->select_target()\n"); > diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h > index d093d237fba8..57b3b5b075f2 100644 > --- a/include/linux/mtd/spinand.h > +++ b/include/linux/mtd/spinand.h > @@ -179,6 +179,8 @@ struct spinand_manufacturer_ops { > int (*detect)(struct spinand_device *spinand); > int (*init)(struct spinand_device *spinand); > void (*cleanup)(struct spinand_device *spinand); > + void (*fixup_param_page)(struct spinand_device *spinand, > + struct nand_onfi_params *p); You could probably add this hook in a separate patch. > }; > > /** > @@ -429,4 +431,7 @@ int spinand_match_and_init(struct spinand_device *dev, > int spinand_upd_cfg(struct spinand_device *spinand, u8 mask, u8 val); > int spinand_select_target(struct spinand_device *spinand, unsigned int target); > > +const struct spi_mem_op *spinand_select_op_variant(struct spinand_device *spinand, > + const struct spinand_op_variants *variants); What is it for? > + > #endif /* __LINUX_MTD_SPINAND_H */ Thanks, Miquèl