Skip to content

Commit 3bb5d1f

Browse files
hghimirarodrigovivi
authored andcommitted
drm/xe/xe_reg_sr: Update handling of xe_force_wake_get return
With xe_force_wake_get() now returning the refcount-incremented domain mask, a non-zero return value in the case of XE_FORCEWAKE_ALL does not necessarily indicate success. Use xe_force_wake_ref_has_domain() to determine the status of the call. Modify the return handling of xe_force_wake_get() accordingly and pass the return value to xe_force_wake_put(). v3 - return xe_wakeref_t instead of int in xe_force_wake_get() - xe_force_wake_put() error doesn't need to be checked. It internally WARNS on domain ack failure. v5 - return unsigned int from xe_force_wake_get() v6 - use helper xe_force_wake_ref_has_domain() Cc: Rodrigo Vivi <[email protected]> Cc: Lucas De Marchi <[email protected]> Signed-off-by: Himal Prasad Ghimiray <[email protected]> Reviewed-by: Nirmoy Das <[email protected]> Reviewed-by: Badal Nilawar <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Rodrigo Vivi <[email protected]>
1 parent 1d5bf4f commit 3bb5d1f

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

drivers/gpu/drm/xe/xe_reg_sr.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -188,27 +188,27 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
188188
{
189189
struct xe_reg_sr_entry *entry;
190190
unsigned long reg;
191-
int err;
191+
unsigned int fw_ref;
192192

193193
if (xa_empty(&sr->xa))
194194
return;
195195

196196
xe_gt_dbg(gt, "Applying %s save-restore MMIOs\n", sr->name);
197197

198-
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
199-
if (err)
198+
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
199+
if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL))
200200
goto err_force_wake;
201201

202202
xa_for_each(&sr->xa, reg, entry)
203203
apply_one_mmio(gt, entry);
204204

205-
err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
206-
XE_WARN_ON(err);
205+
xe_force_wake_put(gt_to_fw(gt), fw_ref);
207206

208207
return;
209208

210209
err_force_wake:
211-
xe_gt_err(gt, "Failed to apply, err=%d\n", err);
210+
xe_force_wake_put(gt_to_fw(gt), fw_ref);
211+
xe_gt_err(gt, "Failed to apply, err=-ETIMEDOUT\n");
212212
}
213213

214214
void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
@@ -221,15 +221,15 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
221221
u32 mmio_base = hwe->mmio_base;
222222
unsigned long reg;
223223
unsigned int slot = 0;
224-
int err;
224+
unsigned int fw_ref;
225225

226226
if (xa_empty(&sr->xa))
227227
return;
228228

229229
drm_dbg(&xe->drm, "Whitelisting %s registers\n", sr->name);
230230

231-
err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
232-
if (err)
231+
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
232+
if (!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL))
233233
goto err_force_wake;
234234

235235
p = drm_dbg_printer(&xe->drm, DRM_UT_DRIVER, NULL);
@@ -254,13 +254,13 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
254254
xe_mmio_write32(&gt->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
255255
}
256256

257-
err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
258-
XE_WARN_ON(err);
257+
xe_force_wake_put(gt_to_fw(gt), fw_ref);
259258

260259
return;
261260

262261
err_force_wake:
263-
drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
262+
xe_force_wake_put(gt_to_fw(gt), fw_ref);
263+
drm_err(&xe->drm, "Failed to apply, err=-ETIMEDOUT\n");
264264
}
265265

266266
/**

0 commit comments

Comments
 (0)