From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933750AbbKSCma (ORCPT ); Wed, 18 Nov 2015 21:42:30 -0500 Received: from mail.kmu-office.ch ([178.209.48.109]:36962 "EHLO mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933727AbbKSCm1 (ORCPT ); Wed, 18 Nov 2015 21:42:27 -0500 From: Stefan Agner To: airlied@linux.ie, daniel.vetter@ffwll.ch, jianwei.wang.chn@gmail.com Cc: alison.wang@freescale.com, mark.yao@rock-chips.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Stefan Agner Subject: [PATCH 6/7] drm/fsl-dcu: fix alpha blending Date: Wed, 18 Nov 2015 18:42:49 -0800 Message-Id: <1447900970-15936-7-git-send-email-stefan@agner.ch> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1447900970-15936-1-git-send-email-stefan@agner.ch> References: <1447900970-15936-1-git-send-email-stefan@agner.ch> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix alpha blending by enabling alpha blending for the whole frame if a color mode with alpha channel is selected (DRM_FORMAT_ARGB*). Also support color modes without alpha channel (DRM_FORMAT_XRGB*) by just not enabling alpha blending on layer level. Signed-off-by: Stefan Agner --- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h | 4 +++- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c | 31 +++++++++++++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h index 579b9e4..6413ac9 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h @@ -133,7 +133,9 @@ #define DCU_LAYER_RLE_EN BIT(15) #define DCU_LAYER_LUOFFS(x) ((x) << 4) #define DCU_LAYER_BB_ON BIT(2) -#define DCU_LAYER_AB(x) (x) +#define DCU_LAYER_AB_NONE 0 +#define DCU_LAYER_AB_CHROMA_KEYING 1 +#define DCU_LAYER_AB_WHOLE_FRAME 2 #define DCU_LAYER_CKMAX_R(x) ((x) << 16) #define DCU_LAYER_CKMAX_G(x) ((x) << 8) diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c index 1cb6295..feb7986 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c @@ -47,8 +47,11 @@ static int fsl_dcu_drm_plane_atomic_check(struct drm_plane *plane, switch (fb->pixel_format) { case DRM_FORMAT_RGB565: case DRM_FORMAT_RGB888: + case DRM_FORMAT_XRGB8888: case DRM_FORMAT_ARGB8888: - case DRM_FORMAT_BGRA4444: + case DRM_FORMAT_XRGB4444: + case DRM_FORMAT_ARGB4444: + case DRM_FORMAT_XRGB1555: case DRM_FORMAT_ARGB1555: case DRM_FORMAT_YUV422: return 0; @@ -81,7 +84,7 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *state = plane->state; struct drm_framebuffer *fb = plane->state->fb; struct drm_gem_cma_object *gem; - unsigned int alpha, bpp; + unsigned int alpha = DCU_LAYER_AB_NONE, bpp; int index; index = fsl_dcu_drm_plane_index(plane); @@ -93,27 +96,30 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, switch (fb->pixel_format) { case DRM_FORMAT_RGB565: bpp = FSL_DCU_RGB565; - alpha = 0xff; break; case DRM_FORMAT_RGB888: bpp = FSL_DCU_RGB888; - alpha = 0xff; break; case DRM_FORMAT_ARGB8888: + alpha = DCU_LAYER_AB_WHOLE_FRAME; + /* fall-through */ + case DRM_FORMAT_XRGB8888: bpp = FSL_DCU_ARGB8888; - alpha = 0xff; break; - case DRM_FORMAT_BGRA4444: + case DRM_FORMAT_ARGB4444: + alpha = DCU_LAYER_AB_WHOLE_FRAME; + /* fall-through */ + case DRM_FORMAT_XRGB4444: bpp = FSL_DCU_ARGB4444; - alpha = 0xff; break; case DRM_FORMAT_ARGB1555: + alpha = DCU_LAYER_AB_WHOLE_FRAME; + /* fall-through */ + case DRM_FORMAT_XRGB1555: bpp = FSL_DCU_ARGB1555; - alpha = 0xff; break; case DRM_FORMAT_YUV422: bpp = FSL_DCU_YUV422; - alpha = 0xff; break; default: return; @@ -129,9 +135,9 @@ static void fsl_dcu_drm_plane_atomic_update(struct drm_plane *plane, DCU_CTRLDESCLN(index, 3), gem->paddr); regmap_write(fsl_dev->regmap, DCU_CTRLDESCLN(index, 4), DCU_LAYER_EN | - DCU_LAYER_TRANS(alpha) | + DCU_LAYER_TRANS(0xff) | DCU_LAYER_BPP(bpp) | - DCU_LAYER_AB(0)); + alpha); regmap_write(fsl_dev->regmap, DCU_CTRLDESCLN(index, 5), DCU_LAYER_CKMAX_R(0xFF) | DCU_LAYER_CKMAX_G(0xFF) | @@ -199,8 +205,11 @@ static const struct drm_plane_funcs fsl_dcu_drm_plane_funcs = { static const u32 fsl_dcu_drm_plane_formats[] = { DRM_FORMAT_RGB565, DRM_FORMAT_RGB888, + DRM_FORMAT_XRGB8888, DRM_FORMAT_ARGB8888, + DRM_FORMAT_XRGB4444, DRM_FORMAT_ARGB4444, + DRM_FORMAT_XRGB1555, DRM_FORMAT_ARGB1555, DRM_FORMAT_YUV422, }; -- 2.6.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Agner Subject: [PATCH 6/7] drm/fsl-dcu: fix alpha blending Date: Wed, 18 Nov 2015 18:42:49 -0800 Message-ID: <1447900970-15936-7-git-send-email-stefan@agner.ch> References: <1447900970-15936-1-git-send-email-stefan@agner.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.kmu-office.ch (mail.kmu-office.ch [178.209.48.109]) by gabe.freedesktop.org (Postfix) with ESMTPS id 179756E893 for ; Wed, 18 Nov 2015 18:42:27 -0800 (PST) In-Reply-To: <1447900970-15936-1-git-send-email-stefan@agner.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel.vetter@ffwll.ch, jianwei.wang.chn@gmail.com Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, alison.wang@freescale.com List-Id: dri-devel@lists.freedesktop.org Rml4IGFscGhhIGJsZW5kaW5nIGJ5IGVuYWJsaW5nIGFscGhhIGJsZW5kaW5nIGZvciB0aGUgd2hv bGUgZnJhbWUgaWYKYSBjb2xvciBtb2RlIHdpdGggYWxwaGEgY2hhbm5lbCBpcyBzZWxlY3RlZCAo RFJNX0ZPUk1BVF9BUkdCKikuIEFsc28Kc3VwcG9ydCBjb2xvciBtb2RlcyB3aXRob3V0IGFscGhh IGNoYW5uZWwgKERSTV9GT1JNQVRfWFJHQiopIGJ5IGp1c3QKbm90IGVuYWJsaW5nIGFscGhhIGJs ZW5kaW5nIG9uIGxheWVyIGxldmVsLgoKU2lnbmVkLW9mZi1ieTogU3RlZmFuIEFnbmVyIDxzdGVm YW5AYWduZXIuY2g+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fZHJ2 LmggICB8ICA0ICsrKy0KIGRyaXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX3BsYW5l LmMgfCAzMSArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAy MyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZnNsLWRjdS9mc2xfZGN1X2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9mc2wtZGN1 L2ZzbF9kY3VfZHJtX2Rydi5oCmluZGV4IDU3OWI5ZTQuLjY0MTNhYzkgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX2Rydi5oCkBAIC0xMzMsNyArMTMzLDkgQEAKICNkZWZp bmUgRENVX0xBWUVSX1JMRV9FTgkJQklUKDE1KQogI2RlZmluZSBEQ1VfTEFZRVJfTFVPRkZTKHgp CQkoKHgpIDw8IDQpCiAjZGVmaW5lIERDVV9MQVlFUl9CQl9PTgkJCUJJVCgyKQotI2RlZmluZSBE Q1VfTEFZRVJfQUIoeCkJCQkoeCkKKyNkZWZpbmUgRENVX0xBWUVSX0FCX05PTkUJCTAKKyNkZWZp bmUgRENVX0xBWUVSX0FCX0NIUk9NQV9LRVlJTkcJMQorI2RlZmluZSBEQ1VfTEFZRVJfQUJfV0hP TEVfRlJBTUUJMgogCiAjZGVmaW5lIERDVV9MQVlFUl9DS01BWF9SKHgpCQkoKHgpIDw8IDE2KQog I2RlZmluZSBEQ1VfTEFZRVJfQ0tNQVhfRyh4KQkJKCh4KSA8PCA4KQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9mc2wtZGN1L2ZzbF9kY3VfZHJtX3BsYW5lLmMKaW5kZXggMWNiNjI5NS4uZmViNzk4NiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fcGxhbmUuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vZnNsLWRjdS9mc2xfZGN1X2RybV9wbGFuZS5jCkBAIC00Nyw4ICs0 NywxMSBAQCBzdGF0aWMgaW50IGZzbF9kY3VfZHJtX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKIAlzd2l0Y2ggKGZiLT5waXhlbF9mb3JtYXQpIHsKIAljYXNlIERS TV9GT1JNQVRfUkdCNTY1OgogCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJY2FzZSBEUk1fRk9S TUFUX1hSR0I4ODg4OgogCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQljYXNlIERSTV9GT1JN QVRfQkdSQTQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1hSR0I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1B VF9BUkdCNDQ0NDoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjE1NTU6CiAJY2FzZSBEUk1fRk9STUFU X0FSR0IxNTU1OgogCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6CiAJCXJldHVybiAwOwpAQCAtODEs NyArODQsNyBAQCBzdGF0aWMgdm9pZCBmc2xfZGN1X2RybV9wbGFuZV9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0g cGxhbmUtPnN0YXRlOwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPnN0YXRl LT5mYjsKIAlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpnZW07Ci0JdW5zaWduZWQgaW50IGFs cGhhLCBicHA7CisJdW5zaWduZWQgaW50IGFscGhhID0gRENVX0xBWUVSX0FCX05PTkUsIGJwcDsK IAlpbnQgaW5kZXg7CiAKIAlpbmRleCA9IGZzbF9kY3VfZHJtX3BsYW5lX2luZGV4KHBsYW5lKTsK QEAgLTkzLDI3ICs5NiwzMCBAQCBzdGF0aWMgdm9pZCBmc2xfZGN1X2RybV9wbGFuZV9hdG9taWNf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN3aXRjaCAoZmItPnBpeGVsX2Zvcm1h dCkgewogCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CiAJCWJwcCA9IEZTTF9EQ1VfUkdCNTY1Owot CQlhbHBoYSA9IDB4ZmY7CiAJCWJyZWFrOwogCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CiAJCWJw cCA9IEZTTF9EQ1VfUkdCODg4OwotCQlhbHBoYSA9IDB4ZmY7CiAJCWJyZWFrOwogCWNhc2UgRFJN X0ZPUk1BVF9BUkdCODg4ODoKKwkJYWxwaGEgPSBEQ1VfTEFZRVJfQUJfV0hPTEVfRlJBTUU7CisJ CS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKIAkJYnBwID0g RlNMX0RDVV9BUkdCODg4ODsKLQkJYWxwaGEgPSAweGZmOwogCQlicmVhazsKLQljYXNlIERSTV9G T1JNQVRfQkdSQTQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0OgorCQlhbHBoYSA9IERD VV9MQVlFUl9BQl9XSE9MRV9GUkFNRTsKKwkJLyogZmFsbC10aHJvdWdoICovCisJY2FzZSBEUk1f Rk9STUFUX1hSR0I0NDQ0OgogCQlicHAgPSBGU0xfRENVX0FSR0I0NDQ0OwotCQlhbHBoYSA9IDB4 ZmY7CiAJCWJyZWFrOwogCWNhc2UgRFJNX0ZPUk1BVF9BUkdCMTU1NToKKwkJYWxwaGEgPSBEQ1Vf TEFZRVJfQUJfV0hPTEVfRlJBTUU7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCMTU1NToKIAkJYnBwID0gRlNMX0RDVV9BUkdCMTU1NTsKLQkJYWxwaGEgPSAweGZm OwogCQlicmVhazsKIAljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgogCQlicHAgPSBGU0xfRENVX1lV VjQyMjsKLQkJYWxwaGEgPSAweGZmOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm47CkBA IC0xMjksOSArMTM1LDkgQEAgc3RhdGljIHZvaWQgZnNsX2RjdV9kcm1fcGxhbmVfYXRvbWljX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJICAgICBEQ1VfQ1RSTERFU0NMTihpbmRl eCwgMyksIGdlbS0+cGFkZHIpOwogCXJlZ21hcF93cml0ZShmc2xfZGV2LT5yZWdtYXAsIERDVV9D VFJMREVTQ0xOKGluZGV4LCA0KSwKIAkJICAgICBEQ1VfTEFZRVJfRU4gfAotCQkgICAgIERDVV9M QVlFUl9UUkFOUyhhbHBoYSkgfAorCQkgICAgIERDVV9MQVlFUl9UUkFOUygweGZmKSB8CiAJCSAg ICAgRENVX0xBWUVSX0JQUChicHApIHwKLQkJICAgICBEQ1VfTEFZRVJfQUIoMCkpOworCQkgICAg IGFscGhhKTsKIAlyZWdtYXBfd3JpdGUoZnNsX2Rldi0+cmVnbWFwLCBEQ1VfQ1RSTERFU0NMTihp bmRleCwgNSksCiAJCSAgICAgRENVX0xBWUVSX0NLTUFYX1IoMHhGRikgfAogCQkgICAgIERDVV9M QVlFUl9DS01BWF9HKDB4RkYpIHwKQEAgLTE5OSw4ICsyMDUsMTEgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfZnVuY3MgZnNsX2RjdV9kcm1fcGxhbmVfZnVuY3MgPSB7CiBzdGF0aWMg Y29uc3QgdTMyIGZzbF9kY3VfZHJtX3BsYW5lX2Zvcm1hdHNbXSA9IHsKIAlEUk1fRk9STUFUX1JH QjU2NSwKIAlEUk1fRk9STUFUX1JHQjg4OCwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAogCURSTV9G T1JNQVRfQVJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YUkdCNDQ0NCwKIAlEUk1fRk9STUFUX0FSR0I0 NDQ0LAorCURSTV9GT1JNQVRfWFJHQjE1NTUsCiAJRFJNX0ZPUk1BVF9BUkdCMTU1NSwKIAlEUk1f Rk9STUFUX1lVVjQyMiwKIH07Ci0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK