From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A4831B85FD; Thu, 26 Jun 2025 09:02:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928567; cv=none; b=KiRBzBi3gpvkK/nXehgoMPNZe35Wd0yTQtEiEgIh0LKUcytEQ/DoE1+EEvGBcZGXOm2fl+KJGpRUmaHwlllCQgNoQFPf9e0Y3LskwcdK6W/bZT8xodD0DkP+Wqd+GonWvHcH4zRkzpYdtDHJowS9pJsyJgHgqtNml264Hh/lLt8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928567; c=relaxed/simple; bh=alJPifqOzVSshcOVFP/ErzIBmKFQIDDeV6H2ERfenow=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O5gNtHdZF3Xn4K1w9m3OucEv7MkJPexYEohbhrc4zLqTeHRFGPRU4E1bm9w94lMt0PN/WzXOqHqSiwyq5XBlfO4nKzOQ4r/RKqHJOeqy4C8HvJEH1w9828FmAnVleg6/Wo4Kp731mUegfo0SNP5GgkNUEeBrUrr+LzNPNtB4UeU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k23ePVex; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k23ePVex" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C43D2C4CEF1; Thu, 26 Jun 2025 09:02:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928566; bh=alJPifqOzVSshcOVFP/ErzIBmKFQIDDeV6H2ERfenow=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=k23ePVexg20EUjdZCd2AvDk3sxUmqtLrd3yTzfQapjP/6F4lEu4X9swaS3HBU6Wjh qsvlQSGGKVC4oEg2UIXKvxXpPt2+TgC5M/luTmRWEGl0q1evCMfq/PNe/8THAsmjSf 7r/x3UAqb0LAqgXBzdj0lkokLUpxi3/f/9bdMcH+98op7zToI4y9Z/jZj+dHNGAAep a+bRB4lC5e7oXPi0hTKzL8D1GqGHWnodzHw0hLuNfl2CQt+OkiFoKn31VopYj9mCO6 xhI5ZHYEPpwCBq0/zXrkLzGGHh8xMqFwzMqA27fcnkGxeCYBXWkgEg749Tc5DW20Rv 9if8hPicH6gPA== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:28 +0200 Subject: [PATCH v6 01/14] soc: qcom: Add UBWC config provider Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-1-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=11931; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=4ZH2LaWR3T5V63/0TZmTgFZ943O/zSSslZWAs7fT8Ak=; b=gXvActgNe7WXU4aLKDi/sVQnGWAKrdMC64aOz0ej5o38TiMJCZ4Mf5q9dmVQkWtB07JBrwbHW TW6QBCNpDhrCJQfgNHqfT1APpSL7y4vkrNmsETt5eSgkH9RDOOsbLrm X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio Add a file that will serve as a single source of truth for UBWC configuration data for various multimedia blocks. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/soc/qcom/Kconfig | 8 ++ drivers/soc/qcom/Makefile | 1 + drivers/soc/qcom/ubwc_config.c | 251 +++++++++++++++++++++++++++++++++++++= ++++ include/linux/soc/qcom/ubwc.h | 65 +++++++++++ 4 files changed, 325 insertions(+) diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index 58e63cf0036ba8554e4082da5184a620ca807a9e..2caadbbcf8307ff94f5afbdd148= 1e5e5e291749f 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -296,3 +296,11 @@ config QCOM_PBS PBS trigger event to the PBS RAM. =20 endmenu + +config QCOM_UBWC_CONFIG + tristate + help + Most Qualcomm SoCs feature a number of Universal Bandwidth Compression + (UBWC) engines across various IP blocks, which need to be initialized + with coherent configuration data. This module functions as a single + source of truth for that information. diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile index acbca2ab5cc2a9ab3dce1ff38efd048ba2fab31e..b7f1d2a5736748b8772c090fd24= 462fa91f321c6 100644 --- a/drivers/soc/qcom/Makefile +++ b/drivers/soc/qcom/Makefile @@ -39,3 +39,4 @@ obj-$(CONFIG_QCOM_ICC_BWMON) +=3D icc-bwmon.o qcom_ice-objs +=3D ice.o obj-$(CONFIG_QCOM_INLINE_CRYPTO_ENGINE) +=3D qcom_ice.o obj-$(CONFIG_QCOM_PBS) +=3D qcom-pbs.o +obj-$(CONFIG_QCOM_UBWC_CONFIG) +=3D ubwc_config.o diff --git a/drivers/soc/qcom/ubwc_config.c b/drivers/soc/qcom/ubwc_config.c new file mode 100644 index 0000000000000000000000000000000000000000..18a853a3f76cc71dc6c2665c6b7= 486eb936331f6 --- /dev/null +++ b/drivers/soc/qcom/ubwc_config.c @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#include +#include +#include +#include +#include +#include + +#include + +static const struct qcom_ubwc_cfg_data msm8937_data =3D { + .ubwc_enc_version =3D UBWC_1_0, + .ubwc_dec_version =3D UBWC_1_0, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data msm8998_data =3D { + .ubwc_enc_version =3D UBWC_1_0, + .ubwc_dec_version =3D UBWC_1_0, + .highest_bank_bit =3D 15, +}; + +static const struct qcom_ubwc_cfg_data qcm2290_data =3D { + /* no UBWC */ + .highest_bank_bit =3D 15, +}; + +static const struct qcom_ubwc_cfg_data sa8775p_data =3D { + .ubwc_enc_version =3D UBWC_4_0, + .ubwc_dec_version =3D UBWC_4_0, + .ubwc_swizzle =3D 4, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 13, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sar2130p_data =3D { + .ubwc_enc_version =3D UBWC_3_0, /* 4.0.2 in hw */ + .ubwc_dec_version =3D UBWC_4_3, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 13, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sc7180_data =3D { + .ubwc_enc_version =3D UBWC_2_0, + .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sc7280_data =3D { + .ubwc_enc_version =3D UBWC_3_0, + .ubwc_dec_version =3D UBWC_4_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 14, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sc8180x_data =3D { + .ubwc_enc_version =3D UBWC_3_0, + .ubwc_dec_version =3D UBWC_3_0, + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sc8280xp_data =3D { + .ubwc_enc_version =3D UBWC_4_0, + .ubwc_dec_version =3D UBWC_4_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sdm670_data =3D { + .ubwc_enc_version =3D UBWC_2_0, + .ubwc_dec_version =3D UBWC_2_0, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sdm845_data =3D { + .ubwc_enc_version =3D UBWC_2_0, + .ubwc_dec_version =3D UBWC_2_0, + .highest_bank_bit =3D 15, +}; + +static const struct qcom_ubwc_cfg_data sm6115_data =3D { + .ubwc_enc_version =3D UBWC_1_0, + .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D 7, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sm6125_data =3D { + .ubwc_enc_version =3D UBWC_1_0, + .ubwc_dec_version =3D UBWC_3_0, + .ubwc_swizzle =3D 1, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sm6150_data =3D { + .ubwc_enc_version =3D UBWC_2_0, + .ubwc_dec_version =3D UBWC_2_0, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sm6350_data =3D { + .ubwc_enc_version =3D UBWC_2_0, + .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sm7150_data =3D { + .ubwc_enc_version =3D UBWC_2_0, + .ubwc_dec_version =3D UBWC_2_0, + .highest_bank_bit =3D 14, +}; + +static const struct qcom_ubwc_cfg_data sm8150_data =3D { + .ubwc_enc_version =3D UBWC_3_0, + .ubwc_dec_version =3D UBWC_3_0, + .highest_bank_bit =3D 15, +}; + +static const struct qcom_ubwc_cfg_data sm8250_data =3D { + .ubwc_enc_version =3D UBWC_4_0, + .ubwc_dec_version =3D UBWC_4_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sm8350_data =3D { + .ubwc_enc_version =3D UBWC_4_0, + .ubwc_dec_version =3D UBWC_4_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sm8550_data =3D { + .ubwc_enc_version =3D UBWC_4_0, + .ubwc_dec_version =3D UBWC_4_3, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data sm8750_data =3D { + .ubwc_enc_version =3D UBWC_5_0, + .ubwc_dec_version =3D UBWC_5_0, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct qcom_ubwc_cfg_data x1e80100_data =3D { + .ubwc_enc_version =3D UBWC_4_0, + .ubwc_dec_version =3D UBWC_4_3, + .ubwc_swizzle =3D 6, + .ubwc_bank_spread =3D true, + /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ + .highest_bank_bit =3D 16, + .macrotile_mode =3D true, +}; + +static const struct of_device_id qcom_ubwc_configs[] __maybe_unused =3D { + { .compatible =3D "qcom,apq8096", .data =3D &msm8998_data }, + { .compatible =3D "qcom,msm8917", .data =3D &msm8937_data }, + { .compatible =3D "qcom,msm8937", .data =3D &msm8937_data }, + { .compatible =3D "qcom,msm8953", .data =3D &msm8937_data }, + { .compatible =3D "qcom,msm8956", .data =3D &msm8937_data }, + { .compatible =3D "qcom,msm8976", .data =3D &msm8937_data }, + { .compatible =3D "qcom,msm8996", .data =3D &msm8998_data }, + { .compatible =3D "qcom,msm8998", .data =3D &msm8998_data }, + { .compatible =3D "qcom,qcm2290", .data =3D &qcm2290_data, }, + { .compatible =3D "qcom,qcm6490", .data =3D &sc7280_data, }, + { .compatible =3D "qcom,sa8155p", .data =3D &sm8150_data, }, + { .compatible =3D "qcom,sa8540p", .data =3D &sc8280xp_data, }, + { .compatible =3D "qcom,sa8775p", .data =3D &sa8775p_data, }, + { .compatible =3D "qcom,sar2130p", .data =3D &sar2130p_data }, + { .compatible =3D "qcom,sc7180", .data =3D &sc7180_data }, + { .compatible =3D "qcom,sc7280", .data =3D &sc7280_data, }, + { .compatible =3D "qcom,sc8180x", .data =3D &sc8180x_data, }, + { .compatible =3D "qcom,sc8280xp", .data =3D &sc8280xp_data, }, + { .compatible =3D "qcom,sdm630", .data =3D &msm8937_data }, + { .compatible =3D "qcom,sdm636", .data =3D &msm8937_data }, + { .compatible =3D "qcom,sdm660", .data =3D &msm8937_data }, + { .compatible =3D "qcom,sdm670", .data =3D &sdm670_data, }, + { .compatible =3D "qcom,sdm845", .data =3D &sdm845_data, }, + { .compatible =3D "qcom,sm4250", .data =3D &sm6115_data, }, + { .compatible =3D "qcom,sm6115", .data =3D &sm6115_data, }, + { .compatible =3D "qcom,sm6125", .data =3D &sm6125_data, }, + { .compatible =3D "qcom,sm6150", .data =3D &sm6150_data, }, + { .compatible =3D "qcom,sm6350", .data =3D &sm6350_data, }, + { .compatible =3D "qcom,sm6375", .data =3D &sm6350_data, }, + { .compatible =3D "qcom,sm7125", .data =3D &sc7180_data }, + { .compatible =3D "qcom,sm7150", .data =3D &sm7150_data, }, + { .compatible =3D "qcom,sm8150", .data =3D &sm8150_data, }, + { .compatible =3D "qcom,sm8250", .data =3D &sm8250_data, }, + { .compatible =3D "qcom,sm8350", .data =3D &sm8350_data, }, + { .compatible =3D "qcom,sm8450", .data =3D &sm8350_data, }, + { .compatible =3D "qcom,sm8550", .data =3D &sm8550_data, }, + { .compatible =3D "qcom,sm8650", .data =3D &sm8550_data, }, + { .compatible =3D "qcom,sm8750", .data =3D &sm8750_data, }, + { .compatible =3D "qcom,x1e80100", .data =3D &x1e80100_data, }, + { .compatible =3D "qcom,x1p42100", .data =3D &x1e80100_data, }, + { } +}; + +const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void) +{ + const struct of_device_id *match; + struct device_node *root; + + root =3D of_find_node_by_path("/"); + if (!root) + return ERR_PTR(-ENODEV); + + match =3D of_match_node(qcom_ubwc_configs, root); + of_node_put(root); + if (!match) { + pr_err("Couldn't find UBWC config data for this platform!\n"); + return ERR_PTR(-EINVAL); + } + + return match->data; +} +EXPORT_SYMBOL_GPL(qcom_ubwc_config_get_data); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("UBWC config database for QTI SoCs"); diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h new file mode 100644 index 0000000000000000000000000000000000000000..b92fc402638bae85e4e9da2552b= e56ac9ea9b448 --- /dev/null +++ b/include/linux/soc/qcom/ubwc.h @@ -0,0 +1,65 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2018, The Linux Foundation + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ + +#ifndef __QCOM_UBWC_H__ +#define __QCOM_UBWC_H__ + +#include +#include + +struct qcom_ubwc_cfg_data { + u32 ubwc_enc_version; + /* Can be read from MDSS_BASE + 0x58 */ + u32 ubwc_dec_version; + + /** + * @ubwc_swizzle: Whether to enable level 1, 2 & 3 bank swizzling. + * + * UBWC 1.0 always enables all three levels. + * UBWC 2.0 removes level 1 bank swizzling, leaving levels 2 & 3. + * UBWC 4.0 adds the optional ability to disable levels 2 & 3. + * + * This is a bitmask where BIT(0) enables level 1, BIT(1) + * controls level 2, and BIT(2) enables level 3. + */ + u32 ubwc_swizzle; + + /** + * @highest_bank_bit: Highest Bank Bit + * + * The Highest Bank Bit value represents the bit of the highest + * DDR bank. This should ideally use DRAM type detection. + */ + int highest_bank_bit; + bool ubwc_bank_spread; + + /** + * @macrotile_mode: Macrotile Mode + * + * Whether to use 4-channel macrotiling mode or the newer + * 8-channel macrotiling mode introduced in UBWC 3.1. 0 is + * 4-channel and 1 is 8-channel. + */ + bool macrotile_mode; +}; + +#define UBWC_1_0 0x10000000 +#define UBWC_2_0 0x20000000 +#define UBWC_3_0 0x30000000 +#define UBWC_4_0 0x40000000 +#define UBWC_4_3 0x40030000 +#define UBWC_5_0 0x50000000 + +#ifdef CONFIG_QCOM_UBWC_CONFIG +const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void); +#else +static inline const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(v= oid) +{ + return ERR_PTR(-EOPNOTSUPP); +} +#endif + +#endif /* __QCOM_UBWC_H__ */ --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE91029A9C9; Thu, 26 Jun 2025 09:02:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928572; cv=none; b=WNKNVfBszzPxwCxF8drEDu5OcJ7CjevkSMHsojYUkiVemIsktVbZ/AsVZGVtHlIRnI5JEOaiHTbMgC24Mw3KRn1ZSKCG03edug7Sf6ZDJrPP26U8ds4LW5wJQJ0iqTSWDsAMaICQNor2P7FaCks9tgQ/RKIaGSt7ErTwZDwQhS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928572; c=relaxed/simple; bh=bFXCEdgVhfDMEoqkGoje5SoT0Fo4NnjqAhltzIwdUUA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZZbp/ntqsPorjKY7g8i/3aOZmo4qzvHNRLtlk+iqoU9zkS7pX3tPjC9YHB2evNbb2s5MQQFy/QD9muMA2hYrG1DO+0bgPqZ60a+qM6tPnyx00LXYdwpjTDkJlCG3iEkKXBDOdOIlll+e62p5tj0NECVHp7+OMBKF0eKCi1njxdg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U0frcUA0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U0frcUA0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5691BC4CEEE; Thu, 26 Jun 2025 09:02:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928571; bh=bFXCEdgVhfDMEoqkGoje5SoT0Fo4NnjqAhltzIwdUUA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=U0frcUA0/5J6PBaZsCVx8i3uKX9ky5+9EXFFIAPzElf5i84EuXx5faJazRD5E07D4 H5J0ED6dZqa0bvXvy6jN2cDPOb4OeDiUmwG9c8oHQfpFZ7XYHdLGGlTpykbzK5Sh3l K9QA3mxTVVgcGAuRRpw4i7u6vJHkotGqWelpBpkOISUOjdUiL6SV3jQhI/KgByBYo6 2tH/cfxyYQ3f3JFZM5EZOk8v/tzxpGxxJ3ue3/Oep33d3k2hKsckQtTbK139vl2dAH NmrDiWCZ5jCbNMkXIRd4c6qAG2X8U9mY2hSUbbxO/+sY8jl998CoTwWmZ7sb4iFMht cKil8EaAbENPw== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:29 +0200 Subject: [PATCH v6 02/14] drm/msm: Offset MDSS HBB value by 13 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-2-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=7622; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=T2FBWroU738HI/Pia2RKVHq+4tLpLcX1tOA/9NV0Bxg=; b=IbtpEYDza2VEUMsSSh32LeZsILALILvATY3Y3sZLr4Y3NCXHxAteFTL0+7p+eBc2Ss2QSI5vz zv05bQQE2fnDSuGWPGtMdDhtN3f71+NjoWFRECboMFk8uYMg+DfSl72 X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio The Adreno part of the driver exposes this value to userspace, and the SMEM data source also presents a x+13 value. Keep things coherent and make the value uniform across them. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/msm_mdss.c | 52 +++++++++++++++++++++-----------------= ---- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c index 422da5ebf802676afbfc5f242a5a84e6d488dda1..597c8e64985316763d7ced763c4= c6fdb5da9fb90 100644 --- a/drivers/gpu/drm/msm/msm_mdss.c +++ b/drivers/gpu/drm/msm/msm_mdss.c @@ -167,7 +167,7 @@ static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss = *msm_mdss) { const struct msm_mdss_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | - MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); =20 if (data->ubwc_bank_spread) value |=3D MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; @@ -182,7 +182,7 @@ static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss = *msm_mdss) { const struct msm_mdss_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle & 0x1) | - MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); =20 if (data->macrotile_mode) value |=3D MDSS_UBWC_STATIC_MACROTILE_MODE; @@ -200,7 +200,7 @@ static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss = *msm_mdss) { const struct msm_mdss_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | - MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); =20 if (data->ubwc_bank_spread) value |=3D MDSS_UBWC_STATIC_UBWC_BANK_SPREAD; @@ -277,9 +277,9 @@ static const struct msm_mdss_data *msm_mdss_generate_md= p5_mdss_data(struct msm_m =20 if (hw_rev =3D=3D MDSS_HW_MSM8996 || hw_rev =3D=3D MDSS_HW_MSM8998) - data->highest_bank_bit =3D 2; + data->highest_bank_bit =3D 15; else - data->highest_bank_bit =3D 1; + data->highest_bank_bit =3D 14; =20 return data; } @@ -593,13 +593,13 @@ static void mdss_remove(struct platform_device *pdev) static const struct msm_mdss_data msm8998_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_1_0, - .highest_bank_bit =3D 2, + .highest_bank_bit =3D 15, .reg_bus_bw =3D 76800, }; =20 static const struct msm_mdss_data qcm2290_data =3D { /* no UBWC */ - .highest_bank_bit =3D 0x2, + .highest_bank_bit =3D 15, .reg_bus_bw =3D 76800, }; =20 @@ -608,7 +608,7 @@ static const struct msm_mdss_data sa8775p_data =3D { .ubwc_dec_version =3D UBWC_4_0, .ubwc_swizzle =3D 4, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 0, + .highest_bank_bit =3D 13, .macrotile_mode =3D true, .reg_bus_bw =3D 74000, }; @@ -618,7 +618,7 @@ static const struct msm_mdss_data sar2130p_data =3D { .ubwc_dec_version =3D UBWC_4_3, .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 0, + .highest_bank_bit =3D 13, .macrotile_mode =3D 1, .reg_bus_bw =3D 74000, }; @@ -628,7 +628,7 @@ static const struct msm_mdss_data sc7180_data =3D { .ubwc_dec_version =3D UBWC_2_0, .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 0x1, + .highest_bank_bit =3D 14, .reg_bus_bw =3D 76800, }; =20 @@ -637,7 +637,7 @@ static const struct msm_mdss_data sc7280_data =3D { .ubwc_dec_version =3D UBWC_4_0, .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 1, + .highest_bank_bit =3D 14, .macrotile_mode =3D true, .reg_bus_bw =3D 74000, }; @@ -645,7 +645,7 @@ static const struct msm_mdss_data sc7280_data =3D { static const struct msm_mdss_data sc8180x_data =3D { .ubwc_enc_version =3D UBWC_3_0, .ubwc_dec_version =3D UBWC_3_0, - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, .reg_bus_bw =3D 76800, }; @@ -655,7 +655,7 @@ static const struct msm_mdss_data sc8280xp_data =3D { .ubwc_dec_version =3D UBWC_4_0, .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, .reg_bus_bw =3D 76800, }; @@ -663,14 +663,14 @@ static const struct msm_mdss_data sc8280xp_data =3D { static const struct msm_mdss_data sdm670_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 1, + .highest_bank_bit =3D 14, .reg_bus_bw =3D 76800, }; =20 static const struct msm_mdss_data sdm845_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 2, + .highest_bank_bit =3D 15, .reg_bus_bw =3D 76800, }; =20 @@ -679,21 +679,21 @@ static const struct msm_mdss_data sm6350_data =3D { .ubwc_dec_version =3D UBWC_2_0, .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 1, + .highest_bank_bit =3D 14, .reg_bus_bw =3D 76800, }; =20 static const struct msm_mdss_data sm7150_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 1, + .highest_bank_bit =3D 14, .reg_bus_bw =3D 76800, }; =20 static const struct msm_mdss_data sm8150_data =3D { .ubwc_enc_version =3D UBWC_3_0, .ubwc_dec_version =3D UBWC_3_0, - .highest_bank_bit =3D 2, + .highest_bank_bit =3D 15, .reg_bus_bw =3D 76800, }; =20 @@ -702,7 +702,7 @@ static const struct msm_mdss_data sm6115_data =3D { .ubwc_dec_version =3D UBWC_2_0, .ubwc_swizzle =3D 7, .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 0x1, + .highest_bank_bit =3D 14, .reg_bus_bw =3D 76800, }; =20 @@ -710,13 +710,13 @@ static const struct msm_mdss_data sm6125_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_3_0, .ubwc_swizzle =3D 1, - .highest_bank_bit =3D 1, + .highest_bank_bit =3D 14, }; =20 static const struct msm_mdss_data sm6150_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 1, + .highest_bank_bit =3D 14, .reg_bus_bw =3D 76800, }; =20 @@ -726,7 +726,7 @@ static const struct msm_mdss_data sm8250_data =3D { .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, .reg_bus_bw =3D 76800, }; @@ -737,7 +737,7 @@ static const struct msm_mdss_data sm8350_data =3D { .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, .reg_bus_bw =3D 74000, }; @@ -748,7 +748,7 @@ static const struct msm_mdss_data sm8550_data =3D { .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, .reg_bus_bw =3D 57000, }; @@ -759,7 +759,7 @@ static const struct msm_mdss_data sm8750_data =3D { .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, .reg_bus_bw =3D 57000, }; @@ -770,7 +770,7 @@ static const struct msm_mdss_data x1e80100_data =3D { .ubwc_swizzle =3D 6, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 3, + .highest_bank_bit =3D 16, .macrotile_mode =3D true, /* TODO: Add reg_bus_bw with real value */ }; --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45D9829A9C9; Thu, 26 Jun 2025 09:02:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928576; cv=none; b=s+4KQpYbfzjn853lTJJW8ipfYl5dNxPKr44tSBTorSr79ouxJkyipLuygBxw4R/IsdHYsgh7QlMEBnQp+jtR/XIJwFuYjlYH/qU/rZyDf6TkGYj5+V/DZHbqgGt5BxGPIov0Ig6HKUzUVMyDqtiIm3xF9LU6L7tc4fP7ZmBcE5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928576; c=relaxed/simple; bh=tOusHgnylieMYc/yov/nZwdaPr8ceh64o6UxW7T0mZE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZUViqhBjcpIrnRJmmlgyPyEZZkjv3Lk+IKBV8lWG60zWN+CL34ADScNUrXC9LX/AGHVYTe81iUUydcRyv/2VDf+GZ0IC58eJX9xIHNJSZzP7GGGaCOXntZMUeCjwH3fRhK2NR9P0JaOVH77wYcARXA/D1IVbhg92SsbQp4OfKDc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jShox5ID; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jShox5ID" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E463DC4CEEB; Thu, 26 Jun 2025 09:02:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928576; bh=tOusHgnylieMYc/yov/nZwdaPr8ceh64o6UxW7T0mZE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jShox5ID+NwmVM/a1R3YorHn9PU2kvJA0Aa2odlp8itgt4thENxW1BadCGlSsHKVp IdUXs94gShrNLTkbgekCjCS7iC8Od3RKzvz3Le7cGHSGpwrRJYMXgK5tqHigyHAvcY AFRSPisEwjKoC6SvoAOH1rlCWbhhXg4N4j+bfrpiXzJr19+2qhr5Raeh/nY/KVxSGR tEgX3OiCaiX0KeEWQcYJDDH23RH12VQ2hLeMO/46K7hCCqyBa+CHPg7x4YbPRxWWFS D0j+e/m4GL0sBfBq9lpc2k4Gsb2PeMxwLlHwczhFYP2cyAQ2GpYWyGdI1vNHkm5iO/ LnLMvKt7t2uLQ== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:30 +0200 Subject: [PATCH v6 03/14] drm/msm: Use the central UBWC config database Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-3-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=23309; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=EyuFC63nhfrTfyAx+DaEP/hnGb8Uk/R2ywuPhg1z74A=; b=RbJJvaNlYPzBTkQGivT4tT9+pKXSQTRu8t+idi7veG0LYUDItytgUESNqEH7lmKWAPtsih+Bb XlBnYcDdvLGBS4Hcpacmc48vP1eMttz8V/hb8jbg5nPUN7JeL5uwFNF X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio As discussed a lot in the past, the UBWC config must be coherent across a number of IP blocks (currently display and GPU, but it also may/will concern camera/video as the drivers evolve). So far, we've been trying to keep the values reasonable in each of the two drivers separately, but it really make sense to do so centrally, especially given certain fields (e.g. HBB) may need to be gathered dynamically. To reduce room for error, move to fetching the config from a central source, so that the data programmed into the hardware is consistent across all multimedia blocks that request it. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/Kconfig | 1 + drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 6 +- drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h | 4 +- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 7 +- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 3 +- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 2 +- drivers/gpu/drm/msm/msm_mdss.c | 338 +++++-------------------= ---- drivers/gpu/drm/msm/msm_mdss.h | 29 --- include/linux/soc/qcom/ubwc.h | 2 +- 11 files changed, 74 insertions(+), 322 deletions(-) diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig index 7f127e2ae44292f8f5c7ff6a9251c3d7ec8c9f58..aa317677b6a8960406635fda058= a6b7d76256a51 100644 --- a/drivers/gpu/drm/msm/Kconfig +++ b/drivers/gpu/drm/msm/Kconfig @@ -30,6 +30,7 @@ config DRM_MSM select SHMEM select TMPFS select QCOM_SCM + select QCOM_UBWC_CONFIG select WANT_DEV_COREDUMP select SND_SOC_HDMI_CODEC if SND_SOC select SYNC_FILE diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_sspp.c index 7dfd0e0a779535e1f6b003f48188bc90d29d6853..6f1fc790ad6d815ed8a2c9936a4= 0d6e6a0b413a0 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c @@ -10,11 +10,11 @@ #include "dpu_hw_sspp.h" #include "dpu_kms.h" =20 -#include "msm_mdss.h" - #include #include =20 +#include + #define DPU_FETCH_CONFIG_RESET_VALUE 0x00000087 =20 /* SSPP registers */ @@ -684,7 +684,7 @@ int _dpu_hw_sspp_init_debugfs(struct dpu_hw_sspp *hw_pi= pe, struct dpu_kms *kms, struct dpu_hw_sspp *dpu_hw_sspp_init(struct drm_device *dev, const struct dpu_sspp_cfg *cfg, void __iomem *addr, - const struct msm_mdss_data *mdss_data, + const struct qcom_ubwc_cfg_data *mdss_data, const struct dpu_mdss_version *mdss_rev) { struct dpu_hw_sspp *hw_pipe; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h b/drivers/gpu/drm/= msm/disp/dpu1/dpu_hw_sspp.h index ed90e78d178a497ae7e2dc12b09a37c8a3f79621..bdac5c04bf7901b864d5999fb39= 5aa5c90de82f5 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.h @@ -308,7 +308,7 @@ struct dpu_hw_sspp_ops { struct dpu_hw_sspp { struct dpu_hw_blk base; struct dpu_hw_blk_reg_map hw; - const struct msm_mdss_data *ubwc; + const struct qcom_ubwc_cfg_data *ubwc; =20 /* Pipe */ enum dpu_sspp idx; @@ -325,7 +325,7 @@ struct dpu_kms; struct dpu_hw_sspp *dpu_hw_sspp_init(struct drm_device *dev, const struct dpu_sspp_cfg *cfg, void __iomem *addr, - const struct msm_mdss_data *mdss_data, + const struct qcom_ubwc_cfg_data *mdss_data, const struct dpu_mdss_version *mdss_rev); =20 int _dpu_hw_sspp_init_debugfs(struct dpu_hw_sspp *hw_pipe, struct dpu_kms = *kms, diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index df9d6a509bcd453978bc2491795a6ef87cc95638..226da68d9a9b26f798b8e6795f2= 994e971b80505 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -20,9 +20,10 @@ #include #include =20 +#include + #include "msm_drv.h" #include "msm_mmu.h" -#include "msm_mdss.h" #include "msm_gem.h" #include "disp/msm_disp_snapshot.h" =20 @@ -1189,10 +1190,10 @@ static int dpu_kms_hw_init(struct msm_kms *kms) goto err_pm_put; } =20 - dpu_kms->mdss =3D msm_mdss_get_mdss_data(dpu_kms->pdev->dev.parent); + dpu_kms->mdss =3D qcom_ubwc_config_get_data(); if (IS_ERR(dpu_kms->mdss)) { rc =3D PTR_ERR(dpu_kms->mdss); - DPU_ERROR("failed to get MDSS data: %d\n", rc); + DPU_ERROR("failed to get UBWC config data: %d\n", rc); goto err_pm_put; } =20 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.h index a57ec2ec106083e8f93578e4307e8b13ae549c08..993cf512f8c509ac4e28a60a1a3= 1b262f4a54f98 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h @@ -60,7 +60,7 @@ struct dpu_kms { struct msm_kms base; struct drm_device *dev; const struct dpu_mdss_cfg *catalog; - const struct msm_mdss_data *mdss; + const struct qcom_ubwc_cfg_data *mdss; =20 /* io/register spaces: */ void __iomem *mmio, *vbif[VBIF_MAX]; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/ms= m/disp/dpu1/dpu_plane.c index 421138bc3cb779c45fcfd5319056f0d31c862452..ba5a46c5c1b501d22c6b28dd82a= c761c26d08541 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c @@ -17,8 +17,9 @@ #include #include =20 +#include + #include "msm_drv.h" -#include "msm_mdss.h" #include "dpu_kms.h" #include "dpu_hw_sspp.h" #include "dpu_hw_util.h" diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.c index a2219c4f55a45db894ff18c1fd0a810c1a3cf811..25382120cb1a4f2b68b0c657337= 1f75fb8d489ea 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -40,7 +40,7 @@ static inline bool reserved_by_other(uint32_t *res_map, i= nt idx, int dpu_rm_init(struct drm_device *dev, struct dpu_rm *rm, const struct dpu_mdss_cfg *cat, - const struct msm_mdss_data *mdss_data, + const struct qcom_ubwc_cfg_data *mdss_data, void __iomem *mmio) { int rc, i; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h b/drivers/gpu/drm/msm/d= isp/dpu1/dpu_rm.h index aa62966056d489d9c94c61f24051a2f3e7b7ed89..ccd64404f12d3ca3956c8e6df7d= 1ffddd4f20642 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h @@ -69,7 +69,7 @@ struct msm_display_topology { int dpu_rm_init(struct drm_device *dev, struct dpu_rm *rm, const struct dpu_mdss_cfg *cat, - const struct msm_mdss_data *mdss_data, + const struct qcom_ubwc_cfg_data *mdss_data, void __iomem *mmio); =20 int dpu_rm_reserve(struct dpu_rm *rm, diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c index 597c8e64985316763d7ced763c4c6fdb5da9fb90..1f5fe7811e016909282087176a4= 2a2349b21c9c4 100644 --- a/drivers/gpu/drm/msm/msm_mdss.c +++ b/drivers/gpu/drm/msm/msm_mdss.c @@ -16,14 +16,17 @@ #include #include =20 -#include "msm_mdss.h" +#include + #include "msm_kms.h" =20 #include =20 #define MIN_IB_BW 400000000UL /* Min ib vote 400MB */ =20 -#define DEFAULT_REG_BW 153600 /* Used in mdss fbdev driver */ +struct msm_mdss_data { + u32 reg_bus_bw; +}; =20 struct msm_mdss { struct device *dev; @@ -36,7 +39,8 @@ struct msm_mdss { unsigned long enabled_mask; struct irq_domain *domain; } irq_controller; - const struct msm_mdss_data *mdss_data; + const struct qcom_ubwc_cfg_data *mdss_data; + u32 reg_bus_bw; struct icc_path *mdp_path[2]; u32 num_mdp_paths; struct icc_path *reg_bus_path; @@ -165,7 +169,7 @@ static int _msm_mdss_irq_domain_add(struct msm_mdss *ms= m_mdss) =20 static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss *msm_mdss) { - const struct msm_mdss_data *data =3D msm_mdss->mdss_data; + const struct qcom_ubwc_cfg_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); =20 @@ -180,7 +184,7 @@ static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss = *msm_mdss) =20 static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss *msm_mdss) { - const struct msm_mdss_data *data =3D msm_mdss->mdss_data; + const struct qcom_ubwc_cfg_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle & 0x1) | MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); =20 @@ -198,7 +202,7 @@ static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss = *msm_mdss) =20 static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss) { - const struct msm_mdss_data *data =3D msm_mdss->mdss_data; + const struct qcom_ubwc_cfg_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit - 13); =20 @@ -224,7 +228,7 @@ static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss = *msm_mdss) =20 static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss) { - const struct msm_mdss_data *data =3D msm_mdss->mdss_data; + const struct qcom_ubwc_cfg_data *data =3D msm_mdss->mdss_data; u32 value =3D MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) | MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit); =20 @@ -240,69 +244,6 @@ static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss= *msm_mdss) writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE); } =20 -#define MDSS_HW_MAJ_MIN \ - (MDSS_HW_VERSION_MAJOR__MASK | MDSS_HW_VERSION_MINOR__MASK) - -#define MDSS_HW_MSM8996 0x1007 -#define MDSS_HW_MSM8937 0x100e -#define MDSS_HW_MSM8953 0x1010 -#define MDSS_HW_MSM8998 0x3000 -#define MDSS_HW_SDM660 0x3002 -#define MDSS_HW_SDM630 0x3003 - -/* - * MDP5 platforms use generic qcom,mdp5 compat string, so we have to gener= ate this data - */ -static const struct msm_mdss_data *msm_mdss_generate_mdp5_mdss_data(struct= msm_mdss *mdss) -{ - struct msm_mdss_data *data; - u32 hw_rev; - - data =3D devm_kzalloc(mdss->dev, sizeof(*data), GFP_KERNEL); - if (!data) - return NULL; - - hw_rev =3D readl_relaxed(mdss->mmio + REG_MDSS_HW_VERSION); - hw_rev =3D FIELD_GET(MDSS_HW_MAJ_MIN, hw_rev); - - if (hw_rev =3D=3D MDSS_HW_MSM8996 || - hw_rev =3D=3D MDSS_HW_MSM8937 || - hw_rev =3D=3D MDSS_HW_MSM8953 || - hw_rev =3D=3D MDSS_HW_MSM8998 || - hw_rev =3D=3D MDSS_HW_SDM660 || - hw_rev =3D=3D MDSS_HW_SDM630) { - data->ubwc_dec_version =3D UBWC_1_0; - data->ubwc_enc_version =3D UBWC_1_0; - } - - if (hw_rev =3D=3D MDSS_HW_MSM8996 || - hw_rev =3D=3D MDSS_HW_MSM8998) - data->highest_bank_bit =3D 15; - else - data->highest_bank_bit =3D 14; - - return data; -} - -const struct msm_mdss_data *msm_mdss_get_mdss_data(struct device *dev) -{ - struct msm_mdss *mdss; - - if (!dev) - return ERR_PTR(-EINVAL); - - mdss =3D dev_get_drvdata(dev); - - /* - * We could not do it at the probe time, since hw revision register was - * not readable. Fill data structure now for the MDP5 platforms. - */ - if (!mdss->mdss_data && mdss->is_mdp5) - mdss->mdss_data =3D msm_mdss_generate_mdp5_mdss_data(mdss); - - return mdss->mdss_data; -} - static int msm_mdss_enable(struct msm_mdss *msm_mdss) { int ret, i; @@ -315,12 +256,8 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss) for (i =3D 0; i < msm_mdss->num_mdp_paths; i++) icc_set_bw(msm_mdss->mdp_path[i], 0, Bps_to_icc(MIN_IB_BW)); =20 - if (msm_mdss->mdss_data && msm_mdss->mdss_data->reg_bus_bw) - icc_set_bw(msm_mdss->reg_bus_path, 0, - msm_mdss->mdss_data->reg_bus_bw); - else - icc_set_bw(msm_mdss->reg_bus_path, 0, - DEFAULT_REG_BW); + icc_set_bw(msm_mdss->reg_bus_path, 0, + msm_mdss->reg_bus_bw); =20 ret =3D clk_bulk_prepare_enable(msm_mdss->num_clocks, msm_mdss->clocks); if (ret) { @@ -459,6 +396,7 @@ static int mdp5_mdss_parse_clock(struct platform_device= *pdev, struct clk_bulk_d =20 static struct msm_mdss *msm_mdss_init(struct platform_device *pdev, bool i= s_mdp5) { + const struct msm_mdss_data *mdss_data; struct msm_mdss *msm_mdss; int ret; int irq; @@ -471,7 +409,15 @@ static struct msm_mdss *msm_mdss_init(struct platform_= device *pdev, bool is_mdp5 if (!msm_mdss) return ERR_PTR(-ENOMEM); =20 - msm_mdss->mdss_data =3D of_device_get_match_data(&pdev->dev); + msm_mdss->mdss_data =3D qcom_ubwc_config_get_data(); + if (IS_ERR(msm_mdss->mdss_data)) + return ERR_CAST(msm_mdss->mdss_data); + + mdss_data =3D of_device_get_match_data(&pdev->dev); + if (!mdss_data) + return ERR_PTR(-EINVAL); + + msm_mdss->reg_bus_bw =3D mdss_data->reg_bus_bw; =20 msm_mdss->mmio =3D devm_platform_ioremap_resource_byname(pdev, is_mdp5 ? = "mdss_phys" : "mdss"); if (IS_ERR(msm_mdss->mmio)) @@ -590,217 +536,49 @@ static void mdss_remove(struct platform_device *pdev) msm_mdss_destroy(mdss); } =20 -static const struct msm_mdss_data msm8998_data =3D { - .ubwc_enc_version =3D UBWC_1_0, - .ubwc_dec_version =3D UBWC_1_0, - .highest_bank_bit =3D 15, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data qcm2290_data =3D { - /* no UBWC */ - .highest_bank_bit =3D 15, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sa8775p_data =3D { - .ubwc_enc_version =3D UBWC_4_0, - .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 4, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 13, - .macrotile_mode =3D true, - .reg_bus_bw =3D 74000, -}; - -static const struct msm_mdss_data sar2130p_data =3D { - .ubwc_enc_version =3D UBWC_3_0, /* 4.0.2 in hw */ - .ubwc_dec_version =3D UBWC_4_3, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 13, - .macrotile_mode =3D 1, - .reg_bus_bw =3D 74000, -}; - -static const struct msm_mdss_data sc7180_data =3D { - .ubwc_enc_version =3D UBWC_2_0, - .ubwc_dec_version =3D UBWC_2_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 14, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sc7280_data =3D { - .ubwc_enc_version =3D UBWC_3_0, - .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 14, - .macrotile_mode =3D true, - .reg_bus_bw =3D 74000, -}; - -static const struct msm_mdss_data sc8180x_data =3D { - .ubwc_enc_version =3D UBWC_3_0, - .ubwc_dec_version =3D UBWC_3_0, - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sc8280xp_data =3D { - .ubwc_enc_version =3D UBWC_4_0, - .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sdm670_data =3D { - .ubwc_enc_version =3D UBWC_2_0, - .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 14, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sdm845_data =3D { - .ubwc_enc_version =3D UBWC_2_0, - .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 15, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm6350_data =3D { - .ubwc_enc_version =3D UBWC_2_0, - .ubwc_dec_version =3D UBWC_2_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 14, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm7150_data =3D { - .ubwc_enc_version =3D UBWC_2_0, - .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 14, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm8150_data =3D { - .ubwc_enc_version =3D UBWC_3_0, - .ubwc_dec_version =3D UBWC_3_0, - .highest_bank_bit =3D 15, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm6115_data =3D { - .ubwc_enc_version =3D UBWC_1_0, - .ubwc_dec_version =3D UBWC_2_0, - .ubwc_swizzle =3D 7, - .ubwc_bank_spread =3D true, - .highest_bank_bit =3D 14, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm6125_data =3D { - .ubwc_enc_version =3D UBWC_1_0, - .ubwc_dec_version =3D UBWC_3_0, - .ubwc_swizzle =3D 1, - .highest_bank_bit =3D 14, -}; - -static const struct msm_mdss_data sm6150_data =3D { - .ubwc_enc_version =3D UBWC_2_0, - .ubwc_dec_version =3D UBWC_2_0, - .highest_bank_bit =3D 14, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm8250_data =3D { - .ubwc_enc_version =3D UBWC_4_0, - .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, - .reg_bus_bw =3D 76800, -}; - -static const struct msm_mdss_data sm8350_data =3D { - .ubwc_enc_version =3D UBWC_4_0, - .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, - .reg_bus_bw =3D 74000, -}; - -static const struct msm_mdss_data sm8550_data =3D { - .ubwc_enc_version =3D UBWC_4_0, - .ubwc_dec_version =3D UBWC_4_3, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, +static const struct msm_mdss_data data_57k =3D { .reg_bus_bw =3D 57000, }; =20 -static const struct msm_mdss_data sm8750_data =3D { - .ubwc_enc_version =3D UBWC_5_0, - .ubwc_dec_version =3D UBWC_5_0, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, - .reg_bus_bw =3D 57000, +static const struct msm_mdss_data data_74k =3D { + .reg_bus_bw =3D 74000, }; =20 -static const struct msm_mdss_data x1e80100_data =3D { - .ubwc_enc_version =3D UBWC_4_0, - .ubwc_dec_version =3D UBWC_4_3, - .ubwc_swizzle =3D 6, - .ubwc_bank_spread =3D true, - /* TODO: highest_bank_bit =3D 2 for LP_DDR4 */ - .highest_bank_bit =3D 16, - .macrotile_mode =3D true, - /* TODO: Add reg_bus_bw with real value */ +static const struct msm_mdss_data data_76k8 =3D { + .reg_bus_bw =3D 76800, +}; + +static const struct msm_mdss_data data_153k6 =3D { + .reg_bus_bw =3D 153600, }; =20 static const struct of_device_id mdss_dt_match[] =3D { - { .compatible =3D "qcom,mdss" }, - { .compatible =3D "qcom,msm8998-mdss", .data =3D &msm8998_data }, - { .compatible =3D "qcom,qcm2290-mdss", .data =3D &qcm2290_data }, - { .compatible =3D "qcom,sa8775p-mdss", .data =3D &sa8775p_data }, - { .compatible =3D "qcom,sar2130p-mdss", .data =3D &sar2130p_data }, - { .compatible =3D "qcom,sdm670-mdss", .data =3D &sdm670_data }, - { .compatible =3D "qcom,sdm845-mdss", .data =3D &sdm845_data }, - { .compatible =3D "qcom,sc7180-mdss", .data =3D &sc7180_data }, - { .compatible =3D "qcom,sc7280-mdss", .data =3D &sc7280_data }, - { .compatible =3D "qcom,sc8180x-mdss", .data =3D &sc8180x_data }, - { .compatible =3D "qcom,sc8280xp-mdss", .data =3D &sc8280xp_data }, - { .compatible =3D "qcom,sm6115-mdss", .data =3D &sm6115_data }, - { .compatible =3D "qcom,sm6125-mdss", .data =3D &sm6125_data }, - { .compatible =3D "qcom,sm6150-mdss", .data =3D &sm6150_data }, - { .compatible =3D "qcom,sm6350-mdss", .data =3D &sm6350_data }, - { .compatible =3D "qcom,sm6375-mdss", .data =3D &sm6350_data }, - { .compatible =3D "qcom,sm7150-mdss", .data =3D &sm7150_data }, - { .compatible =3D "qcom,sm8150-mdss", .data =3D &sm8150_data }, - { .compatible =3D "qcom,sm8250-mdss", .data =3D &sm8250_data }, - { .compatible =3D "qcom,sm8350-mdss", .data =3D &sm8350_data }, - { .compatible =3D "qcom,sm8450-mdss", .data =3D &sm8350_data }, - { .compatible =3D "qcom,sm8550-mdss", .data =3D &sm8550_data }, - { .compatible =3D "qcom,sm8650-mdss", .data =3D &sm8550_data}, - { .compatible =3D "qcom,sm8750-mdss", .data =3D &sm8750_data}, - { .compatible =3D "qcom,x1e80100-mdss", .data =3D &x1e80100_data}, + { .compatible =3D "qcom,mdss", .data =3D &data_153k6 }, + { .compatible =3D "qcom,msm8998-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,qcm2290-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sa8775p-mdss", .data =3D &data_74k }, + { .compatible =3D "qcom,sar2130p-mdss", .data =3D &data_74k }, + { .compatible =3D "qcom,sdm670-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sdm845-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sc7180-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sc7280-mdss", .data =3D &data_74k }, + { .compatible =3D "qcom,sc8180x-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sc8280xp-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm6115-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm6125-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm6150-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm6350-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm6375-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm7150-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm8150-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm8250-mdss", .data =3D &data_76k8 }, + { .compatible =3D "qcom,sm8350-mdss", .data =3D &data_74k }, + { .compatible =3D "qcom,sm8450-mdss", .data =3D &data_74k }, + { .compatible =3D "qcom,sm8550-mdss", .data =3D &data_57k }, + { .compatible =3D "qcom,sm8650-mdss", .data =3D &data_57k }, + { .compatible =3D "qcom,sm8750-mdss", .data =3D &data_57k }, + /* TODO: x1e8: Add reg_bus_bw with real value */ + { .compatible =3D "qcom,x1e80100-mdss", .data =3D &data_153k6 }, {} }; MODULE_DEVICE_TABLE(of, mdss_dt_match); diff --git a/drivers/gpu/drm/msm/msm_mdss.h b/drivers/gpu/drm/msm/msm_mdss.h deleted file mode 100644 index dd0160c6ba1a297cea5b87cd8b03895b2aa08213..000000000000000000000000000= 0000000000000 --- a/drivers/gpu/drm/msm/msm_mdss.h +++ /dev/null @@ -1,29 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * Copyright (c) 2018, The Linux Foundation - */ - -#ifndef __MSM_MDSS_H__ -#define __MSM_MDSS_H__ - -struct msm_mdss_data { - u32 ubwc_enc_version; - /* can be read from register 0x58 */ - u32 ubwc_dec_version; - u32 ubwc_swizzle; - u32 highest_bank_bit; - bool ubwc_bank_spread; - bool macrotile_mode; - u32 reg_bus_bw; -}; - -#define UBWC_1_0 0x10000000 -#define UBWC_2_0 0x20000000 -#define UBWC_3_0 0x30000000 -#define UBWC_4_0 0x40000000 -#define UBWC_4_3 0x40030000 -#define UBWC_5_0 0x50000000 - -const struct msm_mdss_data *msm_mdss_get_mdss_data(struct device *dev); - -#endif /* __MSM_MDSS_H__ */ diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h index b92fc402638bae85e4e9da2552be56ac9ea9b448..d65df559603d95e3db5bc04ce42= e00a0b4785828 100644 --- a/include/linux/soc/qcom/ubwc.h +++ b/include/linux/soc/qcom/ubwc.h @@ -53,7 +53,7 @@ struct qcom_ubwc_cfg_data { #define UBWC_4_3 0x40030000 #define UBWC_5_0 0x50000000 =20 -#ifdef CONFIG_QCOM_UBWC_CONFIG +#if IS_ENABLED(CONFIG_QCOM_UBWC_CONFIG) const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void); #else static inline const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(v= oid) --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C1C92BCF6C; Thu, 26 Jun 2025 09:03:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928580; cv=none; b=te1I9FcMwmZyrZVWpUCzPPptGRTqlNfoAmEaHI466X7chhHJAvvp5sDF2E8i0xZYKodK3MKfBp77fQxd8w/jC8rI7+LZeiMRBCy40lDNsaoa01MF5E9ScV23Mww8yO4Q+BXUWowEkoMlIjF1Z4FN7AlSY5Fo39QCmINAszUZ4wE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928580; c=relaxed/simple; bh=Cg+8DupBWLyeRJpjZIdQOmGK3HcqSLv3ER/VUAwzlDQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IstdV9C49ror3sEgV9yQWPfLnI92NBLLdEALCspuGY6tW4HazAPcPfaYYd1uuJbtZpi2O8G0XHBtg2upyoN0gUdhJuY08d+CZqtHi70gug0FN14a4m6eBDP9B7ZO/mo4jH4G4crcyRBBe+R3m5MYVcASbjJJN+Sc8CQT7mJLVmo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OWGHL4Y9; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OWGHL4Y9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98DA9C4CEEB; Thu, 26 Jun 2025 09:02:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928580; bh=Cg+8DupBWLyeRJpjZIdQOmGK3HcqSLv3ER/VUAwzlDQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=OWGHL4Y9Hph+lAXdhVgIi8KQ/BWs5egwyNNUTKinTpdnWR6dOFXbL2mfYlRLzfVUY C9rwmMh5jwRiaA9klVFNQlWr/OttL0U1J+0DUwPf676nmqeaA7gNGEUVjq1igvkiB+ vtgvFnrWGaPDRa5L17+IlWPYtVOKK2MLgkoXen6aCvaso1NDnpRTQ8h+KJoaz06L97 wshpcGzJ4Oz+UZjdsNO8lYDJjpSZe2GfU97jk/rw6EJqzdZrHetR/hG4pkSQhjOO7s d8gP+5hOTuC4tgob+CeKPg56hjhnLrIRm2iMQ8bXn75LfGclLm96b5ibQv33qDSGzG 1PakqZFlfHo8g== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:31 +0200 Subject: [PATCH v6 04/14] drm/msm/a6xx: Get a handle to the common UBWC config Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-4-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=2724; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=3iWBKvs5q5N+qB3FfdC53TcHieKOPEBmf5TENWZJ3pY=; b=Zz3RnThb2v+hw8zbA1XaLBwu+YWPf/Txrf0EdkRBRpvBj7hLbIK4qIdg0ltK53LugLYE7DRNF 3/+8G8xMmO9AOvyHJ8t51V7CjFQEACvNJjUEk8FkqRE7ZbklRBic55f X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio Start the great despaghettification by getting a pointer to the common UBWC configuration, which houses e.g. UBWC versions that we need to make decisions. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 16 ++++++++++++++-- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 3 +++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 491fde0083a202bec7c6b3bca88d0e5a717a6560..6588a47ea0f0635aaf3944215fa= 31befb63f4f57 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -603,8 +603,13 @@ static void a6xx_set_cp_protect(struct msm_gpu *gpu) gpu_write(gpu, REG_A6XX_CP_PROTECT(protect->count_max - 1), protect->regs= [i]); } =20 -static void a6xx_calc_ubwc_config(struct adreno_gpu *gpu) +static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) { + /* Inherit the common config and make some necessary fixups */ + gpu->common_ubwc_cfg =3D qcom_ubwc_config_get_data(); + if (IS_ERR(gpu->common_ubwc_cfg)) + return PTR_ERR(gpu->common_ubwc_cfg); + gpu->ubwc_config.rgb565_predicator =3D 0; gpu->ubwc_config.uavflagprd_inv =3D 0; gpu->ubwc_config.min_acc_len =3D 0; @@ -681,6 +686,8 @@ static void a6xx_calc_ubwc_config(struct adreno_gpu *gp= u) gpu->ubwc_config.highest_bank_bit =3D 14; gpu->ubwc_config.min_acc_len =3D 1; } + + return 0; } =20 static void a6xx_set_ubwc_config(struct msm_gpu *gpu) @@ -2564,7 +2571,12 @@ struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) msm_mmu_set_fault_handler(gpu->aspace->mmu, gpu, a6xx_fault_handler); =20 - a6xx_calc_ubwc_config(adreno_gpu); + ret =3D a6xx_calc_ubwc_config(adreno_gpu); + if (ret) { + a6xx_destroy(&(a6xx_gpu->base.base)); + return ERR_PTR(ret); + } + /* Set up the preemption specific bits and pieces for each ringbuffer */ a6xx_preempt_init(gpu); =20 diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index bc063594a359ee6b796381c5fd2c30e2aa12a26d..a2a211cac147cb5bc5befdcab07= 559b778adc2bb 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -12,6 +12,8 @@ #include #include =20 +#include + #include "msm_gpu.h" =20 #include "adreno_common.xml.h" @@ -243,6 +245,7 @@ struct adreno_gpu { */ u32 macrotile_mode; } ubwc_config; + const struct qcom_ubwc_cfg_data *common_ubwc_cfg; =20 /* * Register offsets are different between some GPUs. --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2217528FA89; Thu, 26 Jun 2025 09:03:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928585; cv=none; b=joTNO9SULlO3xg6TDvmzQWmZaoyx8NA22jwChpSXD+KRs/awzEF144b08YhLyC3izdft4fML/kp3E4jx79ed2gWqhtSALEg12Q94eW/m8pFSsmp6950FD8wr7/54nKWz0x8bkWaoSVf2o/bKiAEgNbJ4I0arwr1ZpFY70Eldxgc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928585; c=relaxed/simple; bh=sRK+Q+xLpf+MdIO7vezUMhN2g5ZN7lwn51lKN+M6MS8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z2fAY9LQ9DkjCe/ZkIUrGZvHiuoO+kVAkepHzJqc53HjLgE7uSE+n2PSB1NXxCQu4dWK50S2UjSPZPn9vDJOvmSeaAU5ubKuGY/25hvRKxx31yFwJPUbhYNBid7FVNv4Kyj20ADqoezHF6WNm+LIUjQAgj3Q/goOXhGq594AHz8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JVfIFPJ9; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JVfIFPJ9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 25BF0C4CEF4; Thu, 26 Jun 2025 09:03:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928585; bh=sRK+Q+xLpf+MdIO7vezUMhN2g5ZN7lwn51lKN+M6MS8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JVfIFPJ9b7B9h4pMHl2ke83vK6/7Dl5Re56VhDLjKcIrLW2l5r86DfdF2tuDMa45y XHSvTL8r8Z7LJk9xYa9NlYJ20RSgTzP3YJCdSorxWImPsOLEmAbir2Sy8je2J28CR6 Cqg8FyPpXHZvDb9g80831XIaxbEktfjDtBxHBx0Vd/Bz7VgeQzN0jzwbk1mB++6jpk FhUleQ78ci80mNsr4mhwLrP6Uni5XlTcfJmyOodyGuPTS/hd2GV9PuBZA5nXTivXUQ V4lCpQ8Dl8FadrLuQZaTCMBR2LHoYn0xCG6c20vpGspopqatt8AKKIIjiFMOEoKDfl o+h+zRF+pJjxA== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:32 +0200 Subject: [PATCH v6 05/14] drm/msm/a6xx: Resolve the meaning of AMSBC Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-5-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=3390; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=trNEux0uXrdD3pVfEZz/8zHX0JaBDg1rN6itkv7P7tM=; b=O64uchfbmn5vBw1ZenCE2gromzXXTnZDcnD2azfqe7hr8fGz3P/KuGP7kwh+JLKnQy0nPKx5m sj0leTD/vC/DsJdJ0nCSKUNo4ofS1KRfvXMdETRKknA4+HLyAjV1xI4 X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio The bit must be set to 1 if the UBWC encoder version is >=3D 3.0, drop it as a separate field. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 6588a47ea0f0635aaf3944215fa31befb63f4f57..d14c84a0a4b14bf7f77375e619a= c6892374bb3c1 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -635,21 +635,16 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *g= pu) =20 if (adreno_is_a621(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.amsbc =3D 1; gpu->ubwc_config.uavflagprd_inv =3D 2; } =20 if (adreno_is_a623(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 16; - gpu->ubwc_config.amsbc =3D 1; gpu->ubwc_config.rgb565_predicator =3D 1; gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; } =20 - if (adreno_is_a640_family(gpu)) - gpu->ubwc_config.amsbc =3D 1; - if (adreno_is_a680(gpu)) gpu->ubwc_config.macrotile_mode =3D 1; =20 @@ -660,7 +655,6 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) adreno_is_a740_family(gpu)) { /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */ gpu->ubwc_config.highest_bank_bit =3D 16; - gpu->ubwc_config.amsbc =3D 1; gpu->ubwc_config.rgb565_predicator =3D 1; gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; @@ -668,7 +662,6 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) =20 if (adreno_is_a663(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.amsbc =3D 1; gpu->ubwc_config.rgb565_predicator =3D 1; gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; @@ -677,7 +670,6 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) =20 if (adreno_is_7c3(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 14; - gpu->ubwc_config.amsbc =3D 1; gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; } @@ -693,6 +685,7 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) static void a6xx_set_ubwc_config(struct msm_gpu *gpu) { struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + const struct qcom_ubwc_cfg_data *cfg =3D adreno_gpu->common_ubwc_cfg; /* * We subtract 13 from the highest bank bit (13 is the minimum value * allowed by hw) and write the lowest two bits of the remaining value @@ -700,6 +693,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) */ BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; + bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; u32 hbb_hi =3D hbb >> 2; u32 hbb_lo =3D hbb & 3; u32 ubwc_mode =3D adreno_gpu->ubwc_config.ubwc_swizzle & 1; @@ -708,7 +702,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) gpu_write(gpu, REG_A6XX_RB_NC_MODE_CNTL, level2_swizzling_dis << 12 | adreno_gpu->ubwc_config.rgb565_predicator << 11 | - hbb_hi << 10 | adreno_gpu->ubwc_config.amsbc << 4 | + hbb_hi << 10 | amsbc << 4 | adreno_gpu->ubwc_config.min_acc_len << 3 | hbb_lo << 1 | ubwc_mode); =20 --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E24F028FA89; Thu, 26 Jun 2025 09:03:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928590; cv=none; b=alOlv6wxH7DvZZjnb2OVavWQdKovQ5oi8moW+rjX0INqnK4fJnZKRNL2w8tQiCws8krR4RJpcsGxIiXjJr4xOUHYLcjVoW/3sdOPxWSdIGmTnmTXj5iZMXcEyg8BRxp3y8YQ+TN8fU58zlIUSQvLs8gR9qXk+wnNcz5ose3Lg9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928590; c=relaxed/simple; bh=3LEQ356tMFYHOFgS0SBmeaGH7W54eTYJS2pkOp0ZCzA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LLR9GV4flHyF0YbKBT0ET0UW7wQg7iIz9Wv6TkYNO4G4ooT3PEbrwRNb6CYTRc8E3Mj5PzpxmdlBB+vw9HAk/BUAyF8KoTTi7hoUaiR1Zxi7qWwmhEmLtAjGH4Mp9LoYuaqBk7WQOcDDLzu7wcKLnuMyFPpAyENVtwSUJdv9StA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Hm/btOqp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Hm/btOqp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 87AAAC4CEEE; Thu, 26 Jun 2025 09:03:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928589; bh=3LEQ356tMFYHOFgS0SBmeaGH7W54eTYJS2pkOp0ZCzA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Hm/btOqpwc5p/l2KL+Wu9rfGN7WiRHcDdErUxvCNkxTg7QoM2ofLqrrLXL89/UcZb 7fGcOV4xmoqBWxNcA9XinK6ukx6I7GLcaS/HojSLY59ufm+TZByzolXJdG2MwVw+X0 L7+vSBTBqwFvdZaItgsNFafEQjWTM11hlPsm/ccu36hUFojQ3XoYO2adzN/uZNuq9u U87p+3ViO5weh4a0soUwEuD2Un8/b0/3ofTOB9tp6TTLVcWLYl7NsvVnkpRG7Xo2P1 Vkp3bwKaXWwztwlJ1ntKUxXdJdIRu3q1VKjiEqV+jw2iqTajhiU3WUkhuFOUocblfQ /lBB1UOomVMDQ== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:33 +0200 Subject: [PATCH v6 06/14] drm/msm/a6xx: Simplify uavflagprd_inv detection Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-6-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=3256; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=OhUr7NYHE/PzMXX00APT+Awea/mVV15VY28VSm+g4dg=; b=BxahdZGDjT8eL08i3f/C8v+lS82g/0WB5eJupu7VTr8UEqjSwXsod9PBK1ukDzNn4FuPmJHG6 MNrfAVQwHWPC4Uhyrpoq6Th4NHV7SuSrTr0bt85RS6c11wJ+hu8A8Cb X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio Instead of setting it on a gpu-per-gpu basis, converge it to the intended "is A650 family or A7xx". Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index d14c84a0a4b14bf7f77375e619ac6892374bb3c1..3d9c98e56d92ed43cf6e702fbd2= b5cbd3293ac5a 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -611,7 +611,6 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) return PTR_ERR(gpu->common_ubwc_cfg); =20 gpu->ubwc_config.rgb565_predicator =3D 0; - gpu->ubwc_config.uavflagprd_inv =3D 0; gpu->ubwc_config.min_acc_len =3D 0; gpu->ubwc_config.ubwc_swizzle =3D 0x6; gpu->ubwc_config.macrotile_mode =3D 0; @@ -633,15 +632,12 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *g= pu) if (adreno_is_a619_holi(gpu)) gpu->ubwc_config.highest_bank_bit =3D 13; =20 - if (adreno_is_a621(gpu)) { + if (adreno_is_a621(gpu)) gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.uavflagprd_inv =3D 2; - } =20 if (adreno_is_a623(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 16; gpu->ubwc_config.rgb565_predicator =3D 1; - gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; } =20 @@ -656,21 +652,18 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *g= pu) /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */ gpu->ubwc_config.highest_bank_bit =3D 16; gpu->ubwc_config.rgb565_predicator =3D 1; - gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; } =20 if (adreno_is_a663(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 13; gpu->ubwc_config.rgb565_predicator =3D 1; - gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; gpu->ubwc_config.ubwc_swizzle =3D 0x4; } =20 if (adreno_is_7c3(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 14; - gpu->ubwc_config.uavflagprd_inv =3D 2; gpu->ubwc_config.macrotile_mode =3D 1; } =20 @@ -694,11 +687,15 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; + u8 uavflagprd_inv =3D 0; u32 hbb_hi =3D hbb >> 2; u32 hbb_lo =3D hbb & 3; u32 ubwc_mode =3D adreno_gpu->ubwc_config.ubwc_swizzle & 1; u32 level2_swizzling_dis =3D !(adreno_gpu->ubwc_config.ubwc_swizzle & 2); =20 + if (adreno_is_a650_family(adreno_gpu) || adreno_is_a7xx(adreno_gpu)) + uavflagprd_inv =3D 2; + gpu_write(gpu, REG_A6XX_RB_NC_MODE_CNTL, level2_swizzling_dis << 12 | adreno_gpu->ubwc_config.rgb565_predicator << 11 | @@ -713,7 +710,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) =20 gpu_write(gpu, REG_A6XX_SP_NC_MODE_CNTL, level2_swizzling_dis << 12 | hbb_hi << 10 | - adreno_gpu->ubwc_config.uavflagprd_inv << 4 | + uavflagprd_inv << 4 | adreno_gpu->ubwc_config.min_acc_len << 3 | hbb_lo << 1 | ubwc_mode); =20 --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7808218AAA; Thu, 26 Jun 2025 09:03:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928594; cv=none; b=brmaENiSQpIeNBpPTjfcbBKXUhgBVX+7es4rnrllFBiY9LAsnd0MuaJtSAPU3RAdzUzVA0ua17BUCr8TZaXoyH8Y3cF53N52VmbcYfszXF0qsDW3f/POded4JlwN47uSDx+6m71Ir8A/5+DLQoHZFlBxpXUVfQnJd4+Kq1TETBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928594; c=relaxed/simple; bh=zWK4yH8Jg26Fl8a2FaolN3BwaKEb7Hpbt65+cv5xnTc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bGyI/JArsmK8q/KgkzY8Pcegm1jKJqZQKnWn08DKpiaojwvdfo7Kh5Xgdw2yX3LCj9r9b9Y2kukvjibI8u9nEwl/WPfQtgiteWJE89C01i3/hUdfrobSH7+J6MkpwzqYj8roBGW+t2CYOW1PxK8sntkf1+/gE3RPTiFpd6SbnVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rfp4XZDA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rfp4XZDA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED5D9C4CEEB; Thu, 26 Jun 2025 09:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928593; bh=zWK4yH8Jg26Fl8a2FaolN3BwaKEb7Hpbt65+cv5xnTc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rfp4XZDAev4o3axcrxUBkVgKistInUOQ9qmFEzMNgIaRBI0XHIwFYuys4VA7URdr4 MQTIparVq+J34JpDHuAO8rIdVaAp7FiE+aWOY6zAKAMsfEPhNrgCdycj8htaMN0w8W NOW4DVk1Uyi3iRKjXjMtx1wLggLKWVrZMEvnjJezkAb0FiLglaQVH/IlMkAshE1wgm BlLxgUQfKSzKWsx3WgfcvKmYnDEKpymybsXyxPRhdVq8X0CUlryyJqdmojmX5XnlXj nuw2PcjEZLl49CwoNOwf1stJe1OTuJeYgCUqws2BQfRu3whXI9iBjeeDD79WVxDLUn CAc7wRWnqY4Sw== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:34 +0200 Subject: [PATCH v6 07/14] drm/msm/a6xx: Resolve the meaning of UBWC_MODE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-7-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=2107; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=V2rm+g2MVUmgPyxRPmjf3RJZQ9C8iyiXb6HR5Sg+OmQ=; b=uCBPPWcA4blauT023rXssRzq5W+UDabZXJbX+SH5R5fChz9DxPAp/uTYFSC+oBPqyEwmGsLSW k89XoL+pgzaD2PNMdV+cBuHEQu7UsFLg2pB+5PLdp+o13mjTNO8VL0v X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio This bit is set iff the UBWC version is 1.0. That notably does not include QCM2290's "no UBWC". This commit is intentionally cross-subsystem to ease review, as the patchset is intended to be merged together, with a maintainer consensus. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- include/linux/soc/qcom/ubwc.h | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 3d9c98e56d92ed43cf6e702fbd2b5cbd3293ac5a..3d345844337608086ffec1998b4= 7b315ada68a97 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -686,11 +686,11 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) */ BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; + bool ubwc_mode =3D qcom_ubwc_get_ubwc_mode(cfg); bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; u8 uavflagprd_inv =3D 0; u32 hbb_hi =3D hbb >> 2; u32 hbb_lo =3D hbb & 3; - u32 ubwc_mode =3D adreno_gpu->ubwc_config.ubwc_swizzle & 1; u32 level2_swizzling_dis =3D !(adreno_gpu->ubwc_config.ubwc_swizzle & 2); =20 if (adreno_is_a650_family(adreno_gpu) || adreno_is_a7xx(adreno_gpu)) diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h index d65df559603d95e3db5bc04ce42e00a0b4785828..f0334f4ece2098ddf290eb18289= 7cd8aa74608b3 100644 --- a/include/linux/soc/qcom/ubwc.h +++ b/include/linux/soc/qcom/ubwc.h @@ -62,4 +62,14 @@ static inline const struct qcom_ubwc_cfg_data *qcom_ubwc= _config_get_data(void) } #endif =20 +static inline bool qcom_ubwc_get_ubwc_mode(const struct qcom_ubwc_cfg_data= *cfg) +{ + bool ret =3D cfg->ubwc_enc_version =3D=3D UBWC_1_0; + + if (ret && !(cfg->ubwc_swizzle & BIT(0))) + pr_err("UBWC config discrepancy - level 1 swizzling disabled on UBWC 1.0= \n"); + + return ret; +} + #endif /* __QCOM_UBWC_H__ */ --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC74029AB13; Thu, 26 Jun 2025 09:03:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928599; cv=none; b=YjwoJmCyRegcWyLIfGYEDaEfImTrxt6Qce1YcGhtqdaAgyDvgJBQSOiEuB6OTdb8WvZsPTnYiOdSfVPIgi9B4O1PfY50RR0U578O/0ugcLE1mLT5XQzM86/UHAvv5FSJfoHR+s6GlkkW8UKM8c54gDLvDnyVvjHXlfIRjqtiaVQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928599; c=relaxed/simple; bh=GH/kR3kom1SR2DzZhLQydzQqd3+Oq3MgLgPaayrkqBA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MTnPAOAtelYHsZwuDqsrvWTavI1Lq5/EdJOvKnIgZGJIZ3bnCElMT5SPowzZ2Noix1Eeigq7KDN2BtDyIqPwulgC63FAyW2w/jCFL9J88gwOJH5bPajHtWtuTnSUpJ58oX4l8oFpnaQBUCu2iysAGrC1cYIKZ0JtND4mzCa4340= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b1nsrPAO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="b1nsrPAO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5886DC4CEEB; Thu, 26 Jun 2025 09:03:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928598; bh=GH/kR3kom1SR2DzZhLQydzQqd3+Oq3MgLgPaayrkqBA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=b1nsrPAOSCTmeNgayHrduwqzmT/KVFvSR/Ii1dc4NjTUTlZlcaR8hHsceZThk3bjW PYLBfniOwJodXPAOQ91/OsOzi+7FtPbq62bqbg0yUgYWwU+UheOwAbV+nroJiRAXwO Lyx67t4PajcYblW6uZEFXyzWIomyYRtegNsfpdCD4EvLx+iGm/8sVzuKK3PKauFVVf eudB0RG/vFjYTInb6j/qPzvcGuQiCT0aI6l9ZqmQ1Cduw8TOo3kNQxXAAC16Y2Etsx pP9Ok8gthw6E9LVKRtkLqqeaG8GQ+YRj+Nh3VgUGfXDxwiMp3CXkjfo+l5nW7veI4j OjGVyCE9R/jvg== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:35 +0200 Subject: [PATCH v6 08/14] drm/msm/a6xx: Replace '2' with BIT(1) in level2_swizzling_dis calc Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-8-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=1212; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=j6D8eqPjFQVMYlE8pITPkljcLo0t+bJ0APdpU9FQnCs=; b=BOfu+52tPJcNiDO+mJs4J8ce+2lXda/W7M0PquCEu8Npolaqn0xFS83OdxYSgyfqC2W2xTLBx cEp1riYtNSaAeJTAgHdtBlbHMYhyxEZQT+m4R4prxowklV5jMEs95Pv X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio ubwc_swizzle is a bitmask. Check for a bit to make it more obvious. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 3d345844337608086ffec1998b47b315ada68a97..78782f94ee678e13baa6eb1a009= a412e13557d59 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -686,12 +686,12 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) */ BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; + u32 level2_swizzling_dis =3D !(cfg->ubwc_swizzle & BIT(1)); bool ubwc_mode =3D qcom_ubwc_get_ubwc_mode(cfg); bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; u8 uavflagprd_inv =3D 0; u32 hbb_hi =3D hbb >> 2; u32 hbb_lo =3D hbb & 3; - u32 level2_swizzling_dis =3D !(adreno_gpu->ubwc_config.ubwc_swizzle & 2); =20 if (adreno_is_a650_family(adreno_gpu) || adreno_is_a7xx(adreno_gpu)) uavflagprd_inv =3D 2; --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E1512BFC62; Thu, 26 Jun 2025 09:03:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928603; cv=none; b=FBBXZXKjVsTTaA1E6MJ9mUWtoptqQvkNh2FxgVIUHxiBYKUgXeWj4DzlKvziJGKlWsMaU23FKxVjtrDZzL6Ctnkyn6mR+X8l6XZKikrvKQ98bsmzhx8+QfkgMqbgqc+v85ZOD1ESXMl82I3mYEhjZpj4XeZRO8PwJg8UJFLMGLE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928603; c=relaxed/simple; bh=Jzp4H5XI2mNdXY7mf+xttkOOu68Xs66xVgu2w4KaY6c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IN3SN2uw6W4KG34SIIGQjq/9QNgBqQpys29k1hU7FgECqpoLnKk2L6SeKOyGhbNPNGO8P5OyMIcVAoQ5IDmlsMTjK3mteryfZnyap8fVsot3/0ONMFhYH55TsIKESRlb6HGqIY4//p2CC9P5vfmvrZTDR7IXrhANQXMJDgVins0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Yr5LUbN0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Yr5LUbN0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED207C4CEEE; Thu, 26 Jun 2025 09:03:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928603; bh=Jzp4H5XI2mNdXY7mf+xttkOOu68Xs66xVgu2w4KaY6c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Yr5LUbN0cGNZAIVmhQukkRNo/OFb0Wcf6iXXTkSWk17b2MZ95oAqLR8G+vj1ItFwy G2l7qNnx4xfWs1Z/h6AZSUl+i3Zwe+zKgWKTLbguhBz0T2Lx1iE1DXfJVWhCw1VbV8 A5mfP+hySGUiPN6AYZDtjuSTDYCWTxVO16qhGtBkDQPwfERKgoDsEgpaZAfXd+5Rcq NIG+WdodjehTKs/ooLU7ddH8d+qOPR3djN8srzS9WGUAYwkwBBfaftZL2o2ye7+d0h OpHedXiZhGT6FXVT4q9/Gg0IUDUOS2qoxK0B5dh7rwMysa44W5YW3nj/6Gx5XLi6OV 2/B04bPTS80FQ== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:36 +0200 Subject: [PATCH v6 09/14] drm/msm/a6xx: Resolve the meaning of rgb565_predicator Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-9-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=2509; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=XfAVKpXihNq5QYjqmv6bbx9jLqRnqYwolc2Cu9hDUvU=; b=6YUdaLT61fiBU42DaWMPWEGLq53/TKHy8iSo99y6DufkOn18c/4H/E5SfxOraSBImKIOY8F+H wDFLj5BQRsxAYN3y/dBxP32Q+Q7ctajCsXmqfHTHtdZHxtW4xHMnUg3 X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio It's supposed to be on when the UBWC encoder version is >=3D 4.0. Drop the per-GPU assignments. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 78782f94ee678e13baa6eb1a009a412e13557d59..53493f68ead2113143dab594bfe= df492014d5aaa 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -610,7 +610,6 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) if (IS_ERR(gpu->common_ubwc_cfg)) return PTR_ERR(gpu->common_ubwc_cfg); =20 - gpu->ubwc_config.rgb565_predicator =3D 0; gpu->ubwc_config.min_acc_len =3D 0; gpu->ubwc_config.ubwc_swizzle =3D 0x6; gpu->ubwc_config.macrotile_mode =3D 0; @@ -637,7 +636,6 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) =20 if (adreno_is_a623(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 16; - gpu->ubwc_config.rgb565_predicator =3D 1; gpu->ubwc_config.macrotile_mode =3D 1; } =20 @@ -651,13 +649,11 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *g= pu) adreno_is_a740_family(gpu)) { /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */ gpu->ubwc_config.highest_bank_bit =3D 16; - gpu->ubwc_config.rgb565_predicator =3D 1; gpu->ubwc_config.macrotile_mode =3D 1; } =20 if (adreno_is_a663(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.rgb565_predicator =3D 1; gpu->ubwc_config.macrotile_mode =3D 1; gpu->ubwc_config.ubwc_swizzle =3D 0x4; } @@ -686,6 +682,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) */ BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; + bool rgb565_predicator =3D cfg->ubwc_enc_version >=3D UBWC_4_0; u32 level2_swizzling_dis =3D !(cfg->ubwc_swizzle & BIT(1)); bool ubwc_mode =3D qcom_ubwc_get_ubwc_mode(cfg); bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; @@ -698,7 +695,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) =20 gpu_write(gpu, REG_A6XX_RB_NC_MODE_CNTL, level2_swizzling_dis << 12 | - adreno_gpu->ubwc_config.rgb565_predicator << 11 | + rgb565_predicator << 11 | hbb_hi << 10 | amsbc << 4 | adreno_gpu->ubwc_config.min_acc_len << 3 | hbb_lo << 1 | ubwc_mode); --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A35812C0327; Thu, 26 Jun 2025 09:03:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928607; cv=none; b=W6EKO0LJQlW3wKjiSlEVQji1lebnpz79GCbnFjf0AdZ6Hqn83Fj6j5+5vYCAyDgKBSXUWwC6WGN8RxX5T9CfLTxljCPMJ+iVE/71ZOuIbvz+IyylL9LQurz38vbpbg+hQaZDBREBJAhGBr/lJwBE1KqF2desa6dYwyOGUlMiAww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928607; c=relaxed/simple; bh=S3JHmksvY8rkFLpju1G9DgL1dxkE0dccEaycj5QkxT4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=exC7UGT9UqiHB2X7XnhkHWkrOa9GCMeEfRZXkinvoQGnXr5ZcMDAJoVzH5tb8GlwIyEcqPAQt/5qSBMEL1GljmpjQLGP/HfrlW1/Zxbw5frQkdC8yHvxwQKDLkBldRcP/VKIhVKC3mqMKkwtqgGl2J0bmZTgy1dX/86RpIFf0I8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sD5qCayt; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sD5qCayt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9372FC4CEEB; Thu, 26 Jun 2025 09:03:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928607; bh=S3JHmksvY8rkFLpju1G9DgL1dxkE0dccEaycj5QkxT4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=sD5qCayttBEC2LYm994neRO0kSFyDLEX2dNrk0ZvAwPUWm7xwYTb4vaK3V74963sp kURIsDbjwWJDokvLkqHBDgCvlZbGbnFZU1fEjuEiajcsj0mE8e2nef89ezscDZ+50B 6qD0/KTvYy+kzPL1GmyTAQNkys2jw9uT/U91DOODl0mw3G3MC8KhaANPaCSrKqb8S3 5ucotSeOGyXjo2pYYH1GCOJSNzmZfWMEt42YjKmhd25gxDkkD4nvqCsa8E07VRIKAw Nm9aC6Zcu0wi/eUgxNFiQFvWNKM+CPbtR5t+s/HAec2nUlktRleafCkBd+5X8KjxrT w5Kse6ovgU4xg== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:37 +0200 Subject: [PATCH v6 10/14] drm/msm/a6xx: Simplify min_acc_len calculation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-10-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=3209; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=fqy5mvOCxz2r6HQMGGHFm7SBPbvkgv6eghecLNuPiso=; b=C7koqnR5xBymeDp64YxyyFa8/uWP9pD9hV47SVNAdaIvB53JqCI0MSJM6J3kNgtdemP+oiiHi cPXuhe0EKbEBjcyI7thb3/R78xWjiJS3wk+Oge+mOHVP0kW4J3xp0IB X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio It's only necessary for some lower end parts. Also rename it to min_acc_len_64b to denote that if set, the minimum access length is 64 bits, 32b otherwise. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 53493f68ead2113143dab594bfedf492014d5aaa..e16ad298ba1c11ed5b4c70487bc= 09e23b2ed5cce 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -610,14 +610,12 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *g= pu) if (IS_ERR(gpu->common_ubwc_cfg)) return PTR_ERR(gpu->common_ubwc_cfg); =20 - gpu->ubwc_config.min_acc_len =3D 0; gpu->ubwc_config.ubwc_swizzle =3D 0x6; gpu->ubwc_config.macrotile_mode =3D 0; gpu->ubwc_config.highest_bank_bit =3D 15; =20 if (adreno_is_a610(gpu)) { gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.min_acc_len =3D 1; gpu->ubwc_config.ubwc_swizzle =3D 0x7; } =20 @@ -663,10 +661,8 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *gp= u) gpu->ubwc_config.macrotile_mode =3D 1; } =20 - if (adreno_is_a702(gpu)) { + if (adreno_is_a702(gpu)) gpu->ubwc_config.highest_bank_bit =3D 14; - gpu->ubwc_config.min_acc_len =3D 1; - } =20 return 0; } @@ -686,6 +682,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) u32 level2_swizzling_dis =3D !(cfg->ubwc_swizzle & BIT(1)); bool ubwc_mode =3D qcom_ubwc_get_ubwc_mode(cfg); bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; + bool min_acc_len_64b =3D false; u8 uavflagprd_inv =3D 0; u32 hbb_hi =3D hbb >> 2; u32 hbb_lo =3D hbb & 3; @@ -693,22 +690,25 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) if (adreno_is_a650_family(adreno_gpu) || adreno_is_a7xx(adreno_gpu)) uavflagprd_inv =3D 2; =20 + if (adreno_is_a610(adreno_gpu) || adreno_is_a702(adreno_gpu)) + min_acc_len_64b =3D true; + gpu_write(gpu, REG_A6XX_RB_NC_MODE_CNTL, level2_swizzling_dis << 12 | rgb565_predicator << 11 | hbb_hi << 10 | amsbc << 4 | - adreno_gpu->ubwc_config.min_acc_len << 3 | + min_acc_len_64b << 3 | hbb_lo << 1 | ubwc_mode); =20 gpu_write(gpu, REG_A6XX_TPL1_NC_MODE_CNTL, level2_swizzling_dis << 6 | hbb_hi << 4 | - adreno_gpu->ubwc_config.min_acc_len << 3 | + min_acc_len_64b << 3 | hbb_lo << 1 | ubwc_mode); =20 gpu_write(gpu, REG_A6XX_SP_NC_MODE_CNTL, level2_swizzling_dis << 12 | hbb_hi << 10 | uavflagprd_inv << 4 | - adreno_gpu->ubwc_config.min_acc_len << 3 | + min_acc_len_64b << 3 | hbb_lo << 1 | ubwc_mode); =20 if (adreno_is_a7xx(adreno_gpu)) @@ -716,7 +716,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) FIELD_PREP(GENMASK(8, 5), hbb_lo)); =20 gpu_write(gpu, REG_A6XX_UCHE_MODE_CNTL, - adreno_gpu->ubwc_config.min_acc_len << 23 | hbb_lo << 21); + min_acc_len_64b << 23 | hbb_lo << 21); =20 gpu_write(gpu, REG_A6XX_RBBM_NC_MODE_CNTL, adreno_gpu->ubwc_config.macrotile_mode); --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DD20129E115; Thu, 26 Jun 2025 09:03:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928613; cv=none; b=re9wL/bQnPpCP1KAkV0DztLvzhkF/OlFedXcoQ4184raMxxnvGq39rxMCIdqPyFBHR6WShVJ/72onRWCJio78oPHzMpRDjaNF4+3t+9AD++LILBn0/nBHg3GssDo74QuKMphYF+zRBE9tKXxEqD4DU9Z5yg8nar9l7+cTIE+aFE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928613; c=relaxed/simple; bh=1xDR+U2RyabJrmBM8h3htdpEoHj6pztPIHXpeZtSbuA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kA03Q9J0Dh6QeeaVsl7NM075k6tDj84NJfChP4gTyNnPEoMPEhocHZh7dh1Gd5DHvMdfX5ApVdnnShkMCDhva1cPMJMfrHDmqgG5V+ycR8VGeBZFJS7EL3wbagIOoGs0pHAguoDrrz/QovNaVrNSX8JozXwTCkGIfdeyLynNI4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rRdnL6Aq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rRdnL6Aq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C903C4CEEE; Thu, 26 Jun 2025 09:03:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928612; bh=1xDR+U2RyabJrmBM8h3htdpEoHj6pztPIHXpeZtSbuA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rRdnL6AqYjdjOMKH6BPqaWAgy36A6sJFaIRIzUHP4yFZrM3izvlKH095vrPgWKMgh 3bFDm255rF4DLYECBYVSUEs/ZhJOzuVO5MCLcISoPG3GsWxopfEbVlVjcGAJzIV9tq R1TSP7yPtSXQQU8AafxlK0m32BzsQYbdKPkTWK2fwpEA0CFo9tmXhsujHx6KeYWi36 xrmohc9s1+VmXSF1aheZBXxXA0sqRAxrGcSs0g1gWFgiMB8VnY+K5r5BBdlN76COkH GASxYE6fImpZezffac0MIC4qaRKrnUaKW3+iiafIdGHReJD9/km3bo7lTwt/yAg/Ks Y4+Igs0i0e4rA== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:38 +0200 Subject: [PATCH v6 11/14] soc: qcom: ubwc: Fix SM6125's ubwc_swizzle value Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-11-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=1051; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=TGgyPtOq6PVyTB/wSUW2NCwkk+YFyrLplveJijYvHuw=; b=cMyeFHZ0gCZMTKDYL0diQRQGNVkSDYuOt2RG6JJTSxyQOsTxjVSSuT43GVm4gc5tqz9z0wutJ m05g7k0U52HCQ7StAr2yJzrZ1ZECNxE/lObuLpfT4d8VB7W5B8MKVbx X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio The value of 7 (a.k.a. GENMASK(2, 0), a.k.a. disabling levels 1-3 of swizzling) is what we want on this platform (and others with a UBWC 1.0 encoder). Fix it to make mesa happy (the hardware doesn't care about the 2 higher bits, as they weren't consumed on this platform). Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/soc/qcom/ubwc_config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/soc/qcom/ubwc_config.c b/drivers/soc/qcom/ubwc_config.c index 18a853a3f76cc71dc6c2665c6b7486eb936331f6..3eb2f2118e5d1ca69cad2ed0925= 42920537ff62c 100644 --- a/drivers/soc/qcom/ubwc_config.c +++ b/drivers/soc/qcom/ubwc_config.c @@ -103,7 +103,7 @@ static const struct qcom_ubwc_cfg_data sm6115_data =3D { static const struct qcom_ubwc_cfg_data sm6125_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_3_0, - .ubwc_swizzle =3D 1, + .ubwc_swizzle =3D 7, .highest_bank_bit =3D 14, }; =20 --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F2CD29E11B; Thu, 26 Jun 2025 09:03:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928618; cv=none; b=KRRzPryh/c5qI8UmJSIsjmolnHwD9VOrDBDM2dRz0QlQH4hCNS64bULWTWakABVhskQhMk665EjyjybFTLvHGv7TisWUnqtZohQS2vzD2nljqoVwb9uZZuWYT4jeM93mrBx8Rlrjc8NyYDag6THZ7vbYp0pNYuj+TxC8qdPWg+k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928618; c=relaxed/simple; bh=/kqGi4h9v1Hn5tcxd1FmuI1H0vQ4QcnDYZ1YUUqI9As=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G5xNpcT2QhadSM/KW8q7atFTHWDxhUguP8sTp012DVCJLIFZg2IlsMJ327p5iS1/lXIWFIO+SIheltta+70G30Erbffe1nKc1eiSFxZIXRcCKtA6kA/NjFkRfke0WwnpIGDoj6xtveSUmGsQI7sUS5d40Xg+4Dk1WebqVSflvp0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GeBvBSc2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GeBvBSc2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 193A6C4CEEB; Thu, 26 Jun 2025 09:03:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928617; bh=/kqGi4h9v1Hn5tcxd1FmuI1H0vQ4QcnDYZ1YUUqI9As=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GeBvBSc2VU9gXJqh2dWopwSB4Pg1c7CkTqa4/j9XxmTO0ytIYerNihHVvghYIssVY 3v70kl505KyTQpr6tt+3ehJDjTaoeH9AyMRUCqdBheVC8ZrBI811Zqj4QokQk2yv7Z K299CM+fTwWI10oSKYgdvEc5/pU1Y8hwSDBV3trmDi+Ue+q7HlaKiUMQLGDA52lPyj KPzuwNWi6+zdZKFy9hdkE4UXgak0HCB8WOveSKFO8B7dL2lpzh+/52/s+Y4AGfuNg/ hCSIjYblBX2OgMbvA2h6F2Qv0j2uckJZDRxDub1UKxP4bJOH4WTHBqtSeeCSCTYx0H 7Z4x1CKY/WTSw== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:39 +0200 Subject: [PATCH v6 12/14] soc: qcom: ubwc: Add #defines for UBWC swizzle bits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-12-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=7400; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=k6bQVh5apOZvCn3NdY3gb9ksXOWxEcp2zIS+Wb9Rp3I=; b=QskX1ehmx57lw/Bs4i1/WGK8Ckive08jFcVqPCXoXSJ6+qMQ8v+3DsGeHitkFb4N46VgD/Qmm PnY5ASSRNB4BsQIcIrqOgPhjZoEsGRLvCxd4dx4uyVpX3M2D5/8ZR25 X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio Make the values a bit more meaningful. This commit is intentionally cross-subsystem to ease review, as the patchset is intended to be merged together, with a maintainer consensus. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- drivers/soc/qcom/ubwc_config.c | 37 +++++++++++++++++++++++--------= ---- include/linux/soc/qcom/ubwc.h | 8 ++++---- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index e16ad298ba1c11ed5b4c70487bc09e23b2ed5cce..6612030621b1b16c8662d39453b= 609c9c9ff982f 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -679,7 +679,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; bool rgb565_predicator =3D cfg->ubwc_enc_version >=3D UBWC_4_0; - u32 level2_swizzling_dis =3D !(cfg->ubwc_swizzle & BIT(1)); + u32 level2_swizzling_dis =3D !(cfg->ubwc_swizzle & UBWC_SWIZZLE_ENABLE_LV= L2); bool ubwc_mode =3D qcom_ubwc_get_ubwc_mode(cfg); bool amsbc =3D cfg->ubwc_enc_version >=3D UBWC_3_0; bool min_acc_len_64b =3D false; diff --git a/drivers/soc/qcom/ubwc_config.c b/drivers/soc/qcom/ubwc_config.c index 3eb2f2118e5d1ca69cad2ed092542920537ff62c..816bad6674ab6fc61ba0d9ca5d8= 581f2b61e53a6 100644 --- a/drivers/soc/qcom/ubwc_config.c +++ b/drivers/soc/qcom/ubwc_config.c @@ -32,7 +32,7 @@ static const struct qcom_ubwc_cfg_data qcm2290_data =3D { static const struct qcom_ubwc_cfg_data sa8775p_data =3D { .ubwc_enc_version =3D UBWC_4_0, .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 4, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 13, .macrotile_mode =3D true, @@ -41,7 +41,8 @@ static const struct qcom_ubwc_cfg_data sa8775p_data =3D { static const struct qcom_ubwc_cfg_data sar2130p_data =3D { .ubwc_enc_version =3D UBWC_3_0, /* 4.0.2 in hw */ .ubwc_dec_version =3D UBWC_4_3, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 13, .macrotile_mode =3D true, @@ -50,7 +51,8 @@ static const struct qcom_ubwc_cfg_data sar2130p_data =3D { static const struct qcom_ubwc_cfg_data sc7180_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 14, }; @@ -58,7 +60,8 @@ static const struct qcom_ubwc_cfg_data sc7180_data =3D { static const struct qcom_ubwc_cfg_data sc7280_data =3D { .ubwc_enc_version =3D UBWC_3_0, .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 14, .macrotile_mode =3D true, @@ -74,7 +77,8 @@ static const struct qcom_ubwc_cfg_data sc8180x_data =3D { static const struct qcom_ubwc_cfg_data sc8280xp_data =3D { .ubwc_enc_version =3D UBWC_4_0, .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 16, .macrotile_mode =3D true, @@ -95,7 +99,9 @@ static const struct qcom_ubwc_cfg_data sdm845_data =3D { static const struct qcom_ubwc_cfg_data sm6115_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_2_0, - .ubwc_swizzle =3D 7, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL1 | + UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 14, }; @@ -103,7 +109,9 @@ static const struct qcom_ubwc_cfg_data sm6115_data =3D { static const struct qcom_ubwc_cfg_data sm6125_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_3_0, - .ubwc_swizzle =3D 7, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL1 | + UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 14, }; =20 @@ -116,7 +124,8 @@ static const struct qcom_ubwc_cfg_data sm6150_data =3D { static const struct qcom_ubwc_cfg_data sm6350_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, .highest_bank_bit =3D 14, }; @@ -136,7 +145,8 @@ static const struct qcom_ubwc_cfg_data sm8150_data =3D { static const struct qcom_ubwc_cfg_data sm8250_data =3D { .ubwc_enc_version =3D UBWC_4_0, .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ .highest_bank_bit =3D 16, @@ -146,7 +156,8 @@ static const struct qcom_ubwc_cfg_data sm8250_data =3D { static const struct qcom_ubwc_cfg_data sm8350_data =3D { .ubwc_enc_version =3D UBWC_4_0, .ubwc_dec_version =3D UBWC_4_0, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ .highest_bank_bit =3D 16, @@ -156,7 +167,8 @@ static const struct qcom_ubwc_cfg_data sm8350_data =3D { static const struct qcom_ubwc_cfg_data sm8550_data =3D { .ubwc_enc_version =3D UBWC_4_0, .ubwc_dec_version =3D UBWC_4_3, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ .highest_bank_bit =3D 16, @@ -176,7 +188,8 @@ static const struct qcom_ubwc_cfg_data sm8750_data =3D { static const struct qcom_ubwc_cfg_data x1e80100_data =3D { .ubwc_enc_version =3D UBWC_4_0, .ubwc_dec_version =3D UBWC_4_3, - .ubwc_swizzle =3D 6, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .ubwc_bank_spread =3D true, /* TODO: highest_bank_bit =3D 15 for LP_DDR4 */ .highest_bank_bit =3D 16, diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h index f0334f4ece2098ddf290eb182897cd8aa74608b3..1ed8b1b16bc90bea2ed54586edf= e21beb2db04d4 100644 --- a/include/linux/soc/qcom/ubwc.h +++ b/include/linux/soc/qcom/ubwc.h @@ -21,11 +21,11 @@ struct qcom_ubwc_cfg_data { * UBWC 1.0 always enables all three levels. * UBWC 2.0 removes level 1 bank swizzling, leaving levels 2 & 3. * UBWC 4.0 adds the optional ability to disable levels 2 & 3. - * - * This is a bitmask where BIT(0) enables level 1, BIT(1) - * controls level 2, and BIT(2) enables level 3. */ u32 ubwc_swizzle; +#define UBWC_SWIZZLE_ENABLE_LVL1 BIT(0) +#define UBWC_SWIZZLE_ENABLE_LVL2 BIT(1) +#define UBWC_SWIZZLE_ENABLE_LVL3 BIT(2) =20 /** * @highest_bank_bit: Highest Bank Bit @@ -66,7 +66,7 @@ static inline bool qcom_ubwc_get_ubwc_mode(const struct q= com_ubwc_cfg_data *cfg) { bool ret =3D cfg->ubwc_enc_version =3D=3D UBWC_1_0; =20 - if (ret && !(cfg->ubwc_swizzle & BIT(0))) + if (ret && !(cfg->ubwc_swizzle & UBWC_SWIZZLE_ENABLE_LVL1)) pr_err("UBWC config discrepancy - level 1 swizzling disabled on UBWC 1.0= \n"); =20 return ret; --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CC6F2C3257; Thu, 26 Jun 2025 09:03:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928622; cv=none; b=mm6kZQvAf5WnvRUR8jw+zlmNwRP7bg2nL7tH0bZ8C03pW3tnWZkC3JbwMWRXPQPHmQYnsGlW5aZizyjIan2uAhTuU2YwjpQVAM6lSQPulcQdQsXB8Js0DKvn2pv2YqyceXgQ2oWm00q2M5PJ5TtmW/Ort9O2s4vpVZPc9V6Cd4Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928622; c=relaxed/simple; bh=oaU0R3iKwphSNuRSAAGffDiChGd+4zUCEL7mWYBnsNM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FU7WsRS0YVubyGZsNsT1v7fNL6vzwzN0XuD0XjjBn2Bp+XPLo5SAbp0GdEZDZ5x6DXn5R2b1opBZr20tGG6Jj9NUgnNEB2SmHXQpIewy6BLtAv2cLZjlJfLxo4g1FzYTPbkEiJ4BmBYzwzEFb7zv+Fa7wo+5pNwdufEJcpemF2Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dP/S1L77; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dP/S1L77" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1FDBFC4CEEE; Thu, 26 Jun 2025 09:03:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928622; bh=oaU0R3iKwphSNuRSAAGffDiChGd+4zUCEL7mWYBnsNM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dP/S1L77d2Mhy1/RyxGigB93MGBKrkOZZ6nEyRRm0Xja/Sfnb/o6pZXOhMG0KZZOO PNrxpqB0RBfCK5l/n5/fKEcX7qk0PCkF4G4FcpF/r9ES1bCD7cnR0Q26XYBjUGVn7g jeTsLrrMgWq0/lT/WKcVdO1UiEUdMmo2pbc0mxNUV0omE3DNofbMjMCnp3K7bP3OWH Qh6Xl1zqu2B6Od1lbHAbKEcPXmgjOPovKMakN5sg+D2cmzG5+2VnBIJcbiTrbA/8BY XIQdcw9p55gwMIlhDLpj63YjMTkQbRrUnuyjq5SIMD0viFhHuBygcZJGgPVuDBRKS7 am/4zHs1UKcEQ== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:40 +0200 Subject: [PATCH v6 13/14] soc: qcom: ubwc: Fill in UBWC swizzle cfg for platforms that lack one Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-13-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=2912; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=QT6oKETVTxmrbmRgQZlKzmJjSDEXKYrMWVBeSgQJSGg=; b=yV4/qNS4Yp/CZ5/zoCdrDGZ9YFeAKB/tQkBcyocsIO2DAZMBUnZIs3vF0YYuaCdWbCRc+3FGx VyaovJPOTK+DjRTKywiBAHk7GHHp+aq8Qv7d0YcPbaU1/bbi2mmt609 X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio The UBWC 1.0 case is easy - it must be all 3 enabled. UBWC2.0 and 3.x require that level1 is removed, follow suit. Reviewed-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/soc/qcom/ubwc_config.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/soc/qcom/ubwc_config.c b/drivers/soc/qcom/ubwc_config.c index 816bad6674ab6fc61ba0d9ca5d8581f2b61e53a6..bd0a98aad9f3b222abcf0a7af85= a318caffa9841 100644 --- a/drivers/soc/qcom/ubwc_config.c +++ b/drivers/soc/qcom/ubwc_config.c @@ -15,12 +15,18 @@ static const struct qcom_ubwc_cfg_data msm8937_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_1_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL1 | + UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 14, }; =20 static const struct qcom_ubwc_cfg_data msm8998_data =3D { .ubwc_enc_version =3D UBWC_1_0, .ubwc_dec_version =3D UBWC_1_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL1 | + UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 15, }; =20 @@ -70,6 +76,8 @@ static const struct qcom_ubwc_cfg_data sc7280_data =3D { static const struct qcom_ubwc_cfg_data sc8180x_data =3D { .ubwc_enc_version =3D UBWC_3_0, .ubwc_dec_version =3D UBWC_3_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 16, .macrotile_mode =3D true, }; @@ -87,12 +95,16 @@ static const struct qcom_ubwc_cfg_data sc8280xp_data = =3D { static const struct qcom_ubwc_cfg_data sdm670_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 14, }; =20 static const struct qcom_ubwc_cfg_data sdm845_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 15, }; =20 @@ -118,6 +130,8 @@ static const struct qcom_ubwc_cfg_data sm6125_data =3D { static const struct qcom_ubwc_cfg_data sm6150_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 14, }; =20 @@ -133,12 +147,16 @@ static const struct qcom_ubwc_cfg_data sm6350_data = =3D { static const struct qcom_ubwc_cfg_data sm7150_data =3D { .ubwc_enc_version =3D UBWC_2_0, .ubwc_dec_version =3D UBWC_2_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 14, }; =20 static const struct qcom_ubwc_cfg_data sm8150_data =3D { .ubwc_enc_version =3D UBWC_3_0, .ubwc_dec_version =3D UBWC_3_0, + .ubwc_swizzle =3D UBWC_SWIZZLE_ENABLE_LVL2 | + UBWC_SWIZZLE_ENABLE_LVL3, .highest_bank_bit =3D 15, }; =20 --=20 2.50.0 From nobody Thu Sep 11 00:08:42 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BC592C3257; Thu, 26 Jun 2025 09:03:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928627; cv=none; b=pv5+DJfB1NnXTjEtRT66CeBTq31yauQAT5waQcTOCYyftPbgUefWXrLn+xNAfNaPpFH+k33aZExXTicASeTU5rx9Qg64Mwx5JI3mkI3Gt2mbhTpQ/upoqYise58KAbo+2gz1lIOGLEW8qdGO2LuHjkcYFSbX7ETU/A5Dn973src= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750928627; c=relaxed/simple; bh=TmIM0p72O2FZNkhlwbmPcq/u359hmkpIqewYPntpNE4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b1mT7R2jX44UOF4lGhbPeXxR2nu7Z5UmLfSngyU4Ic0Z8AibXv13aF1CUwL4/wAQoQne5N2+moQot4qZ7wQazddnfng3jUgXDpEXLqMMyveQkvZK2nu1zc5ssc98ph9pVOmb/2bi67BM2S2WZNrl5GnszkLu5i3C1oFzFHBWq+E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UApeCTI8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UApeCTI8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B1870C4CEEB; Thu, 26 Jun 2025 09:03:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750928627; bh=TmIM0p72O2FZNkhlwbmPcq/u359hmkpIqewYPntpNE4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UApeCTI8woGSmfFb0lfQ7WjlGpqEGM4OuGKIFujN73TaJ51hoS6TXvdrm8n31uoG7 08Tqhy+4wToS6X9sjQeTwa+VttKhHtBdyxhmmLNCDm5CGQHDjB7KtmMYaeolG+HBHd sbCRHPjOwjDkJWFXdV/G9OPnVF7nYjn3uizMiyimgrmvRf6DnxJht9J5+1ScKgeIuq 5JBaH8sHiQftdkVQ+4WC+OncmC/RgGxmlQ/viDTM8w8nRY7L+HZk7Judv/RVavDy8o gNuYhGxGwl404F/dmOnPQwlcRvVuWIuBB8wz/l03HBB8deLLSd5RFZ9qID80XyIKPE ML0nyEcvwoD/g== From: Konrad Dybcio Date: Thu, 26 Jun 2025 11:02:41 +0200 Subject: [PATCH v6 14/14] drm/msm/adreno: Switch to the common UBWC config struct Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250626-topic-ubwc_central-v6-14-c94fa9d12040@oss.qualcomm.com> References: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> In-Reply-To: <20250626-topic-ubwc_central-v6-0-c94fa9d12040@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Simona Vetter , Rob Clark , Abhinav Kumar , Jessica Zhang , Rob Clark , Akhil P Oommen Cc: Marijn Suijten , linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, Konrad Dybcio , Dmitry Baryshkov X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1750928557; l=10610; i=konrad.dybcio@oss.qualcomm.com; s=20230215; h=from:subject:message-id; bh=potIy8Dkkz/1yoAE7J/I600HrUDXJJWdkOC8tivmHWU=; b=hT+lJoC6ig2CsSsaTcCEI6KV7fXMTLr3s4QKW1YcBC/y+z3ypGyOIZruQoZw+Ipct+ELz8Uba XeBvx6L/IWLCNU+yTvpodCAHAs2y13F6j1UTx1asfGKR3Ui1KESw5+a X-Developer-Key: i=konrad.dybcio@oss.qualcomm.com; a=ed25519; pk=iclgkYvtl2w05SSXO5EjjSYlhFKsJ+5OSZBjOkQuEms= From: Konrad Dybcio Now that Adreno specifics are out of the way, use the common config (but leave the HBB hardcoding in place until that is wired up on the other side). Acked-by: Dmitry Baryshkov Signed-off-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 20 ++++----- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 76 ++++++++++++++++++-----------= ---- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 6 +-- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 45 +++---------------- 4 files changed, 60 insertions(+), 87 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a5xx_gpu.c index 60aef079623606bb1ae44ba59ac45e391595b0ba..6a77d130446218e81ea44330eea= 284a4abe98d3a 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c @@ -835,8 +835,8 @@ static int a5xx_hw_init(struct msm_gpu *gpu) =20 gpu_write(gpu, REG_A5XX_RBBM_AHB_CNTL2, 0x0000003F); =20 - BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); - hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; + BUG_ON(adreno_gpu->ubwc_config->highest_bank_bit < 13); + hbb =3D adreno_gpu->ubwc_config->highest_bank_bit - 13; =20 gpu_write(gpu, REG_A5XX_TPL1_MODE_CNTL, hbb << 7); gpu_write(gpu, REG_A5XX_RB_MODE_CNTL, hbb << 1); @@ -1756,6 +1756,7 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev) struct msm_drm_private *priv =3D dev->dev_private; struct platform_device *pdev =3D priv->gpu_pdev; struct adreno_platform_config *config =3D pdev->dev.platform_data; + const struct qcom_ubwc_cfg_data *common_cfg; struct a5xx_gpu *a5xx_gpu =3D NULL; struct adreno_gpu *adreno_gpu; struct msm_gpu *gpu; @@ -1792,15 +1793,14 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *de= v) /* Set up the preemption specific bits and pieces for each ringbuffer */ a5xx_preempt_init(gpu); =20 - /* Set the highest bank bit */ - if (adreno_is_a540(adreno_gpu) || adreno_is_a530(adreno_gpu)) - adreno_gpu->ubwc_config.highest_bank_bit =3D 15; - else - adreno_gpu->ubwc_config.highest_bank_bit =3D 14; + /* Inherit the common config and make some necessary fixups */ + common_cfg =3D qcom_ubwc_config_get_data(); + if (IS_ERR(common_cfg)) + return ERR_CAST(common_cfg); =20 - /* a5xx only supports UBWC 1.0, these are not configurable */ - adreno_gpu->ubwc_config.macrotile_mode =3D 0; - adreno_gpu->ubwc_config.ubwc_swizzle =3D 0x7; + /* Copy the data into the internal struct to drop the const qualifier (te= mporarily) */ + adreno_gpu->_ubwc_config =3D *common_cfg; + adreno_gpu->ubwc_config =3D &adreno_gpu->_ubwc_config; =20 adreno_gpu->uche_trap_base =3D 0x0001ffffffff0000ull; =20 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 6612030621b1b16c8662d39453b609c9c9ff982f..c618cebc5682fbfb21f328ca575= 6fa0ac34831d9 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -605,64 +605,70 @@ static void a6xx_set_cp_protect(struct msm_gpu *gpu) =20 static int a6xx_calc_ubwc_config(struct adreno_gpu *gpu) { - /* Inherit the common config and make some necessary fixups */ - gpu->common_ubwc_cfg =3D qcom_ubwc_config_get_data(); - if (IS_ERR(gpu->common_ubwc_cfg)) - return PTR_ERR(gpu->common_ubwc_cfg); + const struct qcom_ubwc_cfg_data *common_cfg; + struct qcom_ubwc_cfg_data *cfg =3D &gpu->_ubwc_config; =20 - gpu->ubwc_config.ubwc_swizzle =3D 0x6; - gpu->ubwc_config.macrotile_mode =3D 0; - gpu->ubwc_config.highest_bank_bit =3D 15; + /* Inherit the common config and make some necessary fixups */ + common_cfg =3D qcom_ubwc_config_get_data(); + if (IS_ERR(common_cfg)) + return PTR_ERR(common_cfg); + + /* Copy the data into the internal struct to drop the const qualifier (te= mporarily) */ + *cfg =3D *common_cfg; + + cfg->ubwc_swizzle =3D 0x6; + cfg->highest_bank_bit =3D 15; =20 if (adreno_is_a610(gpu)) { - gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.ubwc_swizzle =3D 0x7; + cfg->highest_bank_bit =3D 13; + cfg->ubwc_swizzle =3D 0x7; } =20 if (adreno_is_a618(gpu)) - gpu->ubwc_config.highest_bank_bit =3D 14; + cfg->highest_bank_bit =3D 14; =20 if (adreno_is_a619(gpu)) /* TODO: Should be 14 but causes corruption at e.g. 1920x1200 on DP */ - gpu->ubwc_config.highest_bank_bit =3D 13; + cfg->highest_bank_bit =3D 13; =20 if (adreno_is_a619_holi(gpu)) - gpu->ubwc_config.highest_bank_bit =3D 13; + cfg->highest_bank_bit =3D 13; =20 if (adreno_is_a621(gpu)) - gpu->ubwc_config.highest_bank_bit =3D 13; + cfg->highest_bank_bit =3D 13; =20 - if (adreno_is_a623(gpu)) { - gpu->ubwc_config.highest_bank_bit =3D 16; - gpu->ubwc_config.macrotile_mode =3D 1; - } - - if (adreno_is_a680(gpu)) - gpu->ubwc_config.macrotile_mode =3D 1; + if (adreno_is_a623(gpu)) + cfg->highest_bank_bit =3D 16; =20 if (adreno_is_a650(gpu) || adreno_is_a660(gpu) || adreno_is_a690(gpu) || adreno_is_a730(gpu) || adreno_is_a740_family(gpu)) { - /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */ - gpu->ubwc_config.highest_bank_bit =3D 16; - gpu->ubwc_config.macrotile_mode =3D 1; + /* TODO: get ddr type from bootloader and use 15 for LPDDR4 */ + cfg->highest_bank_bit =3D 16; } =20 if (adreno_is_a663(gpu)) { - gpu->ubwc_config.highest_bank_bit =3D 13; - gpu->ubwc_config.macrotile_mode =3D 1; - gpu->ubwc_config.ubwc_swizzle =3D 0x4; + cfg->highest_bank_bit =3D 13; + cfg->ubwc_swizzle =3D 0x4; } =20 - if (adreno_is_7c3(gpu)) { - gpu->ubwc_config.highest_bank_bit =3D 14; - gpu->ubwc_config.macrotile_mode =3D 1; - } + if (adreno_is_7c3(gpu)) + cfg->highest_bank_bit =3D 14; =20 if (adreno_is_a702(gpu)) - gpu->ubwc_config.highest_bank_bit =3D 14; + cfg->highest_bank_bit =3D 14; + + if (cfg->highest_bank_bit !=3D common_cfg->highest_bank_bit) + DRM_WARN_ONCE("Inconclusive highest_bank_bit value: %u (GPU) vs %u (UBWC= _CFG)\n", + cfg->highest_bank_bit, common_cfg->highest_bank_bit); + + if (cfg->ubwc_swizzle !=3D common_cfg->ubwc_swizzle) + DRM_WARN_ONCE("Inconclusive ubwc_swizzle value: %u (GPU) vs %u (UBWC_CFG= )\n", + cfg->ubwc_swizzle, common_cfg->ubwc_swizzle); + + gpu->ubwc_config =3D &gpu->_ubwc_config; =20 return 0; } @@ -670,14 +676,14 @@ static int a6xx_calc_ubwc_config(struct adreno_gpu *g= pu) static void a6xx_set_ubwc_config(struct msm_gpu *gpu) { struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); - const struct qcom_ubwc_cfg_data *cfg =3D adreno_gpu->common_ubwc_cfg; + const struct qcom_ubwc_cfg_data *cfg =3D adreno_gpu->ubwc_config; /* * We subtract 13 from the highest bank bit (13 is the minimum value * allowed by hw) and write the lowest two bits of the remaining value * as hbb_lo and the one above it as hbb_hi to the hardware. */ - BUG_ON(adreno_gpu->ubwc_config.highest_bank_bit < 13); - u32 hbb =3D adreno_gpu->ubwc_config.highest_bank_bit - 13; + BUG_ON(cfg->highest_bank_bit < 13); + u32 hbb =3D cfg->highest_bank_bit - 13; bool rgb565_predicator =3D cfg->ubwc_enc_version >=3D UBWC_4_0; u32 level2_swizzling_dis =3D !(cfg->ubwc_swizzle & UBWC_SWIZZLE_ENABLE_LV= L2); bool ubwc_mode =3D qcom_ubwc_get_ubwc_mode(cfg); @@ -719,7 +725,7 @@ static void a6xx_set_ubwc_config(struct msm_gpu *gpu) min_acc_len_64b << 23 | hbb_lo << 21); =20 gpu_write(gpu, REG_A6XX_RBBM_NC_MODE_CNTL, - adreno_gpu->ubwc_config.macrotile_mode); + cfg->macrotile_mode); } =20 static void a7xx_patch_pwrup_reglist(struct msm_gpu *gpu) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index 86bff915c3e793583c81a6414ee89c1f59365c58..1251ff1b4895287340c9f3809d4= 6441aded64cfd 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -420,16 +420,16 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_= file_private *ctx, *value =3D ctx->aspace->va_size; return 0; case MSM_PARAM_HIGHEST_BANK_BIT: - *value =3D adreno_gpu->ubwc_config.highest_bank_bit; + *value =3D adreno_gpu->ubwc_config->highest_bank_bit; return 0; case MSM_PARAM_RAYTRACING: *value =3D adreno_gpu->has_ray_tracing; return 0; case MSM_PARAM_UBWC_SWIZZLE: - *value =3D adreno_gpu->ubwc_config.ubwc_swizzle; + *value =3D adreno_gpu->ubwc_config->ubwc_swizzle; return 0; case MSM_PARAM_MACROTILE_MODE: - *value =3D adreno_gpu->ubwc_config.macrotile_mode; + *value =3D adreno_gpu->ubwc_config->macrotile_mode; return 0; case MSM_PARAM_UCHE_TRAP_BASE: *value =3D adreno_gpu->uche_trap_base; diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index a2a211cac147cb5bc5befdcab07559b778adc2bb..e56a39df815f100caca945576de= 7cb55664980bc 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -207,45 +207,12 @@ struct adreno_gpu { /* firmware: */ const struct firmware *fw[ADRENO_FW_MAX]; =20 - struct { - /** - * @rgb565_predicator: Unknown, introduced with A650 family, - * related to UBWC mode/ver 4 - */ - u32 rgb565_predicator; - /** @uavflagprd_inv: Unknown, introduced with A650 family */ - u32 uavflagprd_inv; - /** @min_acc_len: Whether the minimum access length is 64 bits */ - u32 min_acc_len; - /** - * @ubwc_swizzle: Whether to enable level 1, 2 & 3 bank swizzling. - * - * UBWC 1.0 always enables all three levels. - * UBWC 2.0 removes level 1 bank swizzling, leaving levels 2 & 3. - * UBWC 4.0 adds the optional ability to disable levels 2 & 3. - * - * This is a bitmask where BIT(0) enables level 1, BIT(1) - * controls level 2, and BIT(2) enables level 3. - */ - u32 ubwc_swizzle; - /** - * @highest_bank_bit: Highest Bank Bit - * - * The Highest Bank Bit value represents the bit of the highest - * DDR bank. This should ideally use DRAM type detection. - */ - u32 highest_bank_bit; - u32 amsbc; - /** - * @macrotile_mode: Macrotile Mode - * - * Whether to use 4-channel macrotiling mode or the newer - * 8-channel macrotiling mode introduced in UBWC 3.1. 0 is - * 4-channel and 1 is 8-channel. - */ - u32 macrotile_mode; - } ubwc_config; - const struct qcom_ubwc_cfg_data *common_ubwc_cfg; + /* + * The migration to the central UBWC config db is still in flight - keep + * a copy containing some local fixups until that's done. + */ + const struct qcom_ubwc_cfg_data *ubwc_config; + struct qcom_ubwc_cfg_data _ubwc_config; =20 /* * Register offsets are different between some GPUs. --=20 2.50.0