Skip to content

Commit b78956d

Browse files
Yuanjie Yanglumag
authored andcommitted
drm/msm/dpu: Add interrupt registers for DPU 13.0.0
DPU version 13.0.0 introduces changes to the interrupt register layout. Update the driver to support these modifications for proper interrupt handling. Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/698708/ Link: https://lore.kernel.org/r/20260115092749.533-9-yuanjie.yang@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
1 parent 2482c6f commit b78956d

1 file changed

Lines changed: 88 additions & 1 deletion

File tree

drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@
4040
#define MDP_INTF_REV_7xxx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x004)
4141
#define MDP_INTF_REV_7xxx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x008)
4242

43+
#define MDP_INTF_REV_13xx_OFF(intf) (0x18d000 + 0x1000 * (intf))
44+
#define MDP_INTF_REV_13xx_INTR_EN(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c0)
45+
#define MDP_INTF_REV_13xx_INTR_STATUS(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c4)
46+
#define MDP_INTF_REV_13xx_INTR_CLEAR(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c8)
47+
#define MDP_INTF_REV_13xx_TEAR_OFF(intf) (0x18d800 + 0x1000 * (intf))
48+
#define MDP_INTF_REV_13xx_INTR_TEAR_EN(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x000)
49+
#define MDP_INTF_REV_13xx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x004)
50+
#define MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x008)
51+
4352
/**
4453
* struct dpu_intr_reg - array of DPU register sets
4554
* @clr_off: offset to CLEAR reg
@@ -199,6 +208,82 @@ static const struct dpu_intr_reg dpu_intr_set_7xxx[] = {
199208
},
200209
};
201210

211+
/*
212+
* dpu_intr_set_13xx - List of DPU interrupt registers for DPU >= 13.0
213+
*/
214+
static const struct dpu_intr_reg dpu_intr_set_13xx[] = {
215+
[MDP_SSPP_TOP0_INTR] = {
216+
INTR_CLEAR,
217+
INTR_EN,
218+
INTR_STATUS
219+
},
220+
[MDP_SSPP_TOP0_INTR2] = {
221+
INTR2_CLEAR,
222+
INTR2_EN,
223+
INTR2_STATUS
224+
},
225+
[MDP_SSPP_TOP0_HIST_INTR] = {
226+
HIST_INTR_CLEAR,
227+
HIST_INTR_EN,
228+
HIST_INTR_STATUS
229+
},
230+
[MDP_INTF0_INTR] = {
231+
MDP_INTF_REV_13xx_INTR_CLEAR(0),
232+
MDP_INTF_REV_13xx_INTR_EN(0),
233+
MDP_INTF_REV_13xx_INTR_STATUS(0)
234+
},
235+
[MDP_INTF1_INTR] = {
236+
MDP_INTF_REV_13xx_INTR_CLEAR(1),
237+
MDP_INTF_REV_13xx_INTR_EN(1),
238+
MDP_INTF_REV_13xx_INTR_STATUS(1)
239+
},
240+
[MDP_INTF1_TEAR_INTR] = {
241+
MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(1),
242+
MDP_INTF_REV_13xx_INTR_TEAR_EN(1),
243+
MDP_INTF_REV_13xx_INTR_TEAR_STATUS(1)
244+
},
245+
[MDP_INTF2_INTR] = {
246+
MDP_INTF_REV_13xx_INTR_CLEAR(2),
247+
MDP_INTF_REV_13xx_INTR_EN(2),
248+
MDP_INTF_REV_13xx_INTR_STATUS(2)
249+
},
250+
[MDP_INTF2_TEAR_INTR] = {
251+
MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(2),
252+
MDP_INTF_REV_13xx_INTR_TEAR_EN(2),
253+
MDP_INTF_REV_13xx_INTR_TEAR_STATUS(2)
254+
},
255+
[MDP_INTF3_INTR] = {
256+
MDP_INTF_REV_13xx_INTR_CLEAR(3),
257+
MDP_INTF_REV_13xx_INTR_EN(3),
258+
MDP_INTF_REV_13xx_INTR_STATUS(3)
259+
},
260+
[MDP_INTF4_INTR] = {
261+
MDP_INTF_REV_13xx_INTR_CLEAR(4),
262+
MDP_INTF_REV_13xx_INTR_EN(4),
263+
MDP_INTF_REV_13xx_INTR_STATUS(4)
264+
},
265+
[MDP_INTF5_INTR] = {
266+
MDP_INTF_REV_13xx_INTR_CLEAR(5),
267+
MDP_INTF_REV_13xx_INTR_EN(5),
268+
MDP_INTF_REV_13xx_INTR_STATUS(5)
269+
},
270+
[MDP_INTF6_INTR] = {
271+
MDP_INTF_REV_13xx_INTR_CLEAR(6),
272+
MDP_INTF_REV_13xx_INTR_EN(6),
273+
MDP_INTF_REV_13xx_INTR_STATUS(6)
274+
},
275+
[MDP_INTF7_INTR] = {
276+
MDP_INTF_REV_13xx_INTR_CLEAR(7),
277+
MDP_INTF_REV_13xx_INTR_EN(7),
278+
MDP_INTF_REV_13xx_INTR_STATUS(7)
279+
},
280+
[MDP_INTF8_INTR] = {
281+
MDP_INTF_REV_13xx_INTR_CLEAR(8),
282+
MDP_INTF_REV_13xx_INTR_EN(8),
283+
MDP_INTF_REV_13xx_INTR_STATUS(8)
284+
},
285+
};
286+
202287
#define DPU_IRQ_MASK(irq_idx) (BIT(DPU_IRQ_BIT(irq_idx)))
203288

204289
static inline bool dpu_core_irq_is_valid(unsigned int irq_idx)
@@ -507,7 +592,9 @@ struct dpu_hw_intr *dpu_hw_intr_init(struct drm_device *dev,
507592
if (!intr)
508593
return ERR_PTR(-ENOMEM);
509594

510-
if (m->mdss_ver->core_major_ver >= 7)
595+
if (m->mdss_ver->core_major_ver >= 13)
596+
intr->intr_set = dpu_intr_set_13xx;
597+
else if (m->mdss_ver->core_major_ver >= 7)
511598
intr->intr_set = dpu_intr_set_7xxx;
512599
else
513600
intr->intr_set = dpu_intr_set_legacy;

0 commit comments

Comments
 (0)