When eDP connector is forced off (video=eDP-1:d),
intel_edp_init_connector() ignores the force flag and still probes
the AUX channel for DPCD and EDID.

video=eDP-1:d sets connector->force = DRM_FORCE_OFF via
drm_connector_get_cmdline_mode() inside drm_connector_init_with_ddc(),
which logs 'forcing eDP-1 connector off'. However,
intel_edp_init_connector() is called immediately after and ignores
the force flag, so AUX/PPS probing still occurs.

Fix this by checking connector->base.force == DRM_FORCE_OFF in
intel_edp_init_connector() after the intel_dp_is_edp() check, before
any AUX/DPCD probing is attempted. When the connector is forced off,
log an informational message and goto out_vdd_off to properly clean
up PPS state and skip all remaining hardware probing.

Suggested-by: Arun R Murthy <[email protected]>
Signed-off-by: LIOU, Mei Fan <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 3569e61e7fee..fa61b299f83e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -7057,6 +7057,17 @@ static bool intel_edp_init_connector(struct intel_dp 
*intel_dp,
 
        intel_alpm_init(intel_dp);
 
+       /*
+        * If the connector has been forced off via the kernel cmdline
+        * (e.g. video=eDP-1:d), skip DPCD/AUX probing.
+        */
+       if (connector->base.force == DRM_FORCE_OFF) {
+               drm_info(display->drm,
+                        "[ENCODER:%d:%s] eDP disabled via cmdline, skipping 
eDP init\n",
+                        encoder->base.base.id, encoder->base.name);
+               goto out_vdd_off;
+       }
+
        /* Cache DPCD and EDID for edp. */
        has_dpcd = intel_edp_init_dpcd(intel_dp, connector);
 
-- 
2.52.0

Reply via email to