]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/msm/dpu: Add RM support for allocating CWB
authorJessica Zhang <quic_jesszhan@quicinc.com>
Tue, 17 Dec 2024 00:43:25 +0000 (16:43 -0800)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tue, 24 Dec 2024 20:06:11 +0000 (22:06 +0200)
Add support for allocating the concurrent writeback mux as part of the
WB allocation

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/629238/
Link: https://lore.kernel.org/r/20241216-concurrent-wb-v4-14-fe220297a7f0@quicinc.com
drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h

index 7ebb7e4276ca7225be5e9ae65667e3dbc505cf07..5baf9df702b84b74ba00e703ad3cc12afb0e94a4 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #define pr_fmt(fmt)    "[drm:%s] " fmt, __func__
@@ -9,6 +9,7 @@
 #include "dpu_hw_lm.h"
 #include "dpu_hw_ctl.h"
 #include "dpu_hw_cdm.h"
+#include "dpu_hw_cwb.h"
 #include "dpu_hw_pingpong.h"
 #include "dpu_hw_sspp.h"
 #include "dpu_hw_intf.h"
@@ -122,6 +123,19 @@ int dpu_rm_init(struct drm_device *dev,
                rm->hw_wb[wb->id - WB_0] = hw;
        }
 
+       for (i = 0; i < cat->cwb_count; i++) {
+               struct dpu_hw_cwb *hw;
+               const struct dpu_cwb_cfg *cwb = &cat->cwb[i];
+
+               hw = dpu_hw_cwb_init(dev, cwb, mmio);
+               if (IS_ERR(hw)) {
+                       rc = PTR_ERR(hw);
+                       DPU_ERROR("failed cwb object creation: err %d\n", rc);
+                       goto fail;
+               }
+               rm->cwb_blks[cwb->id - CWB_0] = &hw->base;
+       }
+
        for (i = 0; i < cat->ctl_count; i++) {
                struct dpu_hw_ctl *hw;
                const struct dpu_ctl_cfg *ctl = &cat->ctl[i];
index 8f2f041fc70875c569debb068893f69293bfa7f4..99bd594ee0d1995eca5a1f661b15e24fdf6acf39 100644 (file)
@@ -20,6 +20,7 @@ struct dpu_global_state;
  * @ctl_blks: array of ctl hardware resources
  * @hw_intf: array of intf hardware resources
  * @hw_wb: array of wb hardware resources
+ * @hw_cwb: array of cwb hardware resources
  * @dspp_blks: array of dspp hardware resources
  * @hw_sspp: array of sspp hardware resources
  * @cdm_blk: cdm hardware resource
@@ -30,6 +31,7 @@ struct dpu_rm {
        struct dpu_hw_blk *ctl_blks[CTL_MAX - CTL_0];
        struct dpu_hw_intf *hw_intf[INTF_MAX - INTF_0];
        struct dpu_hw_wb *hw_wb[WB_MAX - WB_0];
+       struct dpu_hw_blk *cwb_blks[CWB_MAX - CWB_0];
        struct dpu_hw_blk *dspp_blks[DSPP_MAX - DSPP_0];
        struct dpu_hw_blk *merge_3d_blks[MERGE_3D_MAX - MERGE_3D_0];
        struct dpu_hw_blk *dsc_blks[DSC_MAX - DSC_0];