xref: /linux/drivers/gpu/drm/xe/xe_mmio.c (revision 2a31b5378c6db9c4a8d399e5d10d32cd4b732bef)
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright © 2021-2023 Intel Corporation
4  */
5 
6 #include "xe_mmio.h"
7 
8 #include <linux/delay.h>
9 #include <linux/io-64-nonatomic-lo-hi.h>
10 #include <linux/minmax.h>
11 #include <linux/pci.h>
12 
13 #include <drm/drm_managed.h>
14 
15 #include "regs/xe_bars.h"
16 #include "xe_device.h"
17 #include "xe_gt_sriov_vf.h"
18 #include "xe_printk.h"
19 #include "xe_sriov.h"
20 #include "xe_tile_printk.h"
21 #include "xe_trace.h"
22 #include "xe_wa.h"
23 
24 #include "generated/xe_device_wa_oob.h"
25 
26 /*
27  * On multi-tile devices, partition the BAR space for MMIO on each tile,
28  * possibly accounting for register override on the number of tiles available.
29  * tile_mmio_size contains both the tile's 4MB register space, as well as
30  * additional space for the GTT and other (possibly unused) regions).
31  * Resulting memory layout is like below:
32  *
33  * .----------------------. <- tile_count * tile_mmio_size
34  * |         ....         |
35  * |----------------------| <- 2 * tile_mmio_size
36  * |   tile1 GTT + other  |
37  * |----------------------| <- 1 * tile_mmio_size + 4MB
38  * |   tile1->mmio.regs   |
39  * |----------------------| <- 1 * tile_mmio_size
40  * |   tile0 GTT + other  |
41  * |----------------------| <- 4MB
42  * |   tile0->mmio.regs   |
43  * '----------------------' <- 0MB
44  */
45 static void mmio_multi_tile_setup(struct xe_device *xe, size_t tile_mmio_size)
46 {
47 	struct xe_tile *tile;
48 	u8 id;
49 
50 	for_each_remote_tile(tile, xe, id)
51 		xe_mmio_init(&tile->mmio, tile, xe->mmio.regs + id * tile_mmio_size, SZ_4M);
52 }
53 
54 /**
55  * xe_mmio_probe_tiles() - Initialize all tiles' MMIO
56  * @xe: the &xe_device
57  *
58  * Initialize the remaining tiles' MMIO instances.
59  *
60  * Return: 0 on success or a negative error code on failure.
61  */
62 int xe_mmio_probe_tiles(struct xe_device *xe)
63 {
64 	size_t tile_mmio_size = SZ_16M;
65 
66 	/*
67 	 * Nothing to be done as tile 0 has already been setup earlier with the
68 	 * entire BAR mapped - see xe_mmio_probe_early()
69 	 */
70 	if (xe->info.tile_count == 1)
71 		return 0;
72 
73 	if (xe->mmio.size < xe->info.tile_count * tile_mmio_size) {
74 		xe_err(xe, "GTTMMADR_BAR is too small for %d tiles: %zu\n",
75 		       xe->info.tile_count, xe->mmio.size);
76 		return -EIO;
77 	}
78 
79 	mmio_multi_tile_setup(xe, tile_mmio_size);
80 	return 0;
81 }
82 
83 static void mmio_fini(void *arg)
84 {
85 	struct xe_device *xe = arg;
86 
87 	xe->mmio.regs = NULL;
88 }
89 
90 /**
91  * xe_mmio_probe_early() - Probe and initialize device's MMIO
92  * @xe: the &xe_device
93  *
94  * Map the entire GTTMMADR_BAR and initialize the first tile's MMIO instance.
95  *
96  * The first 16MB of the GTTMMADR_BAR always belongs to the root tile, and
97  * includes: registers (0-4MB), reserved space (4MB-8MB) and GGTT (8MB-16MB).
98  *
99  * Return: 0 on success or a negative error code on failure.
100  */
101 int xe_mmio_probe_early(struct xe_device *xe)
102 {
103 	struct xe_tile *root_tile = xe_device_get_root_tile(xe);
104 	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
105 
106 	xe->mmio.regs = pcim_iomap(pdev, GTTMMADR_BAR, 0);
107 	if (!xe->mmio.regs) {
108 		xe_err(xe, "Failed to map GTTMMADR_BAR\n");
109 		return -EIO;
110 	}
111 
112 	xe->mmio.size = pci_resource_len(pdev, GTTMMADR_BAR);
113 	if (xe->mmio.size < SZ_16M) {
114 		xe_err(xe, "GTTMMADR_BAR is too small: %zu\n", xe->mmio.size);
115 		return -EIO;
116 	}
117 
118 	/* Setup first tile; other tiles (if present) will be setup later. */
119 	xe_mmio_init(&root_tile->mmio, root_tile, xe->mmio.regs, SZ_4M);
120 
121 	return devm_add_action_or_reset(xe->drm.dev, mmio_fini, xe);
122 }
123 ALLOW_ERROR_INJECTION(xe_mmio_probe_early, ERRNO); /* See xe_pci_probe() */
124 
125 /**
126  * xe_mmio_init() - Initialize an MMIO instance
127  * @mmio: Pointer to the MMIO instance to initialize
128  * @tile: The tile to which the MMIO region belongs
129  * @ptr: Pointer to the start of the MMIO region
130  * @size: The size of the MMIO region in bytes
131  *
132  * This is a convenience function for minimal initialization of struct xe_mmio.
133  */
134 void xe_mmio_init(struct xe_mmio *mmio, struct xe_tile *tile, void __iomem *ptr, u32 size)
135 {
136 	xe_tile_assert(tile, size <= XE_REG_ADDR_MAX);
137 
138 	mmio->regs = ptr;
139 	mmio->regs_size = size;
140 	mmio->tile = tile;
141 }
142 
143 static bool mmio_available(struct xe_mmio *mmio)
144 {
145 	return !xe_tile_WARN_ON_ONCE(mmio->tile, !mmio->tile->xe->mmio.regs);
146 }
147 
148 static void mmio_flush_pending_writes(struct xe_mmio *mmio)
149 {
150 #define DUMMY_REG_OFFSET	0x130030
151 	int i;
152 
153 	if (!XE_DEVICE_WA(mmio->tile->xe, 15015404425))
154 		return;
155 
156 	/* 4 dummy writes */
157 	for (i = 0; i < 4; i++)
158 		writel(0, mmio->regs + DUMMY_REG_OFFSET);
159 }
160 
161 u8 xe_mmio_read8(struct xe_mmio *mmio, struct xe_reg reg)
162 {
163 	u32 addr = xe_mmio_adjusted_addr(mmio, reg.addr);
164 	u8 val;
165 
166 	if (!mmio_available(mmio))
167 		return 0;
168 
169 	mmio_flush_pending_writes(mmio);
170 
171 	val = readb(mmio->regs + addr);
172 	trace_xe_reg_rw(mmio, false, addr, val, sizeof(val));
173 
174 	return val;
175 }
176 
177 void xe_mmio_write8(struct xe_mmio *mmio, struct xe_reg reg, u8 val)
178 {
179 	u32 addr = xe_mmio_adjusted_addr(mmio, reg.addr);
180 
181 	if (!mmio_available(mmio))
182 		return;
183 
184 	trace_xe_reg_rw(mmio, true, addr, val, sizeof(val));
185 
186 	writeb(val, mmio->regs + addr);
187 }
188 
189 u16 xe_mmio_read16(struct xe_mmio *mmio, struct xe_reg reg)
190 {
191 	u32 addr = xe_mmio_adjusted_addr(mmio, reg.addr);
192 	u16 val;
193 
194 	if (!mmio_available(mmio))
195 		return 0;
196 
197 	mmio_flush_pending_writes(mmio);
198 
199 	val = readw(mmio->regs + addr);
200 	trace_xe_reg_rw(mmio, false, addr, val, sizeof(val));
201 
202 	return val;
203 }
204 
205 void xe_mmio_write32(struct xe_mmio *mmio, struct xe_reg reg, u32 val)
206 {
207 	u32 addr = xe_mmio_adjusted_addr(mmio, reg.addr);
208 
209 	if (!mmio_available(mmio))
210 		return;
211 
212 	trace_xe_reg_rw(mmio, true, addr, val, sizeof(val));
213 
214 	if (!reg.vf && IS_SRIOV_VF(mmio->tile->xe))
215 		xe_gt_sriov_vf_write32(mmio->sriov_vf_gt ?:
216 				       mmio->tile->primary_gt, reg, val);
217 	else
218 		writel(val, mmio->regs + addr);
219 }
220 
221 u32 xe_mmio_read32(struct xe_mmio *mmio, struct xe_reg reg)
222 {
223 	u32 addr = xe_mmio_adjusted_addr(mmio, reg.addr);
224 	u32 val;
225 
226 	if (!mmio_available(mmio))
227 		return 0;
228 
229 	mmio_flush_pending_writes(mmio);
230 
231 	if (!reg.vf && IS_SRIOV_VF(mmio->tile->xe))
232 		val = xe_gt_sriov_vf_read32(mmio->sriov_vf_gt ?:
233 					    mmio->tile->primary_gt, reg);
234 	else
235 		val = readl(mmio->regs + addr);
236 
237 	trace_xe_reg_rw(mmio, false, addr, val, sizeof(val));
238 
239 	return val;
240 }
241 
242 u32 xe_mmio_rmw32(struct xe_mmio *mmio, struct xe_reg reg, u32 clr, u32 set)
243 {
244 	u32 old, reg_val;
245 
246 	old = xe_mmio_read32(mmio, reg);
247 	reg_val = (old & ~clr) | set;
248 	xe_mmio_write32(mmio, reg, reg_val);
249 
250 	return old;
251 }
252 
253 int xe_mmio_write32_and_verify(struct xe_mmio *mmio,
254 			       struct xe_reg reg, u32 val, u32 mask, u32 eval)
255 {
256 	u32 reg_val;
257 
258 	xe_mmio_write32(mmio, reg, val);
259 	reg_val = xe_mmio_read32(mmio, reg);
260 
261 	return (reg_val & mask) != eval ? -EINVAL : 0;
262 }
263 
264 bool xe_mmio_in_range(const struct xe_mmio *mmio,
265 		      const struct xe_mmio_range *range,
266 		      struct xe_reg reg)
267 {
268 	u32 addr = xe_mmio_adjusted_addr(mmio, reg.addr);
269 
270 	return range && addr >= range->start && addr <= range->end;
271 }
272 
273 /**
274  * xe_mmio_read64_2x32() - Read a 64-bit register as two 32-bit reads
275  * @mmio: MMIO target
276  * @reg: register to read value from
277  *
278  * Although Intel GPUs have some 64-bit registers, the hardware officially
279  * only supports GTTMMADR register reads of 32 bits or smaller.  Even if
280  * a readq operation may return a reasonable value, that violation of the
281  * spec shouldn't be relied upon and all 64-bit register reads should be
282  * performed as two 32-bit reads of the upper and lower dwords.
283  *
284  * When reading registers that may be changing (such as
285  * counters), a rollover of the lower dword between the two 32-bit reads
286  * can be problematic.  This function attempts to ensure the upper dword has
287  * stabilized before returning the 64-bit value.
288  *
289  * Note that because this function may re-read the register multiple times
290  * while waiting for the value to stabilize it should not be used to read
291  * any registers where read operations have side effects.
292  *
293  * Returns the value of the 64-bit register.
294  */
295 u64 xe_mmio_read64_2x32(struct xe_mmio *mmio, struct xe_reg reg)
296 {
297 	struct xe_reg reg_udw = { .addr = reg.addr + 0x4 };
298 	u32 ldw, udw, oldudw, retries;
299 
300 	/*
301 	 * The two dwords of a 64-bit register can never straddle the offset
302 	 * adjustment cutoff.
303 	 */
304 	xe_tile_assert(mmio->tile, !in_range(mmio->adj_limit, reg.addr + 1, 7));
305 
306 	oldudw = xe_mmio_read32(mmio, reg_udw);
307 	for (retries = 5; retries; --retries) {
308 		ldw = xe_mmio_read32(mmio, reg);
309 		udw = xe_mmio_read32(mmio, reg_udw);
310 
311 		if (udw == oldudw)
312 			break;
313 
314 		oldudw = udw;
315 	}
316 
317 	xe_tile_WARN(mmio->tile, retries == 0,
318 		     "MMIO: 64-bit read of %#x did not stabilize\n", reg.addr);
319 
320 	return (u64)udw << 32 | ldw;
321 }
322 
323 #define __XE_MMIO_WAIT_MAX_BACKOFF_100MS (100 * USEC_PER_MSEC)
324 static int __xe_mmio_wait32(struct xe_mmio *mmio, struct xe_reg reg, u32 mask, u32 val,
325 			    u32 timeout_us, u32 *out_val, bool atomic, bool expect_match)
326 {
327 	ktime_t cur = ktime_get_raw();
328 	const ktime_t end = ktime_add_us(cur, timeout_us);
329 	int ret = -ETIMEDOUT;
330 	s64 wait = 10;
331 	u32 read;
332 	bool check;
333 
334 	for (;;) {
335 		read = xe_mmio_read32(mmio, reg);
336 
337 		check = (read & mask) == val;
338 		if (!expect_match)
339 			check = !check;
340 
341 		if (check) {
342 			ret = 0;
343 			break;
344 		}
345 
346 		cur = ktime_get_raw();
347 		if (!ktime_before(cur, end))
348 			break;
349 
350 		if (ktime_after(ktime_add_us(cur, wait), end))
351 			wait = ktime_us_delta(end, cur);
352 
353 		if (atomic)
354 			udelay(min_t(s64, wait, (MAX_UDELAY_MS * 1000)));
355 		else
356 			usleep_range(wait, wait << 1);
357 		wait = min_t(s64, wait << 1, __XE_MMIO_WAIT_MAX_BACKOFF_100MS);
358 	}
359 
360 	if (ret != 0) {
361 		read = xe_mmio_read32(mmio, reg);
362 
363 		check = (read & mask) == val;
364 		if (!expect_match)
365 			check = !check;
366 
367 		if (check)
368 			ret = 0;
369 	}
370 
371 	if (out_val)
372 		*out_val = read;
373 
374 	return ret;
375 }
376 
377 /**
378  * xe_mmio_wait32() - Wait for a register to match the desired masked value
379  * @mmio: MMIO target
380  * @reg: register to read value from
381  * @mask: mask to be applied to the value read from the register
382  * @val: desired value after applying the mask
383  * @timeout_us: time out after this period of time. Wait logic tries to be
384  * smart, applying an exponential backoff until @timeout_us is reached.
385  * @out_val: if not NULL, points where to store the last unmasked value
386  * @atomic: needs to be true if calling from an atomic context
387  *
388  * This function polls for the desired masked value and returns zero on success
389  * or -ETIMEDOUT if timed out.
390  *
391  * Note that @timeout_us represents the minimum amount of time to wait before
392  * giving up. The actual time taken by this function can be a little more than
393  * @timeout_us for different reasons, specially in non-atomic contexts. Thus,
394  * it is possible that this function succeeds even after @timeout_us has passed.
395  */
396 int xe_mmio_wait32(struct xe_mmio *mmio, struct xe_reg reg, u32 mask, u32 val, u32 timeout_us,
397 		   u32 *out_val, bool atomic)
398 {
399 	return __xe_mmio_wait32(mmio, reg, mask, val, timeout_us, out_val, atomic, true);
400 }
401 
402 /**
403  * xe_mmio_wait32_not() - Wait for a register to return anything other than the given masked value
404  * @mmio: MMIO target
405  * @reg: register to read value from
406  * @mask: mask to be applied to the value read from the register
407  * @val: value not to be matched after applying the mask
408  * @timeout_us: time out after this period of time
409  * @out_val: if not NULL, points where to store the last unmasked value
410  * @atomic: needs to be true if calling from an atomic context
411  *
412  * This function works exactly like xe_mmio_wait32() with the exception that
413  * @val is expected not to be matched.
414  */
415 int xe_mmio_wait32_not(struct xe_mmio *mmio, struct xe_reg reg, u32 mask, u32 val, u32 timeout_us,
416 		       u32 *out_val, bool atomic)
417 {
418 	return __xe_mmio_wait32(mmio, reg, mask, val, timeout_us, out_val, atomic, false);
419 }
420 
421 #ifdef CONFIG_PCI_IOV
422 static size_t vf_regs_stride(struct xe_device *xe)
423 {
424 	return GRAPHICS_VERx100(xe) > 1200 ? 0x400 : 0x1000;
425 }
426 
427 /**
428  * xe_mmio_init_vf_view() - Initialize an MMIO instance for accesses like the VF
429  * @mmio: the target &xe_mmio to initialize as VF's view
430  * @base: the source &xe_mmio to initialize from
431  * @vfid: the VF identifier
432  */
433 void xe_mmio_init_vf_view(struct xe_mmio *mmio, const struct xe_mmio *base, unsigned int vfid)
434 {
435 	struct xe_tile *tile = base->tile;
436 	struct xe_device *xe = tile->xe;
437 	size_t offset = vf_regs_stride(xe) * vfid;
438 
439 	xe_assert(xe, IS_SRIOV_PF(xe));
440 	xe_assert(xe, vfid);
441 	xe_assert(xe, !base->sriov_vf_gt);
442 	xe_assert(xe, base->regs_size > offset);
443 
444 	*mmio = *base;
445 	mmio->regs += offset;
446 	mmio->regs_size -= offset;
447 }
448 #endif
449