Rather than hand-coding UBWC_STATIC value calculation, define
corresponding bitfields and use them to setup the register value.

Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---
 drivers/gpu/drm/msm/msm_mdss.c                 | 36 +++++++++++++++-----------
 drivers/gpu/drm/msm/msm_mdss.h                 |  3 ++-
 drivers/gpu/drm/msm/registers/display/mdss.xml | 11 +++++++-
 3 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
index ca9b7f953ac4..7704e1c9eb2a 100644
--- a/drivers/gpu/drm/msm/msm_mdss.c
+++ b/drivers/gpu/drm/msm/msm_mdss.c
@@ -173,15 +173,17 @@ static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss 
*msm_mdss)
 static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss *msm_mdss)
 {
        const struct msm_mdss_data *data = msm_mdss->mdss_data;
-       u32 value = (data->ubwc_swizzle & 0x1) |
-                   (data->highest_bank_bit & 0x3) << 4 |
-                   (data->macrotile_mode & 0x1) << 12;
+       u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle & 0x1) |
+                   MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit);
+
+       if (data->macrotile_mode)
+               value |= MDSS_UBWC_STATIC_MACROTILE_MODE;
 
        if (data->ubwc_enc_version == UBWC_3_0)
-               value |= BIT(10);
+               value |= MDSS_UBWC_STATIC_UNKNOWN_10;
 
        if (data->ubwc_enc_version == UBWC_1_0)
-               value |= BIT(8);
+               value |= MDSS_UBWC_STATIC_UNKNOWN_8;
 
        writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC);
 }
@@ -189,10 +191,14 @@ static void msm_mdss_setup_ubwc_dec_30(struct msm_mdss 
*msm_mdss)
 static void msm_mdss_setup_ubwc_dec_40(struct msm_mdss *msm_mdss)
 {
        const struct msm_mdss_data *data = msm_mdss->mdss_data;
-       u32 value = (data->ubwc_swizzle & 0x7) |
-                   (data->ubwc_static & 0x1) << 3 |
-                   (data->highest_bank_bit & 0x7) << 4 |
-                   (data->macrotile_mode & 0x1) << 12;
+       u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) |
+                   MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit);
+
+       if (data->unknown_3)
+               value |= MDSS_UBWC_STATIC_UNKNOWN_3;
+
+       if (data->macrotile_mode)
+               value |= MDSS_UBWC_STATIC_MACROTILE_MODE;
 
        writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC);
 
@@ -580,7 +586,7 @@ static const struct msm_mdss_data sc7280_data = {
        .ubwc_enc_version = UBWC_3_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
-       .ubwc_static = 1,
+       .unknown_3 = true,
        .highest_bank_bit = 1,
        .macrotile_mode = 1,
        .reg_bus_bw = 74000,
@@ -598,7 +604,7 @@ static const struct msm_mdss_data sc8280xp_data = {
        .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
-       .ubwc_static = 1,
+       .unknown_3 = true,
        .highest_bank_bit = 3,
        .macrotile_mode = 1,
        .reg_bus_bw = 76800,
@@ -661,7 +667,7 @@ static const struct msm_mdss_data sm8250_data = {
        .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
-       .ubwc_static = 1,
+       .unknown_3 = true,
        /* TODO: highest_bank_bit = 2 for LP_DDR4 */
        .highest_bank_bit = 3,
        .macrotile_mode = 1,
@@ -672,7 +678,7 @@ static const struct msm_mdss_data sm8350_data = {
        .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
-       .ubwc_static = 1,
+       .unknown_3 = true,
        /* TODO: highest_bank_bit = 2 for LP_DDR4 */
        .highest_bank_bit = 3,
        .macrotile_mode = 1,
@@ -683,7 +689,7 @@ static const struct msm_mdss_data sm8550_data = {
        .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_3,
        .ubwc_swizzle = 6,
-       .ubwc_static = 1,
+       .unknown_3 = true,
        /* TODO: highest_bank_bit = 2 for LP_DDR4 */
        .highest_bank_bit = 3,
        .macrotile_mode = 1,
@@ -694,7 +700,7 @@ static const struct msm_mdss_data x1e80100_data = {
        .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_3,
        .ubwc_swizzle = 6,
-       .ubwc_static = 1,
+       .unknown_3 = true,
        /* TODO: highest_bank_bit = 2 for LP_DDR4 */
        .highest_bank_bit = 3,
        .macrotile_mode = 1,
diff --git a/drivers/gpu/drm/msm/msm_mdss.h b/drivers/gpu/drm/msm/msm_mdss.h
index 3afef4b1786d..69095c18ab4a 100644
--- a/drivers/gpu/drm/msm/msm_mdss.h
+++ b/drivers/gpu/drm/msm/msm_mdss.h
@@ -13,7 +13,8 @@ struct msm_mdss_data {
        u32 ubwc_swizzle;
        u32 ubwc_static;
        u32 highest_bank_bit;
-       u32 macrotile_mode;
+       bool unknown_3;
+       bool macrotile_mode;
        u32 reg_bus_bw;
 };
 
diff --git a/drivers/gpu/drm/msm/registers/display/mdss.xml 
b/drivers/gpu/drm/msm/registers/display/mdss.xml
index ac85caf1575c..57c0bdf2ef65 100644
--- a/drivers/gpu/drm/msm/registers/display/mdss.xml
+++ b/drivers/gpu/drm/msm/registers/display/mdss.xml
@@ -21,7 +21,16 @@ 
xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
 
        <reg32 offset="0x00058" name="UBWC_DEC_HW_VERSION"/>
 
-       <reg32 offset="0x00144" name="UBWC_STATIC"/>
+       <reg32 offset="0x00144" name="UBWC_STATIC">
+               <bitfield name="UBWC_SWIZZLE" low="0" high="2"/>
+               <bitfield name="UNKNOWN_3" pos="3"/>
+               <!-- high=5 for UBWC < 4.0 -->
+               <bitfield name="HIGHEST_BANK_BIT" low="4" high="6"/>
+               <bitfield name="UNKNOWN_8" pos="8"/>
+               <bitfield name="UNKNOWN_10" pos="10"/>
+               <bitfield name="MACROTILE_MODE" pos="12"/>
+       </reg32>
+
        <reg32 offset="0x00150" name="UBWC_CTRL_2"/>
        <reg32 offset="0x00154" name="UBWC_PREDICTION_MODE"/>
 </domain>

-- 
2.39.5

Reply via email to