From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753148AbdHDNUp (ORCPT ); Fri, 4 Aug 2017 09:20:45 -0400 Received: from smtp.domeneshop.no ([194.63.252.55]:50468 "EHLO smtp.domeneshop.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752448AbdHDNUn (ORCPT ); Fri, 4 Aug 2017 09:20:43 -0400 Subject: Re: [PATCH v3 2/6] drm/tinydrm: generalize tinydrm_xrgb8888_to_gray8() From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= To: David Lechner , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Cc: Mark Rutland , Kevin Hilman , Sekhar Nori , linux-kernel@vger.kernel.org, Rob Herring , linux-arm-kernel@lists.infradead.org References: <1501799630-1650-1-git-send-email-david@lechnology.com> <1501799630-1650-3-git-send-email-david@lechnology.com> Message-ID: <9713028d-ac77-40d6-fe62-9be2e9a5dd28@tronnes.org> Date: Fri, 4 Aug 2017 15:20:21 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: 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 Den 04.08.2017 09.27, skrev Noralf Trønnes: > > Den 04.08.2017 00.33, skrev David Lechner: >> This adds parameters for vaddr and clip to >> tinydrm_xrgb8888_to_gray8() to >> make it more generic. >> >> dma_buf_{begin,end}_cpu_access() are moved out to the repaper driver. >> >> Signed-off-by: David Lechner >> --- >> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 35 >> ++++++++++---------------- >> drivers/gpu/drm/tinydrm/repaper.c | 21 +++++++++++++++- >> include/drm/tinydrm/tinydrm-helpers.h | 3 ++- >> 3 files changed, 35 insertions(+), 24 deletions(-) >> >> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> index 75808bb..5915ba8 100644 >> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> @@ -185,7 +185,9 @@ EXPORT_SYMBOL(tinydrm_xrgb8888_to_rgb565); >> /** >> * tinydrm_xrgb8888_to_gray8 - Convert XRGB8888 to grayscale >> * @dst: 8-bit grayscale destination buffer >> + * @vaddr: XRGB8888 source buffer >> * @fb: DRM framebuffer >> + * @clip: Clip rectangle area to copy >> * >> * Drm doesn't have native monochrome or grayscale support. >> * Such drivers can announce the commonly supported XR24 format to >> userspace >> @@ -199,12 +201,11 @@ EXPORT_SYMBOL(tinydrm_xrgb8888_to_rgb565); >> * Returns: >> * Zero on success, negative error code on failure. >> */ >> -int tinydrm_xrgb8888_to_gray8(u8 *dst, struct drm_framebuffer *fb) >> +int tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct >> drm_framebuffer *fb, >> + struct drm_clip_rect *clip) >> { >> - struct drm_gem_cma_object *cma_obj = drm_fb_cma_get_gem_obj(fb, 0); >> - struct dma_buf_attachment *import_attach = >> cma_obj->base.import_attach; >> - unsigned int x, y, pitch = fb->pitches[0]; >> - int ret = 0; >> + unsigned int len = (clip->x2 - clip->x1) * sizeof(u32); >> + unsigned int x, y; >> void *buf; >> u32 *src; >> @@ -214,22 +215,16 @@ int tinydrm_xrgb8888_to_gray8(u8 *dst, struct >> drm_framebuffer *fb) >> * The cma memory is write-combined so reads are uncached. >> * Speed up by fetching one line at a time. >> */ >> - buf = kmalloc(pitch, GFP_KERNEL); >> + buf = kmalloc(len, GFP_KERNEL); >> if (!buf) >> return -ENOMEM; >> - if (import_attach) { >> - ret = dma_buf_begin_cpu_access(import_attach->dmabuf, >> - DMA_FROM_DEVICE); >> - if (ret) >> - goto err_free; >> - } >> - >> - for (y = 0; y < fb->height; y++) { >> - src = cma_obj->vaddr + (y * pitch); >> - memcpy(buf, src, pitch); >> + for (y = clip->y1; y < clip->y2; y++) { >> + src = vaddr + (y * fb->pitches[0]); >> + src += clip->x1; >> + memcpy(buf, src, len); >> src = buf; >> - for (x = 0; x < fb->width; x++) { >> + for (x = clip->x1; x < clip->x2; x++) { >> u8 r = (*src & 0x00ff0000) >> 16; >> u8 g = (*src & 0x0000ff00) >> 8; >> u8 b = *src & 0x000000ff; >> @@ -240,13 +235,9 @@ int tinydrm_xrgb8888_to_gray8(u8 *dst, struct >> drm_framebuffer *fb) >> } >> } >> - if (import_attach) >> - ret = dma_buf_end_cpu_access(import_attach->dmabuf, >> - DMA_FROM_DEVICE); >> -err_free: >> kfree(buf); >> - return ret; >> + return 0; >> } >> EXPORT_SYMBOL(tinydrm_xrgb8888_to_gray8); >> diff --git a/drivers/gpu/drm/tinydrm/repaper.c >> b/drivers/gpu/drm/tinydrm/repaper.c >> index 3343d3f..d34cd9b 100644 >> --- a/drivers/gpu/drm/tinydrm/repaper.c >> +++ b/drivers/gpu/drm/tinydrm/repaper.c >> @@ -18,6 +18,7 @@ >> */ >> #include >> +#include >> #include >> #include >> #include >> @@ -525,11 +526,20 @@ static int repaper_fb_dirty(struct >> drm_framebuffer *fb, >> struct drm_clip_rect *clips, >> unsigned int num_clips) >> { >> + struct drm_gem_cma_object *cma_obj = drm_fb_cma_get_gem_obj(fb, 0); >> + struct dma_buf_attachment *import_attach = >> cma_obj->base.import_attach; >> struct tinydrm_device *tdev = fb->dev->dev_private; >> struct repaper_epd *epd = epd_from_tinydrm(tdev); >> + struct drm_clip_rect clip; >> u8 *buf = NULL; >> int ret = 0; >> + /* repaper can't do partial updates */ >> + clip.x1 = 0; >> + clip.x2 = fb->width; >> + clip.y1 = 0; >> + clip.y2 = fb->height; >> + >> mutex_lock(&tdev->dirty_lock); >> if (!epd->enabled) >> @@ -550,7 +560,16 @@ static int repaper_fb_dirty(struct >> drm_framebuffer *fb, >> goto out_unlock; >> } >> - ret = tinydrm_xrgb8888_to_gray8(buf, fb); >> + if (import_attach) { >> + ret = dma_buf_begin_cpu_access(import_attach->dmabuf, >> + DMA_FROM_DEVICE); >> + if (ret) >> + goto out_unlock; >> + } >> + >> + ret = tinydrm_xrgb8888_to_gray8(buf, cma_obj->vaddr, fb, &clip); >> + if (import_attach) >> + dma_buf_end_cpu_access(import_attach->dmabuf, DMA_FROM_DEVICE); > > I think we can make tinydrm_xrgb8888_to_gray8() return void like the > other copy functions. We loose the error if the line buffer can't be > allocated, but that's no big deal. If we can't allocate <4k of memory, > then we have much bigger problems elsewhere. > This simplifies returning an error from dma_buf_end_cpu_access(). > The error is propagated to userspace who called the dirty ioctl. > > When I have switched from cma to shmem buffers backing the framebuffer > (ongoing work), we don't need the line buffer copy to speed up the > uncached reads from write combined memory mappings. But we will > probably need it on buffers imported with PRIME, since we don't know > the memory mapping. At least I don't think we can find that out. > I realised that we can just do a slow copy, if we can't allocate a buffer. I will sort that out in all the copy functions when we switch to shmem. So please make tinydrm_xrgb8888_to_gray8() void. > Noralf. > >> if (ret) >> goto out_unlock; >> diff --git a/include/drm/tinydrm/tinydrm-helpers.h >> b/include/drm/tinydrm/tinydrm-helpers.h >> index a6c387f..9e13ef5 100644 >> --- a/include/drm/tinydrm/tinydrm-helpers.h >> +++ b/include/drm/tinydrm/tinydrm-helpers.h >> @@ -43,7 +43,8 @@ void tinydrm_swab16(u16 *dst, void *vaddr, struct >> drm_framebuffer *fb, >> void tinydrm_xrgb8888_to_rgb565(u16 *dst, void *vaddr, >> struct drm_framebuffer *fb, >> struct drm_clip_rect *clip, bool swap); >> -int tinydrm_xrgb8888_to_gray8(u8 *dst, struct drm_framebuffer *fb); >> +int tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct >> drm_framebuffer *fb, >> + struct drm_clip_rect *clip); >> struct backlight_device *tinydrm_of_find_backlight(struct device >> *dev); >> int tinydrm_enable_backlight(struct backlight_device *backlight); > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel > From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v3 2/6] drm/tinydrm: generalize tinydrm_xrgb8888_to_gray8() Date: Fri, 4 Aug 2017 15:20:21 +0200 Message-ID: <9713028d-ac77-40d6-fe62-9be2e9a5dd28@tronnes.org> References: <1501799630-1650-1-git-send-email-david@lechnology.com> <1501799630-1650-3-git-send-email-david@lechnology.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Lechner , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Cc: Mark Rutland , Kevin Hilman , Sekhar Nori , linux-kernel@vger.kernel.org, Rob Herring , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org CkRlbiAwNC4wOC4yMDE3IDA5LjI3LCBza3JldiBOb3JhbGYgVHLDuG5uZXM6Cj4KPiBEZW4gMDQu MDguMjAxNyAwMC4zMywgc2tyZXYgRGF2aWQgTGVjaG5lcjoKPj4gVGhpcyBhZGRzIHBhcmFtZXRl cnMgZm9yIHZhZGRyIGFuZCBjbGlwIHRvIAo+PiB0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4KCkg dG8KPj4gbWFrZSBpdCBtb3JlIGdlbmVyaWMuCj4+Cj4+IGRtYV9idWZfe2JlZ2luLGVuZH1fY3B1 X2FjY2VzcygpIGFyZSBtb3ZlZCBvdXQgdG8gdGhlIHJlcGFwZXIgZHJpdmVyLgo+Pgo+PiBTaWdu ZWQtb2ZmLWJ5OiBEYXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5LmNvbT4KPj4gLS0tCj4+ ICAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYyB8IDM1IAo+ PiArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJt L3JlcGFwZXIuYyAgICAgICAgICAgICAgfCAyMSArKysrKysrKysrKysrKystCj4+ICAgaW5jbHVk ZS9kcm0vdGlueWRybS90aW55ZHJtLWhlbHBlcnMuaCAgICAgICAgICB8ICAzICsrLQo+PiAgIDMg ZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCj4+Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5j IAo+PiBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1oZWxwZXJzLmMKPj4g aW5kZXggNzU4MDhiYi4uNTkxNWJhOCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9jb3JlL3Rpbnlkcm0taGVscGVycy5jCj4+IEBAIC0xODUsNyArMTg1LDkgQEAgRVhQT1JU X1NZTUJPTCh0aW55ZHJtX3hyZ2I4ODg4X3RvX3JnYjU2NSk7Cj4+ICAgLyoqCj4+ICAgICogdGlu eWRybV94cmdiODg4OF90b19ncmF5OCAtIENvbnZlcnQgWFJHQjg4ODggdG8gZ3JheXNjYWxlCj4+ ICAgICogQGRzdDogOC1iaXQgZ3JheXNjYWxlIGRlc3RpbmF0aW9uIGJ1ZmZlcgo+PiArICogQHZh ZGRyOiBYUkdCODg4OCBzb3VyY2UgYnVmZmVyCj4+ICAgICogQGZiOiBEUk0gZnJhbWVidWZmZXIK Pj4gKyAqIEBjbGlwOiBDbGlwIHJlY3RhbmdsZSBhcmVhIHRvIGNvcHkKPj4gICAgKgo+PiAgICAq IERybSBkb2Vzbid0IGhhdmUgbmF0aXZlIG1vbm9jaHJvbWUgb3IgZ3JheXNjYWxlIHN1cHBvcnQu Cj4+ICAgICogU3VjaCBkcml2ZXJzIGNhbiBhbm5vdW5jZSB0aGUgY29tbW9ubHkgc3VwcG9ydGVk IFhSMjQgZm9ybWF0IHRvIAo+PiB1c2Vyc3BhY2UKPj4gQEAgLTE5OSwxMiArMjAxLDExIEBAIEVY UE9SVF9TWU1CT0wodGlueWRybV94cmdiODg4OF90b19yZ2I1NjUpOwo+PiAgICAqIFJldHVybnM6 Cj4+ICAgICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu Cj4+ICAgICovCj4+IC1pbnQgdGlueWRybV94cmdiODg4OF90b19ncmF5OCh1OCAqZHN0LCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPj4gK2ludCB0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4 KHU4ICpkc3QsIHZvaWQgKnZhZGRyLCBzdHJ1Y3QgCj4+IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+ ICsgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCkKPj4gICB7Cj4+ IC0gICAgc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iaiA9IGRybV9mYl9jbWFfZ2V0 X2dlbV9vYmooZmIsIDApOwo+PiAtICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmltcG9y dF9hdHRhY2ggPSAKPj4gY21hX29iai0+YmFzZS5pbXBvcnRfYXR0YWNoOwo+PiAtICAgIHVuc2ln bmVkIGludCB4LCB5LCBwaXRjaCA9IGZiLT5waXRjaGVzWzBdOwo+PiAtICAgIGludCByZXQgPSAw Owo+PiArICAgIHVuc2lnbmVkIGludCBsZW4gPSAoY2xpcC0+eDIgLSBjbGlwLT54MSkgKiBzaXpl b2YodTMyKTsKPj4gKyAgICB1bnNpZ25lZCBpbnQgeCwgeTsKPj4gICAgICAgdm9pZCAqYnVmOwo+ PiAgICAgICB1MzIgKnNyYzsKPj4gICBAQCAtMjE0LDIyICsyMTUsMTYgQEAgaW50IHRpbnlkcm1f eHJnYjg4ODhfdG9fZ3JheTgodTggKmRzdCwgc3RydWN0IAo+PiBkcm1fZnJhbWVidWZmZXIgKmZi KQo+PiAgICAgICAgKiBUaGUgY21hIG1lbW9yeSBpcyB3cml0ZS1jb21iaW5lZCBzbyByZWFkcyBh cmUgdW5jYWNoZWQuCj4+ICAgICAgICAqIFNwZWVkIHVwIGJ5IGZldGNoaW5nIG9uZSBsaW5lIGF0 IGEgdGltZS4KPj4gICAgICAgICovCj4+IC0gICAgYnVmID0ga21hbGxvYyhwaXRjaCwgR0ZQX0tF Uk5FTCk7Cj4+ICsgICAgYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwo+PiAgICAgICBp ZiAoIWJ1ZikKPj4gICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+PiAgIC0gICAgaWYgKGltcG9y dF9hdHRhY2gpIHsKPj4gLSAgICAgICAgcmV0ID0gZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKGlt cG9ydF9hdHRhY2gtPmRtYWJ1ZiwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9G Uk9NX0RFVklDRSk7Cj4+IC0gICAgICAgIGlmIChyZXQpCj4+IC0gICAgICAgICAgICBnb3RvIGVy cl9mcmVlOwo+PiAtICAgIH0KPj4gLQo+PiAtICAgIGZvciAoeSA9IDA7IHkgPCBmYi0+aGVpZ2h0 OyB5KyspIHsKPj4gLSAgICAgICAgc3JjID0gY21hX29iai0+dmFkZHIgKyAoeSAqIHBpdGNoKTsK Pj4gLSAgICAgICAgbWVtY3B5KGJ1Ziwgc3JjLCBwaXRjaCk7Cj4+ICsgICAgZm9yICh5ID0gY2xp cC0+eTE7IHkgPCBjbGlwLT55MjsgeSsrKSB7Cj4+ICsgICAgICAgIHNyYyA9IHZhZGRyICsgKHkg KiBmYi0+cGl0Y2hlc1swXSk7Cj4+ICsgICAgICAgIHNyYyArPSBjbGlwLT54MTsKPj4gKyAgICAg ICAgbWVtY3B5KGJ1Ziwgc3JjLCBsZW4pOwo+PiAgICAgICAgICAgc3JjID0gYnVmOwo+PiAtICAg ICAgICBmb3IgKHggPSAwOyB4IDwgZmItPndpZHRoOyB4KyspIHsKPj4gKyAgICAgICAgZm9yICh4 ID0gY2xpcC0+eDE7IHggPCBjbGlwLT54MjsgeCsrKSB7Cj4+ICAgICAgICAgICAgICAgdTggciA9 ICgqc3JjICYgMHgwMGZmMDAwMCkgPj4gMTY7Cj4+ICAgICAgICAgICAgICAgdTggZyA9ICgqc3Jj ICYgMHgwMDAwZmYwMCkgPj4gODsKPj4gICAgICAgICAgICAgICB1OCBiID0gICpzcmMgJiAweDAw MDAwMGZmOwo+PiBAQCAtMjQwLDEzICsyMzUsOSBAQCBpbnQgdGlueWRybV94cmdiODg4OF90b19n cmF5OCh1OCAqZHN0LCBzdHJ1Y3QgCj4+IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4+ICAgICAgICAg ICB9Cj4+ICAgICAgIH0KPj4gICAtICAgIGlmIChpbXBvcnRfYXR0YWNoKQo+PiAtICAgICAgICBy ZXQgPSBkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKGltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwo+PiAtZXJyX2ZyZWU6Cj4+ ICAgICAgIGtmcmVlKGJ1Zik7Cj4+ICAgLSAgICByZXR1cm4gcmV0Owo+PiArICAgIHJldHVybiAw Owo+PiAgIH0KPj4gICBFWFBPUlRfU1lNQk9MKHRpbnlkcm1feHJnYjg4ODhfdG9fZ3JheTgpOwo+ PiAgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9yZXBhcGVyLmMgCj4+IGIv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vcmVwYXBlci5jCj4+IGluZGV4IDMzNDNkM2YuLmQzNGNk OWIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL3JlcGFwZXIuYwo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9yZXBhcGVyLmMKPj4gQEAgLTE4LDYgKzE4LDcg QEAKPj4gICAgKi8KPj4gICAgICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYuaD4KPj4gICAjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ PiAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gICAjaW5jbHVkZSA8bGludXgvb2ZfZGV2 aWNlLmg+Cj4+IEBAIC01MjUsMTEgKzUyNiwyMCBAQCBzdGF0aWMgaW50IHJlcGFwZXJfZmJfZGly dHkoc3RydWN0IAo+PiBkcm1fZnJhbWVidWZmZXIgKmZiLAo+PiAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCj4+ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBudW1fY2xpcHMpCj4+ICAgewo+PiArICAgIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3Qg KmNtYV9vYmogPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKPj4gKyAgICBzdHJ1Y3Qg ZG1hX2J1Zl9hdHRhY2htZW50ICppbXBvcnRfYXR0YWNoID0gCj4+IGNtYV9vYmotPmJhc2UuaW1w b3J0X2F0dGFjaDsKPj4gICAgICAgc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gZmItPmRl di0+ZGV2X3ByaXZhdGU7Cj4+ICAgICAgIHN0cnVjdCByZXBhcGVyX2VwZCAqZXBkID0gZXBkX2Zy b21fdGlueWRybSh0ZGV2KTsKPj4gKyAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwo+PiAg ICAgICB1OCAqYnVmID0gTlVMTDsKPj4gICAgICAgaW50IHJldCA9IDA7Cj4+ICAgKyAgICAvKiBy ZXBhcGVyIGNhbid0IGRvIHBhcnRpYWwgdXBkYXRlcyAqLwo+PiArICAgIGNsaXAueDEgPSAwOwo+ PiArICAgIGNsaXAueDIgPSBmYi0+d2lkdGg7Cj4+ICsgICAgY2xpcC55MSA9IDA7Cj4+ICsgICAg Y2xpcC55MiA9IGZiLT5oZWlnaHQ7Cj4+ICsKPj4gICAgICAgbXV0ZXhfbG9jaygmdGRldi0+ZGly dHlfbG9jayk7Cj4+ICAgICAgICAgaWYgKCFlcGQtPmVuYWJsZWQpCj4+IEBAIC01NTAsNyArNTYw LDE2IEBAIHN0YXRpYyBpbnQgcmVwYXBlcl9mYl9kaXJ0eShzdHJ1Y3QgCj4+IGRybV9mcmFtZWJ1 ZmZlciAqZmIsCj4+ICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4+ICAgICAgIH0KPj4gICAt ICAgIHJldCA9IHRpbnlkcm1feHJnYjg4ODhfdG9fZ3JheTgoYnVmLCBmYik7Cj4+ICsgICAgaWYg KGltcG9ydF9hdHRhY2gpIHsKPj4gKyAgICAgICAgcmV0ID0gZG1hX2J1Zl9iZWdpbl9jcHVfYWNj ZXNzKGltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IERNQV9GUk9NX0RFVklDRSk7Cj4+ICsgICAgICAgIGlmIChyZXQpCj4+ICsgICAgICAgICAgICBn b3RvIG91dF91bmxvY2s7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0ID0gdGlueWRybV94cmdi ODg4OF90b19ncmF5OChidWYsIGNtYV9vYmotPnZhZGRyLCBmYiwgJmNsaXApOwo+PiArICAgIGlm IChpbXBvcnRfYXR0YWNoKQo+PiArICAgICAgICBkbWFfYnVmX2VuZF9jcHVfYWNjZXNzKGltcG9y dF9hdHRhY2gtPmRtYWJ1ZiwgRE1BX0ZST01fREVWSUNFKTsKPgo+IEkgdGhpbmsgd2UgY2FuIG1h a2UgdGlueWRybV94cmdiODg4OF90b19ncmF5OCgpIHJldHVybiB2b2lkIGxpa2UgdGhlCj4gb3Ro ZXIgY29weSBmdW5jdGlvbnMuIFdlIGxvb3NlIHRoZSBlcnJvciBpZiB0aGUgbGluZSBidWZmZXIg Y2FuJ3QgYmUKPiBhbGxvY2F0ZWQsIGJ1dCB0aGF0J3Mgbm8gYmlnIGRlYWwuIElmIHdlIGNhbid0 IGFsbG9jYXRlIDw0ayBvZiBtZW1vcnksCj4gdGhlbiB3ZSBoYXZlIG11Y2ggYmlnZ2VyIHByb2Js ZW1zIGVsc2V3aGVyZS4KPiBUaGlzIHNpbXBsaWZpZXMgcmV0dXJuaW5nIGFuIGVycm9yIGZyb20g ZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcygpLgo+IFRoZSBlcnJvciBpcyBwcm9wYWdhdGVkIHRvIHVz ZXJzcGFjZSB3aG8gY2FsbGVkIHRoZSBkaXJ0eSBpb2N0bC4KPgo+IFdoZW4gSSBoYXZlIHN3aXRj aGVkIGZyb20gY21hIHRvIHNobWVtIGJ1ZmZlcnMgYmFja2luZyB0aGUgZnJhbWVidWZmZXIKPiAo b25nb2luZyB3b3JrKSwgd2UgZG9uJ3QgbmVlZCB0aGUgbGluZSBidWZmZXIgY29weSB0byBzcGVl ZCB1cCB0aGUKPiB1bmNhY2hlZCByZWFkcyBmcm9tIHdyaXRlIGNvbWJpbmVkIG1lbW9yeSBtYXBw aW5ncy4gQnV0IHdlIHdpbGwKPiBwcm9iYWJseSBuZWVkIGl0IG9uIGJ1ZmZlcnMgaW1wb3J0ZWQg d2l0aCBQUklNRSwgc2luY2Ugd2UgZG9uJ3Qga25vdwo+IHRoZSBtZW1vcnkgbWFwcGluZy4gQXQg bGVhc3QgSSBkb24ndCB0aGluayB3ZSBjYW4gZmluZCB0aGF0IG91dC4KPgoKSSByZWFsaXNlZCB0 aGF0IHdlIGNhbiBqdXN0IGRvIGEgc2xvdyBjb3B5LCBpZiB3ZSBjYW4ndCBhbGxvY2F0ZSBhIGJ1 ZmZlci4KSSB3aWxsIHNvcnQgdGhhdCBvdXQgaW4gYWxsIHRoZSBjb3B5IGZ1bmN0aW9ucyB3aGVu IHdlIHN3aXRjaCB0byBzaG1lbS4KU28gcGxlYXNlIG1ha2UgdGlueWRybV94cmdiODg4OF90b19n cmF5OCgpIHZvaWQuCgo+IE5vcmFsZi4KPgo+PiAgICAgICBpZiAocmV0KQo+PiAgICAgICAgICAg Z290byBvdXRfdW5sb2NrOwo+PiAgIGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS90aW55ZHJtL3Rp bnlkcm0taGVscGVycy5oIAo+PiBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0vdGlueWRybS1oZWxwZXJz LmgKPj4gaW5kZXggYTZjMzg3Zi4uOWUxM2VmNSAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9kcm0v dGlueWRybS90aW55ZHJtLWhlbHBlcnMuaAo+PiArKysgYi9pbmNsdWRlL2RybS90aW55ZHJtL3Rp bnlkcm0taGVscGVycy5oCj4+IEBAIC00Myw3ICs0Myw4IEBAIHZvaWQgdGlueWRybV9zd2FiMTYo dTE2ICpkc3QsIHZvaWQgKnZhZGRyLCBzdHJ1Y3QgCj4+IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+ ICAgdm9pZCB0aW55ZHJtX3hyZ2I4ODg4X3RvX3JnYjU2NSh1MTYgKmRzdCwgdm9pZCAqdmFkZHIs Cj4+ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+PiAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCwgYm9vbCBzd2FwKTsKPj4g LWludCB0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4KHU4ICpkc3QsIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKTsKPj4gK2ludCB0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4KHU4ICpkc3QsIHZv aWQgKnZhZGRyLCBzdHJ1Y3QgCj4+IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+ICsgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCk7Cj4+ICAgICBzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqdGlueWRybV9vZl9maW5kX2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlIAo+PiAq ZGV2KTsKPj4gICBpbnQgdGlueWRybV9lbmFibGVfYmFja2xpZ2h0KHN0cnVjdCBiYWNrbGlnaHRf ZGV2aWNlICpiYWNrbGlnaHQpOwo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: noralf@tronnes.org (=?UTF-8?Q?Noralf_Tr=c3=b8nnes?=) Date: Fri, 4 Aug 2017 15:20:21 +0200 Subject: [PATCH v3 2/6] drm/tinydrm: generalize tinydrm_xrgb8888_to_gray8() In-Reply-To: References: <1501799630-1650-1-git-send-email-david@lechnology.com> <1501799630-1650-3-git-send-email-david@lechnology.com> Message-ID: <9713028d-ac77-40d6-fe62-9be2e9a5dd28@tronnes.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Den 04.08.2017 09.27, skrev Noralf Tr?nnes: > > Den 04.08.2017 00.33, skrev David Lechner: >> This adds parameters for vaddr and clip to >> tinydrm_xrgb8888_to_gray8() to >> make it more generic. >> >> dma_buf_{begin,end}_cpu_access() are moved out to the repaper driver. >> >> Signed-off-by: David Lechner >> --- >> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 35 >> ++++++++++---------------- >> drivers/gpu/drm/tinydrm/repaper.c | 21 +++++++++++++++- >> include/drm/tinydrm/tinydrm-helpers.h | 3 ++- >> 3 files changed, 35 insertions(+), 24 deletions(-) >> >> diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> index 75808bb..5915ba8 100644 >> --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c >> @@ -185,7 +185,9 @@ EXPORT_SYMBOL(tinydrm_xrgb8888_to_rgb565); >> /** >> * tinydrm_xrgb8888_to_gray8 - Convert XRGB8888 to grayscale >> * @dst: 8-bit grayscale destination buffer >> + * @vaddr: XRGB8888 source buffer >> * @fb: DRM framebuffer >> + * @clip: Clip rectangle area to copy >> * >> * Drm doesn't have native monochrome or grayscale support. >> * Such drivers can announce the commonly supported XR24 format to >> userspace >> @@ -199,12 +201,11 @@ EXPORT_SYMBOL(tinydrm_xrgb8888_to_rgb565); >> * Returns: >> * Zero on success, negative error code on failure. >> */ >> -int tinydrm_xrgb8888_to_gray8(u8 *dst, struct drm_framebuffer *fb) >> +int tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct >> drm_framebuffer *fb, >> + struct drm_clip_rect *clip) >> { >> - struct drm_gem_cma_object *cma_obj = drm_fb_cma_get_gem_obj(fb, 0); >> - struct dma_buf_attachment *import_attach = >> cma_obj->base.import_attach; >> - unsigned int x, y, pitch = fb->pitches[0]; >> - int ret = 0; >> + unsigned int len = (clip->x2 - clip->x1) * sizeof(u32); >> + unsigned int x, y; >> void *buf; >> u32 *src; >> @@ -214,22 +215,16 @@ int tinydrm_xrgb8888_to_gray8(u8 *dst, struct >> drm_framebuffer *fb) >> * The cma memory is write-combined so reads are uncached. >> * Speed up by fetching one line at a time. >> */ >> - buf = kmalloc(pitch, GFP_KERNEL); >> + buf = kmalloc(len, GFP_KERNEL); >> if (!buf) >> return -ENOMEM; >> - if (import_attach) { >> - ret = dma_buf_begin_cpu_access(import_attach->dmabuf, >> - DMA_FROM_DEVICE); >> - if (ret) >> - goto err_free; >> - } >> - >> - for (y = 0; y < fb->height; y++) { >> - src = cma_obj->vaddr + (y * pitch); >> - memcpy(buf, src, pitch); >> + for (y = clip->y1; y < clip->y2; y++) { >> + src = vaddr + (y * fb->pitches[0]); >> + src += clip->x1; >> + memcpy(buf, src, len); >> src = buf; >> - for (x = 0; x < fb->width; x++) { >> + for (x = clip->x1; x < clip->x2; x++) { >> u8 r = (*src & 0x00ff0000) >> 16; >> u8 g = (*src & 0x0000ff00) >> 8; >> u8 b = *src & 0x000000ff; >> @@ -240,13 +235,9 @@ int tinydrm_xrgb8888_to_gray8(u8 *dst, struct >> drm_framebuffer *fb) >> } >> } >> - if (import_attach) >> - ret = dma_buf_end_cpu_access(import_attach->dmabuf, >> - DMA_FROM_DEVICE); >> -err_free: >> kfree(buf); >> - return ret; >> + return 0; >> } >> EXPORT_SYMBOL(tinydrm_xrgb8888_to_gray8); >> diff --git a/drivers/gpu/drm/tinydrm/repaper.c >> b/drivers/gpu/drm/tinydrm/repaper.c >> index 3343d3f..d34cd9b 100644 >> --- a/drivers/gpu/drm/tinydrm/repaper.c >> +++ b/drivers/gpu/drm/tinydrm/repaper.c >> @@ -18,6 +18,7 @@ >> */ >> #include >> +#include >> #include >> #include >> #include >> @@ -525,11 +526,20 @@ static int repaper_fb_dirty(struct >> drm_framebuffer *fb, >> struct drm_clip_rect *clips, >> unsigned int num_clips) >> { >> + struct drm_gem_cma_object *cma_obj = drm_fb_cma_get_gem_obj(fb, 0); >> + struct dma_buf_attachment *import_attach = >> cma_obj->base.import_attach; >> struct tinydrm_device *tdev = fb->dev->dev_private; >> struct repaper_epd *epd = epd_from_tinydrm(tdev); >> + struct drm_clip_rect clip; >> u8 *buf = NULL; >> int ret = 0; >> + /* repaper can't do partial updates */ >> + clip.x1 = 0; >> + clip.x2 = fb->width; >> + clip.y1 = 0; >> + clip.y2 = fb->height; >> + >> mutex_lock(&tdev->dirty_lock); >> if (!epd->enabled) >> @@ -550,7 +560,16 @@ static int repaper_fb_dirty(struct >> drm_framebuffer *fb, >> goto out_unlock; >> } >> - ret = tinydrm_xrgb8888_to_gray8(buf, fb); >> + if (import_attach) { >> + ret = dma_buf_begin_cpu_access(import_attach->dmabuf, >> + DMA_FROM_DEVICE); >> + if (ret) >> + goto out_unlock; >> + } >> + >> + ret = tinydrm_xrgb8888_to_gray8(buf, cma_obj->vaddr, fb, &clip); >> + if (import_attach) >> + dma_buf_end_cpu_access(import_attach->dmabuf, DMA_FROM_DEVICE); > > I think we can make tinydrm_xrgb8888_to_gray8() return void like the > other copy functions. We loose the error if the line buffer can't be > allocated, but that's no big deal. If we can't allocate <4k of memory, > then we have much bigger problems elsewhere. > This simplifies returning an error from dma_buf_end_cpu_access(). > The error is propagated to userspace who called the dirty ioctl. > > When I have switched from cma to shmem buffers backing the framebuffer > (ongoing work), we don't need the line buffer copy to speed up the > uncached reads from write combined memory mappings. But we will > probably need it on buffers imported with PRIME, since we don't know > the memory mapping. At least I don't think we can find that out. > I realised that we can just do a slow copy, if we can't allocate a buffer. I will sort that out in all the copy functions when we switch to shmem. So please make tinydrm_xrgb8888_to_gray8() void. > Noralf. > >> if (ret) >> goto out_unlock; >> diff --git a/include/drm/tinydrm/tinydrm-helpers.h >> b/include/drm/tinydrm/tinydrm-helpers.h >> index a6c387f..9e13ef5 100644 >> --- a/include/drm/tinydrm/tinydrm-helpers.h >> +++ b/include/drm/tinydrm/tinydrm-helpers.h >> @@ -43,7 +43,8 @@ void tinydrm_swab16(u16 *dst, void *vaddr, struct >> drm_framebuffer *fb, >> void tinydrm_xrgb8888_to_rgb565(u16 *dst, void *vaddr, >> struct drm_framebuffer *fb, >> struct drm_clip_rect *clip, bool swap); >> -int tinydrm_xrgb8888_to_gray8(u8 *dst, struct drm_framebuffer *fb); >> +int tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct >> drm_framebuffer *fb, >> + struct drm_clip_rect *clip); >> struct backlight_device *tinydrm_of_find_backlight(struct device >> *dev); >> int tinydrm_enable_backlight(struct backlight_device *backlight); > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel >