Commit 66ac3451 authored by Lucas De Marchi's avatar Lucas De Marchi

drm/xe: Add assert for XE_WA() usage

It's not always safe to call XE_WA() in the driver initialization. Add a
xe_gt_assert() so this doesn't go unnoticed.

While at it, fix typo in kernel-doc about OOB workarounds.
Reviewed-by: default avatarTejas Upadhyay <tejas.upadhyay@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240722160815.4085605-1-lucas.demarchi@intel.comSigned-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
parent a2b4da95
...@@ -387,8 +387,14 @@ struct xe_gt { ...@@ -387,8 +387,14 @@ struct xe_gt {
unsigned long *engine; unsigned long *engine;
/** @wa_active.lrc: bitmap with active LRC workarounds */ /** @wa_active.lrc: bitmap with active LRC workarounds */
unsigned long *lrc; unsigned long *lrc;
/** @wa_active.oob: bitmap with active OOB workaroudns */ /** @wa_active.oob: bitmap with active OOB workarounds */
unsigned long *oob; unsigned long *oob;
/**
* @wa_active.oob_initialized: mark oob as initialized to help
* detecting misuse of XE_WA() - it can only be called on
* initialization after OOB WAs have being processed
*/
bool oob_initialized;
} wa_active; } wa_active;
/** @user_engines: engines present in GT and available to userspace */ /** @user_engines: engines present in GT and available to userspace */
......
...@@ -755,6 +755,7 @@ void xe_wa_process_oob(struct xe_gt *gt) ...@@ -755,6 +755,7 @@ void xe_wa_process_oob(struct xe_gt *gt)
xe_rtp_process_ctx_enable_active_tracking(&ctx, gt->wa_active.oob, xe_rtp_process_ctx_enable_active_tracking(&ctx, gt->wa_active.oob,
ARRAY_SIZE(oob_was)); ARRAY_SIZE(oob_was));
gt->wa_active.oob_initialized = true;
xe_rtp_process(&ctx, oob_was); xe_rtp_process(&ctx, oob_was);
} }
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#ifndef _XE_WA_ #ifndef _XE_WA_
#define _XE_WA_ #define _XE_WA_
#include "xe_assert.h"
struct drm_printer; struct drm_printer;
struct xe_gt; struct xe_gt;
struct xe_hw_engine; struct xe_hw_engine;
...@@ -25,6 +27,9 @@ void xe_wa_dump(struct xe_gt *gt, struct drm_printer *p); ...@@ -25,6 +27,9 @@ void xe_wa_dump(struct xe_gt *gt, struct drm_printer *p);
* @gt__: gt instance * @gt__: gt instance
* @id__: XE_OOB_<id__>, as generated by build system in generated/xe_wa_oob.h * @id__: XE_OOB_<id__>, as generated by build system in generated/xe_wa_oob.h
*/ */
#define XE_WA(gt__, id__) test_bit(XE_WA_OOB_ ## id__, (gt__)->wa_active.oob) #define XE_WA(gt__, id__) ({ \
xe_gt_assert(gt__, (gt__)->wa_active.oob_initialized); \
test_bit(XE_WA_OOB_ ## id__, (gt__)->wa_active.oob); \
})
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment