From patchwork Wed May 30 07:21:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Lowry Li (Arm Technology China)" X-Patchwork-Id: 10437789 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2C708602BD for ; Wed, 30 May 2018 07:21:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0959528870 for ; Wed, 30 May 2018 07:21:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F0D582888B; Wed, 30 May 2018 07:21:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, FUZZY_AMBIEN,MAILING_LIST_MULTI,MSGID_MULTIPLE_AT,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A9F8128870 for ; Wed, 30 May 2018 07:21:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9054D6F97F; Wed, 30 May 2018 07:21:45 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00087.outbound.protection.outlook.com [40.107.0.87]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B5C26F27C for ; Wed, 30 May 2018 07:21:42 +0000 (UTC) Received: from localhost (113.29.88.7) by DB6PR0801MB1976.eurprd08.prod.outlook.com (2603:10a6:4:75::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.820.11; Wed, 30 May 2018 07:21:39 +0000 Date: Wed, 30 May 2018 15:21:10 +0800 From: Lowry Li To: liviu.dudau@arm.com Subject: drm/blend: Add per-plane pixel blend mode property Message-ID: <20180530072110.GA11500@lowry.li@arm.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Originating-IP: [113.29.88.7] X-ClientProxiedBy: SG2PR06CA0165.apcprd06.prod.outlook.com (2603:1096:1:1e::19) To DB6PR0801MB1976.eurprd08.prod.outlook.com (2603:10a6:4:75::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(2017052603328)(7153060)(49563074)(7193020); SRVR:DB6PR0801MB1976; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1976; 3:5RmatKK9SgVVJqG7hsDnmcEBm3fHcVHvb6iieEugmpsbzAo3UCC5l5wvT7jNvdN6RTjJMEpdqruLc3jipzUTTz3Dmcg/FT4vhqqOwdENnUHh19V0apnWb9mQTR5lfUEShByZYrRWX9wZdIoN9Dl93OzbG8Xc1OubwVXpEOmEm0C7V7LL2O97h+jZYrbOIjgvUJcf7EhQ4HAcSvufPt1j+auDCpscDQ9rrLzToYrGnJPQ4ewFWoqydB7pfwEGIPPT; 25:eLepWGgaWsMyfWpWz7X9oksqZcuttldtuF5SweYnukCjp1kbkA/4AchvX/LQtDPg52Fh/idm1Hcp82v+38f7xrCZw7NQVCM04lTlnaUr+STk6+Vt2u26BgKtaqywd9gULFpsffg+//0hV5jyBCjUw5JH06m0yLlVklEnabVTN9TgXgbbfZqIELkeBe/Gjam4cQD8B31S5zG0ygPv27/WcucAwLfWvtOQ5nyIyaQEAbqZhlGW5YqUKTtOEm52RTzt3OzB4JYdY3fqHbg/Gb0E4C6Xc6zDXof3B0aWc3Pd22zXvSSh6CxdFEGP+KIgsC/VGc7VU3AhxtMBG1JDHxxFKQ==; 31:SdQ7/pGxLs46qStDUbKKbbyI8D7HGJbH5b7zzdjhbpUQF59/u/AXG2qA82SnnFf34L2nXC7sKKlRYxcGWaYaqbBV202CqUva65qwYQaRuBfVoTiJVLKKgwldDi0eDOrLYCLj3Svd0QmP66y1qlEVGHOFGKqxKkvY2xPTL+WS5A5/ybCw2s9qzHkNYiO+JO6w7uvyOReb3YTvjlmLO9YfuAQS67H0LNl7Cmwf+8Av28w= X-MS-TrafficTypeDiagnostic: DB6PR0801MB1976: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1976; 20:y/2CI5T+8paNEwnmg6RNsBLPw3iC0aPMEd0XqvxUadlGU1SHIn9wBHxU/w+RztrJywTxcGxgW6V8aAEgz8lJ1psl8lEwMij3nlHuNOH/QUo75BSX/kn5orvusFkOvhbXxRwwD0s/nFZ+JWw4MBmH+7G8VU/9lm6GgO6PHL5Zp8EM4SmH6a58B0+lvCf009rGzk+rKYH3zuiQl3OCue/8YyU2o52wvuY1BUwaTWGieC9kw61QQiSDgtFUIIz5bTm1; 4:Ebp5scZNywN8+U4WfpgKvpcaSi5YnJGtXrrPjL1D9e6Exp76W8jeIzlYiWA3C8ZGC+30XWCrf3wbNPKC0X4aukuw0zWOMx2YaKK3yLSK8P9UlYAIXmMQWskHdWqzMgVhpkUa8p0B0rnpCLc9x5Qz7iBVw+06qu/n9RC5qYr30TkJTizxiARAZza4KmkxVKKcU0zvXBvPr0+zKr62hubbN1rqA/GKjuUHuAKI3/d39HlNK4APXA496OFAGX8XevnyUYh1sv3NDUVNeaARlus9dssrNCupbfe98fdMEtnEVcQ/YxmtY5YbCzS2sDxwrAXIpoSSTTyAr644zs96MaN89AZ65wHuzXPW8RrsajjgdU8WP+lTIyZ6wRgwTqnlQuoxH1UqcOxJXnc4w/1heHrWm8BvfMu7y2TpEl47QxoaPQg= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(9452136761055)(217544274631240)(228905959029699); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(102415395)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123562045)(6072148)(201708071742011)(7699016); SRVR:DB6PR0801MB1976; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1976; X-Forefront-PRVS: 0688BF9B46 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(346002)(39380400002)(39860400002)(376002)(396003)(366004)(199004)(189003)(33656002)(316002)(1076002)(58126008)(2476003)(6666003)(6636002)(568964002)(16586007)(3846002)(6116002)(86362001)(53936002)(61793004)(97736004)(16526019)(26005)(5660300001)(6486002)(4810100001)(564344004)(105586002)(106356001)(9686003)(84326002)(4610100001)(6496006)(478600001)(25786009)(76506005)(5890100001)(72206003)(81166006)(4326008)(44144004)(486006)(33896004)(5000100001)(52116002)(68736007)(44832011)(81156014)(36756003)(34206002)(386003)(2906002)(2361001)(305945005)(476003)(2351001)(8676002)(66066001)(8936002)(7736002)(956004)(63394003)(18370500001)(2700100001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0801MB1976; H:localhost; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1976; 23:qF/jRYGhcSwE1PatL8UJ7XeCeaaW8M0ewZccHbq?= =?us-ascii?Q?sENuw21ZN7lXkAGvPPJ25X5fwllKonhJwN2T1CVSyig3uiQWSIkjyOiB86S5?= =?us-ascii?Q?tEjSq2yRK6p5K1XWgxInKk/qm4e3aY9ADcOAcSP1PVHwf/AimxNUOU0BYG3g?= =?us-ascii?Q?UnvA6OLByYJhS+iQAeeLwRCo9q09m41QKMYwr/o00UNBoSJgc2XyAzbtHHSg?= =?us-ascii?Q?MgmPw8M7A/G2OhK4wjbKw5Jm8OpldP7lwVfnHwT0VjonLlKIQ1fDZAEZQu1+?= =?us-ascii?Q?4+kLdYpztZSS0O38GV0mbBDHZKXZXzatauWeg/t4gLl4TwpBXlJi/lbDwyWz?= =?us-ascii?Q?f3y9xoFzc4Dz0FEdMfRQTKCtWJSkb5+L00dJvvPGG6p62vC79O5T5BQyTIG/?= =?us-ascii?Q?kznhf2ThcltYHgfPwFgm0U/VcrxpF3wSvB11vtw1NvhOT1TJYXr8fITembI0?= =?us-ascii?Q?QlFfhcDuOcQdGUY4m0fRBdmGp2RlTZYAgwdd9lpNZvxGhkmLM4Z3BuJN/mBc?= =?us-ascii?Q?BHRzhyx+PkelorWsPWhLAbnjywv7A3rURo+4GhwxAfMpzDTENFY4MfEOWRDl?= =?us-ascii?Q?/7E8TDthIx01NvLpUhsyLNVviqGY5ryVmaQ0VXcJD9NL2TSLd4A8sjykqYHT?= =?us-ascii?Q?HNQ0R5/e/E80IODbM6H6Wb8ltNY5+AangNQLivwX1WtCZny14u85DQPDW4DW?= =?us-ascii?Q?lA8KKrH14ziAlk96jmr6VfASktaD4IMKu6nUyie7c0wsoLexsgFF3mubCtz3?= =?us-ascii?Q?MX8bO7iT6Z+86tHjPi0dBYZPqroF9AysivSEp9qCJEk8/oiiF+F9EgGLDiON?= =?us-ascii?Q?5jtwb2NxxT2hNhUaLADd6z3jmw+FaCn4zY5Z1wWLYOH/D1z4CfrW+4xStmjP?= =?us-ascii?Q?DMfydtHjQ4lgKItNtFVAEgqD+Vsd1PX3VvT9HKwF4MHvFKJ8BEwuO+qAybXU?= =?us-ascii?Q?B6ui0ohkMcGlx0irMLJTYAw/KRx6tAiMIjQJlkvNy0xy+UE7PqQMsBHvu9ID?= =?us-ascii?Q?/v2yoK6/gjUy6f2VpcIDCGFN8x75TsA1DaTDGvZDTUcaHWZJyO0trlU0TeAH?= =?us-ascii?Q?BUU+hZyg1IKfSS2TZrqab6w00a484FAclhjsOtJ0iMUd+r6gVPafwY5yJQqS?= =?us-ascii?Q?y33Jwf29gwjCSlK85PiwEGE1aRSIonPHiTPzK64XwjmQNrYXsrtkNbP7lVnR?= =?us-ascii?Q?XUDGPLBi0DGswOovx0oJh7ZBCRdMyRzp74W///hrn7oBNgEAojpDwKZAN8+8?= =?us-ascii?Q?7j7Ug/VnT2LJLiF5ZVBHNLMxZrlnZzZJYnCN8n2lunohzNMlv5LTEhKEsXDc?= =?us-ascii?Q?l8ldN7otnLa9jlV4Yob09pgUqZ5sZ/pl0y2edX6nQefrAQnyeZASru1qlZFe?= =?us-ascii?Q?zKtKhfknfh8TPyJbPPvLodbQZCFU0PS4EBpsGkbZtUelQUM2xqOlQg93n+u+?= =?us-ascii?Q?Q3FLR/SXa3gRAlkcC3OJhZJar5QB6niyQJL/JvKmIJkA75Nw3tF2S0cKfzGa?= =?us-ascii?Q?BIdF13OvNyPMYkpGERFXAI4ywnw/9IsCM7OY=3D?= X-Microsoft-Antispam-Message-Info: Vtzep3omFDq3A83lC5MMu2zvckQaF8f9fKsd80YDiEsVMJY5X+m0YZALIDqFFjgSydLvrzHg3jv9THsjJy4UpFTKJnSyOV2mDFYKV3pOfuqUm/ncX7BVQD7jU7V7lR8e2tO6sjHYoqwxaqj6/brPAhyzk0ObX96DMTMn9mDKDVzEj2troLaVKRKM45ij0OsF X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1976; 6:oEDDOp0mXx6oJ92P7e5wWloFZtrfo7MCfF/Gw0CraZErnqbWRLW/uOXLiOYSqCXYDn2dkhnRIvI1O7DUTSXZ40IrdN9b0nTtcTJcfzI6rgMe5hHDMoX4RsdS+3Glf7aupSDZN1iE17JgmfvcyRkpzSkdZhfnS1QUtsnq8Ccksu7I+3hFf0lg/mrYetfdsvIaFJ5DvzCOaXoP9dAJXbYmBGLjkQX1iqB/UHcS/gSKPir1weNTKQllLUVskSaOALfv/NYccC0Axa2wEsE/Tr38ifMZC8eMtd+9ELEM6J+aLElnkTdThhebG9dffBwW+YWhVDH/9qMDzS+Y5QCvoHZTyb++Gnz6bVqA88sXmXsYvEBVH09ehNjgHWjlmJbak74XnaRzEVu60knLwTwH93UaJD5zo+vM45dN+/4IXlGgOO2FxIRqL20i3u/Bxqy4RjZzkyN71QBEV+B/Ez48n/Vv6w==; 5:K8/6j7wBAZ8bZ+3XsqD9QA4QlIagRXEmggbrcx2nJ1bF4HkikbM7hBGtPKBOQ2wTWEXUbjRKANTjB4gW0wTRt6orT4xTcnnDxpZat11Lh3w+sKf9APbRCtt08PCrhoc7MenK/rXuugOXRvFnwci6qgC7bLpnGjVoJ144j/LPqqQ=; 24:edM+ZwUt8dgK9uqxCAttJKJcHzHSX0RkmfPEUSivXurEFZXVqisITaAQwZswGGc8ExAuKM0p9Lj0INsXjC9TNx8wYHBiFAoPFzR35+qky98= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1976; 7:2pWC3hpQV66qgqwLoanFZ0nKQ4bcLbxJxQDxU+mSD9qZHniCD486Aw2Vq98iboOuCftvQ7JvMDPojXE6LZ54YSBhAoWvlZe+NDi1y6ikTLlIrQBrcJHmmi8Zh4MJVsJHJZqs9U/ENzVnQDHrEOxjBAjAryEbUTE7MI5VVH6+830a5KQ24eVwBlVMNDFDXocSwXSsN6MY3wN84lCcugQ/nbmDQwUe0QL8s268Rab//1+vJGqcwYmHfYC/d8NUhlFI X-MS-Office365-Filtering-Correlation-Id: 1d63af9c-f559-468e-4fcf-08d5c5fdfcdc X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 May 2018 07:21:39.6572 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1d63af9c-f559-468e-4fcf-08d5c5fdfcdc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1976 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, nd@arm.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP daniel.vetter@intel.com,jani.nikula@linux.intel.com,seanpaul@chromium.org,airlied@linux.ie,dri-devel@lists.freedesktop.org,linux-kernel@vger.kernel.org,brian.starkey@arm.com,nd@arm.com Bcc: lowry.li@arm.com Subject: drm/blend: Add per-plane pixel blend mode property Reply-To: From 7b3b4cae2b0283076b47775efdf5dbbf75a8d859 Mon Sep 17 00:00:00 2001 From: Lowry Li Date: Mon, 28 May 2018 18:27:33 +0800 Subject: [PATCH v2 2/2] drm/mali-dp: Implement plane alpha and pixel blend on malidp Check the pixel blending mode and plane alpha value when do the plane_check. Mali DP supports blending the current plane with the background either based on the pixel alpha blending mode or by using the layer's alpha value, but not both at the same time. If both case, plane_check will return failed. Set the HW when doing plane_update accordingly. If plane alpha is the 0xffff, set the PREM bit accordingly. If not we'd set ALPHA bit as zero and layer alpha value. Signed-off-by: Lowry Li --- drivers/gpu/drm/arm/malidp_planes.c | 65 ++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c index d5aec08..5ae548b 100644 --- a/drivers/gpu/drm/arm/malidp_planes.c +++ b/drivers/gpu/drm/arm/malidp_planes.c @@ -31,6 +31,7 @@ #define LAYER_COMP_MASK (0x3 << 12) #define LAYER_COMP_PIXEL (0x3 << 12) #define LAYER_COMP_PLANE (0x2 << 12) +#define LAYER_PMUL_ENABLE (0x1 << 14) #define MALIDP_LAYER_COMPOSE 0x008 #define MALIDP_LAYER_SIZE 0x00c #define LAYER_H_VAL(x) (((x) & 0x1fff) << 0) @@ -110,6 +111,7 @@ static int malidp_de_plane_check(struct drm_plane *plane, struct drm_rect clip = { 0 }; int i, ret; u32 src_w, src_h; + u16 pixel_alpha = state->pixel_blend_mode; if (!state->crtc || !state->fb) return 0; @@ -178,6 +180,11 @@ static int malidp_de_plane_check(struct drm_plane *plane, ms->rotmem_size = val; } + /* HW can't support plane + pixel blending */ + if ((state->alpha != DRM_BLEND_ALPHA_OPAQUE) && + (pixel_alpha != DRM_MODE_BLEND_PIXEL_NONE)) + return -EINVAL; + return 0; } @@ -206,7 +213,11 @@ static void malidp_de_plane_update(struct drm_plane *plane, struct drm_gem_cma_object *obj; struct malidp_plane *mp; const struct malidp_hw_regmap *map; - struct malidp_plane_state *ms = to_malidp_plane_state(plane->state); + struct drm_plane_state *state = plane->state; + struct malidp_plane_state *ms = to_malidp_plane_state(state); + u16 pixel_alpha = state->pixel_blend_mode; + u8 plane_alpha = state->alpha >> 8; + u8 alpha_bits = state->fb->format->alpha; u16 ptr; u32 src_w, src_h, dest_w, dest_h, val; int i; @@ -215,10 +226,10 @@ static void malidp_de_plane_update(struct drm_plane *plane, map = &mp->hwdev->map; /* convert src values from Q16 fixed point to integer */ - src_w = plane->state->src_w >> 16; - src_h = plane->state->src_h >> 16; - dest_w = plane->state->crtc_w; - dest_h = plane->state->crtc_h; + src_w = state->src_w >> 16; + src_h = state->src_h >> 16; + dest_w = state->crtc_w; + dest_h = state->crtc_h; malidp_hw_write(mp->hwdev, ms->format, mp->layer->base); @@ -226,13 +237,13 @@ static void malidp_de_plane_update(struct drm_plane *plane, /* calculate the offset for the layer's plane registers */ ptr = mp->layer->ptr + (i << 4); - obj = drm_fb_cma_get_gem_obj(plane->state->fb, i); + obj = drm_fb_cma_get_gem_obj(state->fb, i); obj->paddr += plane->state->fb->offsets[i]; malidp_hw_write(mp->hwdev, lower_32_bits(obj->paddr), ptr); malidp_hw_write(mp->hwdev, upper_32_bits(obj->paddr), ptr + 4); } malidp_de_set_plane_pitches(mp, ms->n_planes, - plane->state->fb->pitches); + state->fb->pitches); malidp_hw_write(mp->hwdev, LAYER_H_VAL(src_w) | LAYER_V_VAL(src_h), mp->layer->base + MALIDP_LAYER_SIZE); @@ -240,8 +251,8 @@ static void malidp_de_plane_update(struct drm_plane *plane, malidp_hw_write(mp->hwdev, LAYER_H_VAL(dest_w) | LAYER_V_VAL(dest_h), mp->layer->base + MALIDP_LAYER_COMP_SIZE); - malidp_hw_write(mp->hwdev, LAYER_H_VAL(plane->state->crtc_x) | - LAYER_V_VAL(plane->state->crtc_y), + malidp_hw_write(mp->hwdev, LAYER_H_VAL(state->crtc_x) | + LAYER_V_VAL(state->crtc_y), mp->layer->base + MALIDP_LAYER_OFFSET); if (mp->layer->id == DE_SMART) @@ -254,20 +265,30 @@ static void malidp_de_plane_update(struct drm_plane *plane, val &= ~LAYER_ROT_MASK; /* setup the rotation and axis flip bits */ - if (plane->state->rotation & DRM_ROTATE_MASK) - val |= ilog2(plane->state->rotation & DRM_ROTATE_MASK) << + if (state->rotation & DRM_ROTATE_MASK) + val |= ilog2(state->rotation & DRM_ROTATE_MASK) << LAYER_ROT_OFFSET; - if (plane->state->rotation & DRM_REFLECT_X) + if (state->rotation & DRM_REFLECT_X) val |= LAYER_H_FLIP; - if (plane->state->rotation & DRM_REFLECT_Y) + if (state->rotation & DRM_REFLECT_Y) val |= LAYER_V_FLIP; - /* - * always enable pixel alpha blending until we have a way to change - * blend modes - */ - val &= ~LAYER_COMP_MASK; - val |= LAYER_COMP_PIXEL; + val &= ~(LAYER_COMP_MASK | LAYER_PMUL_ENABLE); + + if (state->alpha != DRM_BLEND_ALPHA_OPAQUE) { + val |= LAYER_COMP_PLANE | LAYER_ALPHA(plane_alpha); + } else if (alpha_bits != 0) { + /* We only care about blend mode if the format has alpha */ + switch (pixel_alpha) { + case DRM_MODE_BLEND_PREMULTI: + val |= LAYER_COMP_PIXEL | LAYER_PMUL_ENABLE; + break; + case DRM_MODE_BLEND_COVERAGE: + val |= LAYER_COMP_PIXEL; + break; + } + val |= LAYER_ALPHA(0xff); + } /* set the 'enable layer' bit */ val |= LAYER_ENABLE; @@ -300,6 +321,9 @@ int malidp_de_planes_init(struct drm_device *drm) unsigned long crtcs = 1 << drm->mode_config.num_crtc; unsigned long flags = DRM_ROTATE_0 | DRM_ROTATE_90 | DRM_ROTATE_180 | DRM_ROTATE_270 | DRM_REFLECT_X | DRM_REFLECT_Y; + unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) | + BIT(DRM_MODE_BLEND_PREMULTI) | + BIT(DRM_MODE_BLEND_COVERAGE); u32 *formats; int ret, i, j, n; @@ -351,6 +375,9 @@ int malidp_de_planes_init(struct drm_device *drm) drm_plane_create_rotation_property(&plane->base, DRM_ROTATE_0, flags); malidp_hw_write(malidp->dev, MALIDP_ALPHA_LUT, plane->layer->base + MALIDP_LAYER_COMPOSE); + + drm_plane_create_alpha_property(&plane->base); + drm_plane_create_blend_mode_property(&plane->base, blend_caps); } kfree(formats); -- 1.9.1