Skip to content

Commit b2268e2

Browse files
committed
Merge tag 'drm-intel-next-fixes-2022-12-01' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
- Multi-cast register fix (Matt) - Fix workarounds on gen2-3 (Tvrtko) - Bigjoiner fix (Ville) - Make Guc default_list a const data (Jani) - Acquire forcewake before uncore read (Umesh) - Selftest fix (Umesh) - HuC related fixes (Daniele) - Fix some incorrect return values (Janusz) - Fix a memory leak in bios related code (Xia) - Fix VBT send packet port selection (Mikko) - DG2's DMC fix bump for Register noclaims and few restore (Gustavo) Signed-off-by: Dave Airlie <[email protected]> From: Rodrigo Vivi <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 077bd80 + 7d579ef commit b2268e2

14 files changed

+113
-65
lines changed

drivers/gpu/drm/i915/display/intel_bios.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ static void *generate_lfp_data_ptrs(struct drm_i915_private *i915,
414414
ptrs->lvds_entries++;
415415

416416
if (size != 0 || ptrs->lvds_entries != 3) {
417-
kfree(ptrs);
417+
kfree(ptrs_block);
418418
return NULL;
419419
}
420420

drivers/gpu/drm/i915/display/intel_display.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3733,12 +3733,16 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc,
37333733

37343734
static u8 bigjoiner_pipes(struct drm_i915_private *i915)
37353735
{
3736+
u8 pipes;
3737+
37363738
if (DISPLAY_VER(i915) >= 12)
3737-
return BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D);
3739+
pipes = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D);
37383740
else if (DISPLAY_VER(i915) >= 11)
3739-
return BIT(PIPE_B) | BIT(PIPE_C);
3741+
pipes = BIT(PIPE_B) | BIT(PIPE_C);
37403742
else
3741-
return 0;
3743+
pipes = 0;
3744+
3745+
return pipes & RUNTIME_INFO(i915)->pipe_mask;
37423746
}
37433747

37443748
static bool transcoder_ddi_func_is_enabled(struct drm_i915_private *dev_priv,

drivers/gpu/drm/i915/display/intel_dmc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252

5353
#define DISPLAY_VER12_DMC_MAX_FW_SIZE ICL_DMC_MAX_FW_SIZE
5454

55-
#define DG2_DMC_PATH DMC_PATH(dg2, 2, 07)
56-
#define DG2_DMC_VERSION_REQUIRED DMC_VERSION(2, 07)
55+
#define DG2_DMC_PATH DMC_PATH(dg2, 2, 08)
56+
#define DG2_DMC_VERSION_REQUIRED DMC_VERSION(2, 8)
5757
MODULE_FIRMWARE(DG2_DMC_PATH);
5858

5959
#define ADLP_DMC_PATH DMC_PATH(adlp, 2, 16)

drivers/gpu/drm/i915/display/intel_dsi_vbt.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,9 @@ static enum port intel_dsi_seq_port_to_port(struct intel_dsi *intel_dsi,
137137
return ffs(intel_dsi->ports) - 1;
138138

139139
if (seq_port) {
140-
if (intel_dsi->ports & PORT_B)
140+
if (intel_dsi->ports & BIT(PORT_B))
141141
return PORT_B;
142-
else if (intel_dsi->ports & PORT_C)
142+
else if (intel_dsi->ports & BIT(PORT_C))
143143
return PORT_C;
144144
}
145145

drivers/gpu/drm/i915/gt/intel_gt.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -677,8 +677,13 @@ int intel_gt_wait_for_idle(struct intel_gt *gt, long timeout)
677677
return -EINTR;
678678
}
679679

680-
return timeout ? timeout : intel_uc_wait_for_idle(&gt->uc,
681-
remaining_timeout);
680+
if (timeout)
681+
return timeout;
682+
683+
if (remaining_timeout < 0)
684+
remaining_timeout = 0;
685+
686+
return intel_uc_wait_for_idle(&gt->uc, remaining_timeout);
682687
}
683688

684689
int intel_gt_init(struct intel_gt *gt)
@@ -1035,9 +1040,9 @@ get_reg_and_bit(const struct intel_engine_cs *engine, const bool gen8,
10351040
static int wait_for_invalidate(struct intel_gt *gt, struct reg_and_bit rb)
10361041
{
10371042
if (GRAPHICS_VER_FULL(gt->i915) >= IP_VER(12, 50))
1038-
return intel_gt_mcr_wait_for_reg_fw(gt, rb.mcr_reg, rb.bit, 0,
1039-
TLB_INVAL_TIMEOUT_US,
1040-
TLB_INVAL_TIMEOUT_MS);
1043+
return intel_gt_mcr_wait_for_reg(gt, rb.mcr_reg, rb.bit, 0,
1044+
TLB_INVAL_TIMEOUT_US,
1045+
TLB_INVAL_TIMEOUT_MS);
10411046
else
10421047
return __intel_wait_for_register_fw(gt->uncore, rb.reg, rb.bit, 0,
10431048
TLB_INVAL_TIMEOUT_US,

drivers/gpu/drm/i915/gt/intel_gt_mcr.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -730,17 +730,19 @@ void intel_gt_mcr_get_ss_steering(struct intel_gt *gt, unsigned int dss,
730730
*
731731
* Return: 0 if the register matches the desired condition, or -ETIMEDOUT.
732732
*/
733-
int intel_gt_mcr_wait_for_reg_fw(struct intel_gt *gt,
734-
i915_mcr_reg_t reg,
735-
u32 mask,
736-
u32 value,
737-
unsigned int fast_timeout_us,
738-
unsigned int slow_timeout_ms)
733+
int intel_gt_mcr_wait_for_reg(struct intel_gt *gt,
734+
i915_mcr_reg_t reg,
735+
u32 mask,
736+
u32 value,
737+
unsigned int fast_timeout_us,
738+
unsigned int slow_timeout_ms)
739739
{
740-
u32 reg_value = 0;
741-
#define done (((reg_value = intel_gt_mcr_read_any_fw(gt, reg)) & mask) == value)
742740
int ret;
743741

742+
lockdep_assert_not_held(&gt->uncore->lock);
743+
744+
#define done ((intel_gt_mcr_read_any(gt, reg) & mask) == value)
745+
744746
/* Catch any overuse of this function */
745747
might_sleep_if(slow_timeout_ms);
746748
GEM_BUG_ON(fast_timeout_us > 20000);

drivers/gpu/drm/i915/gt/intel_gt_mcr.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ void intel_gt_mcr_report_steering(struct drm_printer *p, struct intel_gt *gt,
3737
void intel_gt_mcr_get_ss_steering(struct intel_gt *gt, unsigned int dss,
3838
unsigned int *group, unsigned int *instance);
3939

40-
int intel_gt_mcr_wait_for_reg_fw(struct intel_gt *gt,
41-
i915_mcr_reg_t reg,
42-
u32 mask,
43-
u32 value,
44-
unsigned int fast_timeout_us,
45-
unsigned int slow_timeout_ms);
40+
int intel_gt_mcr_wait_for_reg(struct intel_gt *gt,
41+
i915_mcr_reg_t reg,
42+
u32 mask,
43+
u32 value,
44+
unsigned int fast_timeout_us,
45+
unsigned int slow_timeout_ms);
4646

4747
/*
4848
* Helper for for_each_ss_steering loop. On pre-Xe_HP platforms, subslice

drivers/gpu/drm/i915/gt/intel_gt_requests.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ out_active: spin_lock(&timelines->lock);
199199
if (remaining_timeout)
200200
*remaining_timeout = timeout;
201201

202-
return active_count ? timeout : 0;
202+
return active_count ? timeout ?: -ETIME : 0;
203203
}
204204

205205
static void retire_work_handler(struct work_struct *work)

drivers/gpu/drm/i915/gt/intel_workarounds.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3011,7 +3011,7 @@ general_render_compute_wa_init(struct intel_engine_cs *engine, struct i915_wa_li
30113011
static void
30123012
engine_init_workarounds(struct intel_engine_cs *engine, struct i915_wa_list *wal)
30133013
{
3014-
if (I915_SELFTEST_ONLY(GRAPHICS_VER(engine->i915) < 4))
3014+
if (GRAPHICS_VER(engine->i915) < 4)
30153015
return;
30163016

30173017
engine_fake_wa_init(engine, wal);
@@ -3036,9 +3036,6 @@ void intel_engine_init_workarounds(struct intel_engine_cs *engine)
30363036
{
30373037
struct i915_wa_list *wal = &engine->wa_list;
30383038

3039-
if (GRAPHICS_VER(engine->i915) < 4)
3040-
return;
3041-
30423039
wa_init_start(wal, engine->gt, "engine", engine->name);
30433040
engine_init_workarounds(engine, wal);
30443041
wa_init_finish(wal);

drivers/gpu/drm/i915/gt/selftest_engine_pm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ static int live_engine_busy_stats(void *arg)
317317
ENGINE_TRACE(engine, "measuring busy time\n");
318318
preempt_disable();
319319
de = intel_engine_get_busy_time(engine, &t[0]);
320-
mdelay(10);
320+
mdelay(100);
321321
de = ktime_sub(intel_engine_get_busy_time(engine, &t[1]), de);
322322
preempt_enable();
323323
dt = ktime_sub(t[1], t[0]);

0 commit comments

Comments
 (0)