DisplayPort Intel® FPGA IP User Guide

ID 683273
Date 10/16/2023
Document Table of Contents

4.3.8. DisplayPort MST Source User Application

For MST source instantiations, you need to create a user application at the top software layer to invoke the Link Layer level API functions of the btc_dptxll_syslib library.

The btc_dptxll_syslib library handles most of the Link Layer functionality. The library performs marginal SST operation, which in turn, becomes evident for MST operations. The btc_dptxll_syslib library uses the services provided by the btc_dptx_syslib library.

You can use the user application to perform MST discovery topology by invoking a single API function (btc_dptxll_mst_get_device_port()). In turn, the btc_dptxll_syslib library implements this functionality by invoking a number of btc_dptx_syslib MST messaging functions such as btc_dptx_mst_link_address_req(), btc_dptx_mst_enum_path_req(), and btc_dptx_mst_remote_i2c_rd_req().

A typical MST source user application must perform the following steps to display an image on a connected DisplayPort sink device:
  1. Wait for HPD signal to become 1.
  2. Read the connected sink DPCD version and MST capabilities.
    • If the sink is not MST capable, only a single-stream (SST) connection is possible. In this case, no further action is required as SST connections are mostly handled automatically.
    • If the sink supports MST, skip this step.
  3. Perform MST topology discovery by collecting all device ports reachable through the connected sink. Invoke btc_dptxll_mst_get_device_ports() until either its outcome is valid or an error is returned. For a successful return value, move to the following step.
  4. Browse through the list of the device ports and search for a suitable device output port. This step highly depends on the definition of suitable device port. Some applications may require reading of the device port EDID to check the desired resolution supported by the port (use btc_dptxll_mst_edid_read_req() and btc_dptxll_mst_edid_read_rep() API functions). If a suitable device output port is found, move to the next step.
  5. Verify if the main link connection between the DisplayPort source and connected sink is still up.
    • If the link is down, perform a new Link Training.
    • If the link is up, move to the next step.
    Note: While you can perform the earlier steps even when the main link connection is down, the following steps require the connection to be up. The source needs the connection to calculate the available data bandwidth and make allocation.
  6. Set the video pixel rate of the desired stream by invoking btc_dptxll_stream_set_pixel_rate().
  7. Calculate the required VCP size for the stream by invoking btc_dptxll_stream_calc_VCP_size().
  8. Verify if the required VCP size (number of time slots needed to transport the stream) is available to transport to the desired device output port. Then, move to the next step.
  9. Allocate the stream data to be transported to the desired device output port by invoking btc_dptxll_stream_allocate_req()
  10. Wait for the source to make allocation. Invoke btc_dptxll_stream_allocate_rep() until either the allocation is complete or an error is returned. For a successful allocation, move to the following step.
  11. The allocation of the stream to the device output port completes. MST data transport is now active.
  12. Handle received CONNECTION_STATUS_NOTIFY messages according to the changed topology.