From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pantelis Antoniou Subject: Re: [PATCH v6 1/8] iommu: provide early initialisation hook for IOMMU drivers Date: Tue, 2 Dec 2014 12:30:37 +0200 Message-ID: References: <1417453034-21379-1-git-send-email-will.deacon@arm.com> <1417453034-21379-2-git-send-email-will.deacon@arm.com> Mime-Version: 1.0 (Mac OS X Mail 8.1 \(1993\)) Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Rob Herring Cc: jroedel@suse.de, Arnd Bergmann , Will Deacon , Linux IOMMU , Thierry Reding , Laurent Pinchart , Grant Likely , Varun Sethi , Hiroshi Doyu , David Woodhouse , "linux-arm-kernel@lists.infradead.org" , Marek Szyprowski List-Id: iommu@lists.linux-foundation.org CkhpIFJvYiwKCj4gT24gRGVjIDIsIDIwMTQsIGF0IDAxOjU0ICwgUm9iIEhlcnJpbmcgPHJvYmhl cnJpbmcyQGdtYWlsLmNvbT4gd3JvdGU6Cj4gCj4gQWRkaW5nIEdyYW50IGFuZCBQYW50ZWxpcy4u Lgo+IAo+IE9uIE1vbiwgRGVjIDEsIDIwMTQgYXQgMTA6NTcgQU0sIFdpbGwgRGVhY29uIDx3aWxs LmRlYWNvbkBhcm0uY29tPiB3cm90ZToKPj4gSU9NTVUgZHJpdmVycyBtdXN0IGJlIGluaXRpYWxp c2VkIGJlZm9yZSBhbnkgb2YgdGhlaXIgdXBzdHJlYW0gZGV2aWNlcywKPj4gb3RoZXJ3aXNlIHRo ZSByZWxldmFudCBpb21tdV9vcHMgd29uJ3QgYmUgY29uZmlndXJlZCBmb3IgdGhlIGJ1cyBpbgo+ PiBxdWVzdGlvbi4gVG8gc29sdmUgdGhpcywgYSBudW1iZXIgb2YgSU9NTVUgZHJpdmVycyB1c2Ug aW5pdGNhbGxzIHRvCj4+IGluaXRpYWxpc2UgdGhlIGRyaXZlciBiZWZvcmUgYW55dGhpbmcgaGFz IGEgY2hhbmNlIHRvIGJlIHByb2JlZC4KPj4gCj4+IFdoaWxzdCB0aGlzIHNvbHZlcyB0aGUgaW1t ZWRpYXRlIHByb2JsZW0sIGl0IGxlYXZlcyB0aGUgam9iIG9mIHByb2JpbmcKPj4gdGhlIElPTU1V IGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSB0aGUgaW9tbXVfb3BzIHRvIGNvbmZpZ3VyZSB0aGUg SU9NTVUsCj4+IHdoaWNoIGFyZSBjYWxsZWQgb24gYSBwZXItYnVzIGJhc2lzIGFuZCByZXF1aXJl IHRoZSBkcml2ZXIgdG8gZmlndXJlIG91dAo+PiBleGFjdGx5IHdoaWNoIGluc3RhbmNlIG9mIHRo ZSBJT01NVSBpcyBiZWluZyByZXF1ZXN0ZWQuIEluIHBhcnRpY3VsYXIsCj4+IHRoZSBhZGRfZGV2 aWNlIGNhbGxiYWNrIHNpbXBseSBwYXNzZXMgYSBzdHJ1Y3QgZGV2aWNlIHRvIHRoZSBkcml2ZXIs Cj4+IHdoaWNoIHRoZW4gaGFzIHRvIHBhcnNlIGZpcm13YXJlIHRhYmxlcyBvciBwcm9iZSBidXNl cyB0byBpZGVudGlmeSB0aGUKPj4gcmVsZXZhbnQgSU9NTVUgaW5zdGFuY2UuCj4+IAo+PiBUaGlz IHBhdGNoIHRha2VzIHRoZSBmaXJzdCBzdGVwIGluIGFkZHJlc3NpbmcgdGhpcyBwcm9ibGVtIGJ5 IGFkZGluZyBhbgo+PiBlYXJseSBpbml0aWFsaXNhdGlvbiBwYXNzIGZvciBJT01NVSBkcml2ZXJz LCBnaXZpbmcgdGhlbSB0aGUgYWJpbGl0eSB0bwo+PiBzdG9yZSBzb21lIHBlci1pbnN0YW5jZSBk YXRhIGluIHRoZWlyIGlvbW11X29wcyBzdHJ1Y3R1cmUgYW5kIHN0b3JlIHRoYXQKPj4gaW4gdGhl aXIgb2Zfbm9kZS4gVGhpcyBjYW4gbGF0ZXIgYmUgdXNlZCB3aGVuIHBhcnNpbmcgT0YgbWFzdGVy cyB0bwo+PiBpZGVudGlmeSB0aGUgSU9NTVUgaW5zdGFuY2UgaW4gcXVlc3Rpb24uCj4+IAo+PiBB Y2tlZC1ieTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KPj4gQWNrZWQtYnk6IEpvZXJn IFJvZWRlbCA8anJvZWRlbEBzdXNlLmRlPgo+PiBBY2tlZC1ieTogTWFyZWsgU3p5cHJvd3NraSA8 bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPgo+PiBUZXN0ZWQtYnk6IFJvYmluIE11cnBoeSA8cm9i aW4ubXVycGh5QGFybS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFdpbGwgRGVhY29uIDx3aWxsLmRl YWNvbkBhcm0uY29tPgo+PiAtLS0KPj4gZHJpdmVycy9pb21tdS9vZl9pb21tdS5jICAgICAgICAg IHwgMTcgKysrKysrKysrKysrKysrKysKPj4gaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxk cy5oIHwgIDIgKysKPj4gaW5jbHVkZS9saW51eC9pb21tdS5oICAgICAgICAgICAgIHwgIDIgKysK Pj4gaW5jbHVkZS9saW51eC9vZl9pb21tdS5oICAgICAgICAgIHwgMjUgKysrKysrKysrKysrKysr KysrKysrKysrKwo+PiA0IGZpbGVzIGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKykKPj4gCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L29mX2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L29mX2lv bW11LmMKPj4gaW5kZXggZTU1MGNjYjc2MzRlLi44OWI5MDM0MDY5NjggMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvaW9tbXUvb2ZfaW9tbXUuYwo+PiArKysgYi9kcml2ZXJzL2lvbW11L29mX2lvbW11 LmMKPj4gQEAgLTIyLDYgKzIyLDkgQEAKPj4gI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICNpbmNs dWRlIDxsaW51eC9vZl9pb21tdS5oPgo+PiAKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIF9faW9tbXVfb2ZfdGFibGVfc2VudGluZWwKPj4gKyAgICAgICBfX3VzZWQgX19zZWN0 aW9uKF9faW9tbXVfb2ZfdGFibGVfZW5kKTsKPj4gKwo+PiAvKioKPj4gICogb2ZfZ2V0X2RtYV93 aW5kb3cgLSBQYXJzZSAqZG1hLXdpbmRvdyBwcm9wZXJ0eSBhbmQgcmV0dXJucyAwIGlmIGZvdW5k Lgo+PiAgKgo+PiBAQCAtODksMyArOTIsMTcgQEAgaW50IG9mX2dldF9kbWFfd2luZG93KHN0cnVj dCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGluZGV4LAo+PiAgICAg ICAgcmV0dXJuIDA7Cj4+IH0KPj4gRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X2RtYV93aW5kb3cp Owo+PiArCj4+ICt2b2lkIF9faW5pdCBvZl9pb21tdV9pbml0KHZvaWQpCj4+ICt7Cj4+ICsgICAg ICAgc3RydWN0IGRldmljZV9ub2RlICpucDsKPj4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkICptYXRjaCwgKm1hdGNoZXMgPSAmX19pb21tdV9vZl90YWJsZTsKPj4gKwo+PiArICAg ICAgIGZvcl9lYWNoX21hdGNoaW5nX25vZGVfYW5kX21hdGNoKG5wLCBtYXRjaGVzLCAmbWF0Y2gp IHsKPj4gKyAgICAgICAgICAgICAgIGNvbnN0IG9mX2lvbW11X2luaXRfZm4gaW5pdF9mbiA9IG1h dGNoLT5kYXRhOwo+PiArCj4+ICsgICAgICAgICAgICAgICBpZiAoaW5pdF9mbihucCkpCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiRmFpbGVkIHRvIGluaXRpYWxpc2UgSU9NTVUg JXNcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zfbm9kZV9mdWxsX25h bWUobnApKTsKPj4gKyAgICAgICB9Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1n ZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgK Pj4gaW5kZXggYWE3MGNiZGEzMjdjLi5iZWU1ZDY4MzA3NGQgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1 ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAo+PiArKysgYi9pbmNsdWRlL2FzbS1nZW5lcmlj L3ZtbGludXgubGRzLmgKPj4gQEAgLTE2NCw2ICsxNjQsNyBAQAo+PiAjZGVmaW5lIENMS1NSQ19P Rl9UQUJMRVMoKSAgICAgT0ZfVEFCTEUoQ09ORklHX0NMS1NSQ19PRiwgY2xrc3JjKQo+PiAjZGVm aW5lIElSUUNISVBfT0ZfTUFUQ0hfVEFCTEUoKSBPRl9UQUJMRShDT05GSUdfSVJRQ0hJUCwgaXJx Y2hpcCkKPj4gI2RlZmluZSBDTEtfT0ZfVEFCTEVTKCkgICAgICAgICAgICAgICAgT0ZfVEFCTEUo Q09ORklHX0NPTU1PTl9DTEssIGNsaykKPj4gKyNkZWZpbmUgSU9NTVVfT0ZfVEFCTEVTKCkgICAg ICBPRl9UQUJMRShDT05GSUdfT0ZfSU9NTVUsIGlvbW11KQo+PiAjZGVmaW5lIFJFU0VSVkVETUVN X09GX1RBQkxFUygpICAgICAgICBPRl9UQUJMRShDT05GSUdfT0ZfUkVTRVJWRURfTUVNLCByZXNl cnZlZG1lbSkKPj4gI2RlZmluZSBDUFVfTUVUSE9EX09GX1RBQkxFUygpIE9GX1RBQkxFKENPTkZJ R19TTVAsIGNwdV9tZXRob2QpCj4+ICNkZWZpbmUgRUFSTFlDT05fT0ZfVEFCTEVTKCkgICBPRl9U QUJMRShDT05GSUdfU0VSSUFMX0VBUkxZQ09OLCBlYXJseWNvbikKPj4gQEAgLTQ5Nyw2ICs0OTgs NyBAQAo+PiAgICAgICAgQ0xLX09GX1RBQkxFUygpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPj4gICAgICAgIFJFU0VSVkVETUVNX09GX1RBQkxFUygp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICAgICAgICBDTEtT UkNfT0ZfVEFCTEVTKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+PiArICAgICAgIElPTU1VX09GX1RBQkxFUygpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4+ICAgICAgICBDUFVfTUVUSE9EX09GX1RBQkxFUygp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiAgICAgICAgS0VS TkVMX0RUQigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPj4gICAgICAgIElSUUNISVBfT0ZfTUFUQ0hfVEFCTEUoKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lv bW11LmggYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKPj4gaW5kZXggZTZhN2M5ZmY3MmYyLi43Yjgz ZjlmOGUxMWQgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUuaAo+PiArKysgYi9p bmNsdWRlL2xpbnV4L2lvbW11LmgKPj4gQEAgLTEwMyw2ICsxMDMsNyBAQCBlbnVtIGlvbW11X2F0 dHIgewo+PiAgKiBAZG9tYWluX2dldF9hdHRyOiBRdWVyeSBkb21haW4gYXR0cmlidXRlcwo+PiAg KiBAZG9tYWluX3NldF9hdHRyOiBDaGFuZ2UgZG9tYWluIGF0dHJpYnV0ZXMKPj4gICogQHBnc2l6 ZV9iaXRtYXA6IGJpdG1hcCBvZiBzdXBwb3J0ZWQgcGFnZSBzaXplcwo+PiArICogQHByaXY6IHBl ci1pbnN0YW5jZSBkYXRhIHByaXZhdGUgdG8gdGhlIGlvbW11IGRyaXZlcgo+PiAgKi8KPj4gc3Ry dWN0IGlvbW11X29wcyB7Cj4+ICAgICAgICBib29sICgqY2FwYWJsZSkoZW51bSBpb21tdV9jYXAp Owo+PiBAQCAtMTMzLDYgKzEzNCw3IEBAIHN0cnVjdCBpb21tdV9vcHMgewo+PiAgICAgICAgdTMy ICgqZG9tYWluX2dldF93aW5kb3dzKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pOwo+PiAK Pj4gICAgICAgIHVuc2lnbmVkIGxvbmcgcGdzaXplX2JpdG1hcDsKPj4gKyAgICAgICB2b2lkICpw cml2Owo+PiB9Owo+PiAKPj4gI2RlZmluZSBJT01NVV9HUk9VUF9OT1RJRllfQUREX0RFVklDRSAg ICAgICAgICAxIC8qIERldmljZSBhZGRlZCAqLwo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9vZl9pb21tdS5oIGIvaW5jbHVkZS9saW51eC9vZl9pb21tdS5oCj4+IGluZGV4IDUxYTU2MGYz NGJjYS4uNTc2MmNkYzhlZmZlIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L29mX2lvbW11 LmgKPj4gKysrIGIvaW5jbHVkZS9saW51eC9vZl9pb21tdS5oCj4+IEBAIC0xLDEyICsxLDE3IEBA Cj4+ICNpZm5kZWYgX19PRl9JT01NVV9ICj4+ICNkZWZpbmUgX19PRl9JT01NVV9ICj4+IAo+PiAr I2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKwo+ PiAjaWZkZWYgQ09ORklHX09GX0lPTU1VCj4+IAo+PiBleHRlcm4gaW50IG9mX2dldF9kbWFfd2lu ZG93KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IGNoYXIgKnByZWZpeCwKPj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwgdW5zaWduZWQgbG9uZyAqYnVzbm8sIGRt YV9hZGRyX3QgKmFkZHIsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnNp emUpOwo+PiAKPj4gK2V4dGVybiB2b2lkIG9mX2lvbW11X2luaXQodm9pZCk7Cj4+ICsKPj4gI2Vs c2UKPj4gCj4+IHN0YXRpYyBpbmxpbmUgaW50IG9mX2dldF9kbWFfd2luZG93KHN0cnVjdCBkZXZp Y2Vfbm9kZSAqZG4sIGNvbnN0IGNoYXIgKnByZWZpeCwKPj4gQEAgLTE2LDYgKzIxLDI2IEBAIHN0 YXRpYyBpbmxpbmUgaW50IG9mX2dldF9kbWFfd2luZG93KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4s IGNvbnN0IGNoYXIgKnByZWZpeCwKPj4gICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiB9Cj4+IAo+ PiArc3RhdGljIGlubGluZSB2b2lkIG9mX2lvbW11X2luaXQodm9pZCkgeyB9Cj4+ICsKPj4gI2Vu ZGlmIC8qIENPTkZJR19PRl9JT01NVSAqLwo+PiAKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9p b21tdV9zZXRfb3BzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKm9wcykKPj4gK3sKPj4g KyAgICAgICBucC0+ZGF0YSA9IChzdHJ1Y3QgaW9tbXVfb3BzICopb3BzOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpb21tdV9vcHMgKm9mX2lvbW11X2dldF9vcHMoc3RydWN0 IGRldmljZV9ub2RlICpucCkKPj4gK3sKPj4gKyAgICAgICByZXR1cm4gbnAtPmRhdGE7Cj4+ICt9 Cj4gCj4gVGhpcyBtYXkgY29sbGlkZSB3aXRoIG90aGVyIHVzZXJzLiBXaGlsZSB1c2Ugb2YgaXQg aXMgcmFyZSwgUFBDIHVzZXMKPiBpdCBpbiBpdHMgUENJIGNvZGUuIFRoZSBPRl9EWU5BTUlDIGNv ZGUgZnJlZXMgaXQgYnV0IG5ldmVyIGFjdHVhbGx5Cj4gc2V0cyBpdC4gVGhlcmUgbWF5IGJlIHNv bWUgY29taW5nIHVzYWdlIHdpdGggdGhlIERUIG92ZXJsYXkgY29kZSBvcgo+IHRoYXQncyBqdXN0 IGEgYnVnLiBQYW50ZWxpcyBvciBHcmFudCBjYW4gY29tbWVudC4gSWYgbm90LCBJIHRoaW5rIHdl Cj4gcmVhbGx5IHNob3VsZCB0cnkgdG8gZ2V0IHJpZCBvZiB0aGlzIHBvaW50ZXIgcmF0aGVyIHRo YW4gZXhwYW5kIGl0J3MKPiB1c2FnZS4KPiAKClRoYXQgYXNzaWdubWVudCBpcyBub3QgZ29vZCBh cyBpdCBpcy4gVW5kZXIgT0ZfRFlOQU1JQyBvbiBvZl9ub2RlX3JlbGVhc2UgaXQgd2lsbCBhdHRl bXB0CnRvIGtmcmVlIGl0LgoKRm9yIG5vdyBrZHVw4oCZaW5nIHRoZSBvcHMgc3RydWN0dXJlIHNo b3VsZCBiZSBlbm91Z2gsIGJ1dCBJ4oCZZCBsaWtlIHRvIHNlZSB0aGlzIHJlbW92ZWQgZXZlbnR1 YWxseS4KICAKVGhpcyBkYXRhIHBvaW50ZXIganVzdCBoYXMgdG8gZ28uIEFzIGZhciBhcyBJIGNh biB0ZWxsIGl0IGlzIHVzZWQgaW4gQ0VMTCBQUEMgYW5kIGluIHRoZSAKZnJlZXNjYWxlIHRpbWVy cyBidXQgSU1ITyBpdOKAmXMganVzdCBhIGJhZCBpZGVhIHRvIGhhbmcgcGVyLWRyaXZlciBkYXRh IGluIHRoZSBkZXZpY2Ugbm9kZS4KCkl0IGlzIHNpbXBsZSBlbm91Z2ggdG8gdXNlIGFuIElEUiBv ciBzb21ldGhpbmcgd2hlbiB5b3UgbmVlZCB0byBncmFiIGRhdGEgcmVsYXRlZCB0byB0aGUKZGV2 aWNlIG5vZGUgaW5zdGVhZCBvZiBzdGFzaGluZyBzdHVmZiBpbiB0aGUgZGF0YSBwb2ludGVyLiAg Cgo+IEkgZGlkbid0IHNlZSBhIHVzZXIgb2YgdGhpcy4gSSdtIGd1ZXNzaW5nIHRoYXQgaXMgY29t aW5nIGluIGEgU01NVSBwYXRjaD8KPiAKPiBSb2IKClJlZ2FyZHMKCuKAlCBQYW50ZWxpcwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: pantelis.antoniou@konsulko.com (Pantelis Antoniou) Date: Tue, 2 Dec 2014 12:30:37 +0200 Subject: [PATCH v6 1/8] iommu: provide early initialisation hook for IOMMU drivers In-Reply-To: References: <1417453034-21379-1-git-send-email-will.deacon@arm.com> <1417453034-21379-2-git-send-email-will.deacon@arm.com> Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Rob, > On Dec 2, 2014, at 01:54 , Rob Herring wrote: > > Adding Grant and Pantelis... > > On Mon, Dec 1, 2014 at 10:57 AM, Will Deacon wrote: >> IOMMU drivers must be initialised before any of their upstream devices, >> otherwise the relevant iommu_ops won't be configured for the bus in >> question. To solve this, a number of IOMMU drivers use initcalls to >> initialise the driver before anything has a chance to be probed. >> >> Whilst this solves the immediate problem, it leaves the job of probing >> the IOMMU completely separate from the iommu_ops to configure the IOMMU, >> which are called on a per-bus basis and require the driver to figure out >> exactly which instance of the IOMMU is being requested. In particular, >> the add_device callback simply passes a struct device to the driver, >> which then has to parse firmware tables or probe buses to identify the >> relevant IOMMU instance. >> >> This patch takes the first step in addressing this problem by adding an >> early initialisation pass for IOMMU drivers, giving them the ability to >> store some per-instance data in their iommu_ops structure and store that >> in their of_node. This can later be used when parsing OF masters to >> identify the IOMMU instance in question. >> >> Acked-by: Arnd Bergmann >> Acked-by: Joerg Roedel >> Acked-by: Marek Szyprowski >> Tested-by: Robin Murphy >> Signed-off-by: Will Deacon >> --- >> drivers/iommu/of_iommu.c | 17 +++++++++++++++++ >> include/asm-generic/vmlinux.lds.h | 2 ++ >> include/linux/iommu.h | 2 ++ >> include/linux/of_iommu.h | 25 +++++++++++++++++++++++++ >> 4 files changed, 46 insertions(+) >> >> diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c >> index e550ccb7634e..89b903406968 100644 >> --- a/drivers/iommu/of_iommu.c >> +++ b/drivers/iommu/of_iommu.c >> @@ -22,6 +22,9 @@ >> #include >> #include >> >> +static const struct of_device_id __iommu_of_table_sentinel >> + __used __section(__iommu_of_table_end); >> + >> /** >> * of_get_dma_window - Parse *dma-window property and returns 0 if found. >> * >> @@ -89,3 +92,17 @@ int of_get_dma_window(struct device_node *dn, const char *prefix, int index, >> return 0; >> } >> EXPORT_SYMBOL_GPL(of_get_dma_window); >> + >> +void __init of_iommu_init(void) >> +{ >> + struct device_node *np; >> + const struct of_device_id *match, *matches = &__iommu_of_table; >> + >> + for_each_matching_node_and_match(np, matches, &match) { >> + const of_iommu_init_fn init_fn = match->data; >> + >> + if (init_fn(np)) >> + pr_err("Failed to initialise IOMMU %s\n", >> + of_node_full_name(np)); >> + } >> +} >> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h >> index aa70cbda327c..bee5d683074d 100644 >> --- a/include/asm-generic/vmlinux.lds.h >> +++ b/include/asm-generic/vmlinux.lds.h >> @@ -164,6 +164,7 @@ >> #define CLKSRC_OF_TABLES() OF_TABLE(CONFIG_CLKSRC_OF, clksrc) >> #define IRQCHIP_OF_MATCH_TABLE() OF_TABLE(CONFIG_IRQCHIP, irqchip) >> #define CLK_OF_TABLES() OF_TABLE(CONFIG_COMMON_CLK, clk) >> +#define IOMMU_OF_TABLES() OF_TABLE(CONFIG_OF_IOMMU, iommu) >> #define RESERVEDMEM_OF_TABLES() OF_TABLE(CONFIG_OF_RESERVED_MEM, reservedmem) >> #define CPU_METHOD_OF_TABLES() OF_TABLE(CONFIG_SMP, cpu_method) >> #define EARLYCON_OF_TABLES() OF_TABLE(CONFIG_SERIAL_EARLYCON, earlycon) >> @@ -497,6 +498,7 @@ >> CLK_OF_TABLES() \ >> RESERVEDMEM_OF_TABLES() \ >> CLKSRC_OF_TABLES() \ >> + IOMMU_OF_TABLES() \ >> CPU_METHOD_OF_TABLES() \ >> KERNEL_DTB() \ >> IRQCHIP_OF_MATCH_TABLE() \ >> diff --git a/include/linux/iommu.h b/include/linux/iommu.h >> index e6a7c9ff72f2..7b83f9f8e11d 100644 >> --- a/include/linux/iommu.h >> +++ b/include/linux/iommu.h >> @@ -103,6 +103,7 @@ enum iommu_attr { >> * @domain_get_attr: Query domain attributes >> * @domain_set_attr: Change domain attributes >> * @pgsize_bitmap: bitmap of supported page sizes >> + * @priv: per-instance data private to the iommu driver >> */ >> struct iommu_ops { >> bool (*capable)(enum iommu_cap); >> @@ -133,6 +134,7 @@ struct iommu_ops { >> u32 (*domain_get_windows)(struct iommu_domain *domain); >> >> unsigned long pgsize_bitmap; >> + void *priv; >> }; >> >> #define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */ >> diff --git a/include/linux/of_iommu.h b/include/linux/of_iommu.h >> index 51a560f34bca..5762cdc8effe 100644 >> --- a/include/linux/of_iommu.h >> +++ b/include/linux/of_iommu.h >> @@ -1,12 +1,17 @@ >> #ifndef __OF_IOMMU_H >> #define __OF_IOMMU_H >> >> +#include >> +#include >> + >> #ifdef CONFIG_OF_IOMMU >> >> extern int of_get_dma_window(struct device_node *dn, const char *prefix, >> int index, unsigned long *busno, dma_addr_t *addr, >> size_t *size); >> >> +extern void of_iommu_init(void); >> + >> #else >> >> static inline int of_get_dma_window(struct device_node *dn, const char *prefix, >> @@ -16,6 +21,26 @@ static inline int of_get_dma_window(struct device_node *dn, const char *prefix, >> return -EINVAL; >> } >> >> +static inline void of_iommu_init(void) { } >> + >> #endif /* CONFIG_OF_IOMMU */ >> >> +static inline void of_iommu_set_ops(struct device_node *np, >> + const struct iommu_ops *ops) >> +{ >> + np->data = (struct iommu_ops *)ops; >> +} >> + >> +static inline struct iommu_ops *of_iommu_get_ops(struct device_node *np) >> +{ >> + return np->data; >> +} > > This may collide with other users. While use of it is rare, PPC uses > it in its PCI code. The OF_DYNAMIC code frees it but never actually > sets it. There may be some coming usage with the DT overlay code or > that's just a bug. Pantelis or Grant can comment. If not, I think we > really should try to get rid of this pointer rather than expand it's > usage. > That assignment is not good as it is. Under OF_DYNAMIC on of_node_release it will attempt to kfree it. For now kdup?ing the ops structure should be enough, but I?d like to see this removed eventually. This data pointer just has to go. As far as I can tell it is used in CELL PPC and in the freescale timers but IMHO it?s just a bad idea to hang per-driver data in the device node. It is simple enough to use an IDR or something when you need to grab data related to the device node instead of stashing stuff in the data pointer. > I didn't see a user of this. I'm guessing that is coming in a SMMU patch? > > Rob Regards ? Pantelis