From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 3/4] ARM: dma-mapping: Implement arch_iommu_detach_device() Date: Wed, 25 Apr 2018 11:18:14 +0200 Message-ID: <20180425091815.16264-3-thierry.reding@gmail.com> References: <20180425091815.16264-1-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180425091815.16264-1-thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Christoph Hellwig , Joerg Roedel Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Daniel Vetter , linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org List-Id: linux-tegra@vger.kernel.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkltcGxlbWVudCB0aGlz IGZ1bmN0aW9uIHRvIGVuYWJsZSBkcml2ZXJzIGZyb20gZGV0YWNoaW5nIGZyb20gYW55IElPTU1V CmRvbWFpbnMgdGhhdCBhcmNoaXRlY3R1cmUgY29kZSBtaWdodCBoYXZlIGF0dGFjaGVkIHRoZW0g dG8gc28gdGhhdCB0aGV5CmNhbiB0YWtlIGV4Y2x1c2l2ZSBjb250cm9sIG9mIHRoZSBJT01NVSB2 aWEgdGhlIElPTU1VIEFQSS4KClNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5n QG52aWRpYS5jb20+Ci0tLQogYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCB8ICAz ICsrKwogYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmctbm9tbXUuYyAgICB8ICA0ICsrKysKIGFyY2gv YXJtL21tL2RtYS1tYXBwaW5nLmMgICAgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCiAz IGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9p bmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBp bmcuaAppbmRleCA4NDM2ZjZhZGU1N2QuLmQ2ZDViZDQ0Zjk2MiAxMDA2NDQKLS0tIGEvYXJjaC9h cm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9k bWEtbWFwcGluZy5oCkBAIC0xMDMsNiArMTAzLDkgQEAgZXh0ZXJuIHZvaWQgYXJjaF9zZXR1cF9k bWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9iYXNlLCB1NjQgc2l6ZSwKICNkZWZp bmUgYXJjaF90ZWFyZG93bl9kbWFfb3BzIGFyY2hfdGVhcmRvd25fZG1hX29wcwogZXh0ZXJuIHZv aWQgYXJjaF90ZWFyZG93bl9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKKyNkZWZpbmUg YXJjaF9pb21tdV9kZXRhY2hfZGV2aWNlIGFyY2hfaW9tbXVfZGV0YWNoX2RldmljZQorZXh0ZXJu IHZvaWQgYXJjaF9pb21tdV9kZXRhY2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKIC8q IGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbiBhIGRyaXZlciAqLwogc3RhdGljIGlubGluZSBi b29sIGlzX2RldmljZV9kbWFfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2KQogewpkaWZmIC0t Z2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmctbm9tbXUuYyBiL2FyY2gvYXJtL21tL2RtYS1t YXBwaW5nLW5vbW11LmMKaW5kZXggNjE5ZjI0YTQyZDA5Li42MGZlZjk3ZDg0NTIgMTAwNjQ0Ci0t LSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLW5vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vZG1h LW1hcHBpbmctbm9tbXUuYwpAQCAtMjQyLDYgKzI0MiwxMCBAQCB2b2lkIGFyY2hfdGVhcmRvd25f ZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiB9CiAKK3ZvaWQgYXJjaF9pb21tdV9kZXRh Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKwogI2RlZmluZSBQUkVBTExPQ19E TUFfREVCVUdfRU5UUklFUwk0MDk2CiAKIHN0YXRpYyBpbnQgX19pbml0IGRtYV9kZWJ1Z19kb19p bml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9h cm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCA4YzM5OGZlZGJiYjYuLjE5NTc5MzhkOGM5YyAxMDA2 NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEt bWFwcGluZy5jCkBAIC0yMzY2LDYgKzIzNjYsMjEgQEAgc3RhdGljIHZvaWQgYXJtX3RlYXJkb3du X2lvbW11X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogCWFybV9pb21tdV9yZWxlYXNlX21h cHBpbmcobWFwcGluZyk7CiB9CiAKK3ZvaWQgYXJjaF9pb21tdV9kZXRhY2hfZGV2aWNlKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcgPSB0 b19kbWFfaW9tbXVfbWFwcGluZyhkZXYpOworCWNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqZG1h X29wczsKKworCWlmICghbWFwcGluZykKKwkJcmV0dXJuOworCisJYXJtX2lvbW11X3JlbGVhc2Vf bWFwcGluZyhtYXBwaW5nKTsKKwlhcm1faW9tbXVfZGV0YWNoX2RldmljZShkZXYpOworCisJZG1h X29wcyA9IGFybV9nZXRfZG1hX21hcF9vcHMoZGV2LT5hcmNoZGF0YS5kbWFfY29oZXJlbnQpOwor CXNldF9kbWFfb3BzKGRldiwgZG1hX29wcyk7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBib29sIGFy bV9zZXR1cF9pb21tdV9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9iYXNlLCB1 NjQgc2l6ZSwKQEAgLTIzNzgsNiArMjM5MywxMCBAQCBzdGF0aWMgdm9pZCBhcm1fdGVhcmRvd25f aW9tbXVfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfQogCiAjZGVmaW5lIGFybV9nZXRf aW9tbXVfZG1hX21hcF9vcHMgYXJtX2dldF9kbWFfbWFwX29wcwogCit2b2lkIGFyY2hfaW9tbXVf ZGV0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CisKICNlbmRpZgkvKiBDT05G SUdfQVJNX0RNQV9VU0VfSU9NTVUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29w cyAqYXJtX2dldF9kbWFfbWFwX29wcyhib29sIGNvaGVyZW50KQotLSAKMi4xNy4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcg bGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK From mboxrd@z Thu Jan 1 00:00:00 1970 From: thierry.reding@gmail.com (Thierry Reding) Date: Wed, 25 Apr 2018 11:18:14 +0200 Subject: [PATCH 3/4] ARM: dma-mapping: Implement arch_iommu_detach_device() In-Reply-To: <20180425091815.16264-1-thierry.reding@gmail.com> References: <20180425091815.16264-1-thierry.reding@gmail.com> Message-ID: <20180425091815.16264-3-thierry.reding@gmail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Thierry Reding Implement this function to enable drivers from detaching from any IOMMU domains that architecture code might have attached them to so that they can take exclusive control of the IOMMU via the IOMMU API. Signed-off-by: Thierry Reding --- arch/arm/include/asm/dma-mapping.h | 3 +++ arch/arm/mm/dma-mapping-nommu.c | 4 ++++ arch/arm/mm/dma-mapping.c | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 8436f6ade57d..d6d5bd44f962 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h @@ -103,6 +103,9 @@ extern void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, #define arch_teardown_dma_ops arch_teardown_dma_ops extern void arch_teardown_dma_ops(struct device *dev); +#define arch_iommu_detach_device arch_iommu_detach_device +extern void arch_iommu_detach_device(struct device *dev); + /* do not use this function in a driver */ static inline bool is_device_dma_coherent(struct device *dev) { diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c index 619f24a42d09..60fef97d8452 100644 --- a/arch/arm/mm/dma-mapping-nommu.c +++ b/arch/arm/mm/dma-mapping-nommu.c @@ -242,6 +242,10 @@ void arch_teardown_dma_ops(struct device *dev) { } +void arch_iommu_detach_device(struct device *dev) +{ +} + #define PREALLOC_DMA_DEBUG_ENTRIES 4096 static int __init dma_debug_do_init(void) diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 8c398fedbbb6..1957938d8c9c 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -2366,6 +2366,21 @@ static void arm_teardown_iommu_dma_ops(struct device *dev) arm_iommu_release_mapping(mapping); } +void arch_iommu_detach_device(struct device *dev) +{ + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); + const struct dma_map_ops *dma_ops; + + if (!mapping) + return; + + arm_iommu_release_mapping(mapping); + arm_iommu_detach_device(dev); + + dma_ops = arm_get_dma_map_ops(dev->archdata.dma_coherent); + set_dma_ops(dev, dma_ops); +} + #else static bool arm_setup_iommu_dma_ops(struct device *dev, u64 dma_base, u64 size, @@ -2378,6 +2393,10 @@ static void arm_teardown_iommu_dma_ops(struct device *dev) { } #define arm_get_iommu_dma_map_ops arm_get_dma_map_ops +void arch_iommu_detach_device(struct device *dev) +{ +} + #endif /* CONFIG_ARM_DMA_USE_IOMMU */ static const struct dma_map_ops *arm_get_dma_map_ops(bool coherent) -- 2.17.0