diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3348-drm-amd-display-Implement-MST-Aux-device-registratio.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3348-drm-amd-display-Implement-MST-Aux-device-registratio.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3348-drm-amd-display-Implement-MST-Aux-device-registratio.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3348-drm-amd-display-Implement-MST-Aux-device-registratio.patch new file mode 100644 index 00000000..28aeb453 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3348-drm-amd-display-Implement-MST-Aux-device-registratio.patch @@ -0,0 +1,142 @@ +From 89dc36ff36c1b8754861ff8bf1d3354f3688997c Mon Sep 17 00:00:00 2001 +From: Leo Li <sunpeng.li@amd.com> +Date: Wed, 12 Jun 2019 17:53:13 -0400 +Subject: [PATCH 3348/4256] drm/amd/display: Implement MST Aux device + registration + +Implement late_register and early_unregister hooks for MST connectors. +Call drm helpers for MST connector registration, which registers the +AUX devices. + +Cc: Jerry Zuo <Jerry.Zuo@amd.com> +Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Cc: Harry Wentland <harry.wentland@amd.com> +Signed-off-by: Leo Li <sunpeng.li@amd.com> +Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +--- + .../display/amdgpu_dm/amdgpu_dm_mst_types.c | 24 ++++++++++- + drivers/gpu/drm/drm_dp_mst_topology.c | 42 +++++++++++++++++++ + include/drm/drm_dp_mst_helper.h | 5 +++ + 3 files changed, 70 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +index 083fb9729346..98916da6d25f 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +@@ -155,6 +155,26 @@ dm_dp_mst_connector_destroy(struct drm_connector *connector) + kfree(amdgpu_dm_connector); + } + ++static int ++amdgpu_dm_mst_connector_late_register(struct drm_connector *connector) ++{ ++ struct amdgpu_dm_connector *amdgpu_dm_connector = ++ to_amdgpu_dm_connector(connector); ++ struct drm_dp_mst_port *port = amdgpu_dm_connector->port; ++ ++ return drm_dp_mst_connector_late_register(connector, port); ++} ++ ++static void ++amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector) ++{ ++ struct amdgpu_dm_connector *amdgpu_dm_connector = ++ to_amdgpu_dm_connector(connector); ++ struct drm_dp_mst_port *port = amdgpu_dm_connector->port; ++ ++ drm_dp_mst_connector_early_unregister(connector, port); ++} ++ + static const struct drm_connector_funcs dm_dp_mst_connector_funcs = { + .detect = dm_dp_mst_detect, + .fill_modes = drm_helper_probe_single_connector_modes, +@@ -163,7 +183,9 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = { + .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, + .atomic_set_property = amdgpu_dm_connector_atomic_set_property, +- .atomic_get_property = amdgpu_dm_connector_atomic_get_property ++ .atomic_get_property = amdgpu_dm_connector_atomic_get_property, ++ .late_register = amdgpu_dm_mst_connector_late_register, ++ .early_unregister = amdgpu_dm_mst_connector_early_unregister, + }; + + static int dm_dp_mst_get_modes(struct drm_connector *connector) +diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c +index c0c7d006568e..c36e5e704a32 100644 +--- a/drivers/gpu/drm/drm_dp_mst_topology.c ++++ b/drivers/gpu/drm/drm_dp_mst_topology.c +@@ -35,6 +35,8 @@ + #include <drm/drm_atomic_helper.h> + #include <drm/drm_crtc_helper.h> + ++#include "drm_crtc_helper_internal.h" ++ + /** + * DOC: dp mst helper + * +@@ -1137,6 +1139,46 @@ static void build_mst_prop_path(const struct drm_dp_mst_branch *mstb, + strlcat(proppath, temp, proppath_size); + } + ++/** ++ * drm_dp_mst_connector_late_register() - Late MST connector registration ++ * @drm_connector: The MST connector ++ * @port: The MST port for this connector ++ * ++ * Helper to register the remote aux device for this MST port. Drivers should ++ * call this from their mst connector's late_register hook to enable MST aux ++ * devices. ++ * ++ * Return: 0 on success, negative error code on failure. ++ */ ++int drm_dp_mst_connector_late_register(struct drm_connector *connector, ++ struct drm_dp_mst_port *port) ++{ ++ DRM_DEBUG_KMS("registering %s remote bus for %s\n", ++ port->aux.name, connector->kdev->kobj.name); ++ ++ port->aux.dev = connector->kdev; ++ return drm_dp_aux_register_devnode(&port->aux); ++} ++EXPORT_SYMBOL(drm_dp_mst_connector_late_register); ++ ++/** ++ * drm_dp_mst_connector_early_unregister() - Early MST connector unregistration ++ * @drm_connector: The MST connector ++ * @port: The MST port for this connector ++ * ++ * Helper to unregister the remote aux device for this MST port, registered by ++ * drm_dp_mst_connector_late_register(). Drivers should call this from their mst ++ * connector's early_unregister hook. ++ */ ++void drm_dp_mst_connector_early_unregister(struct drm_connector *connector, ++ struct drm_dp_mst_port *port) ++{ ++ DRM_DEBUG_KMS("unregistering %s remote bus for %s\n", ++ port->aux.name, connector->kdev->kobj.name); ++ drm_dp_aux_unregister_devnode(&port->aux); ++} ++EXPORT_SYMBOL(drm_dp_mst_connector_early_unregister); ++ + static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, + struct drm_device *dev, + struct drm_dp_link_addr_reply_port *port_msg) +diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h +index 7f78d26a0766..c97dac8765d3 100644 +--- a/include/drm/drm_dp_mst_helper.h ++++ b/include/drm/drm_dp_mst_helper.h +@@ -623,6 +623,11 @@ void drm_dp_mst_dump_topology(struct seq_file *m, + + void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr); + int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr); ++int drm_dp_mst_connector_late_register(struct drm_connector *connector, ++ struct drm_dp_mst_port *port); ++void drm_dp_mst_connector_early_unregister(struct drm_connector *connector, ++ struct drm_dp_mst_port *port); ++ + struct drm_dp_mst_topology_state *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state, + struct drm_dp_mst_topology_mgr *mgr); + int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state, +-- +2.17.1 + |