From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,1/2] dma-mapping: move dma configuration to bus infrastructure From: Nipun Gupta Message-Id: <1521615323-4752-1-git-send-email-nipun.gupta@nxp.com> Date: Wed, 21 Mar 2018 12:25:22 +0530 To: robin.murphy@arm.com, hch@lst.de, linux@armlinux.org.uk, gregkh@linuxfoundation.org, m.szyprowski@samsung.com Cc: bhelgaas@google.com, zajec5@gmail.com, andy.gross@linaro.org, david.brown@linaro.org, dan.j.williams@intel.com, vinod.koul@intel.com, thierry.reding@gmail.com, robh+dt@kernel.org, frowand.list@gmail.com, jarkko.sakkinen@linux.intel.com, rafael.j.wysocki@intel.com, dmitry.torokhov@gmail.com, johan@kernel.org, msuchanek@suse.de, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-wireless@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, dmaengine@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-pci@vger.kernel.org, bharat.bhushan@nxp.com, leoyang.li@nxp.com, Nipun Gupta List-ID: SXQncyBidXMgc3BlY2lmaWMgYXNwZWN0IHRvIG1hcCBhIGdpdmVuIGRldmljZSBvbiB0aGUgYnVz IGFuZApyZWxldmFudCBmaXJtd2FyZSBkZXNjcmlwdGlvbiBvZiBpdHMgRE1BIGNvbmZpZ3VyYXRp b24uClNvLCB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzICcvZG1hX2NvbmZpZ3VyZS8nIGFzIGJ1cyBj YWxsYmFjawpnaXZpbmcgZmxleGliaWxpdHkgdG8gYnVzc2VzIGZvciBpbXBsZW1lbnRpbmcgaXRz IG93biBkbWEKY29uZmlndXJhdGlvbiBmdW5jdGlvbi4KClRoZSBjaGFuZ2UgZWFzZXMgdGhlIGFk ZGl0aW9uIG9mIG5ldyBidXNzZXMgdy5yLnQuIGFkZGluZyB0aGUgZG1hCmNvbmZpZ3VyYXRpb24g ZnVuY3Rpb25hbGl0eS4KClRoaXMgcGF0Y2ggYWxzbyB1cGRhdGVzIHRoZSBQQ0ksIFBsYXRmb3Jt LCBBQ1BJIGFuZCBob3N0MXggYnVzIHRvCnVzZSBuZXcgaW50cm9kdWNlZCBjYWxsYmFja3MuCgpT dWdnZXN0ZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgpTaWduZWQtb2ZmLWJ5 OiBOaXB1biBHdXB0YSA8bmlwdW4uZ3VwdGFAbnhwLmNvbT4KLS0tCiAtIFRoZSBwYXRjaGVzIGFy ZSBiYXNlZCBvbiB0aGUgY29tbWVudHMgb246CiAgIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5v cmcvcGF0Y2gvMTAyNTkwODcvCgpDaGFuZ2VzIGluIHYyOgogIC0gRG8gbm90IGhhdmUgZG1hX2Rl Y29uZmlndXJlIGNhbGxiYWNrCiAgLSBIYXZlICcvZG1hX2NvbW1vbl9jb25maWd1cmUvJyBBUEkg dG8gcHJvdmlkZSBhIGNvbW1vbiBETUEKICAgIGNvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIGJlIHVz ZWQgYnkgYnVzc2VzIGlmIGl0IHN1aXRzIHRoZW0uCiAgLSBQbGF0Zm9ybSBhbmQgQUNQSSBidXMg dG8gdXNlICcvZG1hX2NvbW1vbl9jb25maWd1cmUvJyBpbgogICAgJy9kbWFfY29uZmlndXJlLycg Y2FsbGJhY2suCiAgLSBVcGRhdGVkIGNvbW1pdCBtZXNzYWdlCiAgLSBVcGRhdGVkIHBjaV9kbWFf Y29uZmlndXJlIEFQSSB3aXRoIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5IFJvYmluCgogZHJpdmVycy9h bWJhL2J1cy5jICAgICAgICAgIHwgIDcgKysrKysrKwogZHJpdmVycy9iYXNlL2RtYS1tYXBwaW5n LmMgIHwgMzUgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvYmFz ZS9wbGF0Zm9ybS5jICAgICB8ICA2ICsrKysrKwogZHJpdmVycy9ncHUvaG9zdDF4L2J1cy5jICAg IHwgIDkgKysrKysrKysrCiBkcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgICAgfCAzMiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9kZXZpY2UuaCAgICAgIHwg IDQgKysrKwogaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIHwgIDEgKwogNyBmaWxlcyBjaGFu Z2VkLCA3NCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVzLmMKaW5kZXggNTk0YzIyOC4uMmZhMWU4 YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbWJhL2J1cy5jCisrKyBiL2RyaXZlcnMvYW1iYS9idXMu YwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CiAjaW5jbHVkZSA8 bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrL2Nsay1jb25mLmg+CisjaW5jbHVk ZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTcx LDYgKzE3MiwxMSBAQCBzdGF0aWMgaW50IGFtYmFfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCitzdGF0aWMgaW50IGFtYmFf ZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRtYV9jb21tb25f Y29uZmlndXJlKGRldik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhbWJh X3BtID0gewogCS5zdXNwZW5kCT0gcG1fZ2VuZXJpY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcG1f Z2VuZXJpY19yZXN1bWUsCkBAIC0xOTQsNiArMjAwLDcgQEAgc3RydWN0IGJ1c190eXBlIGFtYmFf YnVzdHlwZSA9IHsKIAkuZGV2X2dyb3Vwcwk9IGFtYmFfZGV2X2dyb3VwcywKIAkubWF0Y2gJCT0g YW1iYV9tYXRjaCwKIAkudWV2ZW50CQk9IGFtYmFfdWV2ZW50LAorCS5kbWFfY29uZmlndXJlCT0g YW1iYV9kbWFfY29uZmlndXJlLAogCS5wbQkJPSAmYW1iYV9wbSwKIAkuZm9yY2VfZG1hCT0gdHJ1 ZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcuYyBiL2RyaXZlcnMv YmFzZS9kbWEtbWFwcGluZy5jCmluZGV4IDNiMTE4MzUuLjQ4ZjlhZjAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5j CkBAIC0zMzEsMzggKzMzMSwzMyBAQCB2b2lkIGRtYV9jb21tb25fZnJlZV9yZW1hcCh2b2lkICpj cHVfYWRkciwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MpCiAjZW5kaWYKIAog LyoKLSAqIENvbW1vbiBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBETUEgQVBJIHVzZSBmb3IgYSBk ZXZpY2UKKyAqIENvbW1vbiBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBETUEgQVBJIHVzZSBmb3Ig YSBkZXZpY2UuCisgKiBBIGJ1cyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gaW4gaXRzICdkbWFfY29u ZmlndXJlJyBjYWxsYmFjaywgaWYKKyAqIHN1aXRhYmxlIGZvciB0aGUgYnVzLgogICovCi0jaW5j bHVkZSA8bGludXgvcGNpLmg+Ci0KLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRl dikKK2ludCBkbWFfY29tbW9uX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3Ry dWN0IGRldmljZSAqYnJpZGdlID0gTlVMTCwgKmRtYV9kZXYgPSBkZXY7CiAJZW51bSBkZXZfZG1h X2F0dHIgYXR0cjsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChkZXZfaXNfcGNpKGRldikpIHsKLQkJ YnJpZGdlID0gcGNpX2dldF9ob3N0X2JyaWRnZV9kZXZpY2UodG9fcGNpX2RldihkZXYpKTsKLQkJ ZG1hX2RldiA9IGJyaWRnZTsKLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkbWFfZGV2 LT5wYXJlbnQgJiYKLQkJICAgIGRtYV9kZXYtPnBhcmVudC0+b2Zfbm9kZSkKLQkJCWRtYV9kZXYg PSBkbWFfZGV2LT5wYXJlbnQ7Ci0JfQotCi0JaWYgKGRtYV9kZXYtPm9mX25vZGUpIHsKLQkJcmV0 ID0gb2ZfZG1hX2NvbmZpZ3VyZShkZXYsIGRtYV9kZXYtPm9mX25vZGUpOwotCX0gZWxzZSBpZiAo aGFzX2FjcGlfY29tcGFuaW9uKGRtYV9kZXYpKSB7Ci0JCWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0 cih0b19hY3BpX2RldmljZV9ub2RlKGRtYV9kZXYtPmZ3bm9kZSkpOworCWlmIChkZXYtPm9mX25v ZGUpIHsKKwkJcmV0ID0gb2ZfZG1hX2NvbmZpZ3VyZShkZXYsIGRldi0+b2Zfbm9kZSk7CisJfSBl bHNlIGlmIChoYXNfYWNwaV9jb21wYW5pb24oZGV2KSkgeworCQlhdHRyID0gYWNwaV9nZXRfZG1h X2F0dHIodG9fYWNwaV9kZXZpY2Vfbm9kZShkZXYtPmZ3bm9kZSkpOwogCQlpZiAoYXR0ciAhPSBE RVZfRE1BX05PVF9TVVBQT1JURUQpCiAJCQlyZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBh dHRyKTsKIAl9CiAKLQlpZiAoYnJpZGdlKQotCQlwY2lfcHV0X2hvc3RfYnJpZGdlX2RldmljZShi cmlkZ2UpOwotCiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGRtYV9jb25maWd1cmUoc3RydWN0IGRl dmljZSAqZGV2KQoreworCWlmIChkZXYtPmJ1cy0+ZG1hX2NvbmZpZ3VyZSkKKwkJcmV0dXJuIGRl di0+YnVzLT5kbWFfY29uZmlndXJlKGRldik7CisKKwlyZXR1cm4gMDsKK30KIHZvaWQgZG1hX2Rl Y29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlvZl9kbWFfZGVjb25maWd1cmUoZGV2 KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3Bs YXRmb3JtLmMKaW5kZXggZjFiZjdiMy4uZDJkNTg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNl L3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTExMzAsNiArMTEz MCwxMSBAQCBpbnQgcGxhdGZvcm1fcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKICNl bmRpZiAvKiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCitzdGF0aWMgaW50IHBsYXRm b3JtX2RtYV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkbWFfY29t bW9uX2NvbmZpZ3VyZShkZXYpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMg cGxhdGZvcm1fZGV2X3BtX29wcyA9IHsKIAkucnVudGltZV9zdXNwZW5kID0gcG1fZ2VuZXJpY19y dW50aW1lX3N1c3BlbmQsCiAJLnJ1bnRpbWVfcmVzdW1lID0gcG1fZ2VuZXJpY19ydW50aW1lX3Jl c3VtZSwKQEAgLTExNDEsNiArMTE0Niw3IEBAIHN0cnVjdCBidXNfdHlwZSBwbGF0Zm9ybV9idXNf dHlwZSA9IHsKIAkuZGV2X2dyb3Vwcwk9IHBsYXRmb3JtX2Rldl9ncm91cHMsCiAJLm1hdGNoCQk9 IHBsYXRmb3JtX21hdGNoLAogCS51ZXZlbnQJCT0gcGxhdGZvcm1fdWV2ZW50LAorCS5kbWFfY29u ZmlndXJlCT0gcGxhdGZvcm1fZG1hX2NvbmZpZ3VyZSwKIAkucG0JCT0gJnBsYXRmb3JtX2Rldl9w bV9vcHMsCiAJLmZvcmNlX2RtYQk9IHRydWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv aG9zdDF4L2J1cy5jIGIvZHJpdmVycy9ncHUvaG9zdDF4L2J1cy5jCmluZGV4IDg4YTM1NTguLmZh OTg5NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9idXMuYworKysgYi9kcml2ZXJz L2dwdS9ob3N0MXgvYnVzLmMKQEAgLTMxNCw2ICszMTQsMTQgQEAgc3RhdGljIGludCBob3N0MXhf ZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRy dikKIAlyZXR1cm4gc3RyY21wKGRldl9uYW1lKGRldiksIGRydi0+bmFtZSkgPT0gMDsKIH0KIAor c3RhdGljIGludCBob3N0MXhfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ aWYgKGRldi0+b2Zfbm9kZSkKKwkJcmV0dXJuIG9mX2RtYV9jb25maWd1cmUoZGV2LCBkZXYtPm9m X25vZGUpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyBob3N0MXhfZGV2aWNlX3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHBtX2dlbmVyaWNfc3VzcGVu ZCwKIAkucmVzdW1lID0gcG1fZ2VuZXJpY19yZXN1bWUsCkBAIC0zMjYsNiArMzM0LDcgQEAgc3Rh dGljIGludCBob3N0MXhfZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZV9kcml2ZXIgKmRydikKIHN0cnVjdCBidXNfdHlwZSBob3N0MXhfYnVzX3R5cGUgPSB7CiAJ Lm5hbWUgPSAiaG9zdDF4IiwKIAkubWF0Y2ggPSBob3N0MXhfZGV2aWNlX21hdGNoLAorCS5kbWFf Y29uZmlndXJlCT0gaG9zdDF4X2RtYV9jb25maWd1cmUsCiAJLnBtID0gJmhvc3QxeF9kZXZpY2Vf cG1fb3BzLAogCS5mb3JjZV9kbWEgPSB0cnVlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNp L3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCAzYmVkNmJlLi5i NDczYTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVy cy9wY2kvcGNpLWRyaXZlci5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9r ZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Fj cGkuaD4KICNpbmNsdWRlICJwY2kuaCIKIAogc3RydWN0IHBjaV9keW5pZCB7CkBAIC0xNTIyLDYg KzE1MjQsMzUgQEAgc3RhdGljIGludCBwY2lfYnVzX251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYp CiAJcmV0dXJuIHBjaV9udW1fdmYodG9fcGNpX2RldihkZXYpKTsKIH0KIAorLyoqCisgKiBwY2lf ZG1hX2NvbmZpZ3VyZSAtIFNldHVwIERNQSBjb25maWd1cmF0aW9uCisgKiBAZGV2OiBwdHIgdG8g ZGV2IHN0cnVjdHVyZQorICoKKyAqIEZ1bmN0aW9uIHRvIHVwZGF0ZSBQQ0kgZGV2aWNlcydzIERN QSBjb25maWd1cmF0aW9uIHVzaW5nIHRoZSBzYW1lCisgKiBpbmZvIGZyb20gdGhlIE9GIG5vZGUg b3IgQUNQSSBub2RlIG9mIGhvc3QgYnJpZGdlJ3MgcGFyZW50IChpZiBhbnkpLgorICovCitzdGF0 aWMgaW50IHBjaV9kbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpicmlkZ2U7CisJZW51bSBkZXZfZG1hX2F0dHIgYXR0cjsKKwlpbnQgcmV0ID0gMDsK KworCWJyaWRnZSA9IHBjaV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7 CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmIGJyaWRnZS0+cGFyZW50ICYmCisJICAg IGJyaWRnZS0+cGFyZW50LT5vZl9ub2RlKSB7CisJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2 LCBicmlkZ2UtPnBhcmVudC0+b2Zfbm9kZSk7CisJfSBlbHNlIGlmIChoYXNfYWNwaV9jb21wYW5p b24oYnJpZGdlKSkgeworCQlhdHRyID0gYWNwaV9nZXRfZG1hX2F0dHIodG9fYWNwaV9kZXZpY2Vf bm9kZShicmlkZ2UtPmZ3bm9kZSkpOworCQlpZiAoYXR0ciAhPSBERVZfRE1BX05PVF9TVVBQT1JU RUQpCisJCQlyZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsKKwl9CisKKwlwY2lf cHV0X2hvc3RfYnJpZGdlX2RldmljZShicmlkZ2UpOworCisJcmV0dXJuIHJldDsKK30KKwogc3Ry dWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAicGNpIiwKIAkubWF0Y2gJ CT0gcGNpX2J1c19tYXRjaCwKQEAgLTE1MzQsNiArMTU2NSw3IEBAIHN0cnVjdCBidXNfdHlwZSBw Y2lfYnVzX3R5cGUgPSB7CiAJLmRydl9ncm91cHMJPSBwY2lfZHJ2X2dyb3VwcywKIAkucG0JCT0g UENJX1BNX09QU19QVFIsCiAJLm51bV92ZgkJPSBwY2lfYnVzX251bV92ZiwKKwkuZG1hX2NvbmZp Z3VyZQk9IHBjaV9kbWFfY29uZmlndXJlLAogCS5mb3JjZV9kbWEJPSB0cnVlLAogfTsKIEVYUE9S VF9TWU1CT0wocGNpX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNl LmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGIwOTM0MDUuLjE4MzJkOTAgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2Uu aApAQCAtODgsNiArODgsOCBAQCBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBidXNfY3JlYXRlX2Zp bGUoc3RydWN0IGJ1c190eXBlICosCiAgKiBAcmVzdW1lOglDYWxsZWQgdG8gYnJpbmcgYSBkZXZp Y2Ugb24gdGhpcyBidXMgb3V0IG9mIHNsZWVwIG1vZGUuCiAgKiBAbnVtX3ZmOglDYWxsZWQgdG8g ZmluZCBvdXQgaG93IG1hbnkgdmlydHVhbCBmdW5jdGlvbnMgYSBkZXZpY2Ugb24gdGhpcwogICoJ CWJ1cyBzdXBwb3J0cy4KKyAqIEBkbWFfY29uZmlndXJlOglDYWxsZWQgdG8gc2V0dXAgRE1BIGNv bmZpZ3VyYXRpb24gb24gYSBkZXZpY2Ugb24KKwkJCXRoaXMgYnVzLgogICogQHBtOgkJUG93ZXIg bWFuYWdlbWVudCBvcGVyYXRpb25zIG9mIHRoaXMgYnVzLCBjYWxsYmFjayB0aGUgc3BlY2lmaWMK ICAqCQlkZXZpY2UgZHJpdmVyJ3MgcG0tb3BzLgogICogQGlvbW11X29wczogIElPTU1VIHNwZWNp ZmljIG9wZXJhdGlvbnMgZm9yIHRoaXMgYnVzLCB1c2VkIHRvIGF0dGFjaCBJT01NVQpAQCAtMTMw LDYgKzEzMiw4IEBAIHN0cnVjdCBidXNfdHlwZSB7CiAKIAlpbnQgKCpudW1fdmYpKHN0cnVjdCBk ZXZpY2UgKmRldik7CiAKKwlpbnQgKCpkbWFfY29uZmlndXJlKShzdHJ1Y3QgZGV2aWNlICpkZXYp OworCiAJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtOwogCiAJY29uc3Qgc3RydWN0IGlvbW11 X29wcyAqaW9tbXVfb3BzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5o IGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCmluZGV4IGViOWVhYjQuLmMxNTk4NmIgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4 L2RtYS1tYXBwaW5nLmgKQEAgLTc2MSw2ICs3NjEsNyBAQCB2b2lkICpkbWFfbWFya19kZWNsYXJl ZF9tZW1vcnlfb2NjdXBpZWQoc3RydWN0IGRldmljZSAqZGV2LAogfQogI2VuZGlmIC8qIENPTkZJ R19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UICovCiAKK2ludCBkbWFfY29tbW9uX2NvbmZpZ3Vy ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogI2lmZGVmIENPTkZJR19IQVNfRE1BCiBpbnQgZG1hX2Nv bmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBkbWFfZGVjb25maWd1cmUoc3RydWN0 IGRldmljZSAqZGV2KTsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-ve1eur01on0047.outbound.protection.outlook.com ([104.47.1.47]:3180 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751661AbeCUG4K (ORCPT ); Wed, 21 Mar 2018 02:56:10 -0400 From: Nipun Gupta To: robin.murphy@arm.com, hch@lst.de, linux@armlinux.org.uk, gregkh@linuxfoundation.org, m.szyprowski@samsung.com Cc: bhelgaas@google.com, zajec5@gmail.com, andy.gross@linaro.org, david.brown@linaro.org, dan.j.williams@intel.com, vinod.koul@intel.com, thierry.reding@gmail.com, robh+dt@kernel.org, frowand.list@gmail.com, jarkko.sakkinen@linux.intel.com, rafael.j.wysocki@intel.com, dmitry.torokhov@gmail.com, johan@kernel.org, msuchanek@suse.de, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-wireless@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, dmaengine@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-pci@vger.kernel.org, bharat.bhushan@nxp.com, leoyang.li@nxp.com, Nipun Gupta Subject: [PATCH v2 1/2] dma-mapping: move dma configuration to bus infrastructure Date: Wed, 21 Mar 2018 12:25:22 +0530 Message-Id: <1521615323-4752-1-git-send-email-nipun.gupta@nxp.com> (sfid-20180321_075619_801298_B0326B3C) In-Reply-To: <1520868292-2479-1-git-send-email-nipun.gupta@nxp.com> References: <1520868292-2479-1-git-send-email-nipun.gupta@nxp.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-wireless-owner@vger.kernel.org List-ID: It's bus specific aspect to map a given device on the bus and relevant firmware description of its DMA configuration. So, this change introduces '/dma_configure/' as bus callback giving flexibility to busses for implementing its own dma configuration function. The change eases the addition of new busses w.r.t. adding the dma configuration functionality. This patch also updates the PCI, Platform, ACPI and host1x bus to use new introduced callbacks. Suggested-by: Christoph Hellwig Signed-off-by: Nipun Gupta --- - The patches are based on the comments on: https://patchwork.kernel.org/patch/10259087/ Changes in v2: - Do not have dma_deconfigure callback - Have '/dma_common_configure/' API to provide a common DMA configuration which can be used by busses if it suits them. - Platform and ACPI bus to use '/dma_common_configure/' in '/dma_configure/' callback. - Updated commit message - Updated pci_dma_configure API with changes suggested by Robin drivers/amba/bus.c | 7 +++++++ drivers/base/dma-mapping.c | 35 +++++++++++++++-------------------- drivers/base/platform.c | 6 ++++++ drivers/gpu/host1x/bus.c | 9 +++++++++ drivers/pci/pci-driver.c | 32 ++++++++++++++++++++++++++++++++ include/linux/device.h | 4 ++++ include/linux/dma-mapping.h | 1 + 7 files changed, 74 insertions(+), 20 deletions(-) diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c index 594c228..2fa1e8b 100644 --- a/drivers/amba/bus.c +++ b/drivers/amba/bus.c @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -171,6 +172,11 @@ static int amba_pm_runtime_resume(struct device *dev) } #endif /* CONFIG_PM */ +static int amba_dma_configure(struct device *dev) +{ + return dma_common_configure(dev); +} + static const struct dev_pm_ops amba_pm = { .suspend = pm_generic_suspend, .resume = pm_generic_resume, @@ -194,6 +200,7 @@ struct bus_type amba_bustype = { .dev_groups = amba_dev_groups, .match = amba_match, .uevent = amba_uevent, + .dma_configure = amba_dma_configure, .pm = &amba_pm, .force_dma = true, }; diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c index 3b11835..48f9af0 100644 --- a/drivers/base/dma-mapping.c +++ b/drivers/base/dma-mapping.c @@ -331,38 +331,33 @@ void dma_common_free_remap(void *cpu_addr, size_t size, unsigned long vm_flags) #endif /* - * Common configuration to enable DMA API use for a device + * Common configuration to enable DMA API use for a device. + * A bus can use this function in its 'dma_configure' callback, if + * suitable for the bus. */ -#include - -int dma_configure(struct device *dev) +int dma_common_configure(struct device *dev) { - struct device *bridge = NULL, *dma_dev = dev; enum dev_dma_attr attr; int ret = 0; - if (dev_is_pci(dev)) { - bridge = pci_get_host_bridge_device(to_pci_dev(dev)); - dma_dev = bridge; - if (IS_ENABLED(CONFIG_OF) && dma_dev->parent && - dma_dev->parent->of_node) - dma_dev = dma_dev->parent; - } - - if (dma_dev->of_node) { - ret = of_dma_configure(dev, dma_dev->of_node); - } else if (has_acpi_companion(dma_dev)) { - attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode)); + if (dev->of_node) { + ret = of_dma_configure(dev, dev->of_node); + } else if (has_acpi_companion(dev)) { + attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode)); if (attr != DEV_DMA_NOT_SUPPORTED) ret = acpi_dma_configure(dev, attr); } - if (bridge) - pci_put_host_bridge_device(bridge); - return ret; } +int dma_configure(struct device *dev) +{ + if (dev->bus->dma_configure) + return dev->bus->dma_configure(dev); + + return 0; +} void dma_deconfigure(struct device *dev) { of_dma_deconfigure(dev); diff --git a/drivers/base/platform.c b/drivers/base/platform.c index f1bf7b3..d2d5891 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -1130,6 +1130,11 @@ int platform_pm_restore(struct device *dev) #endif /* CONFIG_HIBERNATE_CALLBACKS */ +static int platform_dma_configure(struct device *dev) +{ + return dma_common_configure(dev); +} + static const struct dev_pm_ops platform_dev_pm_ops = { .runtime_suspend = pm_generic_runtime_suspend, .runtime_resume = pm_generic_runtime_resume, @@ -1141,6 +1146,7 @@ struct bus_type platform_bus_type = { .dev_groups = platform_dev_groups, .match = platform_match, .uevent = platform_uevent, + .dma_configure = platform_dma_configure, .pm = &platform_dev_pm_ops, .force_dma = true, }; diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c index 88a3558..fa9896d 100644 --- a/drivers/gpu/host1x/bus.c +++ b/drivers/gpu/host1x/bus.c @@ -314,6 +314,14 @@ static int host1x_device_match(struct device *dev, struct device_driver *drv) return strcmp(dev_name(dev), drv->name) == 0; } +static int host1x_dma_configure(struct device *dev) +{ + if (dev->of_node) + return of_dma_configure(dev, dev->of_node); + + return 0; +} + static const struct dev_pm_ops host1x_device_pm_ops = { .suspend = pm_generic_suspend, .resume = pm_generic_resume, @@ -326,6 +334,7 @@ static int host1x_device_match(struct device *dev, struct device_driver *drv) struct bus_type host1x_bus_type = { .name = "host1x", .match = host1x_device_match, + .dma_configure = host1x_dma_configure, .pm = &host1x_device_pm_ops, .force_dma = true, }; diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 3bed6be..b473a4c 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include "pci.h" struct pci_dynid { @@ -1522,6 +1524,35 @@ static int pci_bus_num_vf(struct device *dev) return pci_num_vf(to_pci_dev(dev)); } +/** + * pci_dma_configure - Setup DMA configuration + * @dev: ptr to dev structure + * + * Function to update PCI devices's DMA configuration using the same + * info from the OF node or ACPI node of host bridge's parent (if any). + */ +static int pci_dma_configure(struct device *dev) +{ + struct device *bridge; + enum dev_dma_attr attr; + int ret = 0; + + bridge = pci_get_host_bridge_device(to_pci_dev(dev)); + + if (IS_ENABLED(CONFIG_OF) && bridge->parent && + bridge->parent->of_node) { + ret = of_dma_configure(dev, bridge->parent->of_node); + } else if (has_acpi_companion(bridge)) { + attr = acpi_get_dma_attr(to_acpi_device_node(bridge->fwnode)); + if (attr != DEV_DMA_NOT_SUPPORTED) + ret = acpi_dma_configure(dev, attr); + } + + pci_put_host_bridge_device(bridge); + + return ret; +} + struct bus_type pci_bus_type = { .name = "pci", .match = pci_bus_match, @@ -1534,6 +1565,7 @@ struct bus_type pci_bus_type = { .drv_groups = pci_drv_groups, .pm = PCI_PM_OPS_PTR, .num_vf = pci_bus_num_vf, + .dma_configure = pci_dma_configure, .force_dma = true, }; EXPORT_SYMBOL(pci_bus_type); diff --git a/include/linux/device.h b/include/linux/device.h index b093405..1832d90 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -88,6 +88,8 @@ extern int __must_check bus_create_file(struct bus_type *, * @resume: Called to bring a device on this bus out of sleep mode. * @num_vf: Called to find out how many virtual functions a device on this * bus supports. + * @dma_configure: Called to setup DMA configuration on a device on + this bus. * @pm: Power management operations of this bus, callback the specific * device driver's pm-ops. * @iommu_ops: IOMMU specific operations for this bus, used to attach IOMMU @@ -130,6 +132,8 @@ struct bus_type { int (*num_vf)(struct device *dev); + int (*dma_configure)(struct device *dev); + const struct dev_pm_ops *pm; const struct iommu_ops *iommu_ops; diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index eb9eab4..c15986b 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -761,6 +761,7 @@ void *dma_mark_declared_memory_occupied(struct device *dev, } #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ +int dma_common_configure(struct device *dev); #ifdef CONFIG_HAS_DMA int dma_configure(struct device *dev); void dma_deconfigure(struct device *dev); -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nipun Gupta Subject: [PATCH v2 1/2] dma-mapping: move dma configuration to bus infrastructure Date: Wed, 21 Mar 2018 12:25:22 +0530 Message-ID: <1521615323-4752-1-git-send-email-nipun.gupta@nxp.com> References: <1520868292-2479-1-git-send-email-nipun.gupta@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1520868292-2479-1-git-send-email-nipun.gupta-3arQi8VN3Tc@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: robin.murphy-5wv7dgnIgG8@public.gmane.org, hch-jcswGhMUV9g@public.gmane.org, linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org Cc: zajec5-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, david.brown-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, andy.gross-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, msuchanek-l3A5Bk7waGM@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, linux-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, leoyang.li-3arQi8VN3Tc@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org List-Id: linux-tegra@vger.kernel.org It's bus specific aspect to map a given device on the bus and relevant firmware description of its DMA configuration. So, this change introduces '/dma_configure/' as bus callback giving flexibility to busses for implementing its own dma configuration function. The change eases the addition of new busses w.r.t. adding the dma configuration functionality. This patch also updates the PCI, Platform, ACPI and host1x bus to use new introduced callbacks. Suggested-by: Christoph Hellwig Signed-off-by: Nipun Gupta --- - The patches are based on the comments on: https://patchwork.kernel.org/patch/10259087/ Changes in v2: - Do not have dma_deconfigure callback - Have '/dma_common_configure/' API to provide a common DMA configuration which can be used by busses if it suits them. - Platform and ACPI bus to use '/dma_common_configure/' in '/dma_configure/' callback. - Updated commit message - Updated pci_dma_configure API with changes suggested by Robin drivers/amba/bus.c | 7 +++++++ drivers/base/dma-mapping.c | 35 +++++++++++++++-------------------- drivers/base/platform.c | 6 ++++++ drivers/gpu/host1x/bus.c | 9 +++++++++ drivers/pci/pci-driver.c | 32 ++++++++++++++++++++++++++++++++ include/linux/device.h | 4 ++++ include/linux/dma-mapping.h | 1 + 7 files changed, 74 insertions(+), 20 deletions(-) diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c index 594c228..2fa1e8b 100644 --- a/drivers/amba/bus.c +++ b/drivers/amba/bus.c @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -171,6 +172,11 @@ static int amba_pm_runtime_resume(struct device *dev) } #endif /* CONFIG_PM */ +static int amba_dma_configure(struct device *dev) +{ + return dma_common_configure(dev); +} + static const struct dev_pm_ops amba_pm = { .suspend = pm_generic_suspend, .resume = pm_generic_resume, @@ -194,6 +200,7 @@ struct bus_type amba_bustype = { .dev_groups = amba_dev_groups, .match = amba_match, .uevent = amba_uevent, + .dma_configure = amba_dma_configure, .pm = &amba_pm, .force_dma = true, }; diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c index 3b11835..48f9af0 100644 --- a/drivers/base/dma-mapping.c +++ b/drivers/base/dma-mapping.c @@ -331,38 +331,33 @@ void dma_common_free_remap(void *cpu_addr, size_t size, unsigned long vm_flags) #endif /* - * Common configuration to enable DMA API use for a device + * Common configuration to enable DMA API use for a device. + * A bus can use this function in its 'dma_configure' callback, if + * suitable for the bus. */ -#include - -int dma_configure(struct device *dev) +int dma_common_configure(struct device *dev) { - struct device *bridge = NULL, *dma_dev = dev; enum dev_dma_attr attr; int ret = 0; - if (dev_is_pci(dev)) { - bridge = pci_get_host_bridge_device(to_pci_dev(dev)); - dma_dev = bridge; - if (IS_ENABLED(CONFIG_OF) && dma_dev->parent && - dma_dev->parent->of_node) - dma_dev = dma_dev->parent; - } - - if (dma_dev->of_node) { - ret = of_dma_configure(dev, dma_dev->of_node); - } else if (has_acpi_companion(dma_dev)) { - attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode)); + if (dev->of_node) { + ret = of_dma_configure(dev, dev->of_node); + } else if (has_acpi_companion(dev)) { + attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode)); if (attr != DEV_DMA_NOT_SUPPORTED) ret = acpi_dma_configure(dev, attr); } - if (bridge) - pci_put_host_bridge_device(bridge); - return ret; } +int dma_configure(struct device *dev) +{ + if (dev->bus->dma_configure) + return dev->bus->dma_configure(dev); + + return 0; +} void dma_deconfigure(struct device *dev) { of_dma_deconfigure(dev); diff --git a/drivers/base/platform.c b/drivers/base/platform.c index f1bf7b3..d2d5891 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -1130,6 +1130,11 @@ int platform_pm_restore(struct device *dev) #endif /* CONFIG_HIBERNATE_CALLBACKS */ +static int platform_dma_configure(struct device *dev) +{ + return dma_common_configure(dev); +} + static const struct dev_pm_ops platform_dev_pm_ops = { .runtime_suspend = pm_generic_runtime_suspend, .runtime_resume = pm_generic_runtime_resume, @@ -1141,6 +1146,7 @@ struct bus_type platform_bus_type = { .dev_groups = platform_dev_groups, .match = platform_match, .uevent = platform_uevent, + .dma_configure = platform_dma_configure, .pm = &platform_dev_pm_ops, .force_dma = true, }; diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c index 88a3558..fa9896d 100644 --- a/drivers/gpu/host1x/bus.c +++ b/drivers/gpu/host1x/bus.c @@ -314,6 +314,14 @@ static int host1x_device_match(struct device *dev, struct device_driver *drv) return strcmp(dev_name(dev), drv->name) == 0; } +static int host1x_dma_configure(struct device *dev) +{ + if (dev->of_node) + return of_dma_configure(dev, dev->of_node); + + return 0; +} + static const struct dev_pm_ops host1x_device_pm_ops = { .suspend = pm_generic_suspend, .resume = pm_generic_resume, @@ -326,6 +334,7 @@ static int host1x_device_match(struct device *dev, struct device_driver *drv) struct bus_type host1x_bus_type = { .name = "host1x", .match = host1x_device_match, + .dma_configure = host1x_dma_configure, .pm = &host1x_device_pm_ops, .force_dma = true, }; diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 3bed6be..b473a4c 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include "pci.h" struct pci_dynid { @@ -1522,6 +1524,35 @@ static int pci_bus_num_vf(struct device *dev) return pci_num_vf(to_pci_dev(dev)); } +/** + * pci_dma_configure - Setup DMA configuration + * @dev: ptr to dev structure + * + * Function to update PCI devices's DMA configuration using the same + * info from the OF node or ACPI node of host bridge's parent (if any). + */ +static int pci_dma_configure(struct device *dev) +{ + struct device *bridge; + enum dev_dma_attr attr; + int ret = 0; + + bridge = pci_get_host_bridge_device(to_pci_dev(dev)); + + if (IS_ENABLED(CONFIG_OF) && bridge->parent && + bridge->parent->of_node) { + ret = of_dma_configure(dev, bridge->parent->of_node); + } else if (has_acpi_companion(bridge)) { + attr = acpi_get_dma_attr(to_acpi_device_node(bridge->fwnode)); + if (attr != DEV_DMA_NOT_SUPPORTED) + ret = acpi_dma_configure(dev, attr); + } + + pci_put_host_bridge_device(bridge); + + return ret; +} + struct bus_type pci_bus_type = { .name = "pci", .match = pci_bus_match, @@ -1534,6 +1565,7 @@ struct bus_type pci_bus_type = { .drv_groups = pci_drv_groups, .pm = PCI_PM_OPS_PTR, .num_vf = pci_bus_num_vf, + .dma_configure = pci_dma_configure, .force_dma = true, }; EXPORT_SYMBOL(pci_bus_type); diff --git a/include/linux/device.h b/include/linux/device.h index b093405..1832d90 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -88,6 +88,8 @@ extern int __must_check bus_create_file(struct bus_type *, * @resume: Called to bring a device on this bus out of sleep mode. * @num_vf: Called to find out how many virtual functions a device on this * bus supports. + * @dma_configure: Called to setup DMA configuration on a device on + this bus. * @pm: Power management operations of this bus, callback the specific * device driver's pm-ops. * @iommu_ops: IOMMU specific operations for this bus, used to attach IOMMU @@ -130,6 +132,8 @@ struct bus_type { int (*num_vf)(struct device *dev); + int (*dma_configure)(struct device *dev); + const struct dev_pm_ops *pm; const struct iommu_ops *iommu_ops; diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index eb9eab4..c15986b 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -761,6 +761,7 @@ void *dma_mark_declared_memory_occupied(struct device *dev, } #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ +int dma_common_configure(struct device *dev); #ifdef CONFIG_HAS_DMA int dma_configure(struct device *dev); void dma_deconfigure(struct device *dev); -- 1.9.1