aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3348-drm-amd-display-Implement-MST-Aux-device-registratio.patch
diff options
context:
space:
mode:
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.patch142
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
+