From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhishek Sahu Subject: [PATCH v5 04/16] mtd: nand: qcom: support for passing flags in DMA helper functions Date: Thu, 17 Aug 2017 17:37:42 +0530 Message-ID: <1502971674-13810-5-git-send-email-absahu@codeaurora.org> References: <1502971674-13810-1-git-send-email-absahu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1502971674-13810-1-git-send-email-absahu@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org To: Boris Brezillon Cc: Archit Taneja , Richard Weinberger , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Abhishek Sahu , linux-mtd@lists.infradead.org, Cyrille Pitchen , Andy Gross , Sricharan R , Brian Norris , David Woodhouse List-Id: linux-arm-msm@vger.kernel.org VGhlIFFQSUMgTkFORCBCQU0gaGFzIG11bHRpcGxlIGZsYWdzIHRvIGNvbnRyb2wgdGhlIHRyYW5z ZmVyLiBUaGlzCnBhdGNoIGFkZHMgZmxhZ3MgcGFyYW1ldGVyIGluIHJlZ2lzdGVyIGFuZCBkYXRh IHRyYW5zZmVyIERNQSBoZWxwZXIKZnVuY3Rpb25zIGFuZCBtb2RpZmllcyBhbGwgdGhlc2UgZnVu Y3Rpb25zIGNhbGwgd2l0aCBhcHByb3ByaWF0ZQpmbGFncyB1c2luZyBmb2xsb3dpbmcgcnVsZQoK MS4gUmVhZCBhbmQgd3JpdGUgY2Fu4oCZdCBnbyBpbiBzaW5nbGUgY29tbWFuZCBkZXNjcmlwdG9y IHNvCiAgIHNlcGFyYXRlIFNHTCBzaG91bGQgYmUgdXNlZC4KMi4gRm9yIHNvbWUgb2YgdGhlIHJl cXVlc3RzLCBOV0QgZmxhZyBzaG91bGQgYmUgc2V0IGluIEJBTQogICBETUEgZGVzY3JpcHRvci4K My4gRm9yIERhdGEgd3JpdGUsIHRoZSBCQU0gaGFzIGludGVybmFsIGJ1ZmZlciBmb3IgZWFjaCBj b2Rld29yZC4KICAgQWxsIHdyaXRlIHJlcXVlc3Qgd2lsbCBtb2RpZnkgdGhlIGRhdGEgaW4gaW50 ZXJuYWwgYnVmZmVyIGFuZAogICB0aGlzIGJ1ZmZlciB3aWxsIGJlIGZsdXNoZWQgdG8gTkFORCBk ZXZpY2Ugb25jZSBFT1QgZmxhZyBpcyBzZXQuCiAgIFNvIGZvciBhbGwgdGhlIHdyaXRlIHJlcXVl c3RzIGluIHNpbmdsZSBjb2Rld29yZCwgdGhlIEVPVCBzaG91bGQKICAgYmUgY2xlYXJlZCBmb3Ig YWxsIHR4IGRhdGEgZGVzY3JpcHRvcnMgZXhjZXB0IHRoZSBsYXN0IG9uZS4KClJldmlld2VkLWJ5 OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBB Ymhpc2hlayBTYWh1IDxhYnNhaHVAY29kZWF1cm9yYS5vcmc+Ci0tLQoKKiBDaGFuZ2VzIGZyb20g djQ6CgoxLiBBZGRlZCBmbGFnIGFyZ3VtZW50IGRlc2NyaXB0aW9uIGluIGZ1bmN0aW9uIGNvbW1l bnQKMi4gTWlub3IgbW9kaWZpY2F0aW9uIGluIHRoZSBjb21tZW50IGdpdmVuIGJlZm9yZQogICAg ICAgI2RlZmluZSBOQU5EX0JBTV9OT19FT1QKMy4gTWlub3IgbW9kaWZpY2F0aW9uIGluIGNvbW1p dCBtZXNzYWdlCgogZHJpdmVycy9tdGQvbmFuZC9xY29tX25hbmRjLmMgfCAxMjkgKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNzcgaW5z ZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFu ZC9xY29tX25hbmRjLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Fjb21fbmFuZGMuYwppbmRleCBmNTJh NjkyLi5jOTIyNjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Fjb21fbmFuZGMuYwor KysgYi9kcml2ZXJzL210ZC9uYW5kL3Fjb21fbmFuZGMuYwpAQCAtMTgxLDYgKzE4MSwxNyBAQAog I2RlZmluZSBRUElDX1BFUl9DV19EQVRBX1NHTAkJOAogCiAvKgorICogRmxhZ3MgdXNlZCBpbiBE TUEgZGVzY3JpcHRvciBwcmVwYXJhdGlvbiBoZWxwZXIgZnVuY3Rpb25zCisgKiAoaS5lLiByZWFk X3JlZ19kbWEvd3JpdGVfcmVnX2RtYS9yZWFkX2RhdGFfZG1hL3dyaXRlX2RhdGFfZG1hKQorICov CisvKiBEb24ndCBzZXQgdGhlIEVPVCBpbiBjdXJyZW50IHR4IEJBTSBzZ2wgKi8KKyNkZWZpbmUg TkFORF9CQU1fTk9fRU9UCQkJQklUKDApCisvKiBTZXQgdGhlIE5XRCBmbGFnIGluIGN1cnJlbnQg QkFNIHNnbCAqLworI2RlZmluZSBOQU5EX0JBTV9OV0QJCQlCSVQoMSkKKy8qIEZpbmlzaCB3cml0 aW5nIGluIHRoZSBjdXJyZW50IEJBTSBzZ2wgYW5kIHN0YXJ0IHdyaXRpbmcgaW4gYW5vdGhlciBC QU0gc2dsICovCisjZGVmaW5lIE5BTkRfQkFNX05FWFRfU0dMCQlCSVQoMikKKworLyoKICAqIFRo aXMgZGF0YSB0eXBlIGNvcnJlc3BvbmRzIHRvIHRoZSBCQU0gdHJhbnNhY3Rpb24gd2hpY2ggd2ls bCBiZSB1c2VkIGZvciBhbGwKICAqIE5BTkQgdHJhbnNmZXJzLgogICogQGNtZF9zZ2wgLSBzZ2wg Zm9yIE5BTkQgQkFNIGNvbW1hbmQgcGlwZQpAQCAtNzI5LDkgKzc0MCwxMCBAQCBzdGF0aWMgaW50 IHByZXBfYWRtX2RtYV9kZXNjKHN0cnVjdCBxY29tX25hbmRfY29udHJvbGxlciAqbmFuZGMsIGJv b2wgcmVhZCwKICAqCiAgKiBAZmlyc3Q6CQlvZmZzZXQgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIGlu IHRoZSBjb250aWd1b3VzIGJsb2NrCiAgKiBAbnVtX3JlZ3M6CQludW1iZXIgb2YgcmVnaXN0ZXJz IHRvIHJlYWQKKyAqIEBmbGFnczoJCWZsYWdzIHRvIGNvbnRyb2wgRE1BIGRlc2NyaXB0b3IgcHJl cGFyYXRpb24KICAqLwogc3RhdGljIGludCByZWFkX3JlZ19kbWEoc3RydWN0IHFjb21fbmFuZF9j b250cm9sbGVyICpuYW5kYywgaW50IGZpcnN0LAotCQkJaW50IG51bV9yZWdzKQorCQkJaW50IG51 bV9yZWdzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJYm9vbCBmbG93X2NvbnRyb2wgPSBmYWxz ZTsKIAl2b2lkICp2YWRkcjsKQEAgLTc1Myw5ICs3NjUsMTAgQEAgc3RhdGljIGludCByZWFkX3Jl Z19kbWEoc3RydWN0IHFjb21fbmFuZF9jb250cm9sbGVyICpuYW5kYywgaW50IGZpcnN0LAogICoK ICAqIEBmaXJzdDoJCW9mZnNldCBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgaW4gdGhlIGNvbnRpZ3Vv dXMgYmxvY2sKICAqIEBudW1fcmVnczoJCW51bWJlciBvZiByZWdpc3RlcnMgdG8gd3JpdGUKKyAq IEBmbGFnczoJCWZsYWdzIHRvIGNvbnRyb2wgRE1BIGRlc2NyaXB0b3IgcHJlcGFyYXRpb24KICAq Lwogc3RhdGljIGludCB3cml0ZV9yZWdfZG1hKHN0cnVjdCBxY29tX25hbmRfY29udHJvbGxlciAq bmFuZGMsIGludCBmaXJzdCwKLQkJCSBpbnQgbnVtX3JlZ3MpCisJCQkgaW50IG51bV9yZWdzLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJYm9vbCBmbG93X2NvbnRyb2wgPSBmYWxzZTsKIAlzdHJ1 Y3QgbmFuZGNfcmVncyAqcmVncyA9IG5hbmRjLT5yZWdzOwpAQCAtNzY3LDYgKzc4MCw5IEBAIHN0 YXRpYyBpbnQgd3JpdGVfcmVnX2RtYShzdHJ1Y3QgcWNvbV9uYW5kX2NvbnRyb2xsZXIgKm5hbmRj LCBpbnQgZmlyc3QsCiAJaWYgKGZpcnN0ID09IE5BTkRfRkxBU0hfQ01EKQogCQlmbG93X2NvbnRy b2wgPSB0cnVlOwogCisJaWYgKGZpcnN0ID09IE5BTkRfRVhFQ19DTUQpCisJCWZsYWdzIHw9IE5B TkRfQkFNX05XRDsKKwogCWlmIChmaXJzdCA9PSBOQU5EX0RFVl9DTUQxX1JFU1RPUkUpCiAJCWZp cnN0ID0gTkFORF9ERVZfQ01EMTsKIApAQCAtNzg2LDkgKzgwMiwxMCBAQCBzdGF0aWMgaW50IHdy aXRlX3JlZ19kbWEoc3RydWN0IHFjb21fbmFuZF9jb250cm9sbGVyICpuYW5kYywgaW50IGZpcnN0 LAogICogQHJlZ19vZmY6CQlvZmZzZXQgd2l0aGluIHRoZSBjb250cm9sbGVyJ3MgZGF0YSBidWZm ZXIKICAqIEB2YWRkcjoJCXZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdlIHdhbnQgdG8g d3JpdGUgdG8KICAqIEBzaXplOgkJRE1BIHRyYW5zYWN0aW9uIHNpemUgaW4gYnl0ZXMKKyAqIEBm bGFnczoJCWZsYWdzIHRvIGNvbnRyb2wgRE1BIGRlc2NyaXB0b3IgcHJlcGFyYXRpb24KICAqLwog c3RhdGljIGludCByZWFkX2RhdGFfZG1hKHN0cnVjdCBxY29tX25hbmRfY29udHJvbGxlciAqbmFu ZGMsIGludCByZWdfb2ZmLAotCQkJIGNvbnN0IHU4ICp2YWRkciwgaW50IHNpemUpCisJCQkgY29u c3QgdTggKnZhZGRyLCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXJldHVybiBw cmVwX2FkbV9kbWFfZGVzYyhuYW5kYywgdHJ1ZSwgcmVnX29mZiwgdmFkZHIsIHNpemUsIGZhbHNl KTsKIH0KQEAgLTgwMCw5ICs4MTcsMTAgQEAgc3RhdGljIGludCByZWFkX2RhdGFfZG1hKHN0cnVj dCBxY29tX25hbmRfY29udHJvbGxlciAqbmFuZGMsIGludCByZWdfb2ZmLAogICogQHJlZ19vZmY6 CQlvZmZzZXQgd2l0aGluIHRoZSBjb250cm9sbGVyJ3MgZGF0YSBidWZmZXIKICAqIEB2YWRkcjoJ CXZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdlIHdhbnQgdG8gcmVhZCBmcm9tCiAgKiBA c2l6ZToJCURNQSB0cmFuc2FjdGlvbiBzaXplIGluIGJ5dGVzCisgKiBAZmxhZ3M6CQlmbGFncyB0 byBjb250cm9sIERNQSBkZXNjcmlwdG9yIHByZXBhcmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgd3Jp dGVfZGF0YV9kbWEoc3RydWN0IHFjb21fbmFuZF9jb250cm9sbGVyICpuYW5kYywgaW50IHJlZ19v ZmYsCi0JCQkgIGNvbnN0IHU4ICp2YWRkciwgaW50IHNpemUpCisJCQkgIGNvbnN0IHU4ICp2YWRk ciwgaW50IHNpemUsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlyZXR1cm4gcHJlcF9hZG1fZG1h X2Rlc2MobmFuZGMsIGZhbHNlLCByZWdfb2ZmLCB2YWRkciwgc2l6ZSwgZmFsc2UpOwogfQpAQCAt ODEzLDkgKzgzMSw5IEBAIHN0YXRpYyBpbnQgd3JpdGVfZGF0YV9kbWEoc3RydWN0IHFjb21fbmFu ZF9jb250cm9sbGVyICpuYW5kYywgaW50IHJlZ19vZmYsCiAgKi8KIHN0YXRpYyB2b2lkIGNvbmZp Z19uYW5kX3BhZ2VfcmVhZChzdHJ1Y3QgcWNvbV9uYW5kX2NvbnRyb2xsZXIgKm5hbmRjKQogewot CXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfQUREUjAsIDIpOwotCXdyaXRlX3JlZ19kbWEobmFu ZGMsIE5BTkRfREVWMF9DRkcwLCAzKTsKLQl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0VCSTJf RUNDX0JVRl9DRkcsIDEpOworCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfQUREUjAsIDIsIDAp OworCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfREVWMF9DRkcwLCAzLCAwKTsKKwl3cml0ZV9y ZWdfZG1hKG5hbmRjLCBOQU5EX0VCSTJfRUNDX0JVRl9DRkcsIDEsIDApOwogfQogCiAvKgpAQCAt ODI0LDExICs4NDIsMTIgQEAgc3RhdGljIHZvaWQgY29uZmlnX25hbmRfcGFnZV9yZWFkKHN0cnVj dCBxY29tX25hbmRfY29udHJvbGxlciAqbmFuZGMpCiAgKi8KIHN0YXRpYyB2b2lkIGNvbmZpZ19u YW5kX2N3X3JlYWQoc3RydWN0IHFjb21fbmFuZF9jb250cm9sbGVyICpuYW5kYykKIHsKLQl3cml0 ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0ZMQVNIX0NNRCwgMSk7Ci0Jd3JpdGVfcmVnX2RtYShuYW5k YywgTkFORF9FWEVDX0NNRCwgMSk7CisJd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9GTEFTSF9D TUQsIDEsIE5BTkRfQkFNX05FWFRfU0dMKTsKKwl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0VY RUNfQ01ELCAxLCBOQU5EX0JBTV9ORVhUX1NHTCk7CiAKLQlyZWFkX3JlZ19kbWEobmFuZGMsIE5B TkRfRkxBU0hfU1RBVFVTLCAyKTsKLQlyZWFkX3JlZ19kbWEobmFuZGMsIE5BTkRfRVJBU0VEX0NX X0RFVEVDVF9TVEFUVVMsIDEpOworCXJlYWRfcmVnX2RtYShuYW5kYywgTkFORF9GTEFTSF9TVEFU VVMsIDIsIDApOworCXJlYWRfcmVnX2RtYShuYW5kYywgTkFORF9FUkFTRURfQ1dfREVURUNUX1NU QVRVUywgMSwKKwkJICAgICBOQU5EX0JBTV9ORVhUX1NHTCk7CiB9CiAKIC8qCkBAIC04NDcsOSAr ODY2LDEwIEBAIHN0YXRpYyB2b2lkIGNvbmZpZ19uYW5kX3NpbmdsZV9jd19wYWdlX3JlYWQoc3Ry dWN0IHFjb21fbmFuZF9jb250cm9sbGVyICpuYW5kYykKICAqLwogc3RhdGljIHZvaWQgY29uZmln X25hbmRfcGFnZV93cml0ZShzdHJ1Y3QgcWNvbV9uYW5kX2NvbnRyb2xsZXIgKm5hbmRjKQogewot CXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfQUREUjAsIDIpOwotCXdyaXRlX3JlZ19kbWEobmFu ZGMsIE5BTkRfREVWMF9DRkcwLCAzKTsKLQl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0VCSTJf RUNDX0JVRl9DRkcsIDEpOworCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfQUREUjAsIDIsIDAp OworCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfREVWMF9DRkcwLCAzLCAwKTsKKwl3cml0ZV9y ZWdfZG1hKG5hbmRjLCBOQU5EX0VCSTJfRUNDX0JVRl9DRkcsIDEsCisJCSAgICAgIE5BTkRfQkFN X05FWFRfU0dMKTsKIH0KIAogLyoKQEAgLTg1OCwxMyArODc4LDEzIEBAIHN0YXRpYyB2b2lkIGNv bmZpZ19uYW5kX3BhZ2Vfd3JpdGUoc3RydWN0IHFjb21fbmFuZF9jb250cm9sbGVyICpuYW5kYykK ICAqLwogc3RhdGljIHZvaWQgY29uZmlnX25hbmRfY3dfd3JpdGUoc3RydWN0IHFjb21fbmFuZF9j b250cm9sbGVyICpuYW5kYykKIHsKLQl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0ZMQVNIX0NN RCwgMSk7Ci0Jd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9FWEVDX0NNRCwgMSk7CisJd3JpdGVf cmVnX2RtYShuYW5kYywgTkFORF9GTEFTSF9DTUQsIDEsIE5BTkRfQkFNX05FWFRfU0dMKTsKKwl3 cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0VYRUNfQ01ELCAxLCBOQU5EX0JBTV9ORVhUX1NHTCk7 CiAKLQlyZWFkX3JlZ19kbWEobmFuZGMsIE5BTkRfRkxBU0hfU1RBVFVTLCAxKTsKKwlyZWFkX3Jl Z19kbWEobmFuZGMsIE5BTkRfRkxBU0hfU1RBVFVTLCAxLCBOQU5EX0JBTV9ORVhUX1NHTCk7CiAK LQl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0ZMQVNIX1NUQVRVUywgMSk7Ci0Jd3JpdGVfcmVn X2RtYShuYW5kYywgTkFORF9SRUFEX1NUQVRVUywgMSk7CisJd3JpdGVfcmVnX2RtYShuYW5kYywg TkFORF9GTEFTSF9TVEFUVVMsIDEsIDApOworCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfUkVB RF9TVEFUVVMsIDEsIE5BTkRfQkFNX05FWFRfU0dMKTsKIH0KIAogLyoKQEAgLTkxMSw4ICs5MzEs OCBAQCBzdGF0aWMgaW50IG5hbmRjX3BhcmFtKHN0cnVjdCBxY29tX25hbmRfaG9zdCAqaG9zdCkK IAluYW5kY19zZXRfcmVnKG5hbmRjLCBOQU5EX0RFVl9DTUQxX1JFU1RPUkUsIG5hbmRjLT5jbWQx KTsKIAluYW5kY19zZXRfcmVnKG5hbmRjLCBOQU5EX0RFVl9DTURfVkxEX1JFU1RPUkUsIG5hbmRj LT52bGQpOwogCi0Jd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9ERVZfQ01EX1ZMRCwgMSk7Ci0J d3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9ERVZfQ01EMSwgMSk7CisJd3JpdGVfcmVnX2RtYShu YW5kYywgTkFORF9ERVZfQ01EX1ZMRCwgMSwgMCk7CisJd3JpdGVfcmVnX2RtYShuYW5kYywgTkFO RF9ERVZfQ01EMSwgMSwgTkFORF9CQU1fTkVYVF9TR0wpOwogCiAJbmFuZGMtPmJ1Zl9jb3VudCA9 IDUxMjsKIAltZW1zZXQobmFuZGMtPmRhdGFfYnVmZmVyLCAweGZmLCBuYW5kYy0+YnVmX2NvdW50 KTsKQEAgLTkyMCwxMSArOTQwLDExIEBAIHN0YXRpYyBpbnQgbmFuZGNfcGFyYW0oc3RydWN0IHFj b21fbmFuZF9ob3N0ICpob3N0KQogCWNvbmZpZ19uYW5kX3NpbmdsZV9jd19wYWdlX3JlYWQobmFu ZGMpOwogCiAJcmVhZF9kYXRhX2RtYShuYW5kYywgRkxBU0hfQlVGX0FDQywgbmFuZGMtPmRhdGFf YnVmZmVyLAotCQkgICAgICBuYW5kYy0+YnVmX2NvdW50KTsKKwkJICAgICAgbmFuZGMtPmJ1Zl9j b3VudCwgMCk7CiAKIAkvKiByZXN0b3JlIENNRDEgYW5kIFZMRCByZWdzICovCi0Jd3JpdGVfcmVn X2RtYShuYW5kYywgTkFORF9ERVZfQ01EMV9SRVNUT1JFLCAxKTsKLQl3cml0ZV9yZWdfZG1hKG5h bmRjLCBOQU5EX0RFVl9DTURfVkxEX1JFU1RPUkUsIDEpOworCXdyaXRlX3JlZ19kbWEobmFuZGMs IE5BTkRfREVWX0NNRDFfUkVTVE9SRSwgMSwgMCk7CisJd3JpdGVfcmVnX2RtYShuYW5kYywgTkFO RF9ERVZfQ01EX1ZMRF9SRVNUT1JFLCAxLCBOQU5EX0JBTV9ORVhUX1NHTCk7CiAKIAlyZXR1cm4g MDsKIH0KQEAgLTk0NiwxNCArOTY2LDE0IEBAIHN0YXRpYyBpbnQgZXJhc2VfYmxvY2soc3RydWN0 IHFjb21fbmFuZF9ob3N0ICpob3N0LCBpbnQgcGFnZV9hZGRyKQogCW5hbmRjX3NldF9yZWcobmFu ZGMsIE5BTkRfRkxBU0hfU1RBVFVTLCBob3N0LT5jbHJmbGFzaHN0YXR1cyk7CiAJbmFuZGNfc2V0 X3JlZyhuYW5kYywgTkFORF9SRUFEX1NUQVRVUywgaG9zdC0+Y2xycmVhZHN0YXR1cyk7CiAKLQl3 cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0ZMQVNIX0NNRCwgMyk7Ci0Jd3JpdGVfcmVnX2RtYShu YW5kYywgTkFORF9ERVYwX0NGRzAsIDIpOwotCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfRVhF Q19DTUQsIDEpOworCXdyaXRlX3JlZ19kbWEobmFuZGMsIE5BTkRfRkxBU0hfQ01ELCAzLCBOQU5E X0JBTV9ORVhUX1NHTCk7CisJd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9ERVYwX0NGRzAsIDIs IE5BTkRfQkFNX05FWFRfU0dMKTsKKwl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0VYRUNfQ01E LCAxLCBOQU5EX0JBTV9ORVhUX1NHTCk7CiAKLQlyZWFkX3JlZ19kbWEobmFuZGMsIE5BTkRfRkxB U0hfU1RBVFVTLCAxKTsKKwlyZWFkX3JlZ19kbWEobmFuZGMsIE5BTkRfRkxBU0hfU1RBVFVTLCAx LCBOQU5EX0JBTV9ORVhUX1NHTCk7CiAKLQl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0ZMQVNI X1NUQVRVUywgMSk7Ci0Jd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9SRUFEX1NUQVRVUywgMSk7 CisJd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9GTEFTSF9TVEFUVVMsIDEsIDApOworCXdyaXRl X3JlZ19kbWEobmFuZGMsIE5BTkRfUkVBRF9TVEFUVVMsIDEsIE5BTkRfQkFNX05FWFRfU0dMKTsK IAogCXJldHVybiAwOwogfQpAQCAtOTczLDEwICs5OTMsMTAgQEAgc3RhdGljIGludCByZWFkX2lk KHN0cnVjdCBxY29tX25hbmRfaG9zdCAqaG9zdCwgaW50IGNvbHVtbikKIAluYW5kY19zZXRfcmVn KG5hbmRjLCBOQU5EX0ZMQVNIX0NISVBfU0VMRUNULCBETV9FTik7CiAJbmFuZGNfc2V0X3JlZyhu YW5kYywgTkFORF9FWEVDX0NNRCwgMSk7CiAKLQl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0ZM QVNIX0NNRCwgNCk7Ci0Jd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9FWEVDX0NNRCwgMSk7CisJ d3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9GTEFTSF9DTUQsIDQsIE5BTkRfQkFNX05FWFRfU0dM KTsKKwl3cml0ZV9yZWdfZG1hKG5hbmRjLCBOQU5EX0VYRUNfQ01ELCAxLCBOQU5EX0JBTV9ORVhU X1NHTCk7CiAKLQlyZWFkX3JlZ19kbWEobmFuZGMsIE5BTkRfUkVBRF9JRCwgMSk7CisJcmVhZF9y ZWdfZG1hKG5hbmRjLCBOQU5EX1JFQURfSUQsIDEsIE5BTkRfQkFNX05FWFRfU0dMKTsKIAogCXJl dHVybiAwOwogfQpAQCAtOTkwLDEwICsxMDEwLDEwIEBAIHN0YXRpYyBpbnQgcmVzZXQoc3RydWN0 IHFjb21fbmFuZF9ob3N0ICpob3N0KQogCW5hbmRjX3NldF9yZWcobmFuZGMsIE5BTkRfRkxBU0hf Q01ELCBSRVNFVF9ERVZJQ0UpOwogCW5hbmRjX3NldF9yZWcobmFuZGMsIE5BTkRfRVhFQ19DTUQs IDEpOwogCi0Jd3JpdGVfcmVnX2RtYShuYW5kYywgTkFORF9GTEFTSF9DTUQsIDEpOwotCXdyaXRl X3JlZ19kbWEobmFuZGMsIE5BTkRfRVhFQ19DTUQsIDEpOworCXdyaXRlX3JlZ19kbWEobmFuZGMs IE5BTkRfRkxBU0hfQ01ELCAxLCBOQU5EX0JBTV9ORVhUX1NHTCk7CisJd3JpdGVfcmVnX2RtYShu YW5kYywgTkFORF9FWEVDX0NNRCwgMSwgTkFORF9CQU1fTkVYVF9TR0wpOwogCi0JcmVhZF9yZWdf ZG1hKG5hbmRjLCBOQU5EX0ZMQVNIX1NUQVRVUywgMSk7CisJcmVhZF9yZWdfZG1hKG5hbmRjLCBO QU5EX0ZMQVNIX1NUQVRVUywgMSwgTkFORF9CQU1fTkVYVF9TR0wpOwogCiAJcmV0dXJuIDA7CiB9 CkBAIC0xMzg5LDcgKzE0MDksNyBAQCBzdGF0aWMgaW50IHJlYWRfcGFnZV9lY2Moc3RydWN0IHFj b21fbmFuZF9ob3N0ICpob3N0LCB1OCAqZGF0YV9idWYsCiAKIAkJaWYgKGRhdGFfYnVmKQogCQkJ cmVhZF9kYXRhX2RtYShuYW5kYywgRkxBU0hfQlVGX0FDQywgZGF0YV9idWYsCi0JCQkJICAgICAg ZGF0YV9zaXplKTsKKwkJCQkgICAgICBkYXRhX3NpemUsIDApOwogCiAJCS8qCiAJCSAqIHdoZW4g ZWNjIGlzIGVuYWJsZWQsIHRoZSBjb250cm9sbGVyIGRvZXNuJ3QgcmVhZCB0aGUgcmVhbApAQCAt MTQwNSw3ICsxNDI1LDcgQEAgc3RhdGljIGludCByZWFkX3BhZ2VfZWNjKHN0cnVjdCBxY29tX25h bmRfaG9zdCAqaG9zdCwgdTggKmRhdGFfYnVmLAogCQkJCSpvb2JfYnVmKysgPSAweGZmOwogCiAJ CQlyZWFkX2RhdGFfZG1hKG5hbmRjLCBGTEFTSF9CVUZfQUNDICsgZGF0YV9zaXplLAotCQkJCSAg ICAgIG9vYl9idWYsIG9vYl9zaXplKTsKKwkJCQkgICAgICBvb2JfYnVmLCBvb2Jfc2l6ZSwgMCk7 CiAJCX0KIAogCQlpZiAoZGF0YV9idWYpCkBAIC0xNDQ3LDcgKzE0NjcsNyBAQCBzdGF0aWMgaW50 IGNvcHlfbGFzdF9jdyhzdHJ1Y3QgcWNvbV9uYW5kX2hvc3QgKmhvc3QsIGludCBwYWdlKQogCiAJ Y29uZmlnX25hbmRfc2luZ2xlX2N3X3BhZ2VfcmVhZChuYW5kYyk7CiAKLQlyZWFkX2RhdGFfZG1h KG5hbmRjLCBGTEFTSF9CVUZfQUNDLCBuYW5kYy0+ZGF0YV9idWZmZXIsIHNpemUpOworCXJlYWRf ZGF0YV9kbWEobmFuZGMsIEZMQVNIX0JVRl9BQ0MsIG5hbmRjLT5kYXRhX2J1ZmZlciwgc2l6ZSwg MCk7CiAKIAlyZXQgPSBzdWJtaXRfZGVzY3MobmFuZGMpOwogCWlmIChyZXQpCkBAIC0xNTE2LDE5 ICsxNTM2LDE5IEBAIHN0YXRpYyBpbnQgcWNvbV9uYW5kY19yZWFkX3BhZ2VfcmF3KHN0cnVjdCBt dGRfaW5mbyAqbXRkLAogCiAJCWNvbmZpZ19uYW5kX2N3X3JlYWQobmFuZGMpOwogCi0JCXJlYWRf ZGF0YV9kbWEobmFuZGMsIHJlZ19vZmYsIGRhdGFfYnVmLCBkYXRhX3NpemUxKTsKKwkJcmVhZF9k YXRhX2RtYShuYW5kYywgcmVnX29mZiwgZGF0YV9idWYsIGRhdGFfc2l6ZTEsIDApOwogCQlyZWdf b2ZmICs9IGRhdGFfc2l6ZTE7CiAJCWRhdGFfYnVmICs9IGRhdGFfc2l6ZTE7CiAKLQkJcmVhZF9k YXRhX2RtYShuYW5kYywgcmVnX29mZiwgb29iX2J1Ziwgb29iX3NpemUxKTsKKwkJcmVhZF9kYXRh X2RtYShuYW5kYywgcmVnX29mZiwgb29iX2J1Ziwgb29iX3NpemUxLCAwKTsKIAkJcmVnX29mZiAr PSBvb2Jfc2l6ZTE7CiAJCW9vYl9idWYgKz0gb29iX3NpemUxOwogCi0JCXJlYWRfZGF0YV9kbWEo bmFuZGMsIHJlZ19vZmYsIGRhdGFfYnVmLCBkYXRhX3NpemUyKTsKKwkJcmVhZF9kYXRhX2RtYShu YW5kYywgcmVnX29mZiwgZGF0YV9idWYsIGRhdGFfc2l6ZTIsIDApOwogCQlyZWdfb2ZmICs9IGRh dGFfc2l6ZTI7CiAJCWRhdGFfYnVmICs9IGRhdGFfc2l6ZTI7CiAKLQkJcmVhZF9kYXRhX2RtYShu YW5kYywgcmVnX29mZiwgb29iX2J1Ziwgb29iX3NpemUyKTsKKwkJcmVhZF9kYXRhX2RtYShuYW5k YywgcmVnX29mZiwgb29iX2J1Ziwgb29iX3NpemUyLCAwKTsKIAkJb29iX2J1ZiArPSBvb2Jfc2l6 ZTI7CiAJfQogCkBAIC0xNTk1LDcgKzE2MTUsOCBAQCBzdGF0aWMgaW50IHFjb21fbmFuZGNfd3Jp dGVfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJ fQogCiAKLQkJd3JpdGVfZGF0YV9kbWEobmFuZGMsIEZMQVNIX0JVRl9BQ0MsIGRhdGFfYnVmLCBk YXRhX3NpemUpOworCQl3cml0ZV9kYXRhX2RtYShuYW5kYywgRkxBU0hfQlVGX0FDQywgZGF0YV9i dWYsIGRhdGFfc2l6ZSwKKwkJCSAgICAgICBpID09IChlY2MtPnN0ZXBzIC0gMSkgPyBOQU5EX0JB TV9OT19FT1QgOiAwKTsKIAogCQkvKgogCQkgKiB3aGVuIEVDQyBpcyBlbmFibGVkLCB3ZSBkb24n dCByZWFsbHkgbmVlZCB0byB3cml0ZSBhbnl0aGluZwpAQCAtMTYwOCw3ICsxNjI5LDcgQEAgc3Rh dGljIGludCBxY29tX25hbmRjX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsCiAJCQlvb2JfYnVmICs9IGhvc3QtPmJibV9zaXplOwogCiAJCQl3 cml0ZV9kYXRhX2RtYShuYW5kYywgRkxBU0hfQlVGX0FDQyArIGRhdGFfc2l6ZSwKLQkJCQkgICAg ICAgb29iX2J1Ziwgb29iX3NpemUpOworCQkJCSAgICAgICBvb2JfYnVmLCBvb2Jfc2l6ZSwgMCk7 CiAJCX0KIAogCQljb25maWdfbmFuZF9jd193cml0ZShuYW5kYyk7CkBAIC0xNjYzLDE5ICsxNjg0 LDIyIEBAIHN0YXRpYyBpbnQgcWNvbV9uYW5kY193cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCwKIAkJCW9vYl9zaXplMiA9IGhvc3QtPmVjY19ieXRlc19odyArIGhvc3QtPnNwYXJl X2J5dGVzOwogCQl9CiAKLQkJd3JpdGVfZGF0YV9kbWEobmFuZGMsIHJlZ19vZmYsIGRhdGFfYnVm LCBkYXRhX3NpemUxKTsKKwkJd3JpdGVfZGF0YV9kbWEobmFuZGMsIHJlZ19vZmYsIGRhdGFfYnVm LCBkYXRhX3NpemUxLAorCQkJICAgICAgIE5BTkRfQkFNX05PX0VPVCk7CiAJCXJlZ19vZmYgKz0g ZGF0YV9zaXplMTsKIAkJZGF0YV9idWYgKz0gZGF0YV9zaXplMTsKIAotCQl3cml0ZV9kYXRhX2Rt YShuYW5kYywgcmVnX29mZiwgb29iX2J1Ziwgb29iX3NpemUxKTsKKwkJd3JpdGVfZGF0YV9kbWEo bmFuZGMsIHJlZ19vZmYsIG9vYl9idWYsIG9vYl9zaXplMSwKKwkJCSAgICAgICBOQU5EX0JBTV9O T19FT1QpOwogCQlyZWdfb2ZmICs9IG9vYl9zaXplMTsKIAkJb29iX2J1ZiArPSBvb2Jfc2l6ZTE7 CiAKLQkJd3JpdGVfZGF0YV9kbWEobmFuZGMsIHJlZ19vZmYsIGRhdGFfYnVmLCBkYXRhX3NpemUy KTsKKwkJd3JpdGVfZGF0YV9kbWEobmFuZGMsIHJlZ19vZmYsIGRhdGFfYnVmLCBkYXRhX3NpemUy LAorCQkJICAgICAgIE5BTkRfQkFNX05PX0VPVCk7CiAJCXJlZ19vZmYgKz0gZGF0YV9zaXplMjsK IAkJZGF0YV9idWYgKz0gZGF0YV9zaXplMjsKIAotCQl3cml0ZV9kYXRhX2RtYShuYW5kYywgcmVn X29mZiwgb29iX2J1Ziwgb29iX3NpemUyKTsKKwkJd3JpdGVfZGF0YV9kbWEobmFuZGMsIHJlZ19v ZmYsIG9vYl9idWYsIG9vYl9zaXplMiwgMCk7CiAJCW9vYl9idWYgKz0gb29iX3NpemUyOwogCiAJ CWNvbmZpZ19uYW5kX2N3X3dyaXRlKG5hbmRjKTsKQEAgLTE3MjksOCArMTc1Myw4IEBAIHN0YXRp YyBpbnQgcWNvbV9uYW5kY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsCiAJdXBkYXRlX3J3X3JlZ3MoaG9zdCwgMSwgZmFsc2UpOwogCiAJY29u ZmlnX25hbmRfcGFnZV93cml0ZShuYW5kYyk7Ci0Jd3JpdGVfZGF0YV9kbWEobmFuZGMsIEZMQVNI X0JVRl9BQ0MsIG5hbmRjLT5kYXRhX2J1ZmZlciwKLQkJICAgICAgIGRhdGFfc2l6ZSArIG9vYl9z aXplKTsKKwl3cml0ZV9kYXRhX2RtYShuYW5kYywgRkxBU0hfQlVGX0FDQywKKwkJICAgICAgIG5h bmRjLT5kYXRhX2J1ZmZlciwgZGF0YV9zaXplICsgb29iX3NpemUsIDApOwogCWNvbmZpZ19uYW5k X2N3X3dyaXRlKG5hbmRjKTsKIAogCXJldCA9IHN1Ym1pdF9kZXNjcyhuYW5kYyk7CkBAIC0xODE0 LDcgKzE4MzgsOCBAQCBzdGF0aWMgaW50IHFjb21fbmFuZGNfYmxvY2tfbWFya2JhZChzdHJ1Y3Qg bXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIAl1cGRhdGVfcndfcmVncyhob3N0LCAxLCBmYWxz ZSk7CiAKIAljb25maWdfbmFuZF9wYWdlX3dyaXRlKG5hbmRjKTsKLQl3cml0ZV9kYXRhX2RtYShu YW5kYywgRkxBU0hfQlVGX0FDQywgbmFuZGMtPmRhdGFfYnVmZmVyLCBob3N0LT5jd19zaXplKTsK Kwl3cml0ZV9kYXRhX2RtYShuYW5kYywgRkxBU0hfQlVGX0FDQywKKwkJICAgICAgIG5hbmRjLT5k YXRhX2J1ZmZlciwgaG9zdC0+Y3dfc2l6ZSwgMCk7CiAJY29uZmlnX25hbmRfY3dfd3JpdGUobmFu ZGMpOwogCiAJcmV0ID0gc3VibWl0X2Rlc2NzKG5hbmRjKTsKLS0gClFVQUxDT01NIElORElBLCBv biBiZWhhbGYgb2YgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIg b2YgQ29kZSBBdXJvcmEgRm9ydW0sIGhvc3RlZCBieSBUaGUgTGludXggRm91bmRhdGlvbgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51 eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1diJbP-0007Dp-3k for linux-mtd@lists.infradead.org; Thu, 17 Aug 2017 12:08:59 +0000 From: Abhishek Sahu To: Boris Brezillon Cc: David Woodhouse , Brian Norris , Marek Vasut , Richard Weinberger , Cyrille Pitchen , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Andy Gross , Archit Taneja , Sricharan R , Abhishek Sahu Subject: [PATCH v5 04/16] mtd: nand: qcom: support for passing flags in DMA helper functions Date: Thu, 17 Aug 2017 17:37:42 +0530 Message-Id: <1502971674-13810-5-git-send-email-absahu@codeaurora.org> In-Reply-To: <1502971674-13810-1-git-send-email-absahu@codeaurora.org> References: <1502971674-13810-1-git-send-email-absahu@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , The QPIC NAND BAM has multiple flags to control the transfer. This patch adds flags parameter in register and data transfer DMA helper functions and modifies all these functions call with appropriate flags using following rule 1. Read and write can’t go in single command descriptor so separate SGL should be used. 2. For some of the requests, NWD flag should be set in BAM DMA descriptor. 3. For Data write, the BAM has internal buffer for each codeword. All write request will modify the data in internal buffer and this buffer will be flushed to NAND device once EOT flag is set. So for all the write requests in single codeword, the EOT should be cleared for all tx data descriptors except the last one. Reviewed-by: Archit Taneja Signed-off-by: Abhishek Sahu --- * Changes from v4: 1. Added flag argument description in function comment 2. Minor modification in the comment given before #define NAND_BAM_NO_EOT 3. Minor modification in commit message drivers/mtd/nand/qcom_nandc.c | 129 +++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 52 deletions(-) diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c index f52a692..c922617 100644 --- a/drivers/mtd/nand/qcom_nandc.c +++ b/drivers/mtd/nand/qcom_nandc.c @@ -181,6 +181,17 @@ #define QPIC_PER_CW_DATA_SGL 8 /* + * Flags used in DMA descriptor preparation helper functions + * (i.e. read_reg_dma/write_reg_dma/read_data_dma/write_data_dma) + */ +/* Don't set the EOT in current tx BAM sgl */ +#define NAND_BAM_NO_EOT BIT(0) +/* Set the NWD flag in current BAM sgl */ +#define NAND_BAM_NWD BIT(1) +/* Finish writing in the current BAM sgl and start writing in another BAM sgl */ +#define NAND_BAM_NEXT_SGL BIT(2) + +/* * This data type corresponds to the BAM transaction which will be used for all * NAND transfers. * @cmd_sgl - sgl for NAND BAM command pipe @@ -729,9 +740,10 @@ static int prep_adm_dma_desc(struct qcom_nand_controller *nandc, bool read, * * @first: offset of the first register in the contiguous block * @num_regs: number of registers to read + * @flags: flags to control DMA descriptor preparation */ static int read_reg_dma(struct qcom_nand_controller *nandc, int first, - int num_regs) + int num_regs, unsigned int flags) { bool flow_control = false; void *vaddr; @@ -753,9 +765,10 @@ static int read_reg_dma(struct qcom_nand_controller *nandc, int first, * * @first: offset of the first register in the contiguous block * @num_regs: number of registers to write + * @flags: flags to control DMA descriptor preparation */ static int write_reg_dma(struct qcom_nand_controller *nandc, int first, - int num_regs) + int num_regs, unsigned int flags) { bool flow_control = false; struct nandc_regs *regs = nandc->regs; @@ -767,6 +780,9 @@ static int write_reg_dma(struct qcom_nand_controller *nandc, int first, if (first == NAND_FLASH_CMD) flow_control = true; + if (first == NAND_EXEC_CMD) + flags |= NAND_BAM_NWD; + if (first == NAND_DEV_CMD1_RESTORE) first = NAND_DEV_CMD1; @@ -786,9 +802,10 @@ static int write_reg_dma(struct qcom_nand_controller *nandc, int first, * @reg_off: offset within the controller's data buffer * @vaddr: virtual address of the buffer we want to write to * @size: DMA transaction size in bytes + * @flags: flags to control DMA descriptor preparation */ static int read_data_dma(struct qcom_nand_controller *nandc, int reg_off, - const u8 *vaddr, int size) + const u8 *vaddr, int size, unsigned int flags) { return prep_adm_dma_desc(nandc, true, reg_off, vaddr, size, false); } @@ -800,9 +817,10 @@ static int read_data_dma(struct qcom_nand_controller *nandc, int reg_off, * @reg_off: offset within the controller's data buffer * @vaddr: virtual address of the buffer we want to read from * @size: DMA transaction size in bytes + * @flags: flags to control DMA descriptor preparation */ static int write_data_dma(struct qcom_nand_controller *nandc, int reg_off, - const u8 *vaddr, int size) + const u8 *vaddr, int size, unsigned int flags) { return prep_adm_dma_desc(nandc, false, reg_off, vaddr, size, false); } @@ -813,9 +831,9 @@ static int write_data_dma(struct qcom_nand_controller *nandc, int reg_off, */ static void config_nand_page_read(struct qcom_nand_controller *nandc) { - write_reg_dma(nandc, NAND_ADDR0, 2); - write_reg_dma(nandc, NAND_DEV0_CFG0, 3); - write_reg_dma(nandc, NAND_EBI2_ECC_BUF_CFG, 1); + write_reg_dma(nandc, NAND_ADDR0, 2, 0); + write_reg_dma(nandc, NAND_DEV0_CFG0, 3, 0); + write_reg_dma(nandc, NAND_EBI2_ECC_BUF_CFG, 1, 0); } /* @@ -824,11 +842,12 @@ static void config_nand_page_read(struct qcom_nand_controller *nandc) */ static void config_nand_cw_read(struct qcom_nand_controller *nandc) { - write_reg_dma(nandc, NAND_FLASH_CMD, 1); - write_reg_dma(nandc, NAND_EXEC_CMD, 1); + write_reg_dma(nandc, NAND_FLASH_CMD, 1, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); - read_reg_dma(nandc, NAND_FLASH_STATUS, 2); - read_reg_dma(nandc, NAND_ERASED_CW_DETECT_STATUS, 1); + read_reg_dma(nandc, NAND_FLASH_STATUS, 2, 0); + read_reg_dma(nandc, NAND_ERASED_CW_DETECT_STATUS, 1, + NAND_BAM_NEXT_SGL); } /* @@ -847,9 +866,10 @@ static void config_nand_single_cw_page_read(struct qcom_nand_controller *nandc) */ static void config_nand_page_write(struct qcom_nand_controller *nandc) { - write_reg_dma(nandc, NAND_ADDR0, 2); - write_reg_dma(nandc, NAND_DEV0_CFG0, 3); - write_reg_dma(nandc, NAND_EBI2_ECC_BUF_CFG, 1); + write_reg_dma(nandc, NAND_ADDR0, 2, 0); + write_reg_dma(nandc, NAND_DEV0_CFG0, 3, 0); + write_reg_dma(nandc, NAND_EBI2_ECC_BUF_CFG, 1, + NAND_BAM_NEXT_SGL); } /* @@ -858,13 +878,13 @@ static void config_nand_page_write(struct qcom_nand_controller *nandc) */ static void config_nand_cw_write(struct qcom_nand_controller *nandc) { - write_reg_dma(nandc, NAND_FLASH_CMD, 1); - write_reg_dma(nandc, NAND_EXEC_CMD, 1); + write_reg_dma(nandc, NAND_FLASH_CMD, 1, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); - read_reg_dma(nandc, NAND_FLASH_STATUS, 1); + read_reg_dma(nandc, NAND_FLASH_STATUS, 1, NAND_BAM_NEXT_SGL); - write_reg_dma(nandc, NAND_FLASH_STATUS, 1); - write_reg_dma(nandc, NAND_READ_STATUS, 1); + write_reg_dma(nandc, NAND_FLASH_STATUS, 1, 0); + write_reg_dma(nandc, NAND_READ_STATUS, 1, NAND_BAM_NEXT_SGL); } /* @@ -911,8 +931,8 @@ static int nandc_param(struct qcom_nand_host *host) nandc_set_reg(nandc, NAND_DEV_CMD1_RESTORE, nandc->cmd1); nandc_set_reg(nandc, NAND_DEV_CMD_VLD_RESTORE, nandc->vld); - write_reg_dma(nandc, NAND_DEV_CMD_VLD, 1); - write_reg_dma(nandc, NAND_DEV_CMD1, 1); + write_reg_dma(nandc, NAND_DEV_CMD_VLD, 1, 0); + write_reg_dma(nandc, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL); nandc->buf_count = 512; memset(nandc->data_buffer, 0xff, nandc->buf_count); @@ -920,11 +940,11 @@ static int nandc_param(struct qcom_nand_host *host) config_nand_single_cw_page_read(nandc); read_data_dma(nandc, FLASH_BUF_ACC, nandc->data_buffer, - nandc->buf_count); + nandc->buf_count, 0); /* restore CMD1 and VLD regs */ - write_reg_dma(nandc, NAND_DEV_CMD1_RESTORE, 1); - write_reg_dma(nandc, NAND_DEV_CMD_VLD_RESTORE, 1); + write_reg_dma(nandc, NAND_DEV_CMD1_RESTORE, 1, 0); + write_reg_dma(nandc, NAND_DEV_CMD_VLD_RESTORE, 1, NAND_BAM_NEXT_SGL); return 0; } @@ -946,14 +966,14 @@ static int erase_block(struct qcom_nand_host *host, int page_addr) nandc_set_reg(nandc, NAND_FLASH_STATUS, host->clrflashstatus); nandc_set_reg(nandc, NAND_READ_STATUS, host->clrreadstatus); - write_reg_dma(nandc, NAND_FLASH_CMD, 3); - write_reg_dma(nandc, NAND_DEV0_CFG0, 2); - write_reg_dma(nandc, NAND_EXEC_CMD, 1); + write_reg_dma(nandc, NAND_FLASH_CMD, 3, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_DEV0_CFG0, 2, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); - read_reg_dma(nandc, NAND_FLASH_STATUS, 1); + read_reg_dma(nandc, NAND_FLASH_STATUS, 1, NAND_BAM_NEXT_SGL); - write_reg_dma(nandc, NAND_FLASH_STATUS, 1); - write_reg_dma(nandc, NAND_READ_STATUS, 1); + write_reg_dma(nandc, NAND_FLASH_STATUS, 1, 0); + write_reg_dma(nandc, NAND_READ_STATUS, 1, NAND_BAM_NEXT_SGL); return 0; } @@ -973,10 +993,10 @@ static int read_id(struct qcom_nand_host *host, int column) nandc_set_reg(nandc, NAND_FLASH_CHIP_SELECT, DM_EN); nandc_set_reg(nandc, NAND_EXEC_CMD, 1); - write_reg_dma(nandc, NAND_FLASH_CMD, 4); - write_reg_dma(nandc, NAND_EXEC_CMD, 1); + write_reg_dma(nandc, NAND_FLASH_CMD, 4, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); - read_reg_dma(nandc, NAND_READ_ID, 1); + read_reg_dma(nandc, NAND_READ_ID, 1, NAND_BAM_NEXT_SGL); return 0; } @@ -990,10 +1010,10 @@ static int reset(struct qcom_nand_host *host) nandc_set_reg(nandc, NAND_FLASH_CMD, RESET_DEVICE); nandc_set_reg(nandc, NAND_EXEC_CMD, 1); - write_reg_dma(nandc, NAND_FLASH_CMD, 1); - write_reg_dma(nandc, NAND_EXEC_CMD, 1); + write_reg_dma(nandc, NAND_FLASH_CMD, 1, NAND_BAM_NEXT_SGL); + write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); - read_reg_dma(nandc, NAND_FLASH_STATUS, 1); + read_reg_dma(nandc, NAND_FLASH_STATUS, 1, NAND_BAM_NEXT_SGL); return 0; } @@ -1389,7 +1409,7 @@ static int read_page_ecc(struct qcom_nand_host *host, u8 *data_buf, if (data_buf) read_data_dma(nandc, FLASH_BUF_ACC, data_buf, - data_size); + data_size, 0); /* * when ecc is enabled, the controller doesn't read the real @@ -1405,7 +1425,7 @@ static int read_page_ecc(struct qcom_nand_host *host, u8 *data_buf, *oob_buf++ = 0xff; read_data_dma(nandc, FLASH_BUF_ACC + data_size, - oob_buf, oob_size); + oob_buf, oob_size, 0); } if (data_buf) @@ -1447,7 +1467,7 @@ static int copy_last_cw(struct qcom_nand_host *host, int page) config_nand_single_cw_page_read(nandc); - read_data_dma(nandc, FLASH_BUF_ACC, nandc->data_buffer, size); + read_data_dma(nandc, FLASH_BUF_ACC, nandc->data_buffer, size, 0); ret = submit_descs(nandc); if (ret) @@ -1516,19 +1536,19 @@ static int qcom_nandc_read_page_raw(struct mtd_info *mtd, config_nand_cw_read(nandc); - read_data_dma(nandc, reg_off, data_buf, data_size1); + read_data_dma(nandc, reg_off, data_buf, data_size1, 0); reg_off += data_size1; data_buf += data_size1; - read_data_dma(nandc, reg_off, oob_buf, oob_size1); + read_data_dma(nandc, reg_off, oob_buf, oob_size1, 0); reg_off += oob_size1; oob_buf += oob_size1; - read_data_dma(nandc, reg_off, data_buf, data_size2); + read_data_dma(nandc, reg_off, data_buf, data_size2, 0); reg_off += data_size2; data_buf += data_size2; - read_data_dma(nandc, reg_off, oob_buf, oob_size2); + read_data_dma(nandc, reg_off, oob_buf, oob_size2, 0); oob_buf += oob_size2; } @@ -1595,7 +1615,8 @@ static int qcom_nandc_write_page(struct mtd_info *mtd, struct nand_chip *chip, } - write_data_dma(nandc, FLASH_BUF_ACC, data_buf, data_size); + write_data_dma(nandc, FLASH_BUF_ACC, data_buf, data_size, + i == (ecc->steps - 1) ? NAND_BAM_NO_EOT : 0); /* * when ECC is enabled, we don't really need to write anything @@ -1608,7 +1629,7 @@ static int qcom_nandc_write_page(struct mtd_info *mtd, struct nand_chip *chip, oob_buf += host->bbm_size; write_data_dma(nandc, FLASH_BUF_ACC + data_size, - oob_buf, oob_size); + oob_buf, oob_size, 0); } config_nand_cw_write(nandc); @@ -1663,19 +1684,22 @@ static int qcom_nandc_write_page_raw(struct mtd_info *mtd, oob_size2 = host->ecc_bytes_hw + host->spare_bytes; } - write_data_dma(nandc, reg_off, data_buf, data_size1); + write_data_dma(nandc, reg_off, data_buf, data_size1, + NAND_BAM_NO_EOT); reg_off += data_size1; data_buf += data_size1; - write_data_dma(nandc, reg_off, oob_buf, oob_size1); + write_data_dma(nandc, reg_off, oob_buf, oob_size1, + NAND_BAM_NO_EOT); reg_off += oob_size1; oob_buf += oob_size1; - write_data_dma(nandc, reg_off, data_buf, data_size2); + write_data_dma(nandc, reg_off, data_buf, data_size2, + NAND_BAM_NO_EOT); reg_off += data_size2; data_buf += data_size2; - write_data_dma(nandc, reg_off, oob_buf, oob_size2); + write_data_dma(nandc, reg_off, oob_buf, oob_size2, 0); oob_buf += oob_size2; config_nand_cw_write(nandc); @@ -1729,8 +1753,8 @@ static int qcom_nandc_write_oob(struct mtd_info *mtd, struct nand_chip *chip, update_rw_regs(host, 1, false); config_nand_page_write(nandc); - write_data_dma(nandc, FLASH_BUF_ACC, nandc->data_buffer, - data_size + oob_size); + write_data_dma(nandc, FLASH_BUF_ACC, + nandc->data_buffer, data_size + oob_size, 0); config_nand_cw_write(nandc); ret = submit_descs(nandc); @@ -1814,7 +1838,8 @@ static int qcom_nandc_block_markbad(struct mtd_info *mtd, loff_t ofs) update_rw_regs(host, 1, false); config_nand_page_write(nandc); - write_data_dma(nandc, FLASH_BUF_ACC, nandc->data_buffer, host->cw_size); + write_data_dma(nandc, FLASH_BUF_ACC, + nandc->data_buffer, host->cw_size, 0); config_nand_cw_write(nandc); ret = submit_descs(nandc); -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation