As described in the previous patch, an unexpected connector detection/modeset started from the intel_hotplug::hotplug_work can happen during the driver init/shutdown sequence. Prevent these by disabling the queuing of and flushing all the intel_hotplug work that can start them at the beginning of the init/shutdown sequence and allow the queuing only while the display is in the initialized state. Other work items - like the intel_connector::modeset_retry_work or the MST probe works - are still enabled and can start a detection/modeset, but after the previous patch these will be rejected. Disabling these works as well is for a follow-up patchset. Link: https://patchwork.freedesktop.org/patch/msgid/20240104083008.2715733-9-imre.deak@intel.com Reviewed-by: Jouni Högander <jouni.hogander@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com>
37 lines
1.4 KiB
C
37 lines
1.4 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_HOTPLUG_H__
|
|
#define __INTEL_HOTPLUG_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_i915_private;
|
|
struct intel_connector;
|
|
struct intel_digital_port;
|
|
struct intel_encoder;
|
|
enum port;
|
|
|
|
void intel_hpd_poll_enable(struct drm_i915_private *dev_priv);
|
|
void intel_hpd_poll_disable(struct drm_i915_private *dev_priv);
|
|
enum intel_hotplug_state intel_encoder_hotplug(struct intel_encoder *encoder,
|
|
struct intel_connector *connector);
|
|
void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
|
|
u32 pin_mask, u32 long_mask);
|
|
void intel_hpd_trigger_irq(struct intel_digital_port *dig_port);
|
|
void intel_hpd_init(struct drm_i915_private *dev_priv);
|
|
void intel_hpd_init_early(struct drm_i915_private *i915);
|
|
void intel_hpd_cancel_work(struct drm_i915_private *dev_priv);
|
|
enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv,
|
|
enum port port);
|
|
bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
|
|
void intel_hpd_enable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
|
|
void intel_hpd_debugfs_register(struct drm_i915_private *i915);
|
|
|
|
void intel_hpd_enable_detection_work(struct drm_i915_private *i915);
|
|
void intel_hpd_disable_detection_work(struct drm_i915_private *i915);
|
|
bool intel_hpd_schedule_detection(struct drm_i915_private *i915);
|
|
|
|
#endif /* __INTEL_HOTPLUG_H__ */
|