msm_shared: mdp: fix 8084 under-run issues
MDP5 has various versions where each has different HW configuration.
Current vbif setup implementation is carrying invalid configuration
for apq8084 which leads to under-runs issues. Fix this issue by
removing targets where old vbif settings are not needed.
Change-Id: Icec5e09804947c984c1624988cfd61e1c7047d89
diff --git a/platform/msm_shared/include/mdp5.h b/platform/msm_shared/include/mdp5.h
index 1970cbb..51a14e4 100644
--- a/platform/msm_shared/include/mdp5.h
+++ b/platform/msm_shared/include/mdp5.h
@@ -64,10 +64,27 @@
#define LAYER_3_BLEND_OP 0xB0
#define LAYER_3_BLEND0_FG_ALPHA 0xB4
+/* HW Revisions for different MDSS targets */
+#define MDSS_GET_MAJOR(rev) ((rev) >> 28)
+#define MDSS_GET_MINOR(rev) (((rev) >> 16) & 0xFFF)
+#define MDSS_GET_STEP(rev) ((rev) & 0xFFFF)
+#define MDSS_GET_MAJOR_MINOR(rev) ((rev) >> 16)
-#define MDSS_MDP_HW_REV_100 0x10000000
-#define MDSS_MDP_HW_REV_101 0x10010000
-#define MDSS_MDP_HW_REV_102 0x10020000
+#define MDSS_IS_MAJOR_MINOR_MATCHING(a, b) \
+ (MDSS_GET_MAJOR_MINOR((a)) == MDSS_GET_MAJOR_MINOR((b)))
+
+#define MDSS_MDP_REV(major, minor, step) \
+ ((((major) & 0x000F) << 28) | \
+ (((minor) & 0x0FFF) << 16) | \
+ ((step) & 0xFFFF))
+
+#define MDSS_MDP_HW_REV_100 MDSS_MDP_REV(1, 0, 0) /* 8974 v1.0 */
+#define MDSS_MDP_HW_REV_101 MDSS_MDP_REV(1, 1, 0) /* 8x26 v1.0 */
+#define MDSS_MDP_HW_REV_101_1 MDSS_MDP_REV(1, 1, 1) /* 8x26 v2.0, 8926 v1.0 */
+#define MDSS_MDP_HW_REV_102 MDSS_MDP_REV(1, 2, 0) /* 8974 v2.0 */
+#define MDSS_MDP_HW_REV_102_1 MDSS_MDP_REV(1, 2, 1) /* 8974 v3.0 (Pro) */
+#define MDSS_MDP_HW_REV_103 MDSS_MDP_REV(1, 3, 0) /* 8084 v1.0 */
+#define MDSS_MDP_HW_REV_200 MDSS_MDP_REV(2, 0, 0) /* 8092 v1.0 */
#define MDP_HW_REV REG_MDP(0x0100)
#define MDP_INTR_EN REG_MDP(0x0110)
diff --git a/platform/msm_shared/mdp5.c b/platform/msm_shared/mdp5.c
index e1b3f77..15c5e9c 100644
--- a/platform/msm_shared/mdp5.c
+++ b/platform/msm_shared/mdp5.c
@@ -124,12 +124,17 @@
* successfully unlocked. Ignore TZ return value till it's fixed */
if (!access_secure || 1) {
dprintf(SPEW, "MDSS VBIF registers unlocked by TZ.\n");
- /* Force VBIF Clocks on */
- writel(0x1, VBIF_VBIF_DDR_FORCE_CLK_ON);
- if (mdp_hw_rev == MDSS_MDP_HW_REV_100
- || mdp_hw_rev >= MDSS_MDP_HW_REV_102) {
- /* Configure DDR burst length */
+ /* Force VBIF Clocks on */
+ if (mdp_hw_rev < MDSS_MDP_HW_REV_103)
+ writel(0x1, VBIF_VBIF_DDR_FORCE_CLK_ON);
+
+ /*
+ * Following configuration is needed because on some versions,
+ * recommended reset values are not stored.
+ */
+ if (MDSS_IS_MAJOR_MINOR_MATCHING(mdp_hw_rev,
+ MDSS_MDP_HW_REV_100)) {
writel(0x00000707, VBIF_VBIF_DDR_OUT_MAX_BURST);
writel(0x00000030, VBIF_VBIF_DDR_ARB_CTRL );
writel(0x00000001, VBIF_VBIF_DDR_RND_RBN_QOS_ARB);
@@ -137,7 +142,8 @@
writel(0x0FFF0FFF, VBIF_VBIF_DDR_OUT_AX_AOOO);
writel(0x22222222, VBIF_VBIF_DDR_AXI_AMEMTYPE_CONF0);
writel(0x00002222, VBIF_VBIF_DDR_AXI_AMEMTYPE_CONF1);
- } else if (mdp_hw_rev >= MDSS_MDP_HW_REV_101) {
+ } else if (MDSS_IS_MAJOR_MINOR_MATCHING(mdp_hw_rev,
+ MDSS_MDP_HW_REV_101)) {
writel(0x00000707, VBIF_VBIF_DDR_OUT_MAX_BURST);
writel(0x00000003, VBIF_VBIF_DDR_ARB_CTRL);
}