Received: by 2002:a05:6a10:6d25:0:0:0:0 with SMTP id gq37csp1894258pxb; Mon, 13 Sep 2021 07:41:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxhZq0fXQTjgXFOMThYHK94pxyCqvl9NXpNw+EFF2G+0pmaq4Y1XHKz2kF6X2Qi1P40Kycd X-Received: by 2002:a17:906:368e:: with SMTP id a14mr12919597ejc.60.1631544066810; Mon, 13 Sep 2021 07:41:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631544066; cv=none; d=google.com; s=arc-20160816; b=zw24/Ris0eiJyrp8dmn/XKmNLMuiNTj1X91ZengJUlenWdDz89pLYHXXEGe9dDePVY gCzTKEPsDLDSfMu2CW9kxKeBcse3nioff33YAOWe1UCXIxzIfAhg6UIL+5ZJMppH7O1t nQOJCGV5KGkgz2TVWGvt0UjXE981x8LKatuf0qSo/3ob98QafrJRFG6OSyb8Fown7Zg5 Nurv0EhPyPph/pF4UC58sRbDrtnHBjoAVXx+pMRT9xqr7HJL4UkwpjYMD8gvfOp+UFbZ +R+Onf7B5nf0OGIR/VvqKXf4/EHEPNff5KtoMkAPCfbw2L1k9iD8yBZSdp70rgEu52nj x6hA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=4EB6qKyuHdZyWKQkZuNKuM5JMhNydtgkA7kvLomDd7M=; b=K7s2h3TyF+aCrzIXZRlmnThVkJ4T74gia8Q1jBk5iRnoiv5DBBjskhmgnUtxds643S E5lhSLp6qqbqOC1SzsU99RokUqP7EMXZYacb5mVgkGQrQAb0ifhrWuRZ7B3R7CGR2OU0 BUDzOYPMjX6123gawO/veor8BV7fYa7ETdfJliq8au8Jef7rJhjhkz37128iRKGmSIPW vQFRlwKwV82JHhcNx3LLCkkMZV5UguN60/pCB8RStDTKj8qH0NbDztusnugw4cOcGxlV QQmBXKNLJ5MJCwtysaNzUJZJoLTUJ/ZFchTEg0bGsmbAtHkCFMMEgicnA66zh8Cp5shd g8JQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=t8SLAx4v; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p5si7196588ejj.74.2021.09.13.07.40.39; Mon, 13 Sep 2021 07:41:06 -0700 (PDT) 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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=t8SLAx4v; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345271AbhIMOgT (ORCPT + 99 others); Mon, 13 Sep 2021 10:36:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:51904 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243445AbhIMOaz (ORCPT ); Mon, 13 Sep 2021 10:30:55 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F37FA60FBF; Mon, 13 Sep 2021 13:51:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631541097; bh=IadMZ0pUGcyaAMKR50sje3LsncERJJKFmuooJ5ChcpI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=t8SLAx4vCzkHgMqaS7VImBqebRNyqtqSt6r2e/j3t7iC4MZ1oA38MJ/cOBnwDFPaF SwhZeWvchvgNvzjpDvZtdv80AzoeJWfcsW/AAy9kB4oEitp5Drly/0ERYSan9lUhp7 kj4LZnOVx4mtBKYMkkwer/FPb4L5J0bdam2HZNts= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marek Vasut , Daniel Abrecht , Emil Velikov , Laurent Pinchart , Lucas Stach , Stefan Agner , Jagan Teki , Sam Ravnborg , Sasha Levin Subject: [PATCH 5.14 134/334] drm: mxsfb: Enable recovery on underflow Date: Mon, 13 Sep 2021 15:13:08 +0200 Message-Id: <20210913131117.897762947@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913131113.390368911@linuxfoundation.org> References: <20210913131113.390368911@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marek Vasut [ Upstream commit 0c9856e4edcdcac22d65618e8ceff9eb41447880 ] There is some sort of corner case behavior of the controller, which could rarely be triggered at least on i.MX6SX connected to 800x480 DPI panel and i.MX8MM connected to DPI->DSI->LVDS bridged 1920x1080 panel (and likely on other setups too), where the image on the panel shifts to the right and wraps around. This happens either when the controller is enabled on boot or even later during run time. The condition does not correct itself automatically, i.e. the display image remains shifted. It seems this problem is known and is due to sporadic underflows of the LCDIF FIFO. While the LCDIF IP does have underflow/overflow IRQs, neither of the IRQs trigger and neither IRQ status bit is asserted when this condition occurs. All known revisions of the LCDIF IP have CTRL1 RECOVER_ON_UNDERFLOW bit, which is described in the reference manual since i.MX23 as " Set this bit to enable the LCDIF block to recover in the next field/frame if there was an underflow in the current field/frame. " Enable this bit to mitigate the sporadic underflows. Fixes: 45d59d704080 ("drm: Add new driver for MXSFB controller") Signed-off-by: Marek Vasut Cc: Daniel Abrecht Cc: Emil Velikov Cc: Laurent Pinchart Cc: Lucas Stach Cc: Stefan Agner Reviewed-by: Lucas Stach Reviewed-by: Laurent Pinchart Reviewed-by: Jagan Teki Signed-off-by: Sam Ravnborg Link: https://patchwork.freedesktop.org/patch/msgid/20210620224701.189289-1-marex@denx.de Signed-off-by: Sasha Levin --- drivers/gpu/drm/mxsfb/mxsfb_kms.c | 29 +++++++++++++++++++++++++++++ drivers/gpu/drm/mxsfb/mxsfb_regs.h | 1 + 2 files changed, 30 insertions(+) diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c index 300e7bab0f43..01e0f525360f 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c @@ -115,6 +115,35 @@ static void mxsfb_enable_controller(struct mxsfb_drm_private *mxsfb) reg |= VDCTRL4_SYNC_SIGNALS_ON; writel(reg, mxsfb->base + LCDC_VDCTRL4); + /* + * Enable recovery on underflow. + * + * There is some sort of corner case behavior of the controller, + * which could rarely be triggered at least on i.MX6SX connected + * to 800x480 DPI panel and i.MX8MM connected to DPI->DSI->LVDS + * bridged 1920x1080 panel (and likely on other setups too), where + * the image on the panel shifts to the right and wraps around. + * This happens either when the controller is enabled on boot or + * even later during run time. The condition does not correct + * itself automatically, i.e. the display image remains shifted. + * + * It seems this problem is known and is due to sporadic underflows + * of the LCDIF FIFO. While the LCDIF IP does have underflow/overflow + * IRQs, neither of the IRQs trigger and neither IRQ status bit is + * asserted when this condition occurs. + * + * All known revisions of the LCDIF IP have CTRL1 RECOVER_ON_UNDERFLOW + * bit, which is described in the reference manual since i.MX23 as + * " + * Set this bit to enable the LCDIF block to recover in the next + * field/frame if there was an underflow in the current field/frame. + * " + * Enable this bit to mitigate the sporadic underflows. + */ + reg = readl(mxsfb->base + LCDC_CTRL1); + reg |= CTRL1_RECOVER_ON_UNDERFLOW; + writel(reg, mxsfb->base + LCDC_CTRL1); + writel(CTRL_RUN, mxsfb->base + LCDC_CTRL + REG_SET); } diff --git a/drivers/gpu/drm/mxsfb/mxsfb_regs.h b/drivers/gpu/drm/mxsfb/mxsfb_regs.h index 55d28a27f912..df90e960f495 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_regs.h +++ b/drivers/gpu/drm/mxsfb/mxsfb_regs.h @@ -54,6 +54,7 @@ #define CTRL_DF24 BIT(1) #define CTRL_RUN BIT(0) +#define CTRL1_RECOVER_ON_UNDERFLOW BIT(24) #define CTRL1_FIFO_CLEAR BIT(21) #define CTRL1_SET_BYTE_PACKAGING(x) (((x) & 0xf) << 16) #define CTRL1_GET_BYTE_PACKAGING(x) (((x) >> 16) & 0xf) -- 2.30.2