diff mbox

[1/2] dp/mst: add SDP stream support

Message ID 1446798881-95629-2-git-send-email-libin.yang@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

libin.yang@linux.intel.com Nov. 6, 2015, 8:34 a.m. UTC
From: Libin Yang <libin.yang@linux.intel.com>

This adds code to initialise the SDP streams
for a sink in the simplest ordering.

I've no idea how you'd want to control the
ordering at this level, so don't bother
until someone comes up with a use case.

Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 drivers/gpu/drm/drm_dp_mst_topology.c | 34 +++++++++++++++++++++++++++++++---
 include/drm/drm_dp_mst_helper.h       |  7 +++++--
 2 files changed, 36 insertions(+), 5 deletions(-)

Comments

kernel test robot Nov. 6, 2015, 9:26 a.m. UTC | #1
Hi Libin,

[auto build test WARNING on drm/drm-next]
[also build test WARNING on v4.3 next-20151106]
[cannot apply to drm-intel/for-linux-next]

url:    https://github.com/0day-ci/linux/commits/libin-yang-linux-intel-com/drm-i915-DP-MST-audio-support-in-i915/20151106-163857
base:   git://people.freedesktop.org/~airlied/linux.git drm-next
reproduce: make htmldocs

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'wedged'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'fmt'
   include/drm/drm_crtc.h:310: warning: No description found for parameter 'mode_blob'
   include/drm/drm_crtc.h:737: warning: No description found for parameter 'tile_blob_ptr'
   include/drm/drm_crtc.h:776: warning: No description found for parameter 'rotation'
   include/drm/drm_crtc.h:872: warning: No description found for parameter 'mutex'
   include/drm/drm_crtc.h:872: warning: No description found for parameter 'helper_private'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tile_idr'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'delayed_event'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'edid_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'dpms_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'path_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tile_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'plane_type_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'rotation_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_src_x'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_src_y'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_src_w'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_src_h'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_crtc_x'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_crtc_y'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_crtc_w'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_crtc_h'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_fb_id'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_crtc_id'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_active'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'prop_mode_id'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'dvi_i_subconnector_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'dvi_i_select_subconnector_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_subconnector_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_select_subconnector_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_mode_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_left_margin_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_right_margin_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_top_margin_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_bottom_margin_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_brightness_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_contrast_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_flicker_reduction_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_overscan_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_saturation_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'tv_hue_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'scaling_mode_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'aspect_ratio_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'dirty_info_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'suggested_x_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'suggested_y_property'
   include/drm/drm_crtc.h:1157: warning: No description found for parameter 'allow_fb_modifiers'
   include/drm/drm_fb_helper.h:148: warning: No description found for parameter 'connector_info'
   include/drm/drm_dp_helper.h:713: warning: No description found for parameter 'i2c_nack_count'
   include/drm/drm_dp_helper.h:713: warning: No description found for parameter 'i2c_defer_count'
   drivers/gpu/drm/drm_dp_mst_topology.c:2237: warning: No description found for parameter 'connector'
>> drivers/gpu/drm/drm_dp_mst_topology.c:2276: warning: No description found for parameter 'mgr'
>> drivers/gpu/drm/drm_dp_mst_topology.c:2276: warning: No description found for parameter 'port'
   include/drm/drm_dp_mst_helper.h:98: warning: No description found for parameter 'cached_edid'
>> include/drm/drm_dp_mst_helper.h:98: warning: No description found for parameter 'has_audio'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'max_dpcd_transaction_bytes'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'sink_count'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'total_slots'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'avail_slots'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'total_pbn'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'qlock'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'tx_msg_downq'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'tx_msg_upq'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'tx_down_in_progress'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'tx_up_in_progress'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'payload_lock'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'proposed_vcpis'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'payloads'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'payload_mask'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'vcpi_mask'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'tx_waitq'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'work'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'tx_work'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'destroy_connector_list'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'destroy_connector_lock'
   include/drm/drm_dp_mst_helper.h:472: warning: No description found for parameter 'destroy_connector_work'
   drivers/gpu/drm/drm_dp_mst_topology.c:2237: warning: No description found for parameter 'connector'
