diff options
author | Varad Gautam <varadgautam@google.com> | 2023-01-05 16:38:10 +0000 |
---|---|---|
committer | Varad Gautam <varadgautam@google.com> | 2023-01-18 10:27:38 +0000 |
commit | 21851be1ab020a628b7d2313d851cd2c90bc2d10 (patch) | |
tree | 708828d49c5c31abd60ea8a825c6f503f8d6bfea /mali_kbase/backend | |
parent | 5833a0028c701290fb26566c2615af25f20556c9 (diff) | |
download | gpu-21851be1ab020a628b7d2313d851cd2c90bc2d10.tar.gz |
mali_kbase: Unmask RESET_COMPLETED irq before resetting the GPU
kbase_pm_do_reset issues GPU_COMMAND_SOFT_RESET before unmasking
GPU_CONTROL.GPU_IRQ_RAWSTAT.RESET_COMPLETED, which leaves a tiny race
window for missing this interrupt.
Avoid this by unmasking the irq before writing to the reset register.
kbase upstreaming: WIP: b/243522189#comment23
Change-Id: I2dcec3ef431c4461b99bfbb389665492ddd02188
Signed-off-by: Varad Gautam <varadgautam@google.com>
Bug: 241217496
Test: SST ~2500h (b/265003962)
Diffstat (limited to 'mali_kbase/backend')
-rw-r--r-- | mali_kbase/backend/gpu/mali_kbase_pm_driver.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/mali_kbase/backend/gpu/mali_kbase_pm_driver.c b/mali_kbase/backend/gpu/mali_kbase_pm_driver.c index 1864240..d998ae5 100644 --- a/mali_kbase/backend/gpu/mali_kbase_pm_driver.c +++ b/mali_kbase/backend/gpu/mali_kbase_pm_driver.c @@ -3176,6 +3176,9 @@ static int kbase_pm_do_reset(struct kbase_device *kbdev) } #endif + /* Unmask the reset complete interrupt only */ + kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_MASK), RESET_COMPLETED); + if (kbdev->pm.backend.callback_soft_reset) { ret = kbdev->pm.backend.callback_soft_reset(kbdev); if (ret < 0) @@ -3187,9 +3190,6 @@ static int kbase_pm_do_reset(struct kbase_device *kbdev) GPU_COMMAND_SOFT_RESET); } - /* Unmask the reset complete interrupt only */ - kbase_reg_write(kbdev, GPU_CONTROL_REG(GPU_IRQ_MASK), RESET_COMPLETED); - /* Initialize a structure for tracking the status of the reset */ rtdata.kbdev = kbdev; rtdata.timed_out = false; |