Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: fix S3 issue if MQD in VRAM

1. Need flush HDP for MQD putting in vram
2. Zero out mes MQD

Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Jack Xiao and committed by
Alex Deucher
e602157e e03f04b8

+10
+4
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
··· 593 593 594 594 DRM_INFO("kiq ring mec %d pipe %d q %d\n", kiq_ring->me, kiq_ring->pipe, 595 595 kiq_ring->queue); 596 + amdgpu_device_flush_hdp(adev, NULL); 597 + 596 598 spin_lock(&kiq->ring_lock); 597 599 r = amdgpu_ring_alloc(kiq_ring, kiq->pmf->map_queues_size * 598 600 adev->gfx.num_compute_rings + ··· 631 629 632 630 if (!kiq->pmf || !kiq->pmf->kiq_map_queues) 633 631 return -EINVAL; 632 + 633 + amdgpu_device_flush_hdp(adev, NULL); 634 634 635 635 spin_lock(&kiq->ring_lock); 636 636 /* No need to map kcq on the slave */
+3
drivers/gpu/drm/amd/amdgpu/mes_v10_1.c
··· 632 632 uint64_t hqd_gpu_addr, wb_gpu_addr, eop_base_addr; 633 633 uint32_t tmp; 634 634 635 + memset(mqd, 0, sizeof(*mqd)); 636 + 635 637 mqd->header = 0xC0310800; 636 638 mqd->compute_pipelinestat_enable = 0x00000001; 637 639 mqd->compute_static_thread_mgmt_se0 = 0xffffffff; ··· 730 728 /* offset: 184 - this is used for CP_HQD_GFX_CONTROL */ 731 729 mqd->cp_hqd_suspend_cntl_stack_offset = tmp; 732 730 731 + amdgpu_device_flush_hdp(ring->adev, NULL); 733 732 return 0; 734 733 } 735 734
+3
drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
··· 704 704 uint64_t hqd_gpu_addr, wb_gpu_addr, eop_base_addr; 705 705 uint32_t tmp; 706 706 707 + memset(mqd, 0, sizeof(*mqd)); 708 + 707 709 mqd->header = 0xC0310800; 708 710 mqd->compute_pipelinestat_enable = 0x00000001; 709 711 mqd->compute_static_thread_mgmt_se0 = 0xffffffff; ··· 799 797 mqd->cp_hqd_iq_timer = regCP_HQD_IQ_TIMER_DEFAULT; 800 798 mqd->cp_hqd_quantum = regCP_HQD_QUANTUM_DEFAULT; 801 799 800 + amdgpu_device_flush_hdp(ring->adev, NULL); 802 801 return 0; 803 802 } 804 803