>> drivers/gpu/drm/drm_dp_mst_topology.c:2276: warning: No description found for parameter 'mgr'
>> drivers/gpu/drm/drm_dp_mst_topology.c:2276: warning: No description found for parameter 'port'
   drivers/gpu/drm/drm_irq.c:173: warning: No description found for parameter 'flags'
   include/drm/drmP.h:168: warning: No description found for parameter 'fmt'
   include/drm/drmP.h:184: warning: No description found for parameter 'fmt'
   include/drm/drmP.h:202: warning: No description found for parameter 'fmt'
   include/drm/drmP.h:247: warning: No description found for parameter 'dev'
   include/drm/drmP.h:247: warning: No description found for parameter 'data'
   include/drm/drmP.h:247: warning: No description found for parameter 'file_priv'
   include/drm/drmP.h:280: warning: No description found for parameter 'ioctl'
   include/drm/drmP.h:280: warning: No description found for parameter '_func'
   include/drm/drmP.h:280: warning: No description found for parameter '_flags'
   include/drm/drmP.h:353: warning: cannot understand function prototype: 'struct drm_lock_data '
   include/drm/drmP.h:406: warning: cannot understand function prototype: 'struct drm_driver '
   include/drm/drmP.h:656: warning: cannot understand function prototype: 'struct drm_info_list '
   include/drm/drmP.h:666: warning: cannot understand function prototype: 'struct drm_info_node '
   include/drm/drmP.h:676: warning: cannot understand function prototype: 'struct drm_minor '
   include/drm/drmP.h:724: warning: cannot understand function prototype: 'struct drm_device '
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'wedged'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'wedged'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'wedged'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'wedged'
   drivers/gpu/drm/i915/i915_irq.c:2584: warning: No description found for parameter 'fmt'
   drivers/gpu/drm/i915/i915_gem.c:421: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:421: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:421: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:686: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:686: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:686: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:767: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:767: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:767: warning: No description found for parameter 'args'
   drivers/gpu/drm/i915/i915_gem.c:767: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1029: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1029: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1029: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1194: warning: No description found for parameter 'rps'
   drivers/gpu/drm/i915/i915_gem.c:1400: warning: No description found for parameter 'req'
   drivers/gpu/drm/i915/i915_gem.c:1435: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:1435: warning: No description found for parameter 'readonly'
   drivers/gpu/drm/i915/i915_gem.c:1558: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1558: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1558: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1621: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1621: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1621: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1666: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1666: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:1666: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:1954: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:1954: warning: No description found for parameter 'size'
   drivers/gpu/drm/i915/i915_gem.c:1954: warning: No description found for parameter 'tiling_mode'
   drivers/gpu/drm/i915/i915_gem.c:1954: warning: No description found for parameter 'fenced'
   drivers/gpu/drm/i915/i915_gem.c:1954: warning: Excess function parameter 'obj' description in 'i915_gem_get_gtt_alignment'
   drivers/gpu/drm/i915/i915_gem.c:2817: warning: No description found for parameter 'ring'
   drivers/gpu/drm/i915/i915_gem.c:2946: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:2996: warning: No description found for parameter 'dev'
   drivers/gpu/drm/i915/i915_gem.c:2996: warning: No description found for parameter 'data'
   drivers/gpu/drm/i915/i915_gem.c:2996: warning: No description found for parameter 'file'
   drivers/gpu/drm/i915/i915_gem.c:2996: warning: Excess function parameter 'DRM_IOCTL_ARGS' description in 'i915_gem_wait_ioctl'
   drivers/gpu/drm/i915/i915_gem.c:3365: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3365: warning: No description found for parameter 'vm'
   drivers/gpu/drm/i915/i915_gem.c:3365: warning: No description found for parameter 'ggtt_view'
   drivers/gpu/drm/i915/i915_gem.c:3365: warning: No description found for parameter 'alignment'
   drivers/gpu/drm/i915/i915_gem.c:3365: warning: No description found for parameter 'flags'
   drivers/gpu/drm/i915/i915_gem.c:3600: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3600: warning: No description found for parameter 'write'
   drivers/gpu/drm/i915/i915_gem.c:3675: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3675: warning: No description found for parameter 'cache_level'
   drivers/gpu/drm/i915/i915_gem.c:3949: warning: No description found for parameter 'obj'
   drivers/gpu/drm/i915/i915_gem.c:3949: warning: No description found for parameter 'write'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: No description found for parameter 'params'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'dev' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'file' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'ring' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'ctx' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'batch_obj' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'exec_start' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'dispatch_flags' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: No description found for parameter 'params'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'dev' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'file' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'ring' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'ctx' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'batch_obj' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'exec_start' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_lrc.c:871: warning: Excess function parameter 'dispatch_flags' description in 'intel_execlists_submission'
   drivers/gpu/drm/i915/intel_guc_loader.c:1: warning: no structured comments found
       Was looking for 'GuC-specific firmware loader'.
   drivers/gpu/drm/i915/i915_guc_submission.c:598: warning: No description found for parameter 'rq'
   drivers/gpu/drm/i915/i915_guc_submission.c:598: warning: Excess function parameter 'ctx' description in 'i915_guc_submit'
   drivers/gpu/drm/i915/i915_guc_submission.c:598: warning: Excess function parameter 'ring' description in 'i915_guc_submit'
   drivers/gpu/drm/i915/i915_guc_submission.c:741: warning: No description found for parameter 'ctx'
   drivers/gpu/drm/i915/i915_guc_submission.c:1: warning: no structured comments found
       Was looking for 'GuC-based command submissison'.
   drivers/gpu/drm/i915/i915_guc_submission.c:598: warning: No description found for parameter 'rq'
   drivers/gpu/drm/i915/i915_guc_submission.c:598: warning: Excess function parameter 'ctx' description in 'i915_guc_submit'
   drivers/gpu/drm/i915/i915_guc_submission.c:598: warning: Excess function parameter 'ring' description in 'i915_guc_submit'
   drivers/gpu/drm/i915/i915_guc_submission.c:741: warning: No description found for parameter 'ctx'

