* [PATCH v3 01/15] drm/i915/vrr: Fix the adjustment for the fixed rr vtotal for Display < 13
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 02/15] drm/i915/vrr: Refactor vmin/vmax stuff Mitul Golani
` (15 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Correct the adjustment required for fixed refresh rate mode for Display
< 13. The vblank delay must be added and not subtracted to get the fixed
rr vtotal.
Fixes: bef1e60c7087 ("drm/i915/vrr: Prepare for fixed refresh rate timings")
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index c6565baf815a..45445198129f 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -263,7 +263,7 @@ int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state)
if (DISPLAY_VER(display) >= 13)
return crtc_vtotal;
else
- return crtc_vtotal -
+ return crtc_vtotal +
intel_vrr_real_vblank_delay(crtc_state);
}
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 02/15] drm/i915/vrr: Refactor vmin/vmax stuff
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
2025-04-28 6:20 ` [PATCH v3 01/15] drm/i915/vrr: Fix the adjustment for the fixed rr vtotal for Display < 13 Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 03/15] drm/i915/display: Add source param for dc balance Mitul Golani
` (14 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Refactor vmin/vmax functions for better computation.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 41 +++++++++++-------------
1 file changed, 19 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 45445198129f..adfd231eb578 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -146,37 +146,41 @@ static int intel_vrr_vblank_exit_length(const struct intel_crtc_state *crtc_stat
return crtc_state->vrr.pipeline_full + crtc_state->framestart_delay + 1;
}
-int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state)
+static int intel_vrr_vtotal(const struct intel_crtc_state *crtc_state, int vmin_vmax)
{
struct intel_display *display = to_intel_display(crtc_state);
- /* Min vblank actually determined by flipline */
if (DISPLAY_VER(display) >= 13)
- return intel_vrr_vmin_flipline(crtc_state);
+ return vmin_vmax;
else
- return intel_vrr_vmin_flipline(crtc_state) +
- intel_vrr_real_vblank_delay(crtc_state);
+ return vmin_vmax + intel_vrr_real_vblank_delay(crtc_state);
}
-int intel_vrr_vmax_vtotal(const struct intel_crtc_state *crtc_state)
+static int intel_vrr_vblank_start(const struct intel_crtc_state *crtc_state,
+ int vmin_vmax)
{
- struct intel_display *display = to_intel_display(crtc_state);
+ return intel_vrr_vtotal(crtc_state, vmin_vmax) -
+ intel_vrr_vblank_exit_length(crtc_state);
+}
- if (DISPLAY_VER(display) >= 13)
- return crtc_state->vrr.vmax;
- else
- return crtc_state->vrr.vmax +
- intel_vrr_real_vblank_delay(crtc_state);
+int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state)
+{
+ return intel_vrr_vtotal(crtc_state, intel_vrr_vmin_flipline(crtc_state));
+}
+
+int intel_vrr_vmax_vtotal(const struct intel_crtc_state *crtc_state)
+{
+ return intel_vrr_vtotal(crtc_state, crtc_state->vrr.vmax);
}
int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state)
{
- return intel_vrr_vmin_vtotal(crtc_state) - intel_vrr_vblank_exit_length(crtc_state);
+ return intel_vrr_vblank_start(crtc_state, intel_vrr_vmin_flipline(crtc_state));
}
int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state)
{
- return intel_vrr_vmax_vtotal(crtc_state) - intel_vrr_vblank_exit_length(crtc_state);
+ return intel_vrr_vblank_start(crtc_state, crtc_state->vrr.vmax);
}
static bool
@@ -257,14 +261,7 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
static
int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state)
{
- struct intel_display *display = to_intel_display(crtc_state);
- int crtc_vtotal = crtc_state->hw.adjusted_mode.crtc_vtotal;
-
- if (DISPLAY_VER(display) >= 13)
- return crtc_vtotal;
- else
- return crtc_vtotal +
- intel_vrr_real_vblank_delay(crtc_state);
+ return intel_vrr_vtotal(crtc_state, crtc_state->hw.adjusted_mode.crtc_vtotal);
}
static
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 03/15] drm/i915/display: Add source param for dc balance
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
2025-04-28 6:20 ` [PATCH v3 01/15] drm/i915/vrr: Fix the adjustment for the fixed rr vtotal for Display < 13 Mitul Golani
2025-04-28 6:20 ` [PATCH v3 02/15] drm/i915/vrr: Refactor vmin/vmax stuff Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 12:59 ` Nautiyal, Ankit K
2025-04-28 6:20 ` [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance Mitul Golani
` (13 subsequent siblings)
16 siblings, 1 reply; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Add source param for dc balance enablement further.
--v2:
- Arrange in alphabetic order. (Ankit)
- Update name. (Ankit)
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_device.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h
index 87c666792c0d..fd886e1283f1 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.h
+++ b/drivers/gpu/drm/i915/display/intel_display_device.h
@@ -193,6 +193,7 @@ struct intel_display_platforms {
((__display)->platform.dgfx && DISPLAY_VER(__display) == 14)) && \
HAS_DSC(__display))
#define HAS_VRR(__display) (DISPLAY_VER(__display) >= 11)
+#define HAS_VRR_DC_BALANCE(__display) (DISPLAY_VER(__display) >= 30)
#define INTEL_NUM_PIPES(__display) (hweight8(DISPLAY_RUNTIME_INFO(__display)->pipe_mask))
#define OVERLAY_NEEDS_PHYSICAL(__display) (DISPLAY_INFO(__display)->overlay_needs_physical)
#define SUPPORTS_TV(__display) (DISPLAY_INFO(__display)->supports_tv)
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 03/15] drm/i915/display: Add source param for dc balance
2025-04-28 6:20 ` [PATCH v3 03/15] drm/i915/display: Add source param for dc balance Mitul Golani
@ 2025-04-28 12:59 ` Nautiyal, Ankit K
0 siblings, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-28 12:59 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> Add source param for dc balance enablement further.
>
> --v2:
> - Arrange in alphabetic order. (Ankit)
> - Update name. (Ankit)
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display_device.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h
> index 87c666792c0d..fd886e1283f1 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_device.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_device.h
> @@ -193,6 +193,7 @@ struct intel_display_platforms {
> ((__display)->platform.dgfx && DISPLAY_VER(__display) == 14)) && \
> HAS_DSC(__display))
> #define HAS_VRR(__display) (DISPLAY_VER(__display) >= 11)
> +#define HAS_VRR_DC_BALANCE(__display) (DISPLAY_VER(__display) >= 30)
> #define INTEL_NUM_PIPES(__display) (hweight8(DISPLAY_RUNTIME_INFO(__display)->pipe_mask))
> #define OVERLAY_NEEDS_PHYSICAL(__display) (DISPLAY_INFO(__display)->overlay_needs_physical)
> #define SUPPORTS_TV(__display) (DISPLAY_INFO(__display)->supports_tv)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (2 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 03/15] drm/i915/display: Add source param for dc balance Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 13:04 ` Nautiyal, Ankit K
2025-04-29 11:20 ` Jani Nikula
2025-04-28 6:20 ` [PATCH v3 05/15] drm/i915/vrr: Add functions to read out vmin/vmax stuff Mitul Golani
` (12 subsequent siblings)
16 siblings, 2 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Add registers and access bits for DC Balance enable.
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_regs.h | 55 +++++++++++++++++++
drivers/gpu/drm/i915/display/intel_vrr_regs.h | 50 +++++++++++++++++
2 files changed, 105 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_regs.h b/drivers/gpu/drm/i915/display/intel_dmc_regs.h
index e16ea3f16ed8..a376499fbfab 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_dmc_regs.h
@@ -117,4 +117,59 @@
#define DMC_WAKELOCK_CTL_REQ REG_BIT(31)
#define DMC_WAKELOCK_CTL_ACK REG_BIT(15)
+#define _PIPEDMC_DCB_CTL_A 0x5F1A0
+#define _PIPEDMC_DCB_CTL_B 0x5F5A0
+#define _PIPEDMC_DCB_CTL_C 0x5F9A0
+#define _PIPEDMC_DCB_CTL_D 0x5FDA0
+#define PIPEDMC_DCB_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_CTL_A)
+#define PIPEDMC_ADAPTIVE_DCB_ENABLE REG_BIT(31)
+
+#define _PIPEDMC_DCB_VBLANK_A 0x5F1BC
+#define _PIPEDMC_DCB_VBLANK_B 0x5F5BC
+#define _PIPEDMC_DCB_VBLANK_C 0x5F9BC
+#define _PIPEDMC_DCB_VBLANK_D 0x5FDBC
+#define PIPEDMC_DCB_VBLANK(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VBLANK_A)
+
+#define _PIPEDMC_DCB_SLOPE_A 0x5F1B8
+#define _PIPEDMC_DCB_SLOPE_B 0x5F5B8
+#define _PIPEDMC_DCB_SLOPE_C 0x5F9B8
+#define _PIPEDMC_DCB_SLOPE_D 0x5FDB8
+#define PIPEDMC_DCB_SLOPE(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_SLOPE_A)
+
+#define _PIPEDMC_DCB_GUARDBAND_A 0x5F1B4
+#define _PIPEDMC_DCB_GUARDBAND_B 0x5F5B4
+#define _PIPEDMC_DCB_GUARDBAND_C 0x5F9B4
+#define _PIPEDMC_DCB_GUARDBAND_D 0x5FDB4
+#define PIPEDMC_DCB_GUARDBAND(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _PIPEDMC_DCB_GUARDBAND_A)
+
+#define _PIPEDMC_DCB_MAX_INCREASE_A 0x5F1AC
+#define _PIPEDMC_DCB_MAX_INCREASE_B 0x5F5AC
+#define _PIPEDMC_DCB_MAX_INCREASE_C 0x5F9AC
+#define _PIPEDMC_DCB_MAX_INCREASE_D 0x5FDAC
+#define PIPEDMC_DCB_MAX_INCREASE(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _PIPEDMC_DCB_MAX_INCREASE_A)
+
+#define _PIPEDMC_DCB_MAX_DECREASE_A 0x5F1B0
+#define _PIPEDMC_DCB_MAX_DECREASE_B 0x5F5B0
+#define _PIPEDMC_DCB_MAX_DECREASE_C 0x5F9B0
+#define _PIPEDMC_DCB_MAX_DECREASE_D 0x5FDB0
+#define PIPEDMC_DCB_MAX_DECREASE(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _PIPEDMC_DCB_MAX_DECREASE_A)
+
+#define _PIPEDMC_DCB_VMIN_A 0x5F1A4
+#define _PIPEDMC_DCB_VMIN_B 0x5F5A4
+#define _PIPEDMC_DCB_VMIN_C 0x5F9A4
+#define _PIPEDMC_DCB_VMIN_D 0x5FDA4
+#define PIPEDMC_DCB_VMIN(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VMIN_A)
+
+#define _PIPEDMC_DCB_VMAX_A 0x5F1A8
+#define _PIPEDMC_DCB_VMAX_B 0x5F5A8
+#define _PIPEDMC_DCB_VMAX_C 0x5F9A8
+#define _PIPEDMC_DCB_VMAX_D 0x5FDA8
+#define PIPEDMC_DCB_VMAX(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VMAX_A)
+
#endif /* __INTEL_DMC_REGS_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_vrr_regs.h b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
index 6ed0e0dc97e7..1fdba51b4bbd 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
@@ -9,6 +9,56 @@
#include "intel_display_reg_defs.h"
/* VRR registers */
+#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_A 0x604D4
+#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_B 0x614D4
+#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_C 0x624D4
+#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_D 0x634D4
+#define TRANS_VRR_DCB_ADJ_FLIPLINE_CFG(dev_priv, trans) \
+ _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_A)
+
+#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_A 0x604D8
+#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_B 0x614D8
+#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_C 0x624D8
+#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_D 0x634D8
+#define TRANS_VRR_DCB_ADJ_VMAX_CFG(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _TRANS_VRR_DCB_ADJ_VMAX_CFG_A)
+
+#define _TRANS_VRR_FLIPLINE_DCB_A 0x60418
+#define _TRANS_VRR_FLIPLINE_DCB_B 0x61418
+#define _TRANS_VRR_FLIPLINE_DCB_C 0x62418
+#define _TRANS_VRR_FLIPLINE_DCB_D 0x63418
+#define TRANS_VRR_FLIPLINE_DCB(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _TRANS_VRR_FLIPLINE_DCB_A)
+
+#define _TRANS_VRR_VMAX_DCB_A 0x60414
+#define _TRANS_VRR_VMAX_DCB_B 0x61414
+#define _TRANS_VRR_VMAX_DCB_C 0x62414
+#define _TRANS_VRR_VMAX_DCB_D 0x63414
+#define TRANS_VRR_VMAX_DCB(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _TRANS_VRR_VMAX_DCB_A)
+
+#define VRR_DCB_ADJ_FLIPLINE_CNT_MASK REG_GENMASK(31, 24)
+#define VRR_DCB_ADJ_FLIPLINE_MASK REG_GENMASK(19, 0)
+#define VRR_DCB_ADJ_VMAX_CNT_MASK REG_GENMASK(31, 24)
+#define VRR_DCB_ADJ_VMAX_MASK REG_GENMASK(19, 0)
+#define VRR_FLIPLINE_DCB_MASK REG_GENMASK(19, 0)
+#define VRR_VMAX_DCB_MASK REG_GENMASK(19, 0)
+#define VRR_CTL_DCB_ADJ_ENABLE REG_BIT(28)
+
+#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_A 0x604C0
+#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_B 0x614C0
+#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_C 0x624C0
+#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_D 0x634C0
+#define TRANS_ADAPTIVE_SYNC_DCB_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
+ trans, \
+ _TRANS_ADAPTIVE_SYNC_DCB_CTL_A)
+#define ADAPTIVE_SYNC_COUNTER_EN REG_BIT(31)
+
#define _TRANS_VRR_CTL_A 0x60420
#define _TRANS_VRR_CTL_B 0x61420
#define _TRANS_VRR_CTL_C 0x62420
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance
2025-04-28 6:20 ` [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance Mitul Golani
@ 2025-04-28 13:04 ` Nautiyal, Ankit K
2025-04-29 11:20 ` Jani Nikula
1 sibling, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-28 13:04 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> Add registers and access bits for DC Balance enable.
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dmc_regs.h | 55 +++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_vrr_regs.h | 50 +++++++++++++++++
> 2 files changed, 105 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dmc_regs.h b/drivers/gpu/drm/i915/display/intel_dmc_regs.h
> index e16ea3f16ed8..a376499fbfab 100644
> --- a/drivers/gpu/drm/i915/display/intel_dmc_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_dmc_regs.h
> @@ -117,4 +117,59 @@
> #define DMC_WAKELOCK_CTL_REQ REG_BIT(31)
> #define DMC_WAKELOCK_CTL_ACK REG_BIT(15)
>
> +#define _PIPEDMC_DCB_CTL_A 0x5F1A0
> +#define _PIPEDMC_DCB_CTL_B 0x5F5A0
> +#define _PIPEDMC_DCB_CTL_C 0x5F9A0
> +#define _PIPEDMC_DCB_CTL_D 0x5FDA0
> +#define PIPEDMC_DCB_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_CTL_A)
Use MMIO_PIPE here.
Perhaps only A and B offsets are sufficient. Though in many places we
have all offsets, IMHO only 2 should be sufficient if the offsets have
constant difference for each pipe.
Also, it would be better to have separate patch for VRR registers
required for DC balancing adjustments.
Regards,
Ankit
> +#define PIPEDMC_ADAPTIVE_DCB_ENABLE REG_BIT(31)
> +
> +#define _PIPEDMC_DCB_VBLANK_A 0x5F1BC
> +#define _PIPEDMC_DCB_VBLANK_B 0x5F5BC
> +#define _PIPEDMC_DCB_VBLANK_C 0x5F9BC
> +#define _PIPEDMC_DCB_VBLANK_D 0x5FDBC
> +#define PIPEDMC_DCB_VBLANK(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VBLANK_A)
> +
> +#define _PIPEDMC_DCB_SLOPE_A 0x5F1B8
> +#define _PIPEDMC_DCB_SLOPE_B 0x5F5B8
> +#define _PIPEDMC_DCB_SLOPE_C 0x5F9B8
> +#define _PIPEDMC_DCB_SLOPE_D 0x5FDB8
> +#define PIPEDMC_DCB_SLOPE(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_SLOPE_A)
> +
> +#define _PIPEDMC_DCB_GUARDBAND_A 0x5F1B4
> +#define _PIPEDMC_DCB_GUARDBAND_B 0x5F5B4
> +#define _PIPEDMC_DCB_GUARDBAND_C 0x5F9B4
> +#define _PIPEDMC_DCB_GUARDBAND_D 0x5FDB4
> +#define PIPEDMC_DCB_GUARDBAND(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _PIPEDMC_DCB_GUARDBAND_A)
> +
> +#define _PIPEDMC_DCB_MAX_INCREASE_A 0x5F1AC
> +#define _PIPEDMC_DCB_MAX_INCREASE_B 0x5F5AC
> +#define _PIPEDMC_DCB_MAX_INCREASE_C 0x5F9AC
> +#define _PIPEDMC_DCB_MAX_INCREASE_D 0x5FDAC
> +#define PIPEDMC_DCB_MAX_INCREASE(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _PIPEDMC_DCB_MAX_INCREASE_A)
> +
> +#define _PIPEDMC_DCB_MAX_DECREASE_A 0x5F1B0
> +#define _PIPEDMC_DCB_MAX_DECREASE_B 0x5F5B0
> +#define _PIPEDMC_DCB_MAX_DECREASE_C 0x5F9B0
> +#define _PIPEDMC_DCB_MAX_DECREASE_D 0x5FDB0
> +#define PIPEDMC_DCB_MAX_DECREASE(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _PIPEDMC_DCB_MAX_DECREASE_A)
> +
> +#define _PIPEDMC_DCB_VMIN_A 0x5F1A4
> +#define _PIPEDMC_DCB_VMIN_B 0x5F5A4
> +#define _PIPEDMC_DCB_VMIN_C 0x5F9A4
> +#define _PIPEDMC_DCB_VMIN_D 0x5FDA4
> +#define PIPEDMC_DCB_VMIN(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VMIN_A)
> +
> +#define _PIPEDMC_DCB_VMAX_A 0x5F1A8
> +#define _PIPEDMC_DCB_VMAX_B 0x5F5A8
> +#define _PIPEDMC_DCB_VMAX_C 0x5F9A8
> +#define _PIPEDMC_DCB_VMAX_D 0x5FDA8
> +#define PIPEDMC_DCB_VMAX(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VMAX_A)
> +
> #endif /* __INTEL_DMC_REGS_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr_regs.h b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
> index 6ed0e0dc97e7..1fdba51b4bbd 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
> @@ -9,6 +9,56 @@
> #include "intel_display_reg_defs.h"
>
> /* VRR registers */
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_A 0x604D4
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_B 0x614D4
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_C 0x624D4
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_D 0x634D4
> +#define TRANS_VRR_DCB_ADJ_FLIPLINE_CFG(dev_priv, trans) \
> + _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_A)
> +
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_A 0x604D8
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_B 0x614D8
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_C 0x624D8
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_D 0x634D8
> +#define TRANS_VRR_DCB_ADJ_VMAX_CFG(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_DCB_ADJ_VMAX_CFG_A)
> +
> +#define _TRANS_VRR_FLIPLINE_DCB_A 0x60418
> +#define _TRANS_VRR_FLIPLINE_DCB_B 0x61418
> +#define _TRANS_VRR_FLIPLINE_DCB_C 0x62418
> +#define _TRANS_VRR_FLIPLINE_DCB_D 0x63418
> +#define TRANS_VRR_FLIPLINE_DCB(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_FLIPLINE_DCB_A)
> +
> +#define _TRANS_VRR_VMAX_DCB_A 0x60414
> +#define _TRANS_VRR_VMAX_DCB_B 0x61414
> +#define _TRANS_VRR_VMAX_DCB_C 0x62414
> +#define _TRANS_VRR_VMAX_DCB_D 0x63414
> +#define TRANS_VRR_VMAX_DCB(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_VMAX_DCB_A)
> +
> +#define VRR_DCB_ADJ_FLIPLINE_CNT_MASK REG_GENMASK(31, 24)
> +#define VRR_DCB_ADJ_FLIPLINE_MASK REG_GENMASK(19, 0)
> +#define VRR_DCB_ADJ_VMAX_CNT_MASK REG_GENMASK(31, 24)
> +#define VRR_DCB_ADJ_VMAX_MASK REG_GENMASK(19, 0)
> +#define VRR_FLIPLINE_DCB_MASK REG_GENMASK(19, 0)
> +#define VRR_VMAX_DCB_MASK REG_GENMASK(19, 0)
> +#define VRR_CTL_DCB_ADJ_ENABLE REG_BIT(28)
> +
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_A 0x604C0
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_B 0x614C0
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_C 0x624C0
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_D 0x634C0
> +#define TRANS_ADAPTIVE_SYNC_DCB_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_ADAPTIVE_SYNC_DCB_CTL_A)
> +#define ADAPTIVE_SYNC_COUNTER_EN REG_BIT(31)
> +
> #define _TRANS_VRR_CTL_A 0x60420
> #define _TRANS_VRR_CTL_B 0x61420
> #define _TRANS_VRR_CTL_C 0x62420
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance
2025-04-28 6:20 ` [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance Mitul Golani
2025-04-28 13:04 ` Nautiyal, Ankit K
@ 2025-04-29 11:20 ` Jani Nikula
1 sibling, 0 replies; 27+ messages in thread
From: Jani Nikula @ 2025-04-29 11:20 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
On Mon, 28 Apr 2025, Mitul Golani <mitulkumar.ajitkumar.golani@intel.com> wrote:
> Add registers and access bits for DC Balance enable.
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dmc_regs.h | 55 +++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_vrr_regs.h | 50 +++++++++++++++++
> 2 files changed, 105 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dmc_regs.h b/drivers/gpu/drm/i915/display/intel_dmc_regs.h
> index e16ea3f16ed8..a376499fbfab 100644
> --- a/drivers/gpu/drm/i915/display/intel_dmc_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_dmc_regs.h
> @@ -117,4 +117,59 @@
> #define DMC_WAKELOCK_CTL_REQ REG_BIT(31)
> #define DMC_WAKELOCK_CTL_ACK REG_BIT(15)
>
> +#define _PIPEDMC_DCB_CTL_A 0x5F1A0
> +#define _PIPEDMC_DCB_CTL_B 0x5F5A0
> +#define _PIPEDMC_DCB_CTL_C 0x5F9A0
> +#define _PIPEDMC_DCB_CTL_D 0x5FDA0
> +#define PIPEDMC_DCB_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_CTL_A)
Please s/dev_priv/__display/g everywhere in the macros.
BR,
Jani.
> +#define PIPEDMC_ADAPTIVE_DCB_ENABLE REG_BIT(31)
> +
> +#define _PIPEDMC_DCB_VBLANK_A 0x5F1BC
> +#define _PIPEDMC_DCB_VBLANK_B 0x5F5BC
> +#define _PIPEDMC_DCB_VBLANK_C 0x5F9BC
> +#define _PIPEDMC_DCB_VBLANK_D 0x5FDBC
> +#define PIPEDMC_DCB_VBLANK(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VBLANK_A)
> +
> +#define _PIPEDMC_DCB_SLOPE_A 0x5F1B8
> +#define _PIPEDMC_DCB_SLOPE_B 0x5F5B8
> +#define _PIPEDMC_DCB_SLOPE_C 0x5F9B8
> +#define _PIPEDMC_DCB_SLOPE_D 0x5FDB8
> +#define PIPEDMC_DCB_SLOPE(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_SLOPE_A)
> +
> +#define _PIPEDMC_DCB_GUARDBAND_A 0x5F1B4
> +#define _PIPEDMC_DCB_GUARDBAND_B 0x5F5B4
> +#define _PIPEDMC_DCB_GUARDBAND_C 0x5F9B4
> +#define _PIPEDMC_DCB_GUARDBAND_D 0x5FDB4
> +#define PIPEDMC_DCB_GUARDBAND(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _PIPEDMC_DCB_GUARDBAND_A)
> +
> +#define _PIPEDMC_DCB_MAX_INCREASE_A 0x5F1AC
> +#define _PIPEDMC_DCB_MAX_INCREASE_B 0x5F5AC
> +#define _PIPEDMC_DCB_MAX_INCREASE_C 0x5F9AC
> +#define _PIPEDMC_DCB_MAX_INCREASE_D 0x5FDAC
> +#define PIPEDMC_DCB_MAX_INCREASE(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _PIPEDMC_DCB_MAX_INCREASE_A)
> +
> +#define _PIPEDMC_DCB_MAX_DECREASE_A 0x5F1B0
> +#define _PIPEDMC_DCB_MAX_DECREASE_B 0x5F5B0
> +#define _PIPEDMC_DCB_MAX_DECREASE_C 0x5F9B0
> +#define _PIPEDMC_DCB_MAX_DECREASE_D 0x5FDB0
> +#define PIPEDMC_DCB_MAX_DECREASE(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _PIPEDMC_DCB_MAX_DECREASE_A)
> +
> +#define _PIPEDMC_DCB_VMIN_A 0x5F1A4
> +#define _PIPEDMC_DCB_VMIN_B 0x5F5A4
> +#define _PIPEDMC_DCB_VMIN_C 0x5F9A4
> +#define _PIPEDMC_DCB_VMIN_D 0x5FDA4
> +#define PIPEDMC_DCB_VMIN(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VMIN_A)
> +
> +#define _PIPEDMC_DCB_VMAX_A 0x5F1A8
> +#define _PIPEDMC_DCB_VMAX_B 0x5F5A8
> +#define _PIPEDMC_DCB_VMAX_C 0x5F9A8
> +#define _PIPEDMC_DCB_VMAX_D 0x5FDA8
> +#define PIPEDMC_DCB_VMAX(dev_priv, trans) _MMIO_TRANS2(dev_priv, trans, _PIPEDMC_DCB_VMAX_A)
> +
> #endif /* __INTEL_DMC_REGS_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr_regs.h b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
> index 6ed0e0dc97e7..1fdba51b4bbd 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
> @@ -9,6 +9,56 @@
> #include "intel_display_reg_defs.h"
>
> /* VRR registers */
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_A 0x604D4
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_B 0x614D4
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_C 0x624D4
> +#define _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_D 0x634D4
> +#define TRANS_VRR_DCB_ADJ_FLIPLINE_CFG(dev_priv, trans) \
> + _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_DCB_ADJ_FLIPLINE_CFG_A)
> +
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_A 0x604D8
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_B 0x614D8
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_C 0x624D8
> +#define _TRANS_VRR_DCB_ADJ_VMAX_CFG_D 0x634D8
> +#define TRANS_VRR_DCB_ADJ_VMAX_CFG(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_DCB_ADJ_VMAX_CFG_A)
> +
> +#define _TRANS_VRR_FLIPLINE_DCB_A 0x60418
> +#define _TRANS_VRR_FLIPLINE_DCB_B 0x61418
> +#define _TRANS_VRR_FLIPLINE_DCB_C 0x62418
> +#define _TRANS_VRR_FLIPLINE_DCB_D 0x63418
> +#define TRANS_VRR_FLIPLINE_DCB(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_FLIPLINE_DCB_A)
> +
> +#define _TRANS_VRR_VMAX_DCB_A 0x60414
> +#define _TRANS_VRR_VMAX_DCB_B 0x61414
> +#define _TRANS_VRR_VMAX_DCB_C 0x62414
> +#define _TRANS_VRR_VMAX_DCB_D 0x63414
> +#define TRANS_VRR_VMAX_DCB(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_VRR_VMAX_DCB_A)
> +
> +#define VRR_DCB_ADJ_FLIPLINE_CNT_MASK REG_GENMASK(31, 24)
> +#define VRR_DCB_ADJ_FLIPLINE_MASK REG_GENMASK(19, 0)
> +#define VRR_DCB_ADJ_VMAX_CNT_MASK REG_GENMASK(31, 24)
> +#define VRR_DCB_ADJ_VMAX_MASK REG_GENMASK(19, 0)
> +#define VRR_FLIPLINE_DCB_MASK REG_GENMASK(19, 0)
> +#define VRR_VMAX_DCB_MASK REG_GENMASK(19, 0)
> +#define VRR_CTL_DCB_ADJ_ENABLE REG_BIT(28)
> +
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_A 0x604C0
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_B 0x614C0
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_C 0x624C0
> +#define _TRANS_ADAPTIVE_SYNC_DCB_CTL_D 0x634C0
> +#define TRANS_ADAPTIVE_SYNC_DCB_CTL(dev_priv, trans) _MMIO_TRANS2(dev_priv, \
> + trans, \
> + _TRANS_ADAPTIVE_SYNC_DCB_CTL_A)
> +#define ADAPTIVE_SYNC_COUNTER_EN REG_BIT(31)
> +
> #define _TRANS_VRR_CTL_A 0x60420
> #define _TRANS_VRR_CTL_B 0x61420
> #define _TRANS_VRR_CTL_C 0x62420
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 05/15] drm/i915/vrr: Add functions to read out vmin/vmax stuff
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (3 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 04/15] drm/i915/display: Add registers and bits for DC Balance Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 06/15] drm/i915/vrr: Add state checker for dc balance params Mitul Golani
` (11 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Calculate delayed vblank start position with the help of added
vmin/vmax stuff for next frame and final computation.
--v2:
- Correct Author details.
--v3:
- Separate register details from this patch.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 57 ++++++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_vrr.h | 5 +++
2 files changed, 62 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index adfd231eb578..ab4f8def821c 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -746,3 +746,60 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
if (crtc_state->vrr.enable)
crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
}
+
+int intel_vrr_dcb_vmin_vblank_start_next(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 tmp = 0;
+
+ tmp = intel_de_read(display,
+ TRANS_VRR_DCB_ADJ_FLIPLINE_CFG(display, cpu_transcoder));
+
+ if (REG_FIELD_GET(VRR_DCB_ADJ_FLIPLINE_CNT_MASK, tmp) == 0)
+ return -1;
+
+ return intel_vrr_vblank_start(crtc_state,
+ REG_FIELD_GET(VRR_DCB_ADJ_FLIPLINE_MASK, tmp) + 1);
+}
+
+int intel_vrr_dcb_vmax_vblank_start_next(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 tmp = 0;
+
+ tmp = intel_de_read(display,
+ TRANS_VRR_DCB_ADJ_VMAX_CFG(display, cpu_transcoder));
+
+ if (REG_FIELD_GET(VRR_DCB_ADJ_VMAX_CNT_MASK, tmp) == 0)
+ return -1;
+
+ return intel_vrr_vblank_start(crtc_state,
+ REG_FIELD_GET(VRR_DCB_ADJ_VMAX_MASK, tmp) + 1);
+}
+
+int intel_vrr_dcb_vmin_vblank_start_final(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 tmp = 0;
+
+ tmp = intel_de_read(display,
+ TRANS_VRR_FLIPLINE_DCB(display, cpu_transcoder));
+
+ return intel_vrr_vblank_start(crtc_state,
+ REG_FIELD_GET(VRR_FLIPLINE_DCB_MASK, tmp) + 1);
+}
+
+int intel_vrr_dcb_vmax_vblank_start_final(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 tmp = 0;
+
+ tmp = intel_de_read(display, TRANS_VRR_VMAX_DCB(display, cpu_transcoder));
+
+ return intel_vrr_vblank_start(crtc_state,
+ REG_FIELD_GET(VRR_VMAX_DCB_MASK, tmp) + 1);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
index 38bf9996b883..e62b8b50aec6 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr.h
@@ -42,4 +42,9 @@ void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state);
void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
bool intel_vrr_always_use_vrr_tg(struct intel_display *display);
+int intel_vrr_dcb_vmin_vblank_start_next(const struct intel_crtc_state *crtc_state);
+int intel_vrr_dcb_vmax_vblank_start_next(const struct intel_crtc_state *crtc_state);
+int intel_vrr_dcb_vmin_vblank_start_final(const struct intel_crtc_state *crtc_state);
+int intel_vrr_dcb_vmax_vblank_start_final(const struct intel_crtc_state *crtc_state);
+
#endif /* __INTEL_VRR_H__ */
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 06/15] drm/i915/vrr: Add state checker for dc balance params
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (4 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 05/15] drm/i915/vrr: Add functions to read out vmin/vmax stuff Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 13:08 ` Nautiyal, Ankit K
2025-04-28 6:20 ` [PATCH v3 07/15] drm/i915/vrr: Add state dump " Mitul Golani
` (10 subsequent siblings)
16 siblings, 1 reply; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Add state checker for dc balance params. Also add macro to
check source support.
--v3: Seggregate crtc_state params with this patch. (Ankit)
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 8 +++++++
.../drm/i915/display/intel_display_types.h | 7 +++++++
drivers/gpu/drm/i915/display/intel_vrr.c | 21 +++++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 58845b74f17d..1cd9c65da576 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5403,6 +5403,14 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
PIPE_CONF_CHECK_LLI(cmrr.cmrr_m);
PIPE_CONF_CHECK_LLI(cmrr.cmrr_n);
PIPE_CONF_CHECK_BOOL(cmrr.enable);
+ PIPE_CONF_CHECK_BOOL(vrr.dc_balance.enable);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.vmin);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.vmax);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.guardband);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.slope);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.max_increase);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.max_decrease);
+ PIPE_CONF_CHECK_I(vrr.dc_balance.vblank_target);
}
if (!fastset || intel_vrr_always_use_vrr_tg(display)) {
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 7415564d058a..e6b5bec748cd 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1308,6 +1308,13 @@ struct intel_crtc_state {
u8 pipeline_full;
u16 flipline, vmin, vmax, guardband;
u32 vsync_end, vsync_start;
+ struct {
+ bool enable;
+ u16 vmin, vmax;
+ u16 guardband, slope;
+ u16 max_increase, max_decrease;
+ u16 vblank_target;
+ } dc_balance;
} vrr;
/* Content Match Refresh Rate state */
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index ab4f8def821c..55923eadc3c1 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -10,6 +10,7 @@
#include "intel_de.h"
#include "intel_display_types.h"
#include "intel_dp.h"
+#include "intel_dmc_regs.h"
#include "intel_vrr.h"
#include "intel_vrr_regs.h"
@@ -738,6 +739,26 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
else
crtc_state->vrr.enable = vrr_enable;
+ if (HAS_VRR_DC_BALANCE(display)) {
+ crtc_state->vrr.dc_balance.enable =
+ intel_de_read(display, PIPEDMC_DCB_CTL(display, cpu_transcoder)) &
+ PIPEDMC_ADAPTIVE_DCB_ENABLE;
+ crtc_state->vrr.dc_balance.vmin =
+ intel_de_read(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder)) + 1;
+ crtc_state->vrr.dc_balance.vmax =
+ intel_de_read(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder)) + 1;
+ crtc_state->vrr.dc_balance.guardband =
+ intel_de_read(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder));
+ crtc_state->vrr.dc_balance.max_increase =
+ intel_de_read(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder));
+ crtc_state->vrr.dc_balance.max_decrease =
+ intel_de_read(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder));
+ crtc_state->vrr.dc_balance.slope =
+ intel_de_read(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder));
+ crtc_state->vrr.dc_balance.vblank_target =
+ intel_de_read(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder));
+ }
+
/*
* #TODO: For Both VRR and CMRR the flag I915_MODE_FLAG_VRR is set for mode_flags.
* Since CMRR is currently disabled, set this flag for VRR for now.
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 06/15] drm/i915/vrr: Add state checker for dc balance params
2025-04-28 6:20 ` [PATCH v3 06/15] drm/i915/vrr: Add state checker for dc balance params Mitul Golani
@ 2025-04-28 13:08 ` Nautiyal, Ankit K
0 siblings, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-28 13:08 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> Add state checker for dc balance params. Also add macro to
> check source support.
This is now introducing the new member for tracking vrr dc balancing,
the commit message and the subject should reflect the same.
>
> --v3: Seggregate crtc_state params with this patch. (Ankit)
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 8 +++++++
> .../drm/i915/display/intel_display_types.h | 7 +++++++
> drivers/gpu/drm/i915/display/intel_vrr.c | 21 +++++++++++++++++++
> 3 files changed, 36 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 58845b74f17d..1cd9c65da576 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -5403,6 +5403,14 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> PIPE_CONF_CHECK_LLI(cmrr.cmrr_m);
> PIPE_CONF_CHECK_LLI(cmrr.cmrr_n);
> PIPE_CONF_CHECK_BOOL(cmrr.enable);
> + PIPE_CONF_CHECK_BOOL(vrr.dc_balance.enable);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.vmin);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.vmax);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.guardband);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.slope);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.max_increase);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.max_decrease);
> + PIPE_CONF_CHECK_I(vrr.dc_balance.vblank_target);
> }
>
> if (!fastset || intel_vrr_always_use_vrr_tg(display)) {
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 7415564d058a..e6b5bec748cd 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1308,6 +1308,13 @@ struct intel_crtc_state {
> u8 pipeline_full;
> u16 flipline, vmin, vmax, guardband;
> u32 vsync_end, vsync_start;
> + struct {
> + bool enable;
> + u16 vmin, vmax;
> + u16 guardband, slope;
> + u16 max_increase, max_decrease;
> + u16 vblank_target;
> + } dc_balance;
> } vrr;
>
> /* Content Match Refresh Rate state */
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index ab4f8def821c..55923eadc3c1 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -10,6 +10,7 @@
> #include "intel_de.h"
> #include "intel_display_types.h"
> #include "intel_dp.h"
> +#include "intel_dmc_regs.h"
> #include "intel_vrr.h"
> #include "intel_vrr_regs.h"
>
> @@ -738,6 +739,26 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> else
> crtc_state->vrr.enable = vrr_enable;
>
> + if (HAS_VRR_DC_BALANCE(display)) {
> + crtc_state->vrr.dc_balance.enable =
> + intel_de_read(display, PIPEDMC_DCB_CTL(display, cpu_transcoder)) &
> + PIPEDMC_ADAPTIVE_DCB_ENABLE;
> + crtc_state->vrr.dc_balance.vmin =
> + intel_de_read(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder)) + 1;
> + crtc_state->vrr.dc_balance.vmax =
> + intel_de_read(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder)) + 1;
> + crtc_state->vrr.dc_balance.guardband =
IMHO, 1 should be added only if the value read is > 0. Otherwise it will
give mismatches for cases where vrr is not enabled.
Regards,
Ankit
> + intel_de_read(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder));
> + crtc_state->vrr.dc_balance.max_increase =
> + intel_de_read(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder));
> + crtc_state->vrr.dc_balance.max_decrease =
> + intel_de_read(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder));
> + crtc_state->vrr.dc_balance.slope =
> + intel_de_read(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder));
> + crtc_state->vrr.dc_balance.vblank_target =
> + intel_de_read(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder));
> + }
> +
> /*
> * #TODO: For Both VRR and CMRR the flag I915_MODE_FLAG_VRR is set for mode_flags.
> * Since CMRR is currently disabled, set this flag for VRR for now.
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 07/15] drm/i915/vrr: Add state dump for dc balance params
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (5 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 06/15] drm/i915/vrr: Add state checker for dc balance params Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 08/15] drm/i915/vrr: Add compute config for DC " Mitul Golani
` (9 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Add state dump for dc balance params to track dc balance
crtc state config.
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_crtc_state_dump.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
index 0c7f91046996..9baafc63d9ea 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
@@ -304,7 +304,14 @@ void intel_crtc_state_dump(const struct intel_crtc_state *pipe_config,
drm_printf(&p, "vrr: vmin vblank: %d, vmax vblank: %d, vmin vtotal: %d, vmax vtotal: %d\n",
intel_vrr_vmin_vblank_start(pipe_config), intel_vrr_vmax_vblank_start(pipe_config),
intel_vrr_vmin_vtotal(pipe_config), intel_vrr_vmax_vtotal(pipe_config));
-
+ drm_printf(&p, "vrr: dc balance: %s, vmin: %d vmax: %d guardband: %d, slope: %d max increase: %d max decrease: %d Vblank target: %d\n",
+ str_yes_no(pipe_config->vrr.dc_balance.enable),
+ pipe_config->vrr.dc_balance.vmin, pipe_config->vrr.dc_balance.vmax,
+ pipe_config->vrr.dc_balance.guardband,
+ pipe_config->vrr.dc_balance.slope,
+ pipe_config->vrr.dc_balance.max_increase,
+ pipe_config->vrr.dc_balance.max_decrease,
+ pipe_config->vrr.dc_balance.vblank_target);
drm_printf(&p, "requested mode: " DRM_MODE_FMT "\n",
DRM_MODE_ARG(&pipe_config->hw.mode));
drm_printf(&p, "adjusted mode: " DRM_MODE_FMT "\n",
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 08/15] drm/i915/vrr: Add compute config for DC balance params
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (6 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 07/15] drm/i915/vrr: Add state dump " Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 13:28 ` Nautiyal, Ankit K
2025-04-28 6:20 ` [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers Mitul Golani
` (8 subsequent siblings)
16 siblings, 1 reply; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Compute DC Balance parameters and tunable params based on
experiments.
--v2:
- Document tunable params. (Ankit)
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 25 ++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 55923eadc3c1..bc99701be2b5 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -16,6 +16,13 @@
#define FIXED_POINT_PRECISION 100
#define CMRR_PRECISION_TOLERANCE 10
+/*
+ * Tunable parameters for DC Balance correction.
+ * These are captured based on experimentations.
+ */
+#define DCB_CORRECTION_SENSITIVITY 30
+#define DCB_CORRECTION_AGGRESSIVENESS 1000
+#define DCB_BLANK_TARGET 50
bool intel_vrr_is_capable(struct intel_connector *connector)
{
@@ -409,6 +416,24 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
(crtc_state->hw.adjusted_mode.crtc_vtotal -
crtc_state->hw.adjusted_mode.vsync_end);
}
+
+ if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
+ crtc_state->vrr.dc_balance.vmax = crtc_state->vrr.vmax;
+ crtc_state->vrr.dc_balance.vmin = crtc_state->vrr.vmin;
+ crtc_state->vrr.dc_balance.max_increase =
+ crtc_state->vrr.vmax - crtc_state->vrr.vmin;
+ crtc_state->vrr.dc_balance.max_decrease =
+ crtc_state->vrr.vmax - crtc_state->vrr.vmin;
+ crtc_state->vrr.dc_balance.guardband =
+ DIV_ROUND_UP(crtc_state->vrr.dc_balance.vmax * DCB_CORRECTION_SENSITIVITY,
+ 100);
+ crtc_state->vrr.dc_balance.slope =
+ DIV_ROUND_UP(DCB_CORRECTION_AGGRESSIVENESS * 10,
+ crtc_state->vrr.dc_balance.guardband);
+ crtc_state->vrr.dc_balance.vblank_target =
+ DIV_ROUND_UP((crtc_state->vrr.vmax - crtc_state->vrr.vmin) * DCB_BLANK_TARGET,
+ 100);
+ }
}
void intel_vrr_compute_config_late(struct intel_crtc_state *crtc_state)
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 08/15] drm/i915/vrr: Add compute config for DC balance params
2025-04-28 6:20 ` [PATCH v3 08/15] drm/i915/vrr: Add compute config for DC " Mitul Golani
@ 2025-04-28 13:28 ` Nautiyal, Ankit K
0 siblings, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-28 13:28 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> Compute DC Balance parameters and tunable params based on
> experiments.
>
> --v2:
> - Document tunable params. (Ankit)
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 25 ++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 55923eadc3c1..bc99701be2b5 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -16,6 +16,13 @@
>
> #define FIXED_POINT_PRECISION 100
> #define CMRR_PRECISION_TOLERANCE 10
> +/*
> + * Tunable parameters for DC Balance correction.
> + * These are captured based on experimentations.
> + */
> +#define DCB_CORRECTION_SENSITIVITY 30
> +#define DCB_CORRECTION_AGGRESSIVENESS 1000
> +#define DCB_BLANK_TARGET 50
>
> bool intel_vrr_is_capable(struct intel_connector *connector)
> {
> @@ -409,6 +416,24 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> (crtc_state->hw.adjusted_mode.crtc_vtotal -
> crtc_state->hw.adjusted_mode.vsync_end);
> }
> +
> + if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
> + crtc_state->vrr.dc_balance.vmax = crtc_state->vrr.vmax;
> + crtc_state->vrr.dc_balance.vmin = crtc_state->vrr.vmin;
> + crtc_state->vrr.dc_balance.max_increase =
> + crtc_state->vrr.vmax - crtc_state->vrr.vmin;
> + crtc_state->vrr.dc_balance.max_decrease =
> + crtc_state->vrr.vmax - crtc_state->vrr.vmin;
> + crtc_state->vrr.dc_balance.guardband =
> + DIV_ROUND_UP(crtc_state->vrr.dc_balance.vmax * DCB_CORRECTION_SENSITIVITY,
> + 100);
> + crtc_state->vrr.dc_balance.slope =
> + DIV_ROUND_UP(DCB_CORRECTION_AGGRESSIVENESS * 10,
> + crtc_state->vrr.dc_balance.guardband);
> + crtc_state->vrr.dc_balance.vblank_target =
> + DIV_ROUND_UP((crtc_state->vrr.vmax - crtc_state->vrr.vmin) * DCB_BLANK_TARGET,
> + 100);
We can make the longer lines more readable with a bit of formatting by
breaking the line after multiplication or at comma:
crtc_state->vrr.dc_balance.guardband =
DIV_ROUND_UP(crtc_state->vrr.dc_balance.vmax *
DCB_CORRECTION_SENSITIVITY, 100);
crtc_state->vrr.dc_balance.slope =
DIV_ROUND_UP(DCB_CORRECTION_AGGRESSIVENESS * 10,
crtc_state->vrr.dc_balance.guardband);
crtc_state->vrr.dc_balance.vblank_target =
DIV_ROUND_UP((crtc_state->vrr.vmax -
crtc_state->vrr.vmin) *
DCB_BLANK_TARGET, 100);
Regards,
Ankit
> + }
> }
>
> void intel_vrr_compute_config_late(struct intel_crtc_state *crtc_state)
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (7 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 08/15] drm/i915/vrr: Add compute config for DC " Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 13:48 ` Nautiyal, Ankit K
2025-04-29 3:12 ` Nautiyal, Ankit K
2025-04-28 6:20 ` [PATCH v3 10/15] drm/i915: Extract vrr_vblank_start() Mitul Golani
` (7 subsequent siblings)
16 siblings, 2 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Write DC Balance parameters to hw registers.
--v2:
- Update commit header.
- Separate crtc_state params from this patch. (Ankit)
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 28 ++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index bc99701be2b5..54b91c2a0a87 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -627,6 +627,23 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
}
}
+
+ if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
+ intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.vmin - 1);
+ intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.vmax - 1);
+ intel_de_write(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.max_increase);
+ intel_de_write(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.max_decrease);
+ intel_de_write(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.guardband);
+ intel_de_write(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.slope);
+ intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder),
+ crtc_state->vrr.dc_balance.vblank_target);
+ }
}
void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
@@ -637,6 +654,17 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
if (!old_crtc_state->vrr.enable)
return;
+ if (HAS_VRR_DC_BALANCE(display) && old_crtc_state->vrr.dc_balance.enable) {
+ intel_de_write(display, TRANS_ADAPTIVE_SYNC_DCB_CTL(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder), 0);
+ intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder), 0);
+ }
+
if (!intel_vrr_always_use_vrr_tg(display)) {
intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
trans_vrr_ctl(old_crtc_state));
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers
2025-04-28 6:20 ` [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers Mitul Golani
@ 2025-04-28 13:48 ` Nautiyal, Ankit K
2025-04-29 3:12 ` Nautiyal, Ankit K
1 sibling, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-28 13:48 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> Write DC Balance parameters to hw registers.
>
> --v2:
> - Update commit header.
> - Separate crtc_state params from this patch. (Ankit)
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 28 ++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index bc99701be2b5..54b91c2a0a87 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -627,6 +627,23 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
> }
> }
> +
> + if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
> + intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.vmin - 1);
> + intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.vmax - 1);
> + intel_de_write(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.max_increase);
> + intel_de_write(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.max_decrease);
> + intel_de_write(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.guardband);
> + intel_de_write(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.slope);
> + intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.vblank_target);
> + }
> }
>
> void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> @@ -637,6 +654,17 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> if (!old_crtc_state->vrr.enable)
> return;
>
> + if (HAS_VRR_DC_BALANCE(display) && old_crtc_state->vrr.dc_balance.enable) {
> + intel_de_write(display, TRANS_ADAPTIVE_SYNC_DCB_CTL(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder), 0);
Bspec says PIPEDMC_DCB_VMIN/VMAX should not be 0 when VRR is enabled.
I guess `VRR is enabled` here means that the VRR timing generator with
variable timings is enabled. In that case this looks fine, but would be
good to clarify.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Regards,
Ankit
> + intel_de_write(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder), 0);
> + }
> +
> if (!intel_vrr_always_use_vrr_tg(display)) {
> intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> trans_vrr_ctl(old_crtc_state));
^ permalink raw reply [flat|nested] 27+ messages in thread* Re: [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers
2025-04-28 6:20 ` [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers Mitul Golani
2025-04-28 13:48 ` Nautiyal, Ankit K
@ 2025-04-29 3:12 ` Nautiyal, Ankit K
1 sibling, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-29 3:12 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> Write DC Balance parameters to hw registers.
>
> --v2:
> - Update commit header.
> - Separate crtc_state params from this patch. (Ankit)
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 28 ++++++++++++++++++++++++
> 1 file changed, 28 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index bc99701be2b5..54b91c2a0a87 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -627,6 +627,23 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
> }
> }
> +
> + if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
> + intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.vmin - 1);
> + intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.vmax - 1);
> + intel_de_write(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.max_increase);
> + intel_de_write(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.max_decrease);
> + intel_de_write(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.guardband);
> + intel_de_write(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.slope);
> + intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder),
> + crtc_state->vrr.dc_balance.vblank_target);
> + }
One thing that I missed earlier is that these registers must be written
after we disable VRR mode.
Regards,
Ankit
> }
>
> void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> @@ -637,6 +654,17 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> if (!old_crtc_state->vrr.enable)
> return;
>
> + if (HAS_VRR_DC_BALANCE(display) && old_crtc_state->vrr.dc_balance.enable) {
> + intel_de_write(display, TRANS_ADAPTIVE_SYNC_DCB_CTL(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_MAX_INCREASE(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_MAX_DECREASE(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_GUARDBAND(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_SLOPE(display, cpu_transcoder), 0);
> + intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder), 0);
> + }
> +
> if (!intel_vrr_always_use_vrr_tg(display)) {
> intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> trans_vrr_ctl(old_crtc_state));
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 10/15] drm/i915: Extract vrr_vblank_start()
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (8 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 09/15] drm/i915/vrr: Write DC balance params to hw registers Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 11/15] drm/i915/vrr: Implement vblank evasion with DC balancing Mitul Golani
` (6 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Initialise delayed vblank position for evasion logic.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vblank.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 139fa5deba80..680013f00fc0 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -642,6 +642,14 @@ intel_pre_commit_crtc_state(struct intel_atomic_state *state,
return pre_commit_crtc_state(old_crtc_state, new_crtc_state);
}
+static int vrr_vblank_start(const struct intel_crtc_state *crtc_state)
+{
+ if (intel_vrr_is_push_sent(crtc_state))
+ return intel_vrr_vmin_vblank_start(crtc_state);
+ else
+ return intel_vrr_vmax_vblank_start(crtc_state);
+}
+
void intel_vblank_evade_init(const struct intel_crtc_state *old_crtc_state,
const struct intel_crtc_state *new_crtc_state,
struct intel_vblank_evade_ctx *evade)
@@ -668,10 +676,7 @@ void intel_vblank_evade_init(const struct intel_crtc_state *old_crtc_state,
drm_WARN_ON(crtc->base.dev, intel_crtc_needs_modeset(new_crtc_state) ||
new_crtc_state->update_m_n || new_crtc_state->update_lrr);
- if (intel_vrr_is_push_sent(crtc_state))
- evade->vblank_start = intel_vrr_vmin_vblank_start(crtc_state);
- else
- evade->vblank_start = intel_vrr_vmax_vblank_start(crtc_state);
+ evade->vblank_start = vrr_vblank_start(crtc_state);
vblank_delay = intel_vrr_vblank_delay(crtc_state);
} else {
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 11/15] drm/i915/vrr: Implement vblank evasion with DC balancing
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (9 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 10/15] drm/i915: Extract vrr_vblank_start() Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 12/15] drm/i915/dsb: Add pipedmc dc balance enable/disable Mitul Golani
` (5 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Add vblank evasion logic when vrr is already enabled along with
dc balance is computed.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dsb.c | 31 ++++++++++++++++++++-
drivers/gpu/drm/i915/display/intel_vblank.c | 26 +++++++++++++++--
2 files changed, 53 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c
index 481488d1fe67..14b9edbcc6c8 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@ -578,7 +578,36 @@ void intel_dsb_vblank_evade(struct intel_atomic_state *state,
if (crtc_state->has_psr)
intel_dsb_emit_wait_dsl(dsb, DSB_OPCODE_WAIT_DSL_OUT, 0, 0);
- if (pre_commit_is_vrr_active(state, crtc)) {
+ if (pre_commit_is_vrr_active(state, crtc) && crtc_state->vrr.dc_balance.enable) {
+ int vblank_delay = intel_vrr_vblank_delay(crtc_state);
+ int vmin_vblank_start, vmax_vblank_start;
+
+ vmin_vblank_start = intel_vrr_dcb_vmin_vblank_start_next(crtc_state);
+
+ if (vmin_vblank_start >= 0) {
+ end = vmin_vblank_start;
+ start = end - vblank_delay - latency;
+ intel_dsb_wait_scanline_out(state, dsb, start, end);
+ }
+
+ vmax_vblank_start = intel_vrr_dcb_vmax_vblank_start_next(crtc_state);
+
+ if (vmax_vblank_start >= 0) {
+ end = vmax_vblank_start;
+ start = end - vblank_delay - latency;
+ intel_dsb_wait_scanline_out(state, dsb, start, end);
+ }
+
+ vmin_vblank_start = intel_vrr_dcb_vmin_vblank_start_final(crtc_state);
+ end = vmin_vblank_start;
+ start = end - vblank_delay - latency;
+ intel_dsb_wait_scanline_out(state, dsb, start, end);
+
+ vmax_vblank_start = intel_vrr_dcb_vmax_vblank_start_final(crtc_state);
+ end = vmax_vblank_start;
+ start = end - vblank_delay - latency;
+ intel_dsb_wait_scanline_out(state, dsb, start, end);
+ } else if (pre_commit_is_vrr_active(state, crtc)) {
int vblank_delay = intel_vrr_vblank_delay(crtc_state);
end = intel_vrr_vmin_vblank_start(crtc_state);
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 680013f00fc0..eb74d08d6690 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -644,10 +644,30 @@ intel_pre_commit_crtc_state(struct intel_atomic_state *state,
static int vrr_vblank_start(const struct intel_crtc_state *crtc_state)
{
- if (intel_vrr_is_push_sent(crtc_state))
- return intel_vrr_vmin_vblank_start(crtc_state);
+ bool is_push_sent = intel_vrr_is_push_sent(crtc_state);
+ int vblank_start;
+
+ if (!crtc_state->vrr.dc_balance.enable) {
+ if (is_push_sent)
+ return intel_vrr_vmin_vblank_start(crtc_state);
+ else
+ return intel_vrr_vmax_vblank_start(crtc_state);
+ }
+
+ if (is_push_sent)
+ vblank_start = intel_vrr_dcb_vmin_vblank_start_next(crtc_state);
else
- return intel_vrr_vmax_vblank_start(crtc_state);
+ vblank_start = intel_vrr_dcb_vmax_vblank_start_next(crtc_state);
+
+ if (vblank_start >= 0)
+ return vblank_start;
+
+ if (is_push_sent)
+ vblank_start = intel_vrr_dcb_vmin_vblank_start_final(crtc_state);
+ else
+ vblank_start = intel_vrr_dcb_vmax_vblank_start_final(crtc_state);
+
+ return vblank_start;
}
void intel_vblank_evade_init(const struct intel_crtc_state *old_crtc_state,
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 12/15] drm/i915/dsb: Add pipedmc dc balance enable/disable
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (10 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 11/15] drm/i915/vrr: Implement vblank evasion with DC balancing Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 6:20 ` [PATCH v3 13/15] drm/i915/vrr: Restructure VRR enablement bit Mitul Golani
` (4 subsequent siblings)
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Add function to control DC balance enable/disable bit via DSB.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc.c | 24 ++++++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_dmc.h | 5 +++++
2 files changed, 29 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c b/drivers/gpu/drm/i915/display/intel_dmc.c
index b58189d24e7e..c5e27facaacd 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc.c
@@ -30,6 +30,7 @@
#include "intel_de.h"
#include "intel_display_rpm.h"
#include "intel_display_power_well.h"
+#include "intel_display_types.h"
#include "intel_dmc.h"
#include "intel_dmc_regs.h"
#include "intel_step.h"
@@ -1403,3 +1404,26 @@ void intel_dmc_debugfs_register(struct intel_display *display)
debugfs_create_file("i915_dmc_info", 0444, minor->debugfs_root,
display, &intel_dmc_debugfs_status_fops);
}
+
+void intel_pipedmc_dcb_enable(struct intel_dsb *dsb, struct intel_crtc *crtc)
+{
+ struct intel_display *display = to_intel_display(crtc);
+ struct intel_crtc_state *crtc_state =
+ to_intel_crtc_state(crtc->base.state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+
+ intel_de_write_dsb(display, dsb,
+ PIPEDMC_DCB_CTL(display, cpu_transcoder),
+ PIPEDMC_ADAPTIVE_DCB_ENABLE);
+}
+
+void intel_pipedmc_dcb_disable(struct intel_dsb *dsb, struct intel_crtc *crtc)
+{
+ struct intel_display *display = to_intel_display(crtc);
+ struct intel_crtc_state *crtc_state =
+ to_intel_crtc_state(crtc->base.state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+
+ intel_de_write_dsb(display, dsb,
+ PIPEDMC_DCB_CTL(display, cpu_transcoder), 0);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dmc.h b/drivers/gpu/drm/i915/display/intel_dmc.h
index bd1c459b0075..48869f19079a 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc.h
+++ b/drivers/gpu/drm/i915/display/intel_dmc.h
@@ -9,9 +9,11 @@
#include <linux/types.h>
enum pipe;
+struct intel_crtc;
struct drm_printer;
struct intel_display;
struct intel_dmc_snapshot;
+struct intel_dsb;
void intel_dmc_init(struct intel_display *display);
void intel_dmc_load_program(struct intel_display *display);
@@ -34,4 +36,7 @@ void intel_dmc_update_dc6_allowed_count(struct intel_display *display, bool star
void assert_dmc_loaded(struct intel_display *display);
+void intel_pipedmc_dcb_enable(struct intel_dsb *dsb, struct intel_crtc *crtc);
+void intel_pipedmc_dcb_disable(struct intel_dsb *dsb, struct intel_crtc *crtc);
+
#endif /* __INTEL_DMC_H__ */
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v3 13/15] drm/i915/vrr: Restructure VRR enablement bit
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (11 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 12/15] drm/i915/dsb: Add pipedmc dc balance enable/disable Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-29 4:17 ` Nautiyal, Ankit K
2025-04-28 6:20 ` [PATCH v3 14/15] drm/i915/vrr: Pause DC balancing for DSB commits Mitul Golani
` (3 subsequent siblings)
16 siblings, 1 reply; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Restructure bit for VRR enablement.
--v2:
- Separate multiple enablement from one patch.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 25 ++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 54b91c2a0a87..86b858222b6e 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -603,6 +603,7 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 ctl;
if (!crtc_state->vrr.enable)
return;
@@ -617,16 +618,11 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
TRANS_PUSH_EN);
- if (!intel_vrr_always_use_vrr_tg(display)) {
- if (crtc_state->cmrr.enable) {
- intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
- VRR_CTL_VRR_ENABLE | VRR_CTL_CMRR_ENABLE |
- trans_vrr_ctl(crtc_state));
- } else {
- intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
- VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
- }
- }
+ ctl = VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state);
+ if (crtc_state->cmrr.enable)
+ ctl |= VRR_CTL_CMRR_ENABLE;
+
+ intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), ctl);
if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder),
@@ -650,6 +646,7 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
{
struct intel_display *display = to_intel_display(old_crtc_state);
enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
+ u32 ctl;
if (!old_crtc_state->vrr.enable)
return;
@@ -665,9 +662,13 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder), 0);
}
+ ctl = trans_vrr_ctl(old_crtc_state);
+ if (intel_vrr_always_use_vrr_tg(display))
+ ctl |= VRR_CTL_VRR_ENABLE;
+
+ intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), ctl);
+
if (!intel_vrr_always_use_vrr_tg(display)) {
- intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
- trans_vrr_ctl(old_crtc_state));
intel_de_wait_for_clear(display,
TRANS_VRR_STATUS(display, cpu_transcoder),
VRR_STATUS_VRR_EN_LIVE, 1000);
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 13/15] drm/i915/vrr: Restructure VRR enablement bit
2025-04-28 6:20 ` [PATCH v3 13/15] drm/i915/vrr: Restructure VRR enablement bit Mitul Golani
@ 2025-04-29 4:17 ` Nautiyal, Ankit K
0 siblings, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-29 4:17 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Restructure bit for VRR enablement.
>
> --v2:
> - Separate multiple enablement from one patch.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 25 ++++++++++++------------
> 1 file changed, 13 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 54b91c2a0a87..86b858222b6e 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -603,6 +603,7 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> + u32 ctl;
>
> if (!crtc_state->vrr.enable)
> return;
> @@ -617,16 +618,11 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
> TRANS_PUSH_EN);
>
> - if (!intel_vrr_always_use_vrr_tg(display)) {
> - if (crtc_state->cmrr.enable) {
> - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> - VRR_CTL_VRR_ENABLE | VRR_CTL_CMRR_ENABLE |
> - trans_vrr_ctl(crtc_state));
> - } else {
> - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> - VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
> - }
> - }
> + ctl = VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state);
> + if (crtc_state->cmrr.enable)
> + ctl |= VRR_CTL_CMRR_ENABLE;
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), ctl);
>
> if (HAS_VRR_DC_BALANCE(display) && crtc_state->vrr.dc_balance.enable) {
> intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder),
> @@ -650,6 +646,7 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> {
> struct intel_display *display = to_intel_display(old_crtc_state);
> enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
> + u32 ctl;
>
> if (!old_crtc_state->vrr.enable)
> return;
> @@ -665,9 +662,13 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder), 0);
> }
>
> + ctl = trans_vrr_ctl(old_crtc_state);
> + if (intel_vrr_always_use_vrr_tg(display))
> + ctl |= VRR_CTL_VRR_ENABLE;
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), ctl);
> +
This seems to introduce an extra write for TRANS_VRR_CTL for cases where
we always want to enabled VRR TG.
Though there shouldn't be any difference, as the timing generator is
already enabled with guardband and flipline_en bits set.
IMHO it would be good to mention the same in commit message.
In any case change looks alright to me.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Regards,
Ankit
> if (!intel_vrr_always_use_vrr_tg(display)) {
> - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> - trans_vrr_ctl(old_crtc_state));
> intel_de_wait_for_clear(display,
> TRANS_VRR_STATUS(display, cpu_transcoder),
> VRR_STATUS_VRR_EN_LIVE, 1000);
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 14/15] drm/i915/vrr: Pause DC balancing for DSB commits
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (12 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 13/15] drm/i915/vrr: Restructure VRR enablement bit Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-29 4:20 ` Nautiyal, Ankit K
2025-04-28 6:20 ` [PATCH v3 15/15] drm/i915/vrr: enable dc balance bit Mitul Golani
` (2 subsequent siblings)
16 siblings, 1 reply; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Pause the DMC DC balancing for the remainder of the
commit so that vmin/vmax won't change after we've baked
them into the DSB vblank evasion commands.
--v2:
- Remove typo of readding sending PUSH. (Ankit)
- Separate vrr enable structuring from Pause DSB patch. (Ankit)
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 13 +++++++++++++
drivers/gpu/drm/i915/display/intel_vrr.c | 5 +++++
2 files changed, 18 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 1cd9c65da576..e6d7a0a145d2 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -7206,6 +7206,17 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
}
if (new_crtc_state->use_dsb) {
+ /*
+ * Pause the DMC DC balancing for the remainder of the
+ * commit so that vmin/vmax won't change after we've baked
+ * them into the DSB vblank evasion commands.
+ *
+ * FIXME maybe need a small delay here to make sure DMC has
+ * finished updating the values? Or we need a better DMC<->driver
+ * protocol that gives is real guarantees about that...
+ */
+ intel_pipedmc_dcb_disable(NULL, crtc);
+
if (intel_crtc_needs_color_update(new_crtc_state))
intel_color_commit_noarm(new_crtc_state->dsb_commit,
new_crtc_state);
@@ -7242,6 +7253,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
intel_vrr_send_push(new_crtc_state->dsb_commit, new_crtc_state);
intel_dsb_wait_vblank_delay(state, new_crtc_state->dsb_commit);
intel_vrr_check_push_sent(new_crtc_state->dsb_commit, new_crtc_state);
+ if (new_crtc_state->vrr.dc_balance.enable)
+ intel_pipedmc_dcb_enable(new_crtc_state->dsb_commit, crtc);
intel_dsb_interrupt(new_crtc_state->dsb_commit);
}
}
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 86b858222b6e..0f0e21cb05a9 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -9,6 +9,7 @@
#include "i915_reg.h"
#include "intel_de.h"
#include "intel_display_types.h"
+#include "intel_dmc.h"
#include "intel_dp.h"
#include "intel_dmc_regs.h"
#include "intel_vrr.h"
@@ -602,6 +603,7 @@ bool intel_vrr_always_use_vrr_tg(struct intel_display *display)
void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
+ struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
u32 ctl;
@@ -639,12 +641,14 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
crtc_state->vrr.dc_balance.slope);
intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder),
crtc_state->vrr.dc_balance.vblank_target);
+ intel_pipedmc_dcb_enable(NULL, crtc);
}
}
void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
{
struct intel_display *display = to_intel_display(old_crtc_state);
+ struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
u32 ctl;
@@ -652,6 +656,7 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
return;
if (HAS_VRR_DC_BALANCE(display) && old_crtc_state->vrr.dc_balance.enable) {
+ intel_pipedmc_dcb_disable(NULL, crtc);
intel_de_write(display, TRANS_ADAPTIVE_SYNC_DCB_CTL(display, cpu_transcoder), 0);
intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder), 0);
intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder), 0);
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v3 14/15] drm/i915/vrr: Pause DC balancing for DSB commits
2025-04-28 6:20 ` [PATCH v3 14/15] drm/i915/vrr: Pause DC balancing for DSB commits Mitul Golani
@ 2025-04-29 4:20 ` Nautiyal, Ankit K
0 siblings, 0 replies; 27+ messages in thread
From: Nautiyal, Ankit K @ 2025-04-29 4:20 UTC (permalink / raw)
To: Mitul Golani, intel-gfx, intel-xe; +Cc: ville.syrjala
On 4/28/2025 11:50 AM, Mitul Golani wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Pause the DMC DC balancing for the remainder of the
> commit so that vmin/vmax won't change after we've baked
> them into the DSB vblank evasion commands.
>
> --v2:
> - Remove typo of readding sending PUSH. (Ankit)
> - Separate vrr enable structuring from Pause DSB patch. (Ankit)
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 13 +++++++++++++
> drivers/gpu/drm/i915/display/intel_vrr.c | 5 +++++
> 2 files changed, 18 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 1cd9c65da576..e6d7a0a145d2 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -7206,6 +7206,17 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
> }
>
> if (new_crtc_state->use_dsb) {
> + /*
> + * Pause the DMC DC balancing for the remainder of the
> + * commit so that vmin/vmax won't change after we've baked
> + * them into the DSB vblank evasion commands.
> + *
> + * FIXME maybe need a small delay here to make sure DMC has
> + * finished updating the values? Or we need a better DMC<->driver
> + * protocol that gives is real guarantees about that...
> + */
> + intel_pipedmc_dcb_disable(NULL, crtc);
> +
> if (intel_crtc_needs_color_update(new_crtc_state))
> intel_color_commit_noarm(new_crtc_state->dsb_commit,
> new_crtc_state);
> @@ -7242,6 +7253,8 @@ static void intel_atomic_dsb_finish(struct intel_atomic_state *state,
> intel_vrr_send_push(new_crtc_state->dsb_commit, new_crtc_state);
> intel_dsb_wait_vblank_delay(state, new_crtc_state->dsb_commit);
> intel_vrr_check_push_sent(new_crtc_state->dsb_commit, new_crtc_state);
> + if (new_crtc_state->vrr.dc_balance.enable)
> + intel_pipedmc_dcb_enable(new_crtc_state->dsb_commit, crtc);
> intel_dsb_interrupt(new_crtc_state->dsb_commit);
> }
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 86b858222b6e..0f0e21cb05a9 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -9,6 +9,7 @@
> #include "i915_reg.h"
> #include "intel_de.h"
> #include "intel_display_types.h"
> +#include "intel_dmc.h"
> #include "intel_dp.h"
> #include "intel_dmc_regs.h"
> #include "intel_vrr.h"
> @@ -602,6 +603,7 @@ bool intel_vrr_always_use_vrr_tg(struct intel_display *display)
> void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> + struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> u32 ctl;
>
> @@ -639,12 +641,14 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> crtc_state->vrr.dc_balance.slope);
> intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder),
> crtc_state->vrr.dc_balance.vblank_target);
> + intel_pipedmc_dcb_enable(NULL, crtc);
> }
> }
>
> void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> {
> struct intel_display *display = to_intel_display(old_crtc_state);
> + struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
> enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
> u32 ctl;
>
> @@ -652,6 +656,7 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> return;
>
> if (HAS_VRR_DC_BALANCE(display) && old_crtc_state->vrr.dc_balance.enable) {
> + intel_pipedmc_dcb_disable(NULL, crtc);
> intel_de_write(display, TRANS_ADAPTIVE_SYNC_DCB_CTL(display, cpu_transcoder), 0);
> intel_de_write(display, PIPEDMC_DCB_VMIN(display, cpu_transcoder), 0);
> intel_de_write(display, PIPEDMC_DCB_VMAX(display, cpu_transcoder), 0);
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 15/15] drm/i915/vrr: enable dc balance bit
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (13 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 14/15] drm/i915/vrr: Pause DC balancing for DSB commits Mitul Golani
@ 2025-04-28 6:20 ` Mitul Golani
2025-04-28 14:46 ` ✗ Fi.CI.SPARSE: warning for Enable/Disable DC balance along with VRR DSB (rev3) Patchwork
2025-04-28 15:07 ` ✗ i915.CI.BAT: failure " Patchwork
16 siblings, 0 replies; 27+ messages in thread
From: Mitul Golani @ 2025-04-28 6:20 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: ankit.k.nautiyal, ville.syrjala
Enable dc balance from vrr compute config and enable
double buffer adjustment bit when vrr is enabled in
adaptive vtotal mode. Along with this enable frame
counters for DC balance odd and even frame count
calculation.
--v2: Update commit message
Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 0f0e21cb05a9..2111503dff92 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -259,7 +259,12 @@ void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
static
void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
{
+ struct intel_display *display = to_intel_display(crtc_state);
crtc_state->vrr.enable = true;
+
+ if (HAS_VRR_DC_BALANCE(display))
+ crtc_state->vrr.dc_balance.enable = true;
+
crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
}
@@ -623,6 +628,8 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
ctl = VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state);
if (crtc_state->cmrr.enable)
ctl |= VRR_CTL_CMRR_ENABLE;
+ if (crtc_state->vrr.dc_balance.enable)
+ ctl |= VRR_CTL_DCB_ADJ_ENABLE;
intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), ctl);
@@ -641,6 +648,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
crtc_state->vrr.dc_balance.slope);
intel_de_write(display, PIPEDMC_DCB_VBLANK(display, cpu_transcoder),
crtc_state->vrr.dc_balance.vblank_target);
+ /* FIXME reset counters? */
+ intel_de_write(display, TRANS_ADAPTIVE_SYNC_DCB_CTL(display, cpu_transcoder),
+ ADAPTIVE_SYNC_COUNTER_EN);
intel_pipedmc_dcb_enable(NULL, crtc);
}
}
--
2.48.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* ✗ Fi.CI.SPARSE: warning for Enable/Disable DC balance along with VRR DSB (rev3)
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (14 preceding siblings ...)
2025-04-28 6:20 ` [PATCH v3 15/15] drm/i915/vrr: enable dc balance bit Mitul Golani
@ 2025-04-28 14:46 ` Patchwork
2025-04-28 15:07 ` ✗ i915.CI.BAT: failure " Patchwork
16 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2025-04-28 14:46 UTC (permalink / raw)
To: Mitul Golani; +Cc: intel-gfx
== Series Details ==
Series: Enable/Disable DC balance along with VRR DSB (rev3)
URL : https://patchwork.freedesktop.org/series/147799/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 27+ messages in thread* ✗ i915.CI.BAT: failure for Enable/Disable DC balance along with VRR DSB (rev3)
2025-04-28 6:20 [PATCH v3 00/15] Enable/Disable DC balance along with VRR DSB Mitul Golani
` (15 preceding siblings ...)
2025-04-28 14:46 ` ✗ Fi.CI.SPARSE: warning for Enable/Disable DC balance along with VRR DSB (rev3) Patchwork
@ 2025-04-28 15:07 ` Patchwork
16 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2025-04-28 15:07 UTC (permalink / raw)
To: Mitul Golani; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 6001 bytes --]
== Series Details ==
Series: Enable/Disable DC balance along with VRR DSB (rev3)
URL : https://patchwork.freedesktop.org/series/147799/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_16467 -> Patchwork_147799v3
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_147799v3 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_147799v3, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/index.html
Participating hosts (43 -> 43)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_147799v3:
### IGT changes ###
#### Possible regressions ####
* igt@fbdev@write:
- bat-adls-6: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-adls-6/igt@fbdev@write.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-adls-6/igt@fbdev@write.html
* igt@gem_exec_basic@basic@vecs0-smem:
- bat-rpls-4: [PASS][3] -> [ABORT][4] +1 other test abort
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-rpls-4/igt@gem_exec_basic@basic@vecs0-smem.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-rpls-4/igt@gem_exec_basic@basic@vecs0-smem.html
* igt@kms_addfb_basic@bo-too-small:
- bat-dg2-14: [PASS][5] -> [ABORT][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-dg2-14/igt@kms_addfb_basic@bo-too-small.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-dg2-14/igt@kms_addfb_basic@bo-too-small.html
* igt@kms_pipe_crc_basic@hang-read-crc@pipe-c-hdmi-a-2:
- bat-dg2-11: [PASS][7] -> [ABORT][8] +1 other test abort
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-dg2-11/igt@kms_pipe_crc_basic@hang-read-crc@pipe-c-hdmi-a-2.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-dg2-11/igt@kms_pipe_crc_basic@hang-read-crc@pipe-c-hdmi-a-2.html
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-a-dp-1:
- bat-dg2-9: [PASS][9] -> [ABORT][10] +1 other test abort
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-dg2-9/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-a-dp-1.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-dg2-9/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-a-dp-1.html
#### Warnings ####
* igt@kms_addfb_basic@addfb25-x-tiled-legacy:
- bat-mtlp-9: [SKIP][11] ([i915#4212]) -> [ABORT][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-mtlp-9/igt@kms_addfb_basic@addfb25-x-tiled-legacy.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-mtlp-9/igt@kms_addfb_basic@addfb25-x-tiled-legacy.html
Known issues
------------
Here are the changes found in Patchwork_147799v3 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live:
- bat-arlh-2: [PASS][13] -> [INCOMPLETE][14] ([i915#14046]) +1 other test incomplete
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-arlh-2/igt@i915_selftest@live.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-arlh-2/igt@i915_selftest@live.html
#### Possible fixes ####
* igt@i915_module_load@load:
- bat-mtlp-9: [DMESG-WARN][15] ([i915#13494]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-mtlp-9/igt@i915_module_load@load.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-mtlp-9/igt@i915_module_load@load.html
* igt@i915_selftest@live@late_gt_pm:
- bat-atsm-1: [ABORT][17] -> [PASS][18]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-atsm-1/igt@i915_selftest@live@late_gt_pm.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-atsm-1/igt@i915_selftest@live@late_gt_pm.html
* igt@i915_selftest@live@workarounds:
- bat-arls-6: [DMESG-FAIL][19] ([i915#12061]) -> [PASS][20] +1 other test pass
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-arls-6/igt@i915_selftest@live@workarounds.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-arls-6/igt@i915_selftest@live@workarounds.html
#### Warnings ####
* igt@i915_selftest@live:
- bat-atsm-1: [ABORT][21] -> [DMESG-FAIL][22] ([i915#12061] / [i915#13929])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16467/bat-atsm-1/igt@i915_selftest@live.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/bat-atsm-1/igt@i915_selftest@live.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#13494]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13494
[i915#13929]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13929
[i915#14046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14046
[i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
Build changes
-------------
* Linux: CI_DRM_16467 -> Patchwork_147799v3
CI-20190529: 20190529
CI_DRM_16467: 4dfede9f7f69716060d29d84a1267f893da9dbee @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8340: 9eda33fedff747e846671328a19fa516b5bd7015 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_147799v3: 4dfede9f7f69716060d29d84a1267f893da9dbee @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_147799v3/index.html
[-- Attachment #2: Type: text/html, Size: 6957 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread