[PATCH] drm/i915: Enable fastset by default, except on initial modeset
Hans de Goede
hdegoede at redhat.com
Mon Dec 17 14:34:52 UTC 2018
Hi,
On 17-12-18 15:29, Daniel Vetter wrote:
> On Mon, Dec 17, 2018 at 3:23 PM Hans de Goede <hdegoede at redhat.com> wrote:
>>
>> From: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
>>
>> We may not be perfect at reading out the initial mode, but when the mode
>> is sanitized by our first modeset we know for sure the state is compatible,
>> so we can compare with intel_pipe_config_compare.
>>
>> Changes in v2 (Hans de Goede):
>> -When checking if we need to reset the mode (initial modeset), check
>> I915_MODE_FLAG_INHERITED is set in private_flags instead of
>> private_flags != 0
>>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
>> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
>
> Do we have igts which exercise this functionality?
I'm not sure, but last time Maarten submitted this patch it caused
a bunch of new dmesg warnings CI failures, which seems to indicate that
at least some tests are hitting the new code path where we do a fastset
independent of the fastboot=x parameter.
> Having that is
> kinda the point of enabling this first only for non-bootup modesets,
> so that we can weed out the bugs. I think most (maybe even all) igts
> we have do their modesets by explicitly shutting things down, and so
> will never hit this. But we have lots of igts, so might have missed
> some.
>
> Anyway, patch imo should have a clear indication which igts we need to
> watch out for this one here.
Hmm, Maarten, can you provide a list of relevant igts to add to the
commit message ?
Regards,
Hans
>> ---
>> drivers/gpu/drm/i915/intel_display.c | 23 +++++++++++++++++++----
>> 1 file changed, 19 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index c2980643a1a5..071954d255c6 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -12501,6 +12501,22 @@ static int calc_watermark_data(struct drm_atomic_state *state)
>> return 0;
>> }
>>
>> +static bool can_fastset(struct drm_i915_private *dev_priv,
>> + struct intel_crtc_state *old_crtc_state,
>> + struct intel_crtc_state *new_crtc_state)
>> +{
>> + bool reset_mode =
>> + (old_crtc_state->base.mode.private_flags & I915_MODE_FLAG_INHERITED) &&
>> + !(new_crtc_state->base.mode.private_flags & I915_MODE_FLAG_INHERITED);
>> +
>> + /* Without fastboot, we always want to modeset the initial mode. */
>> + if (reset_mode && !i915_modparams.fastboot)
>> + return false;
>> +
>> + return intel_pipe_config_compare(dev_priv, old_crtc_state,
>> + new_crtc_state, true);
>> +}
>> +
>> /**
>> * intel_atomic_check - validate state object
>> * @dev: drm device
>> @@ -12531,6 +12547,8 @@ static int intel_atomic_check(struct drm_device *dev,
>> for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, crtc_state, i) {
>> struct intel_crtc_state *pipe_config =
>> to_intel_crtc_state(crtc_state);
>> + struct intel_crtc_state *old_intel_crtc_state =
>> + to_intel_crtc_state(old_crtc_state);
>>
>> if (!needs_modeset(crtc_state))
>> continue;
>> @@ -12547,10 +12565,7 @@ static int intel_atomic_check(struct drm_device *dev,
>> return ret;
>> }
>>
>> - if (i915_modparams.fastboot &&
>> - intel_pipe_config_compare(dev_priv,
>> - to_intel_crtc_state(old_crtc_state),
>> - pipe_config, true)) {
>> + if (can_fastset(dev_priv, old_intel_crtc_state, pipe_config)) {
>> crtc_state->mode_changed = false;
>> pipe_config->update_pipe = true;
>> }
>> --
>> 2.20.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
>
More information about the dri-devel
mailing list