Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3221465imu; Sat, 24 Nov 2018 00:26:30 -0800 (PST) X-Google-Smtp-Source: AFSGD/UqyAgH2GXYw0jIyzN40DtXQPf1pJEnvAcjuKVdY79a+0iVyohXIVKUNwKgMuXrq6jSqMme X-Received: by 2002:a65:41c2:: with SMTP id b2mr16905535pgq.67.1543047990560; Sat, 24 Nov 2018 00:26:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543047990; cv=none; d=google.com; s=arc-20160816; b=y/1TmWpHS2lzQBXQ0HV4M4rnMbs+u67ur9QN2c05uVTYAXfL8mp1XEsEPy4DtrEySz Up9sgSDoSU4aY+Knt0twVUxaCsugXvrbzFZI6/12VoHbMtK2vXxQa6/1YtRpu3oTipEP 3FhRgDlvsV7wHqRd4rhH/7zjKSvXh55NupseyNmIcP6AQkMK5or0zQ0G19rV10HNHnr2 g76zuREYaWFbp+Cc41TclO1defVYg9l/1Vy72GB6EPrbWeff6vTg3dViLgZd7l+roHwa 5r5jyTBXOkvboTQaPpssZOk8sV7xW5iAHt1qPreRp7n4dyzDHnqRCbpzDgVCZT/uKOMC CtsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=pdjP6CMwF8MoU202HfkVVAc9P1Ady+SUoMveJuphXes=; b=U08bW6+wziodFkd3grwW+AvNcaqGicGstgMYJw76HKlGvFe0+Fo9U+kZcQrssYCNan lqZ1epO8R8Vjf3CyKoKi9Q1ABNEXWeopXkTm/usmlEg7nNYS4F4xbFU2CmBNlRusuB98 4Hh2Iow8AhKP7LuZJW7VKaUUNkPWinBukmteR8AakicXi0IDH6TpVpMn62AxlhJtEboy iSrsVOnYOuKbEP0qy/LHRVpmXOo7rnY9v1BXZcKcARNR9ySmbFXKKyalLno7wrf+cZp1 H0P0FZQBSXvU9gXkR4Hls45XqUJSNT48CDiBuh8bemNvCCh82byduAfChi5rFKkMY65u WuAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=OR9MU8uL; 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 p4si10813988pgm.342.2018.11.24.00.26.16; Sat, 24 Nov 2018 00:26:30 -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; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=OR9MU8uL; 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 S2503552AbeKWViJ (ORCPT + 99 others); Fri, 23 Nov 2018 16:38:09 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:40937 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731554AbeKWViJ (ORCPT ); Fri, 23 Nov 2018 16:38:09 -0500 Received: by mail-wr1-f65.google.com with SMTP id p4so11894884wrt.7 for ; Fri, 23 Nov 2018 02:54:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=pdjP6CMwF8MoU202HfkVVAc9P1Ady+SUoMveJuphXes=; b=OR9MU8uLov0ipEnMBoNLktCKsdXQv/CJRkXuPcR136YPvI2LMaJmyvebFgDbys2sz9 lGiQQyNM0JH1bTipi0qQ+21sfK0EbDGqBql02L8YEq1S1kX8iI41Wr/3ORe9D7maHp6g lvBVAoTg/EM/6MYyAOhpos5Gtb6LpTmNSyPyAX0ADy1k985WhFUvNMgjeuq8TfXghqIn 8yz3H6aaaENOv7DnObRtu8E9JHl3uVZPVbzd6jvyuNNHivWEcjvZ345BlQC/80oz0ZYt D6r5HHkTOgsk9SMUShqHzgJa5gXGqZo3zc/MSS8jw5xnNnrUBM7usVpDX+FfXKPOsWti eHag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=pdjP6CMwF8MoU202HfkVVAc9P1Ady+SUoMveJuphXes=; b=WR7huz9KmLwt6Kq461clx9dSomnhdSEEvGC5RFJWI1oeDyAOZzgRTmDN1WT5m4JINn hzLNnDMmeUPgkOxQfxfjSzF7lBOhYLuuY40C9MTV6uaFgT9hiK211HGuZmiZlgE3do64 jyGYMV9JGkoQb+9yZfj1iGV0TgBVED6ZfQOs46yF4rIZwGZ87RbGnBCA38jUjOtlXGg3 dAEPBygaOHoUadoYSP81TZ9q+PCzO9726z1P72oL8gTDoNr9MVudNQQo6V6mLtPydwM9 a6PqVMIgORvhUlYvPo3aIFrTFFv3miEIB3PnE45C+gGSqoyo9obKCFfTYSNFVJ3u2cJ9 uh/w== X-Gm-Message-State: AA+aEWa7QKORntS1xkaZi9X6DsjLwBgdEMGs+BbcZsU9hiz3VYU+mweE ttmaBCMYrTvYSG83dbDRh5lyqQ== X-Received: by 2002:adf:e08c:: with SMTP id c12mr12704532wri.199.1542970460346; Fri, 23 Nov 2018 02:54:20 -0800 (PST) Received: from bender.baylibre.local (lmontsouris-657-1-212-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id o81sm2559776wmd.10.2018.11.23.02.54.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 23 Nov 2018 02:54:19 -0800 (PST) From: Neil Armstrong To: dri-devel@lists.freedesktop.org Cc: Neil Armstrong , linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm/meson: Fix an Alpha Primary Plane bug on Meson GXL/GXM SoCs Date: Fri, 23 Nov 2018 11:54:17 +0100 Message-Id: <20181123105417.18948-1-narmstrong@baylibre.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On the Amlogic GXL & GXM SoCs, a bug occurs on the OSD1 primaty plane when alpha is used where the alpha is not aligned with the pixel content. The woraround Amlogic implemented is to reset the OSD1 plane hardware block each time the plane is updated, solving the issue. In the reset, we still need to save the content of 2 registers which depends on the status of the plane, in addition to reload the scaler conversion matrix at the same time. Signed-off-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_crtc.c | 6 ++++++ drivers/gpu/drm/meson/meson_viu.c | 27 +++++++++++++++++++++++++++ drivers/gpu/drm/meson/meson_viu.h | 1 + 3 files changed, 34 insertions(+) diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c index 75d97f1b2e8f..2f9dfb1d408f 100644 --- a/drivers/gpu/drm/meson/meson_crtc.c +++ b/drivers/gpu/drm/meson/meson_crtc.c @@ -200,6 +200,12 @@ void meson_crtc_irq(struct meson_drm *priv) /* Update the OSD registers */ if (priv->viu.osd1_enabled && priv->viu.osd1_commit) { + + /* Reset OSD1 at updates on GXL+ SoCs */ + if (meson_vpu_is_compatible(priv, "amlogic,meson-gxm-vpu") || + meson_vpu_is_compatible(priv, "amlogic,meson-gxl-vpu")) + meson_viu_reset(priv); + writel_relaxed(priv->viu.osd1_ctrl_stat, priv->io_base + _REG(VIU_OSD1_CTRL_STAT)); writel_relaxed(priv->viu.osd1_blk0_cfg[0], diff --git a/drivers/gpu/drm/meson/meson_viu.c b/drivers/gpu/drm/meson/meson_viu.c index 2dffb987ec65..a41dd6cc343e 100644 --- a/drivers/gpu/drm/meson/meson_viu.c +++ b/drivers/gpu/drm/meson/meson_viu.c @@ -296,6 +296,33 @@ static void meson_viu_load_matrix(struct meson_drm *priv) true); } +/* VIU OSD1 Reset as workaround for GXL+ Alpha OSD Bug */ +void meson_viu_reset(struct meson_drm *priv) +{ + uint32_t osd1_fifo_ctrl_stat, osd1_ctrl_stat2; + + /* Save these 2 registers state */ + osd1_fifo_ctrl_stat = readl_relaxed( + priv->io_base + _REG(VIU_OSD1_FIFO_CTRL_STAT)); + osd1_ctrl_stat2 = readl_relaxed( + priv->io_base + _REG(VIU_OSD1_CTRL_STAT2)); + + /* Reset OSD1 */ + writel_bits_relaxed(BIT(0), BIT(0), + priv->io_base + _REG(VIU_SW_RESET)); + writel_bits_relaxed(BIT(0), 0, + priv->io_base + _REG(VIU_SW_RESET)); + + /* Rewrite these registers state lost in the reset */ + writel_relaxed(osd1_fifo_ctrl_stat, + priv->io_base + _REG(VIU_OSD1_FIFO_CTRL_STAT)); + writel_relaxed(osd1_ctrl_stat2, + priv->io_base + _REG(VIU_OSD1_CTRL_STAT2)); + + /* Reload the conversion matrix */ + meson_viu_load_matrix(priv); +} + void meson_viu_init(struct meson_drm *priv) { uint32_t reg; diff --git a/drivers/gpu/drm/meson/meson_viu.h b/drivers/gpu/drm/meson/meson_viu.h index 073b1910bd1b..e4a6e2fba8fb 100644 --- a/drivers/gpu/drm/meson/meson_viu.h +++ b/drivers/gpu/drm/meson/meson_viu.h @@ -59,6 +59,7 @@ #define OSD_REPLACE_EN BIT(14) #define OSD_REPLACE_SHIFT 6 +void meson_viu_reset(struct meson_drm *priv); void meson_viu_init(struct meson_drm *priv); #endif /* __MESON_VIU_H */ -- 2.19.1