drm/amdgpu: add psp command to get num xgmi links between direct peers
The TA can now be invoked to provide the number of xgmi links connecting a direct source and destination peer. Non-direct peers will report zero links. Signed-off-by: Jonathan Kim <jonathan.kim@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
d8c33180c0
commit
331e78187f
@ -1078,6 +1078,12 @@ int psp_xgmi_get_node_id(struct psp_context *psp, uint64_t *node_id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool psp_xgmi_peer_link_info_supported(struct psp_context *psp)
|
||||
{
|
||||
return psp->adev->asic_type == CHIP_ALDEBARAN &&
|
||||
psp->ta_xgmi_ucode_version >= 0x2000000b;
|
||||
}
|
||||
|
||||
int psp_xgmi_get_topology_info(struct psp_context *psp,
|
||||
int number_devices,
|
||||
struct psp_xgmi_topology_info *topology)
|
||||
@ -1121,6 +1127,23 @@ int psp_xgmi_get_topology_info(struct psp_context *psp,
|
||||
topology->nodes[i].sdma_engine = topology_info_output->nodes[i].sdma_engine;
|
||||
}
|
||||
|
||||
/* Invoke xgmi ta again to get the link information */
|
||||
if (psp_xgmi_peer_link_info_supported(psp)) {
|
||||
struct ta_xgmi_cmd_get_peer_link_info_output *link_info_output;
|
||||
|
||||
xgmi_cmd->cmd_id = TA_COMMAND_XGMI__GET_PEER_LINKS;
|
||||
|
||||
ret = psp_xgmi_invoke(psp, TA_COMMAND_XGMI__GET_PEER_LINKS);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
link_info_output = &xgmi_cmd->xgmi_out_message.get_link_info;
|
||||
for (i = 0; i < topology->num_nodes; i++)
|
||||
topology->nodes[i].num_links =
|
||||
link_info_output->nodes[i].num_links;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -116,6 +116,7 @@ struct psp_xgmi_node_info {
|
||||
uint8_t num_hops;
|
||||
uint8_t is_sharing_enabled;
|
||||
enum ta_xgmi_assigned_sdma_engine sdma_engine;
|
||||
uint8_t num_links;
|
||||
};
|
||||
|
||||
struct psp_xgmi_topology_info {
|
||||
|
@ -33,7 +33,8 @@ enum ta_command_xgmi {
|
||||
TA_COMMAND_XGMI__GET_NODE_ID = 0x01,
|
||||
TA_COMMAND_XGMI__GET_HIVE_ID = 0x02,
|
||||
TA_COMMAND_XGMI__GET_GET_TOPOLOGY_INFO = 0x03,
|
||||
TA_COMMAND_XGMI__SET_TOPOLOGY_INFO = 0x04
|
||||
TA_COMMAND_XGMI__SET_TOPOLOGY_INFO = 0x04,
|
||||
TA_COMMAND_XGMI__GET_PEER_LINKS = 0x0B
|
||||
};
|
||||
|
||||
/* XGMI related enumerations */
|
||||
@ -75,6 +76,11 @@ struct ta_xgmi_node_info {
|
||||
enum ta_xgmi_assigned_sdma_engine sdma_engine;
|
||||
};
|
||||
|
||||
struct ta_xgmi_peer_link_info {
|
||||
uint64_t node_id;
|
||||
uint8_t num_links;
|
||||
};
|
||||
|
||||
struct ta_xgmi_cmd_initialize_output {
|
||||
uint32_t status;
|
||||
};
|
||||
@ -97,6 +103,11 @@ struct ta_xgmi_cmd_get_topology_info_output {
|
||||
struct ta_xgmi_node_info nodes[TA_XGMI__MAX_CONNECTED_NODES];
|
||||
};
|
||||
|
||||
struct ta_xgmi_cmd_get_peer_link_info_output {
|
||||
uint32_t num_nodes;
|
||||
struct ta_xgmi_peer_link_info nodes[TA_XGMI__MAX_CONNECTED_NODES];
|
||||
};
|
||||
|
||||
struct ta_xgmi_cmd_set_topology_info_input {
|
||||
uint32_t num_nodes;
|
||||
struct ta_xgmi_node_info nodes[TA_XGMI__MAX_CONNECTED_NODES];
|
||||
@ -115,6 +126,7 @@ union ta_xgmi_cmd_output {
|
||||
struct ta_xgmi_cmd_get_node_id_output get_node_id;
|
||||
struct ta_xgmi_cmd_get_hive_id_output get_hive_id;
|
||||
struct ta_xgmi_cmd_get_topology_info_output get_topology_info;
|
||||
struct ta_xgmi_cmd_get_peer_link_info_output get_link_info;
|
||||
};
|
||||
/**********************************************************/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user