vim +/mgr +2276 drivers/gpu/drm/drm_dp_mst_topology.c

  2231	 *
  2232	 * This returns the current connection state for a port. It validates the
  2233	 * port pointer still exists so the caller doesn't require a reference
  2234	 */
  2235	enum drm_connector_status drm_dp_mst_detect_port(struct drm_connector *connector,
  2236							 struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port)
> 2237	{
  2238		enum drm_connector_status status = connector_status_disconnected;
  2239	
  2240		/* we need to search for the port in the mgr in case its gone */
  2241		port = drm_dp_get_validated_port_ref(mgr, port);
  2242		if (!port)
  2243			return connector_status_disconnected;
  2244	
  2245		if (!port->ddps)
  2246			goto out;
  2247	
  2248		switch (port->pdt) {
  2249		case DP_PEER_DEVICE_NONE:
  2250		case DP_PEER_DEVICE_MST_BRANCHING:
  2251			break;
  2252	
  2253		case DP_PEER_DEVICE_SST_SINK:
  2254			status = connector_status_connected;
  2255			/* for logical ports - cache the EDID */
  2256			if (port->port_num >= 8 && !port->cached_edid) {
  2257				port->cached_edid = drm_get_edid(connector, &port->aux.ddc);
  2258			}
  2259			break;
  2260		case DP_PEER_DEVICE_DP_LEGACY_CONV:
  2261			if (port->ldps)
  2262				status = connector_status_connected;
  2263			break;
  2264		}
  2265	out:
  2266		drm_dp_put_port(port);
  2267		return status;
  2268	}
  2269	EXPORT_SYMBOL(drm_dp_mst_detect_port);
  2270	
  2271	/**
  2272	 * drm_dp_mst_port_has_audio()
  2273	 */
  2274	bool drm_dp_mst_port_has_audio(struct drm_dp_mst_topology_mgr *mgr,
  2275						struct drm_dp_mst_port *port)
> 2276	{
  2277		bool ret = false;
  2278	
  2279		port = drm_dp_get_validated_port_ref(mgr, port);

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index 809959d..20d4d2a 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -666,7 +666,9 @@  static int build_enum_path_resources(struct drm_dp_sideband_msg_tx *msg, int por
 }
 
 static int build_allocate_payload(struct drm_dp_sideband_msg_tx *msg, int port_num,
-				  u8 vcpi, uint16_t pbn)
+				  u8 vcpi, uint16_t pbn,
+				  u8 number_sdp_streams,
+				  u8 *sdp_stream_sink)
 {
 	struct drm_dp_sideband_msg_req_body req;
 	memset(&req, 0, sizeof(req));
@@ -674,6 +676,9 @@  static int build_allocate_payload(struct drm_dp_sideband_msg_tx *msg, int port_n
 	req.u.allocate_payload.port_number = port_num;
 	req.u.allocate_payload.vcpi = vcpi;
 	req.u.allocate_payload.pbn = pbn;
+	req.u.allocate_payload.number_sdp_streams = number_sdp_streams;
+	memcpy(req.u.allocate_payload.sdp_stream_sink, sdp_stream_sink,
+		   number_sdp_streams);
 	drm_dp_encode_sideband_req(&req, msg);
 	msg->path_msg = true;
 	return 0;
@@ -1562,6 +1567,8 @@  static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr,
 	struct drm_dp_sideband_msg_tx *txmsg;
 	struct drm_dp_mst_branch *mstb;
 	int len, ret;
+	u8 sinks[DRM_DP_MAX_SDP_STREAMS];
+	int i;
 
 	mstb = drm_dp_get_validated_mstb_ref(mgr, port->parent);
 	if (!mstb)
@@ -1573,10 +1580,13 @@  static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr,
 		goto fail_put;
 	}
 
+	for (i = 0; i < port->num_sdp_streams; i++)
+		sinks[i] = i;
+
 	txmsg->dst = mstb;
 	len = build_allocate_payload(txmsg, port->port_num,
 				     id,
-				     pbn);
+				     pbn, port->num_sdp_streams, sinks);
 
 	drm_dp_queue_down_tx(mgr, txmsg);
 
