drm/amdgpu: remove unsafe optimization to drop preamble ib
[ Upstream commit 7d9c70d23550eb86a1bec1954ccaa8d6ec3a3328 ] Take the situation with gfxoff, the optimization may cause corrupt CE ram contents. In addition emit_cntxcntl callback has similar optimization which firmware can handle properly even for power feature. Signed-off-by: Jiansong Chen <Jiansong.Chen@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
c5b518f4b9
commit
8fa6473a61
@@ -128,7 +128,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
|
|||||||
struct amdgpu_device *adev = ring->adev;
|
struct amdgpu_device *adev = ring->adev;
|
||||||
struct amdgpu_ib *ib = &ibs[0];
|
struct amdgpu_ib *ib = &ibs[0];
|
||||||
struct dma_fence *tmp = NULL;
|
struct dma_fence *tmp = NULL;
|
||||||
bool skip_preamble, need_ctx_switch;
|
bool need_ctx_switch;
|
||||||
unsigned patch_offset = ~0;
|
unsigned patch_offset = ~0;
|
||||||
struct amdgpu_vm *vm;
|
struct amdgpu_vm *vm;
|
||||||
uint64_t fence_ctx;
|
uint64_t fence_ctx;
|
||||||
@@ -221,7 +221,6 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
|
|||||||
if (need_ctx_switch)
|
if (need_ctx_switch)
|
||||||
status |= AMDGPU_HAVE_CTX_SWITCH;
|
status |= AMDGPU_HAVE_CTX_SWITCH;
|
||||||
|
|
||||||
skip_preamble = ring->current_ctx == fence_ctx;
|
|
||||||
if (job && ring->funcs->emit_cntxcntl) {
|
if (job && ring->funcs->emit_cntxcntl) {
|
||||||
status |= job->preamble_status;
|
status |= job->preamble_status;
|
||||||
status |= job->preemption_status;
|
status |= job->preemption_status;
|
||||||
@@ -239,14 +238,6 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
|
|||||||
for (i = 0; i < num_ibs; ++i) {
|
for (i = 0; i < num_ibs; ++i) {
|
||||||
ib = &ibs[i];
|
ib = &ibs[i];
|
||||||
|
|
||||||
/* drop preamble IBs if we don't have a context switch */
|
|
||||||
if ((ib->flags & AMDGPU_IB_FLAG_PREAMBLE) &&
|
|
||||||
skip_preamble &&
|
|
||||||
!(status & AMDGPU_PREAMBLE_IB_PRESENT_FIRST) &&
|
|
||||||
!amdgpu_mcbp &&
|
|
||||||
!amdgpu_sriov_vf(adev)) /* for SRIOV preemption, Preamble CE ib must be inserted anyway */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (job && ring->funcs->emit_frame_cntl) {
|
if (job && ring->funcs->emit_frame_cntl) {
|
||||||
if (secure != !!(ib->flags & AMDGPU_IB_FLAGS_SECURE)) {
|
if (secure != !!(ib->flags & AMDGPU_IB_FLAGS_SECURE)) {
|
||||||
amdgpu_ring_emit_frame_cntl(ring, false, secure);
|
amdgpu_ring_emit_frame_cntl(ring, false, secure);
|
||||||
|
Reference in New Issue
Block a user