Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 6c39ae2ecdb30cec4a2bd320926c839d5c0ec9cc Mon Sep 17 00:00:00 2001
- From: Leo Li <sunpeng.li@amd.com>
- Date: Thu, 6 Jun 2019 15:02:42 -0400
- Subject: [PATCH] Fixing driver unload with mst devices
- Signed-off-by: Leo Li <sunpeng.li@amd.com>
- ---
- drivers/gpu/drm/drm_dp_helper.c | 12 ++++++++++++
- drivers/gpu/drm/drm_dp_mst_topology.c | 7 -------
- drivers/gpu/drm/i915/intel_dp_mst.c | 33 +++++++++++++++++++++++++++++++--
- include/drm/drm_dp_helper.h | 2 ++
- 4 files changed, 45 insertions(+), 9 deletions(-)
- diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
- index e6af758..4de68ea 100644
- --- a/drivers/gpu/drm/drm_dp_helper.c
- +++ b/drivers/gpu/drm/drm_dp_helper.c
- @@ -1174,6 +1174,18 @@ void drm_dp_aux_unregister(struct drm_dp_aux *aux)
- }
- EXPORT_SYMBOL(drm_dp_aux_unregister);
- +int drm_dp_remote_aux_register(struct drm_dp_aux *aux)
- +{
- + return drm_dp_aux_register_devnode(aux);
- +}
- +EXPORT_SYMBOL(drm_dp_remote_aux_register);
- +
- +void drm_dp_remote_aux_unregister(struct drm_dp_aux *aux)
- +{
- + drm_dp_aux_unregister_devnode(aux);
- +}
- +EXPORT_SYMBOL(drm_dp_remote_aux_unregister);
- +
- #define PSR_SETUP_TIME(x) [DP_PSR_SETUP_TIME_ ## x >> DP_PSR_SETUP_TIME_SHIFT] = (x)
- /**
- diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
- index 3829f54..a85f055 100644
- --- a/drivers/gpu/drm/drm_dp_mst_topology.c
- +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
- @@ -1243,7 +1243,6 @@ static void drm_dp_destroy_port(struct kref *kref)
- struct drm_dp_mst_topology_mgr *mgr = port->mgr;
- if (!port->input) {
- - drm_dp_aux_unregister_devnode(&port->aux);
- port->vcpi.num_slots = 0;
- @@ -1675,12 +1674,6 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb,
- drm_connector_set_tile_property(port->connector);
- }
- (*mstb->mgr->cbs->register_connector)(port->connector);
- -
- - if (port->connector->registration_state ==
- - DRM_CONNECTOR_REGISTERED)
- - port->aux.dev = port->connector->kdev;
- -
- - drm_dp_aux_register_devnode(&port->aux);
- }
- out:
- diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
- index 0caf645..a3d9bc7 100644
- --- a/drivers/gpu/drm/i915/intel_dp_mst.c
- +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
- @@ -399,13 +399,42 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
- intel_connector->port);
- }
- +static int
- +intel_dp_mst_connector_late_register(struct drm_connector *connector)
- +{
- + struct intel_connector *intel_connector = to_intel_connector(connector);
- + struct drm_dp_mst_port *port = intel_connector->port;
- +
- + int ret;
- +
- + ret = intel_connector_register(connector);
- + if (ret)
- + return ret;
- +
- + DRM_DEBUG_KMS("registering %s MST bus for %s\n",
- + port->aux.name, connector->kdev->kobj.name);
- +
- + port->aux.dev = connector->kdev;
- + return drm_dp_remote_aux_register(&port->aux);
- +}
- +
- +static void
- +intel_dp_mst_connector_early_unregister(struct drm_connector *connector)
- +{
- + struct intel_connector *intel_connector = to_intel_connector(connector);
- + struct drm_dp_mst_port *port = intel_connector->port;
- +
- + drm_dp_remote_aux_unregister(&port->aux);
- + intel_connector_unregister(connector);
- +}
- +
- static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
- .detect = intel_dp_mst_detect,
- .fill_modes = drm_helper_probe_single_connector_modes,
- .atomic_get_property = intel_digital_connector_atomic_get_property,
- .atomic_set_property = intel_digital_connector_atomic_set_property,
- - .late_register = intel_connector_register,
- - .early_unregister = intel_connector_unregister,
- + .late_register = intel_dp_mst_connector_late_register,
- + .early_unregister = intel_dp_mst_connector_early_unregister,
- .destroy = intel_connector_destroy,
- .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
- .atomic_duplicate_state = intel_digital_connector_duplicate_state,
- diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
- index efd14b8..d086897 100644
- --- a/include/drm/drm_dp_helper.h
- +++ b/include/drm/drm_dp_helper.h
- @@ -1371,6 +1371,8 @@ void drm_dp_downstream_debug(struct seq_file *m, const u8 dpcd[DP_RECEIVER_CAP_S
- void drm_dp_aux_init(struct drm_dp_aux *aux);
- int drm_dp_aux_register(struct drm_dp_aux *aux);
- void drm_dp_aux_unregister(struct drm_dp_aux *aux);
- +int drm_dp_remote_aux_register(struct drm_dp_aux *aux);
- +void drm_dp_remote_aux_unregister(struct drm_dp_aux *aux);
- int drm_dp_start_crc(struct drm_dp_aux *aux, struct drm_crtc *crtc);
- int drm_dp_stop_crc(struct drm_dp_aux *aux);
- --
- 2.7.4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement