From patchwork Mon Jan 22 09:25:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 125352 Delivered-To: patch@linaro.org Received: by 10.46.66.141 with SMTP id h13csp1053794ljf; Mon, 22 Jan 2018 01:25:51 -0800 (PST) X-Google-Smtp-Source: AH8x22720u2MXP4Z1cRa0bhyEwD4mkCDSfJfS/+1YlQzB0a7U9KHTEtsRs0N8Sa3TLcc4Ez9t/v8 X-Received: by 10.98.155.8 with SMTP id r8mr7830518pfd.94.1516613151219; Mon, 22 Jan 2018 01:25:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516613151; cv=none; d=google.com; s=arc-20160816; b=PoJjlnYVQZoCD5ytrogppJSdUV9I/5xGi0lB0Kagd7zh6ROa89FFKvtLvBo282CBTP RXUWTThqss8ty0PkAQ+ViCQzbXUN+Srjoia9DlyLqYcRYAbripQrqnkqvsSUUK+X4amK 5TnDpcX5vgXDqVIWEZFgi32S1+WZB4SH2PoPmcRT253SSQEEGnPmi91xxr4Ov2AjyDs1 x33UyaNXXMUTHRdMp1E+zmMAEWl4C1nzbkHSPG98QNPrxMu/9ksYER8sxLEkBcEKdPtB z+USm6h8xUU390538nZA4DhD4PMR6BR/pfNBW819d3QDHfy5wwn0ndwXUu7TTO5nDlY4 Jf3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=sK0hhYZBu6frIxjWsIxSztsrm/mn5iRzqwOrv8e7mKY=; b=a3B/adqowe5jXchDi3pj66bi7F0vt6YFGhkx58L8Dr+PnnDyh6B8QK9xC2B9m6LjAF vv8dOFYls0Jm7H5kbuS3YRzlqck+4iq3IP17DP6QJPDUCTHF7hyGuyPIPXR5T05Ron0j /pXoubny+9kUrEXFzvebIAPrSbX59FfsWIYtr/8RI9BaCGRLJjI4nh4h1B85KGgietv1 wh6HW9wQr94hrCdqbgeKdzVexP5uMzY0zAEwRZejk5LagY/uaxBIecZAGgeVXdbsfuWd qj2M+ZSd5Zpozoz4n1ThjFGRtgtatry2uSkerFerF2B21A8Ei3MDZjrYUp9qfp89n8+R T77w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f9-v6si3236173plm.183.2018.01.22.01.25.50; Mon, 22 Jan 2018 01:25:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752097AbeAVJZr (ORCPT + 28 others); Mon, 22 Jan 2018 04:25:47 -0500 Received: from mail.free-electrons.com ([62.4.15.54]:44109 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752003AbeAVJZo (ORCPT ); Mon, 22 Jan 2018 04:25:44 -0500 Received: by mail.free-electrons.com (Postfix, from userid 110) id D64DC2072C; Mon, 22 Jan 2018 10:25:41 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.free-electrons.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.free-electrons.com (Postfix) with ESMTPSA id A406A20730; Mon, 22 Jan 2018 10:25:31 +0100 (CET) From: Maxime Ripard To: Chen-Yu Tsai , Maxime Ripard Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, narmstrong@baylibre.com, thomas@vitsch.nl Subject: [PATCH v4 06/13] drm/sun4i: engine: Add a VBLANK quirk callback Date: Mon, 22 Jan 2018 10:25:20 +0100 Message-Id: <7c298d43aa1500196aa5d15d7a7c0f228c7a6f3c.1516613040.git-series.maxime.ripard@free-electrons.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In some cases, the display engine needs to apply some quirks during the VBLANK event. In the Display Engine 1.0 case for example, we can only disable the frontend once the backend has been, which is at VBLANK. Let's introduce a callback that can be implemented by the various engines. Reviewed-by: Chen-Yu Tsai Signed-off-by: Maxime Ripard --- drivers/gpu/drm/sun4i/sun4i_tcon.c | 4 ++++ drivers/gpu/drm/sun4i/sunxi_engine.h | 13 +++++++++++++ 2 files changed, 17 insertions(+) -- git-series 0.9.1 diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c index e122f5b2a395..55f54b54293c 100644 --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c @@ -368,6 +368,7 @@ static irqreturn_t sun4i_tcon_handler(int irq, void *private) struct sun4i_tcon *tcon = private; struct drm_device *drm = tcon->drm; struct sun4i_crtc *scrtc = tcon->crtc; + struct sunxi_engine *engine = scrtc->engine; unsigned int status; regmap_read(tcon->regs, SUN4I_TCON_GINT0_REG, &status); @@ -385,6 +386,9 @@ static irqreturn_t sun4i_tcon_handler(int irq, void *private) SUN4I_TCON_GINT0_VBLANK_INT(1), 0); + if (engine->ops->vblank_quirk) + engine->ops->vblank_quirk(engine); + return IRQ_HANDLED; } diff --git a/drivers/gpu/drm/sun4i/sunxi_engine.h b/drivers/gpu/drm/sun4i/sunxi_engine.h index b819d4f9f02f..54c029877531 100644 --- a/drivers/gpu/drm/sun4i/sunxi_engine.h +++ b/drivers/gpu/drm/sun4i/sunxi_engine.h @@ -85,6 +85,19 @@ struct sunxi_engine_ops { * This function is optional. */ void (*disable_color_correction)(struct sunxi_engine *engine); + + /** + * @vblank_quirk: + * + * This callback is used to implement engine-specific + * behaviour part of the VBLANK event. It is run with all the + * constraints of an interrupt (can't sleep, all local + * interrupts disabled) and therefore should be as fast as + * possible. + * + * This function is optional. + */ + void (*vblank_quirk)(struct sunxi_engine *engine); }; /** From patchwork Mon Jan 22 09:25:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 125354 Delivered-To: patch@linaro.org Received: by 10.46.66.141 with SMTP id h13csp1053847ljf; Mon, 22 Jan 2018 01:25:59 -0800 (PST) X-Google-Smtp-Source: AH8x2255b2pdV/WhbRGqX8Fznx5ZhCYOqrini9zmpcNzYTSMEaHNxMEhl/J59lQZ5TYeHlF/wiNO X-Received: by 10.101.88.66 with SMTP id s2mr6895826pgr.341.1516613158943; Mon, 22 Jan 2018 01:25:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516613158; cv=none; d=google.com; s=arc-20160816; b=0YBBer361XwejCwhjBB+nFu+QFQFmPb5m41pVa10OPA+8Af7e3Xf+/G/9zmK4T52lO 58g4NHenYw1JaAZRp+l9Sf9HF1aD/wga3SizESUe5veHGnJSxDUTPF3ds6HHiXbo+xhj D/9aL46zQSrYR4alwhL/rVVGHkTMznYZCrwQ4Urirm2ZkqJH0OCjVYOvNvBx5QYN1n+E p5HFreAamiHzm/F6+00MT4I6tVrarTd+bWIL8mAlF8kVdgvZUzU31nLRSFFFkv2xSyqS ESzvTjJQxtLYuLjQI+p/RXjwLWhxYYft2OjeZ7xix+UYLFUlgmjSXTroLabDEdVbHQpP mfTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=vBJGYxRU6gIxAG1eliN3uiwMRvVzty3LNTFchH6KiCU=; b=JaEkkRdzHkQLDwQjpTfJcUNRAbC+x7Zq2PBAx0fC0DRHgcMVPzVO9dPd5yIurvJ0/o XWoz3GD7c+vWSJ8GfMpH/kT94iLywda2dPYanZV46x1lXfIMhhLTLqFLm+oC92pARUNp +HpeKV96+wtQiJS/lEp2Z9h032xfeYDhKDtdOoxTEsjRDaro2Vl3bBG97yuqIuswj6ra qTdUubTUhnf4iyO+XxqO44F9B82PueW2tIVeknKjIcWDLbmb8oLgJQRADtJjDn27x92g UDbQvjtCRx2OyDtdDmYtsjxi82XDM6Z+zbkkhe4nS2wtDqVsybXzyhTQEn09JPvZYxxx +bAg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f9-v6si3236173plm.183.2018.01.22.01.25.58; Mon, 22 Jan 2018 01:25:58 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752292AbeAVJZ4 (ORCPT + 28 others); Mon, 22 Jan 2018 04:25:56 -0500 Received: from mail.free-electrons.com ([62.4.15.54]:44119 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752024AbeAVJZu (ORCPT ); Mon, 22 Jan 2018 04:25:50 -0500 Received: by mail.free-electrons.com (Postfix, from userid 110) id 0CC552083E; Mon, 22 Jan 2018 10:25:49 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.free-electrons.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.free-electrons.com (Postfix) with ESMTPSA id 1155520734; Mon, 22 Jan 2018 10:25:32 +0100 (CET) From: Maxime Ripard To: Chen-Yu Tsai , Maxime Ripard Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, narmstrong@baylibre.com, thomas@vitsch.nl Subject: [PATCH v4 07/13] drm/sun4i: engine: Create an atomic_begin callback Date: Mon, 22 Jan 2018 10:25:21 +0100 Message-Id: <44110951ae0cc13767fefc7fc1d9e2ec782d0a40.1516613040.git-series.maxime.ripard@free-electrons.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We have to implement some display engine specific behaviours in atomic_begin. Let's add a function for that. Reviewed-by: Chen-Yu Tsai Signed-off-by: Maxime Ripard --- drivers/gpu/drm/sun4i/sun4i_crtc.c | 6 +++++- drivers/gpu/drm/sun4i/sunxi_engine.h | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) -- git-series 0.9.1 diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c index 2a565325714f..f549f2874353 100644 --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c @@ -64,6 +64,7 @@ static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc, { struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc); struct drm_device *dev = crtc->dev; + struct sunxi_engine *engine = scrtc->engine; unsigned long flags; if (crtc->state->event) { @@ -73,7 +74,10 @@ static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc, scrtc->event = crtc->state->event; spin_unlock_irqrestore(&dev->event_lock, flags); crtc->state->event = NULL; - } + } + + if (engine->ops->atomic_begin) + engine->ops->atomic_begin(engine, old_state); } static void sun4i_crtc_atomic_flush(struct drm_crtc *crtc, diff --git a/drivers/gpu/drm/sun4i/sunxi_engine.h b/drivers/gpu/drm/sun4i/sunxi_engine.h index 54c029877531..baa7a1f95300 100644 --- a/drivers/gpu/drm/sun4i/sunxi_engine.h +++ b/drivers/gpu/drm/sun4i/sunxi_engine.h @@ -23,6 +23,19 @@ struct sunxi_engine; */ struct sunxi_engine_ops { /** + * @atomic_begin: + * + * This callback allows to prepare our engine for an atomic + * update. This is mirroring the + * &drm_crtc_helper_funcs.atomic_begin callback, so any + * documentation there applies. + * + * This function is optional. + */ + void (*atomic_begin)(struct sunxi_engine *engine, + struct drm_crtc_state *old_state); + + /** * @atomic_check: * * This callback allows to validate plane-update related CRTC From patchwork Mon Jan 22 09:25:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 125353 Delivered-To: patch@linaro.org Received: by 10.46.66.141 with SMTP id h13csp1053827ljf; Mon, 22 Jan 2018 01:25:56 -0800 (PST) X-Google-Smtp-Source: AH8x226mVpQwdvoLnVn2zkJsXdkC8lREzjlSBnQ0TCEhoFwfsAPW5trcyubjrvhICbxSQlSkJEOR X-Received: by 2002:a17:902:6b89:: with SMTP id p9-v6mr3097035plk.377.1516613156836; Mon, 22 Jan 2018 01:25:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516613156; cv=none; d=google.com; s=arc-20160816; b=OZa0/dExPnFkLbp2ohiGRi0qhAics0GhlDNqb013f9GqBVJlsBOXo0bH8SvQs26ZJE uWs2MoeW3lEnQ/h5xVxVVO3NB0wLnQy1UvnAnfkNukVqk2e9PcYW8Wq9ezTjQiE9czB4 UySIK/R4KwTXU5yDvcUyaqf3CIjtSfGVxAF5WFvCgWs5tP3DRhkQSe2lUj4NkZjh8gp7 Sf0ct9IFAU1yQmWyDlGpk8XHy/7m2XGRIJcfwPLkp9WiDdoefUReWk5v2n4EETC71HTB VEGdqZ9Xzo01BIv082tb5M462B+xjbXqp/6X++nNdFlnPvdLuqNP5Rhnr+0PhiOLrfQb yN0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=lHP8zXpJKGx+sjerjC69E9+arDFp2PwLxFkDBEjJuC8=; b=VIzEC/fqpInlDad3yk+upupmI2iT/5n8NCa63n8brqnm54PTERCvQBfpsj+u8Uz2Xg nRUF4Oq7TkZSUmq1ewVOucgR9IwQzqh3Xy9DBlFBaCMBmFxd30Y0zVqZYye81ap8Stxw GBzRrEBwKhEwL7ZIIgbERSX2iDQIif8MByndksdGB7moUHSZUhXncTWJeRU4Mky0AsmN 1VpaJ1ZmaQNbfr5u6yQQh7Gfgy6mSZA8g7HOrZbUHmZWoTFMZf//NHOzD907kL1AyHZk Rj0Fs/BE8x3GmhHcI0k9rV2qIY4o/I/YsgVFCi+YsqOsjMNb1DAsJfcgCGiUyqbY3LPi m5qw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f9-v6si3236173plm.183.2018.01.22.01.25.56; Mon, 22 Jan 2018 01:25:56 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752235AbeAVJZx (ORCPT + 28 others); Mon, 22 Jan 2018 04:25:53 -0500 Received: from mail.free-electrons.com ([62.4.15.54]:44129 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752098AbeAVJZu (ORCPT ); Mon, 22 Jan 2018 04:25:50 -0500 Received: by mail.free-electrons.com (Postfix, from userid 110) id 6A31F20737; Mon, 22 Jan 2018 10:25:49 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.free-electrons.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT, URIBL_BLOCKED shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.free-electrons.com (Postfix) with ESMTPSA id 39D11207A4; Mon, 22 Jan 2018 10:25:33 +0100 (CET) From: Maxime Ripard To: Chen-Yu Tsai , Maxime Ripard Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, narmstrong@baylibre.com, thomas@vitsch.nl Subject: [PATCH v4 12/13] drm/sun4i: backend: Make sure we don't have a commit pending Date: Mon, 22 Jan 2018 10:25:26 +0100 Message-Id: <35604307e5bde2b85c674de79fa7c4d55700f085.1516613040.git-series.maxime.ripard@free-electrons.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If we try to read the backend registers while it fetches the new values, we end up with the value of some random register instead of the one we asked for. In order to prevent that, let's make sure that the very first thing we do during our atomic modesetting is to let the commit bit come to a rest. We don't have to worry about anything else since the only time we will trigger a new transaction is during the atomic_commit which comes much later. Reviewed-by: Chen-Yu Tsai Signed-off-by: Maxime Ripard --- drivers/gpu/drm/sun4i/sun4i_backend.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) -- git-series 0.9.1 diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c index 1b8e3dcbe47a..5d4a49e9ccc3 100644 --- a/drivers/gpu/drm/sun4i/sun4i_backend.c +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c @@ -297,6 +297,17 @@ static bool sun4i_backend_plane_uses_frontend(struct drm_plane_state *state) return sun4i_backend_plane_uses_scaler(state); } +static void sun4i_backend_atomic_begin(struct sunxi_engine *engine, + struct drm_crtc_state *old_state) +{ + u32 val; + + WARN_ON(regmap_read_poll_timeout(engine->regs, + SUN4I_BACKEND_REGBUFFCTL_REG, + val, !(val & SUN4I_BACKEND_REGBUFFCTL_LOADCTL), + 100, 50000)); +} + static int sun4i_backend_atomic_check(struct sunxi_engine *engine, struct drm_crtc_state *crtc_state) { @@ -479,6 +490,7 @@ static struct sun4i_frontend *sun4i_backend_find_frontend(struct sun4i_drv *drv, } static const struct sunxi_engine_ops sun4i_backend_engine_ops = { + .atomic_begin = sun4i_backend_atomic_begin, .atomic_check = sun4i_backend_atomic_check, .commit = sun4i_backend_commit, .layers_init = sun4i_layers_init,