From patchwork Sat Dec 14 22:38:28 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodrigo Vivi X-Patchwork-Id: 3349631 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B0ED4C0D4A for ; Sat, 14 Dec 2013 22:39:15 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D6628206A7 for ; Sat, 14 Dec 2013 22:39:14 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 0A909206A5 for ; Sat, 14 Dec 2013 22:39:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B82FBFB3BD for ; Sat, 14 Dec 2013 14:39:13 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-yh0-f50.google.com (mail-yh0-f50.google.com [209.85.213.50]) by gabe.freedesktop.org (Postfix) with ESMTP id 1511DFB7A0 for ; Sat, 14 Dec 2013 14:38:40 -0800 (PST) Received: by mail-yh0-f50.google.com with SMTP id b6so2687913yha.37 for ; Sat, 14 Dec 2013 14:38:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=t/8PllAazO0ct1lvq+S4/uDZfXmwz3rPOWHQMa7YuVU=; b=vRLTLkavjsUdvpXnQ3M3WwCr8s67OkpxWNT4cVZZJSdcQLTD16YFD1Xe/SjJiACIKH ao8hG1RyKhYw30FsCfSnkCq6oemT1Sng1vC6jlzQxmj4AdoFwWYriimpax383miLz6nx CAnme1rpjxqMbMRocqrhzX0ShlmAfNA+Nc6yN3h/ZDFa2bWF8NcIbmHP9ySXDzWdDEYS vrLN+XeyW1hYIOYTZPJeC7CDVaOdTfzVFU1dxP5GzijJaEKzwmAzziNgQqj47zRanTFn 6ReOAnjyIpBiS9sbF8gSak0I4UVwRy/5sCMGdozFI8rzZuj5H7naboERI66DzFrh5Pde 7O0g== X-Received: by 10.236.113.75 with SMTP id z51mr66054yhg.132.1387060719741; Sat, 14 Dec 2013 14:38:39 -0800 (PST) Received: from localhost.localdomain ([177.140.135.10]) by mx.google.com with ESMTPSA id h23sm10544321yhc.0.2013.12.14.14.38.38 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 14 Dec 2013 14:38:38 -0800 (PST) From: Rodrigo Vivi To: intel-gfx@lists.freedesktop.org Date: Sat, 14 Dec 2013 20:38:28 -0200 Message-Id: <1387060712-5081-2-git-send-email-rodrigo.vivi@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1387060712-5081-1-git-send-email-rodrigo.vivi@gmail.com> References: <1387060712-5081-1-git-send-email-rodrigo.vivi@gmail.com> Subject: [Intel-gfx] [PATCH 1/5] drm/i915: Asynchronously perform the set-base for a simple modeset X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Chris Wilson A simple modeset, where we only wish to switch over to a new framebuffer such as the transition from fbcon to X, takes around 30-60ms. This is due to three factors: 1. We need to make sure the fb->obj is in the display domain, which incurs a cache flush to ensure no dirt is left on the scanout. 2. We need to flush any pending rendering before performing the mmio so that the frame is complete before it is shown. 3. We currently wait for the vblank after the mmio to be sure that the old fb is no longer being shown before releasing it. (1) can only be eliminated by userspace preparing the fb->obj in advance to already be in the display domain. This can be done through use of the create2 ioctl, or by reusing an existing fb->obj. However, (2) and (3) are already solved by the existing page flip mechanism, and it is surprisingly trivial to wire them up for use in the set-base fast path. Though it can be argued that this represents a subtle ABI break in that the set_config ioctl now returns before the old framebuffer is unpinned. The danger is that userspace will start to modify it before it is no longer being shown, however we should be able to prevent that through proper domain tracking. By combining all of the above, we can achieve an instaneous set_config: [ 6.601] (II) intel(0): switch to mode 2560x1440@60.0 on pipe 0 using DP2, position (0, 0), rotation normal [ 6.601] (II) intel(0): Setting screen physical size to 677 x 381 v2 (by Vivi): page_flip_flag was added to intel_crtc_page_flip in a previous commit. using 0. Signed-off-by: Chris Wilson Signed-off-by: Rodrigo Vivi Reviewed-by: Rodrigo Vivi --- drivers/gpu/drm/i915/intel_display.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 976a9ed..ca6cd5d 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -9990,10 +9990,13 @@ static int intel_crtc_set_config(struct drm_mode_set *set) ret = intel_set_mode(set->crtc, set->mode, set->x, set->y, set->fb); } else if (config->fb_changed) { - intel_crtc_wait_for_pending_flips(set->crtc); - - ret = intel_pipe_set_base(set->crtc, - set->x, set->y, set->fb); + if (to_intel_framebuffer(set->fb)->obj->ring == NULL || + save_set.x != set->x || save_set.y != set->y || + intel_crtc_page_flip(set->crtc, set->fb, NULL, 0)) { + intel_crtc_wait_for_pending_flips(set->crtc); + ret = intel_pipe_set_base(set->crtc, + set->x, set->y, set->fb); + } } if (ret) {