| .. | .. |
|---|
| 1 | 1 | // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note |
|---|
| 2 | 2 | /* |
|---|
| 3 | 3 | * |
|---|
| 4 | | - * (C) COPYRIGHT 2014-2021 ARM Limited. All rights reserved. |
|---|
| 4 | + * (C) COPYRIGHT 2014-2022 ARM Limited. All rights reserved. |
|---|
| 5 | 5 | * |
|---|
| 6 | 6 | * This program is free software and is provided to you under the terms of the |
|---|
| 7 | 7 | * GNU General Public License version 2 as published by the Free Software |
|---|
| .. | .. |
|---|
| 91 | 91 | struct kbase_device *kbdev; |
|---|
| 92 | 92 | struct kbasep_js_device_data *js_devdata; |
|---|
| 93 | 93 | struct kbase_backend_data *backend; |
|---|
| 94 | | - int s; |
|---|
| 94 | + unsigned int s; |
|---|
| 95 | 95 | bool reset_needed = false; |
|---|
| 96 | 96 | |
|---|
| 97 | 97 | KBASE_DEBUG_ASSERT(timer != NULL); |
|---|
| .. | .. |
|---|
| 131 | 131 | } else { |
|---|
| 132 | 132 | soft_stop_ticks = |
|---|
| 133 | 133 | js_devdata->soft_stop_ticks; |
|---|
| 134 | + if (kbase_is_quick_reset_enabled(kbdev)) { |
|---|
| 135 | + hard_stop_ticks = 2; |
|---|
| 136 | + gpu_reset_ticks = 3; |
|---|
| 137 | + } else { |
|---|
| 134 | 138 | hard_stop_ticks = |
|---|
| 135 | 139 | js_devdata->hard_stop_ticks_ss; |
|---|
| 136 | 140 | gpu_reset_ticks = |
|---|
| 137 | 141 | js_devdata->gpu_reset_ticks_ss; |
|---|
| 142 | + } |
|---|
| 138 | 143 | } |
|---|
| 139 | 144 | |
|---|
| 140 | 145 | /* If timeouts have been changed then ensure |
|---|
| .. | .. |
|---|
| 196 | 201 | int ms = |
|---|
| 197 | 202 | js_devdata->scheduling_period_ns |
|---|
| 198 | 203 | / 1000000u; |
|---|
| 199 | | - dev_warn(kbdev->dev, "JS: Job Hard-Stopped (took more than %lu ticks at %lu ms/tick)", |
|---|
| 200 | | - (unsigned long)ticks, |
|---|
| 201 | | - (unsigned long)ms); |
|---|
| 204 | + if (!kbase_is_quick_reset_enabled(kbdev)) |
|---|
| 205 | + dev_warn(kbdev->dev, "JS: Job Hard-Stopped (took more than %lu ticks at %lu ms/tick)", |
|---|
| 206 | + (unsigned long)ticks, |
|---|
| 207 | + (unsigned long)ms); |
|---|
| 202 | 208 | kbase_job_slot_hardstop(atom->kctx, s, |
|---|
| 203 | 209 | atom); |
|---|
| 204 | 210 | #endif |
|---|
| .. | .. |
|---|
| 255 | 261 | } |
|---|
| 256 | 262 | } |
|---|
| 257 | 263 | if (reset_needed) { |
|---|
| 258 | | - dev_err(kbdev->dev, "JS: Job has been on the GPU for too long (JS_RESET_TICKS_SS/DUMPING timeout hit). Issuing GPU soft-reset to resolve."); |
|---|
| 264 | + if (kbase_is_quick_reset_enabled(kbdev)) |
|---|
| 265 | + dev_err(kbdev->dev, "quick reset"); |
|---|
| 266 | + else { |
|---|
| 267 | + dev_err(kbdev->dev, "JS: Job has been on the GPU for too long (JS_RESET_TICKS_SS/DUMPING timeout hit). Issuing GPU soft-reset to resolve."); |
|---|
| 268 | + } |
|---|
| 259 | 269 | |
|---|
| 260 | 270 | if (kbase_prepare_to_reset_gpu_locked(kbdev, RESET_FLAGS_NONE)) |
|---|
| 261 | 271 | kbase_reset_gpu_locked(kbdev); |
|---|
| .. | .. |
|---|
| 365 | 375 | |
|---|
| 366 | 376 | backend->timeouts_updated = true; |
|---|
| 367 | 377 | } |
|---|
| 368 | | - |
|---|