drm/amd/display: Read USB4 DP tunneling data from DPCD.
[Why] We requires information from DPCD in order to identify USB4 DP tunneling targets. [How] Add USB4 DP tunneling fields to DPCD struct and populate these fields during sink detection. Reviewed-by: Jun Lei <Jun.Lei@amd.com> Acked-by: Wayne Lin <Wayne.Lin@amd.com> Acked-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Acked-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Jimmy Kizito <Jimmy.Kizito@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
71af9d465b
commit
e8536806b0
|
@ -34,14 +34,40 @@
|
|||
#include "inc/link_dpcd.h"
|
||||
#include "dm_helpers.h"
|
||||
#include "dmub/inc/dmub_cmd.h"
|
||||
#include "inc/link_dpcd.h"
|
||||
|
||||
#define DC_LOGGER \
|
||||
link->ctx->logger
|
||||
|
||||
enum dc_status dpcd_get_tunneling_device_data(struct dc_link *link)
|
||||
{
|
||||
/** @todo Read corresponding DPCD region and update link caps. */
|
||||
return DC_OK;
|
||||
enum dc_status status = DC_OK;
|
||||
uint8_t dpcd_dp_tun_data[3] = {0};
|
||||
uint8_t dpcd_topology_data[DPCD_USB4_TOPOLOGY_ID_LEN] = {0};
|
||||
uint8_t i = 0;
|
||||
|
||||
status = core_link_read_dpcd(link,
|
||||
DP_TUNNELING_CAPABILITIES_SUPPORT,
|
||||
dpcd_dp_tun_data,
|
||||
sizeof(dpcd_dp_tun_data));
|
||||
|
||||
status = core_link_read_dpcd(link,
|
||||
DP_USB4_ROUTER_TOPOLOGY_ID,
|
||||
dpcd_topology_data,
|
||||
sizeof(dpcd_topology_data));
|
||||
|
||||
link->dpcd_caps.usb4_dp_tun_info.dp_tun_cap.raw =
|
||||
dpcd_dp_tun_data[DP_TUNNELING_CAPABILITIES_SUPPORT -
|
||||
DP_TUNNELING_CAPABILITIES_SUPPORT];
|
||||
link->dpcd_caps.usb4_dp_tun_info.dpia_info.raw =
|
||||
dpcd_dp_tun_data[DP_IN_ADAPTER_INFO - DP_TUNNELING_CAPABILITIES_SUPPORT];
|
||||
link->dpcd_caps.usb4_dp_tun_info.usb4_driver_id =
|
||||
dpcd_dp_tun_data[DP_USB4_DRIVER_ID - DP_TUNNELING_CAPABILITIES_SUPPORT];
|
||||
|
||||
for (i = 0; i < DPCD_USB4_TOPOLOGY_ID_LEN; i++)
|
||||
link->dpcd_caps.usb4_dp_tun_info.usb4_topology_id[i] = dpcd_topology_data[i];
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Configure link as prescribed in link_setting; set LTTPR mode; and
|
||||
|
|
|
@ -1186,6 +1186,7 @@ struct dpcd_caps {
|
|||
struct dpcd_dsc_capabilities dsc_caps;
|
||||
struct dc_lttpr_caps lttpr_caps;
|
||||
struct psr_caps psr_caps;
|
||||
struct dpcd_usb4_dp_tunneling_info usb4_dp_tun_info;
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
||||
union dp_128b_132b_supported_link_rates dp_128b_132b_supported_link_rates;
|
||||
|
|
|
@ -859,6 +859,37 @@ struct psr_caps {
|
|||
bool psr_exit_link_training_required;
|
||||
};
|
||||
|
||||
/* Length of router topology ID read from DPCD in bytes. */
|
||||
#define DPCD_USB4_TOPOLOGY_ID_LEN 5
|
||||
|
||||
/* DPCD[0xE000D] DP_TUNNELING_CAPABILITIES SUPPORT register. */
|
||||
union dp_tun_cap_support {
|
||||
struct {
|
||||
uint8_t dp_tunneling :1;
|
||||
uint8_t rsvd :5;
|
||||
uint8_t panel_replay_tun_opt :1;
|
||||
uint8_t dpia_bw_alloc :1;
|
||||
} bits;
|
||||
uint8_t raw;
|
||||
};
|
||||
|
||||
/* DPCD[0xE000E] DP_IN_ADAPTER_INFO register. */
|
||||
union dpia_info {
|
||||
struct {
|
||||
uint8_t dpia_num :5;
|
||||
uint8_t rsvd :3;
|
||||
} bits;
|
||||
uint8_t raw;
|
||||
};
|
||||
|
||||
/* DP Tunneling over USB4 */
|
||||
struct dpcd_usb4_dp_tunneling_info {
|
||||
union dp_tun_cap_support dp_tun_cap;
|
||||
union dpia_info dpia_info;
|
||||
uint8_t usb4_driver_id;
|
||||
uint8_t usb4_topology_id[DPCD_USB4_TOPOLOGY_ID_LEN];
|
||||
};
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN)
|
||||
#ifndef DP_MAIN_LINK_CHANNEL_CODING_CAP
|
||||
#define DP_MAIN_LINK_CHANNEL_CODING_CAP 0x006
|
||||
|
|
|
@ -35,6 +35,13 @@ struct dc_link_settings;
|
|||
/* The approximate time (us) it takes to transmit 9 USB4 DP clock sync packets. */
|
||||
#define DPIA_CLK_SYNC_DELAY 16000
|
||||
|
||||
/** @note Can remove once DP tunneling registers in upstream include/drm/drm_dp_helper.h */
|
||||
/* DPCD DP Tunneling over USB4 */
|
||||
#define DP_TUNNELING_CAPABILITIES_SUPPORT 0xe000d
|
||||
#define DP_IN_ADAPTER_INFO 0xe000e
|
||||
#define DP_USB4_DRIVER_ID 0xe000f
|
||||
#define DP_USB4_ROUTER_TOPOLOGY_ID 0xe001b
|
||||
|
||||
/* SET_CONFIG message types sent by driver. */
|
||||
enum dpia_set_config_type {
|
||||
DPIA_SET_CFG_SET_LINK = 0x01,
|
||||
|
|
Loading…
Reference in New Issue