Skip to content

Commit a2ae604

Browse files
committed
Merge tag 'amd-drm-next-5.7-2020-02-26' of git://people.freedesktop.org/~agd5f/linux into drm-next
amd-drm-next-5.7-2020-02-26: amdgpu: - Rework VM update handling in preparation for HMM support - HDCP srm support - PSR fixes - DC watermark fixes - OLED panel support - SR-IOV fixes - BACO fixes - Optimize debugging vram access - RAS fixes - Use BACO for runtime pm - HDCP fixes - XGMI fixes - DDC fixes - DC clock programming optimizations and fixes - PSP fw loading sequence updates - Drop DRIVER_USE_AGP - Remove legacy drm load and unload callbacks amdkfd: - Add runtime pm support radeon: - Drop DRIVER_USE_AGP Signed-off-by: Dave Airlie <[email protected]> From: Alex Deucher <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 4825b61 + c6385e5 commit a2ae604

File tree

166 files changed

+5161
-2414
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

166 files changed

+5161
-2414
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,7 @@ struct amdgpu_device {
969969
int pstate;
970970
/* enable runtime pm on the device */
971971
bool runpm;
972+
bool in_runpm;
972973

973974
bool pm_sysfs_en;
974975
bool ucode_sysfs_en;

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

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
126126
/* this is going to have a few of the MSBs set that we need to
127127
* clear
128128
*/
129-
bitmap_complement(gpu_resources.queue_bitmap,
129+
bitmap_complement(gpu_resources.cp_queue_bitmap,
130130
adev->gfx.mec.queue_bitmap,
131131
KGD_MAX_QUEUES);
132132

@@ -137,7 +137,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
137137
* adev->gfx.mec.num_pipe_per_mec
138138
* adev->gfx.mec.num_queue_per_pipe;
139139
for (i = last_valid_bit; i < KGD_MAX_QUEUES; ++i)
140-
clear_bit(i, gpu_resources.queue_bitmap);
140+
clear_bit(i, gpu_resources.cp_queue_bitmap);
141141

142142
amdgpu_doorbell_get_kfd_info(adev,
143143
&gpu_resources.doorbell_physical_address,
@@ -178,18 +178,18 @@ void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
178178
kgd2kfd_interrupt(adev->kfd.dev, ih_ring_entry);
179179
}
180180

181-
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev)
181+
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev, bool run_pm)
182182
{
183183
if (adev->kfd.dev)
184-
kgd2kfd_suspend(adev->kfd.dev);
184+
kgd2kfd_suspend(adev->kfd.dev, run_pm);
185185
}
186186

