Skip to content

Commit 6ebc969

Browse files
dceraoloickle
authored andcommitted
drm/i915: make raw access function work on uncore
This allows us to ditch i915 in some more places. v2: use local var in check_vgpu (Paulo) Signed-off-by: Daniele Ceraolo Spurio <[email protected]> Cc: Paulo Zanoni <[email protected]> Reviewed-by: Paulo Zanoni <[email protected]> Signed-off-by: Chris Wilson <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 25286aa commit 6ebc969

File tree

3 files changed

+57
-54
lines changed

3 files changed

+57
-54
lines changed

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3484,17 +3484,17 @@ static inline u64 intel_rc6_residency_us(struct drm_i915_private *dev_priv,
34843484
#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
34853485

34863486
#define __raw_read(x, s) \
3487-
static inline uint##x##_t __raw_i915_read##x(const struct drm_i915_private *dev_priv, \
3487+
static inline uint##x##_t __raw_i915_read##x(const struct intel_uncore *uncore, \
34883488
i915_reg_t reg) \
34893489
{ \
3490-
return read##s(dev_priv->uncore.regs + i915_mmio_reg_offset(reg)); \
3490+
return read##s(uncore->regs + i915_mmio_reg_offset(reg)); \
34913491
}
34923492

34933493
#define __raw_write(x, s) \
3494-
static inline void __raw_i915_write##x(const struct drm_i915_private *dev_priv, \
3494+
static inline void __raw_i915_write##x(const struct intel_uncore *uncore, \
34953495
i915_reg_t reg, uint##x##_t val) \
34963496
{ \
3497-
write##s(val, dev_priv->uncore.regs + i915_mmio_reg_offset(reg)); \
3497+
write##s(val, uncore->regs + i915_mmio_reg_offset(reg)); \
34983498
}
34993499
__raw_read(8, b)
35003500
__raw_read(16, w)
@@ -3535,9 +3535,9 @@ __raw_write(64, q)
35353535
* therefore generally be serialised, by either the dev_priv->uncore.lock or
35363536
* a more localised lock guarding all access to that bank of registers.
35373537
*/
3538-
#define I915_READ_FW(reg__) __raw_i915_read32(dev_priv, (reg__))
3539-
#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(dev_priv, (reg__), (val__))
3540-
#define I915_WRITE64_FW(reg__, val__) __raw_i915_write64(dev_priv, (reg__), (val__))
3538+
#define I915_READ_FW(reg__) __raw_i915_read32(&dev_priv->uncore, (reg__))
3539+
#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(&dev_priv->uncore, (reg__), (val__))
3540+
#define I915_WRITE64_FW(reg__, val__) __raw_i915_write64(&dev_priv->uncore, (reg__), (val__))
35413541
#define POSTING_READ_FW(reg__) (void)I915_READ_FW(reg__)
35423542

35433543
/* "Broadcast RGB" property */

drivers/gpu/drm/i915/i915_vgpu.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,23 @@
6060
*/
6161
void i915_check_vgpu(struct drm_i915_private *dev_priv)
6262
{
63+
struct intel_uncore *uncore = &dev_priv->uncore;
6364
u64 magic;
6465
u16 version_major;
6566

6667
BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE);
6768

68-
magic = __raw_i915_read64(dev_priv, vgtif_reg(magic));
69+
magic = __raw_i915_read64(uncore, vgtif_reg(magic));
6970
if (magic != VGT_MAGIC)
7071
return;
7172

72-
version_major = __raw_i915_read16(dev_priv, vgtif_reg(version_major));
73+
version_major = __raw_i915_read16(uncore, vgtif_reg(version_major));
7374
if (version_major < VGT_VERSION_MAJOR) {
7475
DRM_INFO("VGT interface version mismatch!\n");
7576
return;
7677
}
7778

