Skip to content

Commit dd6e5fe

Browse files
committed
drm/i915: Move modeset_retry stuff into intel_connector.c
Most of the modeset retry stuff looks to be entirely generic, and so there doesn't seem to any reason to keep it in intel_dp.c. Move the generic bits into intel_connector.c. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250213150220.13580-2-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
1 parent ab2b059 commit dd6e5fe

4 files changed

Lines changed: 45 additions & 42 deletions

File tree

drivers/gpu/drm/i915/display/intel_connector.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
#include <drm/drm_atomic_helper.h>
3030
#include <drm/drm_edid.h>
31+
#include <drm/drm_probe_helper.h>
3132

3233
#include "i915_drv.h"
3334
#include "intel_backlight.h"
@@ -37,6 +38,44 @@
3738
#include "intel_hdcp.h"
3839
#include "intel_panel.h"
3940

41+
static void intel_connector_modeset_retry_work_fn(struct work_struct *work)
42+
{
43+
struct intel_connector *connector = container_of(work, typeof(*connector),
44+
modeset_retry_work);
45+
struct intel_display *display = to_intel_display(connector);
46+
47+
drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s]\n", connector->base.base.id,
48+
connector->base.name);
49+
50+
/* Grab the locks before changing connector property*/
51+
mutex_lock(&display->drm->mode_config.mutex);
52+
/* Set connector link status to BAD and send a Uevent to notify
53+
* userspace to do a modeset.
54+
*/
55+
drm_connector_set_link_status_property(&connector->base,
56+
DRM_MODE_LINK_STATUS_BAD);
57+
mutex_unlock(&display->drm->mode_config.mutex);
58+
/* Send Hotplug uevent so userspace can reprobe */
59+
drm_kms_helper_connector_hotplug_event(&connector->base);
60+
61+
drm_connector_put(&connector->base);
62+
}
63+
64+
void intel_connector_queue_modeset_retry_work(struct intel_connector *connector)
65+
{
66+
struct drm_i915_private *i915 = to_i915(connector->base.dev);
67+
68+
drm_connector_get(&connector->base);
69+
if (!queue_work(i915->unordered_wq, &connector->modeset_retry_work))
70+
drm_connector_put(&connector->base);
71+
}
72+
73+
void intel_connector_init_modeset_retry_work(struct intel_connector *connector)
74+
{
75+
INIT_WORK(&connector->modeset_retry_work,
76+
intel_connector_modeset_retry_work_fn);
77+
}
78+
4079
int intel_connector_init(struct intel_connector *connector)
4180
{
4281
struct intel_digital_connector_state *conn_state;

drivers/gpu/drm/i915/display/intel_connector.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ void intel_attach_aspect_ratio_property(struct drm_connector *connector);
3333
void intel_attach_hdmi_colorspace_property(struct drm_connector *connector);
3434
void intel_attach_dp_colorspace_property(struct drm_connector *connector);
3535
void intel_attach_scaling_mode_property(struct drm_connector *connector);
36+
void intel_connector_init_modeset_retry_work(struct intel_connector *connector);
37+
void intel_connector_queue_modeset_retry_work(struct intel_connector *connector);
3638

3739
#endif /* __INTEL_CONNECTOR_H__ */

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3056,15 +3056,6 @@ intel_dp_audio_compute_config(struct intel_encoder *encoder,
30563056
intel_dp_is_uhbr(pipe_config);
30573057
}
30583058

3059-
static void intel_dp_queue_modeset_retry_work(struct intel_connector *connector)
3060-
{
3061-
struct drm_i915_private *i915 = to_i915(connector->base.dev);
3062-
3063-
drm_connector_get(&connector->base);
3064-
if (!queue_work(i915->unordered_wq, &connector->modeset_retry_work))
3065-
drm_connector_put(&connector->base);
3066-
}
3067-
30683059
void
30693060
intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
30703061
struct intel_encoder *encoder,
@@ -3081,7 +3072,7 @@ intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
30813072
intel_dp->needs_modeset_retry = true;
30823073

30833074
if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST)) {
3084-
intel_dp_queue_modeset_retry_work(intel_dp->attached_connector);
3075+
intel_connector_queue_modeset_retry_work(intel_dp->attached_connector);
30853076

30863077
return;
30873078
}
@@ -3091,7 +3082,7 @@ intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
30913082
continue;
30923083

30933084
if (connector->mst_port == intel_dp)
3094-
intel_dp_queue_modeset_retry_work(connector);
3085+
intel_connector_queue_modeset_retry_work(connector);
30953086
}
30963087
}
30973088

@@ -6485,35 +6476,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
64856476
return false;
64866477
}
64876478

6488-
static void intel_dp_modeset_retry_work_fn(struct work_struct *work)
6489-
{
6490-
struct intel_connector *connector = container_of(work, typeof(*connector),
6491-
modeset_retry_work);
6492-
struct intel_display *display = to_intel_display(connector);
6493-
6494-
drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s]\n", connector->base.base.id,
6495-
connector->base.name);
6496-
6497-
/* Grab the locks before changing connector property*/
6498-
mutex_lock(&display->drm->mode_config.mutex);
6499-
/* Set connector link status to BAD and send a Uevent to notify
6500-
* userspace to do a modeset.
6501-
*/
6502-
drm_connector_set_link_status_property(&connector->base,
6503-
DRM_MODE_LINK_STATUS_BAD);
6504-
mutex_unlock(&display->drm->mode_config.mutex);
6505-
/* Send Hotplug uevent so userspace can reprobe */
6506-
drm_kms_helper_connector_hotplug_event(&connector->base);
6507-
6508-
drm_connector_put(&connector->base);
6509-
}
6510-
6511-
void intel_dp_init_modeset_retry_work(struct intel_connector *connector)
6512-
{
6513-
INIT_WORK(&connector->modeset_retry_work,
6514-
intel_dp_modeset_retry_work_fn);
6515-
}
6516-
65176479
bool
65186480
intel_dp_init_connector(struct intel_digital_port *dig_port,
65196481
struct intel_connector *connector)
@@ -6526,7 +6488,7 @@ intel_dp_init_connector(struct intel_digital_port *dig_port,
65266488
int type;
65276489

65286490
/* Initialize the work for modeset in case of link train failure */
6529-
intel_dp_init_modeset_retry_work(connector);
6491+
intel_connector_init_modeset_retry_work(connector);
65306492

65316493
if (drm_WARN(dev, dig_port->max_lanes < 1,
65326494
"Not enough lanes (%d) for DP on [ENCODER:%d:%s]\n",

drivers/gpu/drm/i915/display/intel_dp_mst.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1747,7 +1747,7 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
17471747
connector->port = port;
17481748
drm_dp_mst_get_port_malloc(port);
17491749

1750-
intel_dp_init_modeset_retry_work(connector);
1750+
intel_connector_init_modeset_retry_work(connector);
17511751

17521752
ret = drm_connector_dynamic_init(display->drm, &connector->base, &mst_connector_funcs,
17531753
DRM_MODE_CONNECTOR_DisplayPort, NULL);

0 commit comments

Comments
 (0)