Commit 0f06dc10 authored by Rodrigo Vivi's avatar Rodrigo Vivi
Browse files

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 <linux/delay.h>, so they go
together to where it is needed. It will be likely needed
anyway directly for udelay or usleep_range.

Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
parent dd08ebf6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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 *
+7 −0
Original line number Diff line number Diff line
@@ -11,6 +11,13 @@

#include "gt/intel_gt_regs.h"

#include <linux/delay.h>
/*
 * 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
 *
+7 −0
Original line number Diff line number Diff line
@@ -22,6 +22,13 @@
#include "i915_reg_defs.h"
#include "gt/intel_gt_regs.h"

#include <linux/delay.h>
/*
 * 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
+7 −0
Original line number Diff line number Diff line
@@ -16,6 +16,13 @@
#include "i915_reg_defs.h"
#include "i915_reg.h"

#include <linux/delay.h>
/*
 * 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 */
+20 −9
Original line number Diff line number Diff line
@@ -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,
Loading