From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark yao Subject: Re: [RFC 0/3] Unify IOMMU-based DMA-mapping code for ARM and ARM64 Date: Mon, 18 Apr 2016 10:18:37 +0800 Message-ID: <571443FD.9090508@rock-chips.com> References: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Marek Szyprowski , iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski , Russell King - ARM Linux , Arnd Bergmann , Bartlomiej Zolnierkiewicz , Catalin Marinas , Will Deacon , dri-devel@lists.freedesktop.org, Tomasz Figa , linaro-mm-sig@lists.linaro.org, Sakari Ailus , Laurent Pinchart , Robin Murphy List-Id: iommu@lists.linux-foundation.org SGkgTWFyZWsKCldpdGggeW91ciBwYXRjaGVzLCBkbyBkcm0vcm9ja2NoaXAgZG1hLW1hcHBpbmcg cmV3cml0ZSwgSU9NTVUgd29ya3MgZ29vZCAKb24gZHJtL3JvY2tjaGlwIEFSTTY0IHBsYXRmb3Jt LgoKVGhhbmtzIGZvciB5b3VyIHBhdGNoZXMuCgpPbiAyMDE25bm0MDLmnIgxOeaXpSAxNjoyMiwg TWFyZWsgU3p5cHJvd3NraSB3cm90ZToKPiBEZWFyIEFsbCwKPgo+IFRoaXMgaXMgYW4gaW5pdGlh bCBSRkMgb24gdGhlIHVuaWZpY2F0aW9uIG9mIElPTU1VLWJhc2VkIERNQS1tYXBwaW5nCj4gY29k ZSBmb3IgQVJNIGFuZCBBUk02NCBhcmNoaXRlY3R1cmVzLgo+Cj4gUmlnaHQgbm93IEFSTSBhcmNo aXRlY3R1cmUgc3RpbGwgdXNlIG15IG9sZCBjb2RlIGZvciBJT01NVS1iYXNlZAo+IERNQS1tYXBw aW5nIGdsdWUsIGluaXRpYWxseSBtZXJnZWQgaW4gY29tbWl0Cj4gNGNlNjNmY2Q5MTljMzJkMjI1 MjhlNTRkY2Q4OTUwNjk2MjkzMzcxOSAoIkFSTTogZG1hLW1hcHBpbmc6IGFkZCBzdXBwb3J0Cj4g Zm9yIElPTU1VIG1hcHBlciIpLiBJbiBtZWFudGltZSBBUk02NCBnb3QgYSBuZXcsIHNsaWdodGx5 IGltcHJvdmVkCj4gaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgUm9iaW4gTXVycGh5IGluIGNv bW1pdAo+IDEzYjg2MjlmNjUxMTY0ZDcxZjRkMzhiODIxOTI1ZjkzYmE0MjM2YzggKCJhcm02NDog QWRkIElPTU1VIGRtYV9vcHMiKS4KPgo+IEJvdGggaW1wbGVtZW50YXRpb25zIGFyZSB2ZXJ5IHNp bWlsYXIgdGh1cyB0aGVpciB1bmlmaWNhdGlvbiBpcyBkZXNpcmVkCj4gdG8gYXZvaWQgZHVwbGlj YXRpbmcgZnV0dXJlIHdvcmtzIGFuZCBzaW1wbGlmeSBjb2RlLCB3aGljaCB1c2VzIHRoaXMKPiBs YXllciBvbiBib3RoIGFyY2hpdGVjdHVyZXMuIEluIHRoaXMgcGF0Y2hzZXQgSSd2ZSBzZWxlY3Rl ZCB0aGUgbmV3Cj4gaW1wbGVtZW50YXRpb24gKGZyb20gQVJNNjQgYXJjaGl0ZWN0dXJlKSBhcyBh IGJhc2UuIFRoaXMgbWVhbnMgdGhhdAo+IEFSTS1zcGVjaWZpYywgb2xkIGludGVyZmFjZSAoYXJt X2lvbW11XyogZnVuY3Rpb25zKSBmb3IgY29uZmlndXJpbmcKPiBJT01NVSBkb21haW5zIHdpbGwg YmUgbm8gbG9uZ2VyIGF2YWlsYWJsZSBhbmQgaXRzIHVzZXJzIGhhdmUgdG8gYmUKPiBjb252ZXJ0 ZWQgdG8gbmV3IEFQSS4KPgo+IEJlc2lkZXMgbGFjayBvZiBvbGQgaW50ZXJmYWNlLCB0aGUgc2Vj b25kIGRpZmZlcmVuY2UgaXMgYWRkaXRpb25hbAo+IHJlcXVpcmVtZW50cyBmb3IgSU9NTVUgZHJp dmVycy4gTmV3IGNvZGUgcmVsaWVzIG9uIHRoZSBzdXBwb3J0IGZvcgo+IElPTU1VX0RPTUFJTl9E TUEgYW5kIGRlZmF1bHQgSU9NTVUgZG9tYWluLCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5Cj4gYXR0 YWNoZWQgYnkgdGhlIElPTU1VIGNvcmUuCj4KPiBUaGUgbmV3IGNvZGUgYWxzbyBhc3N1bWVzIHRo YXQgdGhlIElPTU1VLWJhc2VkIERNQS1tYXBwaW5nIG9wcyBhcmUKPiBtYWlubHkgY29uZmlndXJl ZCBmcm9tIGFyY2hfc2V0dXBfZG1hX29wcygpIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB0aGF0Cj4g dGhlIElPTU1VIGRyaXZlciBzaG91bGQgcHJvdmlkZSBuZWVkZWQgb2ZfeGxhdGUgY2FsbGJhY2tz IGFuZCBpbml0aWFsaXplCj4gSU9NTVUgb3BzIGZvciBkZXZpY2Ugbm9kZXMuIEhvd2V2ZXIgaXQg c2hvdWxkIGJlIGFsc28gcG9zc2libGUgdG8KPiBpbml0aWFsaXplIElPTU1VLWJhc2VkIERNQS1t YXBwaW5nIG9wcyBmb3IgY2xpZW50IGRldmljZXMgZGlyZWN0bHkgZnJvbQo+IElPTU1VIGRyaXZl cnMgYnkgY2FsbGluZyBjb21tb25faW9tbXVfc2V0dXBfZG1hX29wcygpIChzb21lIGRyaXZlcnMg dXNlZAo+IHN1Y2ggYXBwcm9hY2gpLgo+Cj4gSU9NTVUgZHJpdmVycyBzaG91bGQgYmUgYWxzbyBh d2FyZSBvZiB0aGUgZmFjdCB0aGF0IHRoZQo+IGRlZmF1bHQgZG9tYWluIGlzIGF0dGFjaGVkIHZp YSBkZXZpY2VfYXR0YWNoIGFuZCB0aGVuIGRldmljZV9hdHRhY2gKPiBjYWxsYmFjayBjYW4gYmUg Y2FsbGVkIG9uY2UgYWdhaW4gd2l0aCBkaWZmZXJlbnQgZG9tYWluIHdpdGhvdXQgcHJldmlvdXMK PiBkZXRhY2ggZnJvbSBkZWZhdWx0IGRvbWFpbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhp cyBpc3N1ZSwgc2VlIHRoZQo+IGZvbGxvd2luZyB0aHJlYWQ6Cj4gaHR0cHM6Ly9saXN0cy5saW5h cm8ub3JnL3BpcGVybWFpbC9saW5hcm8tbW0tc2lnLzIwMTYtRmVicnVhcnkvMDA0NjI1Lmh0bWwK Pgo+IEN1cnJlbnRseSB0aGVyZSBhcmUgNCB1c2VycyBvZiB0aGUgb2xkIGFybV9pb21tdV8qIGlu dGVyZmFjZToKPiAxLiBFeHlub3MgRFJNIGRyaXZlcgo+IDIuIFJvY2tjaGlwIERSTSBkcml2ZXIK PiAzLiBPTUFQMyBJU1AgY2FtZXJhIGRyaXZlcgo+IDQuIFJlbmVzYXMgVk1TQS1jb21wYXRpYmxl IElQTU1VIGRyaXZlcgo+Cj4gSW4gdGhpcyBwYXRjaHNldCBJJ3ZlIGNvbnZlcnRlZCBFeHlub3Mg RFJNIGRyaXZlciBmb3IgdGhlIG5ldyBBUEkgKHBhdGNoCj4gMSkuIFRoaXMgcmVxdWlyZWQgc29t ZSBjaGFuZ2VzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtb2RlbCBpbnNpZGUgdGhlCj4gZHJp dmVyIGFuZCByZW1vdmFsIG9mIHNvbWUgaGFja3MsIHdoaWNoIHdlcmUgdXNlZCB0byBzZXR1cCBJ T01NVS1iYXNlZAo+IERNQS1tYXBwaW5nIG9wcyBvbiB0aGUgJ2V4eW5vcy1kcm0nIHZpcnR1YWwg ZGV2aWNlIGFuZCBjb21tb24gSU9NTVUKPiBkb21haW4gZm9yIGFsbCBFeHlub3MgRFJNIHN1Yi1k ZXZpY2VzLCB0aG9zZSBjaGFuZ2VzIGhhdmUgYmVlbiBwb3N0ZWQKPiBzZXBhcmF0ZWx5IGhlcmU6 IGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvZHJpLWRldmVsL21zZzEwMDg2MS5odG1sCj4g Um9ja2NoaXAgRFJNIGRyaXZlciByZXF1aXJlcyBzaW1pbGFyIGNvbnZlcnNpb24uCj4KPiBDb252 ZXJ0aW5nIE9NQVAzIElTUCBjYW1lcmEgZHJpdmVyIHRvIG5ldyBBUEkgcmVxdWlyZXMgYWRkaW5n IHN1cHBvcnQKPiBmb3IgSU9NTVUgZ3JvdXBzIHRvIE9NQVAgSU9NTVUgZHJpdmVyLCBiZWNhdXNl IHRoZSBuZXcgRE1BL0lPTU1VIGNvZGUKPiB1c2VkIElPTU1VX0RPTUFJTl9ETUEgdHlwZSBkb21h aW5zIGFuZCBkZWZhdWx0IGdyb3Vwcy4KPgo+IFJlbmVzYXMgSVBNTVUgZHJpdmVyIG5lZWRzIGFs c28gdG8gYmUgZXh0ZW5kZWQgd2l0aCBJT01NVV9ET01BSU5fRE1BIGRvbWFpbgo+IHR5cGUgc3Vw cG9ydC4gSXQgY2FuIGFsc28gYmUgcHJlcGFyZWQgZm9yIElPTU1VX09GX0RFQ0xBUkUgYW5kIG9m X3hsYXRlCj4gY2FsbGJhY2stYmFzZWQgaW5pdGlhbGl6YXRpb24gdG8gbGV0IGNvcmUgdG8gYXV0 b21hdGljYWxseSBzZXR1cCBvZgo+IElPTU1VLWJhc2VkIERNQSBtYXBwaW5nIGltcGxlbWVudGF0 aW9uLgo+Cj4gUGF0Y2ggMiBtb3ZlcyBleGlzdGluZyBjb2RlIGZyb20gYXJjaC9hcm02NCB0byBk cml2ZXJzL2lvbW11IGFuZAo+IGludHJvZHVjZXMgc29tZSBtaW5vciBjaGFuZ2VzIGluIGZ1bmN0 aW9uIG5hbWVzIC0gbWFpbmx5IGFkZGluZyBhcmNoXwo+IHByZWZpeCB0byBzb21lIGRtYS1tYXBw aW5nIGludGVybmFsIGZ1bmN0aW9ucywgd2hpY2ggc3RheSBpbiBhcmNoL2FybTY0Lwo+IChmdW5j dGlvbnMgb2Ygc2ltaWxhciBuYW1lcyBhcmUgcHJlc2VudCBpbiBhcmNoL2FybSkuIFBhdGNoIDMg YWRhcHRzIEFSTQo+IGFyY2hpdGVjdHVyZSBmb3IgdGhlIGNvbW1vbiBjb2RlLgo+Cj4gSSB3b3Vs ZCBsaWtlIHRvIGdldCB5b3VyIGNvbW1lbnRzIG9uIHRoZSBwcm9wb3NlZCBhcHByb2FjaC4gVGhl cmUgaXMKPiBzdGlsbCBzb21lIHdvcmsgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8gY29udmVydCBy ZW1haW5pbmcgdXNlcnMgb2YgdGhlCj4gb2xkIEFQSSBhbmQgdXBkYXRpbmcgSU9NTVUgZHJpdmVy cyB0byB0aGUgbmV3IEFQSSByZXF1aXJlbWVudHMuIFRoaXMKPiBjaGFuZ2UgbmVlZCB0byBiZSB0 ZXN0ZWQgb24gdGhlIGFsbCBhZmZlY3RlZCBBUk0gc3ViLWFyY2hpdGVjdHVyZXMuCj4KPiBSaWdo dCBub3cgcGF0Y2hlcyB3ZXJlIHRlc3RlZCBvbiBvbmx5IEV4eW5vcyBiYXNlZCBib2FyZHM6IEFS TSAzMmJpdDoKPiBFeHlub3M0NDEyIGFuZCBFeHlub3M1NDIyIGJvYXJkcyBhbmQgQVJNIDY0IGJp dCBFeG55b3MgNTQzMyAod2l0aCBzb21lCj4gb3V0LW9mLXRyZWUgRFRTKS4KPgo+IFRvIGVhc2Ug dGVzdGluZyBJJ3ZlIHByZXBhcmVkIGEgYnJhbmNoIHdpdGggYWxsIHRoZSBwYXRjaGVzIG5lZWRl ZAo+ICh0aGVyZSBhcmUgYWxsIG5lZWRlZCBwYXRjaGVzIGZvciBFeHlub3Mgc3ViYXJjaCwgd2hp Y2ggaGF2ZSBiZWVuIHBvc3RlZAo+IGFzIHNlcGFyYXRlIHBhdGNoc2V0cyk6Cj4gaHR0cHM6Ly9n aXQubGluYXJvLm9yZy9wZW9wbGUvbWFyZWsuc3p5cHJvd3NraS9saW51eC1zcnBvbC5naXQgdjQu NS1kbWEtaW9tbXUtdW5pZmljYXRpb24KPgo+IFBhdGNoZXMgYXJlIGJhc2VkIG9uIExpbnV4IHY0 LjUtcmM0IHZhbmlsbGEgdHJlZS4KPgo+IEJlc3QgcmVnYXJkcwo+IE1hcmVrIFN6eXByb3dza2kK PiBTYW1zdW5nIFImRCBJbnN0aXR1dGUgUG9sYW5kCj4KPgo+IFBhdGNoIHN1bW1hcnk6Cj4KPiBN YXJlayBTenlwcm93c2tpICgzKToKPiAgICBkcm0vZXh5bm9zOiByZXdyaXRlIElPTU1VIHN1cHBv cnQgY29kZQo+ICAgIGlvbW11OiBkbWEtaW9tbXU6IG1vdmUgSU9NTVUvRE1BLW1hcHBpbmcgY29k ZSBmcm9tIEFSTTY0IGFyY2ggdG8gZHJpdmVycwo+ICAgIGlvbW11OiBkbWEtaW9tbXU6IHVzZSBj b21tb24gaW1wbGVtZW50YXRpb24gYWxzbyBvbiBBUk0gYXJjaGl0ZWN0dXJlCj4KPiAgIGFyY2gv YXJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArLQo+ICAgYXJjaC9h cm0vaW5jbHVkZS9hc20vZGV2aWNlLmggICAgICAgICAgICAgfCAgICA5IC0KPiAgIGFyY2gvYXJt L2luY2x1ZGUvYXNtL2RtYS1pb21tdS5oICAgICAgICAgIHwgICAzNyAtCj4gICBhcmNoL2FybS9p bmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oICAgICAgICB8ICAgNTkgKy0KPiAgIGFyY2gvYXJtL21t L2RtYS1tYXBwaW5nLmMgICAgICAgICAgICAgICAgIHwgMTE1OCArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ICAgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oICAgICAg fCAgIDM5ICstCj4gICBhcmNoL2FybTY0L21tL2RtYS1tYXBwaW5nLmMgICAgICAgICAgICAgICB8 ICA0OTEgKy0tLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL0tjb25maWcgICAg ICAgICAgICB8ICAgIDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9k cnYuYyAgIHwgICAgNyArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Ry di5oICAgfCAgICAyICstCj4gICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1faW9t bXUuYyB8ICAgOTEgKystCj4gICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1faW9t bXUuaCB8ICAgIDIgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnICAgICAg ICAgIHwgICAgMSArCj4gICBkcml2ZXJzL2lvbW11L0tjb25maWcgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwo+ICAgZHJpdmVycy9pb21tdS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg fCAgICAyICstCj4gICBkcml2ZXJzL2lvbW11L2RtYS1pb21tdS1vcHMuYyAgICAgICAgICAgICB8 ICA0NzEgKysrKysrKysrKysrCj4gICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcgICAg ICAgICAgICB8ICAgIDEgKwo+ICAgaW5jbHVkZS9saW51eC9kbWEtaW9tbXUuaCAgICAgICAgICAg ICAgICAgfCAgIDE0ICsKPiAgIDE4IGZpbGVzIGNoYW5nZWQsIDY3OSBpbnNlcnRpb25zKCspLCAx NzMwIGRlbGV0aW9ucygtKQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL2luY2x1ZGUv YXNtL2RtYS1pb21tdS5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pb21tdS9kbWEt aW9tbXUtb3BzLmMKPgoKCi0tIArvvK1hcmsgWWFvCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: mark.yao@rock-chips.com (Mark yao) Date: Mon, 18 Apr 2016 10:18:37 +0800 Subject: [RFC 0/3] Unify IOMMU-based DMA-mapping code for ARM and ARM64 In-Reply-To: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com> References: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com> Message-ID: <571443FD.9090508@rock-chips.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Marek With your patches, do drm/rockchip dma-mapping rewrite, IOMMU works good on drm/rockchip ARM64 platform. Thanks for your patches. On 2016?02?19? 16:22, Marek Szyprowski wrote: > Dear All, > > This is an initial RFC on the unification of IOMMU-based DMA-mapping > code for ARM and ARM64 architectures. > > Right now ARM architecture still use my old code for IOMMU-based > DMA-mapping glue, initially merged in commit > 4ce63fcd919c32d22528e54dcd89506962933719 ("ARM: dma-mapping: add support > for IOMMU mapper"). In meantime ARM64 got a new, slightly improved > implementation provided by Robin Murphy in commit > 13b8629f651164d71f4d38b821925f93ba4236c8 ("arm64: Add IOMMU dma_ops"). > > Both implementations are very similar thus their unification is desired > to avoid duplicating future works and simplify code, which uses this > layer on both architectures. In this patchset I've selected the new > implementation (from ARM64 architecture) as a base. This means that > ARM-specific, old interface (arm_iommu_* functions) for configuring > IOMMU domains will be no longer available and its users have to be > converted to new API. > > Besides lack of old interface, the second difference is additional > requirements for IOMMU drivers. New code relies on the support for > IOMMU_DOMAIN_DMA and default IOMMU domain, which is automatically > attached by the IOMMU core. > > The new code also assumes that the IOMMU-based DMA-mapping ops are > mainly configured from arch_setup_dma_ops() function, which means that > the IOMMU driver should provide needed of_xlate callbacks and initialize > IOMMU ops for device nodes. However it should be also possible to > initialize IOMMU-based DMA-mapping ops for client devices directly from > IOMMU drivers by calling common_iommu_setup_dma_ops() (some drivers used > such approach). > > IOMMU drivers should be also aware of the fact that the > default domain is attached via device_attach and then device_attach > callback can be called once again with different domain without previous > detach from default domain. For more information on this issue, see the > following thread: > https://lists.linaro.org/pipermail/linaro-mm-sig/2016-February/004625.html > > Currently there are 4 users of the old arm_iommu_* interface: > 1. Exynos DRM driver > 2. Rockchip DRM driver > 3. OMAP3 ISP camera driver > 4. Renesas VMSA-compatible IPMMU driver > > In this patchset I've converted Exynos DRM driver for the new API (patch > 1). This required some changes in the memory management model inside the > driver and removal of some hacks, which were used to setup IOMMU-based > DMA-mapping ops on the 'exynos-drm' virtual device and common IOMMU > domain for all Exynos DRM sub-devices, those changes have been posted > separately here: http://www.spinics.net/lists/dri-devel/msg100861.html > Rockchip DRM driver requires similar conversion. > > Converting OMAP3 ISP camera driver to new API requires adding support > for IOMMU groups to OMAP IOMMU driver, because the new DMA/IOMMU code > used IOMMU_DOMAIN_DMA type domains and default groups. > > Renesas IPMMU driver needs also to be extended with IOMMU_DOMAIN_DMA domain > type support. It can also be prepared for IOMMU_OF_DECLARE and of_xlate > callback-based initialization to let core to automatically setup of > IOMMU-based DMA mapping implementation. > > Patch 2 moves existing code from arch/arm64 to drivers/iommu and > introduces some minor changes in function names - mainly adding arch_ > prefix to some dma-mapping internal functions, which stay in arch/arm64/ > (functions of similar names are present in arch/arm). Patch 3 adapts ARM > architecture for the common code. > > I would like to get your comments on the proposed approach. There is > still some work that need to be done to convert remaining users of the > old API and updating IOMMU drivers to the new API requirements. This > change need to be tested on the all affected ARM sub-architectures. > > Right now patches were tested on only Exynos based boards: ARM 32bit: > Exynos4412 and Exynos5422 boards and ARM 64 bit Exnyos 5433 (with some > out-of-tree DTS). > > To ease testing I've prepared a branch with all the patches needed > (there are all needed patches for Exynos subarch, which have been posted > as separate patchsets): > https://git.linaro.org/people/marek.szyprowski/linux-srpol.git v4.5-dma-iommu-unification > > Patches are based on Linux v4.5-rc4 vanilla tree. > > Best regards > Marek Szyprowski > Samsung R&D Institute Poland > > > Patch summary: > > Marek Szyprowski (3): > drm/exynos: rewrite IOMMU support code > iommu: dma-iommu: move IOMMU/DMA-mapping code from ARM64 arch to drivers > iommu: dma-iommu: use common implementation also on ARM architecture > > arch/arm/Kconfig | 22 +- > arch/arm/include/asm/device.h | 9 - > arch/arm/include/asm/dma-iommu.h | 37 - > arch/arm/include/asm/dma-mapping.h | 59 +- > arch/arm/mm/dma-mapping.c | 1158 +---------------------------- > arch/arm64/include/asm/dma-mapping.h | 39 +- > arch/arm64/mm/dma-mapping.c | 491 +----------- > drivers/gpu/drm/exynos/Kconfig | 2 +- > drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 +- > drivers/gpu/drm/exynos/exynos_drm_drv.h | 2 +- > drivers/gpu/drm/exynos/exynos_drm_iommu.c | 91 ++- > drivers/gpu/drm/exynos/exynos_drm_iommu.h | 2 +- > drivers/gpu/drm/rockchip/Kconfig | 1 + > drivers/iommu/Kconfig | 1 + > drivers/iommu/Makefile | 2 +- > drivers/iommu/dma-iommu-ops.c | 471 ++++++++++++ > drivers/media/platform/Kconfig | 1 + > include/linux/dma-iommu.h | 14 + > 18 files changed, 679 insertions(+), 1730 deletions(-) > delete mode 100644 arch/arm/include/asm/dma-iommu.h > create mode 100644 drivers/iommu/dma-iommu-ops.c > -- ?ark Yao From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751682AbcDRCSz (ORCPT ); Sun, 17 Apr 2016 22:18:55 -0400 Received: from regular1.263xmail.com ([211.150.99.134]:35012 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751316AbcDRCSx (ORCPT ); Sun, 17 Apr 2016 22:18:53 -0400 X-263anti-spam: BIG:0;ABS:1;DNS:0;ATT:0;SPF:S;KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-ABS-CHECKED: 1 X-SKE-CHECKED: 1 X-ADDR-CHECKED: 0 X-KSVirus-check: 0 X-RL-SENDER: mark.yao@rock-chips.com X-FST-TO: k.kozlowski@samsung.com X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: mark.yao@rock-chips.com X-UNIQUE-TAG: <762c0ab247c8a6e705f05904993aa04e> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Message-ID: <571443FD.9090508@rock-chips.com> Date: Mon, 18 Apr 2016 10:18:37 +0800 From: Mark yao User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: Marek Szyprowski , iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org CC: linaro-mm-sig@lists.linaro.org, dri-devel@lists.freedesktop.org, Arnd Bergmann , Will Deacon , Catalin Marinas , Robin Murphy , Russell King - ARM Linux , Joerg Roedel , Laurent Pinchart , Sakari Ailus , Heiko Stuebner , Tomasz Figa , Inki Dae , Bartlomiej Zolnierkiewicz , Krzysztof Kozlowski Subject: Re: [RFC 0/3] Unify IOMMU-based DMA-mapping code for ARM and ARM64 References: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com> In-Reply-To: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Marek With your patches, do drm/rockchip dma-mapping rewrite, IOMMU works good on drm/rockchip ARM64 platform. Thanks for your patches. On 2016年02月19日 16:22, Marek Szyprowski wrote: > Dear All, > > This is an initial RFC on the unification of IOMMU-based DMA-mapping > code for ARM and ARM64 architectures. > > Right now ARM architecture still use my old code for IOMMU-based > DMA-mapping glue, initially merged in commit > 4ce63fcd919c32d22528e54dcd89506962933719 ("ARM: dma-mapping: add support > for IOMMU mapper"). In meantime ARM64 got a new, slightly improved > implementation provided by Robin Murphy in commit > 13b8629f651164d71f4d38b821925f93ba4236c8 ("arm64: Add IOMMU dma_ops"). > > Both implementations are very similar thus their unification is desired > to avoid duplicating future works and simplify code, which uses this > layer on both architectures. In this patchset I've selected the new > implementation (from ARM64 architecture) as a base. This means that > ARM-specific, old interface (arm_iommu_* functions) for configuring > IOMMU domains will be no longer available and its users have to be > converted to new API. > > Besides lack of old interface, the second difference is additional > requirements for IOMMU drivers. New code relies on the support for > IOMMU_DOMAIN_DMA and default IOMMU domain, which is automatically > attached by the IOMMU core. > > The new code also assumes that the IOMMU-based DMA-mapping ops are > mainly configured from arch_setup_dma_ops() function, which means that > the IOMMU driver should provide needed of_xlate callbacks and initialize > IOMMU ops for device nodes. However it should be also possible to > initialize IOMMU-based DMA-mapping ops for client devices directly from > IOMMU drivers by calling common_iommu_setup_dma_ops() (some drivers used > such approach). > > IOMMU drivers should be also aware of the fact that the > default domain is attached via device_attach and then device_attach > callback can be called once again with different domain without previous > detach from default domain. For more information on this issue, see the > following thread: > https://lists.linaro.org/pipermail/linaro-mm-sig/2016-February/004625.html > > Currently there are 4 users of the old arm_iommu_* interface: > 1. Exynos DRM driver > 2. Rockchip DRM driver > 3. OMAP3 ISP camera driver > 4. Renesas VMSA-compatible IPMMU driver > > In this patchset I've converted Exynos DRM driver for the new API (patch > 1). This required some changes in the memory management model inside the > driver and removal of some hacks, which were used to setup IOMMU-based > DMA-mapping ops on the 'exynos-drm' virtual device and common IOMMU > domain for all Exynos DRM sub-devices, those changes have been posted > separately here: http://www.spinics.net/lists/dri-devel/msg100861.html > Rockchip DRM driver requires similar conversion. > > Converting OMAP3 ISP camera driver to new API requires adding support > for IOMMU groups to OMAP IOMMU driver, because the new DMA/IOMMU code > used IOMMU_DOMAIN_DMA type domains and default groups. > > Renesas IPMMU driver needs also to be extended with IOMMU_DOMAIN_DMA domain > type support. It can also be prepared for IOMMU_OF_DECLARE and of_xlate > callback-based initialization to let core to automatically setup of > IOMMU-based DMA mapping implementation. > > Patch 2 moves existing code from arch/arm64 to drivers/iommu and > introduces some minor changes in function names - mainly adding arch_ > prefix to some dma-mapping internal functions, which stay in arch/arm64/ > (functions of similar names are present in arch/arm). Patch 3 adapts ARM > architecture for the common code. > > I would like to get your comments on the proposed approach. There is > still some work that need to be done to convert remaining users of the > old API and updating IOMMU drivers to the new API requirements. This > change need to be tested on the all affected ARM sub-architectures. > > Right now patches were tested on only Exynos based boards: ARM 32bit: > Exynos4412 and Exynos5422 boards and ARM 64 bit Exnyos 5433 (with some > out-of-tree DTS). > > To ease testing I've prepared a branch with all the patches needed > (there are all needed patches for Exynos subarch, which have been posted > as separate patchsets): > https://git.linaro.org/people/marek.szyprowski/linux-srpol.git v4.5-dma-iommu-unification > > Patches are based on Linux v4.5-rc4 vanilla tree. > > Best regards > Marek Szyprowski > Samsung R&D Institute Poland > > > Patch summary: > > Marek Szyprowski (3): > drm/exynos: rewrite IOMMU support code > iommu: dma-iommu: move IOMMU/DMA-mapping code from ARM64 arch to drivers > iommu: dma-iommu: use common implementation also on ARM architecture > > arch/arm/Kconfig | 22 +- > arch/arm/include/asm/device.h | 9 - > arch/arm/include/asm/dma-iommu.h | 37 - > arch/arm/include/asm/dma-mapping.h | 59 +- > arch/arm/mm/dma-mapping.c | 1158 +---------------------------- > arch/arm64/include/asm/dma-mapping.h | 39 +- > arch/arm64/mm/dma-mapping.c | 491 +----------- > drivers/gpu/drm/exynos/Kconfig | 2 +- > drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 +- > drivers/gpu/drm/exynos/exynos_drm_drv.h | 2 +- > drivers/gpu/drm/exynos/exynos_drm_iommu.c | 91 ++- > drivers/gpu/drm/exynos/exynos_drm_iommu.h | 2 +- > drivers/gpu/drm/rockchip/Kconfig | 1 + > drivers/iommu/Kconfig | 1 + > drivers/iommu/Makefile | 2 +- > drivers/iommu/dma-iommu-ops.c | 471 ++++++++++++ > drivers/media/platform/Kconfig | 1 + > include/linux/dma-iommu.h | 14 + > 18 files changed, 679 insertions(+), 1730 deletions(-) > delete mode 100644 arch/arm/include/asm/dma-iommu.h > create mode 100644 drivers/iommu/dma-iommu-ops.c > -- Mark Yao