From mboxrd@z Thu Jan 1 00:00:00 1970 From: daniel@ffwll.ch (Daniel Vetter) Date: Tue, 30 Jan 2018 10:53:57 +0100 Subject: [PATCH 3/5] drm: add ARM64 flush implementations In-Reply-To: <2cf40ed8-cb7c-3f17-a8e4-2cbf2fb980e6@arm.com> References: <20180124025606.3020-2-gurchetansingh@chromium.org> <20180124025606.3020-3-gurchetansingh@chromium.org> <2cf40ed8-cb7c-3f17-a8e4-2cbf2fb980e6@arm.com> Message-ID: <20180130095357.GI25930@phenom.ffwll.local> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Wed, Jan 24, 2018 at 12:00:59PM +0000, Robin Murphy wrote: > On 24/01/18 02:56, Gurchetan Singh wrote: > > This patch uses the __dma_map_area function to flush the cache > > on ARM64. > > > > v2: Don't use DMA API, call functions directly (Daniel) > > > > Signed-off-by: Gurchetan Singh > > --- > > drivers/gpu/drm/drm_cache.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/drivers/gpu/drm/drm_cache.c b/drivers/gpu/drm/drm_cache.c > > index 5124582451c6..250cdfbb711f 100644 > > --- a/drivers/gpu/drm/drm_cache.c > > +++ b/drivers/gpu/drm/drm_cache.c > > @@ -159,6 +159,12 @@ drm_flush_pages(struct page *pages[], unsigned long num_pages) > > for (i = 0; i < num_pages; i++) > > drm_cache_maint_page(pages[i], 0, PAGE_SIZE, DMA_TO_DEVICE, > > dmac_map_area); > > +#elif defined(CONFIG_ARM64) > > + unsigned long i; > > + > > + for (i = 0; i < num_pages; i++) > > + __dma_map_area(phys_to_virt(page_to_phys(pages[i])), PAGE_SIZE, > > + DMA_TO_DEVICE); > > Note that this is not exactly equivalent to clflush - if it's at all > possible for a non-coherent GPU to write back to these pages and someone > somewhere expects to be able to read the updated data from a CPU, that's > going to be subtly broken. > > This also breaks building DRM as a module. And I doubt that either of the > two easy solutions to that are going to fly with the respective > maintainers... > > Given all the bodging around which seems to happen in DRM/ION/etc., it would > be really nice to pin down what exactly the shortcomings of the DMA API are > for these use-cases, and extend it to address them properly. tldr; a dma-buf exporter more-or-less has to act like a dma-api architecture implementation. Which means flushing stuff at the right time. Going through the dma-api means we need to pass around a struct device * where none is needed, which seems silly. The original patches did add that dummy struct device *, but after digging around in the actual implementations we've noticed that there's no need for them. Ofc you can question whether gpu drivers really need to noodle around in such platform details, but given that all of them do that (all = those that implement rendering, not just display) I'm just accepting that as a fact of life. It's definitely unrealistic to demand those all get fixed, even if the end result would be more maintainable. We can ofc postpone this entire discussion by mandating that all shared gpu buffers on ARM32 must be wc mapped by everyone. But at least on some x86 machines (it's a function of how big your caches are and where your gpu sits) cached access is actually faster for upload/download buffers. Ofc since the dma-api tries to hide all this the wc vs. cached assumptions are all implicit in dma-buf, which makes this all lots of fun. -Daniel > > Robin. > > > #else > > pr_err("Architecture has no drm_cache.c support\n"); > > WARN_ON_ONCE(1); > > @@ -196,6 +202,13 @@ drm_flush_sg(struct sg_table *st) > > for_each_sg_page(st->sgl, &sg_iter, st->nents, 0) > > drm_cache_maint_page(sg_page_iter_page(&sg_iter), 0, PAGE_SIZE, > > DMA_TO_DEVICE, dmac_map_area); > > +#elif defined(CONFIG_ARM64) > > + int i; > > + struct scatterlist *sg; > > + > > + for_each_sg(st->sgl, sg, st->nents, i) > > + __dma_map_area(phys_to_virt(sg_phys(sg)), sg->length, > > + DMA_TO_DEVICE); > > #else > > pr_err("Architecture has no drm_cache.c support\n"); > > WARN_ON_ONCE(1); > > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/5] drm: add ARM64 flush implementations Date: Tue, 30 Jan 2018 10:53:57 +0100 Message-ID: <20180130095357.GI25930@phenom.ffwll.local> References: <20180124025606.3020-2-gurchetansingh@chromium.org> <20180124025606.3020-3-gurchetansingh@chromium.org> <2cf40ed8-cb7c-3f17-a8e4-2cbf2fb980e6@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5EB3B6E754 for ; Tue, 30 Jan 2018 09:54:03 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id t74so19870501wme.3 for ; Tue, 30 Jan 2018 01:54:03 -0800 (PST) Content-Disposition: inline In-Reply-To: <2cf40ed8-cb7c-3f17-a8e4-2cbf2fb980e6@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Robin Murphy Cc: dri-devel@lists.freedesktop.org, Gurchetan Singh , thierry.reding@gmail.com, laurent.pinchart@ideasonboard.com, daniel.vetter@intel.com, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBKYW4gMjQsIDIwMTggYXQgMTI6MDA6NTlQTSArMDAwMCwgUm9iaW4gTXVycGh5IHdy b3RlOgo+IE9uIDI0LzAxLzE4IDAyOjU2LCBHdXJjaGV0YW4gU2luZ2ggd3JvdGU6Cj4gPiBUaGlz IHBhdGNoIHVzZXMgdGhlIF9fZG1hX21hcF9hcmVhIGZ1bmN0aW9uIHRvIGZsdXNoIHRoZSBjYWNo ZQo+ID4gb24gQVJNNjQuCj4gPiAKPiA+IHYyOiBEb24ndCB1c2UgRE1BIEFQSSwgY2FsbCBmdW5j dGlvbnMgZGlyZWN0bHkgKERhbmllbCkKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogR3VyY2hldGFu IFNpbmdoIDxndXJjaGV0YW5zaW5naEBjaHJvbWl1bS5vcmc+Cj4gPiAtLS0KPiA+ICAgZHJpdmVy cy9ncHUvZHJtL2RybV9jYWNoZS5jIHwgMTMgKysrKysrKysrKysrKwo+ID4gICAxIGZpbGUgY2hh bmdlZCwgMTMgaW5zZXJ0aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9jYWNoZS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCj4gPiBpbmRleCA1 MTI0NTgyNDUxYzYuLjI1MGNkZmJiNzExZiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fY2FjaGUuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCj4gPiBA QCAtMTU5LDYgKzE1OSwxMiBAQCBkcm1fZmx1c2hfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2VzW10s IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQo+ID4gICAJZm9yIChpID0gMDsgaSA8IG51bV9wYWdl czsgaSsrKQo+ID4gICAJCWRybV9jYWNoZV9tYWludF9wYWdlKHBhZ2VzW2ldLCAwLCBQQUdFX1NJ WkUsIERNQV9UT19ERVZJQ0UsCj4gPiAgIAkJCQkgICAgIGRtYWNfbWFwX2FyZWEpOwo+ID4gKyNl bGlmIGRlZmluZWQoQ09ORklHX0FSTTY0KQo+ID4gKwl1bnNpZ25lZCBsb25nIGk7Cj4gPiArCj4g PiArCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKPiA+ICsJCV9fZG1hX21hcF9hcmVh KHBoeXNfdG9fdmlydChwYWdlX3RvX3BoeXMocGFnZXNbaV0pKSwgUEFHRV9TSVpFLAo+ID4gKwkJ CSAgICAgICBETUFfVE9fREVWSUNFKTsKPiAKPiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZXhhY3Rs eSBlcXVpdmFsZW50IHRvIGNsZmx1c2ggLSBpZiBpdCdzIGF0IGFsbAo+IHBvc3NpYmxlIGZvciBh IG5vbi1jb2hlcmVudCBHUFUgdG8gd3JpdGUgYmFjayB0byB0aGVzZSBwYWdlcyBhbmQgc29tZW9u ZQo+IHNvbWV3aGVyZSBleHBlY3RzIHRvIGJlIGFibGUgdG8gcmVhZCB0aGUgdXBkYXRlZCBkYXRh IGZyb20gYSBDUFUsIHRoYXQncwo+IGdvaW5nIHRvIGJlIHN1YnRseSBicm9rZW4uCj4gCj4gVGhp cyBhbHNvIGJyZWFrcyBidWlsZGluZyBEUk0gYXMgYSBtb2R1bGUuIEFuZCBJIGRvdWJ0IHRoYXQg ZWl0aGVyIG9mIHRoZQo+IHR3byBlYXN5IHNvbHV0aW9ucyB0byB0aGF0IGFyZSBnb2luZyB0byBm bHkgd2l0aCB0aGUgcmVzcGVjdGl2ZQo+IG1haW50YWluZXJzLi4uCj4gCj4gR2l2ZW4gYWxsIHRo ZSBib2RnaW5nIGFyb3VuZCB3aGljaCBzZWVtcyB0byBoYXBwZW4gaW4gRFJNL0lPTi9ldGMuLCBp dCB3b3VsZAo+IGJlIHJlYWxseSBuaWNlIHRvIHBpbiBkb3duIHdoYXQgZXhhY3RseSB0aGUgc2hv cnRjb21pbmdzIG9mIHRoZSBETUEgQVBJIGFyZQo+IGZvciB0aGVzZSB1c2UtY2FzZXMsIGFuZCBl eHRlbmQgaXQgdG8gYWRkcmVzcyB0aGVtIHByb3Blcmx5LgoKdGxkcjsgYSBkbWEtYnVmIGV4cG9y dGVyIG1vcmUtb3ItbGVzcyBoYXMgdG8gYWN0IGxpa2UgYSBkbWEtYXBpCmFyY2hpdGVjdHVyZSBp bXBsZW1lbnRhdGlvbi4gV2hpY2ggbWVhbnMgZmx1c2hpbmcgc3R1ZmYgYXQgdGhlIHJpZ2h0IHRp bWUuCkdvaW5nIHRocm91Z2ggdGhlIGRtYS1hcGkgbWVhbnMgd2UgbmVlZCB0byBwYXNzIGFyb3Vu ZCBhIHN0cnVjdCBkZXZpY2UgKgp3aGVyZSBub25lIGlzIG5lZWRlZCwgd2hpY2ggc2VlbXMgc2ls bHkuIFRoZSBvcmlnaW5hbCBwYXRjaGVzIGRpZCBhZGQgdGhhdApkdW1teSBzdHJ1Y3QgZGV2aWNl ICosIGJ1dCBhZnRlciBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgYWN0dWFsCmltcGxlbWVudGF0aW9u cyB3ZSd2ZSBub3RpY2VkIHRoYXQgdGhlcmUncyBubyBuZWVkIGZvciB0aGVtLgoKT2ZjIHlvdSBj YW4gcXVlc3Rpb24gd2hldGhlciBncHUgZHJpdmVycyByZWFsbHkgbmVlZCB0byBub29kbGUgYXJv dW5kIGluCnN1Y2ggcGxhdGZvcm0gZGV0YWlscywgYnV0IGdpdmVuIHRoYXQgYWxsIG9mIHRoZW0g ZG8gdGhhdCAoYWxsID0gdGhvc2UKdGhhdCBpbXBsZW1lbnQgcmVuZGVyaW5nLCBub3QganVzdCBk aXNwbGF5KSBJJ20ganVzdCBhY2NlcHRpbmcgdGhhdCBhcyBhCmZhY3Qgb2YgbGlmZS4gSXQncyBk ZWZpbml0ZWx5IHVucmVhbGlzdGljIHRvIGRlbWFuZCB0aG9zZSBhbGwgZ2V0IGZpeGVkLApldmVu IGlmIHRoZSBlbmQgcmVzdWx0IHdvdWxkIGJlIG1vcmUgbWFpbnRhaW5hYmxlLgoKV2UgY2FuIG9m YyBwb3N0cG9uZSB0aGlzIGVudGlyZSBkaXNjdXNzaW9uIGJ5IG1hbmRhdGluZyB0aGF0IGFsbCBz aGFyZWQKZ3B1IGJ1ZmZlcnMgb24gQVJNMzIgbXVzdCBiZSB3YyBtYXBwZWQgYnkgZXZlcnlvbmUu IEJ1dCBhdCBsZWFzdCBvbiBzb21lCng4NiBtYWNoaW5lcyAoaXQncyBhIGZ1bmN0aW9uIG9mIGhv dyBiaWcgeW91ciBjYWNoZXMgYXJlIGFuZCB3aGVyZSB5b3VyCmdwdSBzaXRzKSBjYWNoZWQgYWNj ZXNzIGlzIGFjdHVhbGx5IGZhc3RlciBmb3IgdXBsb2FkL2Rvd25sb2FkIGJ1ZmZlcnMuCk9mYyBz aW5jZSB0aGUgZG1hLWFwaSB0cmllcyB0byBoaWRlIGFsbCB0aGlzIHRoZSB3YyB2cy4gY2FjaGVk IGFzc3VtcHRpb25zCmFyZSBhbGwgaW1wbGljaXQgaW4gZG1hLWJ1Ziwgd2hpY2ggbWFrZXMgdGhp cyBhbGwgbG90cyBvZiBmdW4uCi1EYW5pZWwKCj4gCj4gUm9iaW4uCj4gCj4gPiAgICNlbHNlCj4g PiAgIAlwcl9lcnIoIkFyY2hpdGVjdHVyZSBoYXMgbm8gZHJtX2NhY2hlLmMgc3VwcG9ydFxuIik7 Cj4gPiAgIAlXQVJOX09OX09OQ0UoMSk7Cj4gPiBAQCAtMTk2LDYgKzIwMiwxMyBAQCBkcm1fZmx1 c2hfc2coc3RydWN0IHNnX3RhYmxlICpzdCkKPiA+ICAgCWZvcl9lYWNoX3NnX3BhZ2Uoc3QtPnNn bCwgJnNnX2l0ZXIsIHN0LT5uZW50cywgMCkKPiA+ICAgCQlkcm1fY2FjaGVfbWFpbnRfcGFnZShz Z19wYWdlX2l0ZXJfcGFnZSgmc2dfaXRlciksIDAsIFBBR0VfU0laRSwKPiA+ICAgCQkJCSAgICAg RE1BX1RPX0RFVklDRSwgZG1hY19tYXBfYXJlYSk7Cj4gPiArI2VsaWYgZGVmaW5lZChDT05GSUdf QVJNNjQpCj4gPiArCWludCBpOwo+ID4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ID4gKwo+ ID4gKwlmb3JfZWFjaF9zZyhzdC0+c2dsLCBzZywgc3QtPm5lbnRzLCBpKQo+ID4gKwkJX19kbWFf bWFwX2FyZWEocGh5c190b192aXJ0KHNnX3BoeXMoc2cpKSwgc2ctPmxlbmd0aCwKPiA+ICsJCQkg ICAgICAgRE1BX1RPX0RFVklDRSk7Cj4gPiAgICNlbHNlCj4gPiAgIAlwcl9lcnIoIkFyY2hpdGVj dHVyZSBoYXMgbm8gZHJtX2NhY2hlLmMgc3VwcG9ydFxuIik7Cj4gPiAgIAlXQVJOX09OX09OQ0Uo MSk7Cj4gPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3Jh dGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK