From patchwork Tue Sep 27 13:36:14 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 9351881 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 F02B36077B for ; Tue, 27 Sep 2016 13:36:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E1FD128F2C for ; Tue, 27 Sep 2016 13:36:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D696128FB0; Tue, 27 Sep 2016 13:36:47 +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.2 required=2.0 tests=BAYES_00, 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 4932228F2C for ; Tue, 27 Sep 2016 13:36:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5269C8970B; Tue, 27 Sep 2016 13:36:42 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4615D6E6A4 for ; Tue, 27 Sep 2016 13:36:41 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OE600MD20H1BL70@mailout1.w1.samsung.com> for dri-devel@lists.freedesktop.org; Tue, 27 Sep 2016 14:36:37 +0100 (BST) Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20160927133636eucas1p284b72dd44672026cf614efac661898e5~4MZWyyZu81838418384eucas1p2n; Tue, 27 Sep 2016 13:36:36 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id 3E.28.28332.4E57AE75; Tue, 27 Sep 2016 14:36:36 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20160927133636eucas1p139c88cf29008dc597dbbbcabc7fea9c9~4MZV9fY8l2082920829eucas1p1J; Tue, 27 Sep 2016 13:36:36 +0000 (GMT) X-AuditID: cbfec7f4-f791c6d000006eac-f1-57ea75e48dd1 Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 16.C7.10494.8B57AE75; Tue, 27 Sep 2016 14:35:52 +0100 (BST) Received: from AMDC2768.DIGITAL.local ([106.120.43.17]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OE600AGC0GSQO20@eusync2.samsung.com>; Tue, 27 Sep 2016 14:36:35 +0100 (BST) From: Andrzej Hajda To: Daniel Vetter Subject: [RFC PATCH 1/6] drm: add helper for arming crtc completion event Date: Tue, 27 Sep 2016 15:36:14 +0200 Message-id: <1474983379-852-2-git-send-email-a.hajda@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1474983379-852-1-git-send-email-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrBIsWRmVeSWpSXmKPExsWy7djP87pPSl+FG8y4Jmdxa905VouNM9az WvzfNpHZ4srX92wWa4/cZXdg9dj7bQGLx/3u40wefVtWMQYwR3HZpKTmZJalFunbJXBlfHm2 j6XgnlDFlufrmRsYb/F3MXJySAiYSHx9fZYdwhaTuHBvPRuILSSwlFHi/1LFLkYuIPszo8TV x9/YYBom757JBpFYxiixr2s+E4Tzn1Gi+9VrVpAqNgFNib+bb4J1iAgoS/RvnsMKUsQssJ5R Ys2zCYwgCWEBT4knbbvAdrMIqEq87l3FBGLzCjhKzPm3BmqdnMTNc53MIDangJPExBc/mUEG SQhcZ5PY2PkIqIEDyJGV2HSAGaLeRaLx2AwoW1ji1fEtUL/JSFye3M0C0dvNKPGp/wQ7hDOF UeLfB5gOa4nDxy+CvcAswCcxadt0ZogFvBIdbUIQJR4SRxcvhCp3lFjfOI8d4v2pjBLTl3xk msAos4CRYRWjSGppcW56arGJXnFibnFpXrpecn7uJkZgfJ7+d/zLDsbFx6wOMQpwMCrx8K7I fxUuxJpYVlyZe4hRgoNZSYT3XDFQiDclsbIqtSg/vqg0J7X4EKM0B4uSOO+eBVfChQTSE0tS s1NTC1KLYLJMHJxSDYyar2sdJn+NmM74btaEFsOnj+YsWf6ScfNhZtayJNFHaf7Cf6QXn7R6 9OhmpEKhgvFZgZU2vGqKdpFx+8PUlDxM3Cb3rWS5WeqsH+qwObS5N7Rdxjp6ncOP927XaqcX 2XHyBE3x/N3nwXSwYO403saw8qmx6g3vzwavPMp0JTK7M8DLcEtDtRJLcUaioRZzUXEiAGLi 3FLLAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOLMWRmVeSWpSXmKPExsVy+t/xK7o7Sl+FGzz+KmNxa905VouNM9az WvzfNpHZ4srX92wWa4/cZXdg9dj7bQGLx/3u40wefVtWMQYwR7nZZKQmpqQWKaTmJeenZOal 2yqFhrjpWigp5CXmptoqRej6hgQpKZQl5pQCeUYGaMDBOcA9WEnfLsEt48uzfSwF94Qqtjxf z9zAeIu/i5GTQ0LARGLy7plsELaYxIV764FsLg4hgSWMEhufH2aGcBqZJE5ePcIKUsUmoCnx d/NNsA4RAWWJ/s1zWEGKmAXWM0psmHKbESQhLOAp8aRtFzuIzSKgKvG6dxUTiM0r4Cgx598a qHVyEjfPdTKD2JwCThITX/wEs4WAau5NPsE0gZF3ASPDKkaR1NLi3PTcYiO94sTc4tK8dL3k /NxNjMBA3Xbs55YdjF3vgg8xCnAwKvHwrsh/FS7EmlhWXJl7iFGCg1lJhPdcMVCINyWxsiq1 KD++qDQntfgQoynQUROZpUST84FRlFcSb2hiaG5paGRsYWFuZKQkzjv1w5VwIYH0xJLU7NTU gtQimD4mDk6pBsapT36bdi4+GfBDrf3/p22Cr8Sa1y58c2DSuQuBF2fWlkwtmPLmavg226Nz v3gr/n3t+PN0t2+ra27gnEc531bWLdLQmrZtrdblu21ah2SOl3Ndna0lNuPJS0WFgyZvtFxe ngg8tHLiki/SARf3OTrc4MisFmjx4DvHuT5d5cmjOpdex0cT1m7MVGIpzkg01GIuKk4EAINb IZdqAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20160927133636eucas1p139c88cf29008dc597dbbbcabc7fea9c9 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRvsgrw=?= =?UTF-8?B?7ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20160927133636eucas1p139c88cf29008dc597dbbbcabc7fea9c9 X-RootMTR: 20160927133636eucas1p139c88cf29008dc597dbbbcabc7fea9c9 References: <1474983379-852-1-git-send-email-a.hajda@samsung.com> Cc: Marek Szyprowski , dri-devel@lists.freedesktop.org, Bartlomiej Zolnierkiewicz 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: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP A lot of drivers need to fire pageflip completion event at very next vblank interrupt. The patch adds helper to perform this operation. drm_crtc_arm_completion_event checks if there is an event to handle, if vblank reference get succeeds it arms the event, otherwise it sends the event immediately. Signed-off-by: Andrzej Hajda --- drivers/gpu/drm/drm_irq.c | 25 +++++++++++++++++++++++++ include/drm/drm_irq.h | 1 + 2 files changed, 26 insertions(+) diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 77f357b..313d323 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -1053,6 +1053,31 @@ void drm_crtc_send_vblank_event(struct drm_crtc *crtc, EXPORT_SYMBOL(drm_crtc_send_vblank_event); /** + * drm_crtc_arm_completion_event - conditionally arm crtc completion event + * @crtc: the source CRTC of the completion event + * + * A lot of drivers need to fire pageflip completion event at very next vblank + * interrupt. This helper tries to arm the event in case of successful vblank + * get otherwise it sends the event immediately. + */ +void drm_crtc_arm_completion_event(struct drm_crtc *crtc) +{ + struct drm_pending_vblank_event *event = crtc->state->event; + + if (event) { + crtc->state->event = NULL; + + spin_lock_irq(&crtc->dev->event_lock); + if (drm_crtc_vblank_get(crtc) == 0) + drm_crtc_arm_vblank_event(crtc, event); + else + drm_crtc_send_vblank_event(crtc, event); + spin_unlock_irq(&crtc->dev->event_lock); + } +} +EXPORT_SYMBOL(drm_crtc_arm_completion_event); + +/** * drm_vblank_enable - enable the vblank interrupt on a CRTC * @dev: DRM device * @pipe: CRTC index diff --git a/include/drm/drm_irq.h b/include/drm/drm_irq.h index 2401b14..7bd9690 100644 --- a/include/drm/drm_irq.h +++ b/include/drm/drm_irq.h @@ -144,6 +144,7 @@ extern void drm_crtc_send_vblank_event(struct drm_crtc *crtc, struct drm_pending_vblank_event *e); extern void drm_crtc_arm_vblank_event(struct drm_crtc *crtc, struct drm_pending_vblank_event *e); +extern void drm_crtc_arm_completion_event(struct drm_crtc *crtc); extern bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe); extern bool drm_crtc_handle_vblank(struct drm_crtc *crtc); extern int drm_crtc_vblank_get(struct drm_crtc *crtc);