78-
dev_priv->vgpu.caps = __raw_i915_read32(dev_priv, vgtif_reg(vgt_caps));
79+
dev_priv->vgpu.caps = __raw_i915_read32(uncore, vgtif_reg(vgt_caps));
7980

8081
dev_priv->vgpu.active = true;
8182
DRM_INFO("Virtual GPU for Intel GVT-g detected.\n");

drivers/gpu/drm/i915/intel_uncore.c

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#define FORCEWAKE_ACK_TIMEOUT_MS 50
3232
#define GT_FIFO_TIMEOUT_MS 10
3333

34-
#define __raw_posting_read(dev_priv__, reg__) (void)__raw_i915_read32((dev_priv__), (reg__))
34+
#define __raw_posting_read(uncore__, reg__) (void)__raw_i915_read32((uncore__), (reg__))
3535

3636
static const char * const forcewake_domain_names[] = {
3737
"render",
@@ -275,23 +275,23 @@ fw_domains_reset(struct intel_uncore *uncore,
275275
fw_domain_reset(d);
276276
}
277277

278-
static inline u32 gt_thread_status(struct drm_i915_private *dev_priv)
278+
static inline u32 gt_thread_status(struct intel_uncore *uncore)
279279
{
280280
u32 val;
281281

282-
val = __raw_i915_read32(dev_priv, GEN6_GT_THREAD_STATUS_REG);
282+
val = __raw_i915_read32(uncore, GEN6_GT_THREAD_STATUS_REG);
283283
val &= GEN6_GT_THREAD_STATUS_CORE_MASK;
284284

285285
return val;
286286
}
287287

288-
static void __gen6_gt_wait_for_thread_c0(struct drm_i915_private *dev_priv)
288+
static void __gen6_gt_wait_for_thread_c0(struct intel_uncore *uncore)
289289
{
290290
/*
291291
* w/a for a sporadic read returning 0 by waiting for the GT
292292
* thread to wake up.
293293
*/
294-
WARN_ONCE(wait_for_atomic_us(gt_thread_status(dev_priv) == 0, 5000),
294+
WARN_ONCE(wait_for_atomic_us(gt_thread_status(uncore) == 0, 5000),
295295
"GT thread status wait timed out\n");
296296
}
297297

@@ -301,30 +301,29 @@ static void fw_domains_get_with_thread_status(struct intel_uncore *uncore,
301301
fw_domains_get(uncore, fw_domains);
302302

303303
/* WaRsForcewakeWaitTC0:snb,ivb,hsw,bdw,vlv */
304-
__gen6_gt_wait_for_thread_c0(uncore_to_i915(uncore));
304+
__gen6_gt_wait_for_thread_c0(uncore);
305305
}
306306

307-
static inline u32 fifo_free_entries(struct drm_i915_private *dev_priv)
307+
static inline u32 fifo_free_entries(struct intel_uncore *uncore)
308308
{
309-
u32 count = __raw_i915_read32(dev_priv, GTFIFOCTL);
309+
u32 count = __raw_i915_read32(uncore, GTFIFOCTL);
310310

311311
return count & GT_FIFO_FREE_ENTRIES_MASK;
312312
}
313313

314-
static void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
314+
static void __gen6_gt_wait_for_fifo(struct intel_uncore *uncore)
315315
{
316-
struct intel_uncore *uncore = &dev_priv->uncore;
317316
u32 n;
318317

319318
/* On VLV, FIFO will be shared by both SW and HW.
320319
* So, we need to read the FREE_ENTRIES everytime */
321-
if (IS_VALLEYVIEW(dev_priv))
322-
n = fifo_free_entries(dev_priv);
320+
if (IS_VALLEYVIEW(uncore_to_i915(uncore)))
321+
n = fifo_free_entries(uncore);
323322
else
324323
n = uncore->fifo_count;
325324

326325
if (n <= GT_FIFO_NUM_RESERVED_ENTRIES) {
327-
if (wait_for_atomic((n = fifo_free_entries(dev_priv)) >
326+
if (wait_for_atomic((n = fifo_free_entries(uncore)) >
328327
GT_FIFO_NUM_RESERVED_ENTRIES,
329328
GT_FIFO_TIMEOUT_MS)) {
330329
DRM_DEBUG("GT_FIFO timeout, entries: %u\n", n);
@@ -452,7 +451,7 @@ static void intel_uncore_edram_detect(struct drm_i915_private *dev_priv)
452451
if (IS_HASWELL(dev_priv) ||
453452
IS_BROADWELL(dev_priv) ||
454453
INTEL_GEN(dev_priv) >= 9) {
455-
dev_priv->edram_cap = __raw_i915_read32(dev_priv,
454+
dev_priv->edram_cap = __raw_i915_read32(&dev_priv->uncore,
456455
HSW_EDRAM_CAP);
457456

458457
/* NB: We can't write IDICR yet because we do not have gt funcs
@@ -467,43 +466,43 @@ static void intel_uncore_edram_detect(struct drm_i915_private *dev_priv)
467466
}
468467

469468
static bool
470-
fpga_check_for_unclaimed_mmio(struct drm_i915_private *dev_priv)
469+
fpga_check_for_unclaimed_mmio(struct intel_uncore *uncore)
471470
{
472471
u32 dbg;
473472

474-
dbg = __raw_i915_read32(dev_priv, FPGA_DBG);
473+
dbg = __raw_i915_read32(uncore, FPGA_DBG);
475474
if (likely(!(dbg & FPGA_DBG_RM_NOCLAIM)))
476475
return false;
477476

478-
__raw_i915_write32(dev_priv, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
477+
__raw_i915_write32(uncore, FPGA_DBG, FPGA_DBG_RM_NOCLAIM);
479478

480479
return true;
481480
}
482481

483482
static bool
484-
vlv_check_for_unclaimed_mmio(struct drm_i915_private *dev_priv)
483+
vlv_check_for_unclaimed_mmio(struct intel_uncore *uncore)
485484
{
486485
u32 cer;
487486

488-
cer = __raw_i915_read32(dev_priv, CLAIM_ER);
487+
cer = __raw_i915_read32(uncore, CLAIM_ER);
489488
if (likely(!(cer & (CLAIM_ER_OVERFLOW | CLAIM_ER_CTR_MASK))))
490489
return false;
491490

492-
__raw_i915_write32(dev_priv, CLAIM_ER, CLAIM_ER_CLR);
491+
__raw_i915_write32(uncore, CLAIM_ER, CLAIM_ER_CLR);
493492

494493
return true;
495494
}
496495

497496
static bool
498-
gen6_check_for_fifo_debug(struct drm_i915_private *dev_priv)
497+
gen6_check_for_fifo_debug(struct intel_uncore *uncore)
499498
{
500499
u32 fifodbg;
501500

502-
fifodbg = __raw_i915_read32(dev_priv, GTFIFODBG);
501+
fifodbg = __raw_i915_read32(uncore, GTFIFODBG);
503502

504503
if (unlikely(fifodbg)) {
505504
DRM_DEBUG_DRIVER("GTFIFODBG = 0x08%x\n", fifodbg);
506-
__raw_i915_write32(dev_priv, GTFIFODBG, fifodbg);
505+
__raw_i915_write32(uncore, GTFIFODBG, fifodbg);
507506
}
508507

509508
return fifodbg;
@@ -512,16 +511,17 @@ gen6_check_for_fifo_debug(struct drm_i915_private *dev_priv)
512511
static bool
513512
check_for_unclaimed_mmio(struct drm_i915_private *dev_priv)
514513
{
514+
struct intel_uncore *uncore = &dev_priv->uncore;
515515
bool ret = false;
516516

517517
if (HAS_FPGA_DBG_UNCLAIMED(dev_priv))
518-
ret |= fpga_check_for_unclaimed_mmio(dev_priv);
518+
ret |= fpga_check_for_unclaimed_mmio(uncore);
519519

520520
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
521-
ret |= vlv_check_for_unclaimed_mmio(dev_priv);
521+
ret |= vlv_check_for_unclaimed_mmio(uncore);
522522

523523
if (IS_GEN_RANGE(dev_priv, 6, 7))
524-
ret |= gen6_check_for_fifo_debug(dev_priv);
524+
ret |= gen6_check_for_fifo_debug(uncore);
525525

526526
return ret;
527527
}
@@ -537,8 +537,8 @@ static void __intel_uncore_early_sanitize(struct intel_uncore *uncore,
537537

538538
/* WaDisableShadowRegForCpd:chv */
539539
if (IS_CHERRYVIEW(i915)) {
540-
__raw_i915_write32(i915, GTFIFOCTL,
541-
__raw_i915_read32(i915, GTFIFOCTL) |
540+
__raw_i915_write32(uncore, GTFIFOCTL,
541+
__raw_i915_read32(uncore, GTFIFOCTL) |
542542
GT_FIFO_CTL_BLOCK_ALL_POLICY_STALL |
543543
GT_FIFO_CTL_RC6_POLICY_STALL);
544544
}
@@ -550,7 +550,7 @@ static void __intel_uncore_early_sanitize(struct intel_uncore *uncore,
550550
uncore->funcs.force_wake_get(uncore, restore_forcewake);
551551

552552
if (IS_GEN_RANGE(i915, 6, 7))
553-
uncore->fifo_count = fifo_free_entries(i915);
553+
uncore->fifo_count = fifo_free_entries(uncore);
554554
spin_unlock_irq(&uncore->lock);
555555
}
556556
iosf_mbi_punit_release();
@@ -1063,12 +1063,12 @@ static const struct intel_forcewake_range __gen11_fw_ranges[] = {
10631063
};
10641064

10651065
static void
1066-
ilk_dummy_write(struct drm_i915_private *dev_priv)
1066+
ilk_dummy_write(struct intel_uncore *uncore)
10671067
{
10681068
/* WaIssueDummyWriteToWakeupFromRC6:ilk Issue a dummy write to wake up
10691069
* the chip from rc6 before touching it for real. MI_MODE is masked,
10701070
* hence harmless to write 0 into. */
1071-
__raw_i915_write32(dev_priv, MI_MODE, 0);
1071+
__raw_i915_write32(uncore, MI_MODE, 0);
10721072
}
10731073

10741074
static void
@@ -1098,6 +1098,7 @@ unclaimed_reg_debug(struct drm_i915_private *dev_priv,
10981098
}
10991099

11001100
#define GEN2_READ_HEADER(x) \
1101+
struct intel_uncore *uncore = &dev_priv->uncore; \
11011102
u##x val = 0; \
11021103
assert_rpm_wakelock_held(dev_priv);
11031104

@@ -1109,16 +1110,16 @@ unclaimed_reg_debug(struct drm_i915_private *dev_priv,
11091110
static u##x \
11101111
gen2_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) { \
11111112
GEN2_READ_HEADER(x); \
1112-
val = __raw_i915_read##x(dev_priv, reg); \
1113+
val = __raw_i915_read##x(uncore, reg); \
11131114
GEN2_READ_FOOTER; \
11141115
}
11151116

11161117
#define __gen5_read(x) \
11171118
static u##x \
11181119
gen5_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) { \
11191120
GEN2_READ_HEADER(x); \
1120-
ilk_dummy_write(dev_priv); \
1121-
val = __raw_i915_read##x(dev_priv, reg); \
1121+
ilk_dummy_write(uncore); \
1122+
val = __raw_i915_read##x(uncore, reg); \
11221123
GEN2_READ_FOOTER; \
11231124
}
11241125

@@ -1188,7 +1189,7 @@ func##_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) {
11881189
fw_engine = __##func##_reg_read_fw_domains(uncore, offset); \
11891190
if (fw_engine) \
11901191
__force_wake_auto(uncore, fw_engine); \
1191-
val = __raw_i915_read##x(dev_priv, reg); \
1192+
val = __raw_i915_read##x(uncore, reg); \
11921193
GEN6_READ_FOOTER; \
11931194
}
11941195
#define __gen6_read(x) __gen_read(gen6, x)
@@ -1215,6 +1216,7 @@ __gen6_read(64)
12151216
#undef GEN6_READ_HEADER
12161217

12171218
#define GEN2_WRITE_HEADER \
1219+
struct intel_uncore *uncore = &dev_priv->uncore; \
12181220
trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
12191221
assert_rpm_wakelock_held(dev_priv); \
12201222

@@ -1224,16 +1226,16 @@ __gen6_read(64)
12241226
static void \
12251227
gen2_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool trace) { \
12261228
GEN2_WRITE_HEADER; \
1227-
__raw_i915_write##x(dev_priv, reg, val); \
1229+
__raw_i915_write##x(uncore, reg, val); \
12281230
GEN2_WRITE_FOOTER; \
12291231
}
12301232

12311233
#define __gen5_write(x) \
12321234
static void \
12331235
gen5_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool trace) { \
12341236
GEN2_WRITE_HEADER; \
1235-
ilk_dummy_write(dev_priv); \
1236-
__raw_i915_write##x(dev_priv, reg, val); \
1237+
ilk_dummy_write(uncore); \
1238+
__raw_i915_write##x(uncore, reg, val); \
12371239
GEN2_WRITE_FOOTER; \
12381240
}
12391241

@@ -1268,8 +1270,8 @@ static void \
12681270
gen6_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool trace) { \
12691271
GEN6_WRITE_HEADER; \
12701272
if (NEEDS_FORCE_WAKE(offset)) \
1271-
__gen6_gt_wait_for_fifo(dev_priv); \
1272-
__raw_i915_write##x(dev_priv, reg, val); \
1273+
__gen6_gt_wait_for_fifo(uncore); \
1274+
__raw_i915_write##x(uncore, reg, val); \
12731275
GEN6_WRITE_FOOTER; \
12741276
}
12751277

@@ -1281,7 +1283,7 @@ func##_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, boo
12811283
fw_engine = __##func##_reg_write_fw_domains(uncore, offset); \
12821284
if (fw_engine) \
12831285
__force_wake_auto(uncore, fw_engine); \
1284-
__raw_i915_write##x(dev_priv, reg, val); \
1286+
__raw_i915_write##x(uncore, reg, val); \
12851287
GEN6_WRITE_FOOTER; \
12861288
}
12871289
#define __gen8_write(x) __gen_write(gen8, x)
@@ -1468,15 +1470,15 @@ static void intel_uncore_fw_domains_init(struct intel_uncore *uncore)
14681470
* before the ecobus check.
14691471
*/
14701472

1471-
__raw_i915_write32(i915, FORCEWAKE, 0);
1472-
__raw_posting_read(i915, ECOBUS);
1473+
__raw_i915_write32(uncore, FORCEWAKE, 0);
1474+
__raw_posting_read(uncore, ECOBUS);
14731475

14741476
fw_domain_init(uncore, FW_DOMAIN_ID_RENDER,
14751477
FORCEWAKE_MT, FORCEWAKE_MT_ACK);
14761478

14771479
spin_lock_irq(&uncore->lock);
14781480
fw_domains_get_with_thread_status(uncore, FORCEWAKE_RENDER);
1479-
ecobus = __raw_i915_read32(i915, ECOBUS);
1481+
ecobus = __raw_i915_read32(uncore, ECOBUS);
14801482
fw_domains_put(uncore, FORCEWAKE_RENDER);
14811483
spin_unlock_irq(&uncore->lock);
14821484

0 commit comments

Comments
 (0)