The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init
@ 2026-06-30 10:28 mei.fan.liou
  2026-06-30 10:47 ` Jani Nikula
  0 siblings, 1 reply; 4+ messages in thread
From: mei.fan.liou @ 2026-06-30 10:28 UTC (permalink / raw)
  To: Jani Nikula, Rodrigo Vivi
  Cc: Joonas Lahtinen, Tvrtko Ursulin, David Airlie, Simona Vetter,
	intel-gfx, intel-xe, dri-devel, linux-kernel, LIOU, Mei Fan, LIOU

From: "LIOU, Mei Fan" <mei.fan.liou@intel.com>

Some platforms have BIOS/VBT that declares an eDP panel present while
no physical panel is connected. This causes intel_edp_init_connector()
to spend ~6 seconds waiting on PPS power sequencer and AUX channel
timeouts before failing gracefully.

Introduce a new boolean module parameter 'disable_edp' (default: false)
that allows users to skip eDP connector initialization entirely. When
set, the driver logs an informational message and returns false early
from intel_edp_init_connector(), bypassing all PPS/AUX probing.

This is modeled after the existing 'disable_display' parameter and
is intended as a workaround for headless or display-less deployments
where the BIOS incorrectly advertises an internal panel.

Signed-off-by: LIOU, Mei Fan <mei.fan.liou@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_params.c | 3 +++
 drivers/gpu/drm/i915/display/intel_display_params.h | 1 +
 drivers/gpu/drm/i915/display/intel_dp.c             | 7 +++++++
 3 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display_params.c b/drivers/gpu/drm/i915/display/intel_display_params.c
index 2aed110c5b09..8d47d19b1667 100644
--- a/drivers/gpu/drm/i915/display/intel_display_params.c
+++ b/drivers/gpu/drm/i915/display/intel_display_params.c
@@ -102,6 +102,9 @@ intel_display_param_named_unsafe(force_reset_modeset_test, bool, 0400,
 intel_display_param_named(disable_display, bool, 0400,
 	"Disable display (default: false)");
 
+intel_display_param_named(disable_edp, bool, 0400,
+	"Disable eDP panel init, skips PPS/AUX probing when VBT declares eDP but no panel is present (default: false)");
+
 intel_display_param_named(verbose_state_checks, bool, 0400,
 	"Enable verbose logs (ie. WARN_ON()) in case of unexpected hw state conditions.");
 
diff --git a/drivers/gpu/drm/i915/display/intel_display_params.h b/drivers/gpu/drm/i915/display/intel_display_params.h
index b95ecf728daa..98ab0d753dab 100644
--- a/drivers/gpu/drm/i915/display/intel_display_params.h
+++ b/drivers/gpu/drm/i915/display/intel_display_params.h
@@ -41,6 +41,7 @@ struct drm_printer;
 	param(bool, load_detect_test, false, 0600) \
 	param(bool, force_reset_modeset_test, false, 0600) \
 	param(bool, disable_display, false, 0400) \
+	param(bool, disable_edp, false, 0400) \
 	param(bool, verbose_state_checks, true, 0400) \
 	param(bool, nuclear_pageflip, false, 0400) \
 	param(bool, enable_dp_mst, true, 0600) \
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 85d3aa3b9894..c6293a1b3840 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -7214,6 +7214,13 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
 	if (!intel_dp_is_edp(intel_dp))
 		return true;
 
+	if (display->params.disable_edp) {
+		drm_info(display->drm,
+			 "[ENCODER:%d:%s] eDP disabled by module parameter, skipping init\n",
+			 encoder->base.base.id, encoder->base.name);
+		return false;
+	}
+
 	/*
 	 * On IBX/CPT we may get here with LVDS already registered. Since the
 	 * driver uses the only internal power sequencer available for both
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init
  2026-06-30 10:28 [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init mei.fan.liou
@ 2026-06-30 10:47 ` Jani Nikula
  2026-07-02 11:07   ` Liou, Mei Fan
  0 siblings, 1 reply; 4+ messages in thread
From: Jani Nikula @ 2026-06-30 10:47 UTC (permalink / raw)
  To: mei.fan.liou, Rodrigo Vivi
  Cc: Joonas Lahtinen, Tvrtko Ursulin, David Airlie, Simona Vetter,
	intel-gfx, intel-xe, dri-devel, linux-kernel, LIOU, Mei Fan

On Tue, 30 Jun 2026, mei.fan.liou@intel.com wrote:
> From: "LIOU, Mei Fan" <mei.fan.liou@intel.com>
>
> Some platforms have BIOS/VBT that declares an eDP panel present while
> no physical panel is connected. This causes intel_edp_init_connector()
> to spend ~6 seconds waiting on PPS power sequencer and AUX channel
> timeouts before failing gracefully.

Which platforms? This should not be the case.

> Introduce a new boolean module parameter 'disable_edp' (default: false)
> that allows users to skip eDP connector initialization entirely. When
> set, the driver logs an informational message and returns false early
> from intel_edp_init_connector(), bypassing all PPS/AUX probing.

I'm fine with adding module parameters for *debugging*. I'm not fine
with adding module parameters for regular use cases. If there are issues
out there, they should be root caused and fixed, worst case with a
quirk, but roughly never with a new module parameter.

You can also disable connectors using the video= parameter and connector
name, e.g. video=eDP-1:d or something. Making this work (if it doesn't)
should be preferred over adding new module parameters. And even here,
root causing and fixing is preferred.

> This is modeled after the existing 'disable_display' parameter and
> is intended as a workaround for headless or display-less deployments
> where the BIOS incorrectly advertises an internal panel.

"headless" and "display-less" are super ambiguous, given the amount of
possible alternatives. You might not have display IP at all, or you
could have everything except a display connected, or everything in
between. But VBT advertizing eDP but it not being connected is not a
scenario that we should have, and either the VBT or the whole setup is
bonkers.

Please file a bug as described at [1], and be sure to attach the dmesg
with debugs, and the VBT.


BR,
Jani.


[1] https://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html


>
> Signed-off-by: LIOU, Mei Fan <mei.fan.liou@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_params.c | 3 +++
>  drivers/gpu/drm/i915/display/intel_display_params.h | 1 +
>  drivers/gpu/drm/i915/display/intel_dp.c             | 7 +++++++
>  3 files changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_params.c b/drivers/gpu/drm/i915/display/intel_display_params.c
> index 2aed110c5b09..8d47d19b1667 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_params.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_params.c
> @@ -102,6 +102,9 @@ intel_display_param_named_unsafe(force_reset_modeset_test, bool, 0400,
>  intel_display_param_named(disable_display, bool, 0400,
>  	"Disable display (default: false)");
>  
> +intel_display_param_named(disable_edp, bool, 0400,
> +	"Disable eDP panel init, skips PPS/AUX probing when VBT declares eDP but no panel is present (default: false)");
> +
>  intel_display_param_named(verbose_state_checks, bool, 0400,
>  	"Enable verbose logs (ie. WARN_ON()) in case of unexpected hw state conditions.");
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_display_params.h b/drivers/gpu/drm/i915/display/intel_display_params.h
> index b95ecf728daa..98ab0d753dab 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_params.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_params.h
> @@ -41,6 +41,7 @@ struct drm_printer;
>  	param(bool, load_detect_test, false, 0600) \
>  	param(bool, force_reset_modeset_test, false, 0600) \
>  	param(bool, disable_display, false, 0400) \
> +	param(bool, disable_edp, false, 0400) \
>  	param(bool, verbose_state_checks, true, 0400) \
>  	param(bool, nuclear_pageflip, false, 0400) \
>  	param(bool, enable_dp_mst, true, 0600) \
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 85d3aa3b9894..c6293a1b3840 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -7214,6 +7214,13 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  	if (!intel_dp_is_edp(intel_dp))
>  		return true;
>  
> +	if (display->params.disable_edp) {
> +		drm_info(display->drm,
> +			 "[ENCODER:%d:%s] eDP disabled by module parameter, skipping init\n",
> +			 encoder->base.base.id, encoder->base.name);
> +		return false;
> +	}
> +
>  	/*
>  	 * On IBX/CPT we may get here with LVDS already registered. Since the
>  	 * driver uses the only internal power sequencer available for both

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init
  2026-06-30 10:47 ` Jani Nikula
@ 2026-07-02 11:07   ` Liou, Mei Fan
  2026-07-02 11:48     ` Jani Nikula
  0 siblings, 1 reply; 4+ messages in thread
From: Liou, Mei Fan @ 2026-07-02 11:07 UTC (permalink / raw)
  To: Jani Nikula, Vivi, Rodrigo
  Cc: Joonas Lahtinen, Tvrtko Ursulin, David Airlie, Simona Vetter,
	intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	Dutta, Ranjan, Chang, Junxiao

Hi Jani,

Thank you for the feedback.

> Which platforms? This should not be the case.

The platform in question is a BTL-S RVP - a desktop board with no internal eDP panel physically wired. The BIOS/VBT incorrectly declares an eDP connector present, causing intel_edp_init_connector() to repeatedly time out on AUX A before giving up. This is confirmed by i915_display_info (no eDP connector listed) and dmesg ( several AUX A errors, ending with "failed to retrieve link info, disabling eDP").

> I'm not fine with adding module parameters for regular use cases. If there are issues out there, they should be root caused and fixed, worst case with a quirk.
> You can also disable connectors using the video= parameter and connector name.

Point taken. I will drop the new module parameter. The VBT is clearly a mismatch for this board.
Rather than adding a new module parameter or DMI quirk, I would like to pursue your suggestion of fixing the existing video=eDP-1:d path (tested: not working for this case). 
May I rework that?

> Please file a bug as described at [1], and be sure to attach the dmesg with debugs, and the VBT.

Bug filed with dmesg and raw VBT. https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/16546

Thanks again for the direction.

Best regards,
Mei Fan 

-----Original Message-----
From: Jani Nikula <jani.nikula@linux.intel.com> 
Sent: Tuesday, 30 June 2026 6:47 pm
To: Liou, Mei Fan <mei.fan.liou@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>; Tvrtko Ursulin <tursulin@ursulin.net>; David Airlie <airlied@gmail.com>; Simona Vetter <simona@ffwll.ch>; intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org; dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org; Liou, Mei Fan <mei.fan.liou@intel.com>
Subject: Re: [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init

On Tue, 30 Jun 2026, mei.fan.liou@intel.com wrote:
> From: "LIOU, Mei Fan" <mei.fan.liou@intel.com>
>
> Some platforms have BIOS/VBT that declares an eDP panel present while 
> no physical panel is connected. This causes intel_edp_init_connector() 
> to spend ~6 seconds waiting on PPS power sequencer and AUX channel 
> timeouts before failing gracefully.

Which platforms? This should not be the case.

> Introduce a new boolean module parameter 'disable_edp' (default: 
> false) that allows users to skip eDP connector initialization 
> entirely. When set, the driver logs an informational message and 
> returns false early from intel_edp_init_connector(), bypassing all PPS/AUX probing.

I'm fine with adding module parameters for *debugging*. I'm not fine with adding module parameters for regular use cases. If there are issues out there, they should be root caused and fixed, worst case with a quirk, but roughly never with a new module parameter.

You can also disable connectors using the video= parameter and connector name, e.g. video=eDP-1:d or something. Making this work (if it doesn't) should be preferred over adding new module parameters. And even here, root causing and fixing is preferred.

> This is modeled after the existing 'disable_display' parameter and is 
> intended as a workaround for headless or display-less deployments 
> where the BIOS incorrectly advertises an internal panel.

"headless" and "display-less" are super ambiguous, given the amount of possible alternatives. You might not have display IP at all, or you could have everything except a display connected, or everything in between. But VBT advertizing eDP but it not being connected is not a scenario that we should have, and either the VBT or the whole setup is bonkers.

Please file a bug as described at [1], and be sure to attach the dmesg with debugs, and the VBT.


BR,
Jani.


[1] https://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html


>
> Signed-off-by: LIOU, Mei Fan <mei.fan.liou@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_params.c | 3 +++  
> drivers/gpu/drm/i915/display/intel_display_params.h | 1 +
>  drivers/gpu/drm/i915/display/intel_dp.c             | 7 +++++++
>  3 files changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_params.c 
> b/drivers/gpu/drm/i915/display/intel_display_params.c
> index 2aed110c5b09..8d47d19b1667 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_params.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_params.c
> @@ -102,6 +102,9 @@ 
> intel_display_param_named_unsafe(force_reset_modeset_test, bool, 0400,  intel_display_param_named(disable_display, bool, 0400,
>  	"Disable display (default: false)");
>  
> +intel_display_param_named(disable_edp, bool, 0400,
> +	"Disable eDP panel init, skips PPS/AUX probing when VBT declares eDP 
> +but no panel is present (default: false)");
> +
>  intel_display_param_named(verbose_state_checks, bool, 0400,
>  	"Enable verbose logs (ie. WARN_ON()) in case of unexpected hw state 
> conditions.");
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_display_params.h 
> b/drivers/gpu/drm/i915/display/intel_display_params.h
> index b95ecf728daa..98ab0d753dab 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_params.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_params.h
> @@ -41,6 +41,7 @@ struct drm_printer;
>  	param(bool, load_detect_test, false, 0600) \
>  	param(bool, force_reset_modeset_test, false, 0600) \
>  	param(bool, disable_display, false, 0400) \
> +	param(bool, disable_edp, false, 0400) \
>  	param(bool, verbose_state_checks, true, 0400) \
>  	param(bool, nuclear_pageflip, false, 0400) \
>  	param(bool, enable_dp_mst, true, 0600) \ diff --git 
> a/drivers/gpu/drm/i915/display/intel_dp.c 
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 85d3aa3b9894..c6293a1b3840 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -7214,6 +7214,13 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  	if (!intel_dp_is_edp(intel_dp))
>  		return true;
>  
> +	if (display->params.disable_edp) {
> +		drm_info(display->drm,
> +			 "[ENCODER:%d:%s] eDP disabled by module parameter, skipping init\n",
> +			 encoder->base.base.id, encoder->base.name);
> +		return false;
> +	}
> +
>  	/*
>  	 * On IBX/CPT we may get here with LVDS already registered. Since the
>  	 * driver uses the only internal power sequencer available for both

--
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init
  2026-07-02 11:07   ` Liou, Mei Fan
@ 2026-07-02 11:48     ` Jani Nikula
  0 siblings, 0 replies; 4+ messages in thread
From: Jani Nikula @ 2026-07-02 11:48 UTC (permalink / raw)
  To: Liou, Mei Fan, Vivi, Rodrigo
  Cc: Joonas Lahtinen, Tvrtko Ursulin, David Airlie, Simona Vetter,
	intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	Dutta, Ranjan, Chang, Junxiao, ville.syrjala, Deak, Imre


Cc: Ville, Imre

On Thu, 02 Jul 2026, "Liou, Mei Fan" <mei.fan.liou@intel.com> wrote:
> Rather than adding a new module parameter or DMI quirk, I would like
> to pursue your suggestion of fixing the existing video=eDP-1:d path
> (tested: not working for this case).
> May I rework that?

I had a glance.

intel_dp_init_connector() -> drm_connector_init_with_ddc() ->
drm_connector_init_and_add() -> drm_connector_init_only() ->
drm_connector_get_cmdline_mode() ->
drm_mode_parse_command_line_for_connector() ->
drm_mode_parse_cmdline_extra().

drm_mode_parse_cmdline_extra() sets mode->force.

drm_connector_get_cmdline_mode() sets connector->force if mode->force.

It's an interesting idea to use connector->force == DRM_FORCE_OFF to
bail out from eDP init in a way that cleans up the eDP connector but
doesn't fail the probe altogether. (And I think currently this happens
automatically if the PPS/AUX fail, it just takes a while.)

For other connectors we should keep it dynamic, i.e. the connector
should stay around even if forced off at probe, as the status may change
later, but eDP is kind of static. E.g. we don't try all the DPCD reads
again later.

I'm not dismissing the idea immediately, and it might work, but I'm also
not pre-emptively acking. There may be corner cases that I can't think
of right now. Maybe we need to keep the connector around but just not
try to probe it, and then leave it disconnected. Not sure.


BR,
Jani.


-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-07-02 11:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-30 10:28 [PATCH] drm/i915: add disable_edp module parameter to skip phantom eDP init mei.fan.liou
2026-06-30 10:47 ` Jani Nikula
2026-07-02 11:07   ` Liou, Mei Fan
2026-07-02 11:48     ` Jani Nikula

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox