Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1286419pxb; Sun, 17 Jan 2021 03:34:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJzSt7fCCres4jWIB23niQFjLMR2rDG/LUmebvwxQTLFyD2DOODKgod8nQKYop+Noqz7T2Xb X-Received: by 2002:a17:907:271c:: with SMTP id w28mr14586966ejk.140.1610883251589; Sun, 17 Jan 2021 03:34:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610883251; cv=none; d=google.com; s=arc-20160816; b=xssgvapYWamaCCroBz01EBsLPk87edAemIJzdOOUGJo0fF8uaSxRsQrDzCYvMrFkz2 DJj7rKe8rJqeE/n0GKaYKWXz2bnVjLn/gV2aDpNmV8oINEs7pnEwuEYzVmEbDv8irMk5 vEzP/x468nxZNMcpdZVWp5DBiXC7Fjm6x2mCDkI8ivH/hhhWK0MtEzbZDeguod7d5lg9 CeZTzqvl7z1qpWrwrosCkdo4YooZFmrihZkdB5T/sUQYkAMRtN1WXPWUnIaJ2Tb7dVxq J+OQRrQPKfc+OBhICdBhQfmIV+BdLF+OEo58YFsXlxeTSgW2pgFr6/NNasE1cInByiN8 n2RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=W15YMQfZiJS/h3o7oX5RDpseHsdLJm503X3+wMceD20=; b=C/bZiSxQn/qQT7En5ShOE8e1iZofBvFFZlHYwV/jJimF597lwKu648GqeqzqzcM32Z C81OxBxVQ9lSr3NwjUneBTprGNPIlQauZFmuJBpa+Hlg4FUklLoEKFq0I9/FgKeFMz2Q jVPAYH82h5wi4BRJe0cYLyfPvDBZTib2kppC4XOQP0ipvwTLvkmVKuqwqOepabLFddCy QohiBujv64tmwU3EZ4mI3hKOR9okP/0A9WxcOeE/Ksu+tiiXA4LDgg4GsWPxp6RIYsu7 OOU47A55My2I1NtiasGqixfeP/Kvic7D1liGBdop/c5zSC5e60YDOfQHypRY/azh8WOH L+7A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a72si4279649edf.380.2021.01.17.03.33.48; Sun, 17 Jan 2021 03:34:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728708AbhAQLaq (ORCPT + 99 others); Sun, 17 Jan 2021 06:30:46 -0500 Received: from aposti.net ([89.234.176.197]:36742 "EHLO aposti.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728668AbhAQLaK (ORCPT ); Sun, 17 Jan 2021 06:30:10 -0500 From: Paul Cercueil To: David Airlie , Daniel Vetter Cc: Sam Ravnborg , od@zcrc.me, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Paul Cercueil , stable@vger.kernel.org Subject: [PATCH 3/3] drm/ingenic: Fix non-OSD mode Date: Sun, 17 Jan 2021 11:26:46 +0000 Message-Id: <20210117112646.98353-4-paul@crapouillou.net> In-Reply-To: <20210117112646.98353-1-paul@crapouillou.net> References: <20210117112646.98353-1-paul@crapouillou.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Even though the JZ4740 did not have the OSD mode, it had (according to the documentation) two DMA channels, but there is absolutely no information about how to select the second DMA channel. Make the ingenic-drm driver work in non-OSD mode by using the foreground0 plane (which is bound to the DMA0 channel) as the primary plane, instead of the foreground1 plane, which is the primary plane when in OSD mode. Fixes: 3c9bea4ef32b ("drm/ingenic: Add support for OSD mode") Cc: # v5.8+ Signed-off-by: Paul Cercueil --- drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index d23a3292a0e0..9d883864e078 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -553,7 +553,7 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane, height = state->src_h >> 16; cpp = state->fb->format->cpp[0]; - if (priv->soc_info->has_osd && plane->type == DRM_PLANE_TYPE_OVERLAY) + if (!priv->soc_info->has_osd || plane->type == DRM_PLANE_TYPE_OVERLAY) hwdesc = &priv->dma_hwdescs->hwdesc_f0; else hwdesc = &priv->dma_hwdescs->hwdesc_f1; @@ -814,6 +814,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) const struct jz_soc_info *soc_info; struct ingenic_drm *priv; struct clk *parent_clk; + struct drm_plane *primary; struct drm_bridge *bridge; struct drm_panel *panel; struct drm_encoder *encoder; @@ -928,9 +929,11 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) if (soc_info->has_osd) priv->ipu_plane = drm_plane_from_index(drm, 0); - drm_plane_helper_add(&priv->f1, &ingenic_drm_plane_helper_funcs); + primary = priv->soc_info->has_osd ? &priv->f1 : &priv->f0; - ret = drm_universal_plane_init(drm, &priv->f1, 1, + drm_plane_helper_add(primary, &ingenic_drm_plane_helper_funcs); + + ret = drm_universal_plane_init(drm, primary, 1, &ingenic_drm_primary_plane_funcs, priv->soc_info->formats_f1, priv->soc_info->num_formats_f1, @@ -942,7 +945,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) drm_crtc_helper_add(&priv->crtc, &ingenic_drm_crtc_helper_funcs); - ret = drm_crtc_init_with_planes(drm, &priv->crtc, &priv->f1, + ret = drm_crtc_init_with_planes(drm, &priv->crtc, primary, NULL, &ingenic_drm_crtc_funcs, NULL); if (ret) { dev_err(dev, "Failed to init CRTC: %i\n", ret); -- 2.29.2