mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
drm/panthor: Reset queue slots if termination fails
Make sure the queue slot is reset even if we failed termination so we don't have garbage in the CS input interface after a reset. In practice that's not a problem because we zero out all RW sections when a hangs occurs, but it's safer to reset things manually, in case we decide to not conditionally reload RW sections based on the type of hang. v4: - Split the changes in two separate patches v5: - No changes v6: - Adjust the explanation in the commit message - Drop the Fixes tag - Put after the timeout changes and make the two patches independent so one can be backported, and the other not v7: - Use the local group variable instead of dereferencing csg_slot->group - Add Steve's R-b v8: - No changes Signed-off-by: Ashley Smith <ashley.smith@collabora.com> Reviewed-by: Steven Price <steven.price@arm.com> Link: https://patch.msgid.link/20251113105734.1520338-3-boris.brezillon@collabora.com Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
This commit is contained in:
parent
345c5b7cc0
commit
6f53bcb4fe
|
|
@ -2841,13 +2841,23 @@ void panthor_sched_suspend(struct panthor_device *ptdev)
|
|||
while (slot_mask) {
|
||||
u32 csg_id = ffs(slot_mask) - 1;
|
||||
struct panthor_csg_slot *csg_slot = &sched->csg_slots[csg_id];
|
||||
struct panthor_group *group = csg_slot->group;
|
||||
|
||||
/* Terminate command timedout, but the soft-reset will
|
||||
* automatically terminate all active groups, so let's
|
||||
* force the state to halted here.
|
||||
*/
|
||||
if (csg_slot->group->state != PANTHOR_CS_GROUP_TERMINATED)
|
||||
csg_slot->group->state = PANTHOR_CS_GROUP_TERMINATED;
|
||||
if (group->state != PANTHOR_CS_GROUP_TERMINATED) {
|
||||
group->state = PANTHOR_CS_GROUP_TERMINATED;
|
||||
|
||||
/* Reset the queue slots manually if the termination
|
||||
* request failed.
|
||||
*/
|
||||
for (i = 0; i < group->queue_count; i++) {
|
||||
if (group->queues[i])
|
||||
cs_slot_reset_locked(ptdev, csg_id, i);
|
||||
}
|
||||
}
|
||||
slot_mask &= ~BIT(csg_id);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user