@@ -68,7 +68,7 @@ struct amdgpu_acpi_xcc_info {
68
68
struct amdgpu_acpi_dev_info {
69
69
struct list_head list ;
70
70
struct list_head xcc_list ;
71
- uint16_t bdf ;
71
+ uint32_t sbdf ;
72
72
uint16_t supp_xcp_mode ;
73
73
uint16_t xcp_mode ;
74
74
uint16_t mem_mode ;
@@ -927,22 +927,22 @@ static acpi_status amdgpu_acpi_get_node_id(acpi_handle handle,
927
927
#endif
928
928
}
929
929
930
- static struct amdgpu_acpi_dev_info * amdgpu_acpi_get_dev (u16 bdf )
930
+ static struct amdgpu_acpi_dev_info * amdgpu_acpi_get_dev (u32 sbdf )
931
931
{
932
932
struct amdgpu_acpi_dev_info * acpi_dev ;
933
933
934
934
if (list_empty (& amdgpu_acpi_dev_list ))
935
935
return NULL ;
936
936
937
937
list_for_each_entry (acpi_dev , & amdgpu_acpi_dev_list , list )
938
- if (acpi_dev -> bdf == bdf )
938
+ if (acpi_dev -> sbdf == sbdf )
939
939
return acpi_dev ;
940
940
941
941
return NULL ;
942
942
}
943
943
944
944
static int amdgpu_acpi_dev_init (struct amdgpu_acpi_dev_info * * dev_info ,
945
- struct amdgpu_acpi_xcc_info * xcc_info , u16 bdf )
945
+ struct amdgpu_acpi_xcc_info * xcc_info , u32 sbdf )
946
946
{
947
947
struct amdgpu_acpi_dev_info * tmp ;
948
948
union acpi_object * obj ;
@@ -955,7 +955,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
955
955
956
956
INIT_LIST_HEAD (& tmp -> xcc_list );
957
957
INIT_LIST_HEAD (& tmp -> list );
958
- tmp -> bdf = bdf ;
958
+ tmp -> sbdf = sbdf ;
959
959
960
960
obj = acpi_evaluate_dsm_typed (xcc_info -> handle , & amd_xcc_dsm_guid , 0 ,
961
961
AMD_XCC_DSM_GET_SUPP_MODE , NULL ,
@@ -1007,7 +1007,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
1007
1007
1008
1008
DRM_DEBUG_DRIVER (
1009
1009
"New dev(%x): Supported xcp mode: %x curr xcp_mode : %x mem mode : %x, tmr base: %llx tmr size: %llx " ,
1010
- tmp -> bdf , tmp -> supp_xcp_mode , tmp -> xcp_mode , tmp -> mem_mode ,
1010
+ tmp -> sbdf , tmp -> supp_xcp_mode , tmp -> xcp_mode , tmp -> mem_mode ,
1011
1011
tmp -> tmr_base , tmp -> tmr_size );
1012
1012
list_add_tail (& tmp -> list , & amdgpu_acpi_dev_list );
1013
1013
* dev_info = tmp ;
@@ -1023,7 +1023,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
1023
1023
}
1024
1024
1025
1025
static int amdgpu_acpi_get_xcc_info (struct amdgpu_acpi_xcc_info * xcc_info ,
1026
- u16 * bdf )
1026
+ u32 * sbdf )
1027
1027
{
1028
1028
union acpi_object * obj ;
1029
1029
acpi_status status ;
@@ -1054,8 +1054,10 @@ static int amdgpu_acpi_get_xcc_info(struct amdgpu_acpi_xcc_info *xcc_info,
1054
1054
xcc_info -> phy_id = (obj -> integer .value >> 32 ) & 0xFF ;
1055
1055
/* xcp node of this xcc [47:40] */
1056
1056
xcc_info -> xcp_node = (obj -> integer .value >> 40 ) & 0xFF ;
1057
+ /* PF domain of this xcc [31:16] */
1058
+ * sbdf = (obj -> integer .value ) & 0xFFFF0000 ;
1057
1059
/* PF bus/dev/fn of this xcc [63:48] */
1058
- * bdf = (obj -> integer .value >> 48 ) & 0xFFFF ;
1060
+ * sbdf | = (obj -> integer .value >> 48 ) & 0xFFFF ;
1059
1061
ACPI_FREE (obj );
1060
1062
obj = NULL ;
1061
1063
@@ -1079,7 +1081,7 @@ static int amdgpu_acpi_enumerate_xcc(void)
1079
1081
struct acpi_device * acpi_dev ;
1080
1082
char hid [ACPI_ID_LEN ];
1081
1083
int ret , id ;
1082
- u16 bdf ;
1084
+ u32 sbdf ;
1083
1085
1084
1086
INIT_LIST_HEAD (& amdgpu_acpi_dev_list );
1085
1087
xa_init (& numa_info_xa );
@@ -1107,16 +1109,16 @@ static int amdgpu_acpi_enumerate_xcc(void)
1107
1109
xcc_info -> handle = acpi_device_handle (acpi_dev );
1108
1110
acpi_dev_put (acpi_dev );
1109
1111
1110
- ret = amdgpu_acpi_get_xcc_info (xcc_info , & bdf );
1112
+ ret = amdgpu_acpi_get_xcc_info (xcc_info , & sbdf );
1111
1113
if (ret ) {
1112
1114
kfree (xcc_info );
1113
1115
continue ;
1114
1116
}
1115
1117
1116
- dev_info = amdgpu_acpi_get_dev (bdf );
1118
+ dev_info = amdgpu_acpi_get_dev (sbdf );
1117
1119
1118
1120
if (!dev_info )
1119
- ret = amdgpu_acpi_dev_init (& dev_info , xcc_info , bdf );
1121
+ ret = amdgpu_acpi_dev_init (& dev_info , xcc_info , sbdf );
1120
1122
1121
1123
if (ret == - ENOMEM )
1122
1124
return ret ;
@@ -1136,13 +1138,14 @@ int amdgpu_acpi_get_tmr_info(struct amdgpu_device *adev, u64 *tmr_offset,
1136
1138
u64 * tmr_size )
1137
1139
{
1138
1140
struct amdgpu_acpi_dev_info * dev_info ;
1139
- u16 bdf ;
1141
+ u32 sbdf ;
1140
1142
1141
1143
if (!tmr_offset || !tmr_size )
1142
1144
return - EINVAL ;
1143
1145
1144
- bdf = pci_dev_id (adev -> pdev );
1145
- dev_info = amdgpu_acpi_get_dev (bdf );
1146
+ sbdf = (pci_domain_nr (adev -> pdev -> bus ) << 16 );
1147
+ sbdf |= pci_dev_id (adev -> pdev );
1148
+ dev_info = amdgpu_acpi_get_dev (sbdf );
1146
1149
if (!dev_info )
1147
1150
return - ENOENT ;
1148
1151
@@ -1157,13 +1160,14 @@ int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev, int xcc_id,
1157
1160
{
1158
1161
struct amdgpu_acpi_dev_info * dev_info ;
1159
1162
struct amdgpu_acpi_xcc_info * xcc_info ;
1160
- u16 bdf ;
1163
+ u32 sbdf ;
1161
1164
1162
1165
if (!numa_info )
1163
1166
return - EINVAL ;
1164
1167
1165
- bdf = pci_dev_id (adev -> pdev );
1166
- dev_info = amdgpu_acpi_get_dev (bdf );
1168
+ sbdf = (pci_domain_nr (adev -> pdev -> bus ) << 16 );
1169
+ sbdf |= pci_dev_id (adev -> pdev );
1170
+ dev_info = amdgpu_acpi_get_dev (sbdf );
1167
1171
if (!dev_info )
1168
1172
return - ENOENT ;
1169
1173
0 commit comments