mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
drm/panthor: Simplify FW fast reset path
Stop checking the FW halt_status as MCU_STATUS should be sufficient. This should make the check for successful FW halt and subsequently setting fast_reset to true more robust. We should also clear GLB_REQ.GLB_HALT bit only on post-reset prior to starting the FW and only if we're doing a fast reset, because the slow reset will re-initialize all FW sections, including the global interface. Signed-off-by: Karunika Choo <karunika.choo@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Link: https://lore.kernel.org/r/20241119135030.3352939-1-karunika.choo@arm.com Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
This commit is contained in:
parent
dd7db8d911
commit
498893bd59
1 changed files with 8 additions and 7 deletions
|
@ -1098,17 +1098,11 @@ void panthor_fw_pre_reset(struct panthor_device *ptdev, bool on_hang)
|
|||
panthor_fw_update_reqs(glb_iface, req, GLB_HALT, GLB_HALT);
|
||||
gpu_write(ptdev, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1);
|
||||
if (!readl_poll_timeout(ptdev->iomem + MCU_STATUS, status,
|
||||
status == MCU_STATUS_HALT, 10, 100000) &&
|
||||
glb_iface->output->halt_status == PANTHOR_FW_HALT_OK) {
|
||||
status == MCU_STATUS_HALT, 10, 100000)) {
|
||||
ptdev->fw->fast_reset = true;
|
||||
} else {
|
||||
drm_warn(&ptdev->base, "Failed to cleanly suspend MCU");
|
||||
}
|
||||
|
||||
/* The FW detects 0 -> 1 transitions. Make sure we reset
|
||||
* the HALT bit before the FW is rebooted.
|
||||
*/
|
||||
panthor_fw_update_reqs(glb_iface, req, 0, GLB_HALT);
|
||||
}
|
||||
|
||||
panthor_job_irq_suspend(&ptdev->fw->irq);
|
||||
|
@ -1134,6 +1128,13 @@ int panthor_fw_post_reset(struct panthor_device *ptdev)
|
|||
* the FW sections. If it fails, go for a full reset.
|
||||
*/
|
||||
if (ptdev->fw->fast_reset) {
|
||||
/* The FW detects 0 -> 1 transitions. Make sure we reset
|
||||
* the HALT bit before the FW is rebooted.
|
||||
* This is not needed on a slow reset because FW sections are
|
||||
* re-initialized.
|
||||
*/
|
||||
panthor_fw_update_reqs(glb_iface, req, 0, GLB_HALT);
|
||||
|
||||
ret = panthor_fw_start(ptdev);
|
||||
if (!ret)
|
||||
goto out;
|
||||
|
|
Loading…
Add table
Reference in a new issue