Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3973012pxb; Tue, 2 Mar 2021 03:32:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJz+e58AsCaRZ9ZrDeimiFSXGmu3TWd8AUFN9EtLL7nMW1PmeWY2DDfhJ2Lr+ZhZAJFlwk1R X-Received: by 2002:a05:6402:b21:: with SMTP id bo1mr19941107edb.368.1614684723994; Tue, 02 Mar 2021 03:32:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614684723; cv=none; d=google.com; s=arc-20160816; b=HP3F7F+pFmBxxLFu7ong0re1S38RKMDTQMRfhkABULkmzDTGpuoQs3WhjF0nosy6pv gAS3GK1I1rmCsC6KLRrJeereacIsyIQ5EYklAfpJtB8ds8P9V5acg04mU5rX53Oj5dI7 MvjNAyjFS02c9g4myE+KxV78PfZmf9EHTo6ryKEgoTab7r/NJUow5KaLbm9okCHdCHBp w/wSqcqwIeqw/oL1YeFybRYo10BHoyNWeGcrXJ88HzI8gPLSpjt01PURUFgef7ALVJlm RQVuIyjLU9fL6OMP/Mtem4vk4KFXL6ieYmwQ/4PlcFTTd900SyZlid5o10i36rcmz3A2 d2RA== 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=ybkUbXnof2npUXwYO8TIPJG6GXmdJa3SAE2IfIANPY0=; b=og0vzcgjCxivtahrgAkrfafhl7c3PzbdhJ01uPOjujuUcf1nZ2fDtExxLiRx4V/Nw5 4NQQd4TUIXMBubZWGZYySEYH9FA4ajPV+F+W1h5MG1xKF/9DldNhhG4BdwYeK+Tr6ODD FvdNe0W4NdlY+BlNHIhycruotvJGU5Zf9zIK0xQI1mFm9XGhGVQgu96Lp5aRNDYnDzrK 5JOy64ma5Sj56tTUj8oSxNhsiW53pNmNs1bagj+T2y1wWWZS9YiTZ6spX/yeUEBmj7IS VdyYmudBrtXG1maP3vpr/hGvg5Ckv14H2CPdm+GAVRYTPto7NFF2LL6dZIrT4O8z27d2 Bnzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Dgq9aNJM; 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 i6si8248195ejz.383.2021.03.02.03.31.39; Tue, 02 Mar 2021 03:32:03 -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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Dgq9aNJM; 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 S1380897AbhCBB42 (ORCPT + 99 others); Mon, 1 Mar 2021 20:56:28 -0500 Received: from mail.kernel.org ([198.145.29.99]:50730 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241606AbhCATcx (ORCPT ); Mon, 1 Mar 2021 14:32:53 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 047156507D; Mon, 1 Mar 2021 17:27:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614619645; bh=1ky7nt3ngZjKLGd7nTnrpKypDmjz25a4MrDHr3oVSPo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Dgq9aNJMpniqQF8plI9Ze05L8f/XxXZHkHnh2+AKoKp1/MtC+ouOTcO4hgKxSeSM/ D6etEhGjplEpdhdC8mC+RDhKPTFBYzuZOPYreVIuw+gijoX1c7zbwcGaCHaO/6wMY5 V0UAzWj2lADTRoQ9n0O0mGs2nGzp6pwQ0uWIjxno= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alyssa Rosenzweig , Daniel Stone , Heiko Stuebner , Maarten Lankhorst Subject: [PATCH 5.10 522/663] drm/rockchip: Require the YTR modifier for AFBC Date: Mon, 1 Mar 2021 17:12:50 +0100 Message-Id: <20210301161207.674014050@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161141.760350206@linuxfoundation.org> References: <20210301161141.760350206@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: Alyssa Rosenzweig commit 5f94e3571459abb626077aedb65d71264c2a58c0 upstream. The AFBC decoder used in the Rockchip VOP assumes the use of the YUV-like colourspace transform (YTR). YTR is lossless for RGB(A) buffers, which covers the RGBA8 and RGB565 formats supported in vop_convert_afbc_format. Use of YTR is signaled with the AFBC_FORMAT_MOD_YTR modifier, which prior to this commit was missing. As such, a producer would have to generate buffers that do not use YTR, which the VOP would erroneously decode as YTR, leading to severe visual corruption. The upstream AFBC support was developed against a captured frame, which failed to exercise modifier support. Prior to bring-up of AFBC in Mesa (in the Panfrost driver), no open userspace respected modifier reporting. As such, this change is not expected to affect broken userspaces. Tested on RK3399 with Panfrost and Weston. Fixes: 7707f7227f09 ("drm/rockchip: Add support for afbc") Cc: stable@vger.kernel.org Signed-off-by: Alyssa Rosenzweig Acked-by: Daniel Stone Signed-off-by: Heiko Stuebner Link: https://patchwork.freedesktop.org/patch/msgid/20200811202631.3603-1-alyssa.rosenzweig@collabora.com Signed-off-by: Maarten Lankhorst Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 11 +++++++++++ 1 file changed, 11 insertions(+) --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h @@ -17,9 +17,20 @@ #define NUM_YUV2YUV_COEFFICIENTS 12 +/* AFBC supports a number of configurable modes. Relevant to us is block size + * (16x16 or 32x8), storage modifiers (SPARSE, SPLIT), and the YUV-like + * colourspace transform (YTR). 16x16 SPARSE mode is always used. SPLIT mode + * could be enabled via the hreg_block_split register, but is not currently + * handled. The colourspace transform is implicitly always assumed by the + * decoder, so consumers must use this transform as well. + * + * Failure to match modifiers will cause errors displaying AFBC buffers + * produced by conformant AFBC producers, including Mesa. + */ #define ROCKCHIP_AFBC_MOD \ DRM_FORMAT_MOD_ARM_AFBC( \ AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | AFBC_FORMAT_MOD_SPARSE \ + | AFBC_FORMAT_MOD_YTR \ ) enum vop_data_format {