Skip to content

Commit 4fcb7f8

Browse files
committed
Merge branch 'drm-fixes-4.19' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
A few fixes for 4.19: - Add a new polaris pci id - KFD fixes for raven and gfx7 Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180920155850.5455-1-alexander.deucher@amd.com
2 parents 618cc15 + 44d8cc6 commit 4fcb7f8

File tree

11 files changed

+49
-18
lines changed

11 files changed

+49
-18
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ void amdgpu_amdkfd_gpu_reset(struct kgd_dev *kgd)
272272

273273
int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
274274
void **mem_obj, uint64_t *gpu_addr,
275-
void **cpu_ptr)
275+
void **cpu_ptr, bool mqd_gfx9)
276276
{
277277
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
278278
struct amdgpu_bo *bo = NULL;
@@ -287,6 +287,10 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
287287
bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC;
288288
bp.type = ttm_bo_type_kernel;
289289
bp.resv = NULL;
290+
291+
if (mqd_gfx9)
292+
bp.flags |= AMDGPU_GEM_CREATE_MQD_GFX9;
293+
290294
r = amdgpu_bo_create(adev, &bp, &bo);
291295
if (r) {
292296
dev_err(adev->dev,

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ void amdgpu_amdkfd_gpu_reset(struct kgd_dev *kgd);
136136
/* Shared API */
137137
int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
138138
void **mem_obj, uint64_t *gpu_addr,
139-
void **cpu_ptr);
139+
void **cpu_ptr, bool mqd_gfx9);
140140
void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
141141
void get_local_mem_info(struct kgd_dev *kgd,
142142
struct kfd_local_mem_info *mem_info);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,
685685

686686
while (true) {
687687
temp = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS);
688-
if (temp & SDMA0_STATUS_REG__RB_CMD_IDLE__SHIFT)
688+
if (temp & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK)
689689
break;
690690
if (time_after(jiffies, end_jiffies))
691691
return -ETIME;

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,14 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
367367
break;
368368
case CHIP_POLARIS10:
369369
if (type == CGS_UCODE_ID_SMU) {
370-
if ((adev->pdev->device == 0x67df) &&
371-
((adev->pdev->revision == 0xe0) ||
372-
(adev->pdev->revision == 0xe3) ||
373-
(adev->pdev->revision == 0xe4) ||
374-
(adev->pdev->revision == 0xe5) ||
375-
(adev->pdev->revision == 0xe7) ||
370+
if (((adev->pdev->device == 0x67df) &&
371+
((adev->pdev->revision == 0xe0) ||
372+
(adev->pdev->revision == 0xe3) ||
373+
(adev->pdev->revision == 0xe4) ||
374+
(adev->pdev->revision == 0xe5) ||
375+
(adev->pdev->revision == 0xe7) ||
376+
(adev->pdev->revision == 0xef))) ||
377+
((adev->pdev->device == 0x6fdf) &&
376378
(adev->pdev->revision == 0xef))) {
377379
info->is_kicker = true;
378380
strcpy(fw_name, "amdgpu/polaris10_k_smc.bin");

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ static const struct pci_device_id pciidlist[] = {
740740
{0x1002, 0x67CA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS10},
741741
{0x1002, 0x67CC, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS10},
742742
{0x1002, 0x67CF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS10},
743+
{0x1002, 0x6FDF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS10},
743744
/* Polaris12 */
744745
{0x1002, 0x6980, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},
745746
{0x1002, 0x6981, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_POLARIS12},

drivers/gpu/drm/amd/amdkfd/kfd_device.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,8 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
457457

458458
if (kfd->kfd2kgd->init_gtt_mem_allocation(
459459
kfd->kgd, size, &kfd->gtt_mem,
460-
&kfd->gtt_start_gpu_addr, &kfd->gtt_start_cpu_ptr)){
460+
&kfd->gtt_start_gpu_addr, &kfd->gtt_start_cpu_ptr,
461+
false)) {
461462
dev_err(kfd_device, "Could not allocate %d bytes\n", size);
462463
goto out;
463464
}

drivers/gpu/drm/amd/amdkfd/kfd_iommu.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,20 @@ int kfd_iommu_device_init(struct kfd_dev *kfd)
6262
struct amd_iommu_device_info iommu_info;
6363
unsigned int pasid_limit;
6464
int err;
65+
struct kfd_topology_device *top_dev;
6566

66-
if (!kfd->device_info->needs_iommu_device)
67+
top_dev = kfd_topology_device_by_id(kfd->id);
68+
69+
/*
70+
* Overwrite ATS capability according to needs_iommu_device to fix
71+
* potential missing corresponding bit in CRAT of BIOS.
72+
*/
73+
if (!kfd->device_info->needs_iommu_device) {
74+
top_dev->node_props.capability &= ~HSA_CAP_ATS_PRESENT;
6775
return 0;
76+
}
77+
78+
top_dev->node_props.capability |= HSA_CAP_ATS_PRESENT;
6879

6980
iommu_info.flags = 0;
7081
err = amd_iommu_device_info(kfd->pdev, &iommu_info);

drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static int init_mqd(struct mqd_manager *mm, void **mqd,
8888
ALIGN(sizeof(struct v9_mqd), PAGE_SIZE),
8989
&((*mqd_mem_obj)->gtt_mem),
9090
&((*mqd_mem_obj)->gpu_addr),
91-
(void *)&((*mqd_mem_obj)->cpu_ptr));
91+
(void *)&((*mqd_mem_obj)->cpu_ptr), true);
9292
} else
9393
retval = kfd_gtt_sa_allocate(mm->dev, sizeof(struct v9_mqd),
9494
mqd_mem_obj);

drivers/gpu/drm/amd/amdkfd/kfd_priv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,7 @@ int kfd_topology_add_device(struct kfd_dev *gpu);
806806
int kfd_topology_remove_device(struct kfd_dev *gpu);
807807
struct kfd_topology_device *kfd_topology_device_by_proximity_domain(
808808
uint32_t proximity_domain);
809+
struct kfd_topology_device *kfd_topology_device_by_id(uint32_t gpu_id);
809810
struct kfd_dev *kfd_device_by_id(uint32_t gpu_id);
810811
struct kfd_dev *kfd_device_by_pci_dev(const struct pci_dev *pdev);
811812
int kfd_topology_enum_kfd_devices(uint8_t idx, struct kfd_dev **kdev);

drivers/gpu/drm/amd/amdkfd/kfd_topology.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,33 @@ struct kfd_topology_device *kfd_topology_device_by_proximity_domain(
6363
return device;
6464
}
6565

66-
struct kfd_dev *kfd_device_by_id(uint32_t gpu_id)
66+
struct kfd_topology_device *kfd_topology_device_by_id(uint32_t gpu_id)
6767
{
68-
struct kfd_topology_device *top_dev;
69-
struct kfd_dev *device = NULL;
68+
struct kfd_topology_device *top_dev = NULL;
69+
struct kfd_topology_device *ret = NULL;
7070

7171
down_read(&topology_lock);
7272

7373
list_for_each_entry(top_dev, &topology_device_list, list)
7474
if (top_dev->gpu_id == gpu_id) {
75-
device = top_dev->gpu;
75+
ret = top_dev;
7676
break;
7777
}
7878

7979
up_read(&topology_lock);
8080

81-
return device;
81+
return ret;
82+
}
83+
84+
struct kfd_dev *kfd_device_by_id(uint32_t gpu_id)
85+
{
86+
struct kfd_topology_device *top_dev;
87+
88+
top_dev = kfd_topology_device_by_id(gpu_id);
89+
if (!top_dev)
90+
return NULL;
91+
92+
return top_dev->gpu;
8293
}
8394

8495
struct kfd_dev *kfd_device_by_pci_dev(const struct pci_dev *pdev)

drivers/gpu/drm/amd/include/kgd_kfd_interface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ struct tile_config {
292292
struct kfd2kgd_calls {
293293
int (*init_gtt_mem_allocation)(struct kgd_dev *kgd, size_t size,
294294
void **mem_obj, uint64_t *gpu_addr,
295-
void **cpu_ptr);
295+
void **cpu_ptr, bool mqd_gfx9);
296296

297297
void (*free_gtt_mem)(struct kgd_dev *kgd, void *mem_obj);
298298

0 commit comments

Comments
 (0)