187-
int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
187+
int amdgpu_amdkfd_resume(struct amdgpu_device *adev, bool run_pm)
188188
{
189189
int r = 0;
190190

191191
if (adev->kfd.dev)
192-
r = kgd2kfd_resume(adev->kfd.dev);
192+
r = kgd2kfd_resume(adev->kfd.dev, run_pm);
193193

194194
return r;
195195
}
@@ -402,7 +402,7 @@ void amdgpu_amdkfd_get_local_mem_info(struct kgd_dev *kgd,
402402

403403
if (amdgpu_sriov_vf(adev))
404404
mem_info->mem_clk_max = adev->clock.default_mclk / 100;
405-
else if (adev->powerplay.pp_funcs) {
405+
else if (adev->pm.dpm_enabled) {
406406
if (amdgpu_emu_mode == 1)
407407
mem_info->mem_clk_max = 0;
408408
else
@@ -427,7 +427,7 @@ uint32_t amdgpu_amdkfd_get_max_engine_clock_in_mhz(struct kgd_dev *kgd)
427427
/* the sclk is in quantas of 10kHz */
428428
if (amdgpu_sriov_vf(adev))
429429
return adev->clock.default_sclk / 100;
430-
else if (adev->powerplay.pp_funcs)
430+
else if (adev->pm.dpm_enabled)
431431
return amdgpu_dpm_get_sclk(adev, false) / 100;
432432
else
433433
return 100;
@@ -525,6 +525,14 @@ uint64_t amdgpu_amdkfd_get_hive_id(struct kgd_dev *kgd)
525525

526526
return adev->gmc.xgmi.hive_id;
527527
}
528+
529+
uint64_t amdgpu_amdkfd_get_unique_id(struct kgd_dev *kgd)
530+
{
531+
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
532+
533+
return adev->unique_id;
534+
}
535+
528536
uint8_t amdgpu_amdkfd_get_xgmi_hops_count(struct kgd_dev *dst, struct kgd_dev *src)
529537
{
530538
struct amdgpu_device *peer_adev = (struct amdgpu_device *)src;
@@ -647,13 +655,9 @@ int amdgpu_amdkfd_flush_gpu_tlb_vmid(struct kgd_dev *kgd, uint16_t vmid)
647655
int amdgpu_amdkfd_flush_gpu_tlb_pasid(struct kgd_dev *kgd, uint16_t pasid)
648656
{
649657
struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
650-
uint32_t flush_type = 0;
658+
const uint32_t flush_type = 0;
651659
bool all_hub = false;
652660

653-
if (adev->gmc.xgmi.num_physical_nodes &&
654-
adev->asic_type == CHIP_VEGA20)
655-
flush_type = 2;
656-
657661
if (adev->family == AMDGPU_FAMILY_AI)
658662
all_hub = true;
659663

@@ -677,6 +681,11 @@ void amdgpu_amdkfd_unreserve_memory_limit(struct amdgpu_bo *bo)
677681
{
678682
}
679683

684+
int amdgpu_amdkfd_remove_fence_on_pt_pd_bos(struct amdgpu_bo *bo)
685+
{
686+
return 0;
687+
}
688+
680689
void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
681690
struct amdgpu_vm *vm)
682691
{
@@ -713,11 +722,11 @@ void kgd2kfd_exit(void)
713722
{
714723
}
715724

716-
void kgd2kfd_suspend(struct kfd_dev *kfd)
725+
void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm)
717726
{
718727
}
719728

720-
int kgd2kfd_resume(struct kfd_dev *kfd)
729+
int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm)
721730
{
722731
return 0;
723732
}

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
9696
struct mm_struct *mm);
9797
bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
9898
struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
99+
int amdgpu_amdkfd_remove_fence_on_pt_pd_bos(struct amdgpu_bo *bo);
99100

100101
struct amdkfd_process_info {
101102
/* List head of all VMs that belong to a KFD process */
@@ -122,8 +123,8 @@ struct amdkfd_process_info {
122123
int amdgpu_amdkfd_init(void);
123124
void amdgpu_amdkfd_fini(void);
124125

125-
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev);
126-
int amdgpu_amdkfd_resume(struct amdgpu_device *adev);
126+
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev, bool run_pm);
127+
int amdgpu_amdkfd_resume(struct amdgpu_device *adev, bool run_pm);
127128
void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
128129
const void *ih_ring_entry);
129130
void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev);
@@ -171,6 +172,7 @@ int amdgpu_amdkfd_get_dmabuf_info(struct kgd_dev *kgd, int dma_buf_fd,
171172
uint32_t *flags);
172173
uint64_t amdgpu_amdkfd_get_vram_usage(struct kgd_dev *kgd);
173174
uint64_t amdgpu_amdkfd_get_hive_id(struct kgd_dev *kgd);
175+
uint64_t amdgpu_amdkfd_get_unique_id(struct kgd_dev *kgd);
174176
uint64_t amdgpu_amdkfd_get_mmio_remap_phys_addr(struct kgd_dev *kgd);
175177
uint32_t amdgpu_amdkfd_get_num_gws(struct kgd_dev *kgd);
176178
uint8_t amdgpu_amdkfd_get_xgmi_hops_count(struct kgd_dev *dst, struct kgd_dev *src);
@@ -249,8 +251,8 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
249251
struct drm_device *ddev,
250252
const struct kgd2kfd_shared_resources *gpu_resources);
251253
void kgd2kfd_device_exit(struct kfd_dev *kfd);
252-
void kgd2kfd_suspend(struct kfd_dev *kfd);
253-
int kgd2kfd_resume(struct kfd_dev *kfd);
254+
void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm);
255+
int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm);
254256
int kgd2kfd_pre_reset(struct kfd_dev *kfd);
255257
int kgd2kfd_post_reset(struct kfd_dev *kfd);
256258
void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,4 +808,5 @@ const struct kfd2kgd_calls gfx_v10_kfd2kgd = {
808808
.get_tile_config = amdgpu_amdkfd_get_tile_config,
809809
.set_vm_context_page_table_base = set_vm_context_page_table_base,
810810
.get_hive_id = amdgpu_amdkfd_get_hive_id,
811+
.get_unique_id = amdgpu_amdkfd_get_unique_id,
811812
};

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,4 +739,5 @@ const struct kfd2kgd_calls gfx_v9_kfd2kgd = {
739739
.get_tile_config = kgd_gfx_v9_get_tile_config,
740740
.set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
741741
.get_hive_id = amdgpu_amdkfd_get_hive_id,
742+
.get_unique_id = amdgpu_amdkfd_get_unique_id,
742743
};

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

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,42 @@ static int amdgpu_amdkfd_remove_eviction_fence(struct amdgpu_bo *bo,
276276
return 0;
277277
}
278278

