Re: [PATCH] drm/i915: Remove unused underrun interrupt bits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 09-10-2024 13:05, Vivekanandan, Balasubramani wrote:
On 26.09.2024 10:52, Pottumuttu, Sai Teja wrote:
On 25-09-2024 19:33, Ville Syrjälä wrote:
On Wed, Sep 25, 2024 at 04:48:02PM +0530, Sai Teja Pottumuttu wrote:
Underrun recovery was defeatured and was never brought into usage.
Thus we can safely remove the interrupt register bits introduced by the
feature for detecting soft and hard underruns.

Signed-off-by: Sai Teja Pottumuttu <sai.teja.pottumuttu@xxxxxxxxx>
---
   .../gpu/drm/i915/display/intel_display_irq.c  | 19 +++----------------
   .../gpu/drm/i915/display/intel_display_irq.h  |  1 -
   .../drm/i915/display/intel_fifo_underrun.c    |  5 ++---
There's a lot more related stuff in that file.
Assuming that you are referring to the ICL_PIPE_STATUS register and the bits
added there to detect soft, hard, port underruns,
Is it only the underrun recovery defeatured? Do we have the reporting of
underruns caused downstream by the port/transcoder working?
Then it makes sense to me to still keep the Port/Transcoder underrun
reporting as it would help in debugging any underruns.
Still there would be stuff related to Hard/Soft underruns which can be
removed from the driver like those in function
icl_pipe_status_underrun_mask, printing of soft/hard underruns in
intel_cpu_fifo_underrun_irq_handler.

Regards,
Bala

The reporting is also de-featured. So, as part of the logging/reporting we had 4 things being reported and following are there statuses

1. PIPE_STATUS_SOFT_UNDERRUN_XELPD: This can safely be removed.
2. PIPE_STATUS_HARD_UNDERRUN_XELPD: This can be removed as well.
3. PIPE_STATUS_PORT_UNDERRUN_XELPD: This seems to be the problem, this is de-featured as well but currently is always set and thus the string "port" appears in the ci bugs. Removing this might cause duplications in ci bugs if it fails to understand that its the same bug even without "port". 4. PIPE_STATUS_UNDERRUN: This still tells that the underrun happened on the transcoder attached to this pipe. But then as far as I understand, the underrun interrupt itself tells that its an underrun on the transcoder so we need not use this bit specificially I believe. But then again removing this and the "transcoder" string there might cause ci issues.

So, we have two options here

1. Either just remove the SOFT/HARD underrun bits/reporting for now and remove the other ones at a later point of time. 2. Or remove all these bits and make sure CI doesn't start filing duplicate bugs.

What would be your suggestion here?


I have not removed those bits in this patch because we are logging these
bits in dmesg and specifically the PIPE_STATUS_PORT_UNDERRUN_XELPD,
PIPE_STATUS_UNDERRUN bits seems to be set always because of which "port,
transcoder" string appears in a lot of underrun issues filed by CI. I was
under an assumption that if we remove these bits and the log, it would
create trouble with CI filters and we might start seeing duplicates of the
existing issues as new issues. So, my plan was to remove those bits at some
later point.

What would be your suggestion? Should we remove them now itself and work
with CI to see that filters still detect the existing issues without "port,
transcoder" as well.

   drivers/gpu/drm/i915/i915_reg.h               |  2 --
   4 files changed, 5 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
index 6878dde85031..9d8a101b2415 100644
--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
@@ -1031,17 +1031,6 @@ static u32 gen8_de_pipe_flip_done_mask(struct drm_i915_private *i915)
   		return GEN8_PIPE_PRIMARY_FLIP_DONE;
   }
