* [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD
@ 2024-11-07 18:27 Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 01/18] drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg Gustavo Sousa
` (21 more replies)
0 siblings, 22 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Using the DMC wakelock is the official recommendation for Xe3_LPD. This
series apply fixes to the current DMC wakelock implementation and
enables it by default for Xe3_LPD. The series has been tested with a PTL
machine.
Gustavo Sousa (18):
drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg
drm/xe: Mimic i915 behavior for non-sleeping MMIO wait
drm/i915/dmc_wl: Use non-sleeping variant of MMIO wait
drm/i915/dmc_wl: Check for non-zero refcount in release work
drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states
drm/i915/dmc_wl: Use sentinel item for range tables
drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range()
drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges
drm/i915/dmc_wl: Track registers touched by the DMC
drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables
drm/i915/dmc_wl: Deal with existing references when disabling
drm/i915/dmc_wl: Couple enable/disable with dynamic DC states
drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK()
drm/i915/dmc_wl: Init only after we have runtime device info
drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK()
drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support
drm/i915/dmc_wl: Do nothing until initialized
drm/i915/xe3lpd: Use DMC wakelock by default
drivers/gpu/drm/i915/display/intel_de.h | 10 +
.../drm/i915/display/intel_display_device.h | 1 +
.../drm/i915/display/intel_display_driver.c | 2 +-
.../drm/i915/display/intel_display_params.c | 6 +-
.../drm/i915/display/intel_display_params.h | 2 +-
.../i915/display/intel_display_power_well.c | 19 +-
drivers/gpu/drm/i915/display/intel_dmc.c | 4 -
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 311 ++++++++++++++----
drivers/gpu/drm/i915/display/intel_dmc_wl.h | 24 +-
.../drm/xe/compat-i915-headers/intel_uncore.h | 11 +-
10 files changed, 317 insertions(+), 73 deletions(-)
--
2.47.0
^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v3 01/18] drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 02/18] drm/xe: Mimic i915 behavior for non-sleeping MMIO wait Gustavo Sousa
` (20 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
The macro i915_mmio_reg_offset() is the proper interface to get a
register's offset. Use that instead of looking directly at reg.reg.
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 5634ff07269d..05892a237d3a 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -91,14 +91,15 @@ static void intel_dmc_wl_work(struct work_struct *work)
spin_unlock_irqrestore(&wl->lock, flags);
}
-static bool intel_dmc_wl_check_range(u32 address)
+static bool intel_dmc_wl_check_range(i915_reg_t reg)
{
int i;
bool wl_needed = false;
+ u32 offset = i915_mmio_reg_offset(reg);
for (i = 0; i < ARRAY_SIZE(lnl_wl_range); i++) {
- if (address >= lnl_wl_range[i].start &&
- address <= lnl_wl_range[i].end) {
+ if (offset >= lnl_wl_range[i].start &&
+ offset <= lnl_wl_range[i].end) {
wl_needed = true;
break;
}
@@ -191,7 +192,7 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (!intel_dmc_wl_check_range(reg.reg))
+ if (!intel_dmc_wl_check_range(reg))
return;
spin_lock_irqsave(&wl->lock, flags);
@@ -239,7 +240,7 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (!intel_dmc_wl_check_range(reg.reg))
+ if (!intel_dmc_wl_check_range(reg))
return;
spin_lock_irqsave(&wl->lock, flags);
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 02/18] drm/xe: Mimic i915 behavior for non-sleeping MMIO wait
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 01/18] drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 03/18] drm/i915/dmc_wl: Use non-sleeping variant of " Gustavo Sousa
` (19 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
In upcoming display changes, we will modify the DMC wakelock MMIO
waiting code to choose a non-sleeping variant implementation, because
the wakelock is also taking in atomic context.
While xe provides an explicit parameter (namely "atomic") to prevent
xe_mmio_wait32() from sleeping, i915 does not and implements that
behavior when slow_timeout_ms is zero.
So, for now, let's mimic what i915 does to allow for display to use
non-sleeping MMIO wait. In the future, we should come up with a better
and explicit interface for this behavior in i915, at least while display
code is not an independent entity with proper interfaces between xe and
i915.
v2:
- Make the tone in comment the comment added in
__intel_wait_for_register() more explanatory than a FIXME-like text.
(Luca)
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
| 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h b/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
index 0382beb4035b..686c39f320e4 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
@@ -117,10 +117,19 @@ __intel_wait_for_register(struct intel_uncore *uncore, i915_reg_t i915_reg,
unsigned int slow_timeout_ms, u32 *out_value)
{
struct xe_reg reg = XE_REG(i915_mmio_reg_offset(i915_reg));
+ bool atomic;
+
+ /*
+ * Replicate the behavior from i915 here, in which sleep is not
+ * performed if slow_timeout_ms == 0. This is necessary because
+ * of some paths in display code where waits are done in atomic
+ * context.
+ */
+ atomic = !slow_timeout_ms && fast_timeout_us > 0;
return xe_mmio_wait32(__compat_uncore_to_mmio(uncore), reg, mask, value,
fast_timeout_us + 1000 * slow_timeout_ms,
- out_value, false);
+ out_value, atomic);
}
static inline u32 intel_uncore_read_fw(struct intel_uncore *uncore,
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 03/18] drm/i915/dmc_wl: Use non-sleeping variant of MMIO wait
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 01/18] drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 02/18] drm/xe: Mimic i915 behavior for non-sleeping MMIO wait Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 04/18] drm/i915/dmc_wl: Check for non-zero refcount in release work Gustavo Sousa
` (18 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Some display MMIO transactions for offsets in the range that requires
the DMC wakelock happen in atomic context (this has been confirmed
during tests on PTL). That means that we need to use a non-sleeping
variant of MMIO waiting function.
Implement __intel_de_wait_for_register_atomic_nowl() and use it when
waiting for acknowledgment of acquire/release.
v2:
- No __intel_de_wait_for_register_atomic_nowl() wrapper to convert
i915 to display. (Jani)
- Add a quick explanation why DMC_WAKELOCK_CTL_TIMEOUT_US is defined
in microseconds. (Luca)
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_de.h | 10 +++++++++
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 24 ++++++++++++++-------
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_de.h b/drivers/gpu/drm/i915/display/intel_de.h
index bb51f974e9e2..4561de5d5e10 100644
--- a/drivers/gpu/drm/i915/display/intel_de.h
+++ b/drivers/gpu/drm/i915/display/intel_de.h
@@ -117,6 +117,16 @@ __intel_de_wait_for_register_nowl(struct intel_display *display,
value, timeout);
}
+static inline int
+__intel_de_wait_for_register_atomic_nowl(struct intel_display *display,
+ i915_reg_t reg,
+ u32 mask, u32 value,
+ unsigned int fast_timeout_us)
+{
+ return __intel_wait_for_register(__to_uncore(display), reg, mask,
+ value, fast_timeout_us, 0, NULL);
+}
+
static inline int
intel_de_wait(struct intel_display *display, i915_reg_t reg,
u32 mask, u32 value, unsigned int timeout)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 05892a237d3a..9255505437d5 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -39,7 +39,11 @@
* potential future use.
*/
-#define DMC_WAKELOCK_CTL_TIMEOUT 5
+/*
+ * Define DMC_WAKELOCK_CTL_TIMEOUT_US in microseconds because we use the
+ * atomic variant of waiting MMIO.
+ */
+#define DMC_WAKELOCK_CTL_TIMEOUT_US 5000
#define DMC_WAKELOCK_HOLD_TIME 50
struct intel_dmc_wl_range {
@@ -78,9 +82,9 @@ static void intel_dmc_wl_work(struct work_struct *work)
__intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
- if (__intel_de_wait_for_register_nowl(display, DMC_WAKELOCK1_CTL,
- DMC_WAKELOCK_CTL_ACK, 0,
- DMC_WAKELOCK_CTL_TIMEOUT)) {
+ if (__intel_de_wait_for_register_atomic_nowl(display, DMC_WAKELOCK1_CTL,
+ DMC_WAKELOCK_CTL_ACK, 0,
+ DMC_WAKELOCK_CTL_TIMEOUT_US)) {
WARN_RATELIMIT(1, "DMC wakelock release timed out");
goto out_unlock;
}
@@ -217,10 +221,14 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
__intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, 0,
DMC_WAKELOCK_CTL_REQ);
- if (__intel_de_wait_for_register_nowl(display, DMC_WAKELOCK1_CTL,
- DMC_WAKELOCK_CTL_ACK,
- DMC_WAKELOCK_CTL_ACK,
- DMC_WAKELOCK_CTL_TIMEOUT)) {
+ /*
+ * We need to use the atomic variant of the waiting routine
+ * because the DMC wakelock is also taken in atomic context.
+ */
+ if (__intel_de_wait_for_register_atomic_nowl(display, DMC_WAKELOCK1_CTL,
+ DMC_WAKELOCK_CTL_ACK,
+ DMC_WAKELOCK_CTL_ACK,
+ DMC_WAKELOCK_CTL_TIMEOUT_US)) {
WARN_RATELIMIT(1, "DMC wakelock ack timed out");
goto out_unlock;
}
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 04/18] drm/i915/dmc_wl: Check for non-zero refcount in release work
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (2 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 03/18] drm/i915/dmc_wl: Use non-sleeping variant of " Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 05/18] drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states Gustavo Sousa
` (17 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
When the DMC wakelock refcount reaches zero, we know that there are no
users and that we can do the actual release operation on the hardware,
which is queued with a delayed work. The idea of the delayed work is to
avoid performing the release if a new lock user appears (i.e. refcount
gets incremented) in a very short period of time.
Based on the above, the release work should bail out if refcount is
non-zero (meaning new lock users appeared in the meantime), but our
current code actually does the opposite: it bails when refcount is zero.
That means that the wakelock is not released when it should be; and
that, when the work is not canceled in time, it ends up being releasing
when it should not.
Fix that by inverting the condition.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 9255505437d5..a0a060706305 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -76,8 +76,11 @@ static void intel_dmc_wl_work(struct work_struct *work)
spin_lock_irqsave(&wl->lock, flags);
- /* Bail out if refcount reached zero while waiting for the spinlock */
- if (!refcount_read(&wl->refcount))
+ /*
+ * Bail out if refcount became non-zero while waiting for the spinlock,
+ * meaning that the lock is now taken again.
+ */
+ if (refcount_read(&wl->refcount))
goto out_unlock;
__intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 05/18] drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (3 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 04/18] drm/i915/dmc_wl: Check for non-zero refcount in release work Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 06/18] drm/i915/dmc_wl: Use sentinel item for range tables Gustavo Sousa
` (16 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Bspec says that disabling dynamic DC states require taking the DMC
wakelock to cause an DC exit before writing to DC_STATE_EN. Implement
that.
In fact, testing on PTL revealed we end up failing to exit DC5/6 without
this step.
Bspec: 71583
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
.../drm/i915/display/intel_display_power_well.c | 10 +++++++---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 14 ++++++++++++--
drivers/gpu/drm/i915/display/intel_dmc_wl.h | 2 ++
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
index f0131dd853de..0c77b6252969 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
@@ -994,10 +994,14 @@ void gen9_disable_dc_states(struct intel_display *display)
return;
}
- gen9_set_dc_state(display, DC_STATE_DISABLE);
-
- if (!HAS_DISPLAY(display))
+ if (HAS_DISPLAY(display)) {
+ intel_dmc_wl_get_noreg(display);
+ gen9_set_dc_state(display, DC_STATE_DISABLE);
+ intel_dmc_wl_put_noreg(display);
+ } else {
+ gen9_set_dc_state(display, DC_STATE_DISABLE);
return;
+ }
intel_dmc_wl_disable(display);
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index a0a060706305..e837c39491bb 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -199,7 +199,7 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (!intel_dmc_wl_check_range(reg))
+ if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg))
return;
spin_lock_irqsave(&wl->lock, flags);
@@ -251,7 +251,7 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (!intel_dmc_wl_check_range(reg))
+ if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg))
return;
spin_lock_irqsave(&wl->lock, flags);
@@ -272,3 +272,13 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
out_unlock:
spin_unlock_irqrestore(&wl->lock, flags);
}
+
+void intel_dmc_wl_get_noreg(struct intel_display *display)
+{
+ intel_dmc_wl_get(display, INVALID_MMIO_REG);
+}
+
+void intel_dmc_wl_put_noreg(struct intel_display *display)
+{
+ intel_dmc_wl_put(display, INVALID_MMIO_REG);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.h b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
index adab51208d0a..9aa72a4bf153 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.h
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
@@ -27,5 +27,7 @@ void intel_dmc_wl_enable(struct intel_display *display);
void intel_dmc_wl_disable(struct intel_display *display);
void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg);
void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg);
+void intel_dmc_wl_get_noreg(struct intel_display *display);
+void intel_dmc_wl_put_noreg(struct intel_display *display);
#endif /* __INTEL_WAKELOCK_H__ */
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 06/18] drm/i915/dmc_wl: Use sentinel item for range tables
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (4 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 05/18] drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 07/18] drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range() Gustavo Sousa
` (15 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
We are currently using ARRAY_SIZE() to iterate address ranges in
intel_dmc_wl_check_range(). In upcoming changes, we will be using more
than a single table and will extract the range checking logic into a
dedicated function that takes a range table as argument. As we will not
able to use ARRAY_SIZE() then, let's make range tables contain a
sentinel item at the end and use that instead of having to pass the size
as parameter in this future function.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index e837c39491bb..1753c334f3fd 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -53,6 +53,7 @@ struct intel_dmc_wl_range {
static struct intel_dmc_wl_range lnl_wl_range[] = {
{ .start = 0x60000, .end = 0x7ffff },
+ {},
};
static void __intel_dmc_wl_release(struct intel_display *display)
@@ -104,7 +105,7 @@ static bool intel_dmc_wl_check_range(i915_reg_t reg)
bool wl_needed = false;
u32 offset = i915_mmio_reg_offset(reg);
- for (i = 0; i < ARRAY_SIZE(lnl_wl_range); i++) {
+ for (i = 0; lnl_wl_range[i].start; i++) {
if (offset >= lnl_wl_range[i].start &&
offset <= lnl_wl_range[i].end) {
wl_needed = true;
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 07/18] drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range()
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (5 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 06/18] drm/i915/dmc_wl: Use sentinel item for range tables Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 08/18] drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges Gustavo Sousa
` (14 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
We will be using more than one range table in
intel_dmc_wl_check_range(). As such, move the logic to a new function
and name it intel_dmc_wl_reg_in_range().
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 1753c334f3fd..4b958a4c4358 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -99,21 +99,22 @@ static void intel_dmc_wl_work(struct work_struct *work)
spin_unlock_irqrestore(&wl->lock, flags);
}
-static bool intel_dmc_wl_check_range(i915_reg_t reg)
+static bool intel_dmc_wl_reg_in_range(i915_reg_t reg,
+ const struct intel_dmc_wl_range ranges[])
{
- int i;
- bool wl_needed = false;
u32 offset = i915_mmio_reg_offset(reg);
- for (i = 0; lnl_wl_range[i].start; i++) {
- if (offset >= lnl_wl_range[i].start &&
- offset <= lnl_wl_range[i].end) {
- wl_needed = true;
- break;
- }
+ for (int i = 0; ranges[i].start; i++) {
+ if (ranges[i].start <= offset && offset <= ranges[i].end)
+ return true;
}
- return wl_needed;
+ return false;
+}
+
+static bool intel_dmc_wl_check_range(i915_reg_t reg)
+{
+ return intel_dmc_wl_reg_in_range(reg, lnl_wl_range);
}
static bool __intel_dmc_wl_supported(struct intel_display *display)
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 08/18] drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (6 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 07/18] drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range() Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 09/18] drm/i915/dmc_wl: Track registers touched by the DMC Gustavo Sousa
` (13 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
In an upcoming change, we will add extra range tables for registers that
are touched by the DMC during DC states. The range table that we are
currently using is meant for registers that are powered off during DC
states. As such, let's rename the table to powered_off_ranges and also
add a comment regarding its purpose in the function that uses it.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 4b958a4c4358..1877a89affab 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -51,7 +51,7 @@ struct intel_dmc_wl_range {
u32 end;
};
-static struct intel_dmc_wl_range lnl_wl_range[] = {
+static struct intel_dmc_wl_range powered_off_ranges[] = {
{ .start = 0x60000, .end = 0x7ffff },
{},
};
@@ -114,7 +114,11 @@ static bool intel_dmc_wl_reg_in_range(i915_reg_t reg,
static bool intel_dmc_wl_check_range(i915_reg_t reg)
{
- return intel_dmc_wl_reg_in_range(reg, lnl_wl_range);
+ /*
+ * Check that the offset is in one of the ranges for which
+ * registers are powered off during DC states.
+ */
+ return intel_dmc_wl_reg_in_range(reg, powered_off_ranges);
}
static bool __intel_dmc_wl_supported(struct intel_display *display)
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 09/18] drm/i915/dmc_wl: Track registers touched by the DMC
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (7 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 08/18] drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 10/18] drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables Gustavo Sousa
` (12 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
There are extra registers that require the DMC wakelock when specific
dynamic DC states are in place. Those are registers that are touched by
the DMC and require DC exit for proper access. Add the range tables for
them and use the correct one depending on the enabled DC state.
v2:
- Do not look into power domains guts (i.e.
display->power.domains.dc_state). (Jani)
- Come up with better names for variables containing register ranges.
(Luca)
- Keep a copy of dc_state in struct intel_dmc_wl.
- Update commit message for a clearer explanation for the need of
these new tables.
Bspec: 71583
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
.../i915/display/intel_display_power_well.c | 4 +-
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 126 ++++++++++++++++--
drivers/gpu/drm/i915/display/intel_dmc_wl.h | 11 +-
3 files changed, 128 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
index 0c77b6252969..578959ff2d75 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
@@ -833,7 +833,7 @@ void gen9_enable_dc5(struct intel_display *display)
intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
0, SKL_SELECT_ALTERNATE_DC_EXIT);
- intel_dmc_wl_enable(display);
+ intel_dmc_wl_enable(display, DC_STATE_EN_UPTO_DC5);
gen9_set_dc_state(display, DC_STATE_EN_UPTO_DC5);
}
@@ -866,7 +866,7 @@ void skl_enable_dc6(struct intel_display *display)
intel_de_rmw(display, GEN8_CHICKEN_DCPR_1,
0, SKL_SELECT_ALTERNATE_DC_EXIT);
- intel_dmc_wl_enable(display);
+ intel_dmc_wl_enable(display, DC_STATE_EN_UPTO_DC6);
gen9_set_dc_state(display, DC_STATE_EN_UPTO_DC6);
}
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 1877a89affab..db01b65cb05d 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -5,6 +5,7 @@
#include <linux/kernel.h>
+#include "i915_reg.h"
#include "intel_de.h"
#include "intel_dmc.h"
#include "intel_dmc_regs.h"
@@ -56,6 +57,87 @@ static struct intel_dmc_wl_range powered_off_ranges[] = {
{},
};
+static struct intel_dmc_wl_range xe3lpd_dc5_dc6_dmc_ranges[] = {
+ { .start = 0x45500, .end = 0x45500 }, /* DC_STATE_SEL */
+ { .start = 0x457a0, .end = 0x457b0 }, /* DC*_RESIDENCY_COUNTER */
+ { .start = 0x45504, .end = 0x45504 }, /* DC_STATE_EN */
+ { .start = 0x45400, .end = 0x4540c }, /* PWR_WELL_CTL_* */
+ { .start = 0x454f0, .end = 0x454f0 }, /* RETENTION_CTRL */
+
+ /* DBUF_CTL_* */
+ { .start = 0x44300, .end = 0x44300 },
+ { .start = 0x44304, .end = 0x44304 },
+ { .start = 0x44f00, .end = 0x44f00 },
+ { .start = 0x44f04, .end = 0x44f04 },
+ { .start = 0x44fe8, .end = 0x44fe8 },
+ { .start = 0x45008, .end = 0x45008 },
+
+ { .start = 0x46070, .end = 0x46070 }, /* CDCLK_PLL_ENABLE */
+ { .start = 0x46000, .end = 0x46000 }, /* CDCLK_CTL */
+ { .start = 0x46008, .end = 0x46008 }, /* CDCLK_SQUASH_CTL */
+
+ /* TRANS_CMTG_CTL_* */
+ { .start = 0x6fa88, .end = 0x6fa88 },
+ { .start = 0x6fb88, .end = 0x6fb88 },
+
+ { .start = 0x46430, .end = 0x46430 }, /* CHICKEN_DCPR_1 */
+ { .start = 0x46434, .end = 0x46434 }, /* CHICKEN_DCPR_2 */
+ { .start = 0x454a0, .end = 0x454a0 }, /* CHICKEN_DCPR_4 */
+ { .start = 0x42084, .end = 0x42084 }, /* CHICKEN_MISC_2 */
+ { .start = 0x42088, .end = 0x42088 }, /* CHICKEN_MISC_3 */
+ { .start = 0x46160, .end = 0x46160 }, /* CMTG_CLK_SEL */
+ { .start = 0x8f000, .end = 0x8ffff }, /* Main DMC registers */
+
+ {},
+};
+
+static struct intel_dmc_wl_range xe3lpd_dc3co_dmc_ranges[] = {
+ { .start = 0x454a0, .end = 0x454a0 }, /* CHICKEN_DCPR_4 */
+
+ { .start = 0x45504, .end = 0x45504 }, /* DC_STATE_EN */
+
+ /* DBUF_CTL_* */
+ { .start = 0x44300, .end = 0x44300 },
+ { .start = 0x44304, .end = 0x44304 },
+ { .start = 0x44f00, .end = 0x44f00 },
+ { .start = 0x44f04, .end = 0x44f04 },
+ { .start = 0x44fe8, .end = 0x44fe8 },
+ { .start = 0x45008, .end = 0x45008 },
+
+ { .start = 0x46070, .end = 0x46070 }, /* CDCLK_PLL_ENABLE */
+ { .start = 0x46000, .end = 0x46000 }, /* CDCLK_CTL */
+ { .start = 0x46008, .end = 0x46008 }, /* CDCLK_SQUASH_CTL */
+ { .start = 0x8f000, .end = 0x8ffff }, /* Main DMC registers */
+
+ /* Scanline registers */
+ { .start = 0x70000, .end = 0x70000 },
+ { .start = 0x70004, .end = 0x70004 },
+ { .start = 0x70014, .end = 0x70014 },
+ { .start = 0x70018, .end = 0x70018 },
+ { .start = 0x71000, .end = 0x71000 },
+ { .start = 0x71004, .end = 0x71004 },
+ { .start = 0x71014, .end = 0x71014 },
+ { .start = 0x71018, .end = 0x71018 },
+ { .start = 0x72000, .end = 0x72000 },
+ { .start = 0x72004, .end = 0x72004 },
+ { .start = 0x72014, .end = 0x72014 },
+ { .start = 0x72018, .end = 0x72018 },
+ { .start = 0x73000, .end = 0x73000 },
+ { .start = 0x73004, .end = 0x73004 },
+ { .start = 0x73014, .end = 0x73014 },
+ { .start = 0x73018, .end = 0x73018 },
+ { .start = 0x7b000, .end = 0x7b000 },
+ { .start = 0x7b004, .end = 0x7b004 },
+ { .start = 0x7b014, .end = 0x7b014 },
+ { .start = 0x7b018, .end = 0x7b018 },
+ { .start = 0x7c000, .end = 0x7c000 },
+ { .start = 0x7c004, .end = 0x7c004 },
+ { .start = 0x7c014, .end = 0x7c014 },
+ { .start = 0x7c018, .end = 0x7c018 },
+
+ {},
+};
+
static void __intel_dmc_wl_release(struct intel_display *display)
{
struct drm_i915_private *i915 = to_i915(display->drm);
@@ -112,13 +194,37 @@ static bool intel_dmc_wl_reg_in_range(i915_reg_t reg,
return false;
}
-static bool intel_dmc_wl_check_range(i915_reg_t reg)
+static bool intel_dmc_wl_check_range(i915_reg_t reg, u32 dc_state)
{
+ const struct intel_dmc_wl_range *ranges;
+
/*
* Check that the offset is in one of the ranges for which
* registers are powered off during DC states.
*/
- return intel_dmc_wl_reg_in_range(reg, powered_off_ranges);
+ if (intel_dmc_wl_reg_in_range(reg, powered_off_ranges))
+ return true;
+
+ /*
+ * Check that the offset is for a register that is touched by
+ * the DMC and requires a DC exit for proper access.
+ */
+ switch (dc_state) {
+ case DC_STATE_EN_DC3CO:
+ ranges = xe3lpd_dc3co_dmc_ranges;
+ break;
+ case DC_STATE_EN_UPTO_DC5:
+ case DC_STATE_EN_UPTO_DC6:
+ ranges = xe3lpd_dc5_dc6_dmc_ranges;
+ break;
+ default:
+ ranges = NULL;
+ }
+
+ if (ranges && intel_dmc_wl_reg_in_range(reg, ranges))
+ return true;
+
+ return false;
}
static bool __intel_dmc_wl_supported(struct intel_display *display)
@@ -144,7 +250,7 @@ void intel_dmc_wl_init(struct intel_display *display)
refcount_set(&wl->refcount, 0);
}
-void intel_dmc_wl_enable(struct intel_display *display)
+void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
{
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
@@ -154,6 +260,8 @@ void intel_dmc_wl_enable(struct intel_display *display)
spin_lock_irqsave(&wl->lock, flags);
+ wl->dc_state = dc_state;
+
if (wl->enabled)
goto out_unlock;
@@ -205,11 +313,11 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg))
- return;
-
spin_lock_irqsave(&wl->lock, flags);
+ if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
+ goto out_unlock;
+
if (!wl->enabled)
goto out_unlock;
@@ -257,11 +365,11 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg))
- return;
-
spin_lock_irqsave(&wl->lock, flags);
+ if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
+ goto out_unlock;
+
if (!wl->enabled)
goto out_unlock;
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.h b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
index 9aa72a4bf153..147eeb4d8432 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.h
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
@@ -15,15 +15,22 @@
struct intel_display;
struct intel_dmc_wl {
- spinlock_t lock; /* protects enabled, taken and refcount */
+ spinlock_t lock; /* protects enabled, taken, dc_state and refcount */
bool enabled;
bool taken;
refcount_t refcount;
+ /*
+ * We are keeping a copy of the enabled DC state because
+ * intel_display.power.domains is protected by a mutex and we do
+ * not want call mutex_lock() in atomic context, where some of
+ * the tracked MMIO operations happen.
+ */
+ u32 dc_state;
struct delayed_work work;
};
void intel_dmc_wl_init(struct intel_display *display);
-void intel_dmc_wl_enable(struct intel_display *display);
+void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state);
void intel_dmc_wl_disable(struct intel_display *display);
void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg);
void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg);
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 10/18] drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (8 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 09/18] drm/i915/dmc_wl: Track registers touched by the DMC Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 11/18] drm/i915/dmc_wl: Deal with existing references when disabling Gustavo Sousa
` (11 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Allow simpler syntax for defining entries for single registers in range
tables. That makes them easier to type as well as to read, allowing one
to quickly tell whether a range actually refers to a single register or
a "true range".
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 118 ++++++++++----------
1 file changed, 60 insertions(+), 58 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index db01b65cb05d..4a182a049374 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -58,82 +58,82 @@ static struct intel_dmc_wl_range powered_off_ranges[] = {
};
static struct intel_dmc_wl_range xe3lpd_dc5_dc6_dmc_ranges[] = {
- { .start = 0x45500, .end = 0x45500 }, /* DC_STATE_SEL */
+ { .start = 0x45500 }, /* DC_STATE_SEL */
{ .start = 0x457a0, .end = 0x457b0 }, /* DC*_RESIDENCY_COUNTER */
- { .start = 0x45504, .end = 0x45504 }, /* DC_STATE_EN */
+ { .start = 0x45504 }, /* DC_STATE_EN */
{ .start = 0x45400, .end = 0x4540c }, /* PWR_WELL_CTL_* */
- { .start = 0x454f0, .end = 0x454f0 }, /* RETENTION_CTRL */
+ { .start = 0x454f0 }, /* RETENTION_CTRL */
/* DBUF_CTL_* */
- { .start = 0x44300, .end = 0x44300 },
- { .start = 0x44304, .end = 0x44304 },
- { .start = 0x44f00, .end = 0x44f00 },
- { .start = 0x44f04, .end = 0x44f04 },
- { .start = 0x44fe8, .end = 0x44fe8 },
- { .start = 0x45008, .end = 0x45008 },
+ { .start = 0x44300 },
+ { .start = 0x44304 },
+ { .start = 0x44f00 },
+ { .start = 0x44f04 },
+ { .start = 0x44fe8 },
+ { .start = 0x45008 },
- { .start = 0x46070, .end = 0x46070 }, /* CDCLK_PLL_ENABLE */
- { .start = 0x46000, .end = 0x46000 }, /* CDCLK_CTL */
- { .start = 0x46008, .end = 0x46008 }, /* CDCLK_SQUASH_CTL */
+ { .start = 0x46070 }, /* CDCLK_PLL_ENABLE */
+ { .start = 0x46000 }, /* CDCLK_CTL */
+ { .start = 0x46008 }, /* CDCLK_SQUASH_CTL */
/* TRANS_CMTG_CTL_* */
- { .start = 0x6fa88, .end = 0x6fa88 },
- { .start = 0x6fb88, .end = 0x6fb88 },
-
- { .start = 0x46430, .end = 0x46430 }, /* CHICKEN_DCPR_1 */
- { .start = 0x46434, .end = 0x46434 }, /* CHICKEN_DCPR_2 */
- { .start = 0x454a0, .end = 0x454a0 }, /* CHICKEN_DCPR_4 */
- { .start = 0x42084, .end = 0x42084 }, /* CHICKEN_MISC_2 */
- { .start = 0x42088, .end = 0x42088 }, /* CHICKEN_MISC_3 */
- { .start = 0x46160, .end = 0x46160 }, /* CMTG_CLK_SEL */
+ { .start = 0x6fa88 },
+ { .start = 0x6fb88 },
+
+ { .start = 0x46430 }, /* CHICKEN_DCPR_1 */
+ { .start = 0x46434 }, /* CHICKEN_DCPR_2 */
+ { .start = 0x454a0 }, /* CHICKEN_DCPR_4 */
+ { .start = 0x42084 }, /* CHICKEN_MISC_2 */
+ { .start = 0x42088 }, /* CHICKEN_MISC_3 */
+ { .start = 0x46160 }, /* CMTG_CLK_SEL */
{ .start = 0x8f000, .end = 0x8ffff }, /* Main DMC registers */
{},
};
static struct intel_dmc_wl_range xe3lpd_dc3co_dmc_ranges[] = {
- { .start = 0x454a0, .end = 0x454a0 }, /* CHICKEN_DCPR_4 */
+ { .start = 0x454a0 }, /* CHICKEN_DCPR_4 */
- { .start = 0x45504, .end = 0x45504 }, /* DC_STATE_EN */
+ { .start = 0x45504 }, /* DC_STATE_EN */
/* DBUF_CTL_* */
- { .start = 0x44300, .end = 0x44300 },
- { .start = 0x44304, .end = 0x44304 },
- { .start = 0x44f00, .end = 0x44f00 },
- { .start = 0x44f04, .end = 0x44f04 },
- { .start = 0x44fe8, .end = 0x44fe8 },
- { .start = 0x45008, .end = 0x45008 },
-
- { .start = 0x46070, .end = 0x46070 }, /* CDCLK_PLL_ENABLE */
- { .start = 0x46000, .end = 0x46000 }, /* CDCLK_CTL */
- { .start = 0x46008, .end = 0x46008 }, /* CDCLK_SQUASH_CTL */
+ { .start = 0x44300 },
+ { .start = 0x44304 },
+ { .start = 0x44f00 },
+ { .start = 0x44f04 },
+ { .start = 0x44fe8 },
+ { .start = 0x45008 },
+
+ { .start = 0x46070 }, /* CDCLK_PLL_ENABLE */
+ { .start = 0x46000 }, /* CDCLK_CTL */
+ { .start = 0x46008 }, /* CDCLK_SQUASH_CTL */
{ .start = 0x8f000, .end = 0x8ffff }, /* Main DMC registers */
/* Scanline registers */
- { .start = 0x70000, .end = 0x70000 },
- { .start = 0x70004, .end = 0x70004 },
- { .start = 0x70014, .end = 0x70014 },
- { .start = 0x70018, .end = 0x70018 },
- { .start = 0x71000, .end = 0x71000 },
- { .start = 0x71004, .end = 0x71004 },
- { .start = 0x71014, .end = 0x71014 },
- { .start = 0x71018, .end = 0x71018 },
- { .start = 0x72000, .end = 0x72000 },
- { .start = 0x72004, .end = 0x72004 },
- { .start = 0x72014, .end = 0x72014 },
- { .start = 0x72018, .end = 0x72018 },
- { .start = 0x73000, .end = 0x73000 },
- { .start = 0x73004, .end = 0x73004 },
- { .start = 0x73014, .end = 0x73014 },
- { .start = 0x73018, .end = 0x73018 },
- { .start = 0x7b000, .end = 0x7b000 },
- { .start = 0x7b004, .end = 0x7b004 },
- { .start = 0x7b014, .end = 0x7b014 },
- { .start = 0x7b018, .end = 0x7b018 },
- { .start = 0x7c000, .end = 0x7c000 },
- { .start = 0x7c004, .end = 0x7c004 },
- { .start = 0x7c014, .end = 0x7c014 },
- { .start = 0x7c018, .end = 0x7c018 },
+ { .start = 0x70000 },
+ { .start = 0x70004 },
+ { .start = 0x70014 },
+ { .start = 0x70018 },
+ { .start = 0x71000 },
+ { .start = 0x71004 },
+ { .start = 0x71014 },
+ { .start = 0x71018 },
+ { .start = 0x72000 },
+ { .start = 0x72004 },
+ { .start = 0x72014 },
+ { .start = 0x72018 },
+ { .start = 0x73000 },
+ { .start = 0x73004 },
+ { .start = 0x73014 },
+ { .start = 0x73018 },
+ { .start = 0x7b000 },
+ { .start = 0x7b004 },
+ { .start = 0x7b014 },
+ { .start = 0x7b018 },
+ { .start = 0x7c000 },
+ { .start = 0x7c004 },
+ { .start = 0x7c014 },
+ { .start = 0x7c018 },
{},
};
@@ -187,7 +187,9 @@ static bool intel_dmc_wl_reg_in_range(i915_reg_t reg,
u32 offset = i915_mmio_reg_offset(reg);
for (int i = 0; ranges[i].start; i++) {
- if (ranges[i].start <= offset && offset <= ranges[i].end)
+ u32 end = ranges[i].end ?: ranges[i].start;
+
+ if (ranges[i].start <= offset && offset <= end)
return true;
}
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 11/18] drm/i915/dmc_wl: Deal with existing references when disabling
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (9 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 10/18] drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 12/18] drm/i915/dmc_wl: Couple enable/disable with dynamic DC states Gustavo Sousa
` (10 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
It is possible that there are active wakelock references at the time we
are disabling the DMC wakelock mechanism. We need to deal with that in
two ways:
(A) Implement the missing step from Bspec:
The Bspec instructs us to clear any existing wakelock request bit
after disabling the mechanism. That gives a clue that it is okay to
disable while there are locks held and we do not need to wait for
them. However, since the spec is not explicit about it, we need
still to get confirmation with the hardware team. Let's thus
implement the spec and add a TODO note.
(B) Ensure a consistent driver state:
The enable/disable logic would be problematic if the following
sequence of events would happen:
1. Function A calls intel_dmc_wl_get();
2. Some function calls intel_dmc_wl_disable();
3. Some function calls intel_dmc_wl_enable();
4. Function A is done and calls intel_dmc_wl_put().
At (2), the refcount becomes zero and then (4) causes an invalid
decrement to the refcount. That would cause some issues:
- At the time between (3) and (4), function A would think that
the hardware lock is held but it could not be really held
until intel_dmc_wl_get() is called by something else.
- The call made to (4) could cause the refcount to become zero
and consequently the hardware lock to be released while there
could be innocent paths trusting they still have the lock.
To fix that, we need to keep the refcount correctly in sync with
intel_dmc_wl_{get,put}() calls and retake the hardware lock when
enabling the DMC wakelock with a non-zero refcount.
One missing piece left to be handled here is the following scenario:
1. Function A calls intel_dmc_wl_get();
2. Some function calls intel_dmc_wl_disable();
3. Some function calls intel_dmc_wl_enable();
4. Concurrently with (3), function A performs the MMIO in between
setting DMC_WAKELOCK_CFG_ENABLE and asserting the lock with
__intel_dmc_wl_take().
I'm mostly sure this would cause issues future display IPs if DMC
trap implementation was completely removed. We need to check with
the hardware team whether it would be safe to assert the hardware
lock before setting DMC_WAKELOCK_CFG_ENABLE to avoid this scenario.
If not, then we would have to deal with that via software
synchronization.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 97 ++++++++++++++-------
1 file changed, 67 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 4a182a049374..b8887216a684 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -181,6 +181,37 @@ static void intel_dmc_wl_work(struct work_struct *work)
spin_unlock_irqrestore(&wl->lock, flags);
}
+static void __intel_dmc_wl_take(struct intel_display *display)
+{
+ struct intel_dmc_wl *wl = &display->wl;
+
+ /*
+ * Only try to take the wakelock if it's not marked as taken
+ * yet. It may be already taken at this point if we have
+ * already released the last reference, but the work has not
+ * run yet.
+ */
+ if (wl->taken)
+ return;
+
+ __intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, 0,
+ DMC_WAKELOCK_CTL_REQ);
+
+ /*
+ * We need to use the atomic variant of the waiting routine
+ * because the DMC wakelock is also taken in atomic context.
+ */
+ if (__intel_de_wait_for_register_atomic_nowl(display, DMC_WAKELOCK1_CTL,
+ DMC_WAKELOCK_CTL_ACK,
+ DMC_WAKELOCK_CTL_ACK,
+ DMC_WAKELOCK_CTL_TIMEOUT_US)) {
+ WARN_RATELIMIT(1, "DMC wakelock ack timed out");
+ return;
+ }
+
+ wl->taken = true;
+}
+
static bool intel_dmc_wl_reg_in_range(i915_reg_t reg,
const struct intel_dmc_wl_range ranges[])
{
@@ -275,7 +306,23 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
__intel_de_rmw_nowl(display, DMC_WAKELOCK_CFG, 0, DMC_WAKELOCK_CFG_ENABLE);
wl->enabled = true;
- wl->taken = false;
+
+ /*
+ * This would be racy in the following scenario:
+ *
+ * 1. Function A calls intel_dmc_wl_get();
+ * 2. Some function calls intel_dmc_wl_disable();
+ * 3. Some function calls intel_dmc_wl_enable();
+ * 4. Concurrently with (3), function A performs the MMIO in between
+ * setting DMC_WAKELOCK_CFG_ENABLE and asserting the lock with
+ * __intel_dmc_wl_take().
+ *
+ * TODO: Check with the hardware team whether it is safe to assert the
+ * hardware lock before enabling to avoid such a scenario. Otherwise, we
+ * would need to deal with it via software synchronization.
+ */
+ if (refcount_read(&wl->refcount))
+ __intel_dmc_wl_take(display);
out_unlock:
spin_unlock_irqrestore(&wl->lock, flags);
@@ -299,8 +346,18 @@ void intel_dmc_wl_disable(struct intel_display *display)
/* Disable wakelock in DMC */
__intel_de_rmw_nowl(display, DMC_WAKELOCK_CFG, DMC_WAKELOCK_CFG_ENABLE, 0);
- refcount_set(&wl->refcount, 0);
wl->enabled = false;
+
+ /*
+ * The spec is not explicit about the expectation of existing
+ * lock users at the moment of disabling, but it does say that we must
+ * clear DMC_WAKELOCK_CTL_REQ, which gives us a clue that it is okay to
+ * disable with existing lock users.
+ *
+ * TODO: Get the correct expectation from the hardware team.
+ */
+ __intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, DMC_WAKELOCK_CTL_REQ, 0);
+
wl->taken = false;
out_unlock:
@@ -320,8 +377,11 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
goto out_unlock;
- if (!wl->enabled)
+ if (!wl->enabled) {
+ if (!refcount_inc_not_zero(&wl->refcount))
+ refcount_set(&wl->refcount, 1);
goto out_unlock;
+ }
cancel_delayed_work(&wl->work);
@@ -330,30 +390,7 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
refcount_set(&wl->refcount, 1);
- /*
- * Only try to take the wakelock if it's not marked as taken
- * yet. It may be already taken at this point if we have
- * already released the last reference, but the work has not
- * run yet.
- */
- if (!wl->taken) {
- __intel_de_rmw_nowl(display, DMC_WAKELOCK1_CTL, 0,
- DMC_WAKELOCK_CTL_REQ);
-
- /*
- * We need to use the atomic variant of the waiting routine
- * because the DMC wakelock is also taken in atomic context.
- */
- if (__intel_de_wait_for_register_atomic_nowl(display, DMC_WAKELOCK1_CTL,
- DMC_WAKELOCK_CTL_ACK,
- DMC_WAKELOCK_CTL_ACK,
- DMC_WAKELOCK_CTL_TIMEOUT_US)) {
- WARN_RATELIMIT(1, "DMC wakelock ack timed out");
- goto out_unlock;
- }
-
- wl->taken = true;
- }
+ __intel_dmc_wl_take(display);
out_unlock:
spin_unlock_irqrestore(&wl->lock, flags);
@@ -372,14 +409,14 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
goto out_unlock;
- if (!wl->enabled)
- goto out_unlock;
-
if (WARN_RATELIMIT(!refcount_read(&wl->refcount),
"Tried to put wakelock with refcount zero\n"))
goto out_unlock;
if (refcount_dec_and_test(&wl->refcount)) {
+ if (!wl->enabled)
+ goto out_unlock;
+
__intel_dmc_wl_release(display);
goto out_unlock;
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 12/18] drm/i915/dmc_wl: Couple enable/disable with dynamic DC states
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (10 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 11/18] drm/i915/dmc_wl: Deal with existing references when disabling Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 13/18] drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK() Gustavo Sousa
` (9 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Enabling and disabling the DMC wakelock should be done as part of
enabling and disabling of dynamic DC states, respectively. We should not
enable or disable DMC wakelock independently of DC states, otherwise we
would risk ending up with an inconsistent state where dynamic DC states
are enabled and the DMC wakelock is disabled, going against current
recommendations and making MMIO transactions potentially slower. In
future display IPs that could have a worse outcome if DMC trap
implementation is completely removed.
So, let's make things safer by tying stuff together, removing the
independent calls, and also put warnings in place to detect inconsistent
calls.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_power_well.c | 5 ++++-
drivers/gpu/drm/i915/display/intel_dmc.c | 4 ----
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 6 ++++--
3 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
index 578959ff2d75..bdf6c690a03b 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
@@ -988,6 +988,7 @@ void gen9_disable_dc_states(struct intel_display *display)
struct drm_i915_private *dev_priv = to_i915(display->drm);
struct i915_power_domains *power_domains = &display->power.domains;
struct intel_cdclk_config cdclk_config = {};
+ u32 old_state = power_domains->dc_state;
if (power_domains->target_dc_state == DC_STATE_EN_DC3CO) {
tgl_disable_dc3co(display);
@@ -1003,7 +1004,9 @@ void gen9_disable_dc_states(struct intel_display *display)
return;
}
- intel_dmc_wl_disable(display);
+ if (old_state == DC_STATE_EN_UPTO_DC5 ||
+ old_state == DC_STATE_EN_UPTO_DC6)
+ intel_dmc_wl_disable(display);
intel_cdclk_get_cdclk(display, &cdclk_config);
/* Can't read out voltage_level so can't use intel_cdclk_changed() */
diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c b/drivers/gpu/drm/i915/display/intel_dmc.c
index 87bdacfd9edf..221d3abda791 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc.c
@@ -638,8 +638,6 @@ void intel_dmc_disable_program(struct intel_display *display)
pipedmc_clock_gating_wa(display, true);
disable_all_event_handlers(display);
pipedmc_clock_gating_wa(display, false);
-
- intel_dmc_wl_disable(display);
}
void assert_dmc_loaded(struct intel_display *display)
@@ -1146,8 +1144,6 @@ void intel_dmc_suspend(struct intel_display *display)
if (dmc)
flush_work(&dmc->work);
- intel_dmc_wl_disable(display);
-
/* Drop the reference held in case DMC isn't loaded. */
if (!intel_dmc_has_payload(display))
intel_dmc_runtime_pm_put(display);
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index b8887216a684..f2d64954916a 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -283,6 +283,7 @@ void intel_dmc_wl_init(struct intel_display *display)
refcount_set(&wl->refcount, 0);
}
+/* Must only be called as part of enabling dynamic DC states. */
void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
{
struct intel_dmc_wl *wl = &display->wl;
@@ -295,7 +296,7 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
wl->dc_state = dc_state;
- if (wl->enabled)
+ if (drm_WARN_ON(display->drm, wl->enabled))
goto out_unlock;
/*
@@ -328,6 +329,7 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
spin_unlock_irqrestore(&wl->lock, flags);
}
+/* Must only be called as part of disabling dynamic DC states. */
void intel_dmc_wl_disable(struct intel_display *display)
{
struct intel_dmc_wl *wl = &display->wl;
@@ -340,7 +342,7 @@ void intel_dmc_wl_disable(struct intel_display *display)
spin_lock_irqsave(&wl->lock, flags);
- if (!wl->enabled)
+ if (drm_WARN_ON(display->drm, !wl->enabled))
goto out_unlock;
/* Disable wakelock in DMC */
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 13/18] drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK()
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (11 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 12/18] drm/i915/dmc_wl: Couple enable/disable with dynamic DC states Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 14/18] drm/i915/dmc_wl: Init only after we have runtime device info Gustavo Sousa
` (8 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
A HAS_DMC_WAKELOCK() macro gives more semantic than openly checking the
display version. Define it and use it where appropriate.
v2:
- Make this patch contain only the non-functional refactor. Functional
changes related to including HAS_DMC() in the macro are done in
upcoming changes. (Jani)
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_device.h | 1 +
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h
index 14d16d111ae3..a8a0b4332247 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.h
+++ b/drivers/gpu/drm/i915/display/intel_display_device.h
@@ -147,6 +147,7 @@ struct intel_display_platforms {
#define HAS_DDI(i915) (DISPLAY_INFO(i915)->has_ddi)
#define HAS_DISPLAY(i915) (DISPLAY_RUNTIME_INFO(i915)->pipe_mask != 0)
#define HAS_DMC(i915) (DISPLAY_RUNTIME_INFO(i915)->has_dmc)
+#define HAS_DMC_WAKELOCK(i915) (DISPLAY_VER(i915) >= 20)
#define HAS_DOUBLE_BUFFERED_M_N(i915) (DISPLAY_VER(i915) >= 9 || IS_BROADWELL(i915))
#define HAS_DOUBLE_WIDE(i915) (DISPLAY_VER(i915) < 4)
#define HAS_DP_MST(i915) (DISPLAY_INFO(i915)->has_dp_mst)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index f2d64954916a..4ca2b990ec6a 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -262,7 +262,7 @@ static bool intel_dmc_wl_check_range(i915_reg_t reg, u32 dc_state)
static bool __intel_dmc_wl_supported(struct intel_display *display)
{
- if (DISPLAY_VER(display) < 20 ||
+ if (!HAS_DMC_WAKELOCK(display) ||
!intel_dmc_has_payload(display) ||
!display->params.enable_dmc_wl)
return false;
@@ -275,7 +275,7 @@ void intel_dmc_wl_init(struct intel_display *display)
struct intel_dmc_wl *wl = &display->wl;
/* don't call __intel_dmc_wl_supported(), DMC is not loaded yet */
- if (DISPLAY_VER(display) < 20 || !display->params.enable_dmc_wl)
+ if (!HAS_DMC_WAKELOCK(display) || !display->params.enable_dmc_wl)
return;
INIT_DELAYED_WORK(&wl->work, intel_dmc_wl_work);
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 14/18] drm/i915/dmc_wl: Init only after we have runtime device info
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (12 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 13/18] drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK() Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 15/18] drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK() Gustavo Sousa
` (7 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
We should be able to use the DMC wakelock only if the display hardware
has support for DMC. We will add a check for that in an upcoming change.
Since info for DMC availability (HAS_DMC()) needs runtime device info,
move the call to intel_dmc_wl_init() to a place where we know we have
the hardware has been probed for such an info (i.e. after
intel_display_device_info_runtime_init()).
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_driver.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 56b78cf6b854..4257cc380475 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -200,7 +200,6 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
intel_dpll_init_clock_hook(i915);
intel_init_display_hooks(i915);
intel_fdi_init_hook(i915);
- intel_dmc_wl_init(&i915->display);
}
/* part #1: call before irq install */
@@ -238,6 +237,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
return 0;
intel_dmc_init(display);
+ intel_dmc_wl_init(display);
i915->display.wq.modeset = alloc_ordered_workqueue("i915_modeset", 0);
i915->display.wq.flip = alloc_workqueue("i915_flip", WQ_HIGHPRI |
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 15/18] drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK()
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (13 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 14/18] drm/i915/dmc_wl: Init only after we have runtime device info Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 16/18] drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support Gustavo Sousa
` (6 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
In order to be able to use the DMC wakelock, we also need to know that
the display hardware has support for DMC. For that, include HAS_DMC() in
the definition of HAS_DMC_WAKELOCK().
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_device.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_device.h b/drivers/gpu/drm/i915/display/intel_display_device.h
index a8a0b4332247..085baf22d994 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.h
+++ b/drivers/gpu/drm/i915/display/intel_display_device.h
@@ -147,7 +147,7 @@ struct intel_display_platforms {
#define HAS_DDI(i915) (DISPLAY_INFO(i915)->has_ddi)
#define HAS_DISPLAY(i915) (DISPLAY_RUNTIME_INFO(i915)->pipe_mask != 0)
#define HAS_DMC(i915) (DISPLAY_RUNTIME_INFO(i915)->has_dmc)
-#define HAS_DMC_WAKELOCK(i915) (DISPLAY_VER(i915) >= 20)
+#define HAS_DMC_WAKELOCK(i915) (HAS_DMC(i915) && DISPLAY_VER(i915) >= 20)
#define HAS_DOUBLE_BUFFERED_M_N(i915) (DISPLAY_VER(i915) >= 9 || IS_BROADWELL(i915))
#define HAS_DOUBLE_WIDE(i915) (DISPLAY_VER(i915) < 4)
#define HAS_DP_MST(i915) (DISPLAY_INFO(i915)->has_dp_mst)
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 16/18] drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (14 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 15/18] drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK() Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized Gustavo Sousa
` (5 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Instead of checking for HAS_DMC_WAKELOCK() multiple times, let's use it
to sanitize the enable_dmc_wl parameter and use that variable when
necessary.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index 4ca2b990ec6a..c164ac6e1ada 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -5,6 +5,8 @@
#include <linux/kernel.h>
+#include <drm/drm_print.h>
+
#include "i915_reg.h"
#include "intel_de.h"
#include "intel_dmc.h"
@@ -262,20 +264,25 @@ static bool intel_dmc_wl_check_range(i915_reg_t reg, u32 dc_state)
static bool __intel_dmc_wl_supported(struct intel_display *display)
{
- if (!HAS_DMC_WAKELOCK(display) ||
- !intel_dmc_has_payload(display) ||
- !display->params.enable_dmc_wl)
- return false;
+ return display->params.enable_dmc_wl && intel_dmc_has_payload(display);
+}
- return true;
+static void intel_dmc_wl_sanitize_param(struct intel_display *display)
+{
+ if (!HAS_DMC_WAKELOCK(display))
+ display->params.enable_dmc_wl = false;
+
+ drm_dbg_kms(display->drm, "Sanitized enable_dmc_wl value: %d\n",
+ display->params.enable_dmc_wl);
}
void intel_dmc_wl_init(struct intel_display *display)
{
struct intel_dmc_wl *wl = &display->wl;
- /* don't call __intel_dmc_wl_supported(), DMC is not loaded yet */
- if (!HAS_DMC_WAKELOCK(display) || !display->params.enable_dmc_wl)
+ intel_dmc_wl_sanitize_param(display);
+
+ if (!display->params.enable_dmc_wl)
return;
INIT_DELAYED_WORK(&wl->work, intel_dmc_wl_work);
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (15 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 16/18] drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 19:23 ` Luca Coelho
2024-11-07 18:27 ` [PATCH v3 18/18] drm/i915/xe3lpd: Use DMC wakelock by default Gustavo Sousa
` (4 subsequent siblings)
21 siblings, 1 reply; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
There is a bit of a chicken and egg situation where we depend on runtime
info to know that DMC and wakelock are supported by the hardware, and
such information is grabbed via display MMIO functions, which in turns
call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
flow.
Since we do not expect DC states (and consequently the wakelock
mechanism) to be enabled until DMC and DMC wakelock software structures
are initialized, a simple and safe solution to this is to turn
intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
properly initialized.
Let's implement that via a new field "initialized". Not that, since we
expect __intel_dmc_wl_supported() to be used for most non-static DMC
wakelock functions, let's add a drm_WARN_ONCE() there for when it is
called prior to initialization.
The only exception of functions that can be called before initialization
are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
calling __intel_dmc_wl_supported() if not initialized.
An alternative solution would be to revise MMIO-related stuff in the
whole driver initialization sequence, but that would possibly come with
the cost of some added ordering dependencies and complexity to the
source code.
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 13 +++++++++++++
drivers/gpu/drm/i915/display/intel_dmc_wl.h | 11 +++++++++++
2 files changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index c164ac6e1ada..aae5ea0c72ff 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -264,6 +264,11 @@ static bool intel_dmc_wl_check_range(i915_reg_t reg, u32 dc_state)
static bool __intel_dmc_wl_supported(struct intel_display *display)
{
+ struct intel_dmc_wl *wl = &display->wl;
+
+ if (drm_WARN_ON(display->drm, !wl->initialized))
+ return false;
+
return display->params.enable_dmc_wl && intel_dmc_has_payload(display);
}
@@ -282,6 +287,8 @@ void intel_dmc_wl_init(struct intel_display *display)
intel_dmc_wl_sanitize_param(display);
+ wl->initialized = true;
+
if (!display->params.enable_dmc_wl)
return;
@@ -378,6 +385,9 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
+ if (!wl->initialized)
+ return;
+
if (!__intel_dmc_wl_supported(display))
return;
@@ -410,6 +420,9 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
+ if (!wl->initialized)
+ return;
+
if (!__intel_dmc_wl_supported(display))
return;
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.h b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
index 147eeb4d8432..06c8b61d7e87 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.h
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
@@ -15,6 +15,17 @@
struct intel_display;
struct intel_dmc_wl {
+ /*
+ * There is a bit of a chicken and egg situation where we depend
+ * on runtime info to know that DMC and wakelock are supported
+ * by the hardware, and such information is grabbed via display
+ * MMIO functions, which in turns call intel_dmc_wl_get() and
+ * intel_dmc_wl_put() as part of their regular flow.
+ *
+ * So we need the initialized field to ensure that we turn the
+ * get/put routines into a no-op until we have initialized.
+ */
+ bool initialized;
spinlock_t lock; /* protects enabled, taken, dc_state and refcount */
bool enabled;
bool taken;
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* [PATCH v3 18/18] drm/i915/xe3lpd: Use DMC wakelock by default
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (16 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized Gustavo Sousa
@ 2024-11-07 18:27 ` Gustavo Sousa
2024-11-07 19:04 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3) Patchwork
` (3 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 18:27 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Although Bspec doesn't explicitly mentions that, as of Xe3_LPD, using
DMC wakelock is the officially recommended way of accessing registers
that would be off during DC5/DC6 and the legacy method (where the DMC
intercepts MMIO to wake up the hardware) is to be avoided.
As such, update the driver to use the DMC wakelock by default starting
with Xe3_LPD. Since the feature is somewhat new to the driver, also
allow disabling it via a module parameter for debugging purposes.
For that, make the existing parameter allow values -1 (per-chip
default), 0 (disabled) and 1 (enabled), similarly to what is done for
other parameters.
v2:
- Describe -1 in the same area where 0 and 1 are described. (Luca)
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/i915/display/intel_display_params.c | 6 +++---
drivers/gpu/drm/i915/display/intel_display_params.h | 2 +-
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 6 +++++-
3 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_params.c b/drivers/gpu/drm/i915/display/intel_display_params.c
index 024de8abcb1a..dc666aefa362 100644
--- a/drivers/gpu/drm/i915/display/intel_display_params.c
+++ b/drivers/gpu/drm/i915/display/intel_display_params.c
@@ -123,10 +123,10 @@ intel_display_param_named_unsafe(enable_psr2_sel_fetch, bool, 0400,
"(0=disabled, 1=enabled) "
"Default: 1");
-intel_display_param_named_unsafe(enable_dmc_wl, bool, 0400,
+intel_display_param_named_unsafe(enable_dmc_wl, int, 0400,
"Enable DMC wakelock "
- "(0=disabled, 1=enabled) "
- "Default: 0");
+ "(-1=use per-chip default, 0=disabled, 1=enabled) "
+ "Default: -1");
__maybe_unused
static void _param_print_bool(struct drm_printer *p, const char *driver_name,
diff --git a/drivers/gpu/drm/i915/display/intel_display_params.h b/drivers/gpu/drm/i915/display/intel_display_params.h
index dcb6face936a..5317138e6044 100644
--- a/drivers/gpu/drm/i915/display/intel_display_params.h
+++ b/drivers/gpu/drm/i915/display/intel_display_params.h
@@ -47,7 +47,7 @@ struct drm_printer;
param(int, enable_psr, -1, 0600) \
param(bool, psr_safest_params, false, 0400) \
param(bool, enable_psr2_sel_fetch, true, 0400) \
- param(bool, enable_dmc_wl, false, 0400) \
+ param(int, enable_dmc_wl, -1, 0400) \
#define MEMBER(T, member, ...) T member;
struct intel_display_params {
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index aae5ea0c72ff..e43077453a99 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -275,7 +275,11 @@ static bool __intel_dmc_wl_supported(struct intel_display *display)
static void intel_dmc_wl_sanitize_param(struct intel_display *display)
{
if (!HAS_DMC_WAKELOCK(display))
- display->params.enable_dmc_wl = false;
+ display->params.enable_dmc_wl = 0;
+ else if (display->params.enable_dmc_wl >= 0)
+ display->params.enable_dmc_wl = !!display->params.enable_dmc_wl;
+ else
+ display->params.enable_dmc_wl = DISPLAY_VER(display) >= 30;
drm_dbg_kms(display->drm, "Sanitized enable_dmc_wl value: %d\n",
display->params.enable_dmc_wl);
--
2.47.0
^ permalink raw reply related [flat|nested] 30+ messages in thread
* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (17 preceding siblings ...)
2024-11-07 18:27 ` [PATCH v3 18/18] drm/i915/xe3lpd: Use DMC wakelock by default Gustavo Sousa
@ 2024-11-07 19:04 ` Patchwork
2024-11-07 19:04 ` ✗ Fi.CI.SPARSE: " Patchwork
` (2 subsequent siblings)
21 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-11-07 19:04 UTC (permalink / raw)
To: Gustavo Sousa; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
URL : https://patchwork.freedesktop.org/series/140282/
State : warning
== Summary ==
Error: dim checkpatch failed
4c9de302bb17 drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg
f4744774f2dd drm/xe: Mimic i915 behavior for non-sleeping MMIO wait
152c352c3052 drm/i915/dmc_wl: Use non-sleeping variant of MMIO wait
08203e372a4e drm/i915/dmc_wl: Check for non-zero refcount in release work
4e05c3f4f8e6 drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states
03c502f9f099 drm/i915/dmc_wl: Use sentinel item for range tables
666a5f85209b drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range()
83a7ec662c01 drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges
054005205292 drm/i915/dmc_wl: Track registers touched by the DMC
2d08135f2c59 drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables
12ed409fc4b4 drm/i915/dmc_wl: Deal with existing references when disabling
dcd602746a8e drm/i915/dmc_wl: Couple enable/disable with dynamic DC states
8ab2a0e3f623 drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK()
36be32597df6 drm/i915/dmc_wl: Init only after we have runtime device info
6c70b661050e drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK()
-:23: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'i915' - possible side-effects?
#23: FILE: drivers/gpu/drm/i915/display/intel_display_device.h:150:
+#define HAS_DMC_WAKELOCK(i915) (HAS_DMC(i915) && DISPLAY_VER(i915) >= 20)
total: 0 errors, 0 warnings, 1 checks, 8 lines checked
d823eb5b0971 drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support
beaa072150ed drm/i915/dmc_wl: Do nothing until initialized
d76b80d77dc4 drm/i915/xe3lpd: Use DMC wakelock by default
-:35: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#35: FILE: drivers/gpu/drm/i915/display/intel_display_params.c:127:
+intel_display_param_named_unsafe(enable_dmc_wl, int, 0400,
"Enable DMC wakelock "
total: 0 errors, 0 warnings, 1 checks, 33 lines checked
^ permalink raw reply [flat|nested] 30+ messages in thread
* ✗ Fi.CI.SPARSE: warning for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (18 preceding siblings ...)
2024-11-07 19:04 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3) Patchwork
@ 2024-11-07 19:04 ` Patchwork
2024-11-07 19:29 ` ✓ Fi.CI.BAT: success " Patchwork
2024-11-07 21:32 ` ✗ Fi.CI.IGT: failure " Patchwork
21 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-11-07 19:04 UTC (permalink / raw)
To: Gustavo Sousa; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
URL : https://patchwork.freedesktop.org/series/140282/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 18:27 ` [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized Gustavo Sousa
@ 2024-11-07 19:23 ` Luca Coelho
2024-11-07 20:14 ` Gustavo Sousa
0 siblings, 1 reply; 30+ messages in thread
From: Luca Coelho @ 2024-11-07 19:23 UTC (permalink / raw)
To: Gustavo Sousa, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
On Thu, 2024-11-07 at 15:27 -0300, Gustavo Sousa wrote:
> There is a bit of a chicken and egg situation where we depend on runtime
> info to know that DMC and wakelock are supported by the hardware, and
> such information is grabbed via display MMIO functions, which in turns
> call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
> flow.
s/which in turns call/which in turn calls/
> Since we do not expect DC states (and consequently the wakelock
> mechanism) to be enabled until DMC and DMC wakelock software structures
> are initialized, a simple and safe solution to this is to turn
> intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
> properly initialized.
About "safe" here... Can we be sure this will be race-free?
> Let's implement that via a new field "initialized". Not that, since we
> expect __intel_dmc_wl_supported() to be used for most non-static DMC
> wakelock functions, let's add a drm_WARN_ONCE() there for when it is
> called prior to initialization.
s/not that/note that/
> The only exception of functions that can be called before initialization
> are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
> calling __intel_dmc_wl_supported() if not initialized.
>
> An alternative solution would be to revise MMIO-related stuff in the
> whole driver initialization sequence, but that would possibly come with
> the cost of some added ordering dependencies and complexity to the
> source code.
I think this can be kept out of the commit message. It's not very
clear what you mean and it sounds much more complex than the solution
you implemented. Unless race can really be an issue here, but then the
whole commit message should be changed to an eventual more complex
solution.
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 30+ messages in thread
* ✓ Fi.CI.BAT: success for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (19 preceding siblings ...)
2024-11-07 19:04 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-11-07 19:29 ` Patchwork
2024-11-07 21:32 ` ✗ Fi.CI.IGT: failure " Patchwork
21 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-11-07 19:29 UTC (permalink / raw)
To: Gustavo Sousa; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 2368 bytes --]
== Series Details ==
Series: drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
URL : https://patchwork.freedesktop.org/series/140282/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_15651 -> Patchwork_140282v3
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/index.html
Participating hosts (44 -> 43)
------------------------------
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_140282v3 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live:
- bat-twl-1: [PASS][1] -> [INCOMPLETE][2] ([i915#9413]) +1 other test incomplete
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/bat-twl-1/igt@i915_selftest@live.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/bat-twl-1/igt@i915_selftest@live.html
#### Possible fixes ####
* igt@i915_selftest@live:
- bat-twl-2: [INCOMPLETE][3] ([i915#9413]) -> [PASS][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/bat-twl-2/igt@i915_selftest@live.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/bat-twl-2/igt@i915_selftest@live.html
* igt@i915_selftest@live@gt_lrc:
- bat-twl-2: [INCOMPLETE][5] ([i915#12445] / [i915#9413]) -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/bat-twl-2/igt@i915_selftest@live@gt_lrc.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/bat-twl-2/igt@i915_selftest@live@gt_lrc.html
[i915#12445]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12445
[i915#9413]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9413
Build changes
-------------
* Linux: CI_DRM_15651 -> Patchwork_140282v3
CI-20190529: 20190529
CI_DRM_15651: fce38995f74a8acb149e428bb83c93dddf19979a @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8100: 84e42580f918da926481fd2fb37be01451d6ee9a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_140282v3: fce38995f74a8acb149e428bb83c93dddf19979a @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/index.html
[-- Attachment #2: Type: text/html, Size: 3166 bytes --]
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 19:23 ` Luca Coelho
@ 2024-11-07 20:14 ` Gustavo Sousa
2024-11-07 20:22 ` Gustavo Sousa
2024-11-07 20:47 ` Gustavo Sousa
0 siblings, 2 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 20:14 UTC (permalink / raw)
To: Luca Coelho, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Quoting Luca Coelho (2024-11-07 16:23:06-03:00)
>On Thu, 2024-11-07 at 15:27 -0300, Gustavo Sousa wrote:
>> There is a bit of a chicken and egg situation where we depend on runtime
>> info to know that DMC and wakelock are supported by the hardware, and
>> such information is grabbed via display MMIO functions, which in turns
>> call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
>> flow.
>
>s/which in turns call/which in turn calls/
Thanks!
I'll do
s/which in turns call/which in turn call/
as the subject for "call" is "display MMIO functions".
>
>
>> Since we do not expect DC states (and consequently the wakelock
>> mechanism) to be enabled until DMC and DMC wakelock software structures
>> are initialized, a simple and safe solution to this is to turn
>> intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
>> properly initialized.
>
>
>About "safe" here... Can we be sure this will be race-free?
The initialization is done only once, during driver load. The wakelock
will be enabled only at a later moment. So, we are good in that regard.
However, now that you mentioned, yeah, we should also consider that that
we do concurrent work during initialization (e.g. loading the DMC).
Based on that, we will need to protect "initialized", which means:
- initializing the lock early together with the other ones;
- always going for the lock, even for hardware that does not support the
wakelock.
Ugh... I don't like the latter very much... But, with those provided, I
believe we should be safe.
Thoughts?
>
>
>> Let's implement that via a new field "initialized". Not that, since we
>> expect __intel_dmc_wl_supported() to be used for most non-static DMC
>> wakelock functions, let's add a drm_WARN_ONCE() there for when it is
>> called prior to initialization.
>
>
>s/not that/note that/
Thanks!
>
>
>> The only exception of functions that can be called before initialization
>> are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
>> calling __intel_dmc_wl_supported() if not initialized.
>>
>> An alternative solution would be to revise MMIO-related stuff in the
>> whole driver initialization sequence, but that would possibly come with
>> the cost of some added ordering dependencies and complexity to the
>> source code.
>
>I think this can be kept out of the commit message. It's not very
>clear what you mean and it sounds much more complex than the solution
>you implemented. Unless race can really be an issue here, but then the
>whole commit message should be changed to an eventual more complex
>solution.
I meant that we would need to revise the initialization code and find
the correct place to put the DMC Wakelock software initialization call.
That might also come with changes in some places where we do probe the
hardware for info:
- We need our initialization to happen before
intel_display_device_info_runtime_init(), because we want to check
HAS_DMC().
- Currently, __intel_display_device_info_runtime_init() is using
intel_re_read(), which in turn uses
intel_dmc_wl_get()/intel_dmc_wl_put().
- The alternative solution to using the "initialized" flag would be to
make sure that function does not use the MMIO functions that take
the DMC wakelock path.
- However, __intel_display_device_info_runtime_init() is not necessary
the only function that would need to be changed, but rather
basically everything that does MMIO before the initialization!
I hope it is clearer now :-)
--
Gustavo Sousa
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 20:14 ` Gustavo Sousa
@ 2024-11-07 20:22 ` Gustavo Sousa
2024-11-08 9:57 ` Luca Coelho
2024-11-07 20:47 ` Gustavo Sousa
1 sibling, 1 reply; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 20:22 UTC (permalink / raw)
To: Luca Coelho, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Quoting Gustavo Sousa (2024-11-07 17:14:36-03:00)
>Quoting Luca Coelho (2024-11-07 16:23:06-03:00)
>>On Thu, 2024-11-07 at 15:27 -0300, Gustavo Sousa wrote:
>>> There is a bit of a chicken and egg situation where we depend on runtime
>>> info to know that DMC and wakelock are supported by the hardware, and
>>> such information is grabbed via display MMIO functions, which in turns
>>> call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
>>> flow.
>>
>>s/which in turns call/which in turn calls/
>
>Thanks!
>
>I'll do
>
> s/which in turns call/which in turn call/
>
>as the subject for "call" is "display MMIO functions".
>
>>
>>
>>> Since we do not expect DC states (and consequently the wakelock
>>> mechanism) to be enabled until DMC and DMC wakelock software structures
>>> are initialized, a simple and safe solution to this is to turn
>>> intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
>>> properly initialized.
>>
>>
>>About "safe" here... Can we be sure this will be race-free?
>
>The initialization is done only once, during driver load. The wakelock
>will be enabled only at a later moment. So, we are good in that regard.
>
>However, now that you mentioned, yeah, we should also consider that that
>we do concurrent work during initialization (e.g. loading the DMC).
>Based on that, we will need to protect "initialized", which means:
>
>- initializing the lock early together with the other ones;
>- always going for the lock, even for hardware that does not support the
Oh, to be clear: I meant the spin lock here :-)
Something along the lines of:
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 4257cc380475..e6d4f6328c33 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -186,6 +186,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
return;
spin_lock_init(&i915->display.fb_tracking.lock);
+ spin_lock_init(&i915->display.wl.lock);
mutex_init(&i915->display.backlight.lock);
mutex_init(&i915->display.audio.mutex);
mutex_init(&i915->display.wm.wm_mutex);
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index e43077453a99..bf8d3b04336d 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -307,11 +307,11 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
- if (!__intel_dmc_wl_supported(display))
- return;
-
spin_lock_irqsave(&wl->lock, flags);
+ if (!__intel_dmc_wl_supported(display))
+ goto out_unlock;
+
wl->dc_state = dc_state;
if (drm_WARN_ON(display->drm, wl->enabled))
@@ -353,13 +353,13 @@ void intel_dmc_wl_disable(struct intel_display *display)
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
+ spin_lock_irqsave(&wl->lock, flags);
+
if (!__intel_dmc_wl_supported(display))
- return;
+ goto out_unlock;
flush_delayed_work(&wl->work);
- spin_lock_irqsave(&wl->lock, flags);
-
if (drm_WARN_ON(display->drm, !wl->enabled))
goto out_unlock;
@@ -389,13 +389,13 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
+ spin_lock_irqsave(&wl->lock, flags);
+
if (!wl->initialized)
- return;
+ goto out_unlock;
if (!__intel_dmc_wl_supported(display))
- return;
-
- spin_lock_irqsave(&wl->lock, flags);
+ goto out_unlock;
if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
goto out_unlock;
@@ -424,13 +424,13 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
struct intel_dmc_wl *wl = &display->wl;
unsigned long flags;
+ spin_lock_irqsave(&wl->lock, flags);
+
if (!wl->initialized)
- return;
+ goto out_unlock;
if (!__intel_dmc_wl_supported(display))
- return;
-
- spin_lock_irqsave(&wl->lock, flags);
+ goto out_unlock;
if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
goto out_unlock;
--
Gustavo Sousa
> wakelock.
>
>Ugh... I don't like the latter very much... But, with those provided, I
>believe we should be safe.
>
>Thoughts?
>
>>
>>
>>> Let's implement that via a new field "initialized". Not that, since we
>>> expect __intel_dmc_wl_supported() to be used for most non-static DMC
>>> wakelock functions, let's add a drm_WARN_ONCE() there for when it is
>>> called prior to initialization.
>>
>>
>>s/not that/note that/
>
>Thanks!
>
>>
>>
>>> The only exception of functions that can be called before initialization
>>> are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
>>> calling __intel_dmc_wl_supported() if not initialized.
>>>
>>> An alternative solution would be to revise MMIO-related stuff in the
>>> whole driver initialization sequence, but that would possibly come with
>>> the cost of some added ordering dependencies and complexity to the
>>> source code.
>>
>>I think this can be kept out of the commit message. It's not very
>>clear what you mean and it sounds much more complex than the solution
>>you implemented. Unless race can really be an issue here, but then the
>>whole commit message should be changed to an eventual more complex
>>solution.
>
>I meant that we would need to revise the initialization code and find
>the correct place to put the DMC Wakelock software initialization call.
>That might also come with changes in some places where we do probe the
>hardware for info:
>
> - We need our initialization to happen before
> intel_display_device_info_runtime_init(), because we want to check
> HAS_DMC().
>
> - Currently, __intel_display_device_info_runtime_init() is using
> intel_re_read(), which in turn uses
> intel_dmc_wl_get()/intel_dmc_wl_put().
>
> - The alternative solution to using the "initialized" flag would be to
> make sure that function does not use the MMIO functions that take
> the DMC wakelock path.
>
> - However, __intel_display_device_info_runtime_init() is not necessary
> the only function that would need to be changed, but rather
> basically everything that does MMIO before the initialization!
>
>I hope it is clearer now :-)
>
>--
>Gustavo Sousa
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 20:14 ` Gustavo Sousa
2024-11-07 20:22 ` Gustavo Sousa
@ 2024-11-07 20:47 ` Gustavo Sousa
2024-11-08 10:00 ` Luca Coelho
1 sibling, 1 reply; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-07 20:47 UTC (permalink / raw)
To: Luca Coelho, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Quoting Gustavo Sousa (2024-11-07 17:14:36-03:00)
>Quoting Luca Coelho (2024-11-07 16:23:06-03:00)
>>On Thu, 2024-11-07 at 15:27 -0300, Gustavo Sousa wrote:
>>> There is a bit of a chicken and egg situation where we depend on runtime
>>> info to know that DMC and wakelock are supported by the hardware, and
>>> such information is grabbed via display MMIO functions, which in turns
>>> call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
>>> flow.
>>
>>s/which in turns call/which in turn calls/
>
>Thanks!
>
>I'll do
>
> s/which in turns call/which in turn call/
>
>as the subject for "call" is "display MMIO functions".
>
>>
>>
>>> Since we do not expect DC states (and consequently the wakelock
>>> mechanism) to be enabled until DMC and DMC wakelock software structures
>>> are initialized, a simple and safe solution to this is to turn
>>> intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
>>> properly initialized.
>>
>>
>>About "safe" here... Can we be sure this will be race-free?
>
>The initialization is done only once, during driver load. The wakelock
>will be enabled only at a later moment. So, we are good in that regard.
>
>However, now that you mentioned, yeah, we should also consider that that
>we do concurrent work during initialization (e.g. loading the DMC).
>Based on that, we will need to protect "initialized", which means:
>
>- initializing the lock early together with the other ones;
>- always going for the lock, even for hardware that does not support the
> wakelock.
Well, a hacky way to mitigate this is by checking the DISPLAY_VER() >=
20 before taking the spin lock, since that info is queried in
probe_gmdid_display(), which happens at the "no-mmio" phase of driver
initialization.
By the way, that makes me think: is it too bad to do the same kind of
early MMIO via pci_iomap_range() for ICL_DFSM_DMC_DISABLE? We could
avoid this whole thing, since we would already have the correct value
for HAS_DMC() when i915/xe MMIO functions are called.
--
Gustavo Sousa
>
>Ugh... I don't like the latter very much... But, with those provided, I
>believe we should be safe.
>
>Thoughts?
>
>>
>>
>>> Let's implement that via a new field "initialized". Not that, since we
>>> expect __intel_dmc_wl_supported() to be used for most non-static DMC
>>> wakelock functions, let's add a drm_WARN_ONCE() there for when it is
>>> called prior to initialization.
>>
>>
>>s/not that/note that/
>
>Thanks!
>
>>
>>
>>> The only exception of functions that can be called before initialization
>>> are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
>>> calling __intel_dmc_wl_supported() if not initialized.
>>>
>>> An alternative solution would be to revise MMIO-related stuff in the
>>> whole driver initialization sequence, but that would possibly come with
>>> the cost of some added ordering dependencies and complexity to the
>>> source code.
>>
>>I think this can be kept out of the commit message. It's not very
>>clear what you mean and it sounds much more complex than the solution
>>you implemented. Unless race can really be an issue here, but then the
>>whole commit message should be changed to an eventual more complex
>>solution.
>
>I meant that we would need to revise the initialization code and find
>the correct place to put the DMC Wakelock software initialization call.
>That might also come with changes in some places where we do probe the
>hardware for info:
>
> - We need our initialization to happen before
> intel_display_device_info_runtime_init(), because we want to check
> HAS_DMC().
>
> - Currently, __intel_display_device_info_runtime_init() is using
> intel_re_read(), which in turn uses
> intel_dmc_wl_get()/intel_dmc_wl_put().
>
> - The alternative solution to using the "initialized" flag would be to
> make sure that function does not use the MMIO functions that take
> the DMC wakelock path.
>
> - However, __intel_display_device_info_runtime_init() is not necessary
> the only function that would need to be changed, but rather
> basically everything that does MMIO before the initialization!
>
>I hope it is clearer now :-)
>
>--
>Gustavo Sousa
^ permalink raw reply [flat|nested] 30+ messages in thread
* ✗ Fi.CI.IGT: failure for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
` (20 preceding siblings ...)
2024-11-07 19:29 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2024-11-07 21:32 ` Patchwork
21 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-11-07 21:32 UTC (permalink / raw)
To: Gustavo Sousa; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 76068 bytes --]
== Series Details ==
Series: drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3)
URL : https://patchwork.freedesktop.org/series/140282/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_15651_full -> Patchwork_140282v3_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_140282v3_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_140282v3_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (10 -> 9)
------------------------------
Additional (1): shard-dg2-set2
Missing (2): shard-dg2-9 shard-glk-0
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_140282v3_full:
### CI changes ###
#### Possible regressions ####
* boot:
- shard-dg1: ([PASS][1], [PASS][2], [PASS][3], [PASS][4], [PASS][5], [PASS][6], [PASS][7], [PASS][8], [PASS][9], [PASS][10], [PASS][11], [PASS][12], [PASS][13], [PASS][14], [PASS][15], [PASS][16], [PASS][17], [PASS][18], [PASS][19], [PASS][20], [PASS][21], [PASS][22], [PASS][23], [PASS][24], [PASS][25]) -> ([PASS][26], [PASS][27], [PASS][28], [PASS][29], [PASS][30], [PASS][31], [PASS][32], [PASS][33], [FAIL][34], [PASS][35], [PASS][36], [PASS][37], [PASS][38], [PASS][39], [PASS][40], [PASS][41], [PASS][42], [PASS][43], [PASS][44], [PASS][45], [PASS][46], [PASS][47], [PASS][48], [PASS][49], [PASS][50])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-13/boot.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-13/boot.html
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-13/boot.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-13/boot.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-14/boot.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-14/boot.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-14/boot.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-14/boot.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-16/boot.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-16/boot.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-16/boot.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-17/boot.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-17/boot.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-17/boot.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-17/boot.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/boot.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/boot.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/boot.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/boot.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/boot.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-19/boot.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-19/boot.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-19/boot.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-12/boot.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-12/boot.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-12/boot.html
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-12/boot.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-12/boot.html
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-13/boot.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-13/boot.html
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-13/boot.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-14/boot.html
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-14/boot.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-14/boot.html
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-14/boot.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/boot.html
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/boot.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/boot.html
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/boot.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/boot.html
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/boot.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/boot.html
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/boot.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/boot.html
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/boot.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/boot.html
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-19/boot.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-19/boot.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-19/boot.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-19/boot.html
### IGT changes ###
#### Possible regressions ####
* igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2:
- shard-glk: NOTRUN -> [INCOMPLETE][51]
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk1/igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2.html
Known issues
------------
Here are the changes found in Patchwork_140282v3_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@drm_fdinfo@isolation:
- shard-dg2: NOTRUN -> [SKIP][52] ([i915#8414]) +8 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@drm_fdinfo@isolation.html
* igt@gem_ccs@block-multicopy-inplace:
- shard-tglu-1: NOTRUN -> [SKIP][53] ([i915#3555] / [i915#9323])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@gem_ccs@block-multicopy-inplace.html
* igt@gem_ctx_engines@invalid-engines:
- shard-tglu: NOTRUN -> [FAIL][54] ([i915#12031])
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@gem_ctx_engines@invalid-engines.html
* igt@gem_ctx_persistence@heartbeat-stop:
- shard-dg2: NOTRUN -> [SKIP][55] ([i915#8555])
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@gem_ctx_persistence@heartbeat-stop.html
* igt@gem_ctx_sseu@invalid-args:
- shard-tglu-1: NOTRUN -> [SKIP][56] ([i915#280])
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@gem_ctx_sseu@invalid-args.html
* igt@gem_eio@hibernate:
- shard-dg2: NOTRUN -> [ABORT][57] ([i915#10030] / [i915#7975] / [i915#8213])
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@gem_eio@hibernate.html
* igt@gem_eio@in-flight-10ms:
- shard-dg1: [PASS][58] -> [DMESG-WARN][59] ([i915#4423]) +1 other test dmesg-warn
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/igt@gem_eio@in-flight-10ms.html
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@gem_eio@in-flight-10ms.html
* igt@gem_exec_fair@basic-none:
- shard-tglu: NOTRUN -> [FAIL][60] ([i915#2842]) +7 other tests fail
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@gem_exec_fair@basic-none.html
* igt@gem_exec_fair@basic-pace@rcs0:
- shard-rkl: [PASS][61] -> [FAIL][62] ([i915#2842])
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-3/igt@gem_exec_fair@basic-pace@rcs0.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-5/igt@gem_exec_fair@basic-pace@rcs0.html
* igt@gem_exec_fence@submit3:
- shard-dg2: NOTRUN -> [SKIP][63] ([i915#4812])
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gem_exec_fence@submit3.html
* igt@gem_exec_flush@basic-wb-rw-default:
- shard-dg2: NOTRUN -> [SKIP][64] ([i915#3539] / [i915#4852])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gem_exec_flush@basic-wb-rw-default.html
* igt@gem_exec_reloc@basic-scanout:
- shard-dg2: NOTRUN -> [SKIP][65] ([i915#3281]) +1 other test skip
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gem_exec_reloc@basic-scanout.html
* igt@gem_exec_reloc@basic-wc-cpu-active:
- shard-dg1: NOTRUN -> [SKIP][66] ([i915#3281]) +1 other test skip
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/igt@gem_exec_reloc@basic-wc-cpu-active.html
* igt@gem_exec_reloc@basic-write-cpu-noreloc:
- shard-mtlp: NOTRUN -> [SKIP][67] ([i915#3281])
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-8/igt@gem_exec_reloc@basic-write-cpu-noreloc.html
* igt@gem_exec_schedule@pi-common@vcs0:
- shard-tglu-1: NOTRUN -> [FAIL][68] ([i915#12296]) +5 other tests fail
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@gem_exec_schedule@pi-common@vcs0.html
* igt@gem_exec_schedule@pi-ringfull@bcs0:
- shard-glk: NOTRUN -> [FAIL][69] ([i915#12296] / [i915#12630]) +4 other tests fail
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk1/igt@gem_exec_schedule@pi-ringfull@bcs0.html
* igt@gem_exec_schedule@preempt-queue-chain:
- shard-dg2: NOTRUN -> [SKIP][70] ([i915#4537] / [i915#4812])
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@gem_exec_schedule@preempt-queue-chain.html
* igt@gem_exec_suspend@basic-s4-devices:
- shard-dg2: [PASS][71] -> [ABORT][72] ([i915#7975] / [i915#8213]) +1 other test abort
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-11/igt@gem_exec_suspend@basic-s4-devices.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-2/igt@gem_exec_suspend@basic-s4-devices.html
* igt@gem_lmem_swapping@parallel-random-verify:
- shard-tglu-1: NOTRUN -> [SKIP][73] ([i915#4613]) +1 other test skip
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@gem_lmem_swapping@parallel-random-verify.html
* igt@gem_lmem_swapping@random-engines:
- shard-tglu: NOTRUN -> [SKIP][74] ([i915#4613]) +1 other test skip
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@gem_lmem_swapping@random-engines.html
* igt@gem_media_vme:
- shard-tglu: NOTRUN -> [SKIP][75] ([i915#284])
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@gem_media_vme.html
* igt@gem_mmap@big-bo:
- shard-dg2: NOTRUN -> [SKIP][76] ([i915#4083]) +2 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gem_mmap@big-bo.html
* igt@gem_mmap_gtt@basic-small-bo-tiledx:
- shard-dg1: NOTRUN -> [SKIP][77] ([i915#4077])
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@gem_mmap_gtt@basic-small-bo-tiledx.html
- shard-mtlp: NOTRUN -> [SKIP][78] ([i915#4077])
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-1/igt@gem_mmap_gtt@basic-small-bo-tiledx.html
* igt@gem_mmap_gtt@cpuset-big-copy:
- shard-dg2: NOTRUN -> [SKIP][79] ([i915#4077]) +1 other test skip
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gem_mmap_gtt@cpuset-big-copy.html
* igt@gem_mmap_wc@write-prefaulted:
- shard-dg1: NOTRUN -> [SKIP][80] ([i915#4083])
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@gem_mmap_wc@write-prefaulted.html
- shard-mtlp: NOTRUN -> [SKIP][81] ([i915#4083])
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-1/igt@gem_mmap_wc@write-prefaulted.html
* igt@gem_partial_pwrite_pread@writes-after-reads:
- shard-mtlp: NOTRUN -> [SKIP][82] ([i915#3282])
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-8/igt@gem_partial_pwrite_pread@writes-after-reads.html
* igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted:
- shard-tglu: NOTRUN -> [SKIP][83] ([i915#4270]) +2 other tests skip
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html
* igt@gem_pxp@protected-raw-src-copy-not-readible:
- shard-tglu-1: NOTRUN -> [SKIP][84] ([i915#4270]) +1 other test skip
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@gem_pxp@protected-raw-src-copy-not-readible.html
* igt@gem_pxp@verify-pxp-stale-buf-execution:
- shard-dg2: NOTRUN -> [SKIP][85] ([i915#4270])
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gem_pxp@verify-pxp-stale-buf-execution.html
* igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled:
- shard-dg2: NOTRUN -> [SKIP][86] ([i915#5190] / [i915#8428]) +1 other test skip
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled.html
* igt@gem_userptr_blits@dmabuf-unsync:
- shard-tglu: NOTRUN -> [SKIP][87] ([i915#3297]) +1 other test skip
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@gem_userptr_blits@dmabuf-unsync.html
* igt@gem_userptr_blits@map-fixed-invalidate-overlap:
- shard-dg1: NOTRUN -> [SKIP][88] ([i915#3297] / [i915#4880])
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/igt@gem_userptr_blits@map-fixed-invalidate-overlap.html
* igt@gem_userptr_blits@unsync-overlap:
- shard-dg2: NOTRUN -> [SKIP][89] ([i915#3297])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-7/igt@gem_userptr_blits@unsync-overlap.html
* igt@gen9_exec_parse@batch-zero-length:
- shard-tglu: NOTRUN -> [SKIP][90] ([i915#2527] / [i915#2856]) +1 other test skip
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@gen9_exec_parse@batch-zero-length.html
* igt@gen9_exec_parse@secure-batches:
- shard-dg2: NOTRUN -> [SKIP][91] ([i915#2856]) +1 other test skip
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@gen9_exec_parse@secure-batches.html
* igt@gen9_exec_parse@valid-registers:
- shard-tglu-1: NOTRUN -> [SKIP][92] ([i915#2527] / [i915#2856]) +2 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@gen9_exec_parse@valid-registers.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-rkl: [PASS][93] -> [ABORT][94] ([i915#9820])
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-1/igt@i915_module_load@reload-with-fault-injection.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-3/igt@i915_module_load@reload-with-fault-injection.html
- shard-tglu: [PASS][95] -> [ABORT][96] ([i915#9820])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-tglu-6/igt@i915_module_load@reload-with-fault-injection.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-4/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_module_load@resize-bar:
- shard-tglu-1: NOTRUN -> [SKIP][97] ([i915#6412])
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@i915_module_load@resize-bar.html
* igt@i915_pm_rpm@system-suspend-devices:
- shard-snb: NOTRUN -> [SKIP][98] +47 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb2/igt@i915_pm_rpm@system-suspend-devices.html
* igt@i915_pm_sseu@full-enable:
- shard-tglu-1: NOTRUN -> [SKIP][99] ([i915#4387])
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@i915_pm_sseu@full-enable.html
- shard-mtlp: NOTRUN -> [SKIP][100] ([i915#8437])
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-7/igt@i915_pm_sseu@full-enable.html
* igt@i915_suspend@basic-s2idle-without-i915:
- shard-dg1: [PASS][101] -> [DMESG-WARN][102] ([i915#4391] / [i915#4423])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/igt@i915_suspend@basic-s2idle-without-i915.html
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@i915_suspend@basic-s2idle-without-i915.html
* igt@i915_suspend@debugfs-reader:
- shard-glk: [PASS][103] -> [ABORT][104] ([i915#8213])
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk8/igt@i915_suspend@debugfs-reader.html
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk5/igt@i915_suspend@debugfs-reader.html
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-tglu: [PASS][105] -> [FAIL][106] ([i915#10991]) +1 other test fail
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-tglu-7/igt@kms_async_flips@alternate-sync-async-flip.html
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-3/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-4-y-rc-ccs:
- shard-dg1: NOTRUN -> [SKIP][107] ([i915#8709]) +7 other tests skip
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-4-y-rc-ccs.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-2-4-mc-ccs:
- shard-dg2: NOTRUN -> [SKIP][108] ([i915#8709]) +11 other tests skip
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-11/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-2-4-mc-ccs.html
* igt@kms_atomic@plane-primary-overlay-mutable-zpos:
- shard-tglu-1: NOTRUN -> [SKIP][109] ([i915#9531])
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
* igt@kms_atomic_transition@modeset-transition-nonblocking:
- shard-glk: [PASS][110] -> [FAIL][111] ([i915#12177])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk6/igt@kms_atomic_transition@modeset-transition-nonblocking.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk8/igt@kms_atomic_transition@modeset-transition-nonblocking.html
* igt@kms_atomic_transition@modeset-transition-nonblocking@2x-outputs:
- shard-glk: [PASS][112] -> [FAIL][113] ([i915#11859])
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk6/igt@kms_atomic_transition@modeset-transition-nonblocking@2x-outputs.html
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk8/igt@kms_atomic_transition@modeset-transition-nonblocking@2x-outputs.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
- shard-tglu: NOTRUN -> [SKIP][114] ([i915#1769] / [i915#3555])
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
* igt@kms_big_fb@4-tiled-addfb-size-offset-overflow:
- shard-tglu: NOTRUN -> [SKIP][115] ([i915#5286]) +4 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_big_fb@4-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
- shard-tglu-1: NOTRUN -> [SKIP][116] ([i915#5286]) +2 other tests skip
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
- shard-dg2: NOTRUN -> [SKIP][117] ([i915#4538] / [i915#5190]) +1 other test skip
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
* igt@kms_ccs@bad-aux-stride-y-tiled-ccs@pipe-d-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][118] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_ccs@bad-aux-stride-y-tiled-ccs@pipe-d-hdmi-a-1.html
* igt@kms_ccs@bad-pixel-format-yf-tiled-ccs@pipe-c-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][119] ([i915#10307] / [i915#6095]) +131 other tests skip
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-8/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs@pipe-c-hdmi-a-1.html
* igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][120] ([i915#6095]) +77 other tests skip
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-1/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html
* igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1:
- shard-tglu: NOTRUN -> [SKIP][121] ([i915#6095]) +49 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1:
- shard-tglu-1: NOTRUN -> [SKIP][122] ([i915#6095]) +29 other tests skip
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-4:
- shard-dg1: NOTRUN -> [SKIP][123] ([i915#6095]) +80 other tests skip
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-4.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
- shard-dg2: NOTRUN -> [SKIP][124] ([i915#12313])
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
* igt@kms_cdclk@mode-transition:
- shard-dg2: NOTRUN -> [SKIP][125] ([i915#11616] / [i915#7213])
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@kms_cdclk@mode-transition.html
* igt@kms_cdclk@mode-transition-all-outputs:
- shard-tglu-1: NOTRUN -> [SKIP][126] ([i915#3742])
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_cdclk@mode-transition-all-outputs.html
* igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][127] ([i915#7213]) +3 other tests skip
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html
* igt@kms_chamelium_frames@hdmi-crc-fast:
- shard-tglu: NOTRUN -> [SKIP][128] ([i915#7828]) +4 other tests skip
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_chamelium_frames@hdmi-crc-fast.html
* igt@kms_chamelium_frames@hdmi-frame-dump:
- shard-tglu-1: NOTRUN -> [SKIP][129] ([i915#7828]) +3 other tests skip
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_chamelium_frames@hdmi-frame-dump.html
* igt@kms_chamelium_hpd@common-hpd-after-suspend:
- shard-dg2: NOTRUN -> [SKIP][130] ([i915#7828]) +3 other tests skip
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
* igt@kms_color@deep-color:
- shard-tglu: NOTRUN -> [SKIP][131] ([i915#3555] / [i915#9979])
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_color@deep-color.html
* igt@kms_content_protection@atomic:
- shard-tglu-1: NOTRUN -> [SKIP][132] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_content_protection@atomic.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-tglu: NOTRUN -> [SKIP][133] ([i915#3116] / [i915#3299])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_content_protection@legacy@pipe-a-dp-4:
- shard-dg2: NOTRUN -> [TIMEOUT][134] ([i915#7173])
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_content_protection@legacy@pipe-a-dp-4.html
* igt@kms_content_protection@mei-interface:
- shard-tglu: NOTRUN -> [SKIP][135] ([i915#6944] / [i915#9424])
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_content_protection@mei-interface.html
* igt@kms_cursor_crc@cursor-rapid-movement-32x32:
- shard-dg2: NOTRUN -> [SKIP][136] ([i915#3555]) +1 other test skip
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
- shard-tglu-1: NOTRUN -> [SKIP][137] +42 other tests skip
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-glk: NOTRUN -> [FAIL][138] ([i915#2346])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
- shard-dg2: NOTRUN -> [SKIP][139] ([i915#4103] / [i915#4213])
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
* igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
- shard-tglu: NOTRUN -> [SKIP][140] ([i915#9723])
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html
* igt@kms_dp_linktrain_fallback@dp-fallback:
- shard-tglu-1: NOTRUN -> [SKIP][141] ([i915#12402])
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_dp_linktrain_fallback@dp-fallback.html
* igt@kms_feature_discovery@dp-mst:
- shard-tglu-1: NOTRUN -> [SKIP][142] ([i915#9337])
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_feature_discovery@dp-mst.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-vga1-hdmi-a1:
- shard-snb: [PASS][143] -> [FAIL][144] ([i915#2122]) +1 other test fail
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-snb4/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-vga1-hdmi-a1.html
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb6/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible@ab-vga1-hdmi-a1.html
* igt@kms_flip@2x-flip-vs-dpms:
- shard-tglu: NOTRUN -> [SKIP][145] ([i915#3637]) +4 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_flip@2x-flip-vs-dpms.html
* igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible:
- shard-tglu: NOTRUN -> [SKIP][146] ([i915#3637] / [i915#3966])
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
- shard-tglu-1: NOTRUN -> [SKIP][147] ([i915#3637])
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@2x-flip-vs-fences:
- shard-dg2: NOTRUN -> [SKIP][148] ([i915#8381])
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_flip@2x-flip-vs-fences.html
* igt@kms_flip@2x-flip-vs-modeset:
- shard-tglu-1: NOTRUN -> [SKIP][149] ([i915#3637] / [i915#3966])
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_flip@2x-flip-vs-modeset.html
* igt@kms_flip@2x-wf_vblank-ts-check:
- shard-snb: NOTRUN -> [FAIL][150] ([i915#2122]) +1 other test fail
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb1/igt@kms_flip@2x-wf_vblank-ts-check.html
* igt@kms_flip@flip-vs-blocking-wf-vblank@a-hdmi-a1:
- shard-glk: [PASS][151] -> [FAIL][152] ([i915#2122]) +1 other test fail
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk4/igt@kms_flip@flip-vs-blocking-wf-vblank@a-hdmi-a1.html
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk3/igt@kms_flip@flip-vs-blocking-wf-vblank@a-hdmi-a1.html
- shard-tglu-1: NOTRUN -> [FAIL][153] ([i915#2122]) +1 other test fail
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_flip@flip-vs-blocking-wf-vblank@a-hdmi-a1.html
* igt@kms_flip@flip-vs-expired-vblank:
- shard-glk: [PASS][154] -> [FAIL][155] ([i915#79]) +1 other test fail
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk8/igt@kms_flip@flip-vs-expired-vblank.html
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk2/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_flip@flip-vs-suspend:
- shard-dg1: NOTRUN -> [INCOMPLETE][156] ([i915#4839] / [i915#6113])
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip@flip-vs-suspend@b-hdmi-a2:
- shard-glk: NOTRUN -> [INCOMPLETE][157] ([i915#4839])
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk4/igt@kms_flip@flip-vs-suspend@b-hdmi-a2.html
* igt@kms_flip@flip-vs-suspend@c-hdmi-a4:
- shard-dg1: NOTRUN -> [INCOMPLETE][158] ([i915#6113])
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-18/igt@kms_flip@flip-vs-suspend@c-hdmi-a4.html
* igt@kms_flip@plain-flip-fb-recreate:
- shard-rkl: [PASS][159] -> [FAIL][160] ([i915#2122]) +1 other test fail
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-3/igt@kms_flip@plain-flip-fb-recreate.html
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-5/igt@kms_flip@plain-flip-fb-recreate.html
* igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a2:
- shard-rkl: [PASS][161] -> [FAIL][162] ([i915#11989])
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-3/igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a2.html
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-5/igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a2.html
* igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a3:
- shard-dg2: [PASS][163] -> [FAIL][164] ([i915#2122]) +6 other tests fail
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-1/igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a3.html
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_flip@plain-flip-fb-recreate@b-hdmi-a3.html
* igt@kms_flip@plain-flip-ts-check@a-hdmi-a1:
- shard-dg2: NOTRUN -> [FAIL][165] ([i915#2122])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_flip@plain-flip-ts-check@a-hdmi-a1.html
* igt@kms_flip@wf_vblank-ts-check:
- shard-rkl: [PASS][166] -> [FAIL][167] ([i915#11989] / [i915#2122])
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-2/igt@kms_flip@wf_vblank-ts-check.html
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-1/igt@kms_flip@wf_vblank-ts-check.html
* igt@kms_flip@wf_vblank-ts-check@a-hdmi-a2:
- shard-rkl: NOTRUN -> [FAIL][168] ([i915#11961])
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-1/igt@kms_flip@wf_vblank-ts-check@a-hdmi-a2.html
* igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode:
- shard-tglu: NOTRUN -> [SKIP][169] ([i915#2587] / [i915#2672]) +3 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling:
- shard-tglu: NOTRUN -> [SKIP][170] ([i915#2672] / [i915#3555]) +2 other tests skip
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling:
- shard-tglu: NOTRUN -> [SKIP][171] ([i915#2587] / [i915#2672] / [i915#3555])
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
- shard-tglu-1: NOTRUN -> [SKIP][172] ([i915#2672] / [i915#3555])
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-tglu-1: NOTRUN -> [SKIP][173] ([i915#2587] / [i915#2672])
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
- shard-dg2: NOTRUN -> [SKIP][174] ([i915#5354]) +21 other tests skip
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite:
- shard-snb: [PASS][175] -> [SKIP][176] +12 other tests skip
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite.html
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
- shard-dg1: NOTRUN -> [SKIP][177] ([i915#3458]) +1 other test skip
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][178] ([i915#8708]) +7 other tests skip
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
- shard-tglu: NOTRUN -> [SKIP][179] +59 other tests skip
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render:
- shard-dg1: NOTRUN -> [SKIP][180] +3 other tests skip
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render.html
- shard-mtlp: NOTRUN -> [SKIP][181] ([i915#1825]) +1 other test skip
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-1/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
- shard-dg2: NOTRUN -> [SKIP][182] ([i915#3458]) +7 other tests skip
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html
* igt@kms_getfb@getfb-reject-ccs:
- shard-dg2: NOTRUN -> [SKIP][183] ([i915#6118])
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_getfb@getfb-reject-ccs.html
* igt@kms_hdr@static-swap:
- shard-tglu: NOTRUN -> [SKIP][184] ([i915#3555] / [i915#8228])
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_hdr@static-swap.html
* igt@kms_hdr@static-toggle-dpms:
- shard-tglu-1: NOTRUN -> [SKIP][185] ([i915#3555] / [i915#8228])
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_hdr@static-toggle-dpms.html
* igt@kms_joiner@basic-force-ultra-joiner:
- shard-dg2: NOTRUN -> [SKIP][186] ([i915#10656])
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_joiner@basic-force-ultra-joiner.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][187] ([i915#10656])
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-ultra-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][188] ([i915#12394])
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html
* igt@kms_joiner@invalid-modeset-ultra-joiner:
- shard-tglu: NOTRUN -> [SKIP][189] ([i915#12339])
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_joiner@invalid-modeset-ultra-joiner.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-tglu-1: NOTRUN -> [SKIP][190] ([i915#6301])
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation:
- shard-dg2: NOTRUN -> [SKIP][191] ([i915#12247] / [i915#9423])
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-d:
- shard-dg2: NOTRUN -> [SKIP][192] ([i915#12247]) +3 other tests skip
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-d.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d:
- shard-tglu-1: NOTRUN -> [SKIP][193] ([i915#12247]) +4 other tests skip
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d.html
* igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25:
- shard-tglu: NOTRUN -> [SKIP][194] ([i915#12247] / [i915#6953])
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25.html
* igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-d:
- shard-tglu: NOTRUN -> [SKIP][195] ([i915#12247]) +3 other tests skip
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-d.html
* igt@kms_pm_backlight@brightness-with-dpms:
- shard-dg2: NOTRUN -> [SKIP][196] ([i915#12343])
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@kms_pm_backlight@brightness-with-dpms.html
* igt@kms_pm_dc@dc5-retention-flops:
- shard-tglu: NOTRUN -> [SKIP][197] ([i915#3828])
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_pm_dc@dc5-retention-flops.html
* igt@kms_pm_dc@dc6-psr:
- shard-dg2: NOTRUN -> [SKIP][198] ([i915#9685]) +1 other test skip
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@kms_pm_dc@dc6-psr.html
* igt@kms_pm_lpsp@screens-disabled:
- shard-tglu: NOTRUN -> [SKIP][199] ([i915#8430])
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_pm_lpsp@screens-disabled.html
* igt@kms_pm_rpm@modeset-non-lpsp:
- shard-dg2: [PASS][200] -> [SKIP][201] ([i915#9519])
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-3/igt@kms_pm_rpm@modeset-non-lpsp.html
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress:
- shard-rkl: [PASS][202] -> [SKIP][203] ([i915#9519])
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-5/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-2/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-tglu-1: NOTRUN -> [SKIP][204] ([i915#9519])
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
* igt@kms_pm_rpm@pc8-residency:
- shard-dg2: NOTRUN -> [SKIP][205] +1 other test skip
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_pm_rpm@pc8-residency.html
* igt@kms_prime@d3hot:
- shard-tglu: NOTRUN -> [SKIP][206] ([i915#6524])
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_prime@d3hot.html
* igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf:
- shard-tglu: NOTRUN -> [SKIP][207] ([i915#11520]) +5 other tests skip
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-snb: NOTRUN -> [SKIP][208] ([i915#11520]) +3 other tests skip
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb1/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area:
- shard-glk: NOTRUN -> [SKIP][209] ([i915#11520]) +1 other test skip
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk9/igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area.html
* igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb:
- shard-tglu-1: NOTRUN -> [SKIP][210] ([i915#11520]) +1 other test skip
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
- shard-dg2: NOTRUN -> [SKIP][211] ([i915#11520]) +4 other tests skip
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_su@page_flip-nv12:
- shard-mtlp: NOTRUN -> [SKIP][212] ([i915#4348])
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-2/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr@fbc-psr-cursor-mmap-cpu@edp-1:
- shard-mtlp: NOTRUN -> [SKIP][213] ([i915#9688]) +1 other test skip
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-8/igt@kms_psr@fbc-psr-cursor-mmap-cpu@edp-1.html
* igt@kms_psr@fbc-psr-no-drrs:
- shard-tglu: NOTRUN -> [SKIP][214] ([i915#9732]) +15 other tests skip
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_psr@fbc-psr-no-drrs.html
* igt@kms_psr@pr-primary-render:
- shard-dg2: NOTRUN -> [SKIP][215] ([i915#1072] / [i915#9732]) +6 other tests skip
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@kms_psr@pr-primary-render.html
* igt@kms_psr@psr-cursor-render:
- shard-dg1: NOTRUN -> [SKIP][216] ([i915#1072] / [i915#9732]) +1 other test skip
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/igt@kms_psr@psr-cursor-render.html
* igt@kms_psr@psr-no-drrs:
- shard-tglu-1: NOTRUN -> [SKIP][217] ([i915#9732]) +9 other tests skip
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_psr@psr-no-drrs.html
* igt@kms_rotation_crc@primary-4-tiled-reflect-x-180:
- shard-tglu-1: NOTRUN -> [SKIP][218] ([i915#5289])
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-dg2: NOTRUN -> [SKIP][219] ([i915#5190]) +1 other test skip
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
* igt@kms_selftest@drm_framebuffer:
- shard-tglu-1: NOTRUN -> [ABORT][220] ([i915#12231]) +1 other test abort
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_selftest@drm_framebuffer.html
* igt@kms_vrr@flip-basic:
- shard-tglu-1: NOTRUN -> [SKIP][221] ([i915#3555]) +3 other tests skip
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_vrr@flip-basic.html
* igt@kms_vrr@flip-suspend:
- shard-tglu: NOTRUN -> [SKIP][222] ([i915#3555]) +2 other tests skip
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_vrr@flip-suspend.html
* igt@kms_vrr@lobf:
- shard-tglu-1: NOTRUN -> [SKIP][223] ([i915#11920])
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_vrr@lobf.html
* igt@kms_vrr@max-min:
- shard-tglu: NOTRUN -> [SKIP][224] ([i915#9906]) +1 other test skip
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@kms_vrr@max-min.html
* igt@kms_vrr@negative-basic:
- shard-glk: NOTRUN -> [SKIP][225] +81 other tests skip
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk9/igt@kms_vrr@negative-basic.html
* igt@kms_writeback@writeback-check-output-xrgb2101010:
- shard-tglu: NOTRUN -> [SKIP][226] ([i915#2437] / [i915#9412])
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_writeback@writeback-check-output-xrgb2101010.html
* igt@kms_writeback@writeback-fb-id-xrgb2101010:
- shard-tglu-1: NOTRUN -> [SKIP][227] ([i915#2437] / [i915#9412])
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-1/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
* igt@perf@mi-rpc:
- shard-dg2: NOTRUN -> [SKIP][228] ([i915#2434])
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@perf@mi-rpc.html
* igt@perf_pmu@rc6-all-gts:
- shard-tglu: NOTRUN -> [SKIP][229] ([i915#8516]) +1 other test skip
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-9/igt@perf_pmu@rc6-all-gts.html
* igt@perf_pmu@rc6@other-idle-gt0:
- shard-dg2: NOTRUN -> [SKIP][230] ([i915#8516])
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@perf_pmu@rc6@other-idle-gt0.html
* igt@prime_vgem@fence-write-hang:
- shard-dg2: NOTRUN -> [SKIP][231] ([i915#3708])
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@prime_vgem@fence-write-hang.html
* igt@sriov_basic@enable-vfs-autoprobe-on:
- shard-dg2: NOTRUN -> [SKIP][232] ([i915#9917])
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@sriov_basic@enable-vfs-autoprobe-on.html
#### Possible fixes ####
* igt@api_intel_allocator@alloc-simple:
- shard-dg2: [INCOMPLETE][233] -> [PASS][234]
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-10/igt@api_intel_allocator@alloc-simple.html
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@api_intel_allocator@alloc-simple.html
* igt@gem_ctx_engines@invalid-engines:
- shard-rkl: [FAIL][235] ([i915#12031]) -> [PASS][236]
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-7/igt@gem_ctx_engines@invalid-engines.html
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-4/igt@gem_ctx_engines@invalid-engines.html
* igt@gem_eio@reset-stress:
- shard-dg1: [FAIL][237] ([i915#12543] / [i915#5784]) -> [PASS][238]
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/igt@gem_eio@reset-stress.html
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-14/igt@gem_eio@reset-stress.html
* igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-tglu: [FAIL][239] ([i915#2842]) -> [PASS][240] +1 other test pass
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-tglu-5/igt@gem_exec_fair@basic-pace-share@rcs0.html
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-7/igt@gem_exec_fair@basic-pace-share@rcs0.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-dg2: [ABORT][241] ([i915#9820]) -> [PASS][242]
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-2/igt@i915_module_load@reload-with-fault-injection.html
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-1/igt@i915_module_load@reload-with-fault-injection.html
- shard-snb: [ABORT][243] ([i915#9820]) -> [PASS][244]
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-snb2/igt@i915_module_load@reload-with-fault-injection.html
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb2/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pm_rc6_residency@rc6-idle:
- shard-dg1: [FAIL][245] ([i915#12548] / [i915#3591]) -> [PASS][246]
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-19/igt@i915_pm_rc6_residency@rc6-idle.html
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/igt@i915_pm_rc6_residency@rc6-idle.html
* igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0:
- shard-dg1: [FAIL][247] ([i915#3591]) -> [PASS][248] +1 other test pass
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-19/igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0.html
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-16/igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0.html
* igt@i915_pm_rps@engine-order:
- shard-glk: [FAIL][249] ([i915#12308]) -> [PASS][250]
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk7/igt@i915_pm_rps@engine-order.html
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk9/igt@i915_pm_rps@engine-order.html
* igt@i915_selftest@live:
- shard-glk: [DMESG-FAIL][251] -> [PASS][252] +1 other test pass
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk4/igt@i915_selftest@live.html
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk3/igt@i915_selftest@live.html
* igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1:
- shard-mtlp: [FAIL][253] ([i915#11808] / [i915#5956]) -> [PASS][254] +1 other test pass
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-mtlp-4/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-4/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html
* igt@kms_flip@2x-plain-flip-fb-recreate@ab-vga1-hdmi-a1:
- shard-snb: [FAIL][255] ([i915#2122]) -> [PASS][256] +7 other tests pass
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-snb6/igt@kms_flip@2x-plain-flip-fb-recreate@ab-vga1-hdmi-a1.html
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb2/igt@kms_flip@2x-plain-flip-fb-recreate@ab-vga1-hdmi-a1.html
* igt@kms_flip@2x-plain-flip-ts-check@ac-hdmi-a1-hdmi-a2:
- shard-glk: [FAIL][257] ([i915#2122]) -> [PASS][258]
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk6/igt@kms_flip@2x-plain-flip-ts-check@ac-hdmi-a1-hdmi-a2.html
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk3/igt@kms_flip@2x-plain-flip-ts-check@ac-hdmi-a1-hdmi-a2.html
* igt@kms_flip@flip-vs-suspend@a-hdmi-a2:
- shard-glk: [INCOMPLETE][259] ([i915#4839]) -> [PASS][260] +1 other test pass
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk3/igt@kms_flip@flip-vs-suspend@a-hdmi-a2.html
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk4/igt@kms_flip@flip-vs-suspend@a-hdmi-a2.html
* igt@kms_flip@flip-vs-suspend@b-edp1:
- shard-mtlp: [INCOMPLETE][261] ([i915#6113]) -> [PASS][262] +1 other test pass
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-mtlp-8/igt@kms_flip@flip-vs-suspend@b-edp1.html
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-7/igt@kms_flip@flip-vs-suspend@b-edp1.html
* igt@kms_flip@plain-flip-ts-check:
- shard-mtlp: [FAIL][263] ([i915#12457] / [i915#2122]) -> [PASS][264]
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-mtlp-7/igt@kms_flip@plain-flip-ts-check.html
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-3/igt@kms_flip@plain-flip-ts-check.html
* igt@kms_flip@plain-flip-ts-check@b-hdmi-a1:
- shard-tglu: [FAIL][265] ([i915#2122]) -> [PASS][266] +2 other tests pass
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-tglu-7/igt@kms_flip@plain-flip-ts-check@b-hdmi-a1.html
[266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-3/igt@kms_flip@plain-flip-ts-check@b-hdmi-a1.html
* igt@kms_flip@wf_vblank-ts-check:
- shard-dg1: [FAIL][267] ([i915#11989] / [i915#12517] / [i915#2122]) -> [PASS][268]
[267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-14/igt@kms_flip@wf_vblank-ts-check.html
[268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-19/igt@kms_flip@wf_vblank-ts-check.html
- shard-mtlp: [FAIL][269] ([i915#11989] / [i915#2122]) -> [PASS][270]
[269]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-mtlp-8/igt@kms_flip@wf_vblank-ts-check.html
[270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-4/igt@kms_flip@wf_vblank-ts-check.html
* igt@kms_flip@wf_vblank-ts-check@a-hdmi-a4:
- shard-dg1: [FAIL][271] ([i915#2122]) -> [PASS][272]
[271]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-14/igt@kms_flip@wf_vblank-ts-check@a-hdmi-a4.html
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-19/igt@kms_flip@wf_vblank-ts-check@a-hdmi-a4.html
* igt@kms_flip@wf_vblank-ts-check@c-edp1:
- shard-mtlp: [FAIL][273] ([i915#2122]) -> [PASS][274] +4 other tests pass
[273]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-mtlp-8/igt@kms_flip@wf_vblank-ts-check@c-edp1.html
[274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-4/igt@kms_flip@wf_vblank-ts-check@c-edp1.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt:
- shard-dg2: [FAIL][275] ([i915#6880]) -> [PASS][276]
[275]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html
[276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render:
- shard-snb: [SKIP][277] -> [PASS][278] +2 other tests pass
[277]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-snb4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render.html
[278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render.html
* igt@kms_pm_dc@dc9-dpms:
- shard-tglu: [SKIP][279] ([i915#4281]) -> [PASS][280]
[279]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-tglu-9/igt@kms_pm_dc@dc9-dpms.html
[280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-tglu-5/igt@kms_pm_dc@dc9-dpms.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-rkl: [SKIP][281] ([i915#9519]) -> [PASS][282] +1 other test pass
[281]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-5/igt@kms_pm_rpm@dpms-lpsp.html
[282]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-2/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress:
- shard-dg2: [SKIP][283] ([i915#9519]) -> [PASS][284] +1 other test pass
[283]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
[284]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-7/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1:
- shard-snb: [FAIL][285] ([i915#9196]) -> [PASS][286] +1 other test pass
[285]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-snb5/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html
[286]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-snb1/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html
#### Warnings ####
* igt@i915_module_load@reload-with-fault-injection:
- shard-mtlp: [ABORT][287] ([i915#10131] / [i915#9820]) -> [ABORT][288] ([i915#10131])
[287]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-mtlp-5/igt@i915_module_load@reload-with-fault-injection.html
[288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-mtlp-4/igt@i915_module_load@reload-with-fault-injection.html
* igt@kms_content_protection@atomic-dpms:
- shard-dg2: [TIMEOUT][289] ([i915#7173]) -> [SKIP][290] ([i915#7118] / [i915#9424])
[289]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-10/igt@kms_content_protection@atomic-dpms.html
[290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@kms_content_protection@atomic-dpms.html
* igt@kms_content_protection@legacy:
- shard-dg2: [SKIP][291] ([i915#7118] / [i915#9424]) -> [TIMEOUT][292] ([i915#7173])
[291]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-4/igt@kms_content_protection@legacy.html
[292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-10/igt@kms_content_protection@legacy.html
* igt@kms_content_protection@mei-interface:
- shard-dg1: [SKIP][293] ([i915#9433]) -> [SKIP][294] ([i915#9424])
[293]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-13/igt@kms_content_protection@mei-interface.html
[294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@kms_content_protection@mei-interface.html
* igt@kms_content_protection@uevent:
- shard-dg2: [FAIL][295] ([i915#1339] / [i915#7173]) -> [SKIP][296] ([i915#7118] / [i915#9424])
[295]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-10/igt@kms_content_protection@uevent.html
[296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-3/igt@kms_content_protection@uevent.html
* igt@kms_draw_crc@draw-method-mmap-wc:
- shard-dg1: [SKIP][297] ([i915#8812]) -> [SKIP][298] ([i915#4423] / [i915#8812])
[297]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-18/igt@kms_draw_crc@draw-method-mmap-wc.html
[298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-17/igt@kms_draw_crc@draw-method-mmap-wc.html
* igt@kms_flip@2x-modeset-vs-vblank-race-interruptible:
- shard-dg1: [SKIP][299] ([i915#9934]) -> [SKIP][300] ([i915#4423] / [i915#9934])
[299]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg1-12/igt@kms_flip@2x-modeset-vs-vblank-race-interruptible.html
[300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg1-13/igt@kms_flip@2x-modeset-vs-vblank-race-interruptible.html
* igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-pwrite:
- shard-dg2: [SKIP][301] ([i915#3458]) -> [SKIP][302] ([i915#10433] / [i915#3458]) +2 other tests skip
[301]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-pwrite.html
[302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt:
- shard-dg2: [SKIP][303] ([i915#10433] / [i915#3458]) -> [SKIP][304] ([i915#3458]) +1 other test skip
[303]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html
[304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_hdr@brightness-with-hdr:
- shard-rkl: [SKIP][305] ([i915#1187] / [i915#12713]) -> [SKIP][306] ([i915#12713])
[305]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-rkl-3/igt@kms_hdr@brightness-with-hdr.html
[306]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-rkl-5/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-glk: [FAIL][307] ([i915#10959]) -> [SKIP][308]
[307]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-glk5/igt@kms_tiled_display@basic-test-pattern.html
[308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-glk8/igt@kms_tiled_display@basic-test-pattern.html
* igt@perf@non-zero-reason@0-rcs0:
- shard-dg2: [FAIL][309] ([i915#9100]) -> [FAIL][310] ([i915#7484]) +1 other test fail
[309]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15651/shard-dg2-5/igt@perf@non-zero-reason@0-rcs0.html
[310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/shard-dg2-7/igt@perf@non-zero-reason@0-rcs0.html
[i915#10030]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10030
[i915#10131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10131
[i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
[i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
[i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
[i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#10959]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10959
[i915#10991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10991
[i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
[i915#11616]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11616
[i915#11808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11808
[i915#11859]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11859
[i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187
[i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920
[i915#11961]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11961
[i915#11989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11989
[i915#12031]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12031
[i915#12177]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12177
[i915#12231]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12231
[i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247
[i915#12296]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12296
[i915#12308]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12308
[i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
[i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339
[i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
[i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394
[i915#12402]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12402
[i915#12457]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12457
[i915#12517]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12517
[i915#12543]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12543
[i915#12548]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12548
[i915#12630]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12630
[i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
[i915#1339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1339
[i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
[i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
[i915#2122]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2122
[i915#2346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2346
[i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
[i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437
[i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
[i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
[i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
[i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
[i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
[i915#2842]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2842
[i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
[i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
[i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
[i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3591]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3591
[i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
[i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
[i915#3966]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3966
[i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
[i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
[i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
[i915#4281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4281
[i915#4348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4348
[i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
[i915#4391]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4391
[i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
[i915#4537]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4537
[i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
[i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
[i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
[i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880
[i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
[i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#5784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5784
[i915#5956]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5956
[i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
[i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
[i915#6118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6118
[i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
[i915#6412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6412
[i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
[i915#6880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6880
[i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
[i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
[i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
[i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
[i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
[i915#7213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7213
[i915#7484]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7484
[i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
[i915#79]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/79
[i915#7975]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7975
[i915#8213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8213
[i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
[i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
[i915#8414]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8414
[i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
[i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
[i915#8437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8437
[i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
[i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
[i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
[i915#8709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8709
[i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
[i915#9100]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9100
[i915#9196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9196
[i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
[i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
[i915#9412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9412
[i915#9423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9423
[i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
[i915#9433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9433
[i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519
[i915#9531]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9531
[i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
[i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
[i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
[i915#9820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9820
[i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
[i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
[i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934
[i915#9979]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9979
Build changes
-------------
* Linux: CI_DRM_15651 -> Patchwork_140282v3
CI-20190529: 20190529
CI_DRM_15651: fce38995f74a8acb149e428bb83c93dddf19979a @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8100: 84e42580f918da926481fd2fb37be01451d6ee9a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_140282v3: fce38995f74a8acb149e428bb83c93dddf19979a @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_140282v3/index.html
[-- Attachment #2: Type: text/html, Size: 91981 bytes --]
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 20:22 ` Gustavo Sousa
@ 2024-11-08 9:57 ` Luca Coelho
2024-11-08 13:10 ` Gustavo Sousa
0 siblings, 1 reply; 30+ messages in thread
From: Luca Coelho @ 2024-11-08 9:57 UTC (permalink / raw)
To: Gustavo Sousa, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
On Thu, 2024-11-07 at 17:22 -0300, Gustavo Sousa wrote:
> Quoting Gustavo Sousa (2024-11-07 17:14:36-03:00)
> > Quoting Luca Coelho (2024-11-07 16:23:06-03:00)
> > > On Thu, 2024-11-07 at 15:27 -0300, Gustavo Sousa wrote:
> > > > There is a bit of a chicken and egg situation where we depend on runtime
> > > > info to know that DMC and wakelock are supported by the hardware, and
> > > > such information is grabbed via display MMIO functions, which in turns
> > > > call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
> > > > flow.
> > >
> > > s/which in turns call/which in turn calls/
> >
> > Thanks!
> >
> > I'll do
> >
> > s/which in turns call/which in turn call/
> >
> > as the subject for "call" is "display MMIO functions".
Right, I didn't pay much attention and conjugated it with
"information".
> > > > Since we do not expect DC states (and consequently the wakelock
> > > > mechanism) to be enabled until DMC and DMC wakelock software structures
> > > > are initialized, a simple and safe solution to this is to turn
> > > > intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
> > > > properly initialized.
> > >
> > >
> > > About "safe" here... Can we be sure this will be race-free?
> >
> > The initialization is done only once, during driver load. The wakelock
> > will be enabled only at a later moment. So, we are good in that regard.
> >
> > However, now that you mentioned, yeah, we should also consider that that
> > we do concurrent work during initialization (e.g. loading the DMC).
> > Based on that, we will need to protect "initialized", which means:
> >
> > - initializing the lock early together with the other ones;
> > - always going for the lock, even for hardware that does not support the
>
> Oh, to be clear: I meant the spin lock here :-)
Yeah, I got that. :)
> Something along the lines of:
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index 4257cc380475..e6d4f6328c33 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -186,6 +186,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
> return;
>
> spin_lock_init(&i915->display.fb_tracking.lock);
> + spin_lock_init(&i915->display.wl.lock);
> mutex_init(&i915->display.backlight.lock);
> mutex_init(&i915->display.audio.mutex);
> mutex_init(&i915->display.wm.wm_mutex);
> diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
> index e43077453a99..bf8d3b04336d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
> +++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
> @@ -307,11 +307,11 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
> struct intel_dmc_wl *wl = &display->wl;
> unsigned long flags;
>
> - if (!__intel_dmc_wl_supported(display))
> - return;
> -
> spin_lock_irqsave(&wl->lock, flags);
>
> + if (!__intel_dmc_wl_supported(display))
> + goto out_unlock;
> +
> wl->dc_state = dc_state;
>
> if (drm_WARN_ON(display->drm, wl->enabled))
> @@ -353,13 +353,13 @@ void intel_dmc_wl_disable(struct intel_display *display)
> struct intel_dmc_wl *wl = &display->wl;
> unsigned long flags;
>
> + spin_lock_irqsave(&wl->lock, flags);
> +
> if (!__intel_dmc_wl_supported(display))
> - return;
> + goto out_unlock;
>
> flush_delayed_work(&wl->work);
>
> - spin_lock_irqsave(&wl->lock, flags);
> -
> if (drm_WARN_ON(display->drm, !wl->enabled))
> goto out_unlock;
>
> @@ -389,13 +389,13 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
> struct intel_dmc_wl *wl = &display->wl;
> unsigned long flags;
>
> + spin_lock_irqsave(&wl->lock, flags);
> +
> if (!wl->initialized)
> - return;
> + goto out_unlock;
>
> if (!__intel_dmc_wl_supported(display))
> - return;
> -
> - spin_lock_irqsave(&wl->lock, flags);
> + goto out_unlock;
>
> if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
> goto out_unlock;
> @@ -424,13 +424,13 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
> struct intel_dmc_wl *wl = &display->wl;
> unsigned long flags;
>
> + spin_lock_irqsave(&wl->lock, flags);
> +
> if (!wl->initialized)
> - return;
> + goto out_unlock;
>
> if (!__intel_dmc_wl_supported(display))
> - return;
> -
> - spin_lock_irqsave(&wl->lock, flags);
> + goto out_unlock;
>
> if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
> goto out_unlock;
I think this is the simplest solution.
> > wakelock.
> >
> > Ugh... I don't like the latter very much... But, with those provided, I
> > believe we should be safe.
> >
> > Thoughts?
I don't think it's a huge problem to initialize the spinlock even for
HW that doesn't use it. Yeah, it's a bit of wasteful in terms of
resources, but I think it's worth it because of the reduced complexity
of the implementation.
> > > > The only exception of functions that can be called before initialization
> > > > are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
> > > > calling __intel_dmc_wl_supported() if not initialized.
> > > >
> > > > An alternative solution would be to revise MMIO-related stuff in the
> > > > whole driver initialization sequence, but that would possibly come with
> > > > the cost of some added ordering dependencies and complexity to the
> > > > source code.
> > >
> > > I think this can be kept out of the commit message. It's not very
> > > clear what you mean and it sounds much more complex than the solution
> > > you implemented. Unless race can really be an issue here, but then the
> > > whole commit message should be changed to an eventual more complex
> > > solution.
> >
> > I meant that we would need to revise the initialization code and find
> > the correct place to put the DMC Wakelock software initialization call.
> > That might also come with changes in some places where we do probe the
> > hardware for info:
> >
> > - We need our initialization to happen before
> > intel_display_device_info_runtime_init(), because we want to check
> > HAS_DMC().
> >
> > - Currently, __intel_display_device_info_runtime_init() is using
> > intel_re_read(), which in turn uses
> > intel_dmc_wl_get()/intel_dmc_wl_put().
> >
> > - The alternative solution to using the "initialized" flag would be to
> > make sure that function does not use the MMIO functions that take
> > the DMC wakelock path.
> >
> > - However, __intel_display_device_info_runtime_init() is not necessary
> > the only function that would need to be changed, but rather
> > basically everything that does MMIO before the initialization!
> >
> > I hope it is clearer now :-)
Definitely clearer, but I still think it may not be worth it. The
spinlock solution is very simple and clean, IMHO. We already have the
spinlock for other stuff, so it aligns well with the existing code.
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-07 20:47 ` Gustavo Sousa
@ 2024-11-08 10:00 ` Luca Coelho
0 siblings, 0 replies; 30+ messages in thread
From: Luca Coelho @ 2024-11-08 10:00 UTC (permalink / raw)
To: Gustavo Sousa, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
On Thu, 2024-11-07 at 17:47 -0300, Gustavo Sousa wrote:
> Quoting Gustavo Sousa (2024-11-07 17:14:36-03:00)
> > Quoting Luca Coelho (2024-11-07 16:23:06-03:00)
> >
> > > > Since we do not expect DC states (and consequently the wakelock
> > > > mechanism) to be enabled until DMC and DMC wakelock software structures
> > > > are initialized, a simple and safe solution to this is to turn
> > > > intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
> > > > properly initialized.
> > >
> > >
> > > About "safe" here... Can we be sure this will be race-free?
> >
> > The initialization is done only once, during driver load. The wakelock
> > will be enabled only at a later moment. So, we are good in that regard.
> >
> > However, now that you mentioned, yeah, we should also consider that that
> > we do concurrent work during initialization (e.g. loading the DMC).
> > Based on that, we will need to protect "initialized", which means:
> >
> > - initializing the lock early together with the other ones;
> > - always going for the lock, even for hardware that does not support the
> > wakelock.
>
> Well, a hacky way to mitigate this is by checking the DISPLAY_VER() >=
> 20 before taking the spin lock, since that info is queried in
> probe_gmdid_display(), which happens at the "no-mmio" phase of driver
> initialization.
>
> By the way, that makes me think: is it too bad to do the same kind of
> early MMIO via pci_iomap_range() for ICL_DFSM_DMC_DISABLE? We could
> avoid this whole thing, since we would already have the correct value
> for HAS_DMC() when i915/xe MMIO functions are called.
I'm not sure it's worth it, but if you feel this would be better, go
ahead and show us the code. :)
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized
2024-11-08 9:57 ` Luca Coelho
@ 2024-11-08 13:10 ` Gustavo Sousa
0 siblings, 0 replies; 30+ messages in thread
From: Gustavo Sousa @ 2024-11-08 13:10 UTC (permalink / raw)
To: Luca Coelho, intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula
Quoting Luca Coelho (2024-11-08 06:57:11-03:00)
>On Thu, 2024-11-07 at 17:22 -0300, Gustavo Sousa wrote:
>> Quoting Gustavo Sousa (2024-11-07 17:14:36-03:00)
>> > Quoting Luca Coelho (2024-11-07 16:23:06-03:00)
>> > > On Thu, 2024-11-07 at 15:27 -0300, Gustavo Sousa wrote:
>> > > > There is a bit of a chicken and egg situation where we depend on runtime
>> > > > info to know that DMC and wakelock are supported by the hardware, and
>> > > > such information is grabbed via display MMIO functions, which in turns
>> > > > call intel_dmc_wl_get() and intel_dmc_wl_put() as part of their regular
>> > > > flow.
>> > >
>> > > s/which in turns call/which in turn calls/
>> >
>> > Thanks!
>> >
>> > I'll do
>> >
>> > s/which in turns call/which in turn call/
>> >
>> > as the subject for "call" is "display MMIO functions".
>
>Right, I didn't pay much attention and conjugated it with
>"information".
>
>
>> > > > Since we do not expect DC states (and consequently the wakelock
>> > > > mechanism) to be enabled until DMC and DMC wakelock software structures
>> > > > are initialized, a simple and safe solution to this is to turn
>> > > > intel_dmc_wl_get() and intel_dmc_wl_put() into no-op until we have
>> > > > properly initialized.
>> > >
>> > >
>> > > About "safe" here... Can we be sure this will be race-free?
>> >
>> > The initialization is done only once, during driver load. The wakelock
>> > will be enabled only at a later moment. So, we are good in that regard.
>> >
>> > However, now that you mentioned, yeah, we should also consider that that
>> > we do concurrent work during initialization (e.g. loading the DMC).
>> > Based on that, we will need to protect "initialized", which means:
>> >
>> > - initializing the lock early together with the other ones;
>> > - always going for the lock, even for hardware that does not support the
>>
>> Oh, to be clear: I meant the spin lock here :-)
>
>Yeah, I got that. :)
>
>
>> Something along the lines of:
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
>> index 4257cc380475..e6d4f6328c33 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
>> @@ -186,6 +186,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
>> return;
>>
>> spin_lock_init(&i915->display.fb_tracking.lock);
>> + spin_lock_init(&i915->display.wl.lock);
>> mutex_init(&i915->display.backlight.lock);
>> mutex_init(&i915->display.audio.mutex);
>> mutex_init(&i915->display.wm.wm_mutex);
>> diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
>> index e43077453a99..bf8d3b04336d 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
>> @@ -307,11 +307,11 @@ void intel_dmc_wl_enable(struct intel_display *display, u32 dc_state)
>> struct intel_dmc_wl *wl = &display->wl;
>> unsigned long flags;
>>
>> - if (!__intel_dmc_wl_supported(display))
>> - return;
>> -
>> spin_lock_irqsave(&wl->lock, flags);
>>
>> + if (!__intel_dmc_wl_supported(display))
>> + goto out_unlock;
>> +
>> wl->dc_state = dc_state;
>>
>> if (drm_WARN_ON(display->drm, wl->enabled))
>> @@ -353,13 +353,13 @@ void intel_dmc_wl_disable(struct intel_display *display)
>> struct intel_dmc_wl *wl = &display->wl;
>> unsigned long flags;
>>
>> + spin_lock_irqsave(&wl->lock, flags);
>> +
>> if (!__intel_dmc_wl_supported(display))
>> - return;
>> + goto out_unlock;
>>
>> flush_delayed_work(&wl->work);
>>
>> - spin_lock_irqsave(&wl->lock, flags);
>> -
>> if (drm_WARN_ON(display->drm, !wl->enabled))
>> goto out_unlock;
>>
>> @@ -389,13 +389,13 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
>> struct intel_dmc_wl *wl = &display->wl;
>> unsigned long flags;
>>
>> + spin_lock_irqsave(&wl->lock, flags);
>> +
>> if (!wl->initialized)
>> - return;
>> + goto out_unlock;
>>
>> if (!__intel_dmc_wl_supported(display))
>> - return;
>> -
>> - spin_lock_irqsave(&wl->lock, flags);
>> + goto out_unlock;
>>
>> if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
>> goto out_unlock;
>> @@ -424,13 +424,13 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
>> struct intel_dmc_wl *wl = &display->wl;
>> unsigned long flags;
>>
>> + spin_lock_irqsave(&wl->lock, flags);
>> +
>> if (!wl->initialized)
>> - return;
>> + goto out_unlock;
>>
>> if (!__intel_dmc_wl_supported(display))
>> - return;
>> -
>> - spin_lock_irqsave(&wl->lock, flags);
>> + goto out_unlock;
>>
>> if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg, wl->dc_state))
>> goto out_unlock;
>
>I think this is the simplest solution.
>
>
>> > wakelock.
>> >
>> > Ugh... I don't like the latter very much... But, with those provided, I
>> > believe we should be safe.
>> >
>> > Thoughts?
>
>I don't think it's a huge problem to initialize the spinlock even for
>HW that doesn't use it. Yeah, it's a bit of wasteful in terms of
>resources, but I think it's worth it because of the reduced complexity
>of the implementation.
Okay. Let's go with this solution then.
So, to unblock this series, I decided to send v4 without this and the
other patches related to using HAS_DMC() in HAS_DMC_WAKELOCK(). I'll
send those in a new series.
--
Gustavo Sousa
>
>
>> > > > The only exception of functions that can be called before initialization
>> > > > are intel_dmc_wl_get() and intel_dmc_wl_put(), so we bail before
>> > > > calling __intel_dmc_wl_supported() if not initialized.
>> > > >
>> > > > An alternative solution would be to revise MMIO-related stuff in the
>> > > > whole driver initialization sequence, but that would possibly come with
>> > > > the cost of some added ordering dependencies and complexity to the
>> > > > source code.
>> > >
>> > > I think this can be kept out of the commit message. It's not very
>> > > clear what you mean and it sounds much more complex than the solution
>> > > you implemented. Unless race can really be an issue here, but then the
>> > > whole commit message should be changed to an eventual more complex
>> > > solution.
>> >
>> > I meant that we would need to revise the initialization code and find
>> > the correct place to put the DMC Wakelock software initialization call.
>> > That might also come with changes in some places where we do probe the
>> > hardware for info:
>> >
>> > - We need our initialization to happen before
>> > intel_display_device_info_runtime_init(), because we want to check
>> > HAS_DMC().
>> >
>> > - Currently, __intel_display_device_info_runtime_init() is using
>> > intel_re_read(), which in turn uses
>> > intel_dmc_wl_get()/intel_dmc_wl_put().
>> >
>> > - The alternative solution to using the "initialized" flag would be to
>> > make sure that function does not use the MMIO functions that take
>> > the DMC wakelock path.
>> >
>> > - However, __intel_display_device_info_runtime_init() is not necessary
>> > the only function that would need to be changed, but rather
>> > basically everything that does MMIO before the initialization!
>> >
>> > I hope it is clearer now :-)
>
>Definitely clearer, but I still think it may not be worth it. The
>spinlock solution is very simple and clean, IMHO. We already have the
>spinlock for other stuff, so it aligns well with the existing code.
>
>--
>Cheers,
>Luca.
^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2024-11-08 13:11 UTC | newest]
Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-07 18:27 [PATCH v3 00/18] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 01/18] drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 02/18] drm/xe: Mimic i915 behavior for non-sleeping MMIO wait Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 03/18] drm/i915/dmc_wl: Use non-sleeping variant of " Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 04/18] drm/i915/dmc_wl: Check for non-zero refcount in release work Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 05/18] drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 06/18] drm/i915/dmc_wl: Use sentinel item for range tables Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 07/18] drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range() Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 08/18] drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 09/18] drm/i915/dmc_wl: Track registers touched by the DMC Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 10/18] drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 11/18] drm/i915/dmc_wl: Deal with existing references when disabling Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 12/18] drm/i915/dmc_wl: Couple enable/disable with dynamic DC states Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 13/18] drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK() Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 14/18] drm/i915/dmc_wl: Init only after we have runtime device info Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 15/18] drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK() Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 16/18] drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support Gustavo Sousa
2024-11-07 18:27 ` [PATCH v3 17/18] drm/i915/dmc_wl: Do nothing until initialized Gustavo Sousa
2024-11-07 19:23 ` Luca Coelho
2024-11-07 20:14 ` Gustavo Sousa
2024-11-07 20:22 ` Gustavo Sousa
2024-11-08 9:57 ` Luca Coelho
2024-11-08 13:10 ` Gustavo Sousa
2024-11-07 20:47 ` Gustavo Sousa
2024-11-08 10:00 ` Luca Coelho
2024-11-07 18:27 ` [PATCH v3 18/18] drm/i915/xe3lpd: Use DMC wakelock by default Gustavo Sousa
2024-11-07 19:04 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev3) Patchwork
2024-11-07 19:04 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-11-07 19:29 ` ✓ Fi.CI.BAT: success " Patchwork
2024-11-07 21:32 ` ✗ Fi.CI.IGT: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox