drm/dp_mst: add passthrough_aux to struct drm_dp_mst_port
authorHamza Mahfooz <hamza.mahfooz@amd.com>
Thu, 4 Aug 2022 18:06:55 +0000 (14:06 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 16 Aug 2022 22:14:32 +0000 (18:14 -0400)
Currently, there is no way to identify if DSC pass-through can be
enabled and what aux DSC pass-through requests ought to be sent to. So,
add a variable to struct drm_dp_mst_port that keeps track of the
aforementioned information.

Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/display/drm_dp_mst_topology.c
include/drm/display/drm_dp.h
include/drm/display/drm_dp_mst_helper.h

index 57e6542..3ffa0e8 100644 (file)
@@ -5908,8 +5908,10 @@ struct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(struct drm_dp_mst_port *port)
                /* Enpoint decompression with DP-to-DP peer device */
                if ((endpoint_dsc & DP_DSC_DECOMPRESSION_IS_SUPPORTED) &&
                    (endpoint_fec & DP_FEC_CAPABLE) &&
-                   (upstream_dsc & 0x2) /* DSC passthrough */)
+                   (upstream_dsc & DP_DSC_PASSTHROUGH_IS_SUPPORTED)) {
+                       port->passthrough_aux = &immediate_upstream_port->aux;
                        return &port->aux;
+               }
 
                /* Virtual DPCD decompression with DP-to-DP peer device */
                return &immediate_upstream_port->aux;
index 9e3aff7..4d0abe4 100644 (file)
 
 #define DP_DSC_SUPPORT                      0x060   /* DP 1.4 */
 # define DP_DSC_DECOMPRESSION_IS_SUPPORTED  (1 << 0)
+# define DP_DSC_PASSTHROUGH_IS_SUPPORTED    (1 << 1)
 
 #define DP_DSC_REV                          0x061
 # define DP_DSC_MAJOR_MASK                  (0xf << 0)
index 10adec0..4a39c95 100644 (file)
@@ -86,6 +86,8 @@ struct drm_dp_vcpi {
  * @next: link to next port on this branch device
  * @aux: i2c aux transport to talk to device connected to this port, protected
  * by &drm_dp_mst_topology_mgr.base.lock.
+ * @passthrough_aux: parent aux to which DSC pass-through requests should be
+ * sent, only set if DSC pass-through is possible.
  * @parent: branch device parent of this port
  * @vcpi: Virtual Channel Payload info for this port.
  * @connector: DRM connector this port is connected to. Protected by
@@ -140,6 +142,7 @@ struct drm_dp_mst_port {
         */
        struct drm_dp_mst_branch *mstb;
        struct drm_dp_aux aux; /* i2c bus for this port? */
+       struct drm_dp_aux *passthrough_aux;
        struct drm_dp_mst_branch *parent;
 
        struct drm_dp_vcpi vcpi;