drm/radeon: Update IH_RB_RPTR register after each processed interrupt
This might decrease the chance of IH ring buffer overflows. Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
6cc2fda213
commit
f55e03b975
4 changed files with 4 additions and 4 deletions
|
@ -8251,6 +8251,7 @@ restart_ih:
|
||||||
/* wptr/rptr are in bytes! */
|
/* wptr/rptr are in bytes! */
|
||||||
rptr += 16;
|
rptr += 16;
|
||||||
rptr &= rdev->ih.ptr_mask;
|
rptr &= rdev->ih.ptr_mask;
|
||||||
|
WREG32(IH_RB_RPTR, rptr);
|
||||||
}
|
}
|
||||||
if (queue_hotplug)
|
if (queue_hotplug)
|
||||||
schedule_work(&rdev->hotplug_work);
|
schedule_work(&rdev->hotplug_work);
|
||||||
|
@ -8259,7 +8260,6 @@ restart_ih:
|
||||||
if (queue_thermal)
|
if (queue_thermal)
|
||||||
schedule_work(&rdev->pm.dpm.thermal.work);
|
schedule_work(&rdev->pm.dpm.thermal.work);
|
||||||
rdev->ih.rptr = rptr;
|
rdev->ih.rptr = rptr;
|
||||||
WREG32(IH_RB_RPTR, rdev->ih.rptr);
|
|
||||||
atomic_set(&rdev->ih.lock, 0);
|
atomic_set(&rdev->ih.lock, 0);
|
||||||
|
|
||||||
/* make sure wptr hasn't changed while processing */
|
/* make sure wptr hasn't changed while processing */
|
||||||
|
|
|
@ -5137,6 +5137,7 @@ restart_ih:
|
||||||
/* wptr/rptr are in bytes! */
|
/* wptr/rptr are in bytes! */
|
||||||
rptr += 16;
|
rptr += 16;
|
||||||
rptr &= rdev->ih.ptr_mask;
|
rptr &= rdev->ih.ptr_mask;
|
||||||
|
WREG32(IH_RB_RPTR, rptr);
|
||||||
}
|
}
|
||||||
if (queue_hotplug)
|
if (queue_hotplug)
|
||||||
schedule_work(&rdev->hotplug_work);
|
schedule_work(&rdev->hotplug_work);
|
||||||
|
@ -5145,7 +5146,6 @@ restart_ih:
|
||||||
if (queue_thermal && rdev->pm.dpm_enabled)
|
if (queue_thermal && rdev->pm.dpm_enabled)
|
||||||
schedule_work(&rdev->pm.dpm.thermal.work);
|
schedule_work(&rdev->pm.dpm.thermal.work);
|
||||||
rdev->ih.rptr = rptr;
|
rdev->ih.rptr = rptr;
|
||||||
WREG32(IH_RB_RPTR, rdev->ih.rptr);
|
|
||||||
atomic_set(&rdev->ih.lock, 0);
|
atomic_set(&rdev->ih.lock, 0);
|
||||||
|
|
||||||
/* make sure wptr hasn't changed while processing */
|
/* make sure wptr hasn't changed while processing */
|
||||||
|
|
|
@ -4048,6 +4048,7 @@ restart_ih:
|
||||||
/* wptr/rptr are in bytes! */
|
/* wptr/rptr are in bytes! */
|
||||||
rptr += 16;
|
rptr += 16;
|
||||||
rptr &= rdev->ih.ptr_mask;
|
rptr &= rdev->ih.ptr_mask;
|
||||||
|
WREG32(IH_RB_RPTR, rptr);
|
||||||
}
|
}
|
||||||
if (queue_hotplug)
|
if (queue_hotplug)
|
||||||
schedule_work(&rdev->hotplug_work);
|
schedule_work(&rdev->hotplug_work);
|
||||||
|
@ -4056,7 +4057,6 @@ restart_ih:
|
||||||
if (queue_thermal && rdev->pm.dpm_enabled)
|
if (queue_thermal && rdev->pm.dpm_enabled)
|
||||||
schedule_work(&rdev->pm.dpm.thermal.work);
|
schedule_work(&rdev->pm.dpm.thermal.work);
|
||||||
rdev->ih.rptr = rptr;
|
rdev->ih.rptr = rptr;
|
||||||
WREG32(IH_RB_RPTR, rdev->ih.rptr);
|
|
||||||
atomic_set(&rdev->ih.lock, 0);
|
atomic_set(&rdev->ih.lock, 0);
|
||||||
|
|
||||||
/* make sure wptr hasn't changed while processing */
|
/* make sure wptr hasn't changed while processing */
|
||||||
|
|
|
@ -6664,13 +6664,13 @@ restart_ih:
|
||||||
/* wptr/rptr are in bytes! */
|
/* wptr/rptr are in bytes! */
|
||||||
rptr += 16;
|
rptr += 16;
|
||||||
rptr &= rdev->ih.ptr_mask;
|
rptr &= rdev->ih.ptr_mask;
|
||||||
|
WREG32(IH_RB_RPTR, rptr);
|
||||||
}
|
}
|
||||||
if (queue_hotplug)
|
if (queue_hotplug)
|
||||||
schedule_work(&rdev->hotplug_work);
|
schedule_work(&rdev->hotplug_work);
|
||||||
if (queue_thermal && rdev->pm.dpm_enabled)
|
if (queue_thermal && rdev->pm.dpm_enabled)
|
||||||
schedule_work(&rdev->pm.dpm.thermal.work);
|
schedule_work(&rdev->pm.dpm.thermal.work);
|
||||||
rdev->ih.rptr = rptr;
|
rdev->ih.rptr = rptr;
|
||||||
WREG32(IH_RB_RPTR, rdev->ih.rptr);
|
|
||||||
atomic_set(&rdev->ih.lock, 0);
|
atomic_set(&rdev->ih.lock, 0);
|
||||||
|
|
||||||
/* make sure wptr hasn't changed while processing */
|
/* make sure wptr hasn't changed while processing */
|
||||||
|
|
Loading…
Reference in a new issue