From 0f06dc101972d598d1c6bb356436c3dbf1e4b646 Mon Sep 17 00:00:00 2001 From: Rodrigo Vivi Date: Thu, 12 Jan 2023 17:25:03 -0500 Subject: [PATCH] drm/xe: Implement a local xe_mmio_wait32 Then, move the i915_utils.h include to its user. The overall goal is to kill all the usages of the i915_utils stuff. Yes, wait_for also depends on , so they go together to where it is needed. It will be likely needed anyway directly for udelay or usleep_range. Signed-off-by: Rodrigo Vivi Reviewed-by: Matthew Brost --- drivers/gpu/drm/xe/xe_force_wake.c | 6 ++++++ drivers/gpu/drm/xe/xe_gt_mcr.c | 7 +++++++ drivers/gpu/drm/xe/xe_guc.c | 7 +++++++ drivers/gpu/drm/xe/xe_guc_pc.c | 7 +++++++ drivers/gpu/drm/xe/xe_mmio.h | 29 ++++++++++++++++++++--------- drivers/gpu/drm/xe/xe_pcode.c | 7 +++++++ 6 files changed, 54 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c index 0320ce7ba3d19..31a33ee9ccb6c 100644 --- a/drivers/gpu/drm/xe/xe_force_wake.c +++ b/drivers/gpu/drm/xe/xe_force_wake.c @@ -10,6 +10,12 @@ #include "xe_mmio.h" #include "gt/intel_gt_regs.h" +/* + * FIXME: This header has been deemed evil and we need to kill it. Temporarily + * including so we can use '__mask_next_bit'. + */ +#include "i915_utils.h" + #define XE_FORCE_WAKE_ACK_TIMEOUT_MS 50 static struct xe_gt * diff --git a/drivers/gpu/drm/xe/xe_gt_mcr.c b/drivers/gpu/drm/xe/xe_gt_mcr.c index b69c0d6c6b2f9..8add5ec9a3077 100644 --- a/drivers/gpu/drm/xe/xe_gt_mcr.c +++ b/drivers/gpu/drm/xe/xe_gt_mcr.c @@ -11,6 +11,13 @@ #include "gt/intel_gt_regs.h" +#include +/* + * FIXME: This header has been deemed evil and we need to kill it. Temporar + * including so we can use 'wait_for'. + */ +#include "i915_utils.h" + /** * DOC: GT Multicast/Replicated (MCR) Register Support * diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c index 3c285d849ef65..969a2427b1f26 100644 --- a/drivers/gpu/drm/xe/xe_guc.c +++ b/drivers/gpu/drm/xe/xe_guc.c @@ -22,6 +22,13 @@ #include "i915_reg_defs.h" #include "gt/intel_gt_regs.h" +#include +/* + * FIXME: This header has been deemed evil and we need to kill it. Temporarily + * including so we can use 'wait_for' and range_overflow_t. + */ +#include "i915_utils.h" + /* TODO: move to common file */ #define GUC_PVC_MOCS_INDEX_MASK REG_GENMASK(25, 24) #define PVC_MOCS_UC_INDEX 1 diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c index 227e30a482e3b..260ccf3fe215a 100644 --- a/drivers/gpu/drm/xe/xe_guc_pc.c +++ b/drivers/gpu/drm/xe/xe_guc_pc.c @@ -16,6 +16,13 @@ #include "i915_reg_defs.h" #include "i915_reg.h" +#include +/* + * FIXME: This header has been deemed evil and we need to kill it. Temporarily + * including so we can use 'wait_for'. + */ +#include "i915_utils.h" + #include "intel_mchbar_regs.h" /* For GEN6_RP_STATE_CAP.reg to be merged when the definition moves to Xe */ diff --git a/drivers/gpu/drm/xe/xe_mmio.h b/drivers/gpu/drm/xe/xe_mmio.h index 09d24467096fb..7352b622ca87a 100644 --- a/drivers/gpu/drm/xe/xe_mmio.h +++ b/drivers/gpu/drm/xe/xe_mmio.h @@ -10,13 +10,6 @@ #include "xe_gt_types.h" -/* - * FIXME: This header has been deemed evil and we need to kill it. Temporarily - * including so we can use 'wait_for' and unblock initial development. A follow - * should replace 'wait_for' with a sane version and drop including this header. - */ -#include "i915_utils.h" - struct drm_device; struct drm_file; struct xe_device; @@ -93,8 +86,26 @@ static inline int xe_mmio_wait32(struct xe_gt *gt, u32 reg, u32 val, u32 mask, u32 timeout_ms) { - return wait_for((xe_mmio_read32(gt, reg) & mask) == val, - timeout_ms); + ktime_t cur = ktime_get_raw(); + const ktime_t end = ktime_add_ms(cur, timeout_ms); + s64 wait = 10; + + for (;;) { + if ((xe_mmio_read32(gt, reg) & mask) == val) + return 0; + + cur = ktime_get_raw(); + if (!ktime_before(cur, end)) + return -ETIMEDOUT; + + if (ktime_after(ktime_add_us(cur, wait), end)) + wait = ktime_us_delta(end, cur); + + usleep_range(wait, wait << 1); + wait <<= 1; + } + + return -ETIMEDOUT; } int xe_mmio_ioctl(struct drm_device *dev, void *data, diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c index 236159c8a6c0e..313ccd70d1a98 100644 --- a/drivers/gpu/drm/xe/xe_pcode.c +++ b/drivers/gpu/drm/xe/xe_pcode.c @@ -11,6 +11,13 @@ #include +#include +/* + * FIXME: This header has been deemed evil and we need to kill it. Temporarily + * including so we can use 'wait_for'. + */ +#include "i915_utils.h" + /** * DOC: PCODE * -- 2.30.2