From: Konrad Dybcio <konrad.dybcio@linaro.org>
To: Rob Clark <robdclark@gmail.com>,
Abhinav Kumar <quic_abhinavk@quicinc.com>,
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Sean Paul <sean@poorly.run>, David Airlie <airlied@gmail.com>,
Daniel Vetter <daniel@ffwll.ch>, Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@somainline.org>,
Akhil P Oommen <quic_akhilpo@quicinc.com>
Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
freedreno@lists.freedesktop.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, Rob Clark <robdclark@chromium.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>
Subject: [PATCH v3 04/15] drm/msm/a6xx: Extend and explain UBWC config
Date: Thu, 23 Feb 2023 13:06:38 +0100 [thread overview]
Message-ID: <20230223-topic-gmuwrapper-v3-4-5be55a336819@linaro.org> (raw)
In-Reply-To: <20230223-topic-gmuwrapper-v3-0-5be55a336819@linaro.org>
Rename lower_bit to hbb_lo and explain what it signifies.
Add explanations (wherever possible to other tunables).
Sort the variable definition and assignment alphabetically.
Port setting min_access_length, ubwc_mode and hbb_hi from downstream.
Set default values for all of the tunables to zero, as they should be.
Values were validated against downstream and will be fixed up in
separate commits so as not to make this one even more messy.
A618 remains untouched (left at hw defaults) in this patch.
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 55 ++++++++++++++++++++++++++++-------
1 file changed, 45 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index c5f5d0bb3fdc..bdae341e0a7c 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -786,39 +786,74 @@ static void a6xx_set_cp_protect(struct msm_gpu *gpu)
static void a6xx_set_ubwc_config(struct msm_gpu *gpu)
{
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
- u32 lower_bit = 2;
+ /* Unknown, introduced with A640/680 */
u32 amsbc = 0;
+ /*
+ * The Highest Bank Bit value represents the bit of the highest DDR bank.
+ * We then subtract 13 from it (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. The default values (when HBB is
+ * not specified) are 0, 0.
+ */
+ u32 hbb_hi = 0;
+ u32 hbb_lo = 0;
+ /* Whether the minimum access length is 64 bits */
+ u32 min_acc_len = 0;
+ /* Unknown, introduced with A650 family, related to UBWC mode/ver 4 */
u32 rgb565_predicator = 0;
+ /* Unknown, introduced with A650 family */
u32 uavflagprd_inv = 0;
+ /* Entirely magic, per-GPU-gen value */
+ u32 ubwc_mode = 0;
/* a618 is using the hw default values */
if (adreno_is_a618(adreno_gpu))
return;
- if (adreno_is_a640_family(adreno_gpu))
+ if (adreno_is_a619(adreno_gpu)) {
+ /* HBB = 14 */
+ hbb_lo = 1;
+ }
+
+ if (adreno_is_a630(adreno_gpu)) {
+ /* HBB = 15 */
+ hbb_lo = 2;
+ }
+
+ if (adreno_is_a640_family(adreno_gpu)) {
amsbc = 1;
+ /* HBB = 15 */
+ hbb_lo = 2;
+ }
if (adreno_is_a650(adreno_gpu) || adreno_is_a660(adreno_gpu)) {
- /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */
- lower_bit = 3;
amsbc = 1;
+ /* TODO: get ddr type from bootloader and use 2 for LPDDR4 */
+ /* HBB = 16 */
+ hbb_lo = 3;
rgb565_predicator = 1;
uavflagprd_inv = 2;
}
if (adreno_is_7c3(adreno_gpu)) {
- lower_bit = 1;
amsbc = 1;
+ /* HBB is unset in downstream DTS, defaulting to 0 */
rgb565_predicator = 1;
uavflagprd_inv = 2;
}
gpu_write(gpu, REG_A6XX_RB_NC_MODE_CNTL,
- rgb565_predicator << 11 | amsbc << 4 | lower_bit << 1);
- gpu_write(gpu, REG_A6XX_TPL1_NC_MODE_CNTL, lower_bit << 1);
- gpu_write(gpu, REG_A6XX_SP_NC_MODE_CNTL,
- uavflagprd_inv << 4 | lower_bit << 1);
- gpu_write(gpu, REG_A6XX_UCHE_MODE_CNTL, lower_bit << 21);
+ rgb565_predicator << 11 | hbb_hi << 10 | amsbc << 4 |
+ min_acc_len << 3 | hbb_lo << 1 | ubwc_mode);
+
+ gpu_write(gpu, REG_A6XX_TPL1_NC_MODE_CNTL, hbb_hi << 4 |
+ min_acc_len << 3 | hbb_lo << 1 | ubwc_mode);
+
+ gpu_write(gpu, REG_A6XX_SP_NC_MODE_CNTL, hbb_hi << 10 |
+ uavflagprd_inv << 4 | min_acc_len << 3 |
+ hbb_lo << 1 | ubwc_mode);
+
+ gpu_write(gpu, REG_A6XX_UCHE_MODE_CNTL, min_acc_len << 23 | hbb_lo << 21);
}
static int a6xx_cp_init(struct msm_gpu *gpu)
--
2.39.2
next prev parent reply other threads:[~2023-02-23 12:06 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-23 12:06 [PATCH v3 00/15] GMU-less A6xx support (A610, A619_holi) Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 01/15] dt-bindings: display/msm: gpu: Document GMU wrapper-equipped A6xx Konrad Dybcio
2023-02-23 12:08 ` Konrad Dybcio
2023-02-24 11:17 ` Krzysztof Kozlowski
2023-02-24 11:51 ` Konrad Dybcio
2023-02-24 12:54 ` Krzysztof Kozlowski
2023-02-23 12:06 ` [PATCH v3 02/15] dt-bindings: display/msm/gmu: Add GMU wrapper Konrad Dybcio
2023-02-24 11:19 ` Krzysztof Kozlowski
2023-02-24 11:50 ` Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 03/15] drm/msm/a6xx: Remove static keyword from sptprac en/disable functions Konrad Dybcio
2023-02-23 12:06 ` Konrad Dybcio [this message]
2023-02-28 20:23 ` [PATCH v3 04/15] drm/msm/a6xx: Extend and explain UBWC config Akhil P Oommen
2023-02-28 20:40 ` Konrad Dybcio
2023-02-28 20:44 ` Akhil P Oommen
2023-02-28 20:48 ` [Freedreno] " Akhil P Oommen
2023-02-28 21:22 ` Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 05/15] drm/msm/a6xx: Introduce GMU wrapper support Konrad Dybcio
2023-02-23 14:43 ` Dmitry Baryshkov
2023-02-23 14:46 ` Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 06/15] drm/msm/a6xx: Remove both GBIF and RBBM GBIF halt on hw init Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 07/15] drm/msm/adreno: Disable has_cached_coherent in GMU wrapper configurations Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 08/15] drm/msm/a6xx: Add support for A619_holi Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 09/15] drm/msm/a6xx: Add A610 support Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 10/15] drm/msm/a6xx: Fix A680 highest bank bit value Konrad Dybcio
2023-02-23 13:06 ` Dmitry Baryshkov
2023-02-23 13:49 ` Konrad Dybcio
2023-02-23 14:48 ` Dmitry Baryshkov
2023-02-23 14:51 ` Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 11/15] drm/msm/a6xx: Fix some A619 tunables Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 12/15] drm/msm/a6xx: Use "else if" in GPU speedbin rev matching Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 13/15] drm/msm/a6xx: Use adreno_is_aXYZ macros in speedbin matching Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 14/15] drm/msm/a6xx: Add A619_holi speedbin support Konrad Dybcio
2023-02-23 12:06 ` [PATCH v3 15/15] drm/msm/a6xx: Add A610 " Konrad Dybcio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230223-topic-gmuwrapper-v3-4-5be55a336819@linaro.org \
--to=konrad.dybcio@linaro.org \
--cc=airlied@gmail.com \
--cc=andersson@kernel.org \
--cc=daniel@ffwll.ch \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=konrad.dybcio@somainline.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=quic_abhinavk@quicinc.com \
--cc=quic_akhilpo@quicinc.com \
--cc=robdclark@chromium.org \
--cc=robdclark@gmail.com \
--cc=robh+dt@kernel.org \
--cc=sean@poorly.run \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).