Not finished. Looking around, maybe someone already did some works
around new CTL_PIPE_ACTIVE and CTL_LAYER_ACTIVE registers?

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlow...@linaro.org>
---
 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_0_sm8750.h | 12 ++++++------
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c          |  3 +++
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h          |  3 +++
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c              | 10 ++++++++--
 4 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_0_sm8750.h 
b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_0_sm8750.h
index 
b093f6e529f6d5f4a4b600d766cefb509619a3c1..df1ebb797959a67055acccd65137e4f1e342cd79
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_0_sm8750.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_0_sm8750.h
@@ -33,32 +33,32 @@ static const struct dpu_ctl_cfg sm8750_ctl[] = {
        {
                .name = "ctl_0", .id = CTL_0,
                .base = 0x15000, .len = 0x1000,
-               .features = CTL_SM8550_MASK | BIT(DPU_CTL_SPLIT_DISPLAY),
+               .features = CTL_SM8750_MASK | BIT(DPU_CTL_SPLIT_DISPLAY),
                .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
        }, {
                .name = "ctl_1", .id = CTL_1,
                .base = 0x16000, .len = 0x1000,
-               .features = CTL_SM8550_MASK | BIT(DPU_CTL_SPLIT_DISPLAY),
+               .features = CTL_SM8750_MASK | BIT(DPU_CTL_SPLIT_DISPLAY),
                .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
        }, {
                .name = "ctl_2", .id = CTL_2,
                .base = 0x17000, .len = 0x1000,
-               .features = CTL_SM8550_MASK,
+               .features = CTL_SM8750_MASK,
                .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
        }, {
                .name = "ctl_3", .id = CTL_3,
                .base = 0x18000, .len = 0x1000,
-               .features = CTL_SM8550_MASK,
+               .features = CTL_SM8750_MASK,
                .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
        }, {
                .name = "ctl_4", .id = CTL_4,
                .base = 0x19000, .len = 0x1000,
-               .features = CTL_SM8550_MASK,
+               .features = CTL_SM8750_MASK,
                .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
        }, {
                .name = "ctl_5", .id = CTL_5,
                .base = 0x1a000, .len = 0x1000,
-               .features = CTL_SM8550_MASK,
+               .features = CTL_SM8750_MASK,
                .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
        },
 };
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 
40966ab6283e666d1f113a62ada50298de68833b..8e938455459119708967e9c02a84042f3962ead1
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -119,6 +119,9 @@
 #define CTL_SM8550_MASK \
        (CTL_SC7280_MASK | BIT(DPU_CTL_HAS_LAYER_EXT4))
 
+#define CTL_SM8750_MASK \
+       (CTL_SC7280_MASK | BIT(DPU_CTL_NO_LAYER_EXT))
+
 #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
 
 #define INTF_SC7180_MASK \
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index 
1bd313f2c6f199d5eefcdaa5f7c18ea512d48684..0231849b9c86662b44a0c133c87a64d9af047e7f
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -137,6 +137,8 @@ enum {
  * @DPU_CTL_FETCH_ACTIVE:      Active CTL for fetch HW (SSPPs)
  * @DPU_CTL_VM_CFG:            CTL config to support multiple VMs
  * @DPU_CTL_HAS_LAYER_EXT4:    CTL has the CTL_LAYER_EXT4 register
+ * @DPU_CTL_NO_LAYER_EXT:      CTL has no CTL_LAYER_EXT registers at all, but
+ *                              has active bits for pipes and layer mixers
  * @DPU_CTL_DSPP_BLOCK_FLUSH:  CTL config to support dspp sub-block flush
  * @DPU_CTL_MAX
  */
@@ -146,6 +148,7 @@ enum {
        DPU_CTL_FETCH_ACTIVE,
        DPU_CTL_VM_CFG,
        DPU_CTL_HAS_LAYER_EXT4,
+       DPU_CTL_NO_LAYER_EXT,
        DPU_CTL_DSPP_SUB_BLOCK_FLUSH,
        DPU_CTL_MAX
 };
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
index 
06b01cd36ce2442ee6e1b85be227851a234cc96b..502449cbbddcb21b7008f139ac065d187a16b68e
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
@@ -40,6 +40,8 @@
 #define   CTL_INTF_FLUSH                0x110
 #define   CTL_CDM_FLUSH                0x114
 #define   CTL_PERIPH_FLUSH              0x128
+#define   CTL_PIPE_ACTIVE               0x12C
+#define   CTL_LAYER_ACTIVE              0x130
 #define   CTL_INTF_MASTER               0x134
 #define   CTL_DSPP_n_FLUSH(n)           ((0x13C) + ((n) * 4))
 
@@ -729,8 +731,12 @@ static void _setup_ctl_ops(struct dpu_hw_ctl_ops *ops,
        ops->trigger_pending = dpu_hw_ctl_trigger_pending;
        ops->reset = dpu_hw_ctl_reset_control;
        ops->wait_reset_status = dpu_hw_ctl_wait_reset_status;
-       ops->clear_all_blendstages = dpu_hw_ctl_clear_all_blendstages;
-       ops->setup_blendstage = dpu_hw_ctl_setup_blendstage;
+       if (cap & BIT(DPU_CTL_NO_LAYER_EXT)) {
+               // TODO: NOT COMPLETE, This has to be implemented
+       } else {
+               ops->clear_all_blendstages = dpu_hw_ctl_clear_all_blendstages;
+               ops->setup_blendstage = dpu_hw_ctl_setup_blendstage;
+       }
        ops->update_pending_flush_sspp = dpu_hw_ctl_update_pending_flush_sspp;
        ops->update_pending_flush_mixer = dpu_hw_ctl_update_pending_flush_mixer;
        if (cap & BIT(DPU_CTL_DSPP_SUB_BLOCK_FLUSH))

-- 
2.43.0

Reply via email to