From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 513DF103E2EB for ; Thu, 12 Mar 2026 13:29:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AF03F10E9F4; Thu, 12 Mar 2026 13:29:37 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="d5dAh1qV"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Z1pZFno1"; dkim-atps=neutral Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7594010E9F4 for ; Thu, 12 Mar 2026 13:29:35 +0000 (UTC) Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62C7dn7j509441 for ; Thu, 12 Mar 2026 13:29:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= /2lO51oxWqRuqIMOMa1LT63isf0ox5oldYaFyA2HvGI=; b=d5dAh1qVWvXcYlzw 7TY6mbPMaRnyCfOjsNGXlEnX64c8RrE8ij29OyV4xIQdu6ruEYFbjpYvZ3plbMFl BAqx5Rc6qLAeZzy0y05YY8BXyI92DosUGbo1zrFKllDvLRCNQlWnU078ykqVYAnO z+4Ph2mwP+KiuKit8uO1blPiEWm2geLI1cAb+i6jawO0NC4D8fK/OUq0R4lUYf9l y77RQqYsYjkGFJ9/lRo9W4cZKoj2YdgBSb3p1TEpomI7u14VETUiQbl/9G/sIxxg sMFG7Kjx4EXl/7AGYcnbcy4X/DuCpepUAwCWGFP7GEGpsOvUd8lcAK4pgSaWmJCy No+LzQ== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cus9w0va6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 12 Mar 2026 13:29:34 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cd83cfb36cso724250285a.3 for ; Thu, 12 Mar 2026 06:29:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773322174; x=1773926974; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/2lO51oxWqRuqIMOMa1LT63isf0ox5oldYaFyA2HvGI=; b=Z1pZFno10UR8UUEf3uHxiKG4vpfS4+4pERR3lWTZL4GU8Qed6wkRezWDyE6gg8rJNE Q0NRX3xz+NybloKWfc9V+U56Fx2lez3Qw2yb/LXizBrXNNeW+AcFci+fmXh0q/IseCP4 RRCb+v5ZOlCcU6W8pFe51UXgGJhi0gSHwc5IbmfnnqU178X/UTQLcmlOVmFr4k3UfPyg nPlqfmdU6rNl+xIaWbRhWUlqHt98OjMfRoEaJZtjwpF0c0Zw26pNjE3Ll/BTe6UEjZHQ TM+BK0N/lwCSx0d1pjzECu1dfWOCnFCMVJlg+yIdC1JkhPLhd+8SokGSP2ANys8PHRqQ PnSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773322174; x=1773926974; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/2lO51oxWqRuqIMOMa1LT63isf0ox5oldYaFyA2HvGI=; b=JV/wqNoUXvnND/iyOBoDPJj3fFIZK0dDSBX/IQ4XEtkgJ7842PZuR2HvhD4+QlmSf9 vFVFVZi13N0YNLa7t/sQZ6A1hyyQEI6D5gkukEJvNs+0Nqnc/sxHDF1JZIBRKRenLa+5 hBOzGhozFC3AM/cYCQNwooTgfNe1k4CY3iX3TFnWRL8kPszq1k8B7JdMWoyn5oKIZYPd orjEpUviuCOIyx7kabS3N0/3aamb1ejD68NbDHhGuhWVgyHC9j9xo2otdb8A3JwN+LHL ZzOSmbGDOgvtWbvuUbZo135hf5znZ+L4uxpkk5tkGDXDr+JiZoyv9ON361VmPRJFFMhJ TcGA== X-Forwarded-Encrypted: i=1; AJvYcCVPBN2GU2Som2WOAK+JJBA/xC+5vkJXrNVLzzB53A1dY7CngFN3v5xGDx1jC/upt0xiGaYeEW4doVM=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyWnsPVqctSEQYzl3BRlKSWX0Yu/Rz4f5OFwAGy6axvJx4xdi0C opk7pRr/l1N5wUJ3pRPQ6EOp3rceNvMFgWVqoyUrZL1RbiRrraNF0VtxL9y1m6LuqOpJcAVQZ4n Vmt7ny5bgrVh/P9fLnEM9c0QCYFesXYlx5kQEfHfryQf72Bmixk4eee7GJjE5otSK4ncQGSk= X-Gm-Gg: ATEYQzyWNVd1XXOGxTPWMpehxg9xZpi6qXXfZC4NkQeSUHlyTKbIvNFZ1cfKliGI2fl LiNMIHXoWwgbb/rlNqpbipKVIg/HS4XVADkNYPTTqPf2qrt0st98rc8zw+bmAL2gSV18WSLKijL rbhNLmb2w5W58ZQPVpgSC6we8NIPAZUZaeU54sVBe98XnnANnu4FPQcS82QB+xUI9u75Z+lJerw r08BIEomeNzYplQyF3JH1eCXTdglbpOtr9oZxUmrsrbqMpcNR+oVGOcuh+MOOYY8EzgEn4PRz1G n2AgxP/3LT/VYPZd8748AdUxMykh6kcD+KKFnFFf2ht0nDBEyXG3RpdoJr46gy1f9xWWajC7JTs snhy5Ux0ajBJriDVqVyz7ok9exaaoU+r1cKJChx+O+SGDJjsGdfNffbxJKvACr/iJxYI75eIyZu 1Ym5fO21cm5JxNLZSB87UtfvGzJugdq7fkcoo= X-Received: by 2002:a05:620a:a3cb:b0:8cd:b317:a0b3 with SMTP id af79cd13be357-8cdb317ae33mr79321585a.24.1773322173813; Thu, 12 Mar 2026 06:29:33 -0700 (PDT) X-Received: by 2002:a05:620a:a3cb:b0:8cd:b317:a0b3 with SMTP id af79cd13be357-8cdb317ae33mr79318185a.24.1773322173216; Thu, 12 Mar 2026 06:29:33 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-38a67d617e1sm8646671fa.9.2026.03.12.06.29.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2026 06:29:32 -0700 (PDT) From: Dmitry Baryshkov Date: Thu, 12 Mar 2026 15:29:22 +0200 Subject: [PATCH v3 01/27] drm/msm/mdss: correct UBWC programming sequences MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260312-ubwc-rework-v3-1-b7e8f800176a@oss.qualcomm.com> References: <20260312-ubwc-rework-v3-0-b7e8f800176a@oss.qualcomm.com> In-Reply-To: <20260312-ubwc-rework-v3-0-b7e8f800176a@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Bjorn Andersson , Konrad Dybcio , Akhil P Oommen Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6614; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=FcXX+QO0E2e2UbnHHDWvIWF4Nm+gAqQ21/54o+KGzd8=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBpsr+0lEjFyOEH60Ac/jnZa9bs33g2Aqfq+Yj0Q Pwa09NPO72JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabK/tAAKCRCLPIo+Aiko 1WpoB/9VZxaclHZBWaXPVLeLx4Siy6u3v870jqaZoKW6oUPlJz4Qd/3CCRJovsYhcDTolDy5OJO +kMIzcHfsBP758n6gxunzEe3qyFeLoiNkfzzPnuGsLqmjSHXlaLKzYjvPAeWd77ApUe/oiFWinh bajw1AQPTrqFf62864QM8skUdsNyr/+nblqSKAJJLNayAE5kwb9hIojsypsQIbjfY2iFIxtRNEQ TOtSK/QG1ZFjxymqKb8pFbN56mdp1lG9lQBTF4yWCdJXIonQeotxxd2E2NK2j2EkojtvXWRAkP6 UKgFrmNcFO13o8JeVzQnF1UM1Z3CvAa0H6n82ivux0dXrLya X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: LAxlK5Jvo07OaDBVVcYx7U2URTQ3LulT X-Authority-Analysis: v=2.4 cv=IIIPywvG c=1 sm=1 tr=0 ts=69b2bfbe cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=hQCg4X1xv2bm5S_WMKMA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEyMDEwNyBTYWx0ZWRfXzxoz1VoAKYO6 d6gT2wXT7ckGQGApIiqXrYGEhO0sGlnrhKypkl+WCj53MKc2+F4XDam3PbvUrAZTY8yxGBRcK+7 HzqDLuJcBwyNdgQ3SS/sKgMaLCqMGRX7CW+KnU13wFAaKBMk+8uxG+9x/G4LCEWyBE1DRKxJbIb iXCSqJSAn/Br92suBB1Dl0dVtM4+PK7zDDfwMqNW3jbhoRj2QafJjlPvwcchyS1J12K+Q4TYbUZ AmPcimttOojkfgtXhWYU7EHVs+h+Sndi5FB9YgL6E9pjAPSmHFPB8MQbdynRtcviIKWxPx1xlze ldg6JbiyDlOzG7V3IfM27osE0wxZPXJD5S9UzeL3PmEz9O3LhVQUrRxwGv/V8MAm/tlnIM9GNjR gtBOK1dzKyIMZ8qSLI2GqX61GkBDKBZmi8PdGjdL5VogMmMJWE6EYMPvl/zt1wMZL5QHINVe+Ys ba+XbDaFyp1lglZV/Uw== X-Proofpoint-ORIG-GUID: LAxlK5Jvo07OaDBVVcYx7U2URTQ3LulT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-12_01,2026-03-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 bulkscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 impostorscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603120107 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The UBWC registers in the MDSS region are not dependent on the UBWC version (it is an invalid assumption we inherited from the vendor SDE driver). Instead they are dependent only on the MDSS core revision. Rework UBWC programming to follow MDSS revision and to use required (aka encoder) UBWC version instead of the ubwc_dec_version. Fixes: d68db6069a8e ("drm/msm/mdss: convert UBWC setup to use match data") Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/msm_mdss.c | 115 +++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 74 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c index 9047e8d9ee89..7cb8aeaa7ecf 100644 --- a/drivers/gpu/drm/msm/msm_mdss.c +++ b/drivers/gpu/drm/msm/msm_mdss.c @@ -166,22 +166,19 @@ static int _msm_mdss_irq_domain_add(struct msm_mdss *msm_mdss) return 0; } -static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss *msm_mdss) +static void msm_mdss_4x_setup_ubwc(struct msm_mdss *msm_mdss) { const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data; - u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | + u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle & 0x1) | MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); - if (data->ubwc_bank_spread) - value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; - if (data->ubwc_enc_version == UBWC_1_0) value |= MDSS_UBWC_STATIC_UBWC_MIN_ACC_LEN(1); writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); } -static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss *msm_mdss) +static void msm_mdss_5x_setup_ubwc(struct msm_mdss *msm_mdss) { const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data; u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle & 0x1) | @@ -199,11 +196,12 @@ static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss *msm_mdss) writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); } -static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss) +static void msm_mdss_6x_setup_ubwc(struct msm_mdss *msm_mdss) { const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data; u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); + u32 ver, prediction_mode; if (data->ubwc_bank_spread) value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; @@ -211,45 +209,42 @@ static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss) if (data->macrotile_mode) value |= MDSS_UBWC_STATIC_MACROTILE_MODE; - writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); - - if (data->ubwc_enc_version == UBWC_3_0) { - writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); - writel_relaxed(0, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); - } else { - if (data->ubwc_dec_version == UBWC_4_3) - writel_relaxed(3, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); - else - writel_relaxed(2, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); - writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); - } -} - -static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss) -{ - const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data; - u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | - MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); - - if (data->ubwc_bank_spread) - value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; - - if (data->macrotile_mode) - value |= MDSS_UBWC_STATIC_MACROTILE_MODE; + if (data->ubwc_enc_version == UBWC_1_0) + value |= MDSS_UBWC_STATIC_UBWC_MIN_ACC_LEN(1); writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC); - if (data->ubwc_dec_version == UBWC_6_0) - writel_relaxed(5, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); + if (data->ubwc_enc_version < UBWC_4_0) + prediction_mode = 0; else - writel_relaxed(4, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); - - writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); + prediction_mode = 1; + + if (data->ubwc_enc_version >= UBWC_6_0) + ver = 5; + else if (data->ubwc_enc_version >= UBWC_5_0) + ver = 4; + else if (data->ubwc_enc_version >= UBWC_4_3) + ver = 3; + else if (data->ubwc_enc_version >= UBWC_4_0) + ver = 2; + else if (data->ubwc_enc_version >= UBWC_3_0) + ver = 1; + else /* UBWC 1.0 and 2.0 */ + ver = 0; + + writel_relaxed(ver, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2); + writel_relaxed(prediction_mode, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); } +#define MDSS_HW_VER(major, minor, step) \ + ((((major) & 0xf) << 28) | \ + (((minor) & 0xfff) << 16) | \ + ((step) & 0xffff)) + static int msm_mdss_enable(struct msm_mdss *msm_mdss) { int ret, i; + u32 hw_rev; /* * Several components have AXI clocks that can only be turned on if @@ -275,43 +270,15 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss) if (msm_mdss->is_mdp5 || !msm_mdss->mdss_data) return 0; - /* - * ubwc config is part of the "mdss" region which is not accessible - * from the rest of the driver. hardcode known configurations here - * - * Decoder version can be read from the UBWC_DEC_HW_VERSION reg, - * UBWC_n and the rest of params comes from hw data. - */ - switch (msm_mdss->mdss_data->ubwc_dec_version) { - case 0: /* no UBWC */ - case UBWC_1_0: - /* do nothing */ - break; - case UBWC_2_0: - msm_mdss_setup_ubwc_dec_20(msm_mdss); - break; - case UBWC_3_0: - msm_mdss_setup_ubwc_dec_30(msm_mdss); - break; - case UBWC_4_0: - case UBWC_4_3: - msm_mdss_setup_ubwc_dec_40(msm_mdss); - break; - case UBWC_5_0: - msm_mdss_setup_ubwc_dec_50(msm_mdss); - break; - case UBWC_6_0: - msm_mdss_setup_ubwc_dec_50(msm_mdss); - break; - default: - dev_err(msm_mdss->dev, "Unsupported UBWC decoder version %x\n", - msm_mdss->mdss_data->ubwc_dec_version); - dev_err(msm_mdss->dev, "HW_REV: 0x%x\n", - readl_relaxed(msm_mdss->mmio + REG_MDSS_HW_VERSION)); - dev_err(msm_mdss->dev, "UBWC_DEC_HW_VERSION: 0x%x\n", - readl_relaxed(msm_mdss->mmio + REG_MDSS_UBWC_DEC_HW_VERSION)); - break; - } + hw_rev = readl_relaxed(msm_mdss->mmio + REG_MDSS_HW_VERSION); + + if (hw_rev >= MDSS_HW_VER(6, 0, 0)) + msm_mdss_6x_setup_ubwc(msm_mdss); + else if (hw_rev >= MDSS_HW_VER(5, 0, 0)) + msm_mdss_5x_setup_ubwc(msm_mdss); + else if (hw_rev >= MDSS_HW_VER(4, 0, 0)) + msm_mdss_4x_setup_ubwc(msm_mdss); + /* else UBWC 1.0 or none, no params to program */ return ret; } -- 2.47.3