diff mbox series

drm/i915: Enable fastboot by default on Skylake and newer

Message ID 20190124130114.3967-1-maarten.lankhorst@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: Enable fastboot by default on Skylake and newer | expand

Commit Message

Maarten Lankhorst Jan. 24, 2019, 1:01 p.m. UTC
From: Hans de Goede <hdegoede@redhat.com>

We really want to have fastboot enabled by default to avoid an ugly
modeset during boot.

Rather then enabling it everywhere, lets start with enabling it on
Skylake and newer.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_params.c   |  6 ++++--
 drivers/gpu/drm/i915/i915_params.h   |  2 +-
 drivers/gpu/drm/i915/intel_display.c | 11 ++++++++++-
 3 files changed, 15 insertions(+), 4 deletions(-)

Comments

Rodrigo Vivi Jan. 24, 2019, 10:20 p.m. UTC | #1
On Thu, Jan 24, 2019 at 02:01:14PM +0100, Maarten Lankhorst wrote:
> From: Hans de Goede <hdegoede@redhat.com>
>
> We really want to have fastboot enabled by default to avoid an ugly
> modeset during boot.
>
> Rather then enabling it everywhere, lets start with enabling it on
> Skylake and newer.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>


I believe at this point you both addressed all of my concerns.
And CI is happy. Let's give a try ;)


Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>



