Skip to content

Commit 159367b

Browse files
dceraoloickle
authored andcommitted
drm/i915: always use masks on FW regs
Upper bits are reserved on gen6, so no issue if we write them. Note that we're already doing this in the non-MT case of IVB, which uses the same register. Signed-off-by: Daniele Ceraolo Spurio <[email protected]> Cc: Paulo Zanoni <[email protected]> Cc: Chris Wilson <[email protected]> Reviewed-by: Paulo Zanoni <[email protected]> Reviewed-by: Chris Wilson <[email protected]> Signed-off-by: Chris Wilson <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 7264aeb commit 159367b

File tree

2 files changed

+16
-32
lines changed

2 files changed

+16
-32
lines changed

drivers/gpu/drm/i915/intel_uncore.c

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,19 @@ intel_uncore_forcewake_domain_to_str(const enum forcewake_domain_id id)
5959
}
6060

6161
#define fw_ack(d) readl((d)->reg_ack)
62-
#define fw_set(d, val) writel((val), (d)->reg_set)
62+
#define fw_set(d, val) writel(_MASKED_BIT_ENABLE((val)), (d)->reg_set)
63+
#define fw_clear(d, val) writel(_MASKED_BIT_DISABLE((val)), (d)->reg_set)
6364

6465
static inline void
65-
fw_domain_reset(const struct intel_uncore *uncore,
66-
const struct intel_uncore_forcewake_domain *d)
66+
fw_domain_reset(const struct intel_uncore_forcewake_domain *d)
6767
{
6868
/*
6969
* We don't really know if the powerwell for the forcewake domain we are
7070
* trying to reset here does exist at this point (engines could be fused
7171
* off in ICL+), so no waiting for acks
7272
*/
73-
fw_set(d, uncore->fw_reset);
73+
/* WaRsClearFWBitsAtReset:bdw,skl */
74+
fw_clear(d, 0xffff);
7475
}
7576

7677
static inline void
@@ -146,14 +147,14 @@ fw_domain_wait_ack_with_fallback(const struct intel_uncore_forcewake_domain *d,
146147
do {
147148
wait_ack_clear(d, FORCEWAKE_KERNEL_FALLBACK);
148149

149-
fw_set(d, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL_FALLBACK));
150+
fw_set(d, FORCEWAKE_KERNEL_FALLBACK);
150151
/* Give gt some time to relax before the polling frenzy */
151152
udelay(10 * pass);
152153
wait_ack_set(d, FORCEWAKE_KERNEL_FALLBACK);
153154

154155
ack_detected = (fw_ack(d) & ack_bit) == value;
155156

156-
fw_set(d, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL_FALLBACK));
157+
fw_clear(d, FORCEWAKE_KERNEL_FALLBACK);
157158
} while (!ack_detected && pass++ < 10);
158159

159160
DRM_DEBUG_DRIVER("%s had to use fallback to %s ack, 0x%x (passes %u)\n",
@@ -176,10 +177,9 @@ fw_domain_wait_ack_clear_fallback(const struct intel_uncore_forcewake_domain *d)
176177
}
177178

178179
static inline void
179-
fw_domain_get(const struct intel_uncore *uncore,
180-
const struct intel_uncore_forcewake_domain *d)
180+
fw_domain_get(const struct intel_uncore_forcewake_domain *d)
181181
{
182-
fw_set(d, uncore->fw_set);
182+
fw_set(d, FORCEWAKE_KERNEL);
183183
}
184184

185185
static inline void
@@ -201,10 +201,9 @@ fw_domain_wait_ack_set_fallback(const struct intel_uncore_forcewake_domain *d)
201201
}
202202

203203
static inline void
204-
fw_domain_put(const struct intel_uncore *uncore,
205-
const struct intel_uncore_forcewake_domain *d)
204+
fw_domain_put(const struct intel_uncore_forcewake_domain *d)
206205
{
207-
fw_set(d, uncore->fw_clear);
206+
fw_clear(d, FORCEWAKE_KERNEL);
208207
}
209208

210209
static void
@@ -218,7 +217,7 @@ fw_domains_get(struct drm_i915_private *i915, enum forcewake_domains fw_domains)
218217

219218
for_each_fw_domain_masked(d, fw_domains, i915, tmp) {
220219
fw_domain_wait_ack_clear(d);
221-
fw_domain_get(uncore, d);
220+
fw_domain_get(d);
222221
}
223222

224223
for_each_fw_domain_masked(d, fw_domains, i915, tmp)
@@ -239,7 +238,7 @@ fw_domains_get_with_fallback(struct drm_i915_private *i915,
239238

240239
for_each_fw_domain_masked(d, fw_domains, i915, tmp) {
241240
fw_domain_wait_ack_clear_fallback(d);
242-
fw_domain_get(uncore, d);
241+
fw_domain_get(d);
243242
}
244243

245244
for_each_fw_domain_masked(d, fw_domains, i915, tmp)
@@ -258,7 +257,7 @@ fw_domains_put(struct drm_i915_private *i915, enum forcewake_domains fw_domains)
258257
GEM_BUG_ON(fw_domains & ~uncore->fw_domains);
259258

260259
for_each_fw_domain_masked(d, fw_domains, i915, tmp)
261-
fw_domain_put(uncore, d);
260+
fw_domain_put(d);
262261

263262
uncore->fw_domains_active &= ~fw_domains;
264263
}
@@ -277,7 +276,7 @@ fw_domains_reset(struct drm_i915_private *i915,
277276
GEM_BUG_ON(fw_domains & ~uncore->fw_domains);
278277

279278
for_each_fw_domain_masked(d, fw_domains, i915, tmp)
280-
fw_domain_reset(uncore, d);
279+
fw_domain_reset(d);
281280
}
282281

283282
static inline u32 gt_thread_status(struct drm_i915_private *dev_priv)
@@ -1371,7 +1370,7 @@ static void fw_domain_init(struct drm_i915_private *dev_priv,
13711370

13721371
uncore->fw_domains |= BIT(domain_id);
13731372

1374-
fw_domain_reset(uncore, d);
1373+
fw_domain_reset(d);
13751374
}
13761375

13771376
static void fw_domain_fini(struct drm_i915_private *dev_priv,
@@ -1396,17 +1395,6 @@ static void intel_uncore_fw_domains_init(struct drm_i915_private *dev_priv)
13961395
if (INTEL_GEN(dev_priv) <= 5 || intel_vgpu_active(dev_priv))
13971396
return;
13981397

1399-
if (IS_GEN(dev_priv, 6)) {
1400-
dev_priv->uncore.fw_reset = 0;
1401-
dev_priv->uncore.fw_set = FORCEWAKE_KERNEL;
1402-
dev_priv->uncore.fw_clear = 0;
1403-
} else {
1404-
/* WaRsClearFWBitsAtReset:bdw,skl */
1405-
dev_priv->uncore.fw_reset = _MASKED_BIT_DISABLE(0xffff);
1406-
dev_priv->uncore.fw_set = _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL);
1407-
dev_priv->uncore.fw_clear = _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL);
1408-
}
1409-
14101398
if (INTEL_GEN(dev_priv) >= 11) {
14111399
int i;
14121400

drivers/gpu/drm/i915/intel_uncore.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,6 @@ struct intel_uncore {
106106
enum forcewake_domains fw_domains_active;
107107
enum forcewake_domains fw_domains_saved; /* user domains saved for S3 */
108108

109-
u32 fw_set;
110-
u32 fw_clear;
111-
u32 fw_reset;
112-
113109
struct intel_uncore_forcewake_domain {
114110
enum forcewake_domain_id id;
115111
enum forcewake_domains mask;

0 commit comments

Comments
 (0)