* [PATCH 01/20] drm/i915/vrr: Remove unwanted comment
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
@ 2025-02-24 6:16 ` Ankit Nautiyal
2025-02-26 13:06 ` Ville Syrjälä
2025-02-24 6:16 ` [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax Ankit Nautiyal
` (20 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:16 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
The comment about fixed average vtotal is incorrect.
Remove it.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index cac49319026d..106bfaf6649b 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -276,11 +276,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
*/
crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
- /*
- * When panel is VRR capable and userspace has
- * not enabled adaptive sync mode then Fixed Average
- * Vtotal mode should be enabled.
- */
if (crtc_state->uapi.vrr_enabled) {
crtc_state->vrr.enable = true;
crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 01/20] drm/i915/vrr: Remove unwanted comment
2025-02-24 6:16 ` [PATCH 01/20] drm/i915/vrr: Remove unwanted comment Ankit Nautiyal
@ 2025-02-26 13:06 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:06 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:46:58AM +0530, Ankit Nautiyal wrote:
> The comment about fixed average vtotal is incorrect.
> Remove it.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 5 -----
> 1 file changed, 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index cac49319026d..106bfaf6649b 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -276,11 +276,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> */
> crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
>
> - /*
> - * When panel is VRR capable and userspace has
> - * not enabled adaptive sync mode then Fixed Average
> - * Vtotal mode should be enabled.
> - */
> if (crtc_state->uapi.vrr_enabled) {
> crtc_state->vrr.enable = true;
> crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
2025-02-24 6:16 ` [PATCH 01/20] drm/i915/vrr: Remove unwanted comment Ankit Nautiyal
@ 2025-02-24 6:16 ` Ankit Nautiyal
2025-02-26 12:59 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 03/20] drm/i915/vrr: Make helpers for cmrr and vrr timings Ankit Nautiyal
` (19 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:16 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Make helpers to compute vmin and vmax.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 39 +++++++++++++++++++-----
1 file changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 106bfaf6649b..a435b8d5b631 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -222,6 +222,35 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
return vtotal;
}
+static
+int intel_vrr_compute_vmin(struct intel_connector *connector,
+ struct drm_display_mode *adjusted_mode)
+{
+ int vmin;
+ const struct drm_display_info *info = &connector->base.display_info;
+
+ vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
+ adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
+ vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
+
+ return vmin;
+}
+
+static
+int intel_vrr_compute_vmax(struct intel_connector *connector,
+ struct drm_display_mode *adjusted_mode)
+{
+ int vmax;
+ const struct drm_display_info *info = &connector->base.display_info;
+
+ vmax = adjusted_mode->crtc_clock * 1000 /
+ (adjusted_mode->crtc_htotal * info->monitor_range.min_vfreq);
+
+ vmax = max_t(int, vmax, adjusted_mode->crtc_vtotal);
+
+ return vmax;
+}
+
void
intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
struct drm_connector_state *conn_state)
@@ -232,7 +261,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
struct intel_dp *intel_dp = intel_attached_dp(connector);
bool is_edp = intel_dp_is_edp(intel_dp);
struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
- const struct drm_display_info *info = &connector->base.display_info;
int vmin, vmax;
/*
@@ -253,13 +281,8 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
if (HAS_LRR(display))
crtc_state->update_lrr = true;
- vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
- adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
- vmax = adjusted_mode->crtc_clock * 1000 /
- (adjusted_mode->crtc_htotal * info->monitor_range.min_vfreq);
-
- vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
- vmax = max_t(int, vmax, adjusted_mode->crtc_vtotal);
+ vmin = intel_vrr_compute_vmin(connector, adjusted_mode);
+ vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
if (vmin >= vmax)
return;
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax
2025-02-24 6:16 ` [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax Ankit Nautiyal
@ 2025-02-26 12:59 ` Ville Syrjälä
2025-02-27 10:13 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 12:59 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:46:59AM +0530, Ankit Nautiyal wrote:
> Make helpers to compute vmin and vmax.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 39 +++++++++++++++++++-----
> 1 file changed, 31 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 106bfaf6649b..a435b8d5b631 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -222,6 +222,35 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
> return vtotal;
> }
>
> +static
> +int intel_vrr_compute_vmin(struct intel_connector *connector,
> + struct drm_display_mode *adjusted_mode)
Make the adjusted mode const
> +{
> + int vmin;
> + const struct drm_display_info *info = &connector->base.display_info;
I generally prefer to order these approximately by the line length
in descending order. So swapping these would look better to me.
Same in the vmax counterpart.
> +
> + vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
> + adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
> + vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
> +
> + return vmin;
> +}
> +
> +static
> +int intel_vrr_compute_vmax(struct intel_connector *connector,
> + struct drm_display_mode *adjusted_mode)
adjusted_mode should be const here as well
> +{
> + int vmax;
> + const struct drm_display_info *info = &connector->base.display_info;
> +
> + vmax = adjusted_mode->crtc_clock * 1000 /
> + (adjusted_mode->crtc_htotal * info->monitor_range.min_vfreq);
> +
extra newline here but not in the vmin counterpart
> + vmax = max_t(int, vmax, adjusted_mode->crtc_vtotal);
> +
> + return vmax;
> +}
> +
With those sorted this is
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> void
> intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> struct drm_connector_state *conn_state)
> @@ -232,7 +261,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> bool is_edp = intel_dp_is_edp(intel_dp);
> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> - const struct drm_display_info *info = &connector->base.display_info;
> int vmin, vmax;
>
> /*
> @@ -253,13 +281,8 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> if (HAS_LRR(display))
> crtc_state->update_lrr = true;
>
> - vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
> - adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
> - vmax = adjusted_mode->crtc_clock * 1000 /
> - (adjusted_mode->crtc_htotal * info->monitor_range.min_vfreq);
> -
> - vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
> - vmax = max_t(int, vmax, adjusted_mode->crtc_vtotal);
> + vmin = intel_vrr_compute_vmin(connector, adjusted_mode);
> + vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
>
> if (vmin >= vmax)
> return;
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax
2025-02-26 12:59 ` Ville Syrjälä
@ 2025-02-27 10:13 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:13 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 6:29 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:46:59AM +0530, Ankit Nautiyal wrote:
>> Make helpers to compute vmin and vmax.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_vrr.c | 39 +++++++++++++++++++-----
>> 1 file changed, 31 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index 106bfaf6649b..a435b8d5b631 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -222,6 +222,35 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
>> return vtotal;
>> }
>>
>> +static
>> +int intel_vrr_compute_vmin(struct intel_connector *connector,
>> + struct drm_display_mode *adjusted_mode)
> Make the adjusted mode const
>
>> +{
>> + int vmin;
>> + const struct drm_display_info *info = &connector->base.display_info;
> I generally prefer to order these approximately by the line length
> in descending order. So swapping these would look better to me.
> Same in the vmax counterpart.
>
>> +
>> + vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
>> + adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
>> + vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
>> +
>> + return vmin;
>> +}
>> +
>> +static
>> +int intel_vrr_compute_vmax(struct intel_connector *connector,
>> + struct drm_display_mode *adjusted_mode)
> adjusted_mode should be const here as well
>
>> +{
>> + int vmax;
>> + const struct drm_display_info *info = &connector->base.display_info;
>> +
>> + vmax = adjusted_mode->crtc_clock * 1000 /
>> + (adjusted_mode->crtc_htotal * info->monitor_range.min_vfreq);
>> +
> extra newline here but not in the vmin counterpart
>
>> + vmax = max_t(int, vmax, adjusted_mode->crtc_vtotal);
>> +
>> + return vmax;
>> +}
>> +
> With those sorted this is
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Thanks for the review and comments. I agree with the suggested changes
and will fix these in next version.
Regards,
Ankit
>
>> void
>> intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>> struct drm_connector_state *conn_state)
>> @@ -232,7 +261,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>> struct intel_dp *intel_dp = intel_attached_dp(connector);
>> bool is_edp = intel_dp_is_edp(intel_dp);
>> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>> - const struct drm_display_info *info = &connector->base.display_info;
>> int vmin, vmax;
>>
>> /*
>> @@ -253,13 +281,8 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>> if (HAS_LRR(display))
>> crtc_state->update_lrr = true;
>>
>> - vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
>> - adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
>> - vmax = adjusted_mode->crtc_clock * 1000 /
>> - (adjusted_mode->crtc_htotal * info->monitor_range.min_vfreq);
>> -
>> - vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
>> - vmax = max_t(int, vmax, adjusted_mode->crtc_vtotal);
>> + vmin = intel_vrr_compute_vmin(connector, adjusted_mode);
>> + vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
>>
>> if (vmin >= vmax)
>> return;
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 03/20] drm/i915/vrr: Make helpers for cmrr and vrr timings
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
2025-02-24 6:16 ` [PATCH 01/20] drm/i915/vrr: Remove unwanted comment Ankit Nautiyal
2025-02-24 6:16 ` [PATCH 02/20] drm/i915:vrr: Separate out functions to compute vmin and vmax Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:07 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 04/20] drm/i915/vrr: Disable CMRR Ankit Nautiyal
` (18 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Separate out functions for computing cmrr and vrr timings.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 45 +++++++++++++++---------
1 file changed, 28 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index a435b8d5b631..008a9c3e152d 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -222,6 +222,30 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
return vtotal;
}
+static
+void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
+{
+ crtc_state->vrr.enable = true;
+ crtc_state->cmrr.enable = true;
+ /*
+ * TODO: Compute precise target refresh rate to determine
+ * if video_mode_required should be true. Currently set to
+ * false due to uncertainty about the precise target
+ * refresh Rate.
+ */
+ crtc_state->vrr.vmax = cmrr_get_vtotal(crtc_state, false);
+ crtc_state->vrr.vmin = crtc_state->vrr.vmax;
+ crtc_state->vrr.flipline = crtc_state->vrr.vmin;
+ crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
+}
+
+static
+void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
+{
+ crtc_state->vrr.enable = true;
+ crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
+}
+
static
int intel_vrr_compute_vmin(struct intel_connector *connector,
struct drm_display_mode *adjusted_mode)
@@ -299,23 +323,10 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
*/
crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
- if (crtc_state->uapi.vrr_enabled) {
- crtc_state->vrr.enable = true;
- crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
- } else if (is_cmrr_frac_required(crtc_state) && is_edp) {
- crtc_state->vrr.enable = true;
- crtc_state->cmrr.enable = true;
- /*
- * TODO: Compute precise target refresh rate to determine
- * if video_mode_required should be true. Currently set to
- * false due to uncertainty about the precise target
- * refresh Rate.
- */
- crtc_state->vrr.vmax = cmrr_get_vtotal(crtc_state, false);
- crtc_state->vrr.vmin = crtc_state->vrr.vmax;
- crtc_state->vrr.flipline = crtc_state->vrr.vmin;
- crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
- }
+ if (crtc_state->uapi.vrr_enabled)
+ intel_vrr_compute_vrr_timings(crtc_state);
+ else if (is_cmrr_frac_required(crtc_state) && is_edp)
+ intel_vrr_compute_cmrr_timings(crtc_state);
if (HAS_AS_SDP(display)) {
crtc_state->vrr.vsync_start =
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 03/20] drm/i915/vrr: Make helpers for cmrr and vrr timings
2025-02-24 6:17 ` [PATCH 03/20] drm/i915/vrr: Make helpers for cmrr and vrr timings Ankit Nautiyal
@ 2025-02-26 13:07 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:07 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:00AM +0530, Ankit Nautiyal wrote:
> Separate out functions for computing cmrr and vrr timings.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 45 +++++++++++++++---------
> 1 file changed, 28 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index a435b8d5b631..008a9c3e152d 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -222,6 +222,30 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
> return vtotal;
> }
>
> +static
> +void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
> +{
> + crtc_state->vrr.enable = true;
> + crtc_state->cmrr.enable = true;
> + /*
> + * TODO: Compute precise target refresh rate to determine
> + * if video_mode_required should be true. Currently set to
> + * false due to uncertainty about the precise target
> + * refresh Rate.
> + */
> + crtc_state->vrr.vmax = cmrr_get_vtotal(crtc_state, false);
> + crtc_state->vrr.vmin = crtc_state->vrr.vmax;
> + crtc_state->vrr.flipline = crtc_state->vrr.vmin;
> + crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> +}
> +
> +static
> +void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
> +{
> + crtc_state->vrr.enable = true;
> + crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> +}
The name of that function is a bit misleading now, but I guess
it'll get more ppropriate once we get further along.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> +
> static
> int intel_vrr_compute_vmin(struct intel_connector *connector,
> struct drm_display_mode *adjusted_mode)
> @@ -299,23 +323,10 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> */
> crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
>
> - if (crtc_state->uapi.vrr_enabled) {
> - crtc_state->vrr.enable = true;
> - crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> - } else if (is_cmrr_frac_required(crtc_state) && is_edp) {
> - crtc_state->vrr.enable = true;
> - crtc_state->cmrr.enable = true;
> - /*
> - * TODO: Compute precise target refresh rate to determine
> - * if video_mode_required should be true. Currently set to
> - * false due to uncertainty about the precise target
> - * refresh Rate.
> - */
> - crtc_state->vrr.vmax = cmrr_get_vtotal(crtc_state, false);
> - crtc_state->vrr.vmin = crtc_state->vrr.vmax;
> - crtc_state->vrr.flipline = crtc_state->vrr.vmin;
> - crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> - }
> + if (crtc_state->uapi.vrr_enabled)
> + intel_vrr_compute_vrr_timings(crtc_state);
> + else if (is_cmrr_frac_required(crtc_state) && is_edp)
> + intel_vrr_compute_cmrr_timings(crtc_state);
>
> if (HAS_AS_SDP(display)) {
> crtc_state->vrr.vsync_start =
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 04/20] drm/i915/vrr: Disable CMRR
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (2 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 03/20] drm/i915/vrr: Make helpers for cmrr and vrr timings Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:08 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing Ankit Nautiyal
` (17 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Switching between variable and fixed timings is possible as for that we
just need to flip between VRR timings. However for CMRR along with the
timings, few other bits also need to be changed on the fly, which might
cause issues. So disable CMRR for now, till we have variable and fixed
timings sorted out.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 008a9c3e152d..0ee7fb0362ce 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -182,7 +182,8 @@ is_cmrr_frac_required(struct intel_crtc_state *crtc_state)
int calculated_refresh_k, actual_refresh_k, pixel_clock_per_line;
struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
- if (!HAS_CMRR(display))
+ /* Avoid CMRR for now till we have VRR with fixed timings working */
+ if (!HAS_CMRR(display) || true)
return false;
actual_refresh_k =
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 04/20] drm/i915/vrr: Disable CMRR
2025-02-24 6:17 ` [PATCH 04/20] drm/i915/vrr: Disable CMRR Ankit Nautiyal
@ 2025-02-26 13:08 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:08 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:01AM +0530, Ankit Nautiyal wrote:
> Switching between variable and fixed timings is possible as for that we
> just need to flip between VRR timings. However for CMRR along with the
> timings, few other bits also need to be changed on the fly, which might
> cause issues. So disable CMRR for now, till we have variable and fixed
> timings sorted out.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Yeh, let's ponder this later.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 008a9c3e152d..0ee7fb0362ce 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -182,7 +182,8 @@ is_cmrr_frac_required(struct intel_crtc_state *crtc_state)
> int calculated_refresh_k, actual_refresh_k, pixel_clock_per_line;
> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>
> - if (!HAS_CMRR(display))
> + /* Avoid CMRR for now till we have VRR with fixed timings working */
> + if (!HAS_CMRR(display) || true)
> return false;
>
> actual_refresh_k =
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (3 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 04/20] drm/i915/vrr: Disable CMRR Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:10 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 06/20] drm/i915/vrr: Use crtc_vtotal for vmin Ankit Nautiyal
` (16 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Since CMRR is now disabled, use the flag vrr.enable to tracks if vrr timing
generator is used with variable timings.
Avoid setting vrr.enable for CMRR and adjust readout to not set vrr.enable
when vmax == vmin == flipline (fixed refresh rate timing).
v2: Use intel_vrr_vmin_flipline() to account for adjustments required
for icl/tgl. (Ville)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 0ee7fb0362ce..4d7f29be55b8 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -226,7 +226,6 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
static
void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
{
- crtc_state->vrr.enable = true;
crtc_state->cmrr.enable = true;
/*
* TODO: Compute precise target refresh rate to determine
@@ -528,6 +527,14 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
}
+static
+bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
+{
+ return crtc_state->vrr.flipline &&
+ crtc_state->vrr.flipline == crtc_state->vrr.vmax &&
+ crtc_state->vrr.flipline == intel_vrr_vmin_flipline(crtc_state);
+}
+
void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
@@ -537,7 +544,6 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
trans_vrr_ctl = intel_de_read(display,
TRANS_VRR_CTL(display, cpu_transcoder));
- crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE;
if (HAS_CMRR(display))
crtc_state->cmrr.enable = (trans_vrr_ctl & VRR_CTL_CMRR_ENABLE);
@@ -577,6 +583,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
}
}
+ crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
+ !intel_vrr_is_fixed_rr(crtc_state);
+
if (crtc_state->vrr.enable)
crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
}
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing
2025-02-24 6:17 ` [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing Ankit Nautiyal
@ 2025-02-26 13:10 ` Ville Syrjälä
2025-02-27 10:16 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:10 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:02AM +0530, Ankit Nautiyal wrote:
> Since CMRR is now disabled, use the flag vrr.enable to tracks if vrr timing
> generator is used with variable timings.
>
> Avoid setting vrr.enable for CMRR and adjust readout to not set vrr.enable
> when vmax == vmin == flipline (fixed refresh rate timing).
>
> v2: Use intel_vrr_vmin_flipline() to account for adjustments required
> for icl/tgl. (Ville)
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 0ee7fb0362ce..4d7f29be55b8 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -226,7 +226,6 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
> static
> void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
> {
> - crtc_state->vrr.enable = true;
> crtc_state->cmrr.enable = true;
> /*
> * TODO: Compute precise target refresh rate to determine
> @@ -528,6 +527,14 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
> }
>
> +static
> +bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
> +{
> + return crtc_state->vrr.flipline &&
> + crtc_state->vrr.flipline == crtc_state->vrr.vmax &&
> + crtc_state->vrr.flipline == intel_vrr_vmin_flipline(crtc_state);
> +}
> +
> void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> @@ -537,7 +544,6 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> trans_vrr_ctl = intel_de_read(display,
> TRANS_VRR_CTL(display, cpu_transcoder));
>
> - crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE;
> if (HAS_CMRR(display))
> crtc_state->cmrr.enable = (trans_vrr_ctl & VRR_CTL_CMRR_ENABLE);
>
> @@ -577,6 +583,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> }
> }
>
> + crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
> + !intel_vrr_is_fixed_rr(crtc_state);
> +
> if (crtc_state->vrr.enable)
> crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
This thing is now inconsistent for CMRR, but since that's disabled now
I guess we don't really care. Just need to keep this in mind when we
fix up CMRR.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> }
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing
2025-02-26 13:10 ` Ville Syrjälä
@ 2025-02-27 10:16 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:16 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 6:40 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:02AM +0530, Ankit Nautiyal wrote:
>> Since CMRR is now disabled, use the flag vrr.enable to tracks if vrr timing
>> generator is used with variable timings.
>>
>> Avoid setting vrr.enable for CMRR and adjust readout to not set vrr.enable
>> when vmax == vmin == flipline (fixed refresh rate timing).
>>
>> v2: Use intel_vrr_vmin_flipline() to account for adjustments required
>> for icl/tgl. (Ville)
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_vrr.c | 13 +++++++++++--
>> 1 file changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index 0ee7fb0362ce..4d7f29be55b8 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -226,7 +226,6 @@ cmrr_get_vtotal(struct intel_crtc_state *crtc_state, bool video_mode_required)
>> static
>> void intel_vrr_compute_cmrr_timings(struct intel_crtc_state *crtc_state)
>> {
>> - crtc_state->vrr.enable = true;
>> crtc_state->cmrr.enable = true;
>> /*
>> * TODO: Compute precise target refresh rate to determine
>> @@ -528,6 +527,14 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
>> intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
>> }
>>
>> +static
>> +bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
>> +{
>> + return crtc_state->vrr.flipline &&
>> + crtc_state->vrr.flipline == crtc_state->vrr.vmax &&
>> + crtc_state->vrr.flipline == intel_vrr_vmin_flipline(crtc_state);
>> +}
>> +
>> void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>> {
>> struct intel_display *display = to_intel_display(crtc_state);
>> @@ -537,7 +544,6 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>> trans_vrr_ctl = intel_de_read(display,
>> TRANS_VRR_CTL(display, cpu_transcoder));
>>
>> - crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE;
>> if (HAS_CMRR(display))
>> crtc_state->cmrr.enable = (trans_vrr_ctl & VRR_CTL_CMRR_ENABLE);
>>
>> @@ -577,6 +583,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>> }
>> }
>>
>> + crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
>> + !intel_vrr_is_fixed_rr(crtc_state);
>> +
>> if (crtc_state->vrr.enable)
>> crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> This thing is now inconsistent for CMRR, but since that's disabled now
> I guess we don't really care. Just need to keep this in mind when we
> fix up CMRR.
You are right. I'll add a #TODO here so that we take care of this while
re-enabling CMRR.
Regards,
Ankit
>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
>> }
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 06/20] drm/i915/vrr: Use crtc_vtotal for vmin
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (4 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 05/20] drm/i915/vrr: Track vrr.enable only for variable timing Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:11 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 07/20] drm/i915/vrr: Prepare for fixed refresh rate timings Ankit Nautiyal
` (15 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
To have fixed refresh rate with VRR timing generator the
guardband/pipeline full can't be programmed on the fly. So we need to
ensure that the values satisfy both the fixed and variable refresh
rates.
Since we compute these value based on vmin, lets set the vmin to
crtc_vtotal for both fixed and variable timings instead of using the
current refresh rate based approach. This way the guardband remains
sufficient for both cases.
v2: Avoid using vblank delay while computing vtotal, as this comes into
the picture later. (Ville)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 4d7f29be55b8..b6120ff1a87c 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -247,17 +247,16 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
}
static
-int intel_vrr_compute_vmin(struct intel_connector *connector,
- struct drm_display_mode *adjusted_mode)
+int intel_vrr_compute_vmin(struct intel_crtc_state *crtc_state)
{
- int vmin;
- const struct drm_display_info *info = &connector->base.display_info;
-
- vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
- adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
- vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
-
- return vmin;
+ /*
+ * To make fixed rr and vrr work seamless the guardband/pipeline full
+ * should be set such that it satisfies both the fixed and variable
+ * timings.
+ * For this set the vmin as crtc_vtotal. With this we never need to
+ * change anything to do with the guardband.
+ */
+ return crtc_state->hw.adjusted_mode.crtc_vtotal;
}
static
@@ -305,7 +304,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
if (HAS_LRR(display))
crtc_state->update_lrr = true;
- vmin = intel_vrr_compute_vmin(connector, adjusted_mode);
+ vmin = intel_vrr_compute_vmin(crtc_state);
vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
if (vmin >= vmax)
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 06/20] drm/i915/vrr: Use crtc_vtotal for vmin
2025-02-24 6:17 ` [PATCH 06/20] drm/i915/vrr: Use crtc_vtotal for vmin Ankit Nautiyal
@ 2025-02-26 13:11 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:11 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:03AM +0530, Ankit Nautiyal wrote:
> To have fixed refresh rate with VRR timing generator the
> guardband/pipeline full can't be programmed on the fly. So we need to
> ensure that the values satisfy both the fixed and variable refresh
> rates.
>
> Since we compute these value based on vmin, lets set the vmin to
> crtc_vtotal for both fixed and variable timings instead of using the
> current refresh rate based approach. This way the guardband remains
> sufficient for both cases.
>
> v2: Avoid using vblank delay while computing vtotal, as this comes into
> the picture later. (Ville)
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 21 ++++++++++-----------
> 1 file changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 4d7f29be55b8..b6120ff1a87c 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -247,17 +247,16 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
> }
>
> static
> -int intel_vrr_compute_vmin(struct intel_connector *connector,
> - struct drm_display_mode *adjusted_mode)
> +int intel_vrr_compute_vmin(struct intel_crtc_state *crtc_state)
> {
> - int vmin;
> - const struct drm_display_info *info = &connector->base.display_info;
> -
> - vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,
> - adjusted_mode->crtc_htotal * info->monitor_range.max_vfreq);
> - vmin = max_t(int, vmin, adjusted_mode->crtc_vtotal);
> -
> - return vmin;
> + /*
> + * To make fixed rr and vrr work seamless the guardband/pipeline full
> + * should be set such that it satisfies both the fixed and variable
> + * timings.
> + * For this set the vmin as crtc_vtotal. With this we never need to
> + * change anything to do with the guardband.
> + */
> + return crtc_state->hw.adjusted_mode.crtc_vtotal;
This is also more consistent what the DP Spec says IIRC, which is
roughtly along the lines of "the timings of the mode define the max
refresh rate". And we do the intel_vrr_is_in_range() check for these
so we know they are good.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> }
>
> static
> @@ -305,7 +304,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> if (HAS_LRR(display))
> crtc_state->update_lrr = true;
>
> - vmin = intel_vrr_compute_vmin(connector, adjusted_mode);
> + vmin = intel_vrr_compute_vmin(crtc_state);
> vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
>
> if (vmin >= vmax)
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 07/20] drm/i915/vrr: Prepare for fixed refresh rate timings
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (5 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 06/20] drm/i915/vrr: Use crtc_vtotal for vmin Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:13 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode Ankit Nautiyal
` (14 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Currently we always compute the timings as if vrr is enabled.
With this approach the state checker becomes complicated when we
introduce fixed refresh rate mode with vrr timing generator.
To avoid the complications, instead of always computing vrr timings, we
compute vrr timings based on uapi.vrr_enable knob.
So when the knob is disabled we always compute vmin=flipline=vmax.
v2: Use actual timings without any adjustments while preparing for
fixed timings in compute_config. (Ville)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 70 ++++++++++++++++++++++++
1 file changed, 70 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index b6120ff1a87c..45efcb57c77a 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -246,6 +246,65 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
}
+/*
+ * For fixed refresh rate mode Vmin, Vmax and Flipline all are set to
+ * Vtotal value.
+ */
+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);
+}
+
+static
+int intel_vrr_fixed_rr_vmax(const struct intel_crtc_state *crtc_state)
+{
+ return intel_vrr_fixed_rr_vtotal(crtc_state);
+}
+
+static
+int intel_vrr_fixed_rr_vmin(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+
+ return intel_vrr_fixed_rr_vtotal(crtc_state) -
+ intel_vrr_flipline_offset(display);
+}
+
+static
+int intel_vrr_fixed_rr_flipline(const struct intel_crtc_state *crtc_state)
+{
+ return intel_vrr_fixed_rr_vtotal(crtc_state);
+}
+
+static
+void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+
+ intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
+ intel_vrr_fixed_rr_vmin(crtc_state) - 1);
+ intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
+ intel_vrr_fixed_rr_vmax(crtc_state) - 1);
+ intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
+ intel_vrr_fixed_rr_flipline(crtc_state) - 1);
+}
+
+static
+void intel_vrr_prepare_fixed_timings(struct intel_crtc_state *crtc_state)
+{
+ crtc_state->vrr.vmax = intel_vrr_vmin_flipline(crtc_state);
+ crtc_state->vrr.flipline = intel_vrr_vmin_flipline(crtc_state);
+}
+
static
int intel_vrr_compute_vmin(struct intel_crtc_state *crtc_state)
{
@@ -326,6 +385,8 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
intel_vrr_compute_vrr_timings(crtc_state);
else if (is_cmrr_frac_required(crtc_state) && is_edp)
intel_vrr_compute_cmrr_timings(crtc_state);
+ else
+ intel_vrr_prepare_fixed_timings(crtc_state);
if (HAS_AS_SDP(display)) {
crtc_state->vrr.vsync_start =
@@ -497,6 +558,13 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
if (!crtc_state->vrr.enable)
return;
+ intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
+ crtc_state->vrr.vmin - 1);
+ intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
+ crtc_state->vrr.vmax - 1);
+ intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
+ crtc_state->vrr.flipline - 1);
+
intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
TRANS_PUSH_EN);
@@ -524,6 +592,8 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
TRANS_VRR_STATUS(display, cpu_transcoder),
VRR_STATUS_VRR_EN_LIVE, 1000);
intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
+
+ intel_vrr_set_fixed_rr_timings(old_crtc_state);
}
static
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 07/20] drm/i915/vrr: Prepare for fixed refresh rate timings
2025-02-24 6:17 ` [PATCH 07/20] drm/i915/vrr: Prepare for fixed refresh rate timings Ankit Nautiyal
@ 2025-02-26 13:13 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:13 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:04AM +0530, Ankit Nautiyal wrote:
> Currently we always compute the timings as if vrr is enabled.
> With this approach the state checker becomes complicated when we
> introduce fixed refresh rate mode with vrr timing generator.
>
> To avoid the complications, instead of always computing vrr timings, we
> compute vrr timings based on uapi.vrr_enable knob.
> So when the knob is disabled we always compute vmin=flipline=vmax.
>
> v2: Use actual timings without any adjustments while preparing for
> fixed timings in compute_config. (Ville)
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 70 ++++++++++++++++++++++++
> 1 file changed, 70 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index b6120ff1a87c..45efcb57c77a 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -246,6 +246,65 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
> crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> }
>
> +/*
> + * For fixed refresh rate mode Vmin, Vmax and Flipline all are set to
> + * Vtotal value.
> + */
> +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);
> +}
> +
> +static
> +int intel_vrr_fixed_rr_vmax(const struct intel_crtc_state *crtc_state)
> +{
> + return intel_vrr_fixed_rr_vtotal(crtc_state);
> +}
> +
> +static
> +int intel_vrr_fixed_rr_vmin(const struct intel_crtc_state *crtc_state)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> +
> + return intel_vrr_fixed_rr_vtotal(crtc_state) -
> + intel_vrr_flipline_offset(display);
> +}
> +
> +static
> +int intel_vrr_fixed_rr_flipline(const struct intel_crtc_state *crtc_state)
> +{
> + return intel_vrr_fixed_rr_vtotal(crtc_state);
> +}
> +
> +static
> +void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> +
> + intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> + intel_vrr_fixed_rr_vmin(crtc_state) - 1);
> + intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> + intel_vrr_fixed_rr_vmax(crtc_state) - 1);
> + intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
> + intel_vrr_fixed_rr_flipline(crtc_state) - 1);
> +}
> +
> +static
> +void intel_vrr_prepare_fixed_timings(struct intel_crtc_state *crtc_state)
> +{
> + crtc_state->vrr.vmax = intel_vrr_vmin_flipline(crtc_state);
> + crtc_state->vrr.flipline = intel_vrr_vmin_flipline(crtc_state);
> +}
> +
> static
> int intel_vrr_compute_vmin(struct intel_crtc_state *crtc_state)
> {
> @@ -326,6 +385,8 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> intel_vrr_compute_vrr_timings(crtc_state);
> else if (is_cmrr_frac_required(crtc_state) && is_edp)
> intel_vrr_compute_cmrr_timings(crtc_state);
> + else
> + intel_vrr_prepare_fixed_timings(crtc_state);
>
> if (HAS_AS_SDP(display)) {
> crtc_state->vrr.vsync_start =
> @@ -497,6 +558,13 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> if (!crtc_state->vrr.enable)
> return;
>
> + intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> + crtc_state->vrr.vmin - 1);
> + intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> + crtc_state->vrr.vmax - 1);
> + intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
> + crtc_state->vrr.flipline - 1);
> +
> intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
> TRANS_PUSH_EN);
>
> @@ -524,6 +592,8 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> TRANS_VRR_STATUS(display, cpu_transcoder),
> VRR_STATUS_VRR_EN_LIVE, 1000);
> intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
> +
> + intel_vrr_set_fixed_rr_timings(old_crtc_state);
> }
>
> static
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (6 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 07/20] drm/i915/vrr: Prepare for fixed refresh rate timings Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:27 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI Ankit Nautiyal
` (13 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
MSA Ignore Timing PAR enable is set in the DP sink when we enable variable
refresh rate.
Currently for link training we depend on flipline to decide whether we
want to ignore the msa timings. With fixed refresh rate we will still
fill the flipline in all cases whether panel supports VRR or not.
Change the condition for link training to ignore the msa timings if
vrr.in_range.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp_link_training.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
index 3cc06c916017..549e4ebd9404 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
@@ -725,7 +725,7 @@ static void intel_dp_update_downspread_ctrl(struct intel_dp *intel_dp,
const struct intel_crtc_state *crtc_state)
{
intel_dp_link_training_set_mode(intel_dp,
- crtc_state->port_clock, crtc_state->vrr.flipline);
+ crtc_state->port_clock, crtc_state->vrr.in_range);
}
void intel_dp_link_training_set_bw(struct intel_dp *intel_dp,
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode
2025-02-24 6:17 ` [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode Ankit Nautiyal
@ 2025-02-26 13:27 ` Ville Syrjälä
2025-02-27 10:19 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:27 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:05AM +0530, Ankit Nautiyal wrote:
> MSA Ignore Timing PAR enable is set in the DP sink when we enable variable
> refresh rate.
>
> Currently for link training we depend on flipline to decide whether we
> want to ignore the msa timings. With fixed refresh rate we will still
> fill the flipline in all cases whether panel supports VRR or not.
>
> Change the condition for link training to ignore the msa timings if
> vrr.in_range.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp_link_training.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> index 3cc06c916017..549e4ebd9404 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> @@ -725,7 +725,7 @@ static void intel_dp_update_downspread_ctrl(struct intel_dp *intel_dp,
> const struct intel_crtc_state *crtc_state)
> {
> intel_dp_link_training_set_mode(intel_dp,
> - crtc_state->port_clock, crtc_state->vrr.flipline);
> + crtc_state->port_clock, crtc_state->vrr.in_range);
I think one thing we are perhaps missing is the readout of
vrr.in_range. But we can't really read that out during driver
load since we don't have the connector information read in yet.
So if we do end up doing a modeset during initial_commit() we'll
clear the MSA ignore bit. But I guess the GOP probably wouldn't
even set that bit.
Where things can go wrong is when we do enable actual VRR mode
and there hasn't been any modesets since the initial_commit().
We might not have to perform a full modeset to enable VRR, and
thus we would never set the MSA ignore bit.
So I think we will need some kind of fastset support for this
DPCD write after all. Though we'd only have to do it on the
first real commit when we clear the inherited flag.
But this is a pre-existing problem so not something we have
to deal with this in this patch. Just something to put on the
TODO list...
This patch is
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> }
>
> void intel_dp_link_training_set_bw(struct intel_dp *intel_dp,
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode
2025-02-26 13:27 ` Ville Syrjälä
@ 2025-02-27 10:19 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:19 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 6:57 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:05AM +0530, Ankit Nautiyal wrote:
>> MSA Ignore Timing PAR enable is set in the DP sink when we enable variable
>> refresh rate.
>>
>> Currently for link training we depend on flipline to decide whether we
>> want to ignore the msa timings. With fixed refresh rate we will still
>> fill the flipline in all cases whether panel supports VRR or not.
>>
>> Change the condition for link training to ignore the msa timings if
>> vrr.in_range.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_dp_link_training.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
>> index 3cc06c916017..549e4ebd9404 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
>> @@ -725,7 +725,7 @@ static void intel_dp_update_downspread_ctrl(struct intel_dp *intel_dp,
>> const struct intel_crtc_state *crtc_state)
>> {
>> intel_dp_link_training_set_mode(intel_dp,
>> - crtc_state->port_clock, crtc_state->vrr.flipline);
>> + crtc_state->port_clock, crtc_state->vrr.in_range);
> I think one thing we are perhaps missing is the readout of
> vrr.in_range. But we can't really read that out during driver
> load since we don't have the connector information read in yet.
> So if we do end up doing a modeset during initial_commit() we'll
> clear the MSA ignore bit. But I guess the GOP probably wouldn't
> even set that bit.
>
> Where things can go wrong is when we do enable actual VRR mode
> and there hasn't been any modesets since the initial_commit().
> We might not have to perform a full modeset to enable VRR, and
> thus we would never set the MSA ignore bit.
>
> So I think we will need some kind of fastset support for this
> DPCD write after all. Though we'd only have to do it on the
> first real commit when we clear the inherited flag.
>
> But this is a pre-existing problem so not something we have
> to deal with this in this patch. Just something to put on the
> TODO list...
I agree. Will add a TODO for this as well.
Regards,
Ankit
>
> This patch is
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
>> }
>>
>> void intel_dp_link_training_set_bw(struct intel_dp *intel_dp,
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (7 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 08/20] drm/i915/display: Enable MSA Ignore Timing PAR only when in not fixed_rr mode Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:30 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 10/20] drm/i915/dp_mst: Use VRR Timing generator for DP MST Ankit Nautiyal
` (12 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Add support for using VRR Timing generator for HDMI panels.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
---
drivers/gpu/drm/i915/display/intel_hdmi.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index ed017d9de920..28130436735f 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -64,6 +64,7 @@
#include "intel_panel.h"
#include "intel_pfit.h"
#include "intel_snps_phy.h"
+#include "intel_vrr.h"
static void
assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi)
@@ -2384,6 +2385,8 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
}
}
+ intel_vrr_compute_config(pipe_config, conn_state);
+
intel_hdmi_compute_gcp_infoframe(encoder, pipe_config,
conn_state);
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI
2025-02-24 6:17 ` [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI Ankit Nautiyal
@ 2025-02-26 13:30 ` Ville Syrjälä
2025-02-27 10:31 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:30 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:06AM +0530, Ankit Nautiyal wrote:
> Add support for using VRR Timing generator for HDMI panels.
Please provide actual justification for this. And some kind of
explanation what kind of timings this will give us and why.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_hdmi.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index ed017d9de920..28130436735f 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -64,6 +64,7 @@
> #include "intel_panel.h"
> #include "intel_pfit.h"
> #include "intel_snps_phy.h"
> +#include "intel_vrr.h"
>
> static void
> assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi)
> @@ -2384,6 +2385,8 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
> }
> }
>
> + intel_vrr_compute_config(pipe_config, conn_state);
> +
> intel_hdmi_compute_gcp_infoframe(encoder, pipe_config,
> conn_state);
>
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* Re: [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI
2025-02-26 13:30 ` Ville Syrjälä
@ 2025-02-27 10:31 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:31 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 7:00 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:06AM +0530, Ankit Nautiyal wrote:
>> Add support for using VRR Timing generator for HDMI panels.
> Please provide actual justification for this. And some kind of
> explanation what kind of timings this will give us and why.
You are right. The commit message is giving an impression that the patch
will enable VRR for HDMI which is incorrect.
Will provide proper explanation/justification here and for MST case too
in the next patch.
Regards,
Ankit
>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_hdmi.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> index ed017d9de920..28130436735f 100644
>> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
>> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
>> @@ -64,6 +64,7 @@
>> #include "intel_panel.h"
>> #include "intel_pfit.h"
>> #include "intel_snps_phy.h"
>> +#include "intel_vrr.h"
>>
>> static void
>> assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi)
>> @@ -2384,6 +2385,8 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,
>> }
>> }
>>
>> + intel_vrr_compute_config(pipe_config, conn_state);
>> +
>> intel_hdmi_compute_gcp_infoframe(encoder, pipe_config,
>> conn_state);
>>
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 10/20] drm/i915/dp_mst: Use VRR Timing generator for DP MST
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (8 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 09/20] drm/i915/hdmi: Use VRR Timing generator for HDMI Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:30 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR Ankit Nautiyal
` (11 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Configure VRR timing generator for DP MST for fixed refresh rate.
Currently the variable timings are supported only for DP and eDP and not
for DP MST. Call intel_vrr_compute_config for MST which will configure
fixed refresh rate timings irrespective of whether VRR is supported or
not.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp_mst.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 167e4a70ab12..2c4a9ac6f61e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -51,6 +51,7 @@
#include "intel_link_bw.h"
#include "intel_psr.h"
#include "intel_vdsc.h"
+#include "intel_vrr.h"
#include "skl_scaler.h"
/*
@@ -709,6 +710,8 @@ static int mst_stream_compute_config(struct intel_encoder *encoder,
pipe_config->lane_lat_optim_mask =
bxt_dpio_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
+ intel_vrr_compute_config(pipe_config, conn_state);
+
intel_dp_audio_compute_config(encoder, pipe_config, conn_state);
intel_ddi_compute_min_voltage_level(pipe_config);
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 10/20] drm/i915/dp_mst: Use VRR Timing generator for DP MST
2025-02-24 6:17 ` [PATCH 10/20] drm/i915/dp_mst: Use VRR Timing generator for DP MST Ankit Nautiyal
@ 2025-02-26 13:30 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:30 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:07AM +0530, Ankit Nautiyal wrote:
> Configure VRR timing generator for DP MST for fixed refresh rate.
> Currently the variable timings are supported only for DP and eDP and not
> for DP MST. Call intel_vrr_compute_config for MST which will configure
> fixed refresh rate timings irrespective of whether VRR is supported or
> not.
Also needs actual justification like the HDMI version.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp_mst.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 167e4a70ab12..2c4a9ac6f61e 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -51,6 +51,7 @@
> #include "intel_link_bw.h"
> #include "intel_psr.h"
> #include "intel_vdsc.h"
> +#include "intel_vrr.h"
> #include "skl_scaler.h"
>
> /*
> @@ -709,6 +710,8 @@ static int mst_stream_compute_config(struct intel_encoder *encoder,
> pipe_config->lane_lat_optim_mask =
> bxt_dpio_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
>
> + intel_vrr_compute_config(pipe_config, conn_state);
> +
> intel_dp_audio_compute_config(encoder, pipe_config, conn_state);
>
> intel_ddi_compute_min_voltage_level(pipe_config);
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (9 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 10/20] drm/i915/dp_mst: Use VRR Timing generator for DP MST Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:45 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2 Ankit Nautiyal
` (10 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
As per bspec 49268: Disable PSR before disabling VRR.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 065fdf6dbb88..0db84af1063a 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1202,6 +1202,8 @@ static void intel_pre_plane_update(struct intel_atomic_state *state,
intel_atomic_get_new_crtc_state(state, crtc);
enum pipe pipe = crtc->pipe;
+ intel_psr_pre_plane_update(state, crtc);
+
if (intel_crtc_vrr_disabling(state, crtc)) {
intel_vrr_disable(old_crtc_state);
intel_crtc_update_active_timings(old_crtc_state, false);
@@ -1212,8 +1214,6 @@ static void intel_pre_plane_update(struct intel_atomic_state *state,
intel_drrs_deactivate(old_crtc_state);
- intel_psr_pre_plane_update(state, crtc);
-
if (hsw_ips_pre_update(state, crtc))
intel_crtc_wait_for_next_vblank(crtc);
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR
2025-02-24 6:17 ` [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR Ankit Nautiyal
@ 2025-02-26 13:45 ` Ville Syrjälä
2025-02-27 10:33 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:45 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani,
Jouni Hogander
On Mon, Feb 24, 2025 at 11:47:08AM +0530, Ankit Nautiyal wrote:
> As per bspec 49268: Disable PSR before disabling VRR.
We don't currently allow the VRR+PSR combo anyway, but if/when
we get to it I guess we'll want this order.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Hmm, the intel_psr_post_plane_update() should probably also
be moved to the end of intel_post_plane_update((). Not becasue
of VRR (that was already enabled in the commit proper) but
because some of the other stuff in intel_post_plane_update()
may need to do vblank waits and whatnot, so enabling PSR
as early as we do now is simply counter productive.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 065fdf6dbb88..0db84af1063a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -1202,6 +1202,8 @@ static void intel_pre_plane_update(struct intel_atomic_state *state,
> intel_atomic_get_new_crtc_state(state, crtc);
> enum pipe pipe = crtc->pipe;
>
> + intel_psr_pre_plane_update(state, crtc);
> +
> if (intel_crtc_vrr_disabling(state, crtc)) {
> intel_vrr_disable(old_crtc_state);
> intel_crtc_update_active_timings(old_crtc_state, false);
> @@ -1212,8 +1214,6 @@ static void intel_pre_plane_update(struct intel_atomic_state *state,
>
> intel_drrs_deactivate(old_crtc_state);
>
> - intel_psr_pre_plane_update(state, crtc);
> -
> if (hsw_ips_pre_update(state, crtc))
> intel_crtc_wait_for_next_vblank(crtc);
>
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR
2025-02-26 13:45 ` Ville Syrjälä
@ 2025-02-27 10:33 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:33 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani,
Jouni Hogander
On 2/26/2025 7:15 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:08AM +0530, Ankit Nautiyal wrote:
>> As per bspec 49268: Disable PSR before disabling VRR.
> We don't currently allow the VRR+PSR combo anyway, but if/when
> we get to it I guess we'll want this order.
>
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Hmm, the intel_psr_post_plane_update() should probably also
> be moved to the end of intel_post_plane_update((). Not becasue
> of VRR (that was already enabled in the commit proper) but
> because some of the other stuff in intel_post_plane_update()
> may need to do vblank waits and whatnot, so enabling PSR
> as early as we do now is simply counter productive.
Hmm. I'll check this and add a separate patch for this.
Regards,
Ankit
>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_display.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> index 065fdf6dbb88..0db84af1063a 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -1202,6 +1202,8 @@ static void intel_pre_plane_update(struct intel_atomic_state *state,
>> intel_atomic_get_new_crtc_state(state, crtc);
>> enum pipe pipe = crtc->pipe;
>>
>> + intel_psr_pre_plane_update(state, crtc);
>> +
>> if (intel_crtc_vrr_disabling(state, crtc)) {
>> intel_vrr_disable(old_crtc_state);
>> intel_crtc_update_active_timings(old_crtc_state, false);
>> @@ -1212,8 +1214,6 @@ static void intel_pre_plane_update(struct intel_atomic_state *state,
>>
>> intel_drrs_deactivate(old_crtc_state);
>>
>> - intel_psr_pre_plane_update(state, crtc);
>> -
>> if (hsw_ips_pre_update(state, crtc))
>> intel_crtc_wait_for_next_vblank(crtc);
>>
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (10 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 11/20] drm/i915/display: Disable PSR before disabling VRR Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 13:55 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr Ankit Nautiyal
` (9 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Wa_14015406119 is required for PSR1/2 while working with fixed refresh
rate with VRR timing generator.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 0db84af1063a..752ed44d8892 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -2508,8 +2508,9 @@ static bool intel_crtc_needs_wa_14015401596(const struct intel_crtc_state *crtc_
{
struct intel_display *display = to_intel_display(crtc_state);
- return intel_vrr_possible(crtc_state) && crtc_state->has_psr &&
- IS_DISPLAY_VER(display, 13, 14);
+ return intel_vrr_possible(crtc_state) &&
+ (crtc_state->has_psr || crtc_state->has_sel_update) &&
+ IS_DISPLAY_VER(display, 13, 14);
}
static int intel_crtc_vblank_delay(const struct intel_crtc_state *crtc_state)
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2
2025-02-24 6:17 ` [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2 Ankit Nautiyal
@ 2025-02-26 13:55 ` Ville Syrjälä
2025-02-27 10:36 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 13:55 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:09AM +0530, Ankit Nautiyal wrote:
> Wa_14015406119 is required for PSR1/2 while working with fixed refresh
> rate with VRR timing generator.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 0db84af1063a..752ed44d8892 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -2508,8 +2508,9 @@ static bool intel_crtc_needs_wa_14015401596(const struct intel_crtc_state *crtc_
> {
> struct intel_display *display = to_intel_display(crtc_state);
>
> - return intel_vrr_possible(crtc_state) && crtc_state->has_psr &&
> - IS_DISPLAY_VER(display, 13, 14);
> + return intel_vrr_possible(crtc_state) &&
> + (crtc_state->has_psr || crtc_state->has_sel_update) &&
I presume you wanted some kind of use_vrr_tg_always() check here instead
of that has_sel_update thing (which is a nop since it should never be
set unless has_psr is also set)?
> + IS_DISPLAY_VER(display, 13, 14);
> }
>
> static int intel_crtc_vblank_delay(const struct intel_crtc_state *crtc_state)
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2
2025-02-26 13:55 ` Ville Syrjälä
@ 2025-02-27 10:36 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:36 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 7:25 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:09AM +0530, Ankit Nautiyal wrote:
>> Wa_14015406119 is required for PSR1/2 while working with fixed refresh
>> rate with VRR timing generator.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_display.c | 5 +++--
>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> index 0db84af1063a..752ed44d8892 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -2508,8 +2508,9 @@ static bool intel_crtc_needs_wa_14015401596(const struct intel_crtc_state *crtc_
>> {
>> struct intel_display *display = to_intel_display(crtc_state);
>>
>> - return intel_vrr_possible(crtc_state) && crtc_state->has_psr &&
>> - IS_DISPLAY_VER(display, 13, 14);
>> + return intel_vrr_possible(crtc_state) &&
>> + (crtc_state->has_psr || crtc_state->has_sel_update) &&
> I presume you wanted some kind of use_vrr_tg_always() check here instead
> of that has_sel_update thing (which is a nop since it should never be
> set unless has_psr is also set)?
Thanks for pointing this out.
I think I misunderstood the flags. Its clearly documented that `has_psr`
is always set for psr1/2, panel replay.
Also we already have check for vrr_possible which checks flipline, so
this is covered for our case.
I'll drop this patch.
Regards,
Ankit
>
>> + IS_DISPLAY_VER(display, 13, 14);
>> }
>>
>> static int intel_crtc_vblank_delay(const struct intel_crtc_state *crtc_state)
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (11 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 12/20] drm/i915/display: Extend WA 14015406119 for PSR2 Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-24 13:47 ` Nautiyal, Ankit K
2025-02-24 6:17 ` [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR Ankit Nautiyal
` (8 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Do not program transcoder registers for VRR for the secondary pipe of
the joiner. Remove check to skip VRR for joiner case.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 45efcb57c77a..30fcd1e66a12 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -345,13 +345,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
int vmin, vmax;
- /*
- * FIXME all joined pipes share the same transcoder.
- * Need to account for that during VRR toggle/push/etc.
- */
- if (crtc_state->joiner_pipes)
- return;
-
if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
return;
@@ -443,6 +436,9 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
struct intel_display *display = to_intel_display(crtc_state);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ if (intel_crtc_is_joiner_secondary(crtc_state))
+ return;
+
/*
* This bit seems to have two meanings depending on the platform:
* TGL: generate VRR "safe window" for DSB vblank waits
@@ -494,6 +490,9 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
if (!crtc_state->vrr.enable)
return;
+ if (intel_crtc_is_joiner_secondary(crtc_state))
+ return;
+
if (dsb)
intel_dsb_nonpost_start(dsb);
@@ -558,6 +557,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
if (!crtc_state->vrr.enable)
return;
+ if (intel_crtc_is_joiner_secondary(crtc_state))
+ return;
+
intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
crtc_state->vrr.vmin - 1);
intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
@@ -586,6 +588,9 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
if (!old_crtc_state->vrr.enable)
return;
+ if (intel_crtc_is_joiner_secondary(old_crtc_state))
+ return;
+
intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
trans_vrr_ctl(old_crtc_state));
intel_de_wait_for_clear(display,
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr
2025-02-24 6:17 ` [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr Ankit Nautiyal
@ 2025-02-24 13:47 ` Nautiyal, Ankit K
2025-02-26 15:14 ` Ville Syrjälä
0 siblings, 1 reply; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-24 13:47 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
On 2/24/2025 11:47 AM, Ankit Nautiyal wrote:
> Do not program transcoder registers for VRR for the secondary pipe of
> the joiner. Remove check to skip VRR for joiner case.
Missed to drop this patch as mentioned in the last version.
Will work on this after the other changes are agreed upon, so this can
be ignored for now.
Regards,
Ankit
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 45efcb57c77a..30fcd1e66a12 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -345,13 +345,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> int vmin, vmax;
>
> - /*
> - * FIXME all joined pipes share the same transcoder.
> - * Need to account for that during VRR toggle/push/etc.
> - */
> - if (crtc_state->joiner_pipes)
> - return;
> -
> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
> return;
>
> @@ -443,6 +436,9 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> struct intel_display *display = to_intel_display(crtc_state);
> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>
> + if (intel_crtc_is_joiner_secondary(crtc_state))
> + return;
> +
> /*
> * This bit seems to have two meanings depending on the platform:
> * TGL: generate VRR "safe window" for DSB vblank waits
> @@ -494,6 +490,9 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
> if (!crtc_state->vrr.enable)
> return;
>
> + if (intel_crtc_is_joiner_secondary(crtc_state))
> + return;
> +
> if (dsb)
> intel_dsb_nonpost_start(dsb);
>
> @@ -558,6 +557,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> if (!crtc_state->vrr.enable)
> return;
>
> + if (intel_crtc_is_joiner_secondary(crtc_state))
> + return;
> +
> intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> crtc_state->vrr.vmin - 1);
> intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> @@ -586,6 +588,9 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> if (!old_crtc_state->vrr.enable)
> return;
>
> + if (intel_crtc_is_joiner_secondary(old_crtc_state))
> + return;
> +
> intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> trans_vrr_ctl(old_crtc_state));
> intel_de_wait_for_clear(display,
^ permalink raw reply [flat|nested] 57+ messages in thread
* Re: [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr
2025-02-24 13:47 ` Nautiyal, Ankit K
@ 2025-02-26 15:14 ` Ville Syrjälä
2025-02-27 10:37 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 15:14 UTC (permalink / raw)
To: Nautiyal, Ankit K
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 07:17:59PM +0530, Nautiyal, Ankit K wrote:
>
> On 2/24/2025 11:47 AM, Ankit Nautiyal wrote:
> > Do not program transcoder registers for VRR for the secondary pipe of
> > the joiner. Remove check to skip VRR for joiner case.
>
> Missed to drop this patch as mentioned in the last version.
>
> Will work on this after the other changes are agreed upon, so this can
> be ignored for now.
I think before trying to do full joiner+vrr support we should
just allow joiner+fixed_rr (and also not allow update_lrr).
That would avoid the problems with the live VRR reprogramming.
>
>
> Regards,
>
> Ankit
>
> >
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
> > 1 file changed, 12 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> > index 45efcb57c77a..30fcd1e66a12 100644
> > --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> > @@ -345,13 +345,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> > struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> > int vmin, vmax;
> >
> > - /*
> > - * FIXME all joined pipes share the same transcoder.
> > - * Need to account for that during VRR toggle/push/etc.
> > - */
> > - if (crtc_state->joiner_pipes)
> > - return;
> > -
> > if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
> > return;
> >
> > @@ -443,6 +436,9 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> > struct intel_display *display = to_intel_display(crtc_state);
> > enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> >
> > + if (intel_crtc_is_joiner_secondary(crtc_state))
> > + return;
> > +
> > /*
> > * This bit seems to have two meanings depending on the platform:
> > * TGL: generate VRR "safe window" for DSB vblank waits
> > @@ -494,6 +490,9 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
> > if (!crtc_state->vrr.enable)
> > return;
> >
> > + if (intel_crtc_is_joiner_secondary(crtc_state))
> > + return;
> > +
> > if (dsb)
> > intel_dsb_nonpost_start(dsb);
> >
> > @@ -558,6 +557,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> > if (!crtc_state->vrr.enable)
> > return;
> >
> > + if (intel_crtc_is_joiner_secondary(crtc_state))
> > + return;
> > +
> > intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> > crtc_state->vrr.vmin - 1);
> > intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> > @@ -586,6 +588,9 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> > if (!old_crtc_state->vrr.enable)
> > return;
> >
> > + if (intel_crtc_is_joiner_secondary(old_crtc_state))
> > + return;
> > +
> > intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> > trans_vrr_ctl(old_crtc_state));
> > intel_de_wait_for_clear(display,
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* Re: [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr
2025-02-26 15:14 ` Ville Syrjälä
@ 2025-02-27 10:37 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:37 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 8:44 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 07:17:59PM +0530, Nautiyal, Ankit K wrote:
>> On 2/24/2025 11:47 AM, Ankit Nautiyal wrote:
>>> Do not program transcoder registers for VRR for the secondary pipe of
>>> the joiner. Remove check to skip VRR for joiner case.
>> Missed to drop this patch as mentioned in the last version.
>>
>> Will work on this after the other changes are agreed upon, so this can
>> be ignored for now.
> I think before trying to do full joiner+vrr support we should
> just allow joiner+fixed_rr (and also not allow update_lrr).
> That would avoid the problems with the live VRR reprogramming.
That makes sense.
Will allow joiner + fixed_rr and skip actual vrr and lrr when joiner is
used.
Regards,
Ankit
>
>>
>> Regards,
>>
>> Ankit
>>
>>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>> ---
>>> drivers/gpu/drm/i915/display/intel_vrr.c | 19 ++++++++++++-------
>>> 1 file changed, 12 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>>> index 45efcb57c77a..30fcd1e66a12 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>>> @@ -345,13 +345,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>>> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>>> int vmin, vmax;
>>>
>>> - /*
>>> - * FIXME all joined pipes share the same transcoder.
>>> - * Need to account for that during VRR toggle/push/etc.
>>> - */
>>> - if (crtc_state->joiner_pipes)
>>> - return;
>>> -
>>> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
>>> return;
>>>
>>> @@ -443,6 +436,9 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>>> struct intel_display *display = to_intel_display(crtc_state);
>>> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>>>
>>> + if (intel_crtc_is_joiner_secondary(crtc_state))
>>> + return;
>>> +
>>> /*
>>> * This bit seems to have two meanings depending on the platform:
>>> * TGL: generate VRR "safe window" for DSB vblank waits
>>> @@ -494,6 +490,9 @@ void intel_vrr_send_push(struct intel_dsb *dsb,
>>> if (!crtc_state->vrr.enable)
>>> return;
>>>
>>> + if (intel_crtc_is_joiner_secondary(crtc_state))
>>> + return;
>>> +
>>> if (dsb)
>>> intel_dsb_nonpost_start(dsb);
>>>
>>> @@ -558,6 +557,9 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
>>> if (!crtc_state->vrr.enable)
>>> return;
>>>
>>> + if (intel_crtc_is_joiner_secondary(crtc_state))
>>> + return;
>>> +
>>> intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
>>> crtc_state->vrr.vmin - 1);
>>> intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
>>> @@ -586,6 +588,9 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
>>> if (!old_crtc_state->vrr.enable)
>>> return;
>>>
>>> + if (intel_crtc_is_joiner_secondary(old_crtc_state))
>>> + return;
>>> +
>>> intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
>>> trans_vrr_ctl(old_crtc_state));
>>> intel_de_wait_for_clear(display,
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (12 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 13/20] drm/i915/vrr: Handle joiner with vrr Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 14:01 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 15/20] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable} Ankit Nautiyal
` (7 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
LRR and Vmax can be computed only if VRR is supported and vrr.in_range
is set. Currently we proceed with vrr timings only for VRR supporting
panels and return otherwise. For using VRR TG with fix timings, need to
continue even for panels that do not support VRR.
To achieve this, refactor the condition for computing vmax and
update_lrr so that we can continue for fixed timings for panels that do
not support VRR.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 30fcd1e66a12..024c3014670a 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -343,21 +343,21 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
struct intel_dp *intel_dp = intel_attached_dp(connector);
bool is_edp = intel_dp_is_edp(intel_dp);
struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
- int vmin, vmax;
+ int vmin = 0, vmax = 0;
if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
return;
crtc_state->vrr.in_range =
intel_vrr_is_in_range(connector, drm_mode_vrefresh(adjusted_mode));
- if (!crtc_state->vrr.in_range)
- return;
- if (HAS_LRR(display))
- crtc_state->update_lrr = true;
+ if (crtc_state->vrr.in_range) {
+ if (HAS_LRR(display))
+ crtc_state->update_lrr = true;
+ vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
+ }
vmin = intel_vrr_compute_vmin(crtc_state);
- vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
if (vmin >= vmax)
return;
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR
2025-02-24 6:17 ` [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR Ankit Nautiyal
@ 2025-02-26 14:01 ` Ville Syrjälä
2025-02-27 10:39 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 14:01 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:11AM +0530, Ankit Nautiyal wrote:
> LRR and Vmax can be computed only if VRR is supported and vrr.in_range
> is set. Currently we proceed with vrr timings only for VRR supporting
> panels and return otherwise. For using VRR TG with fix timings, need to
> continue even for panels that do not support VRR.
>
> To achieve this, refactor the condition for computing vmax and
> update_lrr so that we can continue for fixed timings for panels that do
> not support VRR.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 30fcd1e66a12..024c3014670a 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -343,21 +343,21 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> struct intel_dp *intel_dp = intel_attached_dp(connector);
> bool is_edp = intel_dp_is_edp(intel_dp);
> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> - int vmin, vmax;
> + int vmin = 0, vmax = 0;
>
> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
> return;
>
> crtc_state->vrr.in_range =
> intel_vrr_is_in_range(connector, drm_mode_vrefresh(adjusted_mode));
> - if (!crtc_state->vrr.in_range)
> - return;
>
> - if (HAS_LRR(display))
> - crtc_state->update_lrr = true;
> + if (crtc_state->vrr.in_range) {
> + if (HAS_LRR(display))
> + crtc_state->update_lrr = true;
> + vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
} else {
vmax = vmin;
}
might be a bit more clear way do this?
>
> vmin = intel_vrr_compute_vmin(crtc_state);
> - vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
>
> if (vmin >= vmax)
> return;
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR
2025-02-26 14:01 ` Ville Syrjälä
@ 2025-02-27 10:39 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:39 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 7:31 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:11AM +0530, Ankit Nautiyal wrote:
>> LRR and Vmax can be computed only if VRR is supported and vrr.in_range
>> is set. Currently we proceed with vrr timings only for VRR supporting
>> panels and return otherwise. For using VRR TG with fix timings, need to
>> continue even for panels that do not support VRR.
>>
>> To achieve this, refactor the condition for computing vmax and
>> update_lrr so that we can continue for fixed timings for panels that do
>> not support VRR.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_vrr.c | 12 ++++++------
>> 1 file changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index 30fcd1e66a12..024c3014670a 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -343,21 +343,21 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>> struct intel_dp *intel_dp = intel_attached_dp(connector);
>> bool is_edp = intel_dp_is_edp(intel_dp);
>> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>> - int vmin, vmax;
>> + int vmin = 0, vmax = 0;
>>
>> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
>> return;
>>
>> crtc_state->vrr.in_range =
>> intel_vrr_is_in_range(connector, drm_mode_vrefresh(adjusted_mode));
>> - if (!crtc_state->vrr.in_range)
>> - return;
>>
>> - if (HAS_LRR(display))
>> - crtc_state->update_lrr = true;
>> + if (crtc_state->vrr.in_range) {
>> + if (HAS_LRR(display))
>> + crtc_state->update_lrr = true;
>> + vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
> } else {
> vmax = vmin;
> }
>
> might be a bit more clear way do this?
Yes this seems more intuitive instead of letting vmax as unset.
Regards,
Ankit
>
>>
>> vmin = intel_vrr_compute_vmin(crtc_state);
>> - vmax = intel_vrr_compute_vmax(connector, adjusted_mode);
>>
>> if (vmin >= vmax)
>> return;
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 15/20] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable}
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (13 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 14/20] drm/i915/vrr: Refactor condition for computing vmax and LRR Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 14:01 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr() Ankit Nautiyal
` (6 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
For platforms for which vrr timing generator is always set, VRR_CTL
enable bit does not need to toggle, so modify the vrr_{enable/disable}
for this.
At the moment the helper intel_vrr_always_use_vrr_tg() return false for
all cases. This will be set later when all other bits are in place.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 40 ++++++++++++++++--------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 024c3014670a..11b7edbdb116 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -549,6 +549,16 @@ bool intel_vrr_is_push_sent(const struct intel_crtc_state *crtc_state)
return intel_de_read(display, TRANS_PUSH(display, cpu_transcoder)) & TRANS_PUSH_SEND;
}
+static
+bool intel_vrr_always_use_vrr_tg(struct intel_display *display)
+{
+ if (!HAS_VRR(display))
+ return false;
+
+ /* #TODO return true for platforms supporting fixed_rr */
+ return false;
+}
+
void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
@@ -570,13 +580,15 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
TRANS_PUSH_EN);
- 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));
+ 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));
+ }
}
}
@@ -591,12 +603,14 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
if (intel_crtc_is_joiner_secondary(old_crtc_state))
return;
- 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);
- intel_de_write(display, TRANS_PUSH(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));
+ intel_de_wait_for_clear(display,
+ TRANS_VRR_STATUS(display, cpu_transcoder),
+ VRR_STATUS_VRR_EN_LIVE, 1000);
+ intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
+ }
intel_vrr_set_fixed_rr_timings(old_crtc_state);
}
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 15/20] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable}
2025-02-24 6:17 ` [PATCH 15/20] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable} Ankit Nautiyal
@ 2025-02-26 14:01 ` Ville Syrjälä
0 siblings, 0 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 14:01 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:12AM +0530, Ankit Nautiyal wrote:
> For platforms for which vrr timing generator is always set, VRR_CTL
> enable bit does not need to toggle, so modify the vrr_{enable/disable}
> for this.
> At the moment the helper intel_vrr_always_use_vrr_tg() return false for
> all cases. This will be set later when all other bits are in place.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 40 ++++++++++++++++--------
> 1 file changed, 27 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 024c3014670a..11b7edbdb116 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -549,6 +549,16 @@ bool intel_vrr_is_push_sent(const struct intel_crtc_state *crtc_state)
> return intel_de_read(display, TRANS_PUSH(display, cpu_transcoder)) & TRANS_PUSH_SEND;
> }
>
> +static
> +bool intel_vrr_always_use_vrr_tg(struct intel_display *display)
> +{
> + if (!HAS_VRR(display))
> + return false;
> +
> + /* #TODO return true for platforms supporting fixed_rr */
> + return false;
> +}
> +
> void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> @@ -570,13 +580,15 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
> intel_de_write(display, TRANS_PUSH(display, cpu_transcoder),
> TRANS_PUSH_EN);
>
> - 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));
> + 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));
> + }
> }
> }
>
> @@ -591,12 +603,14 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> if (intel_crtc_is_joiner_secondary(old_crtc_state))
> return;
>
> - 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);
> - intel_de_write(display, TRANS_PUSH(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));
> + intel_de_wait_for_clear(display,
> + TRANS_VRR_STATUS(display, cpu_transcoder),
> + VRR_STATUS_VRR_EN_LIVE, 1000);
> + intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0);
> + }
>
> intel_vrr_set_fixed_rr_timings(old_crtc_state);
> }
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr()
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (14 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 15/20] drm/i915/vrr: Always set vrr vmax/vmin/flipline in vrr_{enable/disable} Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 15:00 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence Ankit Nautiyal
` (5 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
To have Guardband/Pipeline_full reconfigured seamlessly, move the
guardband and pipeline_full checks out from the pure !fastset block in
intel_pipe_config_compare().
Update the intel_set_transcoder_timings_lrr() function to use
fixed refresh rate timings for platforms which always use
VRR timing generator.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 43 ++++++++++++++++----
drivers/gpu/drm/i915/display/intel_vrr.c | 13 +++++-
drivers/gpu/drm/i915/display/intel_vrr.h | 2 +
3 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 752ed44d8892..d3c12bc3645c 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -2854,6 +2854,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
intel_de_write(dev_priv, TRANS_VTOTAL(dev_priv, cpu_transcoder),
VACTIVE(crtc_vdisplay - 1) |
VTOTAL(crtc_vtotal - 1));
+
+ intel_vrr_set_fixed_rr_timings(crtc_state);
+ intel_vrr_update_guardband(crtc_state, false);
}
static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state)
@@ -5127,17 +5130,36 @@ pipe_config_cx0pll_mismatch(struct drm_printer *p, bool fastset,
intel_cx0pll_dump_hw_state(display, b);
}
-static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state)
+static
+bool allow_vrr_guardband_fastset(const struct intel_crtc_state *old_crtc_state,
+ const struct intel_crtc_state *new_crtc_state)
+{
+ struct intel_display *display = to_intel_display(old_crtc_state);
+
+ if (!HAS_VRR(display))
+ return false;
+
+ if (DISPLAY_VER(display) >= 13)
+ return new_crtc_state->vrr.guardband != old_crtc_state->vrr.guardband;
+
+ return new_crtc_state->vrr.pipeline_full != old_crtc_state->vrr.pipeline_full;
+}
+
+static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state,
+ const struct intel_crtc_state *new_crtc_state)
{
struct intel_display *display = to_intel_display(old_crtc_state);
/*
- * Allow fastboot to fix up vblank delay (handled via LRR
- * codepaths), a bit dodgy as the registers aren't
+ * Allow fastboot to fix up vblank delay, vrr guardband/pipeline_full
+ * (handled via LRR codepaths), a bit dodgy as the registers aren't
* double buffered but seems to be working more or less...
*/
- return HAS_LRR(display) && old_crtc_state->inherited &&
- !intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI);
+ if (!HAS_LRR(display) || intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI))
+ return false;
+
+ return old_crtc_state->inherited ||
+ allow_vrr_guardband_fastset(old_crtc_state, new_crtc_state);
}
bool
@@ -5273,7 +5295,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
PIPE_CONF_CHECK_I(name.crtc_hsync_start); \
PIPE_CONF_CHECK_I(name.crtc_hsync_end); \
PIPE_CONF_CHECK_I(name.crtc_vdisplay); \
- if (!fastset || !allow_vblank_delay_fastset(current_config)) \
+ if (!fastset || !allow_vblank_delay_fastset(current_config, pipe_config)) \
PIPE_CONF_CHECK_I(name.crtc_vblank_start); \
PIPE_CONF_CHECK_I(name.crtc_vsync_start); \
PIPE_CONF_CHECK_I(name.crtc_vsync_end); \
@@ -5569,8 +5591,6 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
PIPE_CONF_CHECK_I(vrr.vmin);
PIPE_CONF_CHECK_I(vrr.vmax);
PIPE_CONF_CHECK_I(vrr.flipline);
- PIPE_CONF_CHECK_I(vrr.pipeline_full);
- PIPE_CONF_CHECK_I(vrr.guardband);
PIPE_CONF_CHECK_I(vrr.vsync_start);
PIPE_CONF_CHECK_I(vrr.vsync_end);
PIPE_CONF_CHECK_LLI(cmrr.cmrr_m);
@@ -5578,6 +5598,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
PIPE_CONF_CHECK_BOOL(cmrr.enable);
}
+ if (!fastset || !allow_vblank_delay_fastset(current_config, pipe_config)) {
+ PIPE_CONF_CHECK_I(vrr.guardband);
+ PIPE_CONF_CHECK_I(vrr.pipeline_full);
+ }
+
#undef PIPE_CONF_CHECK_X
#undef PIPE_CONF_CHECK_I
#undef PIPE_CONF_CHECK_LLI
@@ -5875,7 +5900,7 @@ static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_sta
drm_dbg_kms(&i915->drm, "[CRTC:%d:%s] fastset requirement not met, forcing full modeset\n",
crtc->base.base.id, crtc->base.name);
} else {
- if (allow_vblank_delay_fastset(old_crtc_state))
+ if (allow_vblank_delay_fastset(old_crtc_state, new_crtc_state))
new_crtc_state->update_lrr = true;
new_crtc_state->uapi.mode_changed = false;
}
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 11b7edbdb116..e77f5b483b09 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -284,7 +284,6 @@ int intel_vrr_fixed_rr_flipline(const struct intel_crtc_state *crtc_state)
return intel_vrr_fixed_rr_vtotal(crtc_state);
}
-static
void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
@@ -677,3 +676,15 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
if (crtc_state->vrr.enable)
crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
}
+
+void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 vrr_ctl = trans_vrr_ctl(crtc_state);
+
+ if (intel_vrr_always_use_vrr_tg(display) && !needs_modeset)
+ vrr_ctl |= VRR_CTL_VRR_ENABLE;
+
+ intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), vrr_ctl);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
index 514822577e8a..e4e9cadcdf9e 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr.h
@@ -35,5 +35,7 @@ int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state);
int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
+void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset);
+void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
#endif /* __INTEL_VRR_H__ */
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr()
2025-02-24 6:17 ` [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr() Ankit Nautiyal
@ 2025-02-26 15:00 ` Ville Syrjälä
2025-02-27 10:28 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 15:00 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:13AM +0530, Ankit Nautiyal wrote:
> To have Guardband/Pipeline_full reconfigured seamlessly, move the
> guardband and pipeline_full checks out from the pure !fastset block in
> intel_pipe_config_compare().
> Update the intel_set_transcoder_timings_lrr() function to use
> fixed refresh rate timings for platforms which always use
> VRR timing generator.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 43 ++++++++++++++++----
> drivers/gpu/drm/i915/display/intel_vrr.c | 13 +++++-
> drivers/gpu/drm/i915/display/intel_vrr.h | 2 +
> 3 files changed, 48 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 752ed44d8892..d3c12bc3645c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -2854,6 +2854,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
> intel_de_write(dev_priv, TRANS_VTOTAL(dev_priv, cpu_transcoder),
> VACTIVE(crtc_vdisplay - 1) |
> VTOTAL(crtc_vtotal - 1));
> +
> + intel_vrr_set_fixed_rr_timings(crtc_state);
> + intel_vrr_update_guardband(crtc_state, false);
> }
>
> static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state)
> @@ -5127,17 +5130,36 @@ pipe_config_cx0pll_mismatch(struct drm_printer *p, bool fastset,
> intel_cx0pll_dump_hw_state(display, b);
> }
>
> -static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state)
> +static
> +bool allow_vrr_guardband_fastset(const struct intel_crtc_state *old_crtc_state,
> + const struct intel_crtc_state *new_crtc_state)
> +{
> + struct intel_display *display = to_intel_display(old_crtc_state);
> +
> + if (!HAS_VRR(display))
> + return false;
> +
> + if (DISPLAY_VER(display) >= 13)
> + return new_crtc_state->vrr.guardband != old_crtc_state->vrr.guardband;
> +
> + return new_crtc_state->vrr.pipeline_full != old_crtc_state->vrr.pipeline_full;
> +}
None of this stuff should be necessary. allow_vblank_delay_fastset()
only says whether we're allowed the fastset or not. It isn't supposed
to check if it's necessary or not.
> +
> +static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state,
> + const struct intel_crtc_state *new_crtc_state)
> {
> struct intel_display *display = to_intel_display(old_crtc_state);
>
> /*
> - * Allow fastboot to fix up vblank delay (handled via LRR
> - * codepaths), a bit dodgy as the registers aren't
> + * Allow fastboot to fix up vblank delay, vrr guardband/pipeline_full
> + * (handled via LRR codepaths), a bit dodgy as the registers aren't
> * double buffered but seems to be working more or less...
> */
> - return HAS_LRR(display) && old_crtc_state->inherited &&
> - !intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI);
> + if (!HAS_LRR(display) || intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI))
> + return false;
> +
> + return old_crtc_state->inherited ||
> + allow_vrr_guardband_fastset(old_crtc_state, new_crtc_state);
> }
>
> bool
> @@ -5273,7 +5295,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> PIPE_CONF_CHECK_I(name.crtc_hsync_start); \
> PIPE_CONF_CHECK_I(name.crtc_hsync_end); \
> PIPE_CONF_CHECK_I(name.crtc_vdisplay); \
> - if (!fastset || !allow_vblank_delay_fastset(current_config)) \
> + if (!fastset || !allow_vblank_delay_fastset(current_config, pipe_config)) \
> PIPE_CONF_CHECK_I(name.crtc_vblank_start); \
> PIPE_CONF_CHECK_I(name.crtc_vsync_start); \
> PIPE_CONF_CHECK_I(name.crtc_vsync_end); \
> @@ -5569,8 +5591,6 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> PIPE_CONF_CHECK_I(vrr.vmin);
> PIPE_CONF_CHECK_I(vrr.vmax);
> PIPE_CONF_CHECK_I(vrr.flipline);
> - PIPE_CONF_CHECK_I(vrr.pipeline_full);
> - PIPE_CONF_CHECK_I(vrr.guardband);
> PIPE_CONF_CHECK_I(vrr.vsync_start);
> PIPE_CONF_CHECK_I(vrr.vsync_end);
> PIPE_CONF_CHECK_LLI(cmrr.cmrr_m);
> @@ -5578,6 +5598,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> PIPE_CONF_CHECK_BOOL(cmrr.enable);
> }
>
> + if (!fastset || !allow_vblank_delay_fastset(current_config, pipe_config)) {
> + PIPE_CONF_CHECK_I(vrr.guardband);
> + PIPE_CONF_CHECK_I(vrr.pipeline_full);
> + }
I'd like to see one patch that just moves these completely out
of the !fastset block, and a second patch that adds the fastboot
exception. That way if we do see any problems from the live
guardband reprogramming we can just revert it.
Hmm, except you haven't changed the vrr_compute_config() yet at
this point in the series, so changing this would break both fastset
and state checker, I think. So we might have to move this patch to be
later in the series.
> +
> #undef PIPE_CONF_CHECK_X
> #undef PIPE_CONF_CHECK_I
> #undef PIPE_CONF_CHECK_LLI
> @@ -5875,7 +5900,7 @@ static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_sta
> drm_dbg_kms(&i915->drm, "[CRTC:%d:%s] fastset requirement not met, forcing full modeset\n",
> crtc->base.base.id, crtc->base.name);
> } else {
> - if (allow_vblank_delay_fastset(old_crtc_state))
> + if (allow_vblank_delay_fastset(old_crtc_state, new_crtc_state))
> new_crtc_state->update_lrr = true;
> new_crtc_state->uapi.mode_changed = false;
> }
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 11b7edbdb116..e77f5b483b09 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -284,7 +284,6 @@ int intel_vrr_fixed_rr_flipline(const struct intel_crtc_state *crtc_state)
> return intel_vrr_fixed_rr_vtotal(crtc_state);
> }
>
> -static
> void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> @@ -677,3 +676,15 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> if (crtc_state->vrr.enable)
> crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
> }
> +
> +void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> + u32 vrr_ctl = trans_vrr_ctl(crtc_state);
> +
> + if (intel_vrr_always_use_vrr_tg(display) && !needs_modeset)
> + vrr_ctl |= VRR_CTL_VRR_ENABLE;
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), vrr_ctl);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
> index 514822577e8a..e4e9cadcdf9e 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.h
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.h
> @@ -35,5 +35,7 @@ int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state);
> int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
> int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
> int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
> +void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset);
> +void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
>
> #endif /* __INTEL_VRR_H__ */
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr()
2025-02-26 15:00 ` Ville Syrjälä
@ 2025-02-27 10:28 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:28 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 8:30 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:13AM +0530, Ankit Nautiyal wrote:
>> To have Guardband/Pipeline_full reconfigured seamlessly, move the
>> guardband and pipeline_full checks out from the pure !fastset block in
>> intel_pipe_config_compare().
>> Update the intel_set_transcoder_timings_lrr() function to use
>> fixed refresh rate timings for platforms which always use
>> VRR timing generator.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_display.c | 43 ++++++++++++++++----
>> drivers/gpu/drm/i915/display/intel_vrr.c | 13 +++++-
>> drivers/gpu/drm/i915/display/intel_vrr.h | 2 +
>> 3 files changed, 48 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> index 752ed44d8892..d3c12bc3645c 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -2854,6 +2854,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
>> intel_de_write(dev_priv, TRANS_VTOTAL(dev_priv, cpu_transcoder),
>> VACTIVE(crtc_vdisplay - 1) |
>> VTOTAL(crtc_vtotal - 1));
>> +
>> + intel_vrr_set_fixed_rr_timings(crtc_state);
>> + intel_vrr_update_guardband(crtc_state, false);
>> }
>>
>> static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state)
>> @@ -5127,17 +5130,36 @@ pipe_config_cx0pll_mismatch(struct drm_printer *p, bool fastset,
>> intel_cx0pll_dump_hw_state(display, b);
>> }
>>
>> -static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state)
>> +static
>> +bool allow_vrr_guardband_fastset(const struct intel_crtc_state *old_crtc_state,
>> + const struct intel_crtc_state *new_crtc_state)
>> +{
>> + struct intel_display *display = to_intel_display(old_crtc_state);
>> +
>> + if (!HAS_VRR(display))
>> + return false;
>> +
>> + if (DISPLAY_VER(display) >= 13)
>> + return new_crtc_state->vrr.guardband != old_crtc_state->vrr.guardband;
>> +
>> + return new_crtc_state->vrr.pipeline_full != old_crtc_state->vrr.pipeline_full;
>> +}
> None of this stuff should be necessary. allow_vblank_delay_fastset()
> only says whether we're allowed the fastset or not. It isn't supposed
> to check if it's necessary or not.
>
>> +
>> +static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state,
>> + const struct intel_crtc_state *new_crtc_state)
>> {
>> struct intel_display *display = to_intel_display(old_crtc_state);
>>
>> /*
>> - * Allow fastboot to fix up vblank delay (handled via LRR
>> - * codepaths), a bit dodgy as the registers aren't
>> + * Allow fastboot to fix up vblank delay, vrr guardband/pipeline_full
>> + * (handled via LRR codepaths), a bit dodgy as the registers aren't
>> * double buffered but seems to be working more or less...
>> */
>> - return HAS_LRR(display) && old_crtc_state->inherited &&
>> - !intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI);
>> + if (!HAS_LRR(display) || intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI))
>> + return false;
>> +
>> + return old_crtc_state->inherited ||
>> + allow_vrr_guardband_fastset(old_crtc_state, new_crtc_state);
>> }
>>
>> bool
>> @@ -5273,7 +5295,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
>> PIPE_CONF_CHECK_I(name.crtc_hsync_start); \
>> PIPE_CONF_CHECK_I(name.crtc_hsync_end); \
>> PIPE_CONF_CHECK_I(name.crtc_vdisplay); \
>> - if (!fastset || !allow_vblank_delay_fastset(current_config)) \
>> + if (!fastset || !allow_vblank_delay_fastset(current_config, pipe_config)) \
>> PIPE_CONF_CHECK_I(name.crtc_vblank_start); \
>> PIPE_CONF_CHECK_I(name.crtc_vsync_start); \
>> PIPE_CONF_CHECK_I(name.crtc_vsync_end); \
>> @@ -5569,8 +5591,6 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
>> PIPE_CONF_CHECK_I(vrr.vmin);
>> PIPE_CONF_CHECK_I(vrr.vmax);
>> PIPE_CONF_CHECK_I(vrr.flipline);
>> - PIPE_CONF_CHECK_I(vrr.pipeline_full);
>> - PIPE_CONF_CHECK_I(vrr.guardband);
>> PIPE_CONF_CHECK_I(vrr.vsync_start);
>> PIPE_CONF_CHECK_I(vrr.vsync_end);
>> PIPE_CONF_CHECK_LLI(cmrr.cmrr_m);
>> @@ -5578,6 +5598,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
>> PIPE_CONF_CHECK_BOOL(cmrr.enable);
>> }
>>
>> + if (!fastset || !allow_vblank_delay_fastset(current_config, pipe_config)) {
>> + PIPE_CONF_CHECK_I(vrr.guardband);
>> + PIPE_CONF_CHECK_I(vrr.pipeline_full);
>> + }
> I'd like to see one patch that just moves these completely out
> of the !fastset block, and a second patch that adds the fastboot
> exception. That way if we do see any problems from the live
> guardband reprogramming we can just revert it.
I have one doubt.
If we remove guardband/pipeline_full from the !fastset block, the
VRR-seamless-switch case will start failing.
This is because the test tries a virtual LRR mode, resulting in a change
in the VRR guardband.
Since its not in fastset block, we will need a full modeset, but the
test expects a seamless switch.
Regards,
Ankit
>
> Hmm, except you haven't changed the vrr_compute_config() yet at
> this point in the series, so changing this would break both fastset
> and state checker, I think. So we might have to move this patch to be
> later in the series.
>
>> +
>> #undef PIPE_CONF_CHECK_X
>> #undef PIPE_CONF_CHECK_I
>> #undef PIPE_CONF_CHECK_LLI
>> @@ -5875,7 +5900,7 @@ static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_sta
>> drm_dbg_kms(&i915->drm, "[CRTC:%d:%s] fastset requirement not met, forcing full modeset\n",
>> crtc->base.base.id, crtc->base.name);
>> } else {
>> - if (allow_vblank_delay_fastset(old_crtc_state))
>> + if (allow_vblank_delay_fastset(old_crtc_state, new_crtc_state))
>> new_crtc_state->update_lrr = true;
>> new_crtc_state->uapi.mode_changed = false;
>> }
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index 11b7edbdb116..e77f5b483b09 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -284,7 +284,6 @@ int intel_vrr_fixed_rr_flipline(const struct intel_crtc_state *crtc_state)
>> return intel_vrr_fixed_rr_vtotal(crtc_state);
>> }
>>
>> -static
>> void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state)
>> {
>> struct intel_display *display = to_intel_display(crtc_state);
>> @@ -677,3 +676,15 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>> if (crtc_state->vrr.enable)
>> crtc_state->mode_flags |= I915_MODE_FLAG_VRR;
>> }
>> +
>> +void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset)
>> +{
>> + struct intel_display *display = to_intel_display(crtc_state);
>> + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>> + u32 vrr_ctl = trans_vrr_ctl(crtc_state);
>> +
>> + if (intel_vrr_always_use_vrr_tg(display) && !needs_modeset)
>> + vrr_ctl |= VRR_CTL_VRR_ENABLE;
>> +
>> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), vrr_ctl);
>> +}
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
>> index 514822577e8a..e4e9cadcdf9e 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.h
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.h
>> @@ -35,5 +35,7 @@ int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state);
>> int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
>> int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
>> int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
>> +void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset);
>> +void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
>>
>> #endif /* __INTEL_VRR_H__ */
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (15 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 16/20] drm/i915/display: Use fixed rr timings in intel_set_transcoder_timings_lrr() Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 15:06 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR Ankit Nautiyal
` (4 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
During modeset enable sequence, program the fixed timings, and turn on the
VRR Timing Generator (VRR TG) for platforms that always use VRR TG.
For this intel_vrr_set_transcoder now always programs fixed timings.
Later if vrr timings are required, vrr_enable() will switch
to the real VRR timings.
For platforms that will always use VRR TG, the VRR_CTL Enable bit is set
and reset in the transcoder enable/disable path.
v2: Update intel_vrr_set_transcoder_timings for fixed_rr.
v3: Update intel_set_transcoder_timings_lrr for fixed_rr. (Ville)
v4: Have separate functions to enable/disable VRR CTL
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 5 +++
drivers/gpu/drm/i915/display/intel_dp_mst.c | 4 +++
drivers/gpu/drm/i915/display/intel_vrr.c | 40 +++++++++++++--------
drivers/gpu/drm/i915/display/intel_vrr.h | 3 ++
4 files changed, 38 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 5082f38b0a02..8863d1526aea 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -77,6 +77,7 @@
#include "intel_tc.h"
#include "intel_vdsc.h"
#include "intel_vdsc_regs.h"
+#include "intel_vrr.h"
#include "skl_scaler.h"
#include "skl_universal_plane.h"
@@ -3276,6 +3277,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
const struct intel_crtc_state *old_crtc_state,
const struct drm_connector_state *old_conn_state)
{
+ intel_vrr_transcoder_disable(old_crtc_state);
+
if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
intel_ddi_post_disable_hdmi_or_sst(state, encoder, old_crtc_state,
old_conn_state);
@@ -3524,6 +3527,8 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
intel_ddi_enable_transcoder_func(encoder, crtc_state);
+ intel_vrr_transcoder_enable(crtc_state);
+
/* Enable/Disable DP2.0 SDP split config before transcoder */
intel_audio_sdp_split_update(crtc_state);
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 2c4a9ac6f61e..5ec353eceab4 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1048,6 +1048,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
intel_crtc_vblank_off(old_pipe_crtc_state);
}
+ intel_vrr_transcoder_disable(old_crtc_state);
+
intel_disable_transcoder(old_crtc_state);
drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload);
@@ -1325,6 +1327,8 @@ static void mst_stream_enable(struct intel_atomic_state *state,
intel_ddi_enable_transcoder_func(encoder, pipe_config);
+ intel_vrr_transcoder_enable(pipe_config);
+
intel_ddi_clear_act_sent(encoder, pipe_config);
intel_de_rmw(display, TRANS_DDI_FUNC_CTL(display, trans), 0,
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index e77f5b483b09..551dcc16f0d4 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -434,6 +434,7 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ bool needs_modeset = intel_crtc_needs_modeset(crtc_state);
if (intel_crtc_is_joiner_secondary(crtc_state))
return;
@@ -447,12 +448,6 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
0, PIPE_VBLANK_WITH_DELAY);
- if (!intel_vrr_possible(crtc_state)) {
- intel_de_write(display,
- TRANS_VRR_CTL(display, cpu_transcoder), 0);
- return;
- }
-
if (crtc_state->cmrr.enable) {
intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
upper_32_bits(crtc_state->cmrr.cmrr_m));
@@ -464,14 +459,8 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
lower_32_bits(crtc_state->cmrr.cmrr_n));
}
- intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
- crtc_state->vrr.vmin - 1);
- intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
- crtc_state->vrr.vmax - 1);
- intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
- trans_vrr_ctl(crtc_state));
- intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
- crtc_state->vrr.flipline - 1);
+ intel_vrr_set_fixed_rr_timings(crtc_state);
+ intel_vrr_update_guardband(crtc_state, needs_modeset);
if (HAS_AS_SDP(display))
intel_de_write(display,
@@ -614,6 +603,29 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
intel_vrr_set_fixed_rr_timings(old_crtc_state);
}
+void intel_vrr_transcoder_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;
+
+ if (!intel_vrr_always_use_vrr_tg(display))
+ return;
+
+ intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
+ VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
+}
+
+void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+
+ if (!intel_vrr_always_use_vrr_tg(display))
+ return;
+
+ intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), 0);
+}
+
static
bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
{
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
index e4e9cadcdf9e..750a380da9e3 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr.h
@@ -12,6 +12,7 @@ struct drm_connector_state;
struct intel_atomic_state;
struct intel_connector;
struct intel_crtc_state;
+struct intel_display;
struct intel_dsb;
bool intel_vrr_is_capable(struct intel_connector *connector);
@@ -37,5 +38,7 @@ int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset);
void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
+void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state);
+void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state);
#endif /* __INTEL_VRR_H__ */
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence
2025-02-24 6:17 ` [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence Ankit Nautiyal
@ 2025-02-26 15:06 ` Ville Syrjälä
2025-02-26 16:04 ` Ville Syrjälä
2025-02-27 10:42 ` Nautiyal, Ankit K
0 siblings, 2 replies; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 15:06 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:14AM +0530, Ankit Nautiyal wrote:
> During modeset enable sequence, program the fixed timings, and turn on the
> VRR Timing Generator (VRR TG) for platforms that always use VRR TG.
>
> For this intel_vrr_set_transcoder now always programs fixed timings.
> Later if vrr timings are required, vrr_enable() will switch
> to the real VRR timings.
>
> For platforms that will always use VRR TG, the VRR_CTL Enable bit is set
> and reset in the transcoder enable/disable path.
>
> v2: Update intel_vrr_set_transcoder_timings for fixed_rr.
> v3: Update intel_set_transcoder_timings_lrr for fixed_rr. (Ville)
> v4: Have separate functions to enable/disable VRR CTL
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 5 +++
> drivers/gpu/drm/i915/display/intel_dp_mst.c | 4 +++
> drivers/gpu/drm/i915/display/intel_vrr.c | 40 +++++++++++++--------
> drivers/gpu/drm/i915/display/intel_vrr.h | 3 ++
> 4 files changed, 38 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 5082f38b0a02..8863d1526aea 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -77,6 +77,7 @@
> #include "intel_tc.h"
> #include "intel_vdsc.h"
> #include "intel_vdsc_regs.h"
> +#include "intel_vrr.h"
> #include "skl_scaler.h"
> #include "skl_universal_plane.h"
>
> @@ -3276,6 +3277,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
> const struct intel_crtc_state *old_crtc_state,
> const struct drm_connector_state *old_conn_state)
> {
> + intel_vrr_transcoder_disable(old_crtc_state);
> +
> if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
> intel_ddi_post_disable_hdmi_or_sst(state, encoder, old_crtc_state,
> old_conn_state);
> @@ -3524,6 +3527,8 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
>
> intel_ddi_enable_transcoder_func(encoder, crtc_state);
>
> + intel_vrr_transcoder_enable(crtc_state);
> +
> /* Enable/Disable DP2.0 SDP split config before transcoder */
> intel_audio_sdp_split_update(crtc_state);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 2c4a9ac6f61e..5ec353eceab4 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -1048,6 +1048,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
> intel_crtc_vblank_off(old_pipe_crtc_state);
> }
>
> + intel_vrr_transcoder_disable(old_crtc_state);
> +
> intel_disable_transcoder(old_crtc_state);
>
> drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload);
> @@ -1325,6 +1327,8 @@ static void mst_stream_enable(struct intel_atomic_state *state,
>
> intel_ddi_enable_transcoder_func(encoder, pipe_config);
>
> + intel_vrr_transcoder_enable(pipe_config);
> +
> intel_ddi_clear_act_sent(encoder, pipe_config);
>
> intel_de_rmw(display, TRANS_DDI_FUNC_CTL(display, trans), 0,
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index e77f5b483b09..551dcc16f0d4 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -434,6 +434,7 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> + bool needs_modeset = intel_crtc_needs_modeset(crtc_state);
>
> if (intel_crtc_is_joiner_secondary(crtc_state))
> return;
> @@ -447,12 +448,6 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
> 0, PIPE_VBLANK_WITH_DELAY);
>
> - if (!intel_vrr_possible(crtc_state)) {
> - intel_de_write(display,
> - TRANS_VRR_CTL(display, cpu_transcoder), 0);
> - return;
> - }
> -
> if (crtc_state->cmrr.enable) {
> intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
> upper_32_bits(crtc_state->cmrr.cmrr_m));
> @@ -464,14 +459,8 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> lower_32_bits(crtc_state->cmrr.cmrr_n));
> }
>
> - intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> - crtc_state->vrr.vmin - 1);
> - intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> - crtc_state->vrr.vmax - 1);
> - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> - trans_vrr_ctl(crtc_state));
> - intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
> - crtc_state->vrr.flipline - 1);
> + intel_vrr_set_fixed_rr_timings(crtc_state);
> + intel_vrr_update_guardband(crtc_state, needs_modeset);
>
> if (HAS_AS_SDP(display))
> intel_de_write(display,
> @@ -614,6 +603,29 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> intel_vrr_set_fixed_rr_timings(old_crtc_state);
> }
>
> +void intel_vrr_transcoder_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;
> +
> + if (!intel_vrr_always_use_vrr_tg(display))
> + return;
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> + VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
Hmm. Maybe we should actually program this even for the
!intel_vrr_always_use_vrr_tg() case, but just leave the enable
bit unset. That way we shouldn't need the intel_vrr_update_guardband()
stuff in vrr_set_transcoder_timings().
We'd still need something for the _lrr() case, but I think that
could simply call intel_vrr_transcoder_enable() as well.
> +}
> +
> +void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> +
> + if (!intel_vrr_always_use_vrr_tg(display))
> + return;
And if we do the change to the enable() path, then we should probably
also do this for the !intel_vrr_always_use_vrr_tg() in the name of
symmetry.
> +
> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), 0);
> +}
> +
> static
> bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
> {
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
> index e4e9cadcdf9e..750a380da9e3 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.h
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.h
> @@ -12,6 +12,7 @@ struct drm_connector_state;
> struct intel_atomic_state;
> struct intel_connector;
> struct intel_crtc_state;
> +struct intel_display;
> struct intel_dsb;
>
> bool intel_vrr_is_capable(struct intel_connector *connector);
> @@ -37,5 +38,7 @@ int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
> int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
> void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset);
> void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
> +void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state);
> +void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state);
>
> #endif /* __INTEL_VRR_H__ */
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence
2025-02-26 15:06 ` Ville Syrjälä
@ 2025-02-26 16:04 ` Ville Syrjälä
2025-02-27 10:44 ` Nautiyal, Ankit K
2025-02-27 10:42 ` Nautiyal, Ankit K
1 sibling, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 16:04 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Wed, Feb 26, 2025 at 05:06:34PM +0200, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:14AM +0530, Ankit Nautiyal wrote:
> > During modeset enable sequence, program the fixed timings, and turn on the
> > VRR Timing Generator (VRR TG) for platforms that always use VRR TG.
> >
> > For this intel_vrr_set_transcoder now always programs fixed timings.
> > Later if vrr timings are required, vrr_enable() will switch
> > to the real VRR timings.
> >
> > For platforms that will always use VRR TG, the VRR_CTL Enable bit is set
> > and reset in the transcoder enable/disable path.
> >
> > v2: Update intel_vrr_set_transcoder_timings for fixed_rr.
> > v3: Update intel_set_transcoder_timings_lrr for fixed_rr. (Ville)
> > v4: Have separate functions to enable/disable VRR CTL
> >
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_ddi.c | 5 +++
> > drivers/gpu/drm/i915/display/intel_dp_mst.c | 4 +++
> > drivers/gpu/drm/i915/display/intel_vrr.c | 40 +++++++++++++--------
> > drivers/gpu/drm/i915/display/intel_vrr.h | 3 ++
> > 4 files changed, 38 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index 5082f38b0a02..8863d1526aea 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -77,6 +77,7 @@
> > #include "intel_tc.h"
> > #include "intel_vdsc.h"
> > #include "intel_vdsc_regs.h"
> > +#include "intel_vrr.h"
> > #include "skl_scaler.h"
> > #include "skl_universal_plane.h"
> >
> > @@ -3276,6 +3277,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
> > const struct intel_crtc_state *old_crtc_state,
> > const struct drm_connector_state *old_conn_state)
> > {
> > + intel_vrr_transcoder_disable(old_crtc_state);
> > +
> > if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
> > intel_ddi_post_disable_hdmi_or_sst(state, encoder, old_crtc_state,
> > old_conn_state);
> > @@ -3524,6 +3527,8 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
> >
> > intel_ddi_enable_transcoder_func(encoder, crtc_state);
> >
> > + intel_vrr_transcoder_enable(crtc_state);
> > +
> > /* Enable/Disable DP2.0 SDP split config before transcoder */
> > intel_audio_sdp_split_update(crtc_state);
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > index 2c4a9ac6f61e..5ec353eceab4 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > @@ -1048,6 +1048,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
> > intel_crtc_vblank_off(old_pipe_crtc_state);
> > }
> >
> > + intel_vrr_transcoder_disable(old_crtc_state);
> > +
> > intel_disable_transcoder(old_crtc_state);
> >
> > drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload);
> > @@ -1325,6 +1327,8 @@ static void mst_stream_enable(struct intel_atomic_state *state,
> >
> > intel_ddi_enable_transcoder_func(encoder, pipe_config);
> >
> > + intel_vrr_transcoder_enable(pipe_config);
> > +
> > intel_ddi_clear_act_sent(encoder, pipe_config);
> >
> > intel_de_rmw(display, TRANS_DDI_FUNC_CTL(display, trans), 0,
> > diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> > index e77f5b483b09..551dcc16f0d4 100644
> > --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> > @@ -434,6 +434,7 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> > {
> > struct intel_display *display = to_intel_display(crtc_state);
> > enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> > + bool needs_modeset = intel_crtc_needs_modeset(crtc_state);
> >
> > if (intel_crtc_is_joiner_secondary(crtc_state))
> > return;
> > @@ -447,12 +448,6 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> > intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
> > 0, PIPE_VBLANK_WITH_DELAY);
> >
> > - if (!intel_vrr_possible(crtc_state)) {
> > - intel_de_write(display,
> > - TRANS_VRR_CTL(display, cpu_transcoder), 0);
> > - return;
> > - }
> > -
> > if (crtc_state->cmrr.enable) {
> > intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
> > upper_32_bits(crtc_state->cmrr.cmrr_m));
> > @@ -464,14 +459,8 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> > lower_32_bits(crtc_state->cmrr.cmrr_n));
> > }
> >
> > - intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
> > - crtc_state->vrr.vmin - 1);
> > - intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
> > - crtc_state->vrr.vmax - 1);
> > - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> > - trans_vrr_ctl(crtc_state));
> > - intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
> > - crtc_state->vrr.flipline - 1);
> > + intel_vrr_set_fixed_rr_timings(crtc_state);
> > + intel_vrr_update_guardband(crtc_state, needs_modeset);
> >
> > if (HAS_AS_SDP(display))
> > intel_de_write(display,
> > @@ -614,6 +603,29 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> > intel_vrr_set_fixed_rr_timings(old_crtc_state);
> > }
> >
> > +void intel_vrr_transcoder_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;
> > +
> > + if (!intel_vrr_always_use_vrr_tg(display))
> > + return;
> > +
> > + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
> > + VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
>
> Hmm. Maybe we should actually program this even for the
> !intel_vrr_always_use_vrr_tg() case, but just leave the enable
> bit unset. That way we shouldn't need the intel_vrr_update_guardband()
> stuff in vrr_set_transcoder_timings().
>
> We'd still need something for the _lrr() case, but I think that
> could simply call intel_vrr_transcoder_enable() as well.
Oh and for the intel_vrr_always_use_vrr_tg()==true case we
probably want to also enable push.
When I was testing this stuff at least tgl and adl seemed to
require require push to be enabled whenever we use the VRR TG.
If we always enable it then we can easily test this on those
platforms witout having to touch any code outside of
intel_vrr_always_use_vrr_tg().
And even if some more modern hardware doesn't strictly require
push to be enabled, I don't think there should be any harm from
enabling it anyway.
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence
2025-02-26 16:04 ` Ville Syrjälä
@ 2025-02-27 10:44 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:44 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 9:34 PM, Ville Syrjälä wrote:
> On Wed, Feb 26, 2025 at 05:06:34PM +0200, Ville Syrjälä wrote:
>> On Mon, Feb 24, 2025 at 11:47:14AM +0530, Ankit Nautiyal wrote:
>>> During modeset enable sequence, program the fixed timings, and turn on the
>>> VRR Timing Generator (VRR TG) for platforms that always use VRR TG.
>>>
>>> For this intel_vrr_set_transcoder now always programs fixed timings.
>>> Later if vrr timings are required, vrr_enable() will switch
>>> to the real VRR timings.
>>>
>>> For platforms that will always use VRR TG, the VRR_CTL Enable bit is set
>>> and reset in the transcoder enable/disable path.
>>>
>>> v2: Update intel_vrr_set_transcoder_timings for fixed_rr.
>>> v3: Update intel_set_transcoder_timings_lrr for fixed_rr. (Ville)
>>> v4: Have separate functions to enable/disable VRR CTL
>>>
>>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>> ---
>>> drivers/gpu/drm/i915/display/intel_ddi.c | 5 +++
>>> drivers/gpu/drm/i915/display/intel_dp_mst.c | 4 +++
>>> drivers/gpu/drm/i915/display/intel_vrr.c | 40 +++++++++++++--------
>>> drivers/gpu/drm/i915/display/intel_vrr.h | 3 ++
>>> 4 files changed, 38 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>>> index 5082f38b0a02..8863d1526aea 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>>> @@ -77,6 +77,7 @@
>>> #include "intel_tc.h"
>>> #include "intel_vdsc.h"
>>> #include "intel_vdsc_regs.h"
>>> +#include "intel_vrr.h"
>>> #include "skl_scaler.h"
>>> #include "skl_universal_plane.h"
>>>
>>> @@ -3276,6 +3277,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
>>> const struct intel_crtc_state *old_crtc_state,
>>> const struct drm_connector_state *old_conn_state)
>>> {
>>> + intel_vrr_transcoder_disable(old_crtc_state);
>>> +
>>> if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
>>> intel_ddi_post_disable_hdmi_or_sst(state, encoder, old_crtc_state,
>>> old_conn_state);
>>> @@ -3524,6 +3527,8 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
>>>
>>> intel_ddi_enable_transcoder_func(encoder, crtc_state);
>>>
>>> + intel_vrr_transcoder_enable(crtc_state);
>>> +
>>> /* Enable/Disable DP2.0 SDP split config before transcoder */
>>> intel_audio_sdp_split_update(crtc_state);
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
>>> index 2c4a9ac6f61e..5ec353eceab4 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
>>> @@ -1048,6 +1048,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
>>> intel_crtc_vblank_off(old_pipe_crtc_state);
>>> }
>>>
>>> + intel_vrr_transcoder_disable(old_crtc_state);
>>> +
>>> intel_disable_transcoder(old_crtc_state);
>>>
>>> drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload);
>>> @@ -1325,6 +1327,8 @@ static void mst_stream_enable(struct intel_atomic_state *state,
>>>
>>> intel_ddi_enable_transcoder_func(encoder, pipe_config);
>>>
>>> + intel_vrr_transcoder_enable(pipe_config);
>>> +
>>> intel_ddi_clear_act_sent(encoder, pipe_config);
>>>
>>> intel_de_rmw(display, TRANS_DDI_FUNC_CTL(display, trans), 0,
>>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>>> index e77f5b483b09..551dcc16f0d4 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>>> @@ -434,6 +434,7 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>>> {
>>> struct intel_display *display = to_intel_display(crtc_state);
>>> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>>> + bool needs_modeset = intel_crtc_needs_modeset(crtc_state);
>>>
>>> if (intel_crtc_is_joiner_secondary(crtc_state))
>>> return;
>>> @@ -447,12 +448,6 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>>> intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
>>> 0, PIPE_VBLANK_WITH_DELAY);
>>>
>>> - if (!intel_vrr_possible(crtc_state)) {
>>> - intel_de_write(display,
>>> - TRANS_VRR_CTL(display, cpu_transcoder), 0);
>>> - return;
>>> - }
>>> -
>>> if (crtc_state->cmrr.enable) {
>>> intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
>>> upper_32_bits(crtc_state->cmrr.cmrr_m));
>>> @@ -464,14 +459,8 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>>> lower_32_bits(crtc_state->cmrr.cmrr_n));
>>> }
>>>
>>> - intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
>>> - crtc_state->vrr.vmin - 1);
>>> - intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
>>> - crtc_state->vrr.vmax - 1);
>>> - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
>>> - trans_vrr_ctl(crtc_state));
>>> - intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
>>> - crtc_state->vrr.flipline - 1);
>>> + intel_vrr_set_fixed_rr_timings(crtc_state);
>>> + intel_vrr_update_guardband(crtc_state, needs_modeset);
>>>
>>> if (HAS_AS_SDP(display))
>>> intel_de_write(display,
>>> @@ -614,6 +603,29 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
>>> intel_vrr_set_fixed_rr_timings(old_crtc_state);
>>> }
>>>
>>> +void intel_vrr_transcoder_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;
>>> +
>>> + if (!intel_vrr_always_use_vrr_tg(display))
>>> + return;
>>> +
>>> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
>>> + VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
>> Hmm. Maybe we should actually program this even for the
>> !intel_vrr_always_use_vrr_tg() case, but just leave the enable
>> bit unset. That way we shouldn't need the intel_vrr_update_guardband()
>> stuff in vrr_set_transcoder_timings().
>>
>> We'd still need something for the _lrr() case, but I think that
>> could simply call intel_vrr_transcoder_enable() as well.
> Oh and for the intel_vrr_always_use_vrr_tg()==true case we
> probably want to also enable push.
>
> When I was testing this stuff at least tgl and adl seemed to
> require require push to be enabled whenever we use the VRR TG.
> If we always enable it then we can easily test this on those
> platforms witout having to touch any code outside of
> intel_vrr_always_use_vrr_tg().
>
> And even if some more modern hardware doesn't strictly require
> push to be enabled, I don't think there should be any harm from
> enabling it anyway.
You are right. I missed to add push after enable, as we had already
agreed upon this.
I had removed the patch that was avoiding push for fixed refresh rate
case, but forgot to add this change in the later versions.
Will fix this in next version.
Regards,
Ankit
>
^ permalink raw reply [flat|nested] 57+ messages in thread
* Re: [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence
2025-02-26 15:06 ` Ville Syrjälä
2025-02-26 16:04 ` Ville Syrjälä
@ 2025-02-27 10:42 ` Nautiyal, Ankit K
1 sibling, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 10:42 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 8:36 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:14AM +0530, Ankit Nautiyal wrote:
>> During modeset enable sequence, program the fixed timings, and turn on the
>> VRR Timing Generator (VRR TG) for platforms that always use VRR TG.
>>
>> For this intel_vrr_set_transcoder now always programs fixed timings.
>> Later if vrr timings are required, vrr_enable() will switch
>> to the real VRR timings.
>>
>> For platforms that will always use VRR TG, the VRR_CTL Enable bit is set
>> and reset in the transcoder enable/disable path.
>>
>> v2: Update intel_vrr_set_transcoder_timings for fixed_rr.
>> v3: Update intel_set_transcoder_timings_lrr for fixed_rr. (Ville)
>> v4: Have separate functions to enable/disable VRR CTL
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_ddi.c | 5 +++
>> drivers/gpu/drm/i915/display/intel_dp_mst.c | 4 +++
>> drivers/gpu/drm/i915/display/intel_vrr.c | 40 +++++++++++++--------
>> drivers/gpu/drm/i915/display/intel_vrr.h | 3 ++
>> 4 files changed, 38 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>> index 5082f38b0a02..8863d1526aea 100644
>> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
>> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>> @@ -77,6 +77,7 @@
>> #include "intel_tc.h"
>> #include "intel_vdsc.h"
>> #include "intel_vdsc_regs.h"
>> +#include "intel_vrr.h"
>> #include "skl_scaler.h"
>> #include "skl_universal_plane.h"
>>
>> @@ -3276,6 +3277,8 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
>> const struct intel_crtc_state *old_crtc_state,
>> const struct drm_connector_state *old_conn_state)
>> {
>> + intel_vrr_transcoder_disable(old_crtc_state);
>> +
>> if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DP_MST))
>> intel_ddi_post_disable_hdmi_or_sst(state, encoder, old_crtc_state,
>> old_conn_state);
>> @@ -3524,6 +3527,8 @@ static void intel_ddi_enable(struct intel_atomic_state *state,
>>
>> intel_ddi_enable_transcoder_func(encoder, crtc_state);
>>
>> + intel_vrr_transcoder_enable(crtc_state);
>> +
>> /* Enable/Disable DP2.0 SDP split config before transcoder */
>> intel_audio_sdp_split_update(crtc_state);
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
>> index 2c4a9ac6f61e..5ec353eceab4 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
>> @@ -1048,6 +1048,8 @@ static void mst_stream_post_disable(struct intel_atomic_state *state,
>> intel_crtc_vblank_off(old_pipe_crtc_state);
>> }
>>
>> + intel_vrr_transcoder_disable(old_crtc_state);
>> +
>> intel_disable_transcoder(old_crtc_state);
>>
>> drm_dp_remove_payload_part1(&intel_dp->mst_mgr, new_mst_state, new_payload);
>> @@ -1325,6 +1327,8 @@ static void mst_stream_enable(struct intel_atomic_state *state,
>>
>> intel_ddi_enable_transcoder_func(encoder, pipe_config);
>>
>> + intel_vrr_transcoder_enable(pipe_config);
>> +
>> intel_ddi_clear_act_sent(encoder, pipe_config);
>>
>> intel_de_rmw(display, TRANS_DDI_FUNC_CTL(display, trans), 0,
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index e77f5b483b09..551dcc16f0d4 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -434,6 +434,7 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>> {
>> struct intel_display *display = to_intel_display(crtc_state);
>> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>> + bool needs_modeset = intel_crtc_needs_modeset(crtc_state);
>>
>> if (intel_crtc_is_joiner_secondary(crtc_state))
>> return;
>> @@ -447,12 +448,6 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>> intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder),
>> 0, PIPE_VBLANK_WITH_DELAY);
>>
>> - if (!intel_vrr_possible(crtc_state)) {
>> - intel_de_write(display,
>> - TRANS_VRR_CTL(display, cpu_transcoder), 0);
>> - return;
>> - }
>> -
>> if (crtc_state->cmrr.enable) {
>> intel_de_write(display, TRANS_CMRR_M_HI(display, cpu_transcoder),
>> upper_32_bits(crtc_state->cmrr.cmrr_m));
>> @@ -464,14 +459,8 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
>> lower_32_bits(crtc_state->cmrr.cmrr_n));
>> }
>>
>> - intel_de_write(display, TRANS_VRR_VMIN(display, cpu_transcoder),
>> - crtc_state->vrr.vmin - 1);
>> - intel_de_write(display, TRANS_VRR_VMAX(display, cpu_transcoder),
>> - crtc_state->vrr.vmax - 1);
>> - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
>> - trans_vrr_ctl(crtc_state));
>> - intel_de_write(display, TRANS_VRR_FLIPLINE(display, cpu_transcoder),
>> - crtc_state->vrr.flipline - 1);
>> + intel_vrr_set_fixed_rr_timings(crtc_state);
>> + intel_vrr_update_guardband(crtc_state, needs_modeset);
>>
>> if (HAS_AS_SDP(display))
>> intel_de_write(display,
>> @@ -614,6 +603,29 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
>> intel_vrr_set_fixed_rr_timings(old_crtc_state);
>> }
>>
>> +void intel_vrr_transcoder_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;
>> +
>> + if (!intel_vrr_always_use_vrr_tg(display))
>> + return;
>> +
>> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder),
>> + VRR_CTL_VRR_ENABLE | trans_vrr_ctl(crtc_state));
> Hmm. Maybe we should actually program this even for the
> !intel_vrr_always_use_vrr_tg() case, but just leave the enable
> bit unset. That way we shouldn't need the intel_vrr_update_guardband()
> stuff in vrr_set_transcoder_timings().
Yes we can leave the enable bit and program the rest for
!intel_vrr_always_use_vrr_tg().
Will change this in next version.
>
> We'd still need something for the _lrr() case, but I think that
> could simply call intel_vrr_transcoder_enable() as well.
Alright, will align this with the above change.
>
>> +}
>> +
>> +void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state)
>> +{
>> + struct intel_display *display = to_intel_display(crtc_state);
>> + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>> +
>> + if (!intel_vrr_always_use_vrr_tg(display))
>> + return;
> And if we do the change to the enable() path, then we should probably
> also do this for the !intel_vrr_always_use_vrr_tg() in the name of
> symmetry.
Agreed.
Regards,
Ankit
>
>> +
>> + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), 0);
>> +}
>> +
>> static
>> bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
>> {
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
>> index e4e9cadcdf9e..750a380da9e3 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.h
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.h
>> @@ -12,6 +12,7 @@ struct drm_connector_state;
>> struct intel_atomic_state;
>> struct intel_connector;
>> struct intel_crtc_state;
>> +struct intel_display;
>> struct intel_dsb;
>>
>> bool intel_vrr_is_capable(struct intel_connector *connector);
>> @@ -37,5 +38,7 @@ int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
>> int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
>> void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool needs_modeset);
>> void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
>> +void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state);
>> +void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state);
>>
>> #endif /* __INTEL_VRR_H__ */
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (16 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 17/20] drm/i915/display: Use fixed_rr timings in modeset sequence Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-26 15:11 ` Ville Syrjälä
2025-02-24 6:17 ` [PATCH 19/20] drm/i915/vrr: Always use VRR timing generator for MTL+ Ankit Nautiyal
` (3 subsequent siblings)
21 siblings, 1 reply; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
For fixed refresh rate use fixed timings for all platforms that support
VRR. For this add checks to avoid computing and reading VRR for
platforms that do not support VRR.
For platforms that do support VRR, readback vrr timings whether or not
VRR_CTL_FLIP_LINE_EN is set in VRR_CTL or not.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 43 ++++++++++++------------
1 file changed, 22 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 551dcc16f0d4..975fed9930c1 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -344,6 +344,9 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
int vmin = 0, vmax = 0;
+ if (!HAS_VRR(display))
+ return;
+
if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
return;
@@ -358,9 +361,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
vmin = intel_vrr_compute_vmin(crtc_state);
- if (vmin >= vmax)
- return;
-
crtc_state->vrr.vmin = vmin;
crtc_state->vrr.vmax = vmax;
@@ -373,7 +373,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
*/
crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
- if (crtc_state->uapi.vrr_enabled)
+ if (crtc_state->uapi.vrr_enabled && vmin < vmax)
intel_vrr_compute_vrr_timings(crtc_state);
else if (is_cmrr_frac_required(crtc_state) && is_edp)
intel_vrr_compute_cmrr_timings(crtc_state);
@@ -640,6 +640,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
u32 trans_vrr_ctl, trans_vrr_vsync;
+ if (!HAS_VRR(display))
+ return;
+
trans_vrr_ctl = intel_de_read(display,
TRANS_VRR_CTL(display, cpu_transcoder));
@@ -663,23 +666,21 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
crtc_state->vrr.pipeline_full =
REG_FIELD_GET(VRR_CTL_PIPELINE_FULL_MASK, trans_vrr_ctl);
- if (trans_vrr_ctl & VRR_CTL_FLIP_LINE_EN) {
- crtc_state->vrr.flipline = intel_de_read(display,
- TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
- crtc_state->vrr.vmax = intel_de_read(display,
- TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
- crtc_state->vrr.vmin = intel_de_read(display,
- TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
-
- if (HAS_AS_SDP(display)) {
- trans_vrr_vsync =
- intel_de_read(display,
- TRANS_VRR_VSYNC(display, cpu_transcoder));
- crtc_state->vrr.vsync_start =
- REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
- crtc_state->vrr.vsync_end =
- REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
- }
+ crtc_state->vrr.flipline = intel_de_read(display,
+ TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
+ crtc_state->vrr.vmax = intel_de_read(display,
+ TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
+ crtc_state->vrr.vmin = intel_de_read(display,
+ TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
+
+ if (HAS_AS_SDP(display)) {
+ trans_vrr_vsync =
+ intel_de_read(display,
+ TRANS_VRR_VSYNC(display, cpu_transcoder));
+ crtc_state->vrr.vsync_start =
+ REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
+ crtc_state->vrr.vsync_end =
+ REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
}
crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* Re: [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR
2025-02-24 6:17 ` [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR Ankit Nautiyal
@ 2025-02-26 15:11 ` Ville Syrjälä
2025-02-27 11:01 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-26 15:11 UTC (permalink / raw)
To: Ankit Nautiyal
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Mon, Feb 24, 2025 at 11:47:15AM +0530, Ankit Nautiyal wrote:
> For fixed refresh rate use fixed timings for all platforms that support
> VRR. For this add checks to avoid computing and reading VRR for
> platforms that do not support VRR.
> For platforms that do support VRR, readback vrr timings whether or not
> VRR_CTL_FLIP_LINE_EN is set in VRR_CTL or not.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_vrr.c | 43 ++++++++++++------------
> 1 file changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 551dcc16f0d4..975fed9930c1 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -344,6 +344,9 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> int vmin = 0, vmax = 0;
>
> + if (!HAS_VRR(display))
> + return;
> +
> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
> return;
>
> @@ -358,9 +361,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>
> vmin = intel_vrr_compute_vmin(crtc_state);
>
> - if (vmin >= vmax)
> - return;
> -
> crtc_state->vrr.vmin = vmin;
> crtc_state->vrr.vmax = vmax;
I think your earlier pathc left vmax==0 here for the !in_range so
this looks a bit wrong. But if you change the earlier patch like I
suggested to set vmax=vmin then this would be fine.
>
> @@ -373,7 +373,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> */
> crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
>
> - if (crtc_state->uapi.vrr_enabled)
> + if (crtc_state->uapi.vrr_enabled && vmin < vmax)
> intel_vrr_compute_vrr_timings(crtc_state);
> else if (is_cmrr_frac_required(crtc_state) && is_edp)
> intel_vrr_compute_cmrr_timings(crtc_state);
> @@ -640,6 +640,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> u32 trans_vrr_ctl, trans_vrr_vsync;
>
> + if (!HAS_VRR(display))
> + return;
I think the caller is already checking that. But I suppose we could
move the checks into the VRR code.
> +
> trans_vrr_ctl = intel_de_read(display,
> TRANS_VRR_CTL(display, cpu_transcoder));
>
> @@ -663,23 +666,21 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> crtc_state->vrr.pipeline_full =
> REG_FIELD_GET(VRR_CTL_PIPELINE_FULL_MASK, trans_vrr_ctl);
>
> - if (trans_vrr_ctl & VRR_CTL_FLIP_LINE_EN) {
> - crtc_state->vrr.flipline = intel_de_read(display,
> - TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
> - crtc_state->vrr.vmax = intel_de_read(display,
> - TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
> - crtc_state->vrr.vmin = intel_de_read(display,
> - TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
> -
> - if (HAS_AS_SDP(display)) {
> - trans_vrr_vsync =
> - intel_de_read(display,
> - TRANS_VRR_VSYNC(display, cpu_transcoder));
> - crtc_state->vrr.vsync_start =
> - REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
> - crtc_state->vrr.vsync_end =
> - REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
> - }
I think you want to keep the VRR_CTL_FLIP_LINE_EN check around the
TRANS_VRR_FLIPLINE read at least, because we want the state checker
to catch any misprogrammng of VRR_CTL_FLIP_LINE_EN.
> + crtc_state->vrr.flipline = intel_de_read(display,
> + TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
> + crtc_state->vrr.vmax = intel_de_read(display,
> + TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
> + crtc_state->vrr.vmin = intel_de_read(display,
> + TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
> +
> + if (HAS_AS_SDP(display)) {
> + trans_vrr_vsync =
> + intel_de_read(display,
> + TRANS_VRR_VSYNC(display, cpu_transcoder));
> + crtc_state->vrr.vsync_start =
> + REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
> + crtc_state->vrr.vsync_end =
> + REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
> }
>
> crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
> --
> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR
2025-02-26 15:11 ` Ville Syrjälä
@ 2025-02-27 11:01 ` Nautiyal, Ankit K
2025-02-27 21:05 ` Ville Syrjälä
0 siblings, 1 reply; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-27 11:01 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/26/2025 8:41 PM, Ville Syrjälä wrote:
> On Mon, Feb 24, 2025 at 11:47:15AM +0530, Ankit Nautiyal wrote:
>> For fixed refresh rate use fixed timings for all platforms that support
>> VRR. For this add checks to avoid computing and reading VRR for
>> platforms that do not support VRR.
>> For platforms that do support VRR, readback vrr timings whether or not
>> VRR_CTL_FLIP_LINE_EN is set in VRR_CTL or not.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_vrr.c | 43 ++++++++++++------------
>> 1 file changed, 22 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>> index 551dcc16f0d4..975fed9930c1 100644
>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>> @@ -344,6 +344,9 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>> int vmin = 0, vmax = 0;
>>
>> + if (!HAS_VRR(display))
>> + return;
>> +
>> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
>> return;
>>
>> @@ -358,9 +361,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>>
>> vmin = intel_vrr_compute_vmin(crtc_state);
>>
>> - if (vmin >= vmax)
>> - return;
>> -
>> crtc_state->vrr.vmin = vmin;
>> crtc_state->vrr.vmax = vmax;
> I think your earlier pathc left vmax==0 here for the !in_range so
> this looks a bit wrong. But if you change the earlier patch like I
> suggested to set vmax=vmin then this would be fine.
Right, will set the vmax=vmin, as discussed in the earlier patch.
>
>>
>> @@ -373,7 +373,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>> */
>> crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
>>
>> - if (crtc_state->uapi.vrr_enabled)
>> + if (crtc_state->uapi.vrr_enabled && vmin < vmax)
>> intel_vrr_compute_vrr_timings(crtc_state);
>> else if (is_cmrr_frac_required(crtc_state) && is_edp)
>> intel_vrr_compute_cmrr_timings(crtc_state);
>> @@ -640,6 +640,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>> u32 trans_vrr_ctl, trans_vrr_vsync;
>>
>> + if (!HAS_VRR(display))
>> + return;
> I think the caller is already checking that. But I suppose we could
> move the checks into the VRR code.
>
>> +
>> trans_vrr_ctl = intel_de_read(display,
>> TRANS_VRR_CTL(display, cpu_transcoder));
>>
>> @@ -663,23 +666,21 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>> crtc_state->vrr.pipeline_full =
>> REG_FIELD_GET(VRR_CTL_PIPELINE_FULL_MASK, trans_vrr_ctl);
>>
>> - if (trans_vrr_ctl & VRR_CTL_FLIP_LINE_EN) {
>> - crtc_state->vrr.flipline = intel_de_read(display,
>> - TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
>> - crtc_state->vrr.vmax = intel_de_read(display,
>> - TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
>> - crtc_state->vrr.vmin = intel_de_read(display,
>> - TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
>> -
>> - if (HAS_AS_SDP(display)) {
>> - trans_vrr_vsync =
>> - intel_de_read(display,
>> - TRANS_VRR_VSYNC(display, cpu_transcoder));
>> - crtc_state->vrr.vsync_start =
>> - REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
>> - crtc_state->vrr.vsync_end =
>> - REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
>> - }
> I think you want to keep the VRR_CTL_FLIP_LINE_EN check around the
> TRANS_VRR_FLIPLINE read at least, because we want the state checker
> to catch any misprogrammng of VRR_CTL_FLIP_LINE_EN.
Alright, will remove this change.
There is one more thing I wanted your opinion on:
For PTL+, the support for TRANS_VTOTAL.Vtotal bits is going away. I can
skip writing it based on the intel_vrr_always_use_vrr_tg(), but how
should I fill adjusted_mode->crtc_vtotal during readout?
Can we use vrr.vmin for that? Or should we just remove the state checker
for crtc_vtotal for platforms where this applies?
I am intending to include this change as the last patch of the series.
Thanks again for all the reviews and suggestions.
Regards,
Ankit
>
>> + crtc_state->vrr.flipline = intel_de_read(display,
>> + TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
>> + crtc_state->vrr.vmax = intel_de_read(display,
>> + TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
>> + crtc_state->vrr.vmin = intel_de_read(display,
>> + TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
>> +
>> + if (HAS_AS_SDP(display)) {
>> + trans_vrr_vsync =
>> + intel_de_read(display,
>> + TRANS_VRR_VSYNC(display, cpu_transcoder));
>> + crtc_state->vrr.vsync_start =
>> + REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
>> + crtc_state->vrr.vsync_end =
>> + REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
>> }
>>
>> crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
>> --
>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR
2025-02-27 11:01 ` Nautiyal, Ankit K
@ 2025-02-27 21:05 ` Ville Syrjälä
2025-02-28 12:31 ` Nautiyal, Ankit K
0 siblings, 1 reply; 57+ messages in thread
From: Ville Syrjälä @ 2025-02-27 21:05 UTC (permalink / raw)
To: Nautiyal, Ankit K
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On Thu, Feb 27, 2025 at 04:31:28PM +0530, Nautiyal, Ankit K wrote:
>
> On 2/26/2025 8:41 PM, Ville Syrjälä wrote:
> > On Mon, Feb 24, 2025 at 11:47:15AM +0530, Ankit Nautiyal wrote:
> >> For fixed refresh rate use fixed timings for all platforms that support
> >> VRR. For this add checks to avoid computing and reading VRR for
> >> platforms that do not support VRR.
> >> For platforms that do support VRR, readback vrr timings whether or not
> >> VRR_CTL_FLIP_LINE_EN is set in VRR_CTL or not.
> >>
> >> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> >> ---
> >> drivers/gpu/drm/i915/display/intel_vrr.c | 43 ++++++++++++------------
> >> 1 file changed, 22 insertions(+), 21 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> >> index 551dcc16f0d4..975fed9930c1 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> >> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> >> @@ -344,6 +344,9 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> >> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
> >> int vmin = 0, vmax = 0;
> >>
> >> + if (!HAS_VRR(display))
> >> + return;
> >> +
> >> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
> >> return;
> >>
> >> @@ -358,9 +361,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> >>
> >> vmin = intel_vrr_compute_vmin(crtc_state);
> >>
> >> - if (vmin >= vmax)
> >> - return;
> >> -
> >> crtc_state->vrr.vmin = vmin;
> >> crtc_state->vrr.vmax = vmax;
> > I think your earlier pathc left vmax==0 here for the !in_range so
> > this looks a bit wrong. But if you change the earlier patch like I
> > suggested to set vmax=vmin then this would be fine.
>
> Right, will set the vmax=vmin, as discussed in the earlier patch.
>
>
> >
> >>
> >> @@ -373,7 +373,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
> >> */
> >> crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
> >>
> >> - if (crtc_state->uapi.vrr_enabled)
> >> + if (crtc_state->uapi.vrr_enabled && vmin < vmax)
> >> intel_vrr_compute_vrr_timings(crtc_state);
> >> else if (is_cmrr_frac_required(crtc_state) && is_edp)
> >> intel_vrr_compute_cmrr_timings(crtc_state);
> >> @@ -640,6 +640,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> >> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> >> u32 trans_vrr_ctl, trans_vrr_vsync;
> >>
> >> + if (!HAS_VRR(display))
> >> + return;
> > I think the caller is already checking that. But I suppose we could
> > move the checks into the VRR code.
> >
> >> +
> >> trans_vrr_ctl = intel_de_read(display,
> >> TRANS_VRR_CTL(display, cpu_transcoder));
> >>
> >> @@ -663,23 +666,21 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> >> crtc_state->vrr.pipeline_full =
> >> REG_FIELD_GET(VRR_CTL_PIPELINE_FULL_MASK, trans_vrr_ctl);
> >>
> >> - if (trans_vrr_ctl & VRR_CTL_FLIP_LINE_EN) {
> >> - crtc_state->vrr.flipline = intel_de_read(display,
> >> - TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
> >> - crtc_state->vrr.vmax = intel_de_read(display,
> >> - TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
> >> - crtc_state->vrr.vmin = intel_de_read(display,
> >> - TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
> >> -
> >> - if (HAS_AS_SDP(display)) {
> >> - trans_vrr_vsync =
> >> - intel_de_read(display,
> >> - TRANS_VRR_VSYNC(display, cpu_transcoder));
> >> - crtc_state->vrr.vsync_start =
> >> - REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
> >> - crtc_state->vrr.vsync_end =
> >> - REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
> >> - }
> > I think you want to keep the VRR_CTL_FLIP_LINE_EN check around the
> > TRANS_VRR_FLIPLINE read at least, because we want the state checker
> > to catch any misprogrammng of VRR_CTL_FLIP_LINE_EN.
>
> Alright, will remove this change.
>
>
> There is one more thing I wanted your opinion on:
>
> For PTL+, the support for TRANS_VTOTAL.Vtotal bits is going away.
Aren't we still using the legacy timing gnerator currently on ptl?
I think I did manage to run upstream code on a ptl somehwat
succesfully, and I don't remeber any state checker warns or other
real problems (which I would expect to happen if we don't have a
working vtotal programmed in).
> I can
> skip writing it based on the intel_vrr_always_use_vrr_tg(), but how
> should I fill adjusted_mode->crtc_vtotal during readout?
>
> Can we use vrr.vmin for that? Or should we just remove the state checker
> for crtc_vtotal for platforms where this applies?
I think reading it out from VMIN would be the way to go. Otherwise
we'd have to somehow stop using crtc_vtotal everywhere and that sounds
like a lot of work.
>
> I am intending to include this change as the last patch of the series.
>
> Thanks again for all the reviews and suggestions.
>
>
> Regards,
>
> Ankit
>
>
> >
> >> + crtc_state->vrr.flipline = intel_de_read(display,
> >> + TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
> >> + crtc_state->vrr.vmax = intel_de_read(display,
> >> + TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
> >> + crtc_state->vrr.vmin = intel_de_read(display,
> >> + TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
> >> +
> >> + if (HAS_AS_SDP(display)) {
> >> + trans_vrr_vsync =
> >> + intel_de_read(display,
> >> + TRANS_VRR_VSYNC(display, cpu_transcoder));
> >> + crtc_state->vrr.vsync_start =
> >> + REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
> >> + crtc_state->vrr.vsync_end =
> >> + REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
> >> }
> >>
> >> crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
> >> --
> >> 2.45.2
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 57+ messages in thread* Re: [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR
2025-02-27 21:05 ` Ville Syrjälä
@ 2025-02-28 12:31 ` Nautiyal, Ankit K
0 siblings, 0 replies; 57+ messages in thread
From: Nautiyal, Ankit K @ 2025-02-28 12:31 UTC (permalink / raw)
To: Ville Syrjälä
Cc: intel-gfx, intel-xe, jani.nikula, mitulkumar.ajitkumar.golani
On 2/28/2025 2:35 AM, Ville Syrjälä wrote:
> On Thu, Feb 27, 2025 at 04:31:28PM +0530, Nautiyal, Ankit K wrote:
>> On 2/26/2025 8:41 PM, Ville Syrjälä wrote:
>>> On Mon, Feb 24, 2025 at 11:47:15AM +0530, Ankit Nautiyal wrote:
>>>> For fixed refresh rate use fixed timings for all platforms that support
>>>> VRR. For this add checks to avoid computing and reading VRR for
>>>> platforms that do not support VRR.
>>>> For platforms that do support VRR, readback vrr timings whether or not
>>>> VRR_CTL_FLIP_LINE_EN is set in VRR_CTL or not.
>>>>
>>>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>>> ---
>>>> drivers/gpu/drm/i915/display/intel_vrr.c | 43 ++++++++++++------------
>>>> 1 file changed, 22 insertions(+), 21 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
>>>> index 551dcc16f0d4..975fed9930c1 100644
>>>> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
>>>> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
>>>> @@ -344,6 +344,9 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>>>> struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
>>>> int vmin = 0, vmax = 0;
>>>>
>>>> + if (!HAS_VRR(display))
>>>> + return;
>>>> +
>>>> if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
>>>> return;
>>>>
>>>> @@ -358,9 +361,6 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>>>>
>>>> vmin = intel_vrr_compute_vmin(crtc_state);
>>>>
>>>> - if (vmin >= vmax)
>>>> - return;
>>>> -
>>>> crtc_state->vrr.vmin = vmin;
>>>> crtc_state->vrr.vmax = vmax;
>>> I think your earlier pathc left vmax==0 here for the !in_range so
>>> this looks a bit wrong. But if you change the earlier patch like I
>>> suggested to set vmax=vmin then this would be fine.
>> Right, will set the vmax=vmin, as discussed in the earlier patch.
>>
>>
>>>>
>>>> @@ -373,7 +373,7 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
>>>> */
>>>> crtc_state->vrr.vmin -= intel_vrr_flipline_offset(display);
>>>>
>>>> - if (crtc_state->uapi.vrr_enabled)
>>>> + if (crtc_state->uapi.vrr_enabled && vmin < vmax)
>>>> intel_vrr_compute_vrr_timings(crtc_state);
>>>> else if (is_cmrr_frac_required(crtc_state) && is_edp)
>>>> intel_vrr_compute_cmrr_timings(crtc_state);
>>>> @@ -640,6 +640,9 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>>>> enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>>>> u32 trans_vrr_ctl, trans_vrr_vsync;
>>>>
>>>> + if (!HAS_VRR(display))
>>>> + return;
>>> I think the caller is already checking that. But I suppose we could
>>> move the checks into the VRR code.
>>>
>>>> +
>>>> trans_vrr_ctl = intel_de_read(display,
>>>> TRANS_VRR_CTL(display, cpu_transcoder));
>>>>
>>>> @@ -663,23 +666,21 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
>>>> crtc_state->vrr.pipeline_full =
>>>> REG_FIELD_GET(VRR_CTL_PIPELINE_FULL_MASK, trans_vrr_ctl);
>>>>
>>>> - if (trans_vrr_ctl & VRR_CTL_FLIP_LINE_EN) {
>>>> - crtc_state->vrr.flipline = intel_de_read(display,
>>>> - TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
>>>> - crtc_state->vrr.vmax = intel_de_read(display,
>>>> - TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
>>>> - crtc_state->vrr.vmin = intel_de_read(display,
>>>> - TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
>>>> -
>>>> - if (HAS_AS_SDP(display)) {
>>>> - trans_vrr_vsync =
>>>> - intel_de_read(display,
>>>> - TRANS_VRR_VSYNC(display, cpu_transcoder));
>>>> - crtc_state->vrr.vsync_start =
>>>> - REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
>>>> - crtc_state->vrr.vsync_end =
>>>> - REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
>>>> - }
>>> I think you want to keep the VRR_CTL_FLIP_LINE_EN check around the
>>> TRANS_VRR_FLIPLINE read at least, because we want the state checker
>>> to catch any misprogrammng of VRR_CTL_FLIP_LINE_EN.
>> Alright, will remove this change.
>>
>>
>> There is one more thing I wanted your opinion on:
>>
>> For PTL+, the support for TRANS_VTOTAL.Vtotal bits is going away.
> Aren't we still using the legacy timing gnerator currently on ptl?
> I think I did manage to run upstream code on a ptl somehwat
> succesfully, and I don't remeber any state checker warns or other
> real problems (which I would expect to happen if we don't have a
> working vtotal programmed in).
For PTL the support for legacy timing generator is still there but its
recommended to switch to VRR Timing generator.
GOP I think has already moved in that direction.
>
>> I can
>> skip writing it based on the intel_vrr_always_use_vrr_tg(), but how
>> should I fill adjusted_mode->crtc_vtotal during readout?
>>
>> Can we use vrr.vmin for that? Or should we just remove the state checker
>> for crtc_vtotal for platforms where this applies?
> I think reading it out from VMIN would be the way to go. Otherwise
> we'd have to somehow stop using crtc_vtotal everywhere and that sounds
> like a lot of work.
Will try to have this read from VRR.Vmin.
Regards,
Ankit
>
>> I am intending to include this change as the last patch of the series.
>>
>> Thanks again for all the reviews and suggestions.
>>
>>
>> Regards,
>>
>> Ankit
>>
>>
>>>> + crtc_state->vrr.flipline = intel_de_read(display,
>>>> + TRANS_VRR_FLIPLINE(display, cpu_transcoder)) + 1;
>>>> + crtc_state->vrr.vmax = intel_de_read(display,
>>>> + TRANS_VRR_VMAX(display, cpu_transcoder)) + 1;
>>>> + crtc_state->vrr.vmin = intel_de_read(display,
>>>> + TRANS_VRR_VMIN(display, cpu_transcoder)) + 1;
>>>> +
>>>> + if (HAS_AS_SDP(display)) {
>>>> + trans_vrr_vsync =
>>>> + intel_de_read(display,
>>>> + TRANS_VRR_VSYNC(display, cpu_transcoder));
>>>> + crtc_state->vrr.vsync_start =
>>>> + REG_FIELD_GET(VRR_VSYNC_START_MASK, trans_vrr_vsync);
>>>> + crtc_state->vrr.vsync_end =
>>>> + REG_FIELD_GET(VRR_VSYNC_END_MASK, trans_vrr_vsync);
>>>> }
>>>>
>>>> crtc_state->vrr.enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE &&
>>>> --
>>>> 2.45.2
^ permalink raw reply [flat|nested] 57+ messages in thread
* [PATCH 19/20] drm/i915/vrr: Always use VRR timing generator for MTL+
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (17 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 18/20] drm/i915/vrr: Use fixed timings for platforms that support VRR Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-24 6:17 ` [PATCH 20/20] drm/i915/display: Add fixed_rr to crtc_state dump Ankit Nautiyal
` (2 subsequent siblings)
21 siblings, 0 replies; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Currently VRR timing generator is used only when VRR is enabled by
userspace for sinks that support VRR. From MTL+ gradually move away from
the older timing generator and use VRR timing generator for both variable
and fixed timings.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index 975fed9930c1..b16d277e78c5 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -543,7 +543,9 @@ bool intel_vrr_always_use_vrr_tg(struct intel_display *display)
if (!HAS_VRR(display))
return false;
- /* #TODO return true for platforms supporting fixed_rr */
+ if (DISPLAY_VER(display) >= 14)
+ return true;
+
return false;
}
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* [PATCH 20/20] drm/i915/display: Add fixed_rr to crtc_state dump
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (18 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 19/20] drm/i915/vrr: Always use VRR timing generator for MTL+ Ankit Nautiyal
@ 2025-02-24 6:17 ` Ankit Nautiyal
2025-02-24 18:16 ` ✗ Fi.CI.SPARSE: warning for Use VRR timing generator for fixed refresh rate modes (rev10) Patchwork
2025-02-24 18:39 ` ✗ i915.CI.BAT: failure " Patchwork
21 siblings, 0 replies; 57+ messages in thread
From: Ankit Nautiyal @ 2025-02-24 6:17 UTC (permalink / raw)
To: intel-gfx
Cc: intel-xe, jani.nikula, ville.syrjala, mitulkumar.ajitkumar.golani
Add fixed refresh rate mode in crtc_state dump.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_crtc_state_dump.c | 3 ++-
drivers/gpu/drm/i915/display/intel_vrr.c | 1 -
drivers/gpu/drm/i915/display/intel_vrr.h | 1 +
3 files changed, 3 insertions(+), 2 deletions(-)
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 599ddce96371..f204a5830c29 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
@@ -294,8 +294,9 @@ void intel_crtc_state_dump(const struct intel_crtc_state *pipe_config,
pipe_config->hw.adjusted_mode.crtc_vdisplay,
pipe_config->framestart_delay, pipe_config->msa_timing_delay);
- drm_printf(&p, "vrr: %s, vmin: %d, vmax: %d, flipline: %d, pipeline full: %d, guardband: %d vsync start: %d, vsync end: %d\n",
+ drm_printf(&p, "vrr: %s, fixed_rr: %s, vmin: %d, vmax: %d, flipline: %d, pipeline full: %d, guardband: %d vsync start: %d, vsync end: %d\n",
str_yes_no(pipe_config->vrr.enable),
+ str_yes_no(intel_vrr_is_fixed_rr(pipe_config)),
pipe_config->vrr.vmin, pipe_config->vrr.vmax, pipe_config->vrr.flipline,
pipe_config->vrr.pipeline_full, pipe_config->vrr.guardband,
pipe_config->vrr.vsync_start, pipe_config->vrr.vsync_end);
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index b16d277e78c5..ce74bac244fd 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -628,7 +628,6 @@ void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state)
intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), 0);
}
-static
bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)
{
return crtc_state->vrr.flipline &&
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
index 750a380da9e3..6cc7e6902b08 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr.h
@@ -40,5 +40,6 @@ void intel_vrr_update_guardband(const struct intel_crtc_state *crtc_state, bool
void intel_vrr_set_fixed_rr_timings(const struct intel_crtc_state *crtc_state);
void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state);
void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state);
+bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state);
#endif /* __INTEL_VRR_H__ */
--
2.45.2
^ permalink raw reply related [flat|nested] 57+ messages in thread* ✗ Fi.CI.SPARSE: warning for Use VRR timing generator for fixed refresh rate modes (rev10)
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (19 preceding siblings ...)
2025-02-24 6:17 ` [PATCH 20/20] drm/i915/display: Add fixed_rr to crtc_state dump Ankit Nautiyal
@ 2025-02-24 18:16 ` Patchwork
2025-02-24 18:39 ` ✗ i915.CI.BAT: failure " Patchwork
21 siblings, 0 replies; 57+ messages in thread
From: Patchwork @ 2025-02-24 18:16 UTC (permalink / raw)
To: Nautiyal, Ankit K; +Cc: intel-gfx
== Series Details ==
Series: Use VRR timing generator for fixed refresh rate modes (rev10)
URL : https://patchwork.freedesktop.org/series/134383/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
/home/kbuild2/linux/maintainer-tools/dim: line 2114: echo: write error: Broken pipe
^ permalink raw reply [flat|nested] 57+ messages in thread* ✗ i915.CI.BAT: failure for Use VRR timing generator for fixed refresh rate modes (rev10)
2025-02-24 6:16 [PATCH 00/20] Use VRR timing generator for fixed refresh rate modes Ankit Nautiyal
` (20 preceding siblings ...)
2025-02-24 18:16 ` ✗ Fi.CI.SPARSE: warning for Use VRR timing generator for fixed refresh rate modes (rev10) Patchwork
@ 2025-02-24 18:39 ` Patchwork
21 siblings, 0 replies; 57+ messages in thread
From: Patchwork @ 2025-02-24 18:39 UTC (permalink / raw)
To: Nautiyal, Ankit K; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 6950 bytes --]
== Series Details ==
Series: Use VRR timing generator for fixed refresh rate modes (rev10)
URL : https://patchwork.freedesktop.org/series/134383/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_16171 -> Patchwork_134383v10
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_134383v10 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_134383v10, 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_134383v10/index.html
Participating hosts (44 -> 44)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_134383v10:
### IGT changes ###
#### Possible regressions ####
* igt@i915_module_load@load:
- bat-jsl-1: [PASS][1] -> [INCOMPLETE][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-jsl-1/igt@i915_module_load@load.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-jsl-1/igt@i915_module_load@load.html
- fi-rkl-11600: [PASS][3] -> [ABORT][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/fi-rkl-11600/igt@i915_module_load@load.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/fi-rkl-11600/igt@i915_module_load@load.html
- bat-dg1-7: [PASS][5] -> [ABORT][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-dg1-7/igt@i915_module_load@load.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-dg1-7/igt@i915_module_load@load.html
- bat-rpls-4: [PASS][7] -> [ABORT][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-rpls-4/igt@i915_module_load@load.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-rpls-4/igt@i915_module_load@load.html
- fi-tgl-1115g4: [PASS][9] -> [ABORT][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/fi-tgl-1115g4/igt@i915_module_load@load.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/fi-tgl-1115g4/igt@i915_module_load@load.html
- bat-jsl-3: [PASS][11] -> [INCOMPLETE][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-jsl-3/igt@i915_module_load@load.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-jsl-3/igt@i915_module_load@load.html
- bat-adls-6: [PASS][13] -> [ABORT][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-adls-6/igt@i915_module_load@load.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-adls-6/igt@i915_module_load@load.html
Known issues
------------
Here are the changes found in Patchwork_134383v10 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_lmem_swapping@basic:
- bat-twl-2: NOTRUN -> [SKIP][15] ([i915#10213] / [i915#11671]) +3 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-twl-2/igt@gem_lmem_swapping@basic.html
* igt@i915_pm_rpm@module-reload:
- bat-dg2-11: [PASS][16] -> [FAIL][17] ([i915#13633])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-dg2-11/igt@i915_pm_rpm@module-reload.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-dg2-11/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live:
- bat-arlh-3: [PASS][18] -> [DMESG-FAIL][19] ([i915#12061] / [i915#12435])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-arlh-3/igt@i915_selftest@live.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-arlh-3/igt@i915_selftest@live.html
- bat-twl-2: NOTRUN -> [INCOMPLETE][20] ([i915#12435] / [i915#12445])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-twl-2/igt@i915_selftest@live.html
* igt@i915_selftest@live@reset:
- bat-twl-2: NOTRUN -> [INCOMPLETE][21] ([i915#12445])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-twl-2/igt@i915_selftest@live@reset.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-3: [PASS][22] -> [DMESG-FAIL][23] ([i915#12061])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-arlh-3/igt@i915_selftest@live@workarounds.html
- bat-mtlp-9: [PASS][24] -> [DMESG-FAIL][25] ([i915#12061]) +1 other test dmesg-fail
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
* igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
- bat-dg2-11: [PASS][26] -> [SKIP][27] ([i915#9197]) +3 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
#### Possible fixes ####
* igt@i915_module_load@reload:
- bat-twl-2: [ABORT][28] -> [PASS][29]
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16171/bat-twl-2/igt@i915_module_load@reload.html
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/bat-twl-2/igt@i915_module_load@reload.html
[i915#10213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10213
[i915#11671]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11671
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12435
[i915#12445]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12445
[i915#13633]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13633
[i915#9197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9197
Build changes
-------------
* Linux: CI_DRM_16171 -> Patchwork_134383v10
CI-20190529: 20190529
CI_DRM_16171: a5a9504217e25c850ff9e82d38c1093dbdbf20f9 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8246: 2670886863d5821273146d7f94cdd3c8e3a4fe0b @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_134383v10: a5a9504217e25c850ff9e82d38c1093dbdbf20f9 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134383v10/index.html
[-- Attachment #2: Type: text/html, Size: 8069 bytes --]
^ permalink raw reply [flat|nested] 57+ messages in thread