279+
int amdgpu_amdkfd_remove_fence_on_pt_pd_bos(struct amdgpu_bo *bo)
280+
{
281+
struct amdgpu_bo *root = bo;
282+
struct amdgpu_vm_bo_base *vm_bo;
283+
struct amdgpu_vm *vm;
284+
struct amdkfd_process_info *info;
285+
struct amdgpu_amdkfd_fence *ef;
286+
int ret;
287+
288+
/* we can always get vm_bo from root PD bo.*/
289+
while (root->parent)
290+
root = root->parent;
291+
292+
vm_bo = root->vm_bo;
293+
if (!vm_bo)
294+
return 0;
295+
296+
vm = vm_bo->vm;
297+
if (!vm)
298+
return 0;
299+
300+
info = vm->process_info;
301+
if (!info || !info->eviction_fence)
302+
return 0;
303+
304+
ef = container_of(dma_fence_get(&info->eviction_fence->base),
305+
struct amdgpu_amdkfd_fence, base);
306+
307+
BUG_ON(!dma_resv_trylock(bo->tbo.base.resv));
308+
ret = amdgpu_amdkfd_remove_eviction_fence(bo, ef);
309+
dma_resv_unlock(bo->tbo.base.resv);
310+
311+
dma_fence_put(&ef->base);
312+
return ret;
313+
}
314+
279315
static int amdgpu_amdkfd_bo_validate(struct amdgpu_bo *bo, uint32_t domain,
280316
bool wait)
281317
{
@@ -847,9 +883,9 @@ static int process_sync_pds_resv(struct amdkfd_process_info *process_info,
847883
vm_list_node) {
848884
struct amdgpu_bo *pd = peer_vm->root.base.bo;
849885

850-
ret = amdgpu_sync_resv(NULL,
851-
sync, pd->tbo.base.resv,
852-
AMDGPU_FENCE_OWNER_KFD, false);
886+
ret = amdgpu_sync_resv(NULL, sync, pd->tbo.base.resv,
887+
AMDGPU_SYNC_NE_OWNER,
888+
AMDGPU_FENCE_OWNER_KFD);
853889
if (ret)
854890
return ret;
855891
}
@@ -1044,6 +1080,8 @@ void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev,
10441080
list_del(&vm->vm_list_node);
10451081
mutex_unlock(&process_info->lock);
10461082

1083+
vm->process_info = NULL;
1084+
10471085
/* Release per-process resources when last compute VM is destroyed */
10481086
if (!process_info->n_vms) {
10491087
WARN_ON(!list_empty(&process_info->kfd_bo_list));

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,20 @@ static enum drm_mode_status amdgpu_connector_dp_mode_valid(struct drm_connector
14611461
return MODE_OK;
14621462
}
14631463

1464+
static int
1465+
amdgpu_connector_late_register(struct drm_connector *connector)
1466+
{
1467+
struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
1468+
int r = 0;
1469+
1470+
if (amdgpu_connector->ddc_bus->has_aux) {
1471+
amdgpu_connector->ddc_bus->aux.dev = amdgpu_connector->base.kdev;
1472+
r = drm_dp_aux_register(&amdgpu_connector->ddc_bus->aux);
1473+
}
1474+
1475+
return r;
1476+
}
1477+
14641478
static const struct drm_connector_helper_funcs amdgpu_connector_dp_helper_funcs = {
14651479
.get_modes = amdgpu_connector_dp_get_modes,
14661480
.mode_valid = amdgpu_connector_dp_mode_valid,
@@ -1475,6 +1489,7 @@ static const struct drm_connector_funcs amdgpu_connector_dp_funcs = {
14751489
.early_unregister = amdgpu_connector_unregister,
14761490
.destroy = amdgpu_connector_destroy,
14771491
.force = amdgpu_connector_dvi_force,
1492+
.late_register = amdgpu_connector_late_register,
14781493
};
14791494

14801495
static const struct drm_connector_funcs amdgpu_connector_edp_funcs = {
@@ -1485,6 +1500,7 @@ static const struct drm_connector_funcs amdgpu_connector_edp_funcs = {
14851500
.early_unregister = amdgpu_connector_unregister,
14861501
.destroy = amdgpu_connector_destroy,
14871502
.force = amdgpu_connector_dvi_force,
1503+
.late_register = amdgpu_connector_late_register,
14881504
};
14891505

14901506
void
@@ -1931,7 +1947,6 @@ amdgpu_connector_add(struct amdgpu_device *adev,
19311947
connector->polled = DRM_CONNECTOR_POLL_HPD;
19321948

19331949
connector->display_info.subpixel_order = subpixel_order;
1934-
drm_connector_register(connector);
19351950

19361951
if (has_aux)
19371952
amdgpu_atombios_dp_aux_init(amdgpu_connector);

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -651,16 +651,19 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
651651

652652
static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
653653
{
654+
struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
654655
struct amdgpu_bo_list_entry *e;
655656
int r;
656657

657658
list_for_each_entry(e, &p->validated, tv.head) {
658659
struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo);
659660
struct dma_resv *resv = bo->tbo.base.resv;
661+
enum amdgpu_sync_mode sync_mode;
660662

661-
r = amdgpu_sync_resv(p->adev, &p->job->sync, resv, p->filp,
662-
amdgpu_bo_explicit_sync(bo));
663-
663+
sync_mode = amdgpu_bo_explicit_sync(bo) ?
664+
AMDGPU_SYNC_EXPLICIT : AMDGPU_SYNC_NE_OWNER;
665+
r = amdgpu_sync_resv(p->adev, &p->job->sync, resv, sync_mode,
666+
&fpriv->vm);
664667
if (r)
665668
return r;
666669
}
@@ -1211,7 +1214,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
12111214
job = p->job;
12121215
p->job = NULL;
12131216

1214-
r = drm_sched_job_init(&job->base, entity, p->filp);
1217+
r = drm_sched_job_init(&job->base, entity, &fpriv->vm);
12151218
if (r)
12161219
goto error_unlock;
12171220

0 commit comments

Comments
 (0)