Skip to content

Commit d055714

Browse files
Lijo Lazaralexdeucher
authored andcommitted
drm/amdgpu: Use pcie domain of xcc acpi objects
PCI domain/segment information of xccs is available through ACPI DSM methods. Consider that also while looking for devices. Signed-off-by: Lijo Lazar <[email protected]> Reviewed-by: Rajneesh Bhardwaj <[email protected]> Acked-by: Alex Deucher <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 406e884 commit d055714

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ struct amdgpu_acpi_xcc_info {
6868
struct amdgpu_acpi_dev_info {
6969
struct list_head list;
7070
struct list_head xcc_list;
71-
uint16_t bdf;
71+
uint32_t sbdf;
7272
uint16_t supp_xcp_mode;
7373
uint16_t xcp_mode;
7474
uint16_t mem_mode;
@@ -927,22 +927,22 @@ static acpi_status amdgpu_acpi_get_node_id(acpi_handle handle,
927927
#endif
928928
}
929929

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)
931931
{
932932
struct amdgpu_acpi_dev_info *acpi_dev;
933933

934934
if (list_empty(&amdgpu_acpi_dev_list))
935935
return NULL;
936936

937937
list_for_each_entry(acpi_dev, &amdgpu_acpi_dev_list, list)
938-
if (acpi_dev->bdf == bdf)
938+
if (acpi_dev->sbdf == sbdf)
939939
return acpi_dev;
940940

941941
return NULL;
942942
}
943943

944944
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)
946946
{
947947
struct amdgpu_acpi_dev_info *tmp;
948948
union acpi_object *obj;
@@ -955,7 +955,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
955955

956956
INIT_LIST_HEAD(&tmp->xcc_list);
957957
INIT_LIST_HEAD(&tmp->list);
958-
tmp->bdf = bdf;
958+
tmp->sbdf = sbdf;
959959

960960
obj = acpi_evaluate_dsm_typed(xcc_info->handle, &amd_xcc_dsm_guid, 0,
961961
AMD_XCC_DSM_GET_SUPP_MODE, NULL,
@@ -1007,7 +1007,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
10071007

10081008
DRM_DEBUG_DRIVER(
10091009
"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,
10111011
tmp->tmr_base, tmp->tmr_size);
10121012
list_add_tail(&tmp->list, &amdgpu_acpi_dev_list);
10131013
*dev_info = tmp;
@@ -1023,7 +1023,7 @@ static int amdgpu_acpi_dev_init(struct amdgpu_acpi_dev_info **dev_info,
10231023
}
10241024

10251025
static int amdgpu_acpi_get_xcc_info(struct amdgpu_acpi_xcc_info *xcc_info,
1026-
u16 *bdf)
1026+
u32 *sbdf)
10271027
{
10281028
union acpi_object *obj;
10291029
acpi_status status;
@@ -1054,8 +1054,10 @@ static int amdgpu_acpi_get_xcc_info(struct amdgpu_acpi_xcc_info *xcc_info,
10541054
xcc_info->phy_id = (obj->integer.value >> 32) & 0xFF;
10551055
/* xcp node of this xcc [47:40] */
10561056
xcc_info->xcp_node = (obj->integer.value >> 40) & 0xFF;
1057+
/* PF domain of this xcc [31:16] */
1058+
*sbdf = (obj->integer.value) & 0xFFFF0000;
10571059
/* PF bus/dev/fn of this xcc [63:48] */
1058-
*bdf = (obj->integer.value >> 48) & 0xFFFF;
1060+
*sbdf |= (obj->integer.value >> 48) & 0xFFFF;
10591061
ACPI_FREE(obj);
10601062
obj = NULL;
10611063

@@ -1079,7 +1081,7 @@ static int amdgpu_acpi_enumerate_xcc(void)
10791081
struct acpi_device *acpi_dev;
10801082
char hid[ACPI_ID_LEN];
10811083
int ret, id;
1082-
u16 bdf;
1084+
u32 sbdf;
10831085

10841086
INIT_LIST_HEAD(&amdgpu_acpi_dev_list);
10851087
xa_init(&numa_info_xa);
@@ -1107,16 +1109,16 @@ static int amdgpu_acpi_enumerate_xcc(void)
11071109
xcc_info->handle = acpi_device_handle(acpi_dev);
11081110
acpi_dev_put(acpi_dev);
11091111

1110-
ret = amdgpu_acpi_get_xcc_info(xcc_info, &bdf);
1112+
ret = amdgpu_acpi_get_xcc_info(xcc_info, &sbdf);
11111113
if (ret) {
11121114
kfree(xcc_info);
11131115
continue;
11141116
}
11151117

1116-
dev_info = amdgpu_acpi_get_dev(bdf);
1118+
dev_info = amdgpu_acpi_get_dev(sbdf);
11171119

11181120
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);
11201122

11211123
if (ret == -ENOMEM)
11221124
return ret;
@@ -1136,13 +1138,14 @@ int amdgpu_acpi_get_tmr_info(struct amdgpu_device *adev, u64 *tmr_offset,
11361138
u64 *tmr_size)
11371139
{
11381140
struct amdgpu_acpi_dev_info *dev_info;
1139-
u16 bdf;
1141+
u32 sbdf;
11401142

11411143
if (!tmr_offset || !tmr_size)
11421144
return -EINVAL;
11431145

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);
11461149
if (!dev_info)
11471150
return -ENOENT;
11481151

@@ -1157,13 +1160,14 @@ int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev, int xcc_id,
11571160
{
11581161
struct amdgpu_acpi_dev_info *dev_info;
11591162
struct amdgpu_acpi_xcc_info *xcc_info;
1160-
u16 bdf;
1163+
u32 sbdf;
11611164

11621165
if (!numa_info)
11631166
return -EINVAL;
11641167

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);
11671171
if (!dev_info)
11681172
return -ENOENT;
11691173

0 commit comments

Comments
 (0)