Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp531551yba; Mon, 1 Apr 2019 11:11:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqz0AZ70EHZE56whfC5T7eak1kb+/1tlwZe08CgyIhO261yf2Vhc1llxsGipPm8N8VwzCHB6 X-Received: by 2002:a63:dc50:: with SMTP id f16mr38531693pgj.396.1554142279716; Mon, 01 Apr 2019 11:11:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554142279; cv=none; d=google.com; s=arc-20160816; b=zFF9J80ur1oBGgVyZDBcOVTyfhv5291X9VG6CRZoXtK2yfHIgQx+U3KsTqjAzcelxp SaFd55JByCsB1bf0alajSmKIjhgkqyYHOgJR0k25ZVkfaEz0P6NU0f+3yh155ASJfVCS d5i1uENelgW9Oq/SQMOUjisX34OH29W0qaQKhtaFkTKy6hMUTFi1M9etafntr50T64Wk FxJSTG3KU7d20r7DyPkPb4hiRRHvsQ4FmqF1YZ1XSZhveTIW9MgOhXDtITqhHZo9OwQT H5kFN4QXyb6Nh3vS+44Ekustjb1GgT/igKzqtN+CdqqT+FWLx1MLZxiPMeFrjgDlWCDe 59sQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=WQLcAbZJWhENXsbHi3Ur3SMzmsMcOvXiIRMUcbs51Cg=; b=LonuelzMC3/tgzrs8aRsbnChAMax0l2D+hL+yWjY+dnr8a62ITZw91QMTPvlRH/Hin arz2wmN0WakIOwav/CHiISVKjsRt6FsFIrCIvpfciNPOA/sK3fnHLfxl3OJyyUVIBOZG 8TIlVR5LqroxRNlh68od+QUs/sewmmnxkRYQGnIXjfQyh5nfdYxdzrb/t+cID5mso9Ct eaRQdif4M1sEH5I/IDt7UkiqKs5xy50DAkKUEcp8kDF0OdUwk58xUppZ5uD403/dpnSA hLlA11kUfe7em9WlwVgF1WCzfsmGtmmUZhKb5bdMim7X8SVetg5NGYDIIcjxv9w4oNMz uJpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="ue/3J15Y"; 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 n86si9280177pfb.273.2019.04.01.11.11.03; Mon, 01 Apr 2019 11:11:19 -0700 (PDT) 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=@kernel.org header.s=default header.b="ue/3J15Y"; 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 S1729775AbfDASK1 (ORCPT + 99 others); Mon, 1 Apr 2019 14:10:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:54310 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729115AbfDARH4 (ORCPT ); Mon, 1 Apr 2019 13:07:56 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 472B921924; Mon, 1 Apr 2019 17:07:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554138475; bh=fQQDvux8nnoTJk5jJnKdXYY0oK6niHNNEQVSvn21rh4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ue/3J15Yr0slFKjUgEWZ26IFLOIX5s4p6DZbCxRUpZtH9uyKrHyR9swOcKw2Og+WB /u0c7XiEl4rymZatbRlhM2VSL9nI8bYvVBlxIjth5O6R2nUap6eOBl6dnPEh/YFjsG T2RbomGD04LeffikQu1v65J+Milb+pkZLvW4BQeY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jonas Karlman , Heiko Stuebner Subject: [PATCH 5.0 076/146] drm/rockchip: vop: reset scale mode when win is disabled Date: Mon, 1 Apr 2019 19:01:28 +0200 Message-Id: <20190401170055.250377321@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190401170048.449559024@linuxfoundation.org> References: <20190401170048.449559024@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jonas Karlman commit e9abc611a941d4051cde1d94b2ab7473fdb50102 upstream. NV12 framebuffers produced by the VPU shows distorted on RK3288 after win has been disabled when scaling is active. This issue can be reproduced using a 1080p modeset by: - Scale a 1280x720 NV12 framebuffer to 1920x1080 on win0 - Disable win0 - Display a 1920x1080 NV12 framebuffer without scaling on win0 - Output will now show the framebuffer distorted And by: - Scale a 1280x720 NV12 framebuffer to 1920x1080 - Change to a 720p modeset (win gets disabled and scaling reset to none) - Output will now show the framebuffer distorted Fix this by setting scale mode to none when win is disabled. Fixes: 4c156c21c794 ("drm/rockchip: vop: support plane scale") Cc: stable@vger.kernel.org Signed-off-by: Jonas Karlman Signed-off-by: Heiko Stuebner Link: https://patchwork.freedesktop.org/patch/msgid/AM3PR03MB0966DE3E19BACE07328CD637AC7D0@AM3PR03MB0966.eurprd03.prod.outlook.com Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -511,6 +511,18 @@ static void vop_core_clks_disable(struct clk_disable(vop->hclk); } +static void vop_win_disable(struct vop *vop, const struct vop_win_data *win) +{ + if (win->phy->scl && win->phy->scl->ext) { + VOP_SCL_SET_EXT(vop, win, yrgb_hor_scl_mode, SCALE_NONE); + VOP_SCL_SET_EXT(vop, win, yrgb_ver_scl_mode, SCALE_NONE); + VOP_SCL_SET_EXT(vop, win, cbcr_hor_scl_mode, SCALE_NONE); + VOP_SCL_SET_EXT(vop, win, cbcr_ver_scl_mode, SCALE_NONE); + } + + VOP_WIN_SET(vop, win, enable, 0); +} + static int vop_enable(struct drm_crtc *crtc) { struct vop *vop = to_vop(crtc); @@ -556,7 +568,7 @@ static int vop_enable(struct drm_crtc *c struct vop_win *vop_win = &vop->win[i]; const struct vop_win_data *win = vop_win->data; - VOP_WIN_SET(vop, win, enable, 0); + vop_win_disable(vop, win); } spin_unlock(&vop->reg_lock); @@ -700,7 +712,7 @@ static void vop_plane_atomic_disable(str spin_lock(&vop->reg_lock); - VOP_WIN_SET(vop, win, enable, 0); + vop_win_disable(vop, win); spin_unlock(&vop->reg_lock); } @@ -1476,7 +1488,7 @@ static int vop_initial(struct vop *vop) int channel = i * 2 + 1; VOP_WIN_SET(vop, win, channel, (channel + 1) << 4 | channel); - VOP_WIN_SET(vop, win, enable, 0); + vop_win_disable(vop, win); VOP_WIN_SET(vop, win, gate, 1); }