> ---
>  drivers/gpu/drm/i915/i915_params.c   |  6 ++++--
>  drivers/gpu/drm/i915/i915_params.h   |  2 +-
>  drivers/gpu/drm/i915/intel_display.c | 11 ++++++++++-
>  3 files changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> index 9f0539bdaa39..b5be0abbba35 100644
> --- a/drivers/gpu/drm/i915/i915_params.c
> +++ b/drivers/gpu/drm/i915/i915_params.c
> @@ -97,8 +97,10 @@ i915_param_named_unsafe(disable_power_well, int, 0400,
>
>  i915_param_named_unsafe(enable_ips, int, 0600, "Enable IPS (default: true)");
>
> -i915_param_named(fastboot, bool, 0600,
> -	"Try to skip unnecessary mode sets at boot time (default: false)");
> +i915_param_named(fastboot, int, 0600,
> +	"Try to skip unnecessary mode sets at boot time "
> +	"(0=disabled, 1=enabled) "
> +	"Default: -1 (use per-chip default)");
>
>  i915_param_named_unsafe(prefault_disable, bool, 0600,
>  	"Disable page prefaulting for pread/pwrite/reloc (default:false). "
> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> index 6efcf330bdab..3f14e9881a0d 100644
> --- a/drivers/gpu/drm/i915/i915_params.h
> +++ b/drivers/gpu/drm/i915/i915_params.h
> @@ -63,10 +63,10 @@ struct drm_printer;
>  	param(int, edp_vswing, 0) \
>  	param(int, reset, 2) \
>  	param(unsigned int, inject_load_failure, 0) \
> +	param(int, fastboot, -1) \
>  	/* leave bools at the end to not create holes */ \
>  	param(bool, alpha_support, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT)) \
>  	param(bool, enable_hangcheck, true) \
> -	param(bool, fastboot, false) \
>  	param(bool, prefault_disable, false) \
>  	param(bool, load_detect_test, false) \
>  	param(bool, force_reset_modeset_test, false) \
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 36c1126cbc85..097e46819d3a 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -11690,6 +11690,15 @@ pipe_config_err(bool adjust, const char *name, const char *format, ...)
>  	va_end(args);
>  }
>
> +static bool fastboot_enabled(struct drm_i915_private *dev_priv)
> +{
> +	if (i915_modparams.fastboot != -1)
> +		return i915_modparams.fastboot;
> +
> +	/* Enable fastboot by default on Skylake and newer */
> +	return INTEL_GEN(dev_priv) >= 9;
> +}
> +
>  static bool
>  intel_pipe_config_compare(struct drm_i915_private *dev_priv,
>  			  struct intel_crtc_state *current_config,
> @@ -11701,7 +11710,7 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
>  		(current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) &&
>  		!(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED);
>
> -	if (fixup_inherited && !i915_modparams.fastboot) {
> +	if (fixup_inherited && !fastboot_enabled(dev_priv)) {
>  		DRM_DEBUG_KMS("initial modeset and fastboot not set\n");
>  		ret = false;
>  	}
> --
> 2.20.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Hans de Goede Jan. 25, 2019, 8:36 a.m. UTC | #2
Hi Rodrigo and Maarten,

On 24-01-19 23:20, Rodrigo Vivi wrote:
> On Thu, Jan 24, 2019 at 02:01:14PM +0100, Maarten Lankhorst wrote:
>> From: Hans de Goede <hdegoede@redhat.com>
>>
>> We really want to have fastboot enabled by default to avoid an ugly
>> modeset during boot.
>>
>> Rather then enabling it everywhere, lets start with enabling it on
>> Skylake and newer.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> 
> 
> I believe at this point you both addressed all of my concerns.
> And CI is happy. Let's give a try ;)

Great, thank you.

On IRC Maarten asked me about if we should also enable this for
VLV/CHV. As you may know, as a spare time/weekend project, I've been
working on making Linux support Bay and Cherry Trail based hardware,
better. As such I've about 40 different devices with these SoCs and
I've tested fastboot=1 on all of them. fastboot=1 not only works on
all of them, on 2 devices the display goes black when we have
fastboot=0 for some reason which I've been unable to figure out.
These 2 devices do survive a full-modeset just fine after the initial
one ?

So my response to Maarten was, yes we should enable fastboot=1 by
default on VLV/CHV too and I plan to submit a follow-up patch for
that once we have agreement on this patch.

Maarten suggested to just go for enabling it on gen7+ instead of
the current gen9+.

I personally tend towards merging this patch with your
Reviewed-by + doing a follow-up patch for just VLV/CHV, but
Maarten prefers doing the gen7+ solution, what is your take on this?

Regards,

Hans





> 
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> 
> 
> 
>> ---
>>   drivers/gpu/drm/i915/i915_params.c   |  6 ++++--
>>   drivers/gpu/drm/i915/i915_params.h   |  2 +-
>>   drivers/gpu/drm/i915/intel_display.c | 11 ++++++++++-
>>   3 files changed, 15 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
>> index 9f0539bdaa39..b5be0abbba35 100644
>> --- a/drivers/gpu/drm/i915/i915_params.c
>> +++ b/drivers/gpu/drm/i915/i915_params.c
>> @@ -97,8 +97,10 @@ i915_param_named_unsafe(disable_power_well, int, 0400,
>>
>>   i915_param_named_unsafe(enable_ips, int, 0600, "Enable IPS (default: true)");
>>
>> -i915_param_named(fastboot, bool, 0600,
>> -	"Try to skip unnecessary mode sets at boot time (default: false)");
>> +i915_param_named(fastboot, int, 0600,
>> +	"Try to skip unnecessary mode sets at boot time "
>> +	"(0=disabled, 1=enabled) "
>> +	"Default: -1 (use per-chip default)");
>>
>>   i915_param_named_unsafe(prefault_disable, bool, 0600,
>>   	"Disable page prefaulting for pread/pwrite/reloc (default:false). "
>> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
>> index 6efcf330bdab..3f14e9881a0d 100644
>> --- a/drivers/gpu/drm/i915/i915_params.h
>> +++ b/drivers/gpu/drm/i915/i915_params.h
>> @@ -63,10 +63,10 @@ struct drm_printer;
>>   	param(int, edp_vswing, 0) \
>>   	param(int, reset, 2) \
>>   	param(unsigned int, inject_load_failure, 0) \
>> +	param(int, fastboot, -1) \
>>   	/* leave bools at the end to not create holes */ \
>>   	param(bool, alpha_support, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT)) \
>>   	param(bool, enable_hangcheck, true) \
>> -	param(bool, fastboot, false) \
>>   	param(bool, prefault_disable, false) \
>>   	param(bool, load_detect_test, false) \
>>   	param(bool, force_reset_modeset_test, false) \
>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>> index 36c1126cbc85..097e46819d3a 100644
>> --- a/drivers/gpu/drm/i915/intel_display.c
>> +++ b/drivers/gpu/drm/i915/intel_display.c
>> @@ -11690,6 +11690,15 @@ pipe_config_err(bool adjust, const char *name, const char *format, ...)
>>   	va_end(args);
>>   }
>>
>> +static bool fastboot_enabled(struct drm_i915_private *dev_priv)
>> +{
>> +	if (i915_modparams.fastboot != -1)
>> +		return i915_modparams.fastboot;
>> +
>> +	/* Enable fastboot by default on Skylake and newer */
>> +	return INTEL_GEN(dev_priv) >= 9;
>> +}
>> +
>>   static bool
>>   intel_pipe_config_compare(struct drm_i915_private *dev_priv,
>>   			  struct intel_crtc_state *current_config,
>> @@ -11701,7 +11710,7 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
>>   		(current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) &&
>>   		!(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED);
>>
>> -	if (fixup_inherited && !i915_modparams.fastboot) {
>> +	if (fixup_inherited && !fastboot_enabled(dev_priv)) {
>>   		DRM_DEBUG_KMS("initial modeset and fastboot not set\n");
>>   		ret = false;
>>   	}
>> --
>> 2.20.1
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
Hans de Goede Jan. 29, 2019, 9:46 a.m. UTC | #3
Hi,

On 25-01-19 09:36, Hans de Goede wrote:
> Hi Rodrigo and Maarten,
> 
> On 24-01-19 23:20, Rodrigo Vivi wrote:
>> On Thu, Jan 24, 2019 at 02:01:14PM +0100, Maarten Lankhorst wrote:
>>> From: Hans de Goede <hdegoede@redhat.com>
>>>
>>> We really want to have fastboot enabled by default to avoid an ugly
>>> modeset during boot.
>>>
>>> Rather then enabling it everywhere, lets start with enabling it on
>>> Skylake and newer.
>>>
>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>>
>>
>> I believe at this point you both addressed all of my concerns.
>> And CI is happy. Let's give a try ;)
> 
> Great, thank you.
> 
> On IRC Maarten asked me about if we should also enable this for
> VLV/CHV. As you may know, as a spare time/weekend project, I've been
> working on making Linux support Bay and Cherry Trail based hardware,
> better. As such I've about 40 different devices with these SoCs and
> I've tested fastboot=1 on all of them. fastboot=1 not only works on
> all of them, on 2 devices the display goes black when we have
> fastboot=0 for some reason which I've been unable to figure out.
> These 2 devices do survive a full-modeset just fine after the initial
> one ?
> 
> So my response to Maarten was, yes we should enable fastboot=1 by
> default on VLV/CHV too and I plan to submit a follow-up patch for
> that once we have agreement on this patch.
> 
> Maarten suggested to just go for enabling it on gen7+ instead of
> the current gen9+.
> 
> I personally tend towards merging this patch with your
> Reviewed-by + doing a follow-up patch for just VLV/CHV, but
> Maarten prefers doing the gen7+ solution, what is your take on this?

I've gone ahead and pushed this patch to dinq now. I will post a
follow-up patch to also enable fastboot on VLV/CHV.

Then once this mix has seen enough testing out there (and assuming the
testing goes well) then we can try to change to enabling fastboot
by default on gen7+.

Regards,

Hans
Joonas Lahtinen Jan. 29, 2019, 2:02 p.m. UTC | #4
Quoting Hans de Goede (2019-01-25 10:36:48)
> Hi Rodrigo and Maarten,
> 
> On 24-01-19 23:20, Rodrigo Vivi wrote:
> > On Thu, Jan 24, 2019 at 02:01:14PM +0100, Maarten Lankhorst wrote:
> >> From: Hans de Goede <hdegoede@redhat.com>
> >>
> >> We really want to have fastboot enabled by default to avoid an ugly
> >> modeset during boot.
> >>
> >> Rather then enabling it everywhere, lets start with enabling it on
> >> Skylake and newer.
> >>
> >> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > 
> > 
> > I believe at this point you both addressed all of my concerns.
> > And CI is happy. Let's give a try ;)
> 
> Great, thank you.
> 
> On IRC Maarten asked me about if we should also enable this for
> VLV/CHV. As you may know, as a spare time/weekend project, I've been
> working on making Linux support Bay and Cherry Trail based hardware,
> better. As such I've about 40 different devices with these SoCs and
> I've tested fastboot=1 on all of them. fastboot=1 not only works on
> all of them, on 2 devices the display goes black when we have
> fastboot=0 for some reason which I've been unable to figure out.
> These 2 devices do survive a full-modeset just fine after the initial
> one ?

You're not talking about PIPO X8(s) by any chance? I also happen to own
those devices for side projects.

The verdict is that some revisions of them are missing the VBT sequences
to actually bring up the display. So if you try to change the display
mode after boot from Linux, the display won't ever come back up, as the
GPIO sequences to bring them up do not exist.

Those information blocks are simply empty or missing, and the sequences
have been hacked into the GOP driver and the Android/Windows display
drivers. It also involved programming a mux configuration in addition to
bringing up the display.

I even found some Android source dumps for the platform, but as I'm not
that much of a display side guy and it was not a straightforward matter
I gave up and got my devices exchanged for ones that include the VBT :P

Porting the code (they had basically re-used big portions of the GMA
drivers) seemed like a doable although big task.

Regards, Joonas

PS. I'm huge fan of this non-flicker boot effort! I contributed the
original splashscreen patches for gummiboot (now systemd-boot) for a
project. Hopefully we soon have a completely smooth graphical
boot process :)

> So my response to Maarten was, yes we should enable fastboot=1 by
> default on VLV/CHV too and I plan to submit a follow-up patch for
> that once we have agreement on this patch.
> 
> Maarten suggested to just go for enabling it on gen7+ instead of
> the current gen9+.
> 
> I personally tend towards merging this patch with your
> Reviewed-by + doing a follow-up patch for just VLV/CHV, but
> Maarten prefers doing the gen7+ solution, what is your take on this?
> 
> Regards,
> 
> Hans
> 
> 
> 
> 
> 
> > 
> > 
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > 
> > 
> > 
> >> ---
> >>   drivers/gpu/drm/i915/i915_params.c   |  6 ++++--
> >>   drivers/gpu/drm/i915/i915_params.h   |  2 +-
> >>   drivers/gpu/drm/i915/intel_display.c | 11 ++++++++++-
> >>   3 files changed, 15 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
> >> index 9f0539bdaa39..b5be0abbba35 100644
> >> --- a/drivers/gpu/drm/i915/i915_params.c
> >> +++ b/drivers/gpu/drm/i915/i915_params.c
> >> @@ -97,8 +97,10 @@ i915_param_named_unsafe(disable_power_well, int, 0400,
> >>
> >>   i915_param_named_unsafe(enable_ips, int, 0600, "Enable IPS (default: true)");
> >>
> >> -i915_param_named(fastboot, bool, 0600,
> >> -    "Try to skip unnecessary mode sets at boot time (default: false)");
> >> +i915_param_named(fastboot, int, 0600,
> >> +    "Try to skip unnecessary mode sets at boot time "
> >> +    "(0=disabled, 1=enabled) "
> >> +    "Default: -1 (use per-chip default)");
> >>
> >>   i915_param_named_unsafe(prefault_disable, bool, 0600,
> >>      "Disable page prefaulting for pread/pwrite/reloc (default:false). "
> >> diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
> >> index 6efcf330bdab..3f14e9881a0d 100644
> >> --- a/drivers/gpu/drm/i915/i915_params.h
> >> +++ b/drivers/gpu/drm/i915/i915_params.h
> >> @@ -63,10 +63,10 @@ struct drm_printer;
> >>      param(int, edp_vswing, 0) \
> >>      param(int, reset, 2) \
> >>      param(unsigned int, inject_load_failure, 0) \
> >> +    param(int, fastboot, -1) \
> >>      /* leave bools at the end to not create holes */ \
> >>      param(bool, alpha_support, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT)) \
> >>      param(bool, enable_hangcheck, true) \
> >> -    param(bool, fastboot, false) \
> >>      param(bool, prefault_disable, false) \
> >>      param(bool, load_detect_test, false) \
> >>      param(bool, force_reset_modeset_test, false) \
> >> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> >> index 36c1126cbc85..097e46819d3a 100644
> >> --- a/drivers/gpu/drm/i915/intel_display.c
> >> +++ b/drivers/gpu/drm/i915/intel_display.c
> >> @@ -11690,6 +11690,15 @@ pipe_config_err(bool adjust, const char *name, const char *format, ...)
> >>      va_end(args);
> >>   }
> >>
> >> +static bool fastboot_enabled(struct drm_i915_private *dev_priv)
> >> +{
> >> +    if (i915_modparams.fastboot != -1)
> >> +            return i915_modparams.fastboot;
> >> +
> >> +    /* Enable fastboot by default on Skylake and newer */
> >> +    return INTEL_GEN(dev_priv) >= 9;
> >> +}
> >> +
> >>   static bool
> >>   intel_pipe_config_compare(struct drm_i915_private *dev_priv,
> >>                        struct intel_crtc_state *current_config,
> >> @@ -11701,7 +11710,7 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
> >>              (current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) &&
> >>              !(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED);
> >>
> >> -    if (fixup_inherited && !i915_modparams.fastboot) {
> >> +    if (fixup_inherited && !fastboot_enabled(dev_priv)) {
> >>              DRM_DEBUG_KMS("initial modeset and fastboot not set\n");
> >>              ret = false;
> >>      }
> >> --
> >> 2.20.1
> >>
> >> _______________________________________________
> >> Intel-gfx mailing list
> >> Intel-gfx@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Hans de Goede Jan. 29, 2019, 3:14 p.m. UTC | #5
Hi,

On 29-01-19 15:02, Joonas Lahtinen wrote:
> Quoting Hans de Goede (2019-01-25 10:36:48)
>> Hi Rodrigo and Maarten,
>>
>> On 24-01-19 23:20, Rodrigo Vivi wrote:
>>> On Thu, Jan 24, 2019 at 02:01:14PM +0100, Maarten Lankhorst wrote:
>>>> From: Hans de Goede <hdegoede@redhat.com>
>>>>
>>>> We really want to have fastboot enabled by default to avoid an ugly
>>>> modeset during boot.
>>>>
>>>> Rather then enabling it everywhere, lets start with enabling it on
>>>> Skylake and newer.
>>>>
>>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>>>
>>>
>>> I believe at this point you both addressed all of my concerns.
>>> And CI is happy. Let's give a try ;)
>>
>> Great, thank you.
>>
>> On IRC Maarten asked me about if we should also enable this for
>> VLV/CHV. As you may know, as a spare time/weekend project, I've been
>> working on making Linux support Bay and Cherry Trail based hardware,
>> better. As such I've about 40 different devices with these SoCs and
>> I've tested fastboot=1 on all of them. fastboot=1 not only works on
>> all of them, on 2 devices the display goes black when we have
>> fastboot=0 for some reason which I've been unable to figure out.
>> These 2 devices do survive a full-modeset just fine after the initial
>> one ?
> 
> You're not talking about PIPO X8(s) by any chance? I also happen to own
> those devices for side projects.

No I'm talking about the TEclast X80 pro and the VIOS LTH17 (no-name
X83x0 laptop).

> The verdict is that some revisions of them are missing the VBT sequences
> to actually bring up the display. So if you try to change the display
> mode after boot from Linux, the display won't ever come back up, as the
> GPIO sequences to bring them up do not exist.
> 
> Those information blocks are simply empty or missing, and the sequences
> have been hacked into the GOP driver and the Android/Windows display
> drivers. It also involved programming a mux configuration in addition to
> bringing up the display.
> 
> I even found some Android source dumps for the platform, but as I'm not
> that much of a display side guy and it was not a straightforward matter
> I gave up and got my devices exchanged for ones that include the VBT :P
> 
> Porting the code (they had basically re-used big portions of the GMA
> drivers) seemed like a doable although big task.

The situation on these 2 is different, the VBT appears complete and
subsequent full mode-sets, such as after a suspend/resume do work.

It is just that the LCD goes black if the initial modeset when the
first drm-using app (or fbcon) loads is a full-modeset.

Quite weird. Since the initial modeset involves turning the display
off and then on again in quick succession I've tried adding a
sleep in between, but that does not help. I've also checked the
MIPI sequences to see if there was an unimplemented part (such as
the PMIC sequences I've recently been working on) but that is not
the case either.

> PS. I'm huge fan of this non-flicker boot effort! I contributed the
> original splashscreen patches for gummiboot (now systemd-boot) for a
> project. Hopefully we soon have a completely smooth graphical
> boot process :)

I'm glad you like it.

Regards,

Hans
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 9f0539bdaa39..b5be0abbba35 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -97,8 +97,10 @@  i915_param_named_unsafe(disable_power_well, int, 0400,
 
 i915_param_named_unsafe(enable_ips, int, 0600, "Enable IPS (default: true)");
 
-i915_param_named(fastboot, bool, 0600,
-	"Try to skip unnecessary mode sets at boot time (default: false)");
+i915_param_named(fastboot, int, 0600,
+	"Try to skip unnecessary mode sets at boot time "
+	"(0=disabled, 1=enabled) "
+	"Default: -1 (use per-chip default)");
 
 i915_param_named_unsafe(prefault_disable, bool, 0600,
 	"Disable page prefaulting for pread/pwrite/reloc (default:false). "
diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 6efcf330bdab..3f14e9881a0d 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -63,10 +63,10 @@  struct drm_printer;
 	param(int, edp_vswing, 0) \
 	param(int, reset, 2) \
 	param(unsigned int, inject_load_failure, 0) \
+	param(int, fastboot, -1) \
 	/* leave bools at the end to not create holes */ \
 	param(bool, alpha_support, IS_ENABLED(CONFIG_DRM_I915_ALPHA_SUPPORT)) \
 	param(bool, enable_hangcheck, true) \
-	param(bool, fastboot, false) \
 	param(bool, prefault_disable, false) \
 	param(bool, load_detect_test, false) \
 	param(bool, force_reset_modeset_test, false) \
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 36c1126cbc85..097e46819d3a 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11690,6 +11690,15 @@  pipe_config_err(bool adjust, const char *name, const char *format, ...)
 	va_end(args);
 }
 
+static bool fastboot_enabled(struct drm_i915_private *dev_priv)
+{
+	if (i915_modparams.fastboot != -1)
+		return i915_modparams.fastboot;
+
+	/* Enable fastboot by default on Skylake and newer */
+	return INTEL_GEN(dev_priv) >= 9;
+}
+
 static bool
 intel_pipe_config_compare(struct drm_i915_private *dev_priv,
 			  struct intel_crtc_state *current_config,
@@ -11701,7 +11710,7 @@  intel_pipe_config_compare(struct drm_i915_private *dev_priv,
 		(current_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED) &&
 		!(pipe_config->base.mode.private_flags & I915_MODE_FLAG_INHERITED);
 
-	if (fixup_inherited && !i915_modparams.fastboot) {
+	if (fixup_inherited && !fastboot_enabled(dev_priv)) {
 		DRM_DEBUG_KMS("initial modeset and fastboot not set\n");
 		ret = false;
 	}