@@ -2259,6 +2269,23 @@  out:
 EXPORT_SYMBOL(drm_dp_mst_detect_port);
 
 /**
+ * drm_dp_mst_port_has_audio()
+ */
+bool drm_dp_mst_port_has_audio(struct drm_dp_mst_topology_mgr *mgr,
+					struct drm_dp_mst_port *port)
+{
+	bool ret = false;
+
+	port = drm_dp_get_validated_port_ref(mgr, port);
+	if (!port)
+		return ret;
+	ret = port->has_audio;
+	drm_dp_put_port(port);
+	return ret;
+}
+EXPORT_SYMBOL(drm_dp_mst_port_has_audio);
+
+/**
  * drm_dp_mst_get_edid() - get EDID for an MST port
  * @connector: toplevel connector to get EDID for
  * @mgr: manager for this port
@@ -2283,6 +2310,7 @@  struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_
 		edid = drm_get_edid(connector, &port->aux.ddc);
 		drm_mode_connector_set_tile_property(connector);
 	}
+	port->has_audio = drm_detect_monitor_audio(edid);
 	drm_dp_put_port(port);
 	return edid;
 }
@@ -2566,7 +2594,7 @@  static void drm_dp_mst_dump_mstb(struct seq_file *m,
 
 	seq_printf(m, "%smst: %p, %d\n", prefix, mstb, mstb->num_ports);
 	list_for_each_entry(port, &mstb->ports, next) {
-		seq_printf(m, "%sport: %d: ddps: %d ldps: %d, %p, conn: %p\n", prefix, port->port_num, port->ddps, port->ldps, port, port->connector);
+		seq_printf(m, "%sport: %d: ddps: %d ldps: %d, sdp: %d/%d, %p, conn: %p\n", prefix, port->port_num, port->ddps, port->ldps, port->num_sdp_streams, port->num_sdp_stream_sinks, port, port->connector);
 		if (port->mstb)
 			drm_dp_mst_dump_mstb(m, port->mstb);
 	}
diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h
index 5340099..74b5888 100644
--- a/include/drm/drm_dp_mst_helper.h
+++ b/include/drm/drm_dp_mst_helper.h
@@ -94,6 +94,7 @@  struct drm_dp_mst_port {
 	struct drm_dp_mst_topology_mgr *mgr;
 
 	struct edid *cached_edid; /* for DP logical ports - make tiling work */
+	bool has_audio;
 };
 
 /**
@@ -215,13 +216,13 @@  struct drm_dp_sideband_msg_rx {
 	struct drm_dp_sideband_msg_hdr initial_hdr;
 };
 
-
+#define DRM_DP_MAX_SDP_STREAMS 16
 struct drm_dp_allocate_payload {
 	u8 port_number;
 	u8 number_sdp_streams;
 	u8 vcpi;
 	u16 pbn;
-	u8 sdp_stream_sink[8];
+	u8 sdp_stream_sink[DRM_DP_MAX_SDP_STREAMS];
 };
 
 struct drm_dp_allocate_payload_ack_reply {
@@ -484,6 +485,8 @@  int drm_dp_mst_hpd_irq(struct drm_dp_mst_topology_mgr *mgr, u8 *esi, bool *handl
 
 enum drm_connector_status drm_dp_mst_detect_port(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port);
 
+bool drm_dp_mst_port_has_audio(struct drm_dp_mst_topology_mgr *mgr,
+					struct drm_dp_mst_port *port);
 struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port);