Эх сурвалжийг харах

disp: msm: sde: fix UBWC decoder version support for Kalama

Add support for detecting UBWC decoder version and program
UBWC configuration to hardware.

Change-Id: Ibe753d35ca46b069de8392c65a3b06131b7e238a
Signed-off-by: Amine Najahi <[email protected]>
Amine Najahi 3 жил өмнө
parent
commit
1aacef1e1d

+ 3 - 0
msm/sde/sde_hw_catalog.h

@@ -169,6 +169,7 @@ enum {
 	SDE_HW_UBWC_VER_20 = SDE_HW_UBWC_VER(0x200),
 	SDE_HW_UBWC_VER_30 = SDE_HW_UBWC_VER(0x300),
 	SDE_HW_UBWC_VER_40 = SDE_HW_UBWC_VER(0x400),
+	SDE_HW_UBWC_VER_43 = SDE_HW_UBWC_VER(0x431),
 };
 #define IS_UBWC_10_SUPPORTED(rev) \
 		IS_SDE_MAJOR_MINOR_SAME((rev), SDE_HW_UBWC_VER_10)
@@ -178,6 +179,8 @@ enum {
 		IS_SDE_MAJOR_MINOR_SAME((rev), SDE_HW_UBWC_VER_30)
 #define IS_UBWC_40_SUPPORTED(rev) \
 		IS_SDE_MAJOR_SAME((rev), SDE_HW_UBWC_VER_40)
+#define IS_UBWC_43_SUPPORTED(rev) \
+		IS_SDE_MAJOR_MINOR_SAME((rev), SDE_HW_UBWC_VER_43)
 
 /**
  * Supported system cache settings

+ 13 - 10
msm/sde/sde_hw_top.c

@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
+ * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
  */
 
@@ -312,7 +313,8 @@ static void sde_hw_setup_vsync_source_v1(struct sde_hw_mdp *mdp,
 void sde_hw_reset_ubwc(struct sde_hw_mdp *mdp, struct sde_mdss_cfg *m)
 {
 	struct sde_hw_blk_reg_map c;
-	u32 ubwc_rev;
+	u32 ubwc_dec_version;
+	u32 ubwc_enc_version;
 
 	if (!mdp || !m)
 		return;
@@ -320,17 +322,18 @@ void sde_hw_reset_ubwc(struct sde_hw_mdp *mdp, struct sde_mdss_cfg *m)
 	/* force blk offset to zero to access beginning of register region */
 	c = mdp->hw;
 	c.blk_off = 0x0;
-	ubwc_rev = SDE_REG_READ(&c, UBWC_DEC_HW_VERSION);
+	ubwc_dec_version = SDE_REG_READ(&c, UBWC_DEC_HW_VERSION);
+	ubwc_enc_version = m->ubwc_rev;
 
-	if (IS_UBWC_40_SUPPORTED(ubwc_rev)) {
-		u32 ver = 2;
+	if (IS_UBWC_40_SUPPORTED(ubwc_dec_version) || IS_UBWC_43_SUPPORTED(ubwc_dec_version)) {
+		u32 ver = IS_UBWC_43_SUPPORTED(ubwc_dec_version) ? 3 : 2;
 		u32 mode = 1;
 		u32 reg = (m->mdp[0].ubwc_swizzle & 0x7) |
 			((m->mdp[0].ubwc_static & 0x1) << 3) |
 			((m->mdp[0].highest_bank_bit & 0x7) << 4) |
 			((m->macrotile_mode & 0x1) << 12);
 
-		if (IS_UBWC_30_SUPPORTED(m->ubwc_rev)) {
+		if (IS_UBWC_30_SUPPORTED(ubwc_enc_version)) {
 			ver = 1;
 			mode = 0;
 		}
@@ -338,22 +341,22 @@ void sde_hw_reset_ubwc(struct sde_hw_mdp *mdp, struct sde_mdss_cfg *m)
 		SDE_REG_WRITE(&c, UBWC_STATIC, reg);
 		SDE_REG_WRITE(&c, UBWC_CTRL_2, ver);
 		SDE_REG_WRITE(&c, UBWC_PREDICTION_MODE, mode);
-	} else if (IS_UBWC_20_SUPPORTED(ubwc_rev)) {
+	} else if (IS_UBWC_20_SUPPORTED(ubwc_dec_version)) {
 		SDE_REG_WRITE(&c, UBWC_STATIC, m->mdp[0].ubwc_static);
-	} else if (IS_UBWC_30_SUPPORTED(ubwc_rev)) {
+	} else if (IS_UBWC_30_SUPPORTED(ubwc_dec_version)) {
 		u32 reg = m->mdp[0].ubwc_static |
 			(m->mdp[0].ubwc_swizzle & 0x1) |
 			((m->mdp[0].highest_bank_bit & 0x3) << 4) |
 			((m->macrotile_mode & 0x1) << 12);
 
-		if (IS_UBWC_30_SUPPORTED(m->ubwc_rev))
+		if (IS_UBWC_30_SUPPORTED(ubwc_enc_version))
 			reg |= BIT(10);
-		if (IS_UBWC_10_SUPPORTED(m->ubwc_rev))
+		if (IS_UBWC_10_SUPPORTED(ubwc_enc_version))
 			reg |= BIT(8);
 
 		SDE_REG_WRITE(&c, UBWC_STATIC, reg);
 	} else {
-		SDE_ERROR("Unsupported UBWC version 0x%08x\n", ubwc_rev);
+		SDE_ERROR("unsupported ubwc decoder version 0x%08x\n", ubwc_dec_version);
 	}
 }