From patchwork Tue Jan 16 13:34:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Hellstrom X-Patchwork-Id: 10166965 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 1ACEF601E7 for ; Tue, 16 Jan 2018 13:35:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0CC6D280B0 for ; Tue, 16 Jan 2018 13:35:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 012372834A; Tue, 16 Jan 2018 13:35:44 +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=-4.1 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID 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 88D17280B0 for ; Tue, 16 Jan 2018 13:35:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C505F899EA; Tue, 16 Jan 2018 13:35:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0061.outbound.protection.outlook.com [104.47.40.61]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD783897E0 for ; Tue, 16 Jan 2018 13:35:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=onevmw.onmicrosoft.com; s=selector1-vmware-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=qXALXQIq4u4RQIhM+V4Uxhf2Pcd6SjbIb/lv1wbGtk4=; b=e2HPbm2IHNJDzrLLwlO1p7we+H1LMMqlNZCvJofD0sLEOuSJtY+rLHcHvJ1grWmZtZih1x25H22LY8xudG0zDaT2EotebaWru7en+f4dLpfVMsfrgliZ3nytrZgsOezMh4xdWDH06wVr6vl0hjv8K3Fmojz/p/JGkVoUrDac0fA= Received: from ubuntu.localdomain (155.4.205.56) by BLUPR05MB755.namprd05.prod.outlook.com (10.141.208.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.9; Tue, 16 Jan 2018 13:35:24 +0000 From: Thomas Hellstrom To: dri-devel@lists.freedesktop.org Subject: [PATCH 4/7] drm/vmwgfx: Move screen object page flip to atomic function Date: Tue, 16 Jan 2018 14:34:31 +0100 Message-Id: <1516109674-10087-5-git-send-email-thellstrom@vmware.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516109674-10087-1-git-send-email-thellstrom@vmware.com> References: <1516109674-10087-1-git-send-email-thellstrom@vmware.com> MIME-Version: 1.0 X-Originating-IP: [155.4.205.56] X-ClientProxiedBy: DB6PR07CA0086.eurprd07.prod.outlook.com (10.175.238.24) To BLUPR05MB755.namprd05.prod.outlook.com (10.141.208.145) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 137e2383-96bc-4bec-3553-08d55ce5ffdd X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534125)(4602075)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:BLUPR05MB755; X-Microsoft-Exchange-Diagnostics: 1; BLUPR05MB755; 3:rlKaAEMhBjV+evuK22WcMVzaiVYlZq+mTUPmOPp9B1tto2b5qOMSh5a69nRoGIakuDFl2thohcSBPMsZ2Rook2qDmhIIemOiDZa+IWBgoHtv/JI2rBhAs3ovrxb0cZvZqLlRfo4acQCiwVYf7Va6pLu9iczjDnpNHWYN4jiU+9kM6RXrNqMpfQLwC/tgl0kf782KU8fjYf7mHT5LzM6U4a1aCBZqFMGwo3tFROWpK8ckYqIyyv0udgTWdl57a6fy; 25:k4316OVSpk761yMdncOmwmAXSAbMUYfimgFZd2tvD+ppqPuyXp0i3a+BL80mHJSvkl9D0uyuZ0ZKOgWQlRsTAUr5vb6nMYFNjBa22dgYlhrQ+/obf9Ss2MbiEITWzKzqxWeg3CvqzyCY8yB2athEZQ74AFHp7PFed6hLUT63gVtVlGmZpSb7pzxbq/kgeuT9TbdYJBMCOygcevd2EsUfwfJzqR8yt2t4tsSZ54lKTGoKLftKBOw/rBRpinxGtqru46m0qbknJ4LlZNUVviPhibFwJzZ3vyMjJ0Ns/cw8JI0Z0uNNVQR6Y5AqPcQej4zo1lU7oImRN8GW3AVa2dfVxg==; 31:/udiXFEROoPDIoSYHn1Mz/o1Mra5iFy5zYPogNMqddqaymP+fd/xZUNg9iKT1V4sGm1Kni+ys4bjEfSajS8JU3Z3iBgkb4lDVqNhm6MCfxQVPryPzRKizo2lAt7iJWVB7yEN7BzGN86j9KPLgoN/Lyx+4lT4gQmWdg2acCGuhJXGbjdhSM7c9XEqQCny+fMIYaMP7ZEkF9pbd4UB1m6wy6igGyeDMTgemmm9uoI6d6c= X-MS-TrafficTypeDiagnostic: BLUPR05MB755: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=thellstrom@vmware.com; X-Microsoft-Exchange-Diagnostics: 1; BLUPR05MB755; 20:JWd9LOiKsj6RbCQTKUOH00ArW5DD2KRdXm5O4qicaZzywvs6Aiv+NKUMU8FR346K7JMeHrFFwl603DlfM+ibxVoQNAzZNBpnfUNdYGhs7jus93v/Zu7S0fGyJM+OWMWpq4xu6Iq+L9l34alZHQCVXHE2gLM+d2L996xr6I2F19lyB+cbSc3ncnXfoS+SA8PnMB7spmMcLQluYdKto8yxQHQ41fe0oX1+4LMatuVyroD4qn6Tn9Ta6SCMpOfZgE0AgqgyGXGfoieY7L6kpviR1JwUXb6fzjoIvvjHO0dbGD//Qk9U4jQFQ97lmRopK6xSHs8jDCO4Ml6rKnhm7hNeEoWjxy76g/Cl+5N4pRIhD4u3HFrlQVYGUA6ybYIDGdbi4/MA0IRtkImP1b2bJ94jNuuYP1CLYc61FjlJQQjnc6cKY3TkKriSufaV5Y+/bMVXxuJJ6jj/nN/F88FphOA//Fblev/vXSuctp0aoOQ1trFXeP5zyZBX+L6IE9HrYErH; 4:+zKwVR2Xy6cnKmQ3YIK/s+D3l0mGHseCG/G1SAJstHQojc6q5lfNXiFiY1gyBpkQfCePIN+RJb0iDJHILFkMtOjfFqXGPkXSLuVq4mZkWpopCuECWChYa0FD08Yki0NfWQpz8kqT+VY3vFOxGPgUGCR24ILIuqbBb7qkha+pSHVX0VgBDPxIoUFex6+mFEV2e8CB7jK9hRZ36KANwW6vOhLbdnLDuqzbeTA8Ymv/lcdhXg8aCre9ql3qlPOi4lN/3BTeWRVOp9bYvoFLgYCuUU8dTNf52XL268SLQTeYmrAJV2a0mcuN1A90hp2NpJVD X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(61668805478150); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3002001)(3231023)(2400035)(944501161)(10201501046)(93006095)(93001095)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:BLUPR05MB755; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:BLUPR05MB755; X-Forefront-PRVS: 0554B1F54F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(979002)(366004)(346002)(396003)(39380400002)(376002)(39860400002)(189003)(199004)(50466002)(7736002)(6666003)(6916009)(97736004)(106356001)(305945005)(6486002)(2950100002)(107886003)(478600001)(105586002)(2361001)(2351001)(5660300001)(3846002)(86362001)(6512007)(59450400001)(26005)(386003)(6116002)(76176011)(52116002)(6506007)(53936002)(51416003)(2906002)(68736007)(8936002)(316002)(16526018)(54906003)(16586007)(8676002)(81166006)(81156014)(36756003)(25786009)(47776003)(4326008)(66066001)(48376002)(50226002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR05MB755; H:ubuntu.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: vmware.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR05MB755; 23:Hh1RXZmrD3axjfrbSMXvk9C5uLNowfsLJoc+ZYtyWl?= =?us-ascii?Q?NBl4BLYMsZhYm69nqRAQwuZ+N2reRwDh6gjYHEM94JyBrrg8DvivTtdjYqNh?= =?us-ascii?Q?OVvrHZrFs7lsuXIXyMLZXzzgjJil/H0Uh1PE/rNhupoEm9rzB4yfHmEl0vbS?= =?us-ascii?Q?KM57b+CLuMwA6N/+t44lOzYVdP3uJiJyFiKe/1NXlAyNDFf+s3GxrbypEKYs?= =?us-ascii?Q?UuST6y4YYyEwiZsJHD66SLdpS7pud9Mmr649Rm10sjHNdeUZEuCykzJpJ0C2?= =?us-ascii?Q?U1ctI4IbLkpNRhUr0/OPP4/11G4Yj7zKINWVbvMeoF18x4gwJIqzIHAm8Ifo?= =?us-ascii?Q?44RP3Wu9XAEnXI+y790lcr7tCRpslnU1+hSf6ykq5czXXfpQXJc8IvGxm3Z6?= =?us-ascii?Q?eOciKy2q+rMJ7lTmLkx1XQBBaDkZaBhTzlC0E462eu2ZmLioZHZm78aLlQdh?= =?us-ascii?Q?EThtNdjLeUPj3WKIFdvN6Bm//2rE5fJLDUmUma2k7X/XAZqaDgUTqzWlNNVX?= =?us-ascii?Q?AKcdr5pRPBT2Nkwn6CWMIAPuFh6LH6k97QUyjEafHjL/fcWBHzXygfS+l2CG?= =?us-ascii?Q?iU+yDNRa+1bXgYad7pG4nZC8DNzbol4S4f6HkGGs8Icq7hg4JKtx7evQ6Lh7?= =?us-ascii?Q?VRDzsFkNidx7VdzYrwZk9OPGnbKHN4mXnM6Sbwx/r217h6tcWaTG3ZMqxxCh?= =?us-ascii?Q?P3v0N7A1W6X5GbzyGkSUQ9whTrGOMlraKk6bfVJ0KYHwKUFQJM/vGoX8eBZh?= =?us-ascii?Q?+Sh9odjoDyr29rSF5JlwmAsdDb9AE+WSwxm/5hzMUCKMxTaPd/gPfKRT2cVb?= =?us-ascii?Q?cUIcHu8zWcfzGaVyCgPLgbvyMtZmRi4Jp8eM6S5VYThC/cS/E0tLMYXtADpt?= =?us-ascii?Q?xUmNFncJz2ASXcBiDh4g7tx1ppB46R9KbMMV6FOa1S9GaB1Wdca49RBWvccm?= =?us-ascii?Q?HB3CBVzji2i2PT1uQAbdp7hMfRba6jiNMM6Vg7ELh5dbgmZYTGP9J3UvWs6o?= =?us-ascii?Q?BeJS4pIgb840BPNRAA/5L0aC0PWHmxLs5FnuSva3wvHoB/ujUsRS4mE5/CJB?= =?us-ascii?Q?PXjrlYAHt0M6J3FyhHnT70OCXoVGDq+l0Hc/492xouC16S+w2IZE2lxKqkHg?= =?us-ascii?Q?sVSdR6kV0tcPHRsYhtyxXXCPynAG8WxsZ2jIJ+nDol2VPhh+33VzuDDVZ5C4?= =?us-ascii?Q?iJql9oq5UTOBx7rzu8qm/nmGHaahG66DAQDD12qEP1YB3t8cGpzWDvRvxL1c?= =?us-ascii?Q?dS4kaOlt9CFen8NCLSgH/9aTXcJQzeaVULWWQFrg82qcQV/IQK0ibC8ws8sw?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR05MB755; 6:/WHBGLvwWO45BAP7uDowP0AyHesGemC+bBEcFbnBxpICk9L4+X/JPLOLuRQa9Cr3XGCpwDFvm32rbKtR3dmzx7yrWn+TwRmJW2kXFvnVaaPtyqL/py3XUyb0DZurQb4DdO2/zCxh0eMfLVHDpZzvsVHe9molzgPHflCAYKbKpuMkwzgYUsgAaKT8TkAVT/5o65FxkyfeK/6ZBuGvLIrcnbQoUffiMk2JJ0fQPRF268yg1fNHGaWBH5C6qecAu8tMOAHB1k9v6gNkKuF+7npCon60Wmn13tSEoxBUcpI+4w9okB/uWAZR52WeeobQVoB6OeAEJbe8NfD+VB/6p+s9pqZ4k9zTjVFV/zde3q7fRoo=; 5:Z0XBDMU7Ab3gBqAf1Spd8ugTu+G05eELXFpCYUZo9k2VV7J2CiIy1hhD2n+bEUF91D4nC4apxyXbl2jfV4N/xX3Hy+QKWpxXCZX0YpGEEZw5trZio/w9CFi9GXA9PbOLpUseDmFGyXYa4aZV9GRWizK44kMAQBfMytapM7CkNGg=; 24:l0R/33YWjPq5fgZ+KWEuPx5QJC999zLQw4039CrQKns5Ee2FXPXND5RSzPyZFtqJ0k0k8qU4s6nKF6BWax3716ei35D+KBYC0u8XQ9y3kog=; 7:iaTX6chRPbzF5IV6mNy65+4DK8666Z6dVOc+HFFuA0hNMZXqtLsluRBSStIBovRP2+jeK8bQ+19W4GaEgXibvDmK59tzgKgmJnJrWiELVUSLL7xRThJ+RkxeUKPI/68WMJimrn/yM3H9Q7Kn/YD8X7UzQVyafTvTc02zx0hn6/FCYy1xX7NTjdbI5V8QBoCimq/IHu94G5iuNXLC/mbxHj2yyXI0IdCwtt11gHlskYyIIhNAftNcOyKwXmh9kYT+ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR05MB755; 20:q9O+wABeLUswLrS8BVIP/o1xv8UpPeV5auWnobfWkuOos86/7tlMJrUjYtG085Kh1t/iTpR3tUGs7rbqssfVcdre7yrw1zB+w+6L80y3V6QIwmAKUa/kqk5++YiP2QJd5GxQY/Z8AN7In1eE3cIouwG3LPsTSZOKYP/Lao9KTFc= X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jan 2018 13:35:24.6340 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 137e2383-96bc-4bec-3553-08d55ce5ffdd X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR05MB755 Cc: Thomas Hellstrom , Deepak Rawat X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Deepak Rawat The dmabuf_dirty/surface_dirty in case of screen object is moved to plane atomic update, so that page flip in atomic ioctl also works. vmwgfx does not support DRM_MODE_PAGE_FLIP_ASYNC, so this flag is never expected. Signed-off-by: Deepak Rawat Signed-off-by: Thomas Hellstrom Reviewed-by: Sinclair Yeh --- drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 114 ++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c index 21f4019..7164724 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c @@ -316,69 +316,21 @@ static int vmw_sou_crtc_page_flip(struct drm_crtc *crtc, struct drm_modeset_acquire_ctx *ctx) { struct vmw_private *dev_priv = vmw_priv(crtc->dev); - struct drm_framebuffer *old_fb = crtc->primary->fb; - struct vmw_framebuffer *vfb = vmw_framebuffer_to_vfb(new_fb); - struct vmw_fence_obj *fence = NULL; - struct drm_vmw_rect vclips; int ret; if (!vmw_kms_crtc_flippable(dev_priv, crtc)) return -EINVAL; - flags &= ~DRM_MODE_PAGE_FLIP_ASYNC; - ret = drm_atomic_helper_page_flip(crtc, new_fb, NULL, flags, ctx); + ret = drm_atomic_helper_page_flip(crtc, new_fb, event, flags, ctx); if (ret) { DRM_ERROR("Page flip error %d.\n", ret); return ret; } - /* do a full screen dirty update */ - vclips.x = crtc->x; - vclips.y = crtc->y; - vclips.w = crtc->mode.hdisplay; - vclips.h = crtc->mode.vdisplay; - - if (vfb->dmabuf) - ret = vmw_kms_sou_do_dmabuf_dirty(dev_priv, vfb, - NULL, &vclips, 1, 1, - true, &fence, crtc); - else - ret = vmw_kms_sou_do_surface_dirty(dev_priv, vfb, - NULL, &vclips, NULL, - 0, 0, 1, 1, &fence, crtc); - - - if (ret != 0) - goto out_no_fence; - if (!fence) { - ret = -EINVAL; - goto out_no_fence; - } - - if (event) { - struct drm_file *file_priv = event->base.file_priv; - - ret = vmw_event_fence_action_queue(file_priv, fence, - &event->base, - &event->event.vbl.tv_sec, - &event->event.vbl.tv_usec, - true); - } - - /* - * No need to hold on to this now. The only cleanup - * we need to do if we fail is unref the fence. - */ - vmw_fence_obj_unreference(&fence); - if (vmw_crtc_to_du(crtc)->is_implicit) vmw_kms_update_implicit_fb(dev_priv, crtc); return ret; - -out_no_fence: - drm_atomic_set_fb_for_plane(crtc->primary->state, old_fb); - return ret; } static const struct drm_crtc_funcs vmw_screen_object_crtc_funcs = { @@ -530,9 +482,71 @@ vmw_sou_primary_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *old_state) { struct drm_crtc *crtc = plane->state->crtc; + struct drm_pending_vblank_event *event = NULL; + struct vmw_fence_obj *fence = NULL; + int ret; + + if (crtc && plane->state->fb) { + struct vmw_private *dev_priv = vmw_priv(crtc->dev); + struct vmw_framebuffer *vfb = + vmw_framebuffer_to_vfb(plane->state->fb); + struct drm_vmw_rect vclips; + + vclips.x = crtc->x; + vclips.y = crtc->y; + vclips.w = crtc->mode.hdisplay; + vclips.h = crtc->mode.vdisplay; + + if (vfb->dmabuf) + ret = vmw_kms_sou_do_dmabuf_dirty(dev_priv, vfb, NULL, + &vclips, 1, 1, true, + &fence, crtc); + else + ret = vmw_kms_sou_do_surface_dirty(dev_priv, vfb, NULL, + &vclips, NULL, 0, 0, + 1, 1, &fence, crtc); + + /* + * We cannot really fail this function, so if we do, then output + * an error and maintain consistent atomic state. + */ + if (ret != 0) + DRM_ERROR("Failed to update screen.\n"); - if (crtc) crtc->primary->fb = plane->state->fb; + } else { + /* + * When disabling a plane, CRTC and FB should always be NULL + * together, otherwise it's an error. + * Here primary plane is being disable so should really blank + * the screen object display unit, if not already done. + */ + return; + } + + event = crtc->state->event; + /* + * In case of failure and other cases, vblank event will be sent in + * vmw_du_crtc_atomic_flush. + */ + if (event && fence) { + struct drm_file *file_priv = event->base.file_priv; + + ret = vmw_event_fence_action_queue(file_priv, + fence, + &event->base, + &event->event.vbl.tv_sec, + &event->event.vbl.tv_usec, + true); + + if (unlikely(ret != 0)) + DRM_ERROR("Failed to queue event on fence.\n"); + else + crtc->state->event = NULL; + } + + if (fence) + vmw_fence_obj_unreference(&fence); }