-u32 gen8_de_pipe_underrun_mask(struct drm_i915_private *dev_priv)
-{
-	u32 mask = GEN8_PIPE_FIFO_UNDERRUN;
-
-	if (DISPLAY_VER(dev_priv) >= 13)
-		mask |= XELPD_PIPE_SOFT_UNDERRUN |
-			XELPD_PIPE_HARD_UNDERRUN;
-
-	return mask;
-}
-
   static void gen8_read_and_ack_pch_irqs(struct drm_i915_private *i915, u32 *pch_iir, u32 *pica_iir)
   {
   	u32 pica_ier = 0;
@@ -1187,7 +1176,7 @@ void gen8_de_irq_handler(struct drm_i915_private *dev_priv, u32 master_ctl)
   		if (iir & GEN8_PIPE_CDCLK_CRC_DONE)
   			hsw_pipe_crc_irq_handler(dev_priv, pipe);
-		if (iir & gen8_de_pipe_underrun_mask(dev_priv))
+		if (iir & GEN8_PIPE_FIFO_UNDERRUN)
   			intel_cpu_fifo_underrun_irq_handler(dev_priv, pipe);
   		fault_errors = iir & gen8_de_pipe_fault_mask(dev_priv);
@@ -1607,8 +1596,7 @@ void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
   				     u8 pipe_mask)
   {
   	struct intel_uncore *uncore = &dev_priv->uncore;
-	u32 extra_ier = GEN8_PIPE_VBLANK |
-		gen8_de_pipe_underrun_mask(dev_priv) |
+	u32 extra_ier = GEN8_PIPE_VBLANK | GEN8_PIPE_FIFO_UNDERRUN |
   		gen8_de_pipe_flip_done_mask(dev_priv);
   	enum pipe pipe;
@@ -1797,8 +1785,7 @@ void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
   			GEN12_DSB_INT(INTEL_DSB_2);
   	de_pipe_enables = de_pipe_masked |
-		GEN8_PIPE_VBLANK |
-		gen8_de_pipe_underrun_mask(dev_priv) |
+		GEN8_PIPE_VBLANK | GEN8_PIPE_FIFO_UNDERRUN |
   		gen8_de_pipe_flip_done_mask(dev_priv);
   	de_port_enables = de_port_masked;
diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.h b/drivers/gpu/drm/i915/display/intel_display_irq.h
index 093e356a2894..1b3f559a0638 100644
--- a/drivers/gpu/drm/i915/display/intel_display_irq.h
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.h
@@ -33,7 +33,6 @@ void ibx_disable_display_interrupt(struct drm_i915_private *i915, u32 bits);
   void gen8_irq_power_well_post_enable(struct drm_i915_private *i915, u8 pipe_mask);
   void gen8_irq_power_well_pre_disable(struct drm_i915_private *i915, u8 pipe_mask);
-u32 gen8_de_pipe_underrun_mask(struct drm_i915_private *i915);
   int i8xx_enable_vblank(struct drm_crtc *crtc);
   int i915gm_enable_vblank(struct drm_crtc *crtc);
diff --git a/drivers/gpu/drm/i915/display/intel_fifo_underrun.c b/drivers/gpu/drm/i915/display/intel_fifo_underrun.c
index 745ce22afb89..fb01c128e1c5 100644
--- a/drivers/gpu/drm/i915/display/intel_fifo_underrun.c
+++ b/drivers/gpu/drm/i915/display/intel_fifo_underrun.c
@@ -209,7 +209,6 @@ static void bdw_set_fifo_underrun_reporting(struct drm_device *dev,
   					    enum pipe pipe, bool enable)
   {
   	struct drm_i915_private *dev_priv = to_i915(dev);
-	u32 mask = gen8_de_pipe_underrun_mask(dev_priv);
   	if (enable) {
   		if (DISPLAY_VER(dev_priv) >= 11)
@@ -217,9 +216,9 @@ static void bdw_set_fifo_underrun_reporting(struct drm_device *dev,
   				       ICL_PIPESTATUS(dev_priv, pipe),
   				       icl_pipe_status_underrun_mask(dev_priv));
-		bdw_enable_pipe_irq(dev_priv, pipe, mask);
+		bdw_enable_pipe_irq(dev_priv, pipe, GEN8_PIPE_FIFO_UNDERRUN);
   	} else {
-		bdw_disable_pipe_irq(dev_priv, pipe, mask);
+		bdw_disable_pipe_irq(dev_priv, pipe, GEN8_PIPE_FIFO_UNDERRUN);
   	}
   }
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 7396fc630e29..c379d875f432 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2491,9 +2491,7 @@
   #define  GEN12_PIPEDMC_INTERRUPT	REG_BIT(26) /* tgl+ */
   #define  GEN12_PIPEDMC_FAULT		REG_BIT(25) /* tgl+ */
   #define  MTL_PIPEDMC_ATS_FAULT		REG_BIT(24) /* mtl+ */
-#define  XELPD_PIPE_SOFT_UNDERRUN	REG_BIT(22) /* adl/dg2+ */
   #define  GEN11_PIPE_PLANE7_FAULT	REG_BIT(22) /* icl/tgl */
-#define  XELPD_PIPE_HARD_UNDERRUN	REG_BIT(21) /* adl/dg2+ */
   #define  GEN11_PIPE_PLANE6_FAULT	REG_BIT(21) /* icl/tgl */
   #define  GEN11_PIPE_PLANE5_FAULT	REG_BIT(20) /* icl+ */
   #define  GEN12_PIPE_VBLANK_UNMOD	REG_BIT(19) /* tgl+ */
--
2.34.1



[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux