* [PATCH v2 00/10] Crescent Island PMT support
@ 2026-08-12 19:37 Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 01/10] platform/x86/intel/pmt: complete pcidev to device update Michael J. Ruhl
` (11 more replies)
0 siblings, 12 replies; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
The Crescent Island (CRI) GPU supports PMT via Xe driver
registration.
The CRI PMT MMIO mapping is shared for each PMT feature and it is
necessary to set an index register value to access the correct memory
space.
The PMT driver has a callback infrastructure to access data areas with
driver specific access. It is does not support the PMT control access.
CRI discovery/control spaces are part of the access window so a driver
callback is necessary to allow for the correct window to be exposed.
Add control path callback support to the PMT driver.
Add CRI PMT discovery information.
Update the Xe driver to support the CRI PMT access.
The crashlog access needs to be done with power enabled (telem is only
available when the device is powered).
Determine which access is requested, and do the appropriate power
request.
CRI FW is loaded at device power. Support the late-binding API to
wait for FW readiness. (pending sysctl patch set implements the API).
v2:
Address AI feedback:
- add missing entry->cb check
- address SRIOV VF concerns
- use xe_pm_runtime_put instead of _get in error path
Address review comments:
- redo power/lock sequencing
- support device hotplug events
Michael J. Ruhl (10):
platform/x86/intel/pmt: complete pcidev to device update
platform/x86/intel/pmt: Add register access callbacks
drm/xe/vsec: Protect against missing config
drm/xe/vsec: Use correct pm state get
drm/xe/vsec: Support possible hotplug exit
drm/xe/vsec: Support Crescent Island PMT
drm/xe/vsec: Crescent Island PMT decode
drm/xe/vsec: Crescent Island PMT callbacks
drm/xe/vsec: Support late bind fw information
drm/xe/vsec: Update PMT internal access for CRI
drivers/gpu/drm/xe/regs/xe_pmt.h | 9 +-
drivers/gpu/drm/xe/xe_debugfs.c | 30 +-
drivers/gpu/drm/xe/xe_device.c | 4 +-
drivers/gpu/drm/xe/xe_device_types.h | 6 +
drivers/gpu/drm/xe/xe_hwmon.c | 10 +-
drivers/gpu/drm/xe/xe_pcode.c | 10 +-
drivers/gpu/drm/xe/xe_vsec.c | 529 +++++++++++++++++++--
drivers/gpu/drm/xe/xe_vsec.h | 3 +-
drivers/platform/x86/intel/pmt/class.c | 5 +-
drivers/platform/x86/intel/pmt/class.h | 3 +-
drivers/platform/x86/intel/pmt/crashlog.c | 39 +-
drivers/platform/x86/intel/pmt/discovery.c | 2 +-
include/linux/intel_vsec.h | 14 +-
13 files changed, 593 insertions(+), 71 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 01/10] platform/x86/intel/pmt: complete pcidev to device update
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks Michael J. Ruhl
` (10 subsequent siblings)
11 siblings, 0 replies; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Previously the pcidev usage was moved to the struct device.
The struct device is set for only the telemetry endpoints.
This usage prevents other PMT features (crashlog) from using
the callback mechanism.
Use struct device in the intel_pmt_entry.
Update callback usage to os the pmt entry rather than the
telemetry endpoint.
Fixes: 353042d54d82 ("platform/x86/intel/vsec: Switch exported helpers from pci_dev to device")
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/platform/x86/intel/pmt/class.c | 5 ++---
drivers/platform/x86/intel/pmt/class.h | 3 +--
drivers/platform/x86/intel/pmt/discovery.c | 2 +-
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/platform/x86/intel/pmt/class.c b/drivers/platform/x86/intel/pmt/class.c
index d0ab8e33c62a..402d51df834a 100644
--- a/drivers/platform/x86/intel/pmt/class.c
+++ b/drivers/platform/x86/intel/pmt/class.c
@@ -100,7 +100,7 @@ intel_pmt_read(struct file *filp, struct kobject *kobj,
if (count > entry->size - off)
count = entry->size - off;
- count = pmt_telem_read_mmio(entry->ep->dev, entry->cb, entry->header.guid, buf,
+ count = pmt_telem_read_mmio(entry->dev, entry->cb, entry->header.guid, buf,
entry->base, off, count);
return count;
@@ -286,8 +286,6 @@ static int pmt_resolve_access_pci(struct intel_pmt_entry *entry,
return -EINVAL;
}
- entry->pcidev = pci_dev;
-
return 0;
}
@@ -365,6 +363,7 @@ static int intel_pmt_populate_entry(struct intel_pmt_entry *entry,
entry->guid = header->guid;
entry->size = header->size;
entry->cb = ivdev->priv_data;
+ entry->dev = ivdev->dev;
return 0;
}
diff --git a/drivers/platform/x86/intel/pmt/class.h b/drivers/platform/x86/intel/pmt/class.h
index a0ece4fc3837..258cb460e61c 100644
--- a/drivers/platform/x86/intel/pmt/class.h
+++ b/drivers/platform/x86/intel/pmt/class.h
@@ -20,7 +20,6 @@
#define GET_ADDRESS(v) ((v) & GENMASK(31, 3))
struct device;
-struct pci_dev;
extern struct class intel_pmt_class;
struct telem_endpoint {
@@ -42,7 +41,7 @@ struct intel_pmt_header {
struct intel_pmt_entry {
struct telem_endpoint *ep;
- struct pci_dev *pcidev;
+ struct device *dev;
struct intel_pmt_header header;
u32 disc_header[PMT_DISC_DWORDS];
struct bin_attribute pmt_bin_attr;
diff --git a/drivers/platform/x86/intel/pmt/discovery.c b/drivers/platform/x86/intel/pmt/discovery.c
index c482368bfaae..f4203d240f54 100644
--- a/drivers/platform/x86/intel/pmt/discovery.c
+++ b/drivers/platform/x86/intel/pmt/discovery.c
@@ -609,7 +609,7 @@ void intel_pmt_get_features(struct intel_pmt_entry *entry)
mutex_lock(&feature_list_lock);
list_for_each_entry(feature, &pmt_feature_list, list) {
- if (feature->priv->parent != entry->ep->dev)
+ if (feature->priv->parent != entry->dev)
continue;
pmt_get_features(entry, feature);
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 01/10] platform/x86/intel/pmt: complete pcidev to device update Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:49 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 03/10] drm/xe/vsec: Protect against missing config Michael J. Ruhl
` (9 subsequent siblings)
11 siblings, 1 reply; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Some HW does not have direct MMIO access to PMT control and data
features.
Augment the current callback infrastructure (data access) to allow
a registered driver to customize read/write access to the control
paths for PMT usage.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/platform/x86/intel/pmt/crashlog.c | 39 +++++++++++++++++++++--
include/linux/intel_vsec.h | 14 +++++++-
2 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/drivers/platform/x86/intel/pmt/crashlog.c b/drivers/platform/x86/intel/pmt/crashlog.c
index f936daf99e4d..5923ad7abbd9 100644
--- a/drivers/platform/x86/intel/pmt/crashlog.c
+++ b/drivers/platform/x86/intel/pmt/crashlog.c
@@ -129,7 +129,19 @@ static void pmt_crashlog_rmw(struct crashlog_entry *crashlog, u32 bit, bool set)
{
const struct crashlog_control *control = &crashlog->info->control;
struct intel_pmt_entry *entry = &crashlog->entry;
- u32 reg = readl(entry->disc_table + control->offset);
+ u32 guid = entry->header.guid;
+ u32 reg;
+ int err;
+
+ if (entry->cb && entry->cb->read_reg) {
+ err = entry->cb->read_reg(entry->dev, guid, ®, control->offset);
+ if (err) {
+ pr_err("%s: failed to read reg: %d\n", __func__, err);
+ return;
+ }
+ } else {
+ reg = readl(entry->disc_table + control->offset);
+ }
reg &= ~control->trigger_mask;
@@ -138,14 +150,35 @@ static void pmt_crashlog_rmw(struct crashlog_entry *crashlog, u32 bit, bool set)
else
reg &= ~bit;
- writel(reg, entry->disc_table + control->offset);
+ if (entry->cb && entry->cb->write_reg) {
+ err = entry->cb->write_reg(entry->dev, guid, reg, control->offset);
+ if (err) {
+ pr_err("%s: failed to write reg: %d\n", __func__, err);
+ return;
+ }
+ } else {
+ writel(reg, entry->disc_table + control->offset);
+ }
}
/* Read the status register and see if the specified @bit is set */
static bool pmt_crashlog_rc(struct crashlog_entry *crashlog, u32 bit)
{
const struct crashlog_status *status = &crashlog->info->status;
- u32 reg = readl(crashlog->entry.disc_table + status->offset);
+ struct intel_pmt_entry *entry = &crashlog->entry;
+ u32 guid = entry->header.guid;
+ u32 reg;
+ int err;
+
+ if (entry->cb && entry->cb->read_reg) {
+ err = entry->cb->read_reg(entry->dev, guid, ®, status->offset);
+ if (err) {
+ pr_err("%s: failed to read reg: %d\n", __func__, err);
+ return false;
+ }
+ } else {
+ reg = readl(crashlog->entry.disc_table + status->offset);
+ }
return !!(reg & bit);
}
diff --git a/include/linux/intel_vsec.h b/include/linux/intel_vsec.h
index 843cda8f8644..917d9397a993 100644
--- a/include/linux/intel_vsec.h
+++ b/include/linux/intel_vsec.h
@@ -90,13 +90,25 @@ enum intel_vsec_quirks {
* @read_telem: when specified, called by client driver to access PMT
* data (instead of direct copy).
* * dev: device reference for the callback's use
- * * guid: ID of data to acccss
+ * * guid: ID of data to access
* * data: buffer for the data to be copied
* * off: offset into the requested buffer
* * count: size of buffer
+ * @read_reg: when specified called by client driver to read PMT state
+ * * dev: device reference for the callback's use
+ * * guid: ID of data to access
+ * * reg_data: register data
+ * * offset: offset of register to read
+ * @write_reg: when specified called by client driver to write PMT state
+ * * dev: device reference for the callback's use
+ * * guid: ID of data to access
+ * * reg_data: register data
+ * * offset: offset of register to write
*/
struct pmt_callbacks {
int (*read_telem)(struct device *dev, u32 guid, u64 *data, loff_t off, u32 count);
+ int (*read_reg)(struct device *dev, u32 guid, u32 *reg_data, u32 offset);
+ int (*write_reg)(struct device *dev, u32 guid, u32 reg_data, u32 offset);
};
struct vsec_feature_dependency {
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 03/10] drm/xe/vsec: Protect against missing config
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 01/10] platform/x86/intel/pmt: complete pcidev to device update Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 04/10] drm/xe/vsec: Use correct pm state get Michael J. Ruhl
` (8 subsequent siblings)
11 siblings, 0 replies; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Some init paths (VF) will not provide soc-remapper
callbacks.
BMG PMT access requires the soc-remapper.
If the soc-remapper is not configured, do not register for
PMT, and block read access.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/xe_vsec.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index a9baf0bfe572..bd83a33aef6c 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -149,6 +149,9 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
u32 offset;
int ret;
+ if (!xe->soc_remapper.set_telem_region)
+ return -ENODEV;
+
ret = xe_guid_decode(guid, &mem_region, &offset);
if (ret)
return ret;
@@ -157,9 +160,6 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
guard(mutex)(&xe->pmt.lock);
- if (!xe->soc_remapper.set_telem_region)
- return -ENODEV;
-
/* indicate that we are not at an appropriate power level */
if (!xe_pm_runtime_get_if_active(xe))
return -ENODATA;
@@ -210,6 +210,8 @@ void xe_vsec_init(struct xe_device *xe)
switch (platform) {
case XE_VSEC_BMG:
+ if (!xe->soc_remapper.set_telem_region)
+ return;
info->priv_data = &xe_pmt_cb;
break;
default:
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 04/10] drm/xe/vsec: Use correct pm state get
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (2 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 03/10] drm/xe/vsec: Protect against missing config Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit Michael J. Ruhl
` (7 subsequent siblings)
11 siblings, 0 replies; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Crashlog needs to be collected at all times. The current pm
check assumes telemetry only.
Update read path to enable device for crashlog instances.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Fixes: 2c402a801c19 ("platform/x86/intel/pmt: support BMG crashlog")
---
drivers/gpu/drm/xe/xe_vsec.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index bd83a33aef6c..8d99a3770b5a 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -145,6 +145,7 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
{
struct xe_device *xe = kdev_to_xe_device(dev);
void __iomem *telem_addr = xe->mmio.regs + BMG_TELEMETRY_OFFSET;
+ u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
u32 mem_region;
u32 offset;
int ret;
@@ -158,16 +159,28 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
telem_addr += offset + user_offset;
- guard(mutex)(&xe->pmt.lock);
+ /* Always allow crashlog. Telemetry, only when powered */
+ switch (cap_type) {
+ case CRASHLOG:
+ xe_pm_runtime_get(xe);
+ break;
+ case TELEMETRY:
+ if (!xe_pm_runtime_get_if_active(xe))
+ return -ENODATA;
+ break;
+ case WATCHER:
+ return -EINVAL;
+ }
- /* indicate that we are not at an appropriate power level */
- if (!xe_pm_runtime_get_if_active(xe))
- return -ENODATA;
+ mutex_lock(&xe->pmt.lock);
/* set SoC re-mapper index register based on GUID memory region */
xe->soc_remapper.set_telem_region(xe, mem_region);
memcpy_fromio(data, telem_addr, count);
+
+ mutex_unlock(&xe->pmt.lock);
+
xe_pm_runtime_put(xe);
return count;
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (3 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 04/10] drm/xe/vsec: Use correct pm state get Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:51 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT Michael J. Ruhl
` (6 subsequent siblings)
11 siblings, 1 reply; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
DRM has an API that will verify that a device is valid in
the hotplug context.
Verify device is valid before access in the VSEC callback
API.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/xe_vsec.c | 33 ++++++++++++++++++++++++++-------
1 file changed, 26 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index 8d99a3770b5a..8abe11e6312f 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -10,6 +10,8 @@
#include <linux/pci.h>
#include <linux/types.h>
+#include <drm/drm_drv.h>
+
#include "xe_device.h"
#include "xe_device_types.h"
#include "xe_mmio.h"
@@ -140,6 +142,11 @@ static int xe_guid_decode(u32 guid, int *index, u32 *offset)
return 0;
}
+/*
+ * xe_pmt_telem_read is a callback API. I.e this can be accessed external to
+ * XE driver (PMT driver scope). Because of this, DRM hotplug needs to be
+ * verified (drm_dev_enter()).
+ */
int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offset,
u32 count)
{
@@ -148,14 +155,20 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
u32 mem_region;
u32 offset;
- int ret;
+ int ret = 0;
+ int idx;
- if (!xe->soc_remapper.set_telem_region)
+ if (!drm_dev_enter(&xe->drm, &idx))
return -ENODEV;
+ if (!xe->soc_remapper.set_telem_region) {
+ ret = -EINVAL;
+ goto dev_exit;
+ }
+
ret = xe_guid_decode(guid, &mem_region, &offset);
if (ret)
- return ret;
+ goto dev_exit;
telem_addr += offset + user_offset;
@@ -165,11 +178,14 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
xe_pm_runtime_get(xe);
break;
case TELEMETRY:
- if (!xe_pm_runtime_get_if_active(xe))
- return -ENODATA;
+ if (!xe_pm_runtime_get_if_active(xe)) {
+ ret = -ENODATA;
+ goto dev_exit;
+ }
break;
case WATCHER:
- return -EINVAL;
+ ret = -EINVAL;
+ goto dev_exit;
}
mutex_lock(&xe->pmt.lock);
@@ -183,7 +199,10 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
xe_pm_runtime_put(xe);
- return count;
+dev_exit:
+ drm_dev_exit(idx);
+
+ return ret == 0 ? count : ret;
}
static struct pmt_callbacks xe_pmt_cb = {
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (4 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:49 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode Michael J. Ruhl
` (5 subsequent siblings)
11 siblings, 1 reply; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Crescent Island (CRI) supports PMT telemetry and crashlog.
Add Crescent Island (CRI) discovery structure (DVSEC)
information to allow for Xe registration.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/regs/xe_pmt.h | 5 ++++
drivers/gpu/drm/xe/xe_vsec.c | 46 ++++++++++++++++++++++++++++++--
2 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_pmt.h b/drivers/gpu/drm/xe/regs/xe_pmt.h
index a62ab05c6b4c..fc9c9cb6a830 100644
--- a/drivers/gpu/drm/xe/regs/xe_pmt.h
+++ b/drivers/gpu/drm/xe/regs/xe_pmt.h
@@ -20,6 +20,11 @@
#define BMG_TELEMETRY_BASE_OFFSET 0xE0000
#define BMG_TELEMETRY_OFFSET (SOC_BASE + BMG_TELEMETRY_BASE_OFFSET)
+#define CRI_TELEMETRY_BASE_OFFSET 0xE0000
+/* for CRI discovery and telemetry are in an indexed window */
+#define CRI_DISCOVERY_OFFSET (SOC_BASE + CRI_TELEMETRY_BASE_OFFSET)
+#define CRI_TELEMETRY_OFFSET (SOC_BASE + CRI_TELEMETRY_BASE_OFFSET)
+
#define BMG_MODS_RESIDENCY_OFFSET (0x4D0)
#define BMG_G2_RESIDENCY_OFFSET (0x530)
#define BMG_G6_RESIDENCY_OFFSET (0x538)
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index 8abe11e6312f..6345b0b4b26b 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -21,8 +21,19 @@
#include "regs/xe_pmt.h"
-/* PMT GUID value for BMG devices. NOTE: this is NOT a PCI id */
+/* PMT GUID value for BMG and CRI devices. NOTE: this is NOT a PCI id */
#define BMG_DEVICE_ID 0xE2F8
+#define CRI_DEVICE_ID 0xE2FA
+
+/*
+ * sizeof(Crashlog Type1 Version2) = 0x18 (24) bytes
+ * For BMG and CRI PUNIT and OOBMSMS crashlogs are consecutive.
+ */
+#define BMG_CRASHLOG_PUNIT_DISC_OFFSET (0x60)
+#define BMG_CRASHLOG_OOBMSM_DISC_OFFSET (BMG_CRASHLOG_PUNIT_DISC_OFFSET + 0x18)
+
+#define CRI_CRASHLOG_PUNIT_DISC_OFFSET (0x80)
+#define CRI_CRASHLOG_OOBMSM_DISC_OFFSET (CRI_CRASHLOG_PUNIT_DISC_OFFSET + 0x18)
static struct intel_vsec_header bmg_telemetry = {
.rev = 1,
@@ -41,7 +52,7 @@ static struct intel_vsec_header bmg_crashlog = {
.num_entries = 2,
.entry_size = 6,
.tbir = 0,
- .offset = BMG_DISCOVERY_OFFSET + 0x60,
+ .offset = BMG_DISCOVERY_OFFSET + BMG_CRASHLOG_PUNIT_DISC_OFFSET,
};
static struct intel_vsec_header *bmg_capabilities[] = {
@@ -50,9 +61,36 @@ static struct intel_vsec_header *bmg_capabilities[] = {
NULL
};
+static struct intel_vsec_header cri_telemetry = {
+ .rev = 1,
+ .length = 0x10,
+ .id = VSEC_ID_TELEMETRY,
+ .num_entries = 3,
+ .entry_size = 4,
+ .tbir = 0,
+ .offset = CRI_DISCOVERY_OFFSET,
+};
+
+static struct intel_vsec_header cri_crashlog = {
+ .rev = 1,
+ .length = 0x10,
+ .id = VSEC_ID_CRASHLOG,
+ .num_entries = 2,
+ .entry_size = 6,
+ .tbir = 0,
+ .offset = CRI_DISCOVERY_OFFSET + CRI_CRASHLOG_PUNIT_DISC_OFFSET,
+};
+
+static struct intel_vsec_header *cri_capabilities[] = {
+ &cri_telemetry,
+ &cri_crashlog,
+ NULL
+};
+
enum xe_vsec {
XE_VSEC_UNKNOWN = 0,
XE_VSEC_BMG,
+ XE_VSEC_CRI,
};
static struct intel_vsec_platform_info xe_vsec_info[] = {
@@ -60,6 +98,10 @@ static struct intel_vsec_platform_info xe_vsec_info[] = {
.caps = VSEC_CAP_TELEMETRY | VSEC_CAP_CRASHLOG,
.headers = bmg_capabilities,
},
+ [XE_VSEC_CRI] = {
+ .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_CRASHLOG,
+ .headers = cri_capabilities,
+ },
{ }
};
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (5 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:51 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks Michael J. Ruhl
` (4 subsequent siblings)
11 siblings, 1 reply; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Crescent Island (CRI) has different index and offset values for
accessing the PMT data area.
Update the decode path to support the CRI device.
Update the data read callback so to support the CRI usage.
Define several magic numbers.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/xe_device_types.h | 2 +
drivers/gpu/drm/xe/xe_vsec.c | 135 ++++++++++++++++++++++-----
2 files changed, 114 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 180d450a6deb..3f1a70813a99 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -466,6 +466,8 @@ struct xe_device {
struct {
/** @pmt.lock: protect access for telemetry data */
struct mutex lock;
+ /** @pmt.base_offset: device specific base offset */
+ u64 base_offset;
} pmt;
/** @soc_remapper: SoC remapper object */
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index 6345b0b4b26b..dc42b9492428 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -108,23 +108,47 @@ static struct intel_vsec_platform_info xe_vsec_info[] = {
/*
* The GUID will have the following bits to decode:
* [0:3] - {Telemetry space iteration number (0,1,..)}
- * [4:7] - Segment (SEGMENT_INDEPENDENT-0, Client-1, Server-2)
+ * [4:7] - BMG Segment (SEGMENT_INDEPENDENT-0, Client-1, Server-2)
+ * [4:5] - CRI Segment (SEGMENT_INDEPENDENT-0, Client-1, Server-2)
+ * [6:7] - CRI Instance
* [8:11] - SOC_SKU
* [12:27] – Device ID – changes for each down bin SKU’s
* [28:29] - Capability Type (Crashlog-0, Telemetry Aggregator-1, Watcher-2)
* [30:31] - Record-ID (0-PUNIT, 1-OOBMSM_0, 2-OOBMSM_1)
*/
#define GUID_TELEM_ITERATION GENMASK(3, 0)
-#define GUID_SEGMENT GENMASK(7, 4)
#define GUID_SOC_SKU GENMASK(11, 8)
#define GUID_DEVICE_ID GENMASK(27, 12)
#define GUID_CAP_TYPE GENMASK(29, 28)
#define GUID_RECORD_ID GENMASK(31, 30)
-#define PUNIT_TELEMETRY_OFFSET 0x0200
-#define PUNIT_WATCHER_OFFSET 0x14A0
-#define OOBMSM_0_WATCHER_OFFSET 0x18D8
-#define OOBMSM_1_TELEMETRY_OFFSET 0x1000
+#define BMG_GUID_SEGMENT GENMASK(7, 4)
+
+#define CRI_GUID_SEGMENT GENMASK(5, 4)
+#define CRI_GUID_INSTANCE GENMASK(7, 6)
+
+#define BMG_IDX_TELEM_PUNIT 0x00
+#define BMG_IDX_TELEM_OOBMSM 0x01
+#define BMG_IDX_CRASHLOG_PUNIT 0x02
+#define BMG_IDX_CRASHLOG_OOBMSM 0x04
+
+#define BMG_PUNIT_TELEMETRY_OFFSET 0x0200
+#define BMG_PUNIT_WATCHER_OFFSET 0x14A0
+#define BMG_OOBMSM_0_WATCHER_OFFSET 0x18D8
+#define BMG_OOBMSM_1_TELEMETRY_OFFSET 0x1000
+
+#define CRI_IDX_TELEM_DISCOVERY 0x00
+#define CRI_IDX_TELEM_PUNIT 0x01
+#define CRI_IDX_TELEM_OOBMSM 0x02
+#define CRI_IDX_CRASHLOG_PUNIT 0x03
+#define CRI_IDX_WATCHER_OOBMSM 0x03 /* PUNIT and OOBMSM share this index */
+#define CRI_IDX_CRASHLOG_OOBMSM 0x04
+
+#define CRI_PUNIT_TELEMETRY_OFFSET 0x0200
+#define CRI_PUNIT_WATCHER_OFFSET 0x08A0
+#define CRI_OOBMSM_WATCHER_OFFSET 0x0CF8
+#define CRI_OOBMSM_GFSP_TELEMETRY_OFFSET 0x1600
+#define CRI_PUNIT_CRASHLOG_OFFSET 0x0E60
enum record_id {
PUNIT,
@@ -138,45 +162,92 @@ enum capability {
WATCHER,
};
-static int xe_guid_decode(u32 guid, int *index, u32 *offset)
+static int bmg_guid_decode(u32 guid, int *index, u32 *offset)
{
u32 record_id = FIELD_GET(GUID_RECORD_ID, guid);
u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
- u32 device_id = FIELD_GET(GUID_DEVICE_ID, guid);
-
- if (device_id != BMG_DEVICE_ID)
- return -ENODEV;
-
- if (cap_type > WATCHER)
- return -EINVAL;
*offset = 0;
if (cap_type == CRASHLOG) {
- *index = record_id == PUNIT ? 2 : 4;
+ *index = record_id == PUNIT ? BMG_IDX_CRASHLOG_PUNIT : BMG_IDX_CRASHLOG_OOBMSM;
return 0;
}
switch (record_id) {
case PUNIT:
- *index = 0;
+ *index = BMG_IDX_TELEM_PUNIT;
if (cap_type == TELEMETRY)
- *offset = PUNIT_TELEMETRY_OFFSET;
+ *offset = BMG_PUNIT_TELEMETRY_OFFSET;
else
- *offset = PUNIT_WATCHER_OFFSET;
+ *offset = BMG_PUNIT_WATCHER_OFFSET;
break;
case OOBMSM_0:
- *index = 1;
+ *index = BMG_IDX_TELEM_OOBMSM;
if (cap_type == WATCHER)
- *offset = OOBMSM_0_WATCHER_OFFSET;
+ *offset = BMG_OOBMSM_0_WATCHER_OFFSET;
break;
case OOBMSM_1:
- *index = 1;
+ *index = BMG_IDX_TELEM_OOBMSM;
+ if (cap_type == TELEMETRY)
+ *offset = BMG_OOBMSM_1_TELEMETRY_OFFSET;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int cri_guid_decode(u32 guid, int *index, u32 *offset)
+{
+ u32 record_id = FIELD_GET(GUID_RECORD_ID, guid);
+ u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
+ u32 instance = FIELD_GET(CRI_GUID_INSTANCE, guid);
+
+ *offset = 0;
+
+ if (cap_type == CRASHLOG) {
+ if (record_id == PUNIT) {
+ *index = CRI_IDX_CRASHLOG_PUNIT;
+ *offset = CRI_PUNIT_CRASHLOG_OFFSET;
+ } else {
+ *index = CRI_IDX_CRASHLOG_OOBMSM;
+ }
+ return 0;
+ }
+
+ switch (record_id) {
+ case PUNIT:
+ *index = CRI_IDX_TELEM_PUNIT;
if (cap_type == TELEMETRY)
- *offset = OOBMSM_1_TELEMETRY_OFFSET;
+ *offset = CRI_PUNIT_TELEMETRY_OFFSET;
+ else
+ *offset = CRI_PUNIT_WATCHER_OFFSET;
+ break;
+
+ case OOBMSM_0:
+ *index = CRI_IDX_TELEM_OOBMSM;
+ switch (instance) {
+ case 0:
+ if (cap_type == WATCHER) {
+ *index = CRI_IDX_WATCHER_OOBMSM;
+ *offset = CRI_OOBMSM_WATCHER_OFFSET;
+ }
+ break;
+
+ case 1:
+ if (cap_type == TELEMETRY)
+ *offset = CRI_OOBMSM_GFSP_TELEMETRY_OFFSET;
+ break;
+
+ default:
+ return -EINVAL;
+ }
break;
+
default:
return -EINVAL;
}
@@ -184,6 +255,23 @@ static int xe_guid_decode(u32 guid, int *index, u32 *offset)
return 0;
}
+static int xe_guid_decode(u32 guid, int *index, u32 *offset)
+{
+ u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
+ u32 device_id = FIELD_GET(GUID_DEVICE_ID, guid);
+
+ if (cap_type > WATCHER)
+ return -EINVAL;
+
+ if (device_id == BMG_DEVICE_ID)
+ return bmg_guid_decode(guid, index, offset);
+
+ if (device_id == CRI_DEVICE_ID)
+ return cri_guid_decode(guid, index, offset);
+
+ return -ENODEV;
+}
+
/*
* xe_pmt_telem_read is a callback API. I.e this can be accessed external to
* XE driver (PMT driver scope). Because of this, DRM hotplug needs to be
@@ -193,8 +281,8 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
u32 count)
{
struct xe_device *xe = kdev_to_xe_device(dev);
- void __iomem *telem_addr = xe->mmio.regs + BMG_TELEMETRY_OFFSET;
u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
+ void __iomem *telem_addr = xe->mmio.regs + xe->pmt.base_offset;
u32 mem_region;
u32 offset;
int ret = 0;
@@ -286,6 +374,7 @@ void xe_vsec_init(struct xe_device *xe)
case XE_VSEC_BMG:
if (!xe->soc_remapper.set_telem_region)
return;
+ xe->pmt.base_offset = BMG_TELEMETRY_OFFSET;
info->priv_data = &xe_pmt_cb;
break;
default:
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (6 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:57 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information Michael J. Ruhl
` (3 subsequent siblings)
11 siblings, 1 reply; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
CRI PMT support requires callbacks to access the discovery status
and control areas. Access is a common MMIO area that requires an
index to be set before access is allowed.
Introduce the necessary callbacks to get the status and control
information for CRI PMT usage.
Add the glue logic to register the CRI PMT functionality.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/xe_vsec.c | 118 ++++++++++++++++++++++++++++++++++-
1 file changed, 115 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index dc42b9492428..578d59048b39 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -335,17 +335,120 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
return ret == 0 ? count : ret;
}
-static struct pmt_callbacks xe_pmt_cb = {
+/**
+ * xe_pmt_read_reg() - read a crashlog register
+ * @dev: the xe device that registered the callback
+ * @guid: PMT guid of the crashlog instance
+ * @reg: data read from the PMT data structure
+ * @offset: which data to read from the PMT data structure
+ *
+ * Read the requested PMT register based on the pcie device and guid. The
+ * supported struct is the Crashlog Type1 Version2.
+ *
+ * Currently this is for CRI only.
+ */
+static int xe_pmt_read_reg(struct device *dev, u32 guid, u32 *reg, u32 offset)
+{
+ struct xe_device *xe = kdev_to_xe_device(dev);
+ void __iomem *disc_addr = xe->mmio.regs;
+ int ret = 0;
+ u32 inst;
+ int idx;
+
+ if (!drm_dev_enter(&xe->drm, &idx))
+ return -ENODEV;
+
+ if (!xe->soc_remapper.set_telem_region) {
+ ret = -ENODEV;
+ goto dev_exit;
+ }
+
+ if (FIELD_GET(GUID_DEVICE_ID, guid) != CRI_DEVICE_ID ||
+ FIELD_GET(GUID_CAP_TYPE, guid) != CRASHLOG) {
+ ret = -EINVAL;
+ goto dev_exit;
+ }
+
+ inst = FIELD_GET(GUID_RECORD_ID, guid) == PUNIT ?
+ CRI_CRASHLOG_PUNIT_DISC_OFFSET : CRI_CRASHLOG_OOBMSM_DISC_OFFSET;
+ disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
+
+ xe_pm_runtime_get(xe);
+ mutex_lock(&xe->pmt.lock);
+
+ xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
+
+ memcpy_fromio(reg, disc_addr, sizeof(*reg));
+
+ mutex_unlock(&xe->pmt.lock);
+ xe_pm_runtime_put(xe);
+
+dev_exit:
+ drm_dev_exit(idx);
+
+ return ret;
+}
+
+static int xe_pmt_write_reg(struct device *dev, u32 guid, u32 reg, u32 offset)
+{
+ struct xe_device *xe = kdev_to_xe_device(dev);
+ void __iomem *disc_addr = xe->mmio.regs;
+ int ret = 0;
+ u32 inst;
+ int idx;
+
+ if (!drm_dev_enter(&xe->drm, &idx))
+ return -ENODEV;
+
+ if (!xe->soc_remapper.set_telem_region) {
+ ret = -ENODEV;
+ goto dev_exit;
+ }
+
+ if (FIELD_GET(GUID_DEVICE_ID, guid) != CRI_DEVICE_ID ||
+ FIELD_GET(GUID_CAP_TYPE, guid) != CRASHLOG) {
+ ret = -EINVAL;
+ goto dev_exit;
+ }
+
+ inst = FIELD_GET(GUID_RECORD_ID, guid) == PUNIT ?
+ CRI_CRASHLOG_PUNIT_DISC_OFFSET : CRI_CRASHLOG_OOBMSM_DISC_OFFSET;
+ disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
+
+ xe_pm_runtime_get(xe);
+ mutex_lock(&xe->pmt.lock);
+
+ xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
+
+ memcpy_toio(disc_addr, ®, sizeof(reg));
+
+ mutex_unlock(&xe->pmt.lock);
+ xe_pm_runtime_put(xe);
+
+dev_exit:
+ drm_dev_exit(idx);
+
+ return ret;
+}
+
+static struct pmt_callbacks xe_bmg_pmt_cb = {
.read_telem = xe_pmt_telem_read,
};
+static struct pmt_callbacks xe_cri_pmt_cb = {
+ .read_telem = xe_pmt_telem_read,
+ .read_reg = xe_pmt_read_reg,
+ .write_reg = xe_pmt_write_reg,
+};
+
static const int vsec_platforms[] = {
[XE_BATTLEMAGE] = XE_VSEC_BMG,
+ [XE_CRESCENTISLAND] = XE_VSEC_CRI,
};
static enum xe_vsec get_platform_info(struct xe_device *xe)
{
- if (xe->info.platform > XE_BATTLEMAGE)
+ if (xe->info.platform > XE_CRESCENTISLAND)
return XE_VSEC_UNKNOWN;
return vsec_platforms[xe->info.platform];
@@ -375,8 +478,17 @@ void xe_vsec_init(struct xe_device *xe)
if (!xe->soc_remapper.set_telem_region)
return;
xe->pmt.base_offset = BMG_TELEMETRY_OFFSET;
- info->priv_data = &xe_pmt_cb;
+ info->priv_data = &xe_bmg_pmt_cb;
+ break;
+
+ case XE_VSEC_CRI:
+ if (!xe->soc_remapper.set_telem_region)
+ return;
+ xe->pmt.base_offset = CRI_TELEMETRY_OFFSET;
+ info->priv_data = &xe_cri_pmt_cb;
+ xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
break;
+
default:
break;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (7 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 19:54 ` sashiko-bot
2026-08-12 20:12 ` Ruhl, Michael J
2026-08-12 19:37 ` [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI Michael J. Ruhl
` (2 subsequent siblings)
11 siblings, 2 replies; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
CRI FW is loaded on power on. Because of this, access to
the FW cannot be done until it is running.
Update the XE PMT probe and access to check for late bind
devices, verify, and wait for the appropriate FW state
before probe or access.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 4 +-
drivers/gpu/drm/xe/xe_device_types.h | 4 +
drivers/gpu/drm/xe/xe_vsec.c | 142 +++++++++++++++++++++++++--
drivers/gpu/drm/xe/xe_vsec.h | 2 +-
4 files changed, 144 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 71111ad32465..df6716a975fb 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -1139,7 +1139,9 @@ int xe_device_probe(struct xe_device *xe)
for_each_gt(gt, xe, id)
xe_gt_sanitize_freq(gt);
- xe_vsec_init(xe);
+ err = xe_vsec_init(xe);
+ if (err)
+ goto err_unregister_display;
err = xe_sriov_init_late(xe);
if (err)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 3f1a70813a99..5d9e6e66c665 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -468,6 +468,10 @@ struct xe_device {
struct mutex lock;
/** @pmt.base_offset: device specific base offset */
u64 base_offset;
+ /** @pmt.work: support late-bind probe */
+ struct delayed_work work;
+ /** @pmt.retry_count: late-bind probe retry */
+ u32 retry_count;
} pmt;
/** @soc_remapper: SoC remapper object */
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index 578d59048b39..bed5103dac19 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -3,6 +3,7 @@
#include <linux/bitfield.h>
#include <linux/bits.h>
#include <linux/cleanup.h>
+#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/intel_vsec.h>
#include <linux/module.h>
@@ -17,6 +18,7 @@
#include "xe_mmio.h"
#include "xe_platform_types.h"
#include "xe_pm.h"
+#include "xe_sysctrl.h"
#include "xe_vsec.h"
#include "regs/xe_pmt.h"
@@ -162,6 +164,14 @@ enum capability {
WATCHER,
};
+/*
+ * Late bind will delay 100msec for up to 20 seconds
+ */
+#define VSEC_LATE_BIND_DELAY_MSEC (100)
+#define VSEC_LATE_BIND_RETRY (200)
+
+static void cri_late_bind_probe(struct xe_device *xe);
+
static int bmg_guid_decode(u32 guid, int *index, u32 *offset)
{
u32 record_id = FIELD_GET(GUID_RECORD_ID, guid);
@@ -272,6 +282,56 @@ static int xe_guid_decode(u32 guid, int *index, u32 *offset)
return -ENODEV;
}
+#define WAITING_FOR_SYCTLR
+#ifdef WAITING_FOR_SYCTLR
+static bool xe_is_oobmsm_fw_ready(struct xe_device *xe)
+{
+ return true;
+}
+#endif
+
+static void cri_late_bind_probe_work(struct work_struct *work)
+{
+ struct xe_device *xe = container_of(work, struct xe_device, pmt.work.work);
+
+ if (xe_is_oobmsm_fw_ready(xe)) {
+ cri_late_bind_probe(xe);
+ xe_pm_runtime_put(xe);
+ return;
+ }
+
+ xe->pmt.retry_count++;
+
+ /* wait up to 20 seconds */
+ if (xe->pmt.retry_count == VSEC_LATE_BIND_RETRY) {
+ drm_warn(&xe->drm, "PMT probe: Late Binding failed to complete\n");
+ xe_pm_runtime_put(xe);
+ return;
+ }
+
+ if (!schedule_delayed_work(&xe->pmt.work, msecs_to_jiffies(VSEC_LATE_BIND_DELAY_MSEC)))
+ xe_pm_runtime_put(xe);
+}
+
+static bool wait_for_fw(struct xe_device *xe)
+{
+ int retries = VSEC_LATE_BIND_RETRY; /* wait up to 20 secs */
+
+ if (xe->info.platform != XE_CRESCENTISLAND)
+ return true;
+
+ while (retries--) {
+ if (xe_is_oobmsm_fw_ready(xe))
+ return true;
+
+ msleep(VSEC_LATE_BIND_DELAY_MSEC);
+ }
+
+ drm_warn(&xe->drm, "Late Binding failed to complete\n");
+
+ return false;
+}
+
/*
* xe_pmt_telem_read is a callback API. I.e this can be accessed external to
* XE driver (PMT driver scope). Because of this, DRM hotplug needs to be
@@ -318,6 +378,11 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
goto dev_exit;
}
+ if (!wait_for_fw(xe)) {
+ ret = -ENODATA;
+ goto runtime_exit;
+ }
+
mutex_lock(&xe->pmt.lock);
/* set SoC re-mapper index register based on GUID memory region */
@@ -327,6 +392,7 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
mutex_unlock(&xe->pmt.lock);
+runtime_exit:
xe_pm_runtime_put(xe);
dev_exit:
@@ -374,6 +440,10 @@ static int xe_pmt_read_reg(struct device *dev, u32 guid, u32 *reg, u32 offset)
disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
xe_pm_runtime_get(xe);
+ if (!wait_for_fw(xe)) {
+ ret = -ENODATA;
+ goto runtime_exit;
+ }
mutex_lock(&xe->pmt.lock);
xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
@@ -381,6 +451,8 @@ static int xe_pmt_read_reg(struct device *dev, u32 guid, u32 *reg, u32 offset)
memcpy_fromio(reg, disc_addr, sizeof(*reg));
mutex_unlock(&xe->pmt.lock);
+
+runtime_exit:
xe_pm_runtime_put(xe);
dev_exit:
@@ -416,6 +488,10 @@ static int xe_pmt_write_reg(struct device *dev, u32 guid, u32 reg, u32 offset)
disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
xe_pm_runtime_get(xe);
+ if (!wait_for_fw(xe)) {
+ ret = -ENODATA;
+ goto runtime_exit;
+ }
mutex_lock(&xe->pmt.lock);
xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
@@ -425,6 +501,9 @@ static int xe_pmt_write_reg(struct device *dev, u32 guid, u32 reg, u32 offset)
mutex_unlock(&xe->pmt.lock);
xe_pm_runtime_put(xe);
+runtime_exit:
+ xe_pm_runtime_put(xe);
+
dev_exit:
drm_dev_exit(idx);
@@ -454,12 +533,44 @@ static enum xe_vsec get_platform_info(struct xe_device *xe)
return vsec_platforms[xe->info.platform];
}
+static void cri_late_bind_probe(struct xe_device *xe)
+{
+ struct intel_vsec_platform_info *info;
+ struct device *dev = xe->drm.dev;
+ enum xe_vsec platform;
+
+ platform = get_platform_info(xe);
+ if (platform != XE_VSEC_CRI)
+ return;
+
+ info = &xe_vsec_info[platform];
+ if (!info->headers)
+ return;
+
+ info->priv_data = &xe_cri_pmt_cb;
+ xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
+
+ intel_vsec_register(dev, info);
+}
+
+static void vsec_disable_late_bind_work(void *arg)
+{
+ struct xe_device *xe = arg;
+
+ /*
+ * If was work was cancelled while it was still pending, we need to
+ * take care of releasing the runtime reference
+ */
+ if (disable_delayed_work_sync(&xe->pmt.work))
+ xe_pm_runtime_put(xe);
+}
+
/**
* xe_vsec_init - Initialize resources and add intel_vsec auxiliary
* interface
* @xe: valid xe instance
*/
-void xe_vsec_init(struct xe_device *xe)
+int xe_vsec_init(struct xe_device *xe)
{
struct intel_vsec_platform_info *info;
struct device *dev = xe->drm.dev;
@@ -467,30 +578,44 @@ void xe_vsec_init(struct xe_device *xe)
platform = get_platform_info(xe);
if (platform == XE_VSEC_UNKNOWN)
- return;
+ return 0;
info = &xe_vsec_info[platform];
if (!info->headers)
- return;
+ return 0;
switch (platform) {
case XE_VSEC_BMG:
if (!xe->soc_remapper.set_telem_region)
- return;
+ return 0;
xe->pmt.base_offset = BMG_TELEMETRY_OFFSET;
info->priv_data = &xe_bmg_pmt_cb;
break;
case XE_VSEC_CRI:
if (!xe->soc_remapper.set_telem_region)
- return;
+ return 0;
xe->pmt.base_offset = CRI_TELEMETRY_OFFSET;
+
+ xe->pmt.retry_count = 0;
+ INIT_DELAYED_WORK(&xe->pmt.work, cri_late_bind_probe_work);
+
+ xe_pm_runtime_get_noresume(xe);
+ if (!xe_is_oobmsm_fw_ready(xe)) {
+ schedule_delayed_work(&xe->pmt.work,
+ msecs_to_jiffies(VSEC_LATE_BIND_DELAY_MSEC));
+ return devm_add_action_or_reset(xe->drm.dev,
+ vsec_disable_late_bind_work,
+ xe);
+ }
+
info->priv_data = &xe_cri_pmt_cb;
xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
break;
default:
- break;
+ drm_err(&xe->drm, "Unsupported platform: %u\n", platform);
+ return 0;
}
/*
@@ -498,5 +623,10 @@ void xe_vsec_init(struct xe_device *xe)
* resources.
*/
intel_vsec_register(dev, info);
+
+ if (platform == XE_VSEC_CRI)
+ xe_pm_runtime_put(xe);
+
+ return 0;
}
MODULE_IMPORT_NS("INTEL_VSEC");
diff --git a/drivers/gpu/drm/xe/xe_vsec.h b/drivers/gpu/drm/xe/xe_vsec.h
index a25b4e6e681b..c4a1e2fc67d8 100644
--- a/drivers/gpu/drm/xe/xe_vsec.h
+++ b/drivers/gpu/drm/xe/xe_vsec.h
@@ -9,7 +9,7 @@
struct device;
struct xe_device;
-void xe_vsec_init(struct xe_device *xe);
+int xe_vsec_init(struct xe_device *xe);
int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offset, u32 count);
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (8 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information Michael J. Ruhl
@ 2026-08-12 19:37 ` Michael J. Ruhl
2026-08-12 20:04 ` sashiko-bot
2026-08-12 20:24 ` ✓ CI.KUnit: success for Crescent Island PMT support (rev4) Patchwork
2026-08-12 21:16 ` ✓ Xe.CI.BAT: " Patchwork
11 siblings, 1 reply; 21+ messages in thread
From: Michael J. Ruhl @ 2026-08-12 19:37 UTC (permalink / raw)
To: platform-driver-x86, intel-xe, hansg, ilpo.jarvinen,
matthew.brost, rodrigo.vivi, thomas.hellstrom, airlied, simona,
david.e.box, anoop.c.vijay, badal.nilawar, matthew.d.roper,
james.ausmus
Xe access the PMT infrastructure directly. The current usage
is supported ONLY by BMG devices.
CRI has further requirements for access.
Add a new API to access the GUID based on the platform.
Use the API get the GUID for each device.
Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
---
drivers/gpu/drm/xe/regs/xe_pmt.h | 4 +++-
drivers/gpu/drm/xe/xe_debugfs.c | 30 +++++++++++++-----------
drivers/gpu/drm/xe/xe_hwmon.c | 10 ++++++--
drivers/gpu/drm/xe/xe_pcode.c | 10 ++++++--
drivers/gpu/drm/xe/xe_vsec.c | 40 ++++++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_vsec.h | 1 +
6 files changed, 77 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_pmt.h b/drivers/gpu/drm/xe/regs/xe_pmt.h
index fc9c9cb6a830..683bf401dc9d 100644
--- a/drivers/gpu/drm/xe/regs/xe_pmt.h
+++ b/drivers/gpu/drm/xe/regs/xe_pmt.h
@@ -10,7 +10,7 @@
#define BMG_PMT_BASE_OFFSET 0xDB000
#define BMG_DISCOVERY_OFFSET (SOC_BASE + BMG_PMT_BASE_OFFSET)
-#define PUNIT_TELEMETRY_GUID XE_REG(BMG_DISCOVERY_OFFSET + 0x4)
+#define BMG_PUNIT_TELEMETRY_GUID XE_REG(BMG_DISCOVERY_OFFSET + 0x4)
#define BMG_ENERGY_STATUS_PMT_OFFSET (0x30)
#define ENERGY_PKG REG_GENMASK64(31, 0)
#define ENERGY_CARD REG_GENMASK64(63, 32)
@@ -25,6 +25,8 @@
#define CRI_DISCOVERY_OFFSET (SOC_BASE + CRI_TELEMETRY_BASE_OFFSET)
#define CRI_TELEMETRY_OFFSET (SOC_BASE + CRI_TELEMETRY_BASE_OFFSET)
+#define CRI_PUNIT_TELEMETRY_GUID XE_REG(CRI_DISCOVERY_OFFSET + 0x4)
+
#define BMG_MODS_RESIDENCY_OFFSET (0x4D0)
#define BMG_G2_RESIDENCY_OFFSET (0x530)
#define BMG_G6_RESIDENCY_OFFSET (0x538)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index eeceab4a9901..67903c854562 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -97,11 +97,16 @@ static void read_residency_counter(struct xe_device *xe, struct xe_mmio *mmio,
u32 offset, const char *name, struct drm_printer *p)
{
u64 residency = 0;
+ u32 guid;
int ret;
- ret = xe_pmt_telem_read(xe->drm.dev,
- xe_mmio_read32(mmio, PUNIT_TELEMETRY_GUID),
- &residency, offset, sizeof(residency));
+ guid = xe_vsec_get_guid(xe);
+ if (!guid) {
+ drm_warn(&xe->drm, "PMT device is not powered\n");
+ return;
+ }
+
+ ret = xe_pmt_telem_read(xe->drm.dev, guid, &residency, offset, sizeof(residency));
if (ret != sizeof(residency)) {
drm_warn(&xe->drm, "%s counter failed to read, ret %d\n", name, ret);
return;
@@ -706,23 +711,22 @@ void xe_debugfs_register(struct xe_device *xe)
ARRAY_SIZE(debugfs_list),
root, minor);
- if (xe->info.platform == XE_BATTLEMAGE && !IS_SRIOV_VF(xe)) {
- drm_debugfs_create_files(debugfs_residencies,
- ARRAY_SIZE(debugfs_residencies),
- root, minor);
- }
-
/*
- * Pcode version read from PMT is currently only supported on CRI and BMG platforms in PF
- * mode, as both platforms support the necessary telemetry read mechanism and have a fixed
- * PUNIT_VERSION_OFFSET.
+ * Residencies and Pcode version read from PMT is currently only supported on CRI and BMG
+ * platforms in PF mode. Both platforms support the necessary telemetry read mechanism
+ * and have a fixed offses for the required data.
* Attempting this access on other platforms must be verified before enabling support.
*/
if (!IS_SRIOV_VF(xe) &&
- (xe->info.platform == XE_CRESCENTISLAND || xe->info.platform == XE_BATTLEMAGE))
+ (xe->info.platform == XE_CRESCENTISLAND || xe->info.platform == XE_BATTLEMAGE)) {
+ drm_debugfs_create_files(debugfs_residencies,
+ ARRAY_SIZE(debugfs_residencies),
+ root, minor);
+
drm_debugfs_create_files(pcode_info_debugfs,
ARRAY_SIZE(pcode_info_debugfs),
root, minor);
+ }
debugfs_create_file("forcewake_all", 0400, root, xe,
&forcewake_all_fops);
diff --git a/drivers/gpu/drm/xe/xe_hwmon.c b/drivers/gpu/drm/xe/xe_hwmon.c
index 49f7e0edcc4b..db48594fcc1f 100644
--- a/drivers/gpu/drm/xe/xe_hwmon.c
+++ b/drivers/gpu/drm/xe/xe_hwmon.c
@@ -517,9 +517,15 @@ xe_hwmon_energy_get(struct xe_hwmon *hwmon, int channel, long *energy)
if (hwmon->xe->info.platform == XE_BATTLEMAGE) {
u64 pmt_val;
+ u32 guid;
- ret = xe_pmt_telem_read(hwmon->xe->drm.dev,
- xe_mmio_read32(mmio, PUNIT_TELEMETRY_GUID),
+ guid = xe_vsec_get_guid(hwmon->xe);
+ if (!guid) {
+ drm_warn(&hwmon->xe->drm, "PMT device is not powered\n");
+ *energy = 0;
+ return;
+ }
+ ret = xe_pmt_telem_read(hwmon->xe->drm.dev, guid,
&pmt_val, BMG_ENERGY_STATUS_PMT_OFFSET, sizeof(pmt_val));
if (ret != sizeof(pmt_val)) {
drm_warn(&hwmon->xe->drm, "energy read from pmt failed, ret %d\n", ret);
diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
index ccc3bdeed6bb..1b93fda1f41a 100644
--- a/drivers/gpu/drm/xe/xe_pcode.c
+++ b/drivers/gpu/drm/xe/xe_pcode.c
@@ -368,11 +368,17 @@ ALLOW_ERROR_INJECTION(xe_pcode_probe_early, ERRNO); /* See xe_pci_probe */
int xe_get_pcode_version(struct xe_device *xe, struct xe_pcode_version *version)
{
int ret = 0;
+ u32 guid;
guard(xe_pm_runtime)(xe);
- ret = xe_pmt_telem_read(xe->drm.dev,
- xe_mmio_read32(xe_root_tile_mmio(xe), PUNIT_TELEMETRY_GUID),
+ guid = xe_vsec_get_guid(xe);
+ if (!guid) {
+ xe_warn(xe, "PMT device is not powered\n");
+ return -ENODATA;
+ }
+
+ ret = xe_pmt_telem_read(xe->drm.dev, guid,
(u64 *)version, PUNIT_VERSION_OFFSET, sizeof(*version));
if (ret != sizeof(*version)) {
xe_warn(xe, "pcode version read from PMT failed, ret %pe\n", ERR_PTR(ret));
diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
index bed5103dac19..a56f988d13eb 100644
--- a/drivers/gpu/drm/xe/xe_vsec.c
+++ b/drivers/gpu/drm/xe/xe_vsec.c
@@ -565,6 +565,46 @@ static void vsec_disable_late_bind_work(void *arg)
xe_pm_runtime_put(xe);
}
+u32 xe_vsec_get_guid(struct xe_device *xe)
+{
+ struct xe_mmio *mmio = xe_root_tile_mmio(xe);
+ u32 guid;
+
+ /*
+ * Both supported platforms (BMG, CRI) require the remapper callback to
+ * access data. CRI needs it for the GUID.
+ */
+ if (!xe->soc_remapper.set_telem_region)
+ return 0;
+
+ /* caller must ensure correct power state */
+ if (!xe_pm_runtime_get_if_active(xe))
+ return 0;
+
+ mutex_lock(&xe->pmt.lock);
+
+ switch (xe->info.platform) {
+ case XE_BATTLEMAGE:
+ guid = xe_mmio_read32(mmio, BMG_PUNIT_TELEMETRY_GUID);
+ break;
+
+ case XE_CRESCENTISLAND:
+ xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
+ guid = xe_mmio_read32(mmio, CRI_PUNIT_TELEMETRY_GUID);
+ break;
+
+ default:
+ guid = 0;
+ drm_err(&xe->drm, "Unsupported platform: %u\n", xe->info.platform);
+ break;
+ }
+
+ mutex_unlock(&xe->pmt.lock);
+ xe_pm_runtime_put(xe);
+
+ return guid;
+}
+
/**
* xe_vsec_init - Initialize resources and add intel_vsec auxiliary
* interface
diff --git a/drivers/gpu/drm/xe/xe_vsec.h b/drivers/gpu/drm/xe/xe_vsec.h
index c4a1e2fc67d8..43c3e9f227c5 100644
--- a/drivers/gpu/drm/xe/xe_vsec.h
+++ b/drivers/gpu/drm/xe/xe_vsec.h
@@ -10,6 +10,7 @@ struct device;
struct xe_device;
int xe_vsec_init(struct xe_device *xe);
+u32 xe_vsec_get_guid(struct xe_device *xe);
int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offset, u32 count);
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks
2026-08-12 19:37 ` [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks Michael J. Ruhl
@ 2026-08-12 19:49 ` sashiko-bot
0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 19:49 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Missing error propagation in pmt_crashlog_rmw and pmt_crashlog_rc when register callbacks fail.
--
--- Patch [2]: [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks ---
commit 63beb7f9cb719c6439cef978b14d03ae4aa7a626
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
platform/x86/intel/pmt: Add register access callbacks
This commit augments the PMT callback infrastructure to allow registered
drivers to customize read and write access to the control paths.
> diff --git a/drivers/platform/x86/intel/pmt/crashlog.c b/drivers/platform/x86/intel/pmt/crashlog.c
> index f936daf99e4d2..5923ad7abbd98 100644
> --- a/drivers/platform/x86/intel/pmt/crashlog.c
> +++ b/drivers/platform/x86/intel/pmt/crashlog.c
> @@ -129,7 +129,19 @@ static void pmt_crashlog_rmw(struct crashlog_entry *crashlog, u32 bit, bool set)
> {
> const struct crashlog_control *control = &crashlog->info->control;
> struct intel_pmt_entry *entry = &crashlog->entry;
> - u32 reg = readl(entry->disc_table + control->offset);
> + u32 guid = entry->header.guid;
> + u32 reg;
> + int err;
> +
> + if (entry->cb && entry->cb->read_reg) {
> + err = entry->cb->read_reg(entry->dev, guid, ®, control->offset);
> + if (err) {
> + pr_err("%s: failed to read reg: %d\n", __func__, err);
> + return;
[Severity: Medium]
Should pmt_crashlog_rmw() be updated to return an int so that this error code
can be propagated to the caller?
Since it currently returns void, any sysfs write handlers that trigger this
path will silently swallow the error and falsely report success to userspace if
the underlying hardware access fails.
> + }
> + } else {
> + reg = readl(entry->disc_table + control->offset);
> + }
[ ... ]
> - writel(reg, entry->disc_table + control->offset);
> + if (entry->cb && entry->cb->write_reg) {
> + err = entry->cb->write_reg(entry->dev, guid, reg, control->offset);
> + if (err) {
> + pr_err("%s: failed to write reg: %d\n", __func__, err);
> + return;
[Severity: Medium]
Similarly, should the error code be propagated here rather than returning
without notifying the caller of the failure?
> + }
> + } else {
> + writel(reg, entry->disc_table + control->offset);
> + }
> }
>
> /* Read the status register and see if the specified @bit is set */
> static bool pmt_crashlog_rc(struct crashlog_entry *crashlog, u32 bit)
> {
> const struct crashlog_status *status = &crashlog->info->status;
> - u32 reg = readl(crashlog->entry.disc_table + status->offset);
> + struct intel_pmt_entry *entry = &crashlog->entry;
> + u32 guid = entry->header.guid;
> + u32 reg;
> + int err;
> +
> + if (entry->cb && entry->cb->read_reg) {
> + err = entry->cb->read_reg(entry->dev, guid, ®, status->offset);
> + if (err) {
> + pr_err("%s: failed to read reg: %d\n", __func__, err);
> + return false;
[Severity: Medium]
Is returning false the correct behavior when the read callback fails?
This masks the error code from the caller and treats the read failure as if
the bit is unset. This could lead to incorrect evaluations, for example causing
sysfs read handlers to return an inaccurate hardware state. Should we propagate
the error instead?
> + }
> + } else {
> + reg = readl(crashlog->entry.disc_table + status->offset);
> + }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=2
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT
2026-08-12 19:37 ` [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT Michael J. Ruhl
@ 2026-08-12 19:49 ` sashiko-bot
0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 19:49 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The Crescent Island (CRI) PMT feature is completely non-functional and unreachable due to multiple missing integration steps across the VSEC initialization and decoding paths.
--
--- Patch [6]: [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT ---
commit 0135683ab7b7649c2500e35c35f765f517103d98
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
drm/xe/vsec: Support Crescent Island PMT
Crescent Island (CRI) supports PMT telemetry and crashlog.
Add Crescent Island (CRI) discovery structure (DVSEC)
information to allow for Xe registration.
> diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
> index 8abe11e6312f0..6345b0b4b26b8 100644
> --- a/drivers/gpu/drm/xe/xe_vsec.c
> +++ b/drivers/gpu/drm/xe/xe_vsec.c
> @@ -21,8 +21,19 @@
>
> #include "regs/xe_pmt.h"
>
> -/* PMT GUID value for BMG devices. NOTE: this is NOT a PCI id */
> +/* PMT GUID value for BMG and CRI devices. NOTE: this is NOT a PCI id */
> #define BMG_DEVICE_ID 0xE2F8
> +#define CRI_DEVICE_ID 0xE2FA
[Severity: Medium]
Does CRI_DEVICE_ID need to be added to xe_guid_decode()?
Currently xe_guid_decode() unconditionally checks for BMG_DEVICE_ID:
drivers/gpu/drm/xe/xe_vsec.c:xe_guid_decode() {
...
if (device_id != BMG_DEVICE_ID)
return -ENODEV;
...
}
Will this reject CRI devices when they try to decode their GUID?
[ ... ]
> enum xe_vsec {
> XE_VSEC_UNKNOWN = 0,
> XE_VSEC_BMG,
> + XE_VSEC_CRI,
> };
>
> static struct intel_vsec_platform_info xe_vsec_info[] = {
> @@ -60,6 +98,10 @@ static struct intel_vsec_platform_info xe_vsec_info[] = {
> .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_CRASHLOG,
> .headers = bmg_capabilities,
> },
> + [XE_VSEC_CRI] = {
> + .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_CRASHLOG,
> + .headers = cri_capabilities,
> + },
> { }
> };
[Severity: Medium]
Are there missing updates to get_platform_info() and vsec_platforms[] to
actually return XE_VSEC_CRI?
Currently get_platform_info() returns XE_VSEC_UNKNOWN for any platform
greater than XE_BATTLEMAGE:
drivers/gpu/drm/xe/xe_vsec.c:get_platform_info() {
if (xe->info.platform > XE_BATTLEMAGE)
return XE_VSEC_UNKNOWN;
return vsec_platforms[xe->info.platform];
}
Additionally, does xe_vsec_init() need a case for XE_VSEC_CRI to set up
the PMT callbacks?
drivers/gpu/drm/xe/xe_vsec.c:xe_vsec_init() {
...
switch (platform) {
case XE_VSEC_BMG:
if (!xe->soc_remapper.set_telem_region)
return;
info->priv_data = &xe_pmt_cb;
break;
default:
break;
}
...
}
Without these additions, it appears the CRI platform will not be fully
detected and the PMT feature will remain unreachable.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=6
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode
2026-08-12 19:37 ` [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode Michael J. Ruhl
@ 2026-08-12 19:51 ` sashiko-bot
0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 19:51 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [Medium] The Crescent Island (CRI) PMT initialization is inaccessible due to missing platform integration in the initialization path, rendering the new decode logic dead code.
Pre-existing issues:
- [High] Unhandled cap_type and instance combinations in guid_decode functions silently return success with a 0 offset, leading to incorrect base register reads.
--
--- Patch [7]: [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode ---
commit 8ae722df1dc1347897983eec5f487f23bc897a93
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
drm/xe/vsec: Crescent Island PMT decode
This commit adds support for decoding the PMT data area on Crescent
Island (CRI) devices. It introduces new magic numbers, a new decode
function for CRI, and updates the telemetry read callback to use a
device-specific base offset.
> diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
> index 6345b0b4b26b8..dc42b9492428a 100644
> --- a/drivers/gpu/drm/xe/xe_vsec.c
> +++ b/drivers/gpu/drm/xe/xe_vsec.c
[ ... ]
> @@ -138,45 +162,92 @@ enum capability {
> WATCHER,
> };
>
> -static int xe_guid_decode(u32 guid, int *index, u32 *offset)
> +static int bmg_guid_decode(u32 guid, int *index, u32 *offset)
> {
> u32 record_id = FIELD_GET(GUID_RECORD_ID, guid);
> u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
[ ... ]
> switch (record_id) {
> case PUNIT:
> - *index = 0;
> + *index = BMG_IDX_TELEM_PUNIT;
> if (cap_type == TELEMETRY)
> - *offset = PUNIT_TELEMETRY_OFFSET;
> + *offset = BMG_PUNIT_TELEMETRY_OFFSET;
> else
> - *offset = PUNIT_WATCHER_OFFSET;
> + *offset = BMG_PUNIT_WATCHER_OFFSET;
> break;
>
> case OOBMSM_0:
> - *index = 1;
> + *index = BMG_IDX_TELEM_OOBMSM;
> if (cap_type == WATCHER)
> - *offset = OOBMSM_0_WATCHER_OFFSET;
> + *offset = BMG_OOBMSM_0_WATCHER_OFFSET;
> break;
[Severity: High]
This is a pre-existing issue, but if cap_type is not WATCHER here, this
case silently falls through, leaves offset as 0, and returns 0 indicating
success.
Will this misdirect reads to the base PMT offset since offset remains 0,
potentially leaking data or causing hardware hangs?
> +static int cri_guid_decode(u32 guid, int *index, u32 *offset)
> +{
[ ... ]
> + case OOBMSM_0:
> + *index = CRI_IDX_TELEM_OOBMSM;
> + switch (instance) {
> + case 0:
> + if (cap_type == WATCHER) {
> + *index = CRI_IDX_WATCHER_OOBMSM;
> + *offset = CRI_OOBMSM_WATCHER_OFFSET;
> + }
> + break;
[Severity: High]
Similarly, in this newly added function, if cap_type is not WATCHER for
instance 0, it silently breaks and returns 0.
Should this code return an error code like -EINVAL instead of falling
through to a success return with an offset of 0?
[ ... ]
> @@ -286,6 +374,7 @@ void xe_vsec_init(struct xe_device *xe)
> case XE_VSEC_BMG:
> if (!xe->soc_remapper.set_telem_region)
> return;
> + xe->pmt.base_offset = BMG_TELEMETRY_OFFSET;
> info->priv_data = &xe_pmt_cb;
> break;
> default:
[Severity: Medium]
Is the XE_VSEC_CRI case missing from this switch statement?
If get_platform_info() correctly returns XE_VSEC_CRI, there appears to be
no case here to handle it, meaning base_offset and the pmt callbacks will
remain uninitialized.
Additionally, if get_platform_info() still filters out platforms greater
than XE_BATTLEMAGE, does it also need to be updated to allow the CRI
platform to be returned so this initialization path can be reached?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=7
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit
2026-08-12 19:37 ` [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit Michael J. Ruhl
@ 2026-08-12 19:51 ` sashiko-bot
0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 19:51 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The `xe_pmt_telem_read` function performs a `memcpy_fromio` without validating that the requested telemetry read fits within the `xe->mmio.regs` mapped region. The `user_offset` and `count` parameters passed from the sysfs interface are bounded by `entry->size` (derived from the device's PMT discovery header). However, the hardware-provided size is implicitly trusted and never validated against the driver's actual MMIO mapping limits. A malicious or buggy hardware device could advertise an artificially large `header->size`, bypassing the `sysfs` offset limits. Because `xe_pmt_telem_read` calculates `telem_addr = xe->mmio.regs + offset + user_offset` and performs `memcpy_fromio`, this permits an out-of-bounds read past the end of the `xe->mmio.regs` mapping. Reading arbitrary unmapped physical memory or unrelated device registers could cause a system crash, leak sensitive hardware state, or trigger unintended side effects from read-sensitive registers.
--
--- Patch [5]: [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit ---
commit 240693c221b75275ccbcc4f83244797a5eb5edf9
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
drm/xe/vsec: Support possible hotplug exit
This patch adds drm_dev_enter() and drm_dev_exit() to xe_pmt_telem_read()
to verify the device is valid in the hotplug context before accessing it. It
also updates error handling to properly exit the DRM device context on failure.
> diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
> --- a/drivers/gpu/drm/xe/xe_vsec.c
> +++ b/drivers/gpu/drm/xe/xe_vsec.c
[ ... ]
> @@ -148,14 +155,20 @@ int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t user_offse
> u32 cap_type = FIELD_GET(GUID_CAP_TYPE, guid);
> u32 mem_region;
> u32 offset;
> - int ret;
> + int ret = 0;
> + int idx;
>
> - if (!xe->soc_remapper.set_telem_region)
> + if (!drm_dev_enter(&xe->drm, &idx))
> return -ENODEV;
>
> + if (!xe->soc_remapper.set_telem_region) {
> + ret = -EINVAL;
> + goto dev_exit;
> + }
> +
> ret = xe_guid_decode(guid, &mem_region, &offset);
> if (ret)
> - return ret;
> + goto dev_exit;
>
> telem_addr += offset + user_offset;
[Severity: High]
This is a pre-existing issue, but does this code need to validate that the
requested telemetry read fits within the xe->mmio.size limit?
If a device provides a malicious or buggy PMT discovery header that advertises a
large entry->size, the sysfs offset limits would allow large user_offset and
count values.
Could the subsequent memcpy_fromio(data, telem_addr, count) further down in this
function then read past the end of the xe->mmio.regs mapping, potentially
causing a crash or leaking state from unmapped or read-sensitive registers?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=5
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information
2026-08-12 19:37 ` [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information Michael J. Ruhl
@ 2026-08-12 19:54 ` sashiko-bot
2026-08-12 20:12 ` Ruhl, Michael J
1 sibling, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 19:54 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
- [High] Double `xe_pm_runtime_put(xe)` in the success path of `xe_pmt_write_reg`.
- [High] The late bind delayed work is cancelled via a `devm` action, causing a race during teardown that registers child devices on a deleted parent.
- [Medium] Using asynchronous `xe_pm_runtime_put()` during device teardown can leave hardware active indefinitely.
- [Medium] `wait_for_fw` places the calling process in uninterruptible sleep (`D` state) for up to 20 seconds.
--
--- Patch [9]: [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information ---
commit 5901be98f83d9c07e1385a372c7e330c405c0188
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
drm/xe/vsec: Support late bind fw information
CRI FW is loaded on power on. Because of this, access to
the FW cannot be done until it is running.
Update the XE PMT probe and access to check for late bind
devices, verify, and wait for the appropriate FW state
before probe or access.
> diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
> --- a/drivers/gpu/drm/xe/xe_vsec.c
> +++ b/drivers/gpu/drm/xe/xe_vsec.c
[ ... ]
> +static bool wait_for_fw(struct xe_device *xe)
> +{
> + int retries = VSEC_LATE_BIND_RETRY; /* wait up to 20 secs */
> +
> + if (xe->info.platform != XE_CRESCENTISLAND)
> + return true;
> +
> + while (retries--) {
> + if (xe_is_oobmsm_fw_ready(xe))
> + return true;
> +
> + msleep(VSEC_LATE_BIND_DELAY_MSEC);
[Severity: Medium]
Does this msleep() place the calling process in an uninterruptible sleep
for up to 20 seconds?
If the firmware is unresponsive, userspace processes reading or writing the
PMT sysfs interface might become unkillable and hang while calling
xe_pmt_telem_read(), xe_pmt_read_reg(), or xe_pmt_write_reg().
[ ... ]
> @@ -416,6 +488,10 @@ static int xe_pmt_write_reg(struct device *dev, u32 guid, u32 reg, u32 offset)
> disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
>
> xe_pm_runtime_get(xe);
> + if (!wait_for_fw(xe)) {
> + ret = -ENODATA;
> + goto runtime_exit;
> + }
> mutex_lock(&xe->pmt.lock);
>
> xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
> @@ -425,6 +501,9 @@ static int xe_pmt_write_reg(struct device *dev, u32 guid, u32 reg, u32 offset)
> mutex_unlock(&xe->pmt.lock);
> xe_pm_runtime_put(xe);
>
> +runtime_exit:
> + xe_pm_runtime_put(xe);
> +
> dev_exit:
> drm_dev_exit(idx);
[Severity: High]
Will the success path fall through here and execute the newly added
runtime_exit cleanup path?
It appears that if wait_for_fw() succeeds, the function calls
xe_pm_runtime_put() once right after mutex_unlock(), and then immediately
falls through to the runtime_exit label, resulting in two sequential
xe_pm_runtime_put() calls.
This could drop the PM usage counter below its baseline, potentially
powering off the device prematurely while it is still in use.
[ ... ]
> +static void vsec_disable_late_bind_work(void *arg)
> +{
> + struct xe_device *xe = arg;
> +
> + /*
> + * If was work was cancelled while it was still pending, we need to
> + * take care of releasing the runtime reference
> + */
> + if (disable_delayed_work_sync(&xe->pmt.work))
> + xe_pm_runtime_put(xe);
[Severity: Medium]
Should this use a synchronous put instead of an asynchronous one?
Using an asynchronous xe_pm_runtime_put() during device teardown can leave
the hardware active indefinitely. The pending async idle/suspend work can
be cancelled by pm_runtime_disable() during the device removal path.
[Severity: High]
Can this devm action race with cri_late_bind_probe_work() during teardown?
If the device is unbound during the 20-second firmware initialization
window, the driver core removes all children via device_del() before
starting devres release. The disable_delayed_work_sync() here blocks until
the work completes.
Concurrently, if cri_late_bind_probe_work() executes:
static void cri_late_bind_probe_work(struct work_struct *work)
{
...
if (xe_is_oobmsm_fw_ready(xe)) {
cri_late_bind_probe(xe);
...
It could proceed to call intel_vsec_register().
Would this register a child device on a parent that has already been
deleted, causing devres list corruption or a sysfs use-after-free?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=9
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks
2026-08-12 19:37 ` [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks Michael J. Ruhl
@ 2026-08-12 19:57 ` sashiko-bot
0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 19:57 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Improper MMIO access for 32-bit control registers using byte-wise copies (memcpy_toio/memcpy_fromio).
--
--- Patch [8]: [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks ---
commit 664ab77147de6f456af0ceaeae6a996ddd3d6a40
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
drm/xe/vsec: Crescent Island PMT callbacks
This commit introduces callbacks to get the status and control information
for CRI PMT usage. It adds the glue logic to register the CRI PMT
functionality in the xe driver.
> diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
> index dc42b9492428a..578d59048b39c 100644
> --- a/drivers/gpu/drm/xe/xe_vsec.c
> +++ b/drivers/gpu/drm/xe/xe_vsec.c
[ ... ]
> +static int xe_pmt_read_reg(struct device *dev, u32 guid, u32 *reg, u32 offset)
> +{
[ ... ]
> + xe_pm_runtime_get(xe);
> + mutex_lock(&xe->pmt.lock);
> +
> + xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
> +
> + memcpy_fromio(reg, disc_addr, sizeof(*reg));
[Severity: High]
Will this cause unsupported requests or return garbage on some platforms?
Using memcpy_fromio() for a 32-bit register read often falls back to
byte-wise transactions (like rep movsb) instead of a single 32-bit atomic
transaction. For MMIO control registers, issuing four 1-byte PCIe
transactions can cause the hardware to drop the request.
Should this use readl() or the driver's xe_mmio_read32() wrapper instead
to guarantee the correct 32-bit transaction width?
> +
> + mutex_unlock(&xe->pmt.lock);
> + xe_pm_runtime_put(xe);
> +
> +dev_exit:
> + drm_dev_exit(idx);
> +
> + return ret;
> +}
> +
> +static int xe_pmt_write_reg(struct device *dev, u32 guid, u32 reg, u32 offset)
> +{
[ ... ]
> + xe_pm_runtime_get(xe);
> + mutex_lock(&xe->pmt.lock);
> +
> + xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
> +
> + memcpy_toio(disc_addr, ®, sizeof(reg));
[Severity: High]
Does this have the same byte-wise transaction issue?
Similar to the read path above, using memcpy_toio() for a single 32-bit
register write can result in 4 byte-sized MMIO writes. Should this use
writel() or xe_mmio_write32() to ensure a single 32-bit atomic write?
> +
> + mutex_unlock(&xe->pmt.lock);
> + xe_pm_runtime_put(xe);
> +
> +dev_exit:
> + drm_dev_exit(idx);
> +
> + return ret;
> +}
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=8
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI
2026-08-12 19:37 ` [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI Michael J. Ruhl
@ 2026-08-12 20:04 ` sashiko-bot
0 siblings, 0 replies; 21+ messages in thread
From: sashiko-bot @ 2026-08-12 20:04 UTC (permalink / raw)
To: Michael J. Ruhl; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The function `xe_pmt_write_reg` executes a double put on the runtime PM usage counter on its success path.
- [Low] Unused `mmio` parameter in `read_residency_counter`.
--
--- Patch [10]: [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI ---
commit dad9ae19b6a680a51c5ad534968234e3d02be8a6
Author: Michael J. Ruhl <michael.j.ruhl@intel.com>
Subject: drm/xe/vsec: Update PMT internal access for CRI
This commit adds a new API to access the PMT telemetry GUID based on the
platform. It updates the debugfs, hwmon, and pcode components to use this
new xe_vsec_get_guid() function instead of reading the GUID directly.
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index 8de78cd0aa03b..0ef62b1e0e91f 100644
> --- a/drivers/gpu/drm/xe/xe_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_debugfs.c
> @@ -96,11 +96,16 @@ static void read_residency_counter(struct xe_device *xe, struct xe_mmio *mmio,
> u32 offset, const char *name, struct drm_printer *p)
> {
> u64 residency = 0;
> + u32 guid;
> int ret;
>
> - ret = xe_pmt_telem_read(xe->drm.dev,
> - xe_mmio_read32(mmio, PUNIT_TELEMETRY_GUID),
> - &residency, offset, sizeof(residency));
> + guid = xe_vsec_get_guid(xe);
[Severity: Low]
Is the mmio parameter still needed in read_residency_counter()?
With the switch to xe_vsec_get_guid(), it looks like the mmio argument is no
longer accessed in the function body and can probably be removed from the
signature.
> + if (!guid) {
> + drm_warn(&xe->drm, "PMT device is not powered\n");
> + return;
> + }
> +
> + ret = xe_pmt_telem_read(xe->drm.dev, guid, &residency, offset, sizeof(residency));
[ ... ]
While reviewing this, I also noticed a pre-existing issue in xe_pmt_write_reg():
drivers/gpu/drm/xe/xe_vsec.c:xe_pmt_write_reg() {
...
memcpy_toio(disc_addr, ®, sizeof(reg));
mutex_unlock(&xe->pmt.lock);
xe_pm_runtime_put(xe);
runtime_exit:
xe_pm_runtime_put(xe);
...
}
[Severity: High]
This is a pre-existing issue, but does xe_pmt_write_reg() execute a double put
on the runtime PM usage counter on its success path?
When the register write completes successfully, it unlocks the mutex and calls
xe_pm_runtime_put(xe), but then falls through to the runtime_exit label which
calls xe_pm_runtime_put(xe) a second time. Can this lead to an underflow and
cause the device to enter runtime suspend prematurely while still in use?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812193742.2170188-12-michael.j.ruhl@intel.com?part=10
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information
2026-08-12 19:37 ` [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information Michael J. Ruhl
2026-08-12 19:54 ` sashiko-bot
@ 2026-08-12 20:12 ` Ruhl, Michael J
1 sibling, 0 replies; 21+ messages in thread
From: Ruhl, Michael J @ 2026-08-12 20:12 UTC (permalink / raw)
To: Ruhl, Michael J, platform-driver-x86@vger.kernel.org,
intel-xe@lists.freedesktop.org, hansg@kernel.org,
ilpo.jarvinen@linux.intel.com, Brost, Matthew, Vivi, Rodrigo,
thomas.hellstrom@linux.intel.com, airlied@gmail.com,
simona@ffwll.ch, david.e.box@linux.intel.com, Vijay, Anoop C,
Nilawar, Badal, Roper, Matthew D, Ausmus, James
>-----Original Message-----
>From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Michael
>J. Ruhl
>Sent: Wednesday, August 12, 2026 3:38 PM
>To: platform-driver-x86@vger.kernel.org; intel-xe@lists.freedesktop.org;
>hansg@kernel.org; ilpo.jarvinen@linux.intel.com; Brost, Matthew
><matthew.brost@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>;
>thomas.hellstrom@linux.intel.com; airlied@gmail.com; simona@ffwll.ch;
>david.e.box@linux.intel.com; Vijay, Anoop C <anoop.c.vijay@intel.com>;
>Nilawar, Badal <badal.nilawar@intel.com>; Roper, Matthew D
><matthew.d.roper@intel.com>; Ausmus, James <james.ausmus@intel.com>
>Subject: [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information
>
>CRI FW is loaded on power on. Because of this, access to
>the FW cannot be done until it is running.
>
>Update the XE PMT probe and access to check for late bind
>devices, verify, and wait for the appropriate FW state
>before probe or access.
>
>Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
>---
> drivers/gpu/drm/xe/xe_device.c | 4 +-
> drivers/gpu/drm/xe/xe_device_types.h | 4 +
> drivers/gpu/drm/xe/xe_vsec.c | 142 +++++++++++++++++++++++++--
> drivers/gpu/drm/xe/xe_vsec.h | 2 +-
> 4 files changed, 144 insertions(+), 8 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
>index 71111ad32465..df6716a975fb 100644
>--- a/drivers/gpu/drm/xe/xe_device.c
>+++ b/drivers/gpu/drm/xe/xe_device.c
>@@ -1139,7 +1139,9 @@ int xe_device_probe(struct xe_device *xe)
> for_each_gt(gt, xe, id)
> xe_gt_sanitize_freq(gt);
>
>- xe_vsec_init(xe);
>+ err = xe_vsec_init(xe);
>+ if (err)
>+ goto err_unregister_display;
>
> err = xe_sriov_init_late(xe);
> if (err)
>diff --git a/drivers/gpu/drm/xe/xe_device_types.h
>b/drivers/gpu/drm/xe/xe_device_types.h
>index 3f1a70813a99..5d9e6e66c665 100644
>--- a/drivers/gpu/drm/xe/xe_device_types.h
>+++ b/drivers/gpu/drm/xe/xe_device_types.h
>@@ -468,6 +468,10 @@ struct xe_device {
> struct mutex lock;
> /** @pmt.base_offset: device specific base offset */
> u64 base_offset;
>+ /** @pmt.work: support late-bind probe */
>+ struct delayed_work work;
>+ /** @pmt.retry_count: late-bind probe retry */
>+ u32 retry_count;
> } pmt;
>
> /** @soc_remapper: SoC remapper object */
>diff --git a/drivers/gpu/drm/xe/xe_vsec.c b/drivers/gpu/drm/xe/xe_vsec.c
>index 578d59048b39..bed5103dac19 100644
>--- a/drivers/gpu/drm/xe/xe_vsec.c
>+++ b/drivers/gpu/drm/xe/xe_vsec.c
>@@ -3,6 +3,7 @@
> #include <linux/bitfield.h>
> #include <linux/bits.h>
> #include <linux/cleanup.h>
>+#include <linux/delay.h>
> #include <linux/errno.h>
> #include <linux/intel_vsec.h>
> #include <linux/module.h>
>@@ -17,6 +18,7 @@
> #include "xe_mmio.h"
> #include "xe_platform_types.h"
> #include "xe_pm.h"
>+#include "xe_sysctrl.h"
> #include "xe_vsec.h"
>
> #include "regs/xe_pmt.h"
>@@ -162,6 +164,14 @@ enum capability {
> WATCHER,
> };
>
>+/*
>+ * Late bind will delay 100msec for up to 20 seconds
>+ */
>+#define VSEC_LATE_BIND_DELAY_MSEC (100)
>+#define VSEC_LATE_BIND_RETRY (200)
>+
>+static void cri_late_bind_probe(struct xe_device *xe);
>+
> static int bmg_guid_decode(u32 guid, int *index, u32 *offset)
> {
> u32 record_id = FIELD_GET(GUID_RECORD_ID, guid);
>@@ -272,6 +282,56 @@ static int xe_guid_decode(u32 guid, int *index, u32
>*offset)
> return -ENODEV;
> }
>
>+#define WAITING_FOR_SYCTLR
>+#ifdef WAITING_FOR_SYCTLR
>+static bool xe_is_oobmsm_fw_ready(struct xe_device *xe)
>+{
>+ return true;
>+}
>+#endif
>+
>+static void cri_late_bind_probe_work(struct work_struct *work)
>+{
>+ struct xe_device *xe = container_of(work, struct xe_device,
>pmt.work.work);
>+
>+ if (xe_is_oobmsm_fw_ready(xe)) {
>+ cri_late_bind_probe(xe);
>+ xe_pm_runtime_put(xe);
>+ return;
>+ }
>+
>+ xe->pmt.retry_count++;
>+
>+ /* wait up to 20 seconds */
>+ if (xe->pmt.retry_count == VSEC_LATE_BIND_RETRY) {
>+ drm_warn(&xe->drm, "PMT probe: Late Binding failed to
>complete\n");
>+ xe_pm_runtime_put(xe);
>+ return;
>+ }
>+
>+ if (!schedule_delayed_work(&xe->pmt.work,
>msecs_to_jiffies(VSEC_LATE_BIND_DELAY_MSEC)))
>+ xe_pm_runtime_put(xe);
>+}
>+
>+static bool wait_for_fw(struct xe_device *xe)
>+{
>+ int retries = VSEC_LATE_BIND_RETRY; /* wait up to 20 secs */
>+
>+ if (xe->info.platform != XE_CRESCENTISLAND)
>+ return true;
>+
>+ while (retries--) {
>+ if (xe_is_oobmsm_fw_ready(xe))
>+ return true;
>+
>+ msleep(VSEC_LATE_BIND_DELAY_MSEC);
>+ }
>+
>+ drm_warn(&xe->drm, "Late Binding failed to complete\n");
>+
>+ return false;
>+}
>+
> /*
> * xe_pmt_telem_read is a callback API. I.e this can be accessed external to
> * XE driver (PMT driver scope). Because of this, DRM hotplug needs to be
>@@ -318,6 +378,11 @@ int xe_pmt_telem_read(struct device *dev, u32 guid,
>u64 *data, loff_t user_offse
> goto dev_exit;
> }
>
>+ if (!wait_for_fw(xe)) {
>+ ret = -ENODATA;
>+ goto runtime_exit;
>+ }
>+
> mutex_lock(&xe->pmt.lock);
>
> /* set SoC re-mapper index register based on GUID memory region */
>@@ -327,6 +392,7 @@ int xe_pmt_telem_read(struct device *dev, u32 guid,
>u64 *data, loff_t user_offse
>
> mutex_unlock(&xe->pmt.lock);
>
>+runtime_exit:
> xe_pm_runtime_put(xe);
>
> dev_exit:
>@@ -374,6 +440,10 @@ static int xe_pmt_read_reg(struct device *dev, u32
>guid, u32 *reg, u32 offset)
> disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
>
> xe_pm_runtime_get(xe);
>+ if (!wait_for_fw(xe)) {
>+ ret = -ENODATA;
>+ goto runtime_exit;
>+ }
> mutex_lock(&xe->pmt.lock);
>
> xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
>@@ -381,6 +451,8 @@ static int xe_pmt_read_reg(struct device *dev, u32
>guid, u32 *reg, u32 offset)
> memcpy_fromio(reg, disc_addr, sizeof(*reg));
>
> mutex_unlock(&xe->pmt.lock);
>+
>+runtime_exit:
> xe_pm_runtime_put(xe);
>
> dev_exit:
>@@ -416,6 +488,10 @@ static int xe_pmt_write_reg(struct device *dev, u32
>guid, u32 reg, u32 offset)
> disc_addr += CRI_DISCOVERY_OFFSET + inst + offset;
>
> xe_pm_runtime_get(xe);
>+ if (!wait_for_fw(xe)) {
>+ ret = -ENODATA;
>+ goto runtime_exit;
>+ }
> mutex_lock(&xe->pmt.lock);
>
> xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
>@@ -425,6 +501,9 @@ static int xe_pmt_write_reg(struct device *dev, u32
>guid, u32 reg, u32 offset)
> mutex_unlock(&xe->pmt.lock);
> xe_pm_runtime_put(xe);
The above _put should have been removed.
This will be fixed.
m
>+runtime_exit:
>+ xe_pm_runtime_put(xe);
>+
> dev_exit:
> drm_dev_exit(idx);
>
>@@ -454,12 +533,44 @@ static enum xe_vsec get_platform_info(struct
>xe_device *xe)
> return vsec_platforms[xe->info.platform];
> }
>
>+static void cri_late_bind_probe(struct xe_device *xe)
>+{
>+ struct intel_vsec_platform_info *info;
>+ struct device *dev = xe->drm.dev;
>+ enum xe_vsec platform;
>+
>+ platform = get_platform_info(xe);
>+ if (platform != XE_VSEC_CRI)
>+ return;
>+
>+ info = &xe_vsec_info[platform];
>+ if (!info->headers)
>+ return;
>+
>+ info->priv_data = &xe_cri_pmt_cb;
>+ xe->soc_remapper.set_telem_region(xe, CRI_IDX_TELEM_DISCOVERY);
>+
>+ intel_vsec_register(dev, info);
>+}
>+
>+static void vsec_disable_late_bind_work(void *arg)
>+{
>+ struct xe_device *xe = arg;
>+
>+ /*
>+ * If was work was cancelled while it was still pending, we need to
>+ * take care of releasing the runtime reference
>+ */
>+ if (disable_delayed_work_sync(&xe->pmt.work))
>+ xe_pm_runtime_put(xe);
>+}
>+
> /**
> * xe_vsec_init - Initialize resources and add intel_vsec auxiliary
> * interface
> * @xe: valid xe instance
> */
>-void xe_vsec_init(struct xe_device *xe)
>+int xe_vsec_init(struct xe_device *xe)
> {
> struct intel_vsec_platform_info *info;
> struct device *dev = xe->drm.dev;
>@@ -467,30 +578,44 @@ void xe_vsec_init(struct xe_device *xe)
>
> platform = get_platform_info(xe);
> if (platform == XE_VSEC_UNKNOWN)
>- return;
>+ return 0;
>
> info = &xe_vsec_info[platform];
> if (!info->headers)
>- return;
>+ return 0;
>
> switch (platform) {
> case XE_VSEC_BMG:
> if (!xe->soc_remapper.set_telem_region)
>- return;
>+ return 0;
> xe->pmt.base_offset = BMG_TELEMETRY_OFFSET;
> info->priv_data = &xe_bmg_pmt_cb;
> break;
>
> case XE_VSEC_CRI:
> if (!xe->soc_remapper.set_telem_region)
>- return;
>+ return 0;
> xe->pmt.base_offset = CRI_TELEMETRY_OFFSET;
>+
>+ xe->pmt.retry_count = 0;
>+ INIT_DELAYED_WORK(&xe->pmt.work,
>cri_late_bind_probe_work);
>+
>+ xe_pm_runtime_get_noresume(xe);
>+ if (!xe_is_oobmsm_fw_ready(xe)) {
>+ schedule_delayed_work(&xe->pmt.work,
>+
>msecs_to_jiffies(VSEC_LATE_BIND_DELAY_MSEC));
>+ return devm_add_action_or_reset(xe->drm.dev,
>+
> vsec_disable_late_bind_work,
>+ xe);
>+ }
>+
> info->priv_data = &xe_cri_pmt_cb;
> xe->soc_remapper.set_telem_region(xe,
>CRI_IDX_TELEM_DISCOVERY);
> break;
>
> default:
>- break;
>+ drm_err(&xe->drm, "Unsupported platform: %u\n", platform);
>+ return 0;
> }
>
> /*
>@@ -498,5 +623,10 @@ void xe_vsec_init(struct xe_device *xe)
> * resources.
> */
> intel_vsec_register(dev, info);
>+
>+ if (platform == XE_VSEC_CRI)
>+ xe_pm_runtime_put(xe);
>+
>+ return 0;
> }
> MODULE_IMPORT_NS("INTEL_VSEC");
>diff --git a/drivers/gpu/drm/xe/xe_vsec.h b/drivers/gpu/drm/xe/xe_vsec.h
>index a25b4e6e681b..c4a1e2fc67d8 100644
>--- a/drivers/gpu/drm/xe/xe_vsec.h
>+++ b/drivers/gpu/drm/xe/xe_vsec.h
>@@ -9,7 +9,7 @@
> struct device;
> struct xe_device;
>
>-void xe_vsec_init(struct xe_device *xe);
>+int xe_vsec_init(struct xe_device *xe);
> int xe_pmt_telem_read(struct device *dev, u32 guid, u64 *data, loff_t
>user_offset, u32 count);
>
> #endif
>--
>2.43.0
^ permalink raw reply [flat|nested] 21+ messages in thread
* ✓ CI.KUnit: success for Crescent Island PMT support (rev4)
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (9 preceding siblings ...)
2026-08-12 19:37 ` [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI Michael J. Ruhl
@ 2026-08-12 20:24 ` Patchwork
2026-08-12 21:16 ` ✓ Xe.CI.BAT: " Patchwork
11 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-08-12 20:24 UTC (permalink / raw)
To: Ruhl, Michael J; +Cc: intel-xe
== Series Details ==
Series: Crescent Island PMT support (rev4)
URL : https://patchwork.freedesktop.org/series/160717/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[20:22:07] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:22:11] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[20:22:31] Starting KUnit Kernel (1/1)...
[20:22:31] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:22:31] ================= gpu_buddy (13 subtests) ==================
[20:22:31] [PASSED] gpu_test_buddy_alloc_limit
[20:22:31] [PASSED] gpu_test_buddy_alloc_optimistic
[20:22:31] [PASSED] gpu_test_buddy_alloc_pessimistic
[20:22:31] [PASSED] gpu_test_buddy_alloc_pathological
[20:22:31] [PASSED] gpu_test_buddy_alloc_contiguous
[20:22:31] [PASSED] gpu_test_buddy_alloc_clear
[20:22:31] [PASSED] gpu_test_buddy_alloc_range
[20:22:31] [PASSED] gpu_test_buddy_alloc_range_bias
[20:22:32] [PASSED] gpu_test_buddy_fragmentation_performance
[20:22:32] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[20:22:32] [PASSED] gpu_test_buddy_offset_aligned_allocation
[20:22:32] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[20:22:32] [PASSED] gpu_test_buddy_addr_to_block
[20:22:32] ==================== [PASSED] gpu_buddy ====================
[20:22:32] ============================================================
[20:22:32] Testing complete. Ran 13 tests: passed: 13
[20:22:32] Elapsed time: 24.789s total, 4.349s configuring, 20.026s building, 0.402s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[20:22:32] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:22:33] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[20:23:07] Starting KUnit Kernel (1/1)...
[20:23:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:23:07] ================== guc_buf (11 subtests) ===================
[20:23:07] [PASSED] test_smallest
[20:23:07] [PASSED] test_largest
[20:23:07] [PASSED] test_granular
[20:23:07] [PASSED] test_unique
[20:23:07] [PASSED] test_overlap
[20:23:07] [PASSED] test_reusable
[20:23:07] [PASSED] test_too_big
[20:23:07] [PASSED] test_flush
[20:23:07] [PASSED] test_lookup
[20:23:07] [PASSED] test_data
[20:23:07] [PASSED] test_class
[20:23:07] ===================== [PASSED] guc_buf =====================
[20:23:07] =================== guc_dbm (7 subtests) ===================
[20:23:07] [PASSED] test_empty
[20:23:07] [PASSED] test_default
[20:23:07] ======================== test_size ========================
[20:23:07] [PASSED] 4
[20:23:07] [PASSED] 8
[20:23:07] [PASSED] 32
[20:23:07] [PASSED] 256
[20:23:07] ==================== [PASSED] test_size ====================
[20:23:07] ======================= test_reuse ========================
[20:23:07] [PASSED] 4
[20:23:07] [PASSED] 8
[20:23:07] [PASSED] 32
[20:23:07] [PASSED] 256
[20:23:07] =================== [PASSED] test_reuse ====================
[20:23:07] =================== test_range_overlap ====================
[20:23:07] [PASSED] 4
[20:23:07] [PASSED] 8
[20:23:07] [PASSED] 32
[20:23:07] [PASSED] 256
[20:23:07] =============== [PASSED] test_range_overlap ================
[20:23:07] =================== test_range_compact ====================
[20:23:07] [PASSED] 4
[20:23:07] [PASSED] 8
[20:23:07] [PASSED] 32
[20:23:07] [PASSED] 256
[20:23:07] =============== [PASSED] test_range_compact ================
[20:23:07] ==================== test_range_spare =====================
[20:23:07] [PASSED] 4
[20:23:07] [PASSED] 8
[20:23:07] [PASSED] 32
[20:23:07] [PASSED] 256
[20:23:07] ================ [PASSED] test_range_spare =================
[20:23:07] ===================== [PASSED] guc_dbm =====================
[20:23:07] =================== guc_idm (6 subtests) ===================
[20:23:07] [PASSED] bad_init
[20:23:07] [PASSED] no_init
[20:23:07] [PASSED] init_fini
[20:23:07] [PASSED] check_used
[20:23:07] [PASSED] check_quota
[20:23:07] [PASSED] check_all
[20:23:07] ===================== [PASSED] guc_idm =====================
[20:23:07] =============== guc_klv_helpers (9 subtests) ===============
[20:23:07] [PASSED] test_count
[20:23:07] [PASSED] test_encode_u32
[20:23:07] [PASSED] test_encode_u64
[20:23:07] [PASSED] test_encode_string
[20:23:07] [PASSED] test_encode_object_raw
[20:23:07] [PASSED] test_encode_object_klv
[20:23:07] [PASSED] test_encode_object_nested
[20:23:07] [PASSED] test_encode_object_basic
[20:23:07] [PASSED] test_print
[20:23:07] ================= [PASSED] guc_klv_helpers =================
[20:23:07] ================== no_relay (3 subtests) ===================
[20:23:07] [PASSED] xe_drops_guc2pf_if_not_ready
[20:23:07] [PASSED] xe_drops_guc2vf_if_not_ready
[20:23:07] [PASSED] xe_rejects_send_if_not_ready
[20:23:07] ==================== [PASSED] no_relay =====================
[20:23:07] ================== pf_relay (14 subtests) ==================
[20:23:07] [PASSED] pf_rejects_guc2pf_too_short
[20:23:07] [PASSED] pf_rejects_guc2pf_too_long
[20:23:07] [PASSED] pf_rejects_guc2pf_no_payload
[20:23:07] [PASSED] pf_fails_no_payload
[20:23:07] [PASSED] pf_fails_bad_origin
[20:23:07] [PASSED] pf_fails_bad_type
[20:23:07] [PASSED] pf_txn_reports_error
[20:23:07] [PASSED] pf_txn_sends_pf2guc
[20:23:07] [PASSED] pf_sends_pf2guc
[20:23:07] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[20:23:07] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[20:23:07] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[20:23:07] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[20:23:07] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[20:23:07] ==================== [PASSED] pf_relay =====================
[20:23:07] ================== vf_relay (3 subtests) ===================
[20:23:07] [PASSED] vf_rejects_guc2vf_too_short
[20:23:07] [PASSED] vf_rejects_guc2vf_too_long
[20:23:07] [PASSED] vf_rejects_guc2vf_no_payload
[20:23:07] ==================== [PASSED] vf_relay =====================
[20:23:07] ================ pf_gt_config (9 subtests) =================
[20:23:07] [PASSED] fair_contexts_1vf
[20:23:07] [PASSED] fair_doorbells_1vf
[20:23:07] [PASSED] fair_ggtt_1vf
[20:23:07] ====================== fair_vram_1vf ======================
[20:23:07] [PASSED] 3.50 GiB
[20:23:07] [PASSED] 11.5 GiB
[20:23:07] [PASSED] 15.5 GiB
[20:23:07] [PASSED] 31.5 GiB
[20:23:07] [PASSED] 63.5 GiB
[20:23:07] [PASSED] 1.91 GiB
[20:23:07] ================== [PASSED] fair_vram_1vf ==================
[20:23:07] ================ fair_vram_1vf_admin_only =================
[20:23:07] [PASSED] 3.50 GiB
[20:23:07] [PASSED] 11.5 GiB
[20:23:07] [PASSED] 15.5 GiB
[20:23:07] [PASSED] 31.5 GiB
[20:23:07] [PASSED] 63.5 GiB
[20:23:07] [PASSED] 1.91 GiB
[20:23:07] ============ [PASSED] fair_vram_1vf_admin_only =============
[20:23:07] ====================== fair_contexts ======================
[20:23:07] [PASSED] 1 VF
[20:23:07] [PASSED] 2 VFs
[20:23:07] [PASSED] 3 VFs
[20:23:07] [PASSED] 4 VFs
[20:23:07] [PASSED] 5 VFs
[20:23:07] [PASSED] 6 VFs
[20:23:07] [PASSED] 7 VFs
[20:23:07] [PASSED] 8 VFs
[20:23:07] [PASSED] 9 VFs
[20:23:07] [PASSED] 10 VFs
[20:23:07] [PASSED] 11 VFs
[20:23:07] [PASSED] 12 VFs
[20:23:07] [PASSED] 13 VFs
[20:23:07] [PASSED] 14 VFs
[20:23:07] [PASSED] 15 VFs
[20:23:07] [PASSED] 16 VFs
[20:23:07] [PASSED] 17 VFs
[20:23:07] [PASSED] 18 VFs
[20:23:07] [PASSED] 19 VFs
[20:23:07] [PASSED] 20 VFs
[20:23:07] [PASSED] 21 VFs
[20:23:07] [PASSED] 22 VFs
[20:23:07] [PASSED] 23 VFs
[20:23:07] [PASSED] 24 VFs
[20:23:07] [PASSED] 25 VFs
[20:23:07] [PASSED] 26 VFs
[20:23:07] [PASSED] 27 VFs
[20:23:07] [PASSED] 28 VFs
[20:23:07] [PASSED] 29 VFs
[20:23:07] [PASSED] 30 VFs
[20:23:07] [PASSED] 31 VFs
[20:23:07] [PASSED] 32 VFs
[20:23:07] [PASSED] 33 VFs
[20:23:07] [PASSED] 34 VFs
[20:23:07] [PASSED] 35 VFs
[20:23:07] [PASSED] 36 VFs
[20:23:07] [PASSED] 37 VFs
[20:23:07] [PASSED] 38 VFs
[20:23:07] [PASSED] 39 VFs
[20:23:07] [PASSED] 40 VFs
[20:23:07] [PASSED] 41 VFs
[20:23:07] [PASSED] 42 VFs
[20:23:07] [PASSED] 43 VFs
[20:23:07] [PASSED] 44 VFs
[20:23:07] [PASSED] 45 VFs
[20:23:07] [PASSED] 46 VFs
[20:23:07] [PASSED] 47 VFs
[20:23:07] [PASSED] 48 VFs
[20:23:07] [PASSED] 49 VFs
[20:23:07] [PASSED] 50 VFs
[20:23:07] [PASSED] 51 VFs
[20:23:07] [PASSED] 52 VFs
[20:23:07] [PASSED] 53 VFs
[20:23:07] [PASSED] 54 VFs
[20:23:07] [PASSED] 55 VFs
[20:23:07] [PASSED] 56 VFs
[20:23:07] [PASSED] 57 VFs
[20:23:07] [PASSED] 58 VFs
[20:23:07] [PASSED] 59 VFs
[20:23:07] [PASSED] 60 VFs
[20:23:07] [PASSED] 61 VFs
[20:23:07] [PASSED] 62 VFs
[20:23:07] [PASSED] 63 VFs
[20:23:07] ================== [PASSED] fair_contexts ==================
[20:23:07] ===================== fair_doorbells ======================
[20:23:07] [PASSED] 1 VF
[20:23:07] [PASSED] 2 VFs
[20:23:07] [PASSED] 3 VFs
[20:23:07] [PASSED] 4 VFs
[20:23:07] [PASSED] 5 VFs
[20:23:07] [PASSED] 6 VFs
[20:23:07] [PASSED] 7 VFs
[20:23:07] [PASSED] 8 VFs
[20:23:07] [PASSED] 9 VFs
[20:23:07] [PASSED] 10 VFs
[20:23:07] [PASSED] 11 VFs
[20:23:07] [PASSED] 12 VFs
[20:23:07] [PASSED] 13 VFs
[20:23:07] [PASSED] 14 VFs
[20:23:07] [PASSED] 15 VFs
[20:23:07] [PASSED] 16 VFs
[20:23:07] [PASSED] 17 VFs
[20:23:07] [PASSED] 18 VFs
[20:23:07] [PASSED] 19 VFs
[20:23:07] [PASSED] 20 VFs
[20:23:07] [PASSED] 21 VFs
[20:23:07] [PASSED] 22 VFs
[20:23:07] [PASSED] 23 VFs
[20:23:07] [PASSED] 24 VFs
[20:23:07] [PASSED] 25 VFs
[20:23:07] [PASSED] 26 VFs
[20:23:07] [PASSED] 27 VFs
[20:23:07] [PASSED] 28 VFs
[20:23:07] [PASSED] 29 VFs
[20:23:07] [PASSED] 30 VFs
[20:23:07] [PASSED] 31 VFs
[20:23:07] [PASSED] 32 VFs
[20:23:07] [PASSED] 33 VFs
[20:23:07] [PASSED] 34 VFs
[20:23:07] [PASSED] 35 VFs
[20:23:07] [PASSED] 36 VFs
[20:23:07] [PASSED] 37 VFs
[20:23:07] [PASSED] 38 VFs
[20:23:07] [PASSED] 39 VFs
[20:23:07] [PASSED] 40 VFs
[20:23:07] [PASSED] 41 VFs
[20:23:07] [PASSED] 42 VFs
[20:23:07] [PASSED] 43 VFs
[20:23:07] [PASSED] 44 VFs
[20:23:07] [PASSED] 45 VFs
[20:23:07] [PASSED] 46 VFs
[20:23:07] [PASSED] 47 VFs
[20:23:07] [PASSED] 48 VFs
[20:23:07] [PASSED] 49 VFs
[20:23:07] [PASSED] 50 VFs
[20:23:07] [PASSED] 51 VFs
[20:23:07] [PASSED] 52 VFs
[20:23:07] [PASSED] 53 VFs
[20:23:07] [PASSED] 54 VFs
[20:23:07] [PASSED] 55 VFs
[20:23:07] [PASSED] 56 VFs
[20:23:07] [PASSED] 57 VFs
[20:23:07] [PASSED] 58 VFs
[20:23:07] [PASSED] 59 VFs
[20:23:07] [PASSED] 60 VFs
[20:23:07] [PASSED] 61 VFs
[20:23:07] [PASSED] 62 VFs
[20:23:07] [PASSED] 63 VFs
[20:23:07] ================= [PASSED] fair_doorbells ==================
[20:23:07] ======================== fair_ggtt ========================
[20:23:07] [PASSED] 1 VF
[20:23:07] [PASSED] 2 VFs
[20:23:07] [PASSED] 3 VFs
[20:23:07] [PASSED] 4 VFs
[20:23:07] [PASSED] 5 VFs
[20:23:07] [PASSED] 6 VFs
[20:23:07] [PASSED] 7 VFs
[20:23:07] [PASSED] 8 VFs
[20:23:07] [PASSED] 9 VFs
[20:23:07] [PASSED] 10 VFs
[20:23:07] [PASSED] 11 VFs
[20:23:07] [PASSED] 12 VFs
[20:23:07] [PASSED] 13 VFs
[20:23:07] [PASSED] 14 VFs
[20:23:07] [PASSED] 15 VFs
[20:23:07] [PASSED] 16 VFs
[20:23:07] [PASSED] 17 VFs
[20:23:07] [PASSED] 18 VFs
[20:23:07] [PASSED] 19 VFs
[20:23:07] [PASSED] 20 VFs
[20:23:07] [PASSED] 21 VFs
[20:23:07] [PASSED] 22 VFs
[20:23:07] [PASSED] 23 VFs
[20:23:07] [PASSED] 24 VFs
[20:23:07] [PASSED] 25 VFs
[20:23:07] [PASSED] 26 VFs
[20:23:07] [PASSED] 27 VFs
[20:23:07] [PASSED] 28 VFs
[20:23:07] [PASSED] 29 VFs
[20:23:07] [PASSED] 30 VFs
[20:23:07] [PASSED] 31 VFs
[20:23:07] [PASSED] 32 VFs
[20:23:07] [PASSED] 33 VFs
[20:23:07] [PASSED] 34 VFs
[20:23:07] [PASSED] 35 VFs
[20:23:07] [PASSED] 36 VFs
[20:23:07] [PASSED] 37 VFs
[20:23:07] [PASSED] 38 VFs
[20:23:07] [PASSED] 39 VFs
[20:23:07] [PASSED] 40 VFs
[20:23:07] [PASSED] 41 VFs
[20:23:07] [PASSED] 42 VFs
[20:23:07] [PASSED] 43 VFs
[20:23:07] [PASSED] 44 VFs
[20:23:07] [PASSED] 45 VFs
[20:23:07] [PASSED] 46 VFs
[20:23:07] [PASSED] 47 VFs
[20:23:07] [PASSED] 48 VFs
[20:23:07] [PASSED] 49 VFs
[20:23:07] [PASSED] 50 VFs
[20:23:07] [PASSED] 51 VFs
[20:23:07] [PASSED] 52 VFs
[20:23:07] [PASSED] 53 VFs
[20:23:07] [PASSED] 54 VFs
[20:23:07] [PASSED] 55 VFs
[20:23:07] [PASSED] 56 VFs
[20:23:07] [PASSED] 57 VFs
[20:23:07] [PASSED] 58 VFs
[20:23:07] [PASSED] 59 VFs
[20:23:07] [PASSED] 60 VFs
[20:23:07] [PASSED] 61 VFs
[20:23:07] [PASSED] 62 VFs
[20:23:07] [PASSED] 63 VFs
[20:23:07] ==================== [PASSED] fair_ggtt ====================
[20:23:07] ======================== fair_vram ========================
[20:23:07] [PASSED] 1 VF
[20:23:07] [PASSED] 2 VFs
[20:23:07] [PASSED] 3 VFs
[20:23:07] [PASSED] 4 VFs
[20:23:07] [PASSED] 5 VFs
[20:23:07] [PASSED] 6 VFs
[20:23:07] [PASSED] 7 VFs
[20:23:07] [PASSED] 8 VFs
[20:23:07] [PASSED] 9 VFs
[20:23:07] [PASSED] 10 VFs
[20:23:07] [PASSED] 11 VFs
[20:23:07] [PASSED] 12 VFs
[20:23:07] [PASSED] 13 VFs
[20:23:07] [PASSED] 14 VFs
[20:23:07] [PASSED] 15 VFs
[20:23:07] [PASSED] 16 VFs
[20:23:07] [PASSED] 17 VFs
[20:23:07] [PASSED] 18 VFs
[20:23:07] [PASSED] 19 VFs
[20:23:07] [PASSED] 20 VFs
[20:23:07] [PASSED] 21 VFs
[20:23:07] [PASSED] 22 VFs
[20:23:07] [PASSED] 23 VFs
[20:23:07] [PASSED] 24 VFs
[20:23:07] [PASSED] 25 VFs
[20:23:07] [PASSED] 26 VFs
[20:23:07] [PASSED] 27 VFs
[20:23:07] [PASSED] 28 VFs
[20:23:07] [PASSED] 29 VFs
[20:23:07] [PASSED] 30 VFs
[20:23:07] [PASSED] 31 VFs
[20:23:07] [PASSED] 32 VFs
[20:23:07] [PASSED] 33 VFs
[20:23:07] [PASSED] 34 VFs
[20:23:07] [PASSED] 35 VFs
[20:23:07] [PASSED] 36 VFs
[20:23:07] [PASSED] 37 VFs
[20:23:07] [PASSED] 38 VFs
[20:23:07] [PASSED] 39 VFs
[20:23:07] [PASSED] 40 VFs
[20:23:07] [PASSED] 41 VFs
[20:23:07] [PASSED] 42 VFs
[20:23:07] [PASSED] 43 VFs
[20:23:07] [PASSED] 44 VFs
[20:23:07] [PASSED] 45 VFs
[20:23:07] [PASSED] 46 VFs
[20:23:07] [PASSED] 47 VFs
[20:23:07] [PASSED] 48 VFs
[20:23:07] [PASSED] 49 VFs
[20:23:07] [PASSED] 50 VFs
[20:23:07] [PASSED] 51 VFs
[20:23:07] [PASSED] 52 VFs
[20:23:07] [PASSED] 53 VFs
[20:23:07] [PASSED] 54 VFs
[20:23:07] [PASSED] 55 VFs
[20:23:07] [PASSED] 56 VFs
[20:23:07] [PASSED] 57 VFs
[20:23:07] [PASSED] 58 VFs
[20:23:07] [PASSED] 59 VFs
[20:23:07] [PASSED] 60 VFs
[20:23:07] [PASSED] 61 VFs
[20:23:07] [PASSED] 62 VFs
[20:23:07] [PASSED] 63 VFs
[20:23:07] ==================== [PASSED] fair_vram ====================
[20:23:07] ================== [PASSED] pf_gt_config ===================
[20:23:07] ===================== lmtt (1 subtest) =====================
[20:23:07] ======================== test_ops =========================
[20:23:07] [PASSED] 2-level
[20:23:07] [PASSED] multi-level
[20:23:07] ==================== [PASSED] test_ops =====================
[20:23:07] ====================== [PASSED] lmtt =======================
[20:23:07] ================= sriov_packet (1 subtest) =================
[20:23:07] [PASSED] test_descriptor_init
[20:23:07] ================== [PASSED] sriov_packet ===================
[20:23:07] ================= pf_service (11 subtests) =================
[20:23:07] [PASSED] pf_negotiate_any
[20:23:07] [PASSED] pf_negotiate_base_match
[20:23:07] [PASSED] pf_negotiate_base_newer
[20:23:07] [PASSED] pf_negotiate_base_next
[20:23:07] [SKIPPED] pf_negotiate_base_older (no older minor)
[20:23:07] [PASSED] pf_negotiate_base_prev
[20:23:07] [PASSED] pf_negotiate_latest_match
[20:23:07] [PASSED] pf_negotiate_latest_newer
[20:23:07] [PASSED] pf_negotiate_latest_next
[20:23:07] [SKIPPED] pf_negotiate_latest_older (no older minor)
[20:23:07] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[20:23:07] =================== [PASSED] pf_service ====================
[20:23:07] ================= xe_guc_g2g (2 subtests) ==================
[20:23:07] ============== xe_live_guc_g2g_kunit_default ==============
[20:23:07] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[20:23:07] ============== xe_live_guc_g2g_kunit_allmem ===============
[20:23:07] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[20:23:07] =================== [SKIPPED] xe_guc_g2g ===================
[20:23:07] =================== xe_mocs (2 subtests) ===================
[20:23:07] ================ xe_live_mocs_kernel_kunit ================
[20:23:07] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[20:23:07] ================ xe_live_mocs_reset_kunit =================
[20:23:07] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[20:23:07] ==================== [SKIPPED] xe_mocs =====================
[20:23:07] ================= xe_migrate (2 subtests) ==================
[20:23:07] ================= xe_migrate_sanity_kunit =================
[20:23:07] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[20:23:07] ================== xe_validate_ccs_kunit ==================
[20:23:07] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[20:23:07] =================== [SKIPPED] xe_migrate ===================
[20:23:07] ================== xe_dma_buf (1 subtest) ==================
[20:23:07] ==================== xe_dma_buf_kunit =====================
[20:23:07] ================ [SKIPPED] xe_dma_buf_kunit ================
[20:23:07] =================== [SKIPPED] xe_dma_buf ===================
[20:23:07] ================= xe_bo_shrink (1 subtest) =================
[20:23:07] =================== xe_bo_shrink_kunit ====================
[20:23:07] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[20:23:07] ================== [SKIPPED] xe_bo_shrink ==================
[20:23:07] ==================== xe_bo (2 subtests) ====================
[20:23:07] ================== xe_ccs_migrate_kunit ===================
[20:23:07] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[20:23:07] ==================== xe_bo_evict_kunit ====================
[20:23:07] =============== [SKIPPED] xe_bo_evict_kunit ================
[20:23:07] ===================== [SKIPPED] xe_bo ======================
[20:23:07] ==================== args (13 subtests) ====================
[20:23:07] [PASSED] count_args_test
[20:23:07] [PASSED] call_args_example
[20:23:07] [PASSED] call_args_test
[20:23:07] [PASSED] drop_first_arg_example
[20:23:07] [PASSED] drop_first_arg_test
[20:23:07] [PASSED] first_arg_example
[20:23:07] [PASSED] first_arg_test
[20:23:07] [PASSED] last_arg_example
[20:23:07] [PASSED] last_arg_test
[20:23:07] [PASSED] pick_arg_example
[20:23:07] [PASSED] if_args_example
[20:23:07] [PASSED] if_args_test
[20:23:07] [PASSED] sep_comma_example
[20:23:07] ====================== [PASSED] args =======================
[20:23:07] =================== xe_pci (3 subtests) ====================
[20:23:07] ==================== check_graphics_ip ====================
[20:23:07] [PASSED] 12.00 Xe_LP
[20:23:07] [PASSED] 12.10 Xe_LP+
[20:23:07] [PASSED] 12.55 Xe_HPG
[20:23:07] [PASSED] 12.60 Xe_HPC
[20:23:07] [PASSED] 12.70 Xe_LPG
[20:23:07] [PASSED] 12.71 Xe_LPG
[20:23:07] [PASSED] 12.74 Xe_LPG+
[20:23:07] [PASSED] 20.01 Xe2_HPG
[20:23:07] [PASSED] 20.02 Xe2_HPG
[20:23:07] [PASSED] 20.04 Xe2_LPG
[20:23:07] [PASSED] 30.00 Xe3_LPG
[20:23:07] [PASSED] 30.01 Xe3_LPG
[20:23:07] [PASSED] 30.03 Xe3_LPG
[20:23:07] [PASSED] 30.04 Xe3_LPG
[20:23:07] [PASSED] 30.05 Xe3_LPG
[20:23:07] [PASSED] 35.10 Xe3p_LPG
[20:23:07] [PASSED] 35.11 Xe3p_XPC
[20:23:07] ================ [PASSED] check_graphics_ip ================
[20:23:07] ===================== check_media_ip ======================
[20:23:07] [PASSED] 12.00 Xe_M
[20:23:07] [PASSED] 12.55 Xe_HPM
[20:23:07] [PASSED] 13.00 Xe_LPM+
[20:23:07] [PASSED] 13.01 Xe2_HPM
[20:23:07] [PASSED] 20.00 Xe2_LPM
[20:23:07] [PASSED] 30.00 Xe3_LPM
[20:23:07] [PASSED] 30.02 Xe3_LPM
[20:23:07] [PASSED] 35.00 Xe3p_LPM
[20:23:07] [PASSED] 35.03 Xe3p_HPM
[20:23:07] ================= [PASSED] check_media_ip ==================
[20:23:07] =================== check_platform_desc ===================
[20:23:07] [PASSED] 0x9A60 (TIGERLAKE)
[20:23:07] [PASSED] 0x9A68 (TIGERLAKE)
[20:23:07] [PASSED] 0x9A70 (TIGERLAKE)
[20:23:07] [PASSED] 0x9A40 (TIGERLAKE)
[20:23:07] [PASSED] 0x9A49 (TIGERLAKE)
[20:23:07] [PASSED] 0x9A59 (TIGERLAKE)
[20:23:07] [PASSED] 0x9A78 (TIGERLAKE)
[20:23:07] [PASSED] 0x9AC0 (TIGERLAKE)
[20:23:07] [PASSED] 0x9AC9 (TIGERLAKE)
[20:23:07] [PASSED] 0x9AD9 (TIGERLAKE)
[20:23:07] [PASSED] 0x9AF8 (TIGERLAKE)
[20:23:07] [PASSED] 0x4C80 (ROCKETLAKE)
[20:23:07] [PASSED] 0x4C8A (ROCKETLAKE)
[20:23:07] [PASSED] 0x4C8B (ROCKETLAKE)
[20:23:07] [PASSED] 0x4C8C (ROCKETLAKE)
[20:23:07] [PASSED] 0x4C90 (ROCKETLAKE)
[20:23:07] [PASSED] 0x4C9A (ROCKETLAKE)
[20:23:07] [PASSED] 0x4680 (ALDERLAKE_S)
[20:23:07] [PASSED] 0x4682 (ALDERLAKE_S)
[20:23:07] [PASSED] 0x4688 (ALDERLAKE_S)
[20:23:07] [PASSED] 0x468A (ALDERLAKE_S)
[20:23:07] [PASSED] 0x468B (ALDERLAKE_S)
[20:23:07] [PASSED] 0x4690 (ALDERLAKE_S)
[20:23:07] [PASSED] 0x4692 (ALDERLAKE_S)
[20:23:07] [PASSED] 0x4693 (ALDERLAKE_S)
[20:23:07] [PASSED] 0x46A0 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46A1 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46A2 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46A3 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46A6 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46A8 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46AA (ALDERLAKE_P)
[20:23:07] [PASSED] 0x462A (ALDERLAKE_P)
[20:23:07] [PASSED] 0x4626 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x4628 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46B0 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46B1 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46B2 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46B3 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46C0 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46C1 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46C2 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46C3 (ALDERLAKE_P)
[20:23:07] [PASSED] 0x46D0 (ALDERLAKE_N)
[20:23:07] [PASSED] 0x46D1 (ALDERLAKE_N)
[20:23:07] [PASSED] 0x46D2 (ALDERLAKE_N)
[20:23:07] [PASSED] 0x46D3 (ALDERLAKE_N)
[20:23:07] [PASSED] 0x46D4 (ALDERLAKE_N)
[20:23:07] [PASSED] 0xA721 (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7A1 (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7A9 (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7AC (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7AD (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA720 (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7A0 (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7A8 (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7AA (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA7AB (ALDERLAKE_P)
[20:23:07] [PASSED] 0xA780 (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA781 (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA782 (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA783 (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA788 (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA789 (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA78A (ALDERLAKE_S)
[20:23:07] [PASSED] 0xA78B (ALDERLAKE_S)
[20:23:07] [PASSED] 0x4905 (DG1)
[20:23:07] [PASSED] 0x4906 (DG1)
[20:23:07] [PASSED] 0x4907 (DG1)
[20:23:07] [PASSED] 0x4908 (DG1)
[20:23:07] [PASSED] 0x4909 (DG1)
[20:23:07] [PASSED] 0x56C0 (DG2)
[20:23:07] [PASSED] 0x56C2 (DG2)
[20:23:07] [PASSED] 0x56C1 (DG2)
[20:23:07] [PASSED] 0x7D51 (METEORLAKE)
[20:23:07] [PASSED] 0x7DD1 (METEORLAKE)
[20:23:07] [PASSED] 0x7D41 (METEORLAKE)
[20:23:07] [PASSED] 0x7D67 (METEORLAKE)
[20:23:07] [PASSED] 0xB640 (METEORLAKE)
[20:23:07] [PASSED] 0x56A0 (DG2)
[20:23:07] [PASSED] 0x56A1 (DG2)
[20:23:07] [PASSED] 0x56A2 (DG2)
[20:23:07] [PASSED] 0x56BE (DG2)
[20:23:07] [PASSED] 0x56BF (DG2)
[20:23:07] [PASSED] 0x5690 (DG2)
[20:23:07] [PASSED] 0x5691 (DG2)
[20:23:07] [PASSED] 0x5692 (DG2)
[20:23:07] [PASSED] 0x56A5 (DG2)
[20:23:07] [PASSED] 0x56A6 (DG2)
[20:23:07] [PASSED] 0x56B0 (DG2)
[20:23:07] [PASSED] 0x56B1 (DG2)
[20:23:07] [PASSED] 0x56BA (DG2)
[20:23:07] [PASSED] 0x56BB (DG2)
[20:23:07] [PASSED] 0x56BC (DG2)
[20:23:07] [PASSED] 0x56BD (DG2)
[20:23:07] [PASSED] 0x5693 (DG2)
[20:23:07] [PASSED] 0x5694 (DG2)
[20:23:07] [PASSED] 0x5695 (DG2)
[20:23:07] [PASSED] 0x56A3 (DG2)
[20:23:07] [PASSED] 0x56A4 (DG2)
[20:23:07] [PASSED] 0x56B2 (DG2)
[20:23:07] [PASSED] 0x56B3 (DG2)
[20:23:07] [PASSED] 0x5696 (DG2)
[20:23:07] [PASSED] 0x5697 (DG2)
[20:23:07] [PASSED] 0xB69 (PVC)
[20:23:07] [PASSED] 0xB6E (PVC)
[20:23:07] [PASSED] 0xBD4 (PVC)
[20:23:07] [PASSED] 0xBD5 (PVC)
[20:23:07] [PASSED] 0xBD6 (PVC)
[20:23:07] [PASSED] 0xBD7 (PVC)
[20:23:07] [PASSED] 0xBD8 (PVC)
[20:23:07] [PASSED] 0xBD9 (PVC)
[20:23:07] [PASSED] 0xBDA (PVC)
[20:23:07] [PASSED] 0xBDB (PVC)
[20:23:07] [PASSED] 0xBE0 (PVC)
[20:23:07] [PASSED] 0xBE1 (PVC)
[20:23:07] [PASSED] 0xBE5 (PVC)
[20:23:07] [PASSED] 0x7D40 (METEORLAKE)
[20:23:07] [PASSED] 0x7D45 (METEORLAKE)
[20:23:07] [PASSED] 0x7D55 (METEORLAKE)
[20:23:07] [PASSED] 0x7D60 (METEORLAKE)
[20:23:07] [PASSED] 0x7DD5 (METEORLAKE)
[20:23:07] [PASSED] 0x6420 (LUNARLAKE)
[20:23:07] [PASSED] 0x64A0 (LUNARLAKE)
[20:23:07] [PASSED] 0x64B0 (LUNARLAKE)
[20:23:07] [PASSED] 0xE202 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE209 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE20B (BATTLEMAGE)
[20:23:07] [PASSED] 0xE20C (BATTLEMAGE)
[20:23:07] [PASSED] 0xE20D (BATTLEMAGE)
[20:23:07] [PASSED] 0xE210 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE211 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE212 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE216 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE220 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE221 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE222 (BATTLEMAGE)
[20:23:07] [PASSED] 0xE223 (BATTLEMAGE)
[20:23:07] [PASSED] 0xB080 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB081 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB082 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB083 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB084 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB085 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB086 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB087 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB08F (PANTHERLAKE)
[20:23:07] [PASSED] 0xB090 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB0A0 (PANTHERLAKE)
[20:23:07] [PASSED] 0xB0B0 (PANTHERLAKE)
[20:23:07] [PASSED] 0xFD80 (PANTHERLAKE)
[20:23:07] [PASSED] 0xFD81 (PANTHERLAKE)
[20:23:07] [PASSED] 0xD740 (NOVALAKE_S)
[20:23:07] [PASSED] 0xD741 (NOVALAKE_S)
[20:23:07] [PASSED] 0xD742 (NOVALAKE_S)
[20:23:07] [PASSED] 0xD743 (NOVALAKE_S)
[20:23:07] [PASSED] 0xD745 (NOVALAKE_S)
[20:23:07] [PASSED] 0xD74A (NOVALAKE_S)
[20:23:07] [PASSED] 0xD74B (NOVALAKE_S)
[20:23:07] [PASSED] 0x674C (CRESCENTISLAND)
[20:23:07] [PASSED] 0x674D (CRESCENTISLAND)
[20:23:07] [PASSED] 0x674E (CRESCENTISLAND)
[20:23:07] [PASSED] 0x674F (CRESCENTISLAND)
[20:23:07] [PASSED] 0x6750 (CRESCENTISLAND)
[20:23:07] [PASSED] 0xD750 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD751 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD752 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD753 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD754 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD755 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD756 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD757 (NOVALAKE_P)
[20:23:07] [PASSED] 0xD75F (NOVALAKE_P)
[20:23:07] =============== [PASSED] check_platform_desc ===============
[20:23:07] ===================== [PASSED] xe_pci ======================
[20:23:07] ============= xe_rtp_tables_test (5 subtests) ==============
[20:23:07] ================== xe_rtp_table_gt_test ===================
[20:23:07] [PASSED] gt_was/14011060649
[20:23:07] [PASSED] gt_was/14011059788
[20:23:07] [PASSED] gt_was/14015795083
[20:23:07] [PASSED] gt_was/16021867713
[20:23:07] [PASSED] gt_was/14019449301
[20:23:07] [PASSED] gt_was/16028005424
[20:23:07] [PASSED] gt_was/14026578760
[20:23:07] [PASSED] gt_was/1409420604
[20:23:07] [PASSED] gt_was/1408615072
[20:23:07] [PASSED] gt_was/22010523718
[20:23:07] [PASSED] gt_was/14011006942
[20:23:07] [PASSED] gt_was/14014830051
[20:23:07] [PASSED] gt_was/18018781329
[20:23:07] [PASSED] gt_was/1509235366
[20:23:07] [PASSED] gt_was/18018781329
[20:23:07] [PASSED] gt_was/16016694945
[20:23:07] [PASSED] gt_was/14018575942
[20:23:07] [PASSED] gt_was/22016670082
[20:23:07] [PASSED] gt_was/22016670082
[20:23:07] [PASSED] gt_was/14017421178
[20:23:07] [PASSED] gt_was/16025250150
[20:23:07] [PASSED] gt_was/14021871409
[20:23:07] [PASSED] gt_was/16021865536
[20:23:07] [PASSED] gt_was/14021486841
[20:23:07] [PASSED] gt_was/14025160223
[20:23:07] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[20:23:07] [PASSED] gt_was/14025635424
[20:23:07] [PASSED] gt_was/16028005424
[20:23:07] ============== [PASSED] xe_rtp_table_gt_test ===============
[20:23:07] ================== xe_rtp_table_gt_test ===================
[20:23:07] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[20:23:07] [PASSED] gt_tunings/Tuning: 32B Access Enable
[20:23:07] [PASSED] gt_tunings/Tuning: L3 cache
[20:23:07] [PASSED] gt_tunings/Tuning: L3 cache - media
[20:23:07] [PASSED] gt_tunings/Tuning: Compression Overfetch
[20:23:07] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[20:23:07] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[20:23:07] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[20:23:07] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[20:23:07] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[20:23:07] [PASSED] gt_tunings/Tuning: Stateless compression control
[20:23:07] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[20:23:07] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[20:23:07] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[20:23:07] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[20:23:07] ============== [PASSED] xe_rtp_table_gt_test ===============
[20:23:07] ================== xe_rtp_table_oob_test ==================
[20:23:07] [PASSED] oob_was/1607983814
[20:23:07] [PASSED] oob_was/16010904313
[20:23:07] [PASSED] oob_was/18022495364
[20:23:07] [PASSED] oob_was/22012773006
[20:23:07] [PASSED] oob_was/14014475959
[20:23:07] [PASSED] oob_was/22011391025
[20:23:07] [PASSED] oob_was/22012727170
[20:23:07] [PASSED] oob_was/22012727685
[20:23:07] [PASSED] oob_was/22016596838
[20:23:07] [PASSED] oob_was/18020744125
[20:23:07] [PASSED] oob_was/1409600907
[20:23:07] [PASSED] oob_was/22014953428
[20:23:07] [PASSED] oob_was/16017236439
[20:23:07] [PASSED] oob_was/14019821291
[20:23:07] [PASSED] oob_was/14015076503
[20:23:07] [PASSED] oob_was/14018913170
[20:23:07] [PASSED] oob_was/14018094691
[20:23:07] [PASSED] oob_was/18024947630
[20:23:07] [PASSED] oob_was/16022287689
[20:23:07] [PASSED] oob_was/13011645652
[20:23:07] [PASSED] oob_was/14022293748
[20:23:07] [PASSED] oob_was/22019794406
[20:23:07] [PASSED] oob_was/22019338487
[20:23:07] [PASSED] oob_was/16023588340
[20:23:07] [PASSED] oob_was/14019789679
[20:23:07] [PASSED] oob_was/14022866841
[20:23:07] [PASSED] oob_was/16021333562
[20:23:07] [PASSED] oob_was/14016712196
[20:23:07] [PASSED] oob_was/14015568240
[20:23:07] [PASSED] oob_was/18013179988
[20:23:07] [PASSED] oob_was/1508761755
[20:23:07] [PASSED] oob_was/16023105232
[20:23:07] [PASSED] oob_was/16026508708
[20:23:07] [PASSED] oob_was/14020001231
[20:23:07] [PASSED] oob_was/16023683509
[20:23:07] [PASSED] oob_was/14025515070
[20:23:07] [PASSED] oob_was/15015404425_disable
[20:23:07] [PASSED] oob_was/16026007364
[20:23:07] [PASSED] oob_was/14020316580
[20:23:07] [PASSED] oob_was/14025883347
[20:23:07] [PASSED] oob_was/16029380221
[20:23:07] [PASSED] oob_was/22022079272
[20:23:07] [PASSED] oob_was/16029897822
[20:23:07] [PASSED] oob_was/14027054324
[20:23:07] ============== [PASSED] xe_rtp_table_oob_test ==============
[20:23:07] ================ xe_rtp_table_dev_oob_test ================
[20:23:07] [PASSED] device_oob_was/22010954014
[20:23:07] [PASSED] device_oob_was/15015404425
[20:23:07] [PASSED] device_oob_was/22019338487_display
[20:23:07] [PASSED] device_oob_was/14022085890
[20:23:07] [PASSED] device_oob_was/14026539277
[20:23:07] [PASSED] device_oob_was/14026633728
[20:23:07] [PASSED] device_oob_was/14026746987
[20:23:07] [PASSED] device_oob_was/14026779378
[20:23:07] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[20:23:07] ========== xe_rtp_table_missing_upper_bound_test ==========
[20:23:07] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[20:23:07] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[20:23:07] [PASSED] register_whitelist/1806527549
[20:23:07] [PASSED] register_whitelist/allow_read_ctx_timestamp
[20:23:07] [PASSED] register_whitelist/allow_read_queue_timestamp
[20:23:07] [PASSED] register_whitelist/16014440446
[20:23:07] [PASSED] register_whitelist/16017236439
[20:23:07] [PASSED] register_whitelist/16020183090
[20:23:07] [PASSED] register_whitelist/14024997852
[20:23:07] [PASSED] register_whitelist/14024997852
[20:23:07] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[20:23:07] =============== [PASSED] xe_rtp_tables_test ================
[20:23:07] =================== xe_rtp (3 subtests) ====================
[20:23:07] =================== xe_rtp_rules_tests ====================
[20:23:07] [PASSED] no
[20:23:07] [PASSED] yes
[20:23:07] [PASSED] no-and-no
[20:23:07] [PASSED] no-and-yes
[20:23:07] [PASSED] yes-and-no
[20:23:07] [PASSED] yes-and-yes
[20:23:07] [PASSED] no-or-no
[20:23:07] [PASSED] no-or-yes
[20:23:07] [PASSED] yes-or-no
[20:23:07] [PASSED] yes-or-yes
[20:23:07] [PASSED] no-yes-or-yes-no
[20:23:07] [PASSED] no-yes-or-yes-yes
[20:23:07] [PASSED] yes-yes-or-no-yes
[20:23:07] [PASSED] yes-yes-or-yes-yes
[20:23:07] [PASSED] no-no-or-yes-or-no
[20:23:07] [PASSED] or
[20:23:07] [PASSED] or-yes
[20:23:07] [PASSED] or-no
[20:23:07] [PASSED] yes-or
[20:23:07] [PASSED] no-or
[20:23:07] [PASSED] no-or-or-yes
[20:23:07] [PASSED] yes-or-or-no
[20:23:07] [PASSED] no-or-or-no
[20:23:07] [PASSED] missing-context-engine-class
[20:23:07] [PASSED] missing-context-engine-class-or-yes
[20:23:07] [PASSED] missing-context-engine-class-or-or-yes
[20:23:07] =============== [PASSED] xe_rtp_rules_tests ================
[20:23:07] =============== xe_rtp_process_to_sr_tests ================
[20:23:07] [PASSED] coalesce-same-reg
[20:23:07] [PASSED] coalesce-same-reg-literal-and-func
[20:23:07] [PASSED] no-match-no-add
[20:23:07] [PASSED] two-regs-two-entries
[20:23:07] [PASSED] clr-one-set-other
[20:23:07] [PASSED] set-field
[20:23:07] [PASSED] conflict-duplicate
[20:23:07] [PASSED] conflict-not-disjoint
[20:23:07] [PASSED] conflict-not-disjoint-literal-and-func
[20:23:07] [PASSED] conflict-reg-type
[20:23:07] [PASSED] bad-mcr-reg-forced-to-regular
[20:23:07] [PASSED] bad-regular-reg-forced-to-mcr
[20:23:07] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[20:23:07] ================== xe_rtp_process_tests ===================
[20:23:07] [PASSED] active1
[20:23:07] [PASSED] active2
[20:23:07] [PASSED] active-inactive
[20:23:07] [PASSED] inactive-active
[20:23:07] [PASSED] inactive-active-inactive
[20:23:07] [PASSED] inactive-inactive-inactive
[20:23:07] ============== [PASSED] xe_rtp_process_tests ===============
[20:23:07] ===================== [PASSED] xe_rtp ======================
[20:23:07] ==================== xe_wa (1 subtest) =====================
[20:23:07] ======================== xe_wa_gt =========================
[20:23:07] [PASSED] TIGERLAKE B0
[20:23:07] [PASSED] DG1 A0
[20:23:07] [PASSED] DG1 B0
[20:23:07] [PASSED] ALDERLAKE_S A0
[20:23:07] [PASSED] ALDERLAKE_S B0
[20:23:07] [PASSED] ALDERLAKE_S C0
[20:23:07] [PASSED] ALDERLAKE_S D0
[20:23:07] [PASSED] ALDERLAKE_P A0
[20:23:07] [PASSED] ALDERLAKE_P B0
[20:23:07] [PASSED] ALDERLAKE_P C0
[20:23:07] [PASSED] ALDERLAKE_S RPLS D0
[20:23:07] [PASSED] ALDERLAKE_P RPLU E0
[20:23:07] [PASSED] DG2 G10 C0
[20:23:07] [PASSED] DG2 G11 B1
[20:23:07] [PASSED] DG2 G12 A1
[20:23:07] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[20:23:07] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[20:23:07] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[20:23:07] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[20:23:07] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[20:23:07] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[20:23:07] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[20:23:07] ==================== [PASSED] xe_wa_gt =====================
[20:23:07] ====================== [PASSED] xe_wa ======================
[20:23:07] ============================================================
[20:23:07] Testing complete. Ran 742 tests: passed: 724, skipped: 18
[20:23:07] Elapsed time: 35.584s total, 1.704s configuring, 33.215s building, 0.634s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[20:23:07] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:23:09] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[20:23:34] Starting KUnit Kernel (1/1)...
[20:23:34] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:23:34] ============ drm_test_pick_cmdline (2 subtests) ============
[20:23:34] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[20:23:34] =============== drm_test_pick_cmdline_named ===============
[20:23:34] [PASSED] NTSC
[20:23:34] [PASSED] NTSC-J
[20:23:34] [PASSED] PAL
[20:23:34] [PASSED] PAL-M
[20:23:34] =========== [PASSED] drm_test_pick_cmdline_named ===========
[20:23:34] ============== [PASSED] drm_test_pick_cmdline ==============
[20:23:34] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[20:23:34] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[20:23:34] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[20:23:34] =========== drm_validate_clone_mode (2 subtests) ===========
[20:23:34] ============== drm_test_check_in_clone_mode ===============
[20:23:34] [PASSED] in_clone_mode
[20:23:34] [PASSED] not_in_clone_mode
[20:23:34] ========== [PASSED] drm_test_check_in_clone_mode ===========
[20:23:34] =============== drm_test_check_valid_clones ===============
[20:23:34] [PASSED] not_in_clone_mode
[20:23:34] [PASSED] valid_clone
[20:23:34] [PASSED] invalid_clone
[20:23:34] =========== [PASSED] drm_test_check_valid_clones ===========
[20:23:34] ============= [PASSED] drm_validate_clone_mode =============
[20:23:34] ============= drm_validate_modeset (1 subtest) =============
[20:23:34] [PASSED] drm_test_check_connector_changed_modeset
[20:23:34] ============== [PASSED] drm_validate_modeset ===============
[20:23:34] ====== drm_test_bridge_get_current_state (1 subtest) =======
[20:23:34] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[20:23:34] ======== [PASSED] drm_test_bridge_get_current_state ========
[20:23:34] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[20:23:34] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[20:23:34] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[20:23:34] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[20:23:34] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[20:23:34] ============== drm_bridge_alloc (2 subtests) ===============
[20:23:34] [PASSED] drm_test_drm_bridge_alloc_basic
[20:23:34] [PASSED] drm_test_drm_bridge_alloc_get_put
[20:23:34] ================ [PASSED] drm_bridge_alloc =================
[20:23:34] ============= drm_bridge_bus_fmt (5 subtests) ==============
[20:23:34] [PASSED] drm_test_bridge_rgb_yuv_rgb
[20:23:34] [PASSED] drm_test_bridge_must_convert_to_yuv444
[20:23:34] [PASSED] drm_test_bridge_hdmi_auto_rgb
[20:23:34] [PASSED] drm_test_bridge_auto_first
[20:23:34] [PASSED] drm_test_bridge_rgb_yuv_no_path
[20:23:34] =============== [PASSED] drm_bridge_bus_fmt ================
[20:23:34] ============= drm_cmdline_parser (40 subtests) =============
[20:23:34] [PASSED] drm_test_cmdline_force_d_only
[20:23:34] [PASSED] drm_test_cmdline_force_D_only_dvi
[20:23:34] [PASSED] drm_test_cmdline_force_D_only_hdmi
[20:23:34] [PASSED] drm_test_cmdline_force_D_only_not_digital
[20:23:34] [PASSED] drm_test_cmdline_force_e_only
[20:23:34] [PASSED] drm_test_cmdline_res
[20:23:34] [PASSED] drm_test_cmdline_res_vesa
[20:23:34] [PASSED] drm_test_cmdline_res_vesa_rblank
[20:23:34] [PASSED] drm_test_cmdline_res_rblank
[20:23:34] [PASSED] drm_test_cmdline_res_bpp
[20:23:34] [PASSED] drm_test_cmdline_res_refresh
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[20:23:34] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[20:23:34] [PASSED] drm_test_cmdline_res_margins_force_on
[20:23:34] [PASSED] drm_test_cmdline_res_vesa_margins
[20:23:34] [PASSED] drm_test_cmdline_name
[20:23:34] [PASSED] drm_test_cmdline_name_bpp
[20:23:34] [PASSED] drm_test_cmdline_name_option
[20:23:34] [PASSED] drm_test_cmdline_name_bpp_option
[20:23:34] [PASSED] drm_test_cmdline_rotate_0
[20:23:34] [PASSED] drm_test_cmdline_rotate_90
[20:23:34] [PASSED] drm_test_cmdline_rotate_180
[20:23:34] [PASSED] drm_test_cmdline_rotate_270
[20:23:34] [PASSED] drm_test_cmdline_hmirror
[20:23:34] [PASSED] drm_test_cmdline_vmirror
[20:23:34] [PASSED] drm_test_cmdline_margin_options
[20:23:34] [PASSED] drm_test_cmdline_multiple_options
[20:23:34] [PASSED] drm_test_cmdline_bpp_extra_and_option
[20:23:34] [PASSED] drm_test_cmdline_extra_and_option
[20:23:34] [PASSED] drm_test_cmdline_freestanding_options
[20:23:34] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[20:23:34] [PASSED] drm_test_cmdline_panel_orientation
[20:23:34] ================ drm_test_cmdline_invalid =================
[20:23:34] [PASSED] margin_only
[20:23:34] [PASSED] interlace_only
[20:23:34] [PASSED] res_missing_x
[20:23:34] [PASSED] res_missing_y
[20:23:34] [PASSED] res_bad_y
[20:23:34] [PASSED] res_missing_y_bpp
[20:23:34] [PASSED] res_bad_bpp
[20:23:34] [PASSED] res_bad_refresh
[20:23:34] [PASSED] res_bpp_refresh_force_on_off
[20:23:34] [PASSED] res_invalid_mode
[20:23:34] [PASSED] res_bpp_wrong_place_mode
[20:23:34] [PASSED] name_bpp_refresh
[20:23:34] [PASSED] name_refresh
[20:23:34] [PASSED] name_refresh_wrong_mode
[20:23:34] [PASSED] name_refresh_invalid_mode
[20:23:34] [PASSED] rotate_multiple
[20:23:34] [PASSED] rotate_invalid_val
[20:23:34] [PASSED] rotate_truncated
[20:23:34] [PASSED] invalid_option
[20:23:34] [PASSED] invalid_tv_option
[20:23:34] [PASSED] truncated_tv_option
[20:23:34] ============ [PASSED] drm_test_cmdline_invalid =============
[20:23:34] =============== drm_test_cmdline_tv_options ===============
[20:23:34] [PASSED] NTSC
[20:23:34] [PASSED] NTSC_443
[20:23:34] [PASSED] NTSC_J
[20:23:34] [PASSED] PAL
[20:23:34] [PASSED] PAL_M
[20:23:34] [PASSED] PAL_N
[20:23:34] [PASSED] SECAM
[20:23:34] [PASSED] MONO_525
[20:23:34] [PASSED] MONO_625
[20:23:34] =========== [PASSED] drm_test_cmdline_tv_options ===========
[20:23:34] =============== [PASSED] drm_cmdline_parser ================
[20:23:34] ========== drmm_connector_hdmi_init (20 subtests) ==========
[20:23:34] [PASSED] drm_test_connector_hdmi_init_valid
[20:23:34] [PASSED] drm_test_connector_hdmi_init_bpc_8
[20:23:34] [PASSED] drm_test_connector_hdmi_init_bpc_10
[20:23:34] [PASSED] drm_test_connector_hdmi_init_bpc_12
[20:23:34] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[20:23:34] [PASSED] drm_test_connector_hdmi_init_bpc_null
[20:23:34] [PASSED] drm_test_connector_hdmi_init_formats_empty
[20:23:34] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[20:23:34] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[20:23:34] [PASSED] supported_formats=0x9 yuv420_allowed=1
[20:23:34] [PASSED] supported_formats=0x9 yuv420_allowed=0
[20:23:34] [PASSED] supported_formats=0x5 yuv420_allowed=1
[20:23:34] [PASSED] supported_formats=0x5 yuv420_allowed=0
[20:23:34] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[20:23:34] [PASSED] drm_test_connector_hdmi_init_null_ddc
[20:23:34] [PASSED] drm_test_connector_hdmi_init_null_product
[20:23:34] [PASSED] drm_test_connector_hdmi_init_null_vendor
[20:23:34] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[20:23:34] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[20:23:34] [PASSED] drm_test_connector_hdmi_init_product_valid
[20:23:34] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[20:23:34] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[20:23:34] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[20:23:34] ========= drm_test_connector_hdmi_init_type_valid =========
[20:23:34] [PASSED] HDMI-A
[20:23:34] [PASSED] HDMI-B
[20:23:34] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[20:23:34] ======== drm_test_connector_hdmi_init_type_invalid ========
[20:23:34] [PASSED] Unknown
[20:23:34] [PASSED] VGA
[20:23:34] [PASSED] DVI-I
[20:23:34] [PASSED] DVI-D
[20:23:34] [PASSED] DVI-A
[20:23:34] [PASSED] Composite
[20:23:34] [PASSED] SVIDEO
[20:23:34] [PASSED] LVDS
[20:23:34] [PASSED] Component
[20:23:34] [PASSED] DIN
[20:23:34] [PASSED] DP
[20:23:34] [PASSED] TV
[20:23:34] [PASSED] eDP
[20:23:34] [PASSED] Virtual
[20:23:34] [PASSED] DSI
[20:23:34] [PASSED] DPI
[20:23:34] [PASSED] Writeback
[20:23:34] [PASSED] SPI
[20:23:34] [PASSED] USB
[20:23:34] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[20:23:34] ============ [PASSED] drmm_connector_hdmi_init =============
[20:23:34] ============= drmm_connector_init (3 subtests) =============
[20:23:34] [PASSED] drm_test_drmm_connector_init
[20:23:34] [PASSED] drm_test_drmm_connector_init_null_ddc
[20:23:34] ========= drm_test_drmm_connector_init_type_valid =========
[20:23:34] [PASSED] Unknown
[20:23:34] [PASSED] VGA
[20:23:34] [PASSED] DVI-I
[20:23:34] [PASSED] DVI-D
[20:23:34] [PASSED] DVI-A
[20:23:34] [PASSED] Composite
[20:23:34] [PASSED] SVIDEO
[20:23:34] [PASSED] LVDS
[20:23:34] [PASSED] Component
[20:23:34] [PASSED] DIN
[20:23:34] [PASSED] DP
[20:23:34] [PASSED] HDMI-A
[20:23:34] [PASSED] HDMI-B
[20:23:34] [PASSED] TV
[20:23:34] [PASSED] eDP
[20:23:34] [PASSED] Virtual
[20:23:34] [PASSED] DSI
[20:23:34] [PASSED] DPI
[20:23:34] [PASSED] Writeback
[20:23:34] [PASSED] SPI
[20:23:34] [PASSED] USB
[20:23:34] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[20:23:34] =============== [PASSED] drmm_connector_init ===============
[20:23:34] ========= drm_connector_dynamic_init (6 subtests) ==========
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_init
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_init_properties
[20:23:34] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[20:23:34] [PASSED] Unknown
[20:23:34] [PASSED] VGA
[20:23:34] [PASSED] DVI-I
[20:23:34] [PASSED] DVI-D
[20:23:34] [PASSED] DVI-A
[20:23:34] [PASSED] Composite
[20:23:34] [PASSED] SVIDEO
[20:23:34] [PASSED] LVDS
[20:23:34] [PASSED] Component
[20:23:34] [PASSED] DIN
[20:23:34] [PASSED] DP
[20:23:34] [PASSED] HDMI-A
[20:23:34] [PASSED] HDMI-B
[20:23:34] [PASSED] TV
[20:23:34] [PASSED] eDP
[20:23:34] [PASSED] Virtual
[20:23:34] [PASSED] DSI
[20:23:34] [PASSED] DPI
[20:23:34] [PASSED] Writeback
[20:23:34] [PASSED] SPI
[20:23:34] [PASSED] USB
[20:23:34] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[20:23:34] ======== drm_test_drm_connector_dynamic_init_name =========
[20:23:34] [PASSED] Unknown
[20:23:34] [PASSED] VGA
[20:23:34] [PASSED] DVI-I
[20:23:34] [PASSED] DVI-D
[20:23:34] [PASSED] DVI-A
[20:23:34] [PASSED] Composite
[20:23:34] [PASSED] SVIDEO
[20:23:34] [PASSED] LVDS
[20:23:34] [PASSED] Component
[20:23:34] [PASSED] DIN
[20:23:34] [PASSED] DP
[20:23:34] [PASSED] HDMI-A
[20:23:34] [PASSED] HDMI-B
[20:23:34] [PASSED] TV
[20:23:34] [PASSED] eDP
[20:23:34] [PASSED] Virtual
[20:23:34] [PASSED] DSI
[20:23:34] [PASSED] DPI
[20:23:34] [PASSED] Writeback
[20:23:34] [PASSED] SPI
[20:23:34] [PASSED] USB
[20:23:34] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[20:23:34] =========== [PASSED] drm_connector_dynamic_init ============
[20:23:34] ==== drm_connector_dynamic_register_early (4 subtests) =====
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[20:23:34] ====== [PASSED] drm_connector_dynamic_register_early =======
[20:23:34] ======= drm_connector_dynamic_register (7 subtests) ========
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[20:23:34] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[20:23:34] ========= [PASSED] drm_connector_dynamic_register ==========
[20:23:34] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[20:23:34] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[20:23:34] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[20:23:34] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[20:23:34] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[20:23:34] ========== drm_test_get_tv_mode_from_name_valid ===========
[20:23:34] [PASSED] NTSC
[20:23:34] [PASSED] NTSC-443
[20:23:34] [PASSED] NTSC-J
[20:23:34] [PASSED] PAL
[20:23:34] [PASSED] PAL-M
[20:23:34] [PASSED] PAL-N
[20:23:34] [PASSED] SECAM
[20:23:34] [PASSED] Mono
[20:23:34] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[20:23:34] [PASSED] drm_test_get_tv_mode_from_name_truncated
[20:23:34] ============ [PASSED] drm_get_tv_mode_from_name ============
[20:23:34] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[20:23:34] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[20:23:34] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[20:23:34] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[20:23:34] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[20:23:34] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[20:23:34] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[20:23:34] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[20:23:34] [PASSED] VIC 96
[20:23:34] [PASSED] VIC 97
[20:23:34] [PASSED] VIC 101
[20:23:34] [PASSED] VIC 102
[20:23:34] [PASSED] VIC 106
[20:23:34] [PASSED] VIC 107
[20:23:34] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[20:23:34] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[20:23:34] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[20:23:34] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[20:23:34] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[20:23:34] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[20:23:34] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[20:23:34] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[20:23:34] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[20:23:34] [PASSED] Automatic
[20:23:34] [PASSED] Full
[20:23:34] [PASSED] Limited 16:235
[20:23:34] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[20:23:34] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[20:23:34] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[20:23:34] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[20:23:34] === drm_test_drm_hdmi_connector_get_output_format_name ====
[20:23:34] [PASSED] RGB
[20:23:34] [PASSED] YUV 4:2:0
[20:23:34] [PASSED] YUV 4:2:2
[20:23:34] [PASSED] YUV 4:4:4
[20:23:34] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[20:23:34] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[20:23:34] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[20:23:34] ============= drm_damage_helper (21 subtests) ==============
[20:23:34] [PASSED] drm_test_damage_iter_no_damage
[20:23:34] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[20:23:34] [PASSED] drm_test_damage_iter_no_damage_src_moved
[20:23:34] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[20:23:34] [PASSED] drm_test_damage_iter_no_damage_not_visible
[20:23:34] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[20:23:34] [PASSED] drm_test_damage_iter_no_damage_no_fb
[20:23:34] [PASSED] drm_test_damage_iter_simple_damage
[20:23:34] [PASSED] drm_test_damage_iter_single_damage
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_outside_src
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_src_moved
[20:23:34] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[20:23:34] [PASSED] drm_test_damage_iter_damage
[20:23:34] [PASSED] drm_test_damage_iter_damage_one_intersect
[20:23:34] [PASSED] drm_test_damage_iter_damage_one_outside
[20:23:34] [PASSED] drm_test_damage_iter_damage_src_moved
[20:23:34] [PASSED] drm_test_damage_iter_damage_not_visible
[20:23:34] ================ [PASSED] drm_damage_helper ================
[20:23:34] ============== drm_dp_mst_helper (3 subtests) ==============
[20:23:34] ============== drm_test_dp_mst_calc_pbn_mode ==============
[20:23:34] [PASSED] Clock 154000 BPP 30 DSC disabled
[20:23:34] [PASSED] Clock 234000 BPP 30 DSC disabled
[20:23:34] [PASSED] Clock 297000 BPP 24 DSC disabled
[20:23:34] [PASSED] Clock 332880 BPP 24 DSC enabled
[20:23:34] [PASSED] Clock 324540 BPP 24 DSC enabled
[20:23:34] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[20:23:34] ============== drm_test_dp_mst_calc_pbn_div ===============
[20:23:34] [PASSED] Link rate 2000000 lane count 4
[20:23:34] [PASSED] Link rate 2000000 lane count 2
[20:23:34] [PASSED] Link rate 2000000 lane count 1
[20:23:34] [PASSED] Link rate 1350000 lane count 4
[20:23:34] [PASSED] Link rate 1350000 lane count 2
[20:23:34] [PASSED] Link rate 1350000 lane count 1
[20:23:34] [PASSED] Link rate 1000000 lane count 4
[20:23:34] [PASSED] Link rate 1000000 lane count 2
[20:23:34] [PASSED] Link rate 1000000 lane count 1
[20:23:34] [PASSED] Link rate 810000 lane count 4
[20:23:34] [PASSED] Link rate 810000 lane count 2
[20:23:34] [PASSED] Link rate 810000 lane count 1
[20:23:34] [PASSED] Link rate 540000 lane count 4
[20:23:34] [PASSED] Link rate 540000 lane count 2
[20:23:34] [PASSED] Link rate 540000 lane count 1
[20:23:34] [PASSED] Link rate 270000 lane count 4
[20:23:34] [PASSED] Link rate 270000 lane count 2
[20:23:34] [PASSED] Link rate 270000 lane count 1
[20:23:34] [PASSED] Link rate 162000 lane count 4
[20:23:34] [PASSED] Link rate 162000 lane count 2
[20:23:34] [PASSED] Link rate 162000 lane count 1
[20:23:34] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[20:23:34] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[20:23:34] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[20:23:34] [PASSED] DP_POWER_UP_PHY with port number
[20:23:34] [PASSED] DP_POWER_DOWN_PHY with port number
[20:23:34] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[20:23:34] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[20:23:34] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[20:23:34] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[20:23:34] [PASSED] DP_QUERY_PAYLOAD with port number
[20:23:34] [PASSED] DP_QUERY_PAYLOAD with VCPI
[20:23:34] [PASSED] DP_REMOTE_DPCD_READ with port number
[20:23:34] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[20:23:34] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[20:23:34] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[20:23:34] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[20:23:34] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[20:23:34] [PASSED] DP_REMOTE_I2C_READ with port number
[20:23:34] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[20:23:34] [PASSED] DP_REMOTE_I2C_READ with transactions array
[20:23:34] [PASSED] DP_REMOTE_I2C_WRITE with port number
[20:23:34] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[20:23:34] [PASSED] DP_REMOTE_I2C_WRITE with data array
[20:23:34] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[20:23:34] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[20:23:34] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[20:23:34] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[20:23:34] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[20:23:34] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[20:23:34] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[20:23:34] ================ [PASSED] drm_dp_mst_helper ================
[20:23:34] ================== drm_exec (7 subtests) ===================
[20:23:34] [PASSED] sanitycheck
[20:23:34] [PASSED] test_lock
[20:23:34] [PASSED] test_lock_unlock
[20:23:34] [PASSED] test_duplicates
[20:23:34] [PASSED] test_prepare
[20:23:34] [PASSED] test_prepare_array
[20:23:34] [PASSED] test_multiple_loops
[20:23:34] ==================== [PASSED] drm_exec =====================
[20:23:34] =========== drm_format_helper_test (17 subtests) ===========
[20:23:34] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[20:23:34] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[20:23:34] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[20:23:34] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[20:23:34] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[20:23:34] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[20:23:34] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[20:23:34] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[20:23:34] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[20:23:34] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[20:23:34] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[20:23:34] ============== drm_test_fb_xrgb8888_to_mono ===============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[20:23:34] ==================== drm_test_fb_swab =====================
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ================ [PASSED] drm_test_fb_swab =================
[20:23:34] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[20:23:34] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[20:23:34] [PASSED] single_pixel_source_buffer
[20:23:34] [PASSED] single_pixel_clip_rectangle
[20:23:34] [PASSED] well_known_colors
[20:23:34] [PASSED] destination_pitch
[20:23:34] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[20:23:34] ================= drm_test_fb_clip_offset =================
[20:23:34] [PASSED] pass through
[20:23:34] [PASSED] horizontal offset
[20:23:34] [PASSED] vertical offset
[20:23:34] [PASSED] horizontal and vertical offset
[20:23:34] [PASSED] horizontal offset (custom pitch)
[20:23:34] [PASSED] vertical offset (custom pitch)
[20:23:34] [PASSED] horizontal and vertical offset (custom pitch)
[20:23:34] ============= [PASSED] drm_test_fb_clip_offset =============
[20:23:34] =================== drm_test_fb_memcpy ====================
[20:23:34] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[20:23:34] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[20:23:34] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[20:23:34] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[20:23:34] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[20:23:34] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[20:23:34] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[20:23:34] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[20:23:34] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[20:23:34] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[20:23:34] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[20:23:34] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[20:23:34] =============== [PASSED] drm_test_fb_memcpy ================
[20:23:34] ============= [PASSED] drm_format_helper_test ==============
[20:23:34] ================= drm_format (18 subtests) =================
[20:23:34] [PASSED] drm_test_format_block_width_invalid
[20:23:34] [PASSED] drm_test_format_block_width_one_plane
[20:23:34] [PASSED] drm_test_format_block_width_two_plane
[20:23:34] [PASSED] drm_test_format_block_width_three_plane
[20:23:34] [PASSED] drm_test_format_block_width_tiled
[20:23:34] [PASSED] drm_test_format_block_height_invalid
[20:23:34] [PASSED] drm_test_format_block_height_one_plane
[20:23:34] [PASSED] drm_test_format_block_height_two_plane
[20:23:34] [PASSED] drm_test_format_block_height_three_plane
[20:23:34] [PASSED] drm_test_format_block_height_tiled
[20:23:34] [PASSED] drm_test_format_min_pitch_invalid
[20:23:34] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[20:23:34] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[20:23:34] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[20:23:34] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[20:23:34] [PASSED] drm_test_format_min_pitch_two_plane
[20:23:34] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[20:23:34] [PASSED] drm_test_format_min_pitch_tiled
[20:23:34] =================== [PASSED] drm_format ====================
[20:23:34] ============== drm_framebuffer (10 subtests) ===============
[20:23:34] ========== drm_test_framebuffer_check_src_coords ==========
[20:23:34] [PASSED] Success: source fits into fb
[20:23:34] [PASSED] Fail: overflowing fb with x-axis coordinate
[20:23:34] [PASSED] Fail: overflowing fb with y-axis coordinate
[20:23:34] [PASSED] Fail: overflowing fb with source width
[20:23:34] [PASSED] Fail: overflowing fb with source height
[20:23:34] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[20:23:34] [PASSED] drm_test_framebuffer_cleanup
[20:23:34] =============== drm_test_framebuffer_create ===============
[20:23:34] [PASSED] ABGR8888 normal sizes
[20:23:34] [PASSED] ABGR8888 max sizes
[20:23:34] [PASSED] ABGR8888 pitch greater than min required
[20:23:34] [PASSED] ABGR8888 pitch less than min required
[20:23:34] [PASSED] ABGR8888 Invalid width
[20:23:34] [PASSED] ABGR8888 Invalid buffer handle
[20:23:34] [PASSED] No pixel format
[20:23:34] [PASSED] ABGR8888 Width 0
[20:23:34] [PASSED] ABGR8888 Height 0
[20:23:34] [PASSED] ABGR8888 Out of bound height * pitch combination
[20:23:34] [PASSED] ABGR8888 Large buffer offset
[20:23:34] [PASSED] ABGR8888 Buffer offset for inexistent plane
[20:23:34] [PASSED] ABGR8888 Invalid flag
[20:23:34] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[20:23:34] [PASSED] ABGR8888 Valid buffer modifier
[20:23:34] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[20:23:34] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] NV12 Normal sizes
[20:23:34] [PASSED] NV12 Max sizes
[20:23:34] [PASSED] NV12 Invalid pitch
[20:23:34] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[20:23:34] [PASSED] NV12 different modifier per-plane
[20:23:34] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[20:23:34] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] NV12 Modifier for inexistent plane
[20:23:34] [PASSED] NV12 Handle for inexistent plane
[20:23:34] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[20:23:34] [PASSED] YVU420 Normal sizes
[20:23:34] [PASSED] YVU420 Max sizes
[20:23:34] [PASSED] YVU420 Invalid pitch
[20:23:34] [PASSED] YVU420 Different pitches
[20:23:34] [PASSED] YVU420 Different buffer offsets/pitches
[20:23:34] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[20:23:34] [PASSED] YVU420 Valid modifier
[20:23:34] [PASSED] YVU420 Different modifiers per plane
[20:23:34] [PASSED] YVU420 Modifier for inexistent plane
[20:23:34] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[20:23:34] [PASSED] X0L2 Normal sizes
[20:23:34] [PASSED] X0L2 Max sizes
[20:23:34] [PASSED] X0L2 Invalid pitch
[20:23:34] [PASSED] X0L2 Pitch greater than minimum required
[20:23:34] [PASSED] X0L2 Handle for inexistent plane
[20:23:34] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[20:23:34] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[20:23:34] [PASSED] X0L2 Valid modifier
[20:23:34] [PASSED] X0L2 Modifier for inexistent plane
[20:23:34] =========== [PASSED] drm_test_framebuffer_create ===========
[20:23:34] [PASSED] drm_test_framebuffer_free
[20:23:34] [PASSED] drm_test_framebuffer_init
[20:23:34] [PASSED] drm_test_framebuffer_init_bad_format
[20:23:34] [PASSED] drm_test_framebuffer_init_dev_mismatch
[20:23:34] [PASSED] drm_test_framebuffer_lookup
[20:23:34] [PASSED] drm_test_framebuffer_lookup_inexistent
[20:23:34] [PASSED] drm_test_framebuffer_modifiers_not_supported
[20:23:34] ================= [PASSED] drm_framebuffer =================
[20:23:34] ================ drm_gem_shmem (8 subtests) ================
[20:23:34] [PASSED] drm_gem_shmem_test_obj_create
[20:23:34] [PASSED] drm_gem_shmem_test_obj_create_private
[20:23:34] [PASSED] drm_gem_shmem_test_pin_pages
[20:23:34] [PASSED] drm_gem_shmem_test_vmap
[20:23:34] [PASSED] drm_gem_shmem_test_get_sg_table
[20:23:34] [PASSED] drm_gem_shmem_test_get_pages_sgt
[20:23:34] [PASSED] drm_gem_shmem_test_madvise
[20:23:34] [PASSED] drm_gem_shmem_test_purge
[20:23:34] ================== [PASSED] drm_gem_shmem ==================
[20:23:34] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[20:23:34] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[20:23:34] [PASSED] Automatic
[20:23:34] [PASSED] Full
[20:23:34] [PASSED] Limited 16:235
[20:23:34] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[20:23:34] [PASSED] drm_test_check_disable_connector
[20:23:34] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[20:23:34] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[20:23:34] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[20:23:34] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[20:23:34] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[20:23:34] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[20:23:34] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[20:23:34] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[20:23:34] [PASSED] drm_test_check_output_bpc_dvi
[20:23:34] [PASSED] drm_test_check_output_bpc_format_vic_1
[20:23:34] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[20:23:34] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[20:23:34] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[20:23:34] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[20:23:34] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[20:23:34] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[20:23:34] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[20:23:34] ============ drm_test_check_hdmi_color_format =============
[20:23:34] [PASSED] AUTO -> RGB
[20:23:34] [PASSED] YCBCR422 -> YUV422
[20:23:34] [PASSED] YCBCR420 -> YUV420
[20:23:34] [PASSED] YCBCR444 -> YUV444
[20:23:34] [PASSED] RGB -> RGB
[20:23:34] ======== [PASSED] drm_test_check_hdmi_color_format =========
[20:23:34] ======== drm_test_check_hdmi_color_format_420_only ========
[20:23:34] [PASSED] RGB should fail
[20:23:34] [PASSED] YUV444 should fail
[20:23:34] [PASSED] YUV422 should fail
[20:23:34] [PASSED] YUV420 should work
[20:23:34] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[20:23:34] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[20:23:34] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[20:23:34] [PASSED] drm_test_check_broadcast_rgb_value
[20:23:34] [PASSED] drm_test_check_bpc_8_value
[20:23:34] [PASSED] drm_test_check_bpc_10_value
[20:23:34] [PASSED] drm_test_check_bpc_12_value
[20:23:34] [PASSED] drm_test_check_format_value
[20:23:34] [PASSED] drm_test_check_tmds_char_value
[20:23:34] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[20:23:34] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[20:23:34] [PASSED] drm_test_check_mode_valid
[20:23:34] [PASSED] drm_test_check_mode_valid_reject
[20:23:34] [PASSED] drm_test_check_mode_valid_reject_rate
[20:23:34] [PASSED] drm_test_check_mode_valid_reject_max_clock
[20:23:34] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[20:23:34] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[20:23:34] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[20:23:34] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[20:23:34] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[20:23:34] [PASSED] drm_test_check_infoframes
[20:23:34] [PASSED] drm_test_check_reject_avi_infoframe
[20:23:34] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[20:23:34] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[20:23:34] [PASSED] drm_test_check_reject_audio_infoframe
[20:23:34] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[20:23:34] ================= drm_managed (2 subtests) =================
[20:23:34] [PASSED] drm_test_managed_release_action
[20:23:34] [PASSED] drm_test_managed_run_action
[20:23:34] =================== [PASSED] drm_managed ===================
[20:23:34] =================== drm_mm (6 subtests) ====================
[20:23:34] [PASSED] drm_test_mm_init
[20:23:34] [PASSED] drm_test_mm_debug
[20:23:34] [PASSED] drm_test_mm_align32
[20:23:34] [PASSED] drm_test_mm_align64
[20:23:34] [PASSED] drm_test_mm_lowest
[20:23:34] [PASSED] drm_test_mm_highest
[20:23:34] ===================== [PASSED] drm_mm ======================
[20:23:34] ============= drm_modes_analog_tv (5 subtests) =============
[20:23:34] [PASSED] drm_test_modes_analog_tv_mono_576i
[20:23:34] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[20:23:34] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[20:23:34] [PASSED] drm_test_modes_analog_tv_pal_576i
[20:23:34] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[20:23:34] =============== [PASSED] drm_modes_analog_tv ===============
[20:23:34] ============== drm_plane_helper (2 subtests) ===============
[20:23:34] =============== drm_test_check_plane_state ================
[20:23:34] [PASSED] clipping_simple
[20:23:34] [PASSED] clipping_rotate_reflect
[20:23:34] [PASSED] positioning_simple
[20:23:34] [PASSED] upscaling
[20:23:34] [PASSED] downscaling
[20:23:34] [PASSED] rounding1
[20:23:34] [PASSED] rounding2
[20:23:34] [PASSED] rounding3
[20:23:34] [PASSED] rounding4
[20:23:34] =========== [PASSED] drm_test_check_plane_state ============
[20:23:34] =========== drm_test_check_invalid_plane_state ============
[20:23:34] [PASSED] positioning_invalid
[20:23:34] [PASSED] upscaling_invalid
[20:23:34] [PASSED] downscaling_invalid
[20:23:34] ======= [PASSED] drm_test_check_invalid_plane_state ========
[20:23:34] ================ [PASSED] drm_plane_helper =================
[20:23:34] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[20:23:34] ====== drm_test_connector_helper_tv_get_modes_check =======
[20:23:34] [PASSED] None
[20:23:34] [PASSED] PAL
[20:23:34] [PASSED] NTSC
[20:23:34] [PASSED] Both, NTSC Default
[20:23:34] [PASSED] Both, PAL Default
[20:23:34] [PASSED] Both, NTSC Default, with PAL on command-line
[20:23:34] [PASSED] Both, PAL Default, with NTSC on command-line
[20:23:34] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[20:23:34] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[20:23:34] ================== drm_rect (9 subtests) ===================
[20:23:34] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[20:23:34] [PASSED] drm_test_rect_clip_scaled_not_clipped
[20:23:34] [PASSED] drm_test_rect_clip_scaled_clipped
[20:23:34] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[20:23:34] ================= drm_test_rect_intersect =================
[20:23:34] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[20:23:34] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[20:23:34] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[20:23:34] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[20:23:34] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[20:23:34] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[20:23:34] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[20:23:34] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[20:23:34] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[20:23:34] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[20:23:34] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[20:23:34] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[20:23:34] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[20:23:34] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[20:23:34] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[20:23:34] ============= [PASSED] drm_test_rect_intersect =============
[20:23:34] ================ drm_test_rect_calc_hscale ================
[20:23:34] [PASSED] normal use
[20:23:34] [PASSED] out of max range
[20:23:34] [PASSED] out of min range
[20:23:34] [PASSED] zero dst
[20:23:34] [PASSED] negative src
[20:23:34] [PASSED] negative dst
[20:23:34] ============ [PASSED] drm_test_rect_calc_hscale ============
[20:23:34] ================ drm_test_rect_calc_vscale ================
[20:23:34] [PASSED] normal use
[20:23:34] [PASSED] out of max range
[20:23:34] [PASSED] out of min range
[20:23:34] [PASSED] zero dst
[20:23:34] [PASSED] negative src
[20:23:34] [PASSED] negative dst
[20:23:34] ============ [PASSED] drm_test_rect_calc_vscale ============
[20:23:34] ================== drm_test_rect_rotate ===================
[20:23:34] [PASSED] reflect-x
[20:23:34] [PASSED] reflect-y
[20:23:34] [PASSED] rotate-0
[20:23:34] [PASSED] rotate-90
[20:23:34] [PASSED] rotate-180
[20:23:34] [PASSED] rotate-270
[20:23:34] ============== [PASSED] drm_test_rect_rotate ===============
[20:23:34] ================ drm_test_rect_rotate_inv =================
[20:23:34] [PASSED] reflect-x
[20:23:34] [PASSED] reflect-y
[20:23:34] [PASSED] rotate-0
[20:23:34] [PASSED] rotate-90
[20:23:34] [PASSED] rotate-180
[20:23:34] [PASSED] rotate-270
[20:23:34] ============ [PASSED] drm_test_rect_rotate_inv =============
[20:23:34] ==================== [PASSED] drm_rect =====================
[20:23:34] ============ drm_sysfb_modeset_test (1 subtest) ============
[20:23:34] ============ drm_test_sysfb_build_fourcc_list =============
[20:23:34] [PASSED] no native formats
[20:23:34] [PASSED] XRGB8888 as native format
[20:23:34] [PASSED] remove duplicates
[20:23:34] [PASSED] convert alpha formats
[20:23:34] [PASSED] random formats
[20:23:34] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[20:23:34] ============= [PASSED] drm_sysfb_modeset_test ==============
[20:23:34] ================== drm_fixp (2 subtests) ===================
[20:23:34] [PASSED] drm_test_int2fixp
[20:23:34] [PASSED] drm_test_sm2fixp
[20:23:34] ==================== [PASSED] drm_fixp =====================
[20:23:34] ============================================================
[20:23:34] Testing complete. Ran 637 tests: passed: 637
[20:23:34] Elapsed time: 26.667s total, 1.791s configuring, 24.707s building, 0.150s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[20:23:34] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:23:36] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[20:23:46] Starting KUnit Kernel (1/1)...
[20:23:46] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:23:46] ================= ttm_device (5 subtests) ==================
[20:23:46] [PASSED] ttm_device_init_basic
[20:23:46] [PASSED] ttm_device_init_multiple
[20:23:46] [PASSED] ttm_device_fini_basic
[20:23:46] [PASSED] ttm_device_init_no_vma_man
[20:23:46] ================== ttm_device_init_pools ==================
[20:23:46] [PASSED] No DMA allocations, no DMA32 required
[20:23:46] [PASSED] DMA allocations, DMA32 required
[20:23:46] [PASSED] No DMA allocations, DMA32 required
[20:23:46] [PASSED] DMA allocations, no DMA32 required
[20:23:46] ============== [PASSED] ttm_device_init_pools ==============
[20:23:46] =================== [PASSED] ttm_device ====================
[20:23:46] ================== ttm_pool (8 subtests) ===================
[20:23:46] ================== ttm_pool_alloc_basic ===================
[20:23:46] [PASSED] One page
[20:23:46] [PASSED] More than one page
[20:23:46] [PASSED] Above the allocation limit
[20:23:46] [PASSED] One page, with coherent DMA mappings enabled
[20:23:46] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[20:23:46] ============== [PASSED] ttm_pool_alloc_basic ===============
[20:23:46] ============== ttm_pool_alloc_basic_dma_addr ==============
[20:23:46] [PASSED] One page
[20:23:46] [PASSED] More than one page
[20:23:46] [PASSED] Above the allocation limit
[20:23:46] [PASSED] One page, with coherent DMA mappings enabled
[20:23:46] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[20:23:46] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[20:23:46] [PASSED] ttm_pool_alloc_order_caching_match
[20:23:46] [PASSED] ttm_pool_alloc_caching_mismatch
[20:23:46] [PASSED] ttm_pool_alloc_order_mismatch
[20:23:46] [PASSED] ttm_pool_free_dma_alloc
[20:23:46] [PASSED] ttm_pool_free_no_dma_alloc
[20:23:46] [PASSED] ttm_pool_fini_basic
[20:23:46] ==================== [PASSED] ttm_pool =====================
[20:23:46] ================ ttm_resource (8 subtests) =================
[20:23:46] ================= ttm_resource_init_basic =================
[20:23:46] [PASSED] Init resource in TTM_PL_SYSTEM
[20:23:46] [PASSED] Init resource in TTM_PL_VRAM
[20:23:46] [PASSED] Init resource in a private placement
[20:23:46] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[20:23:46] ============= [PASSED] ttm_resource_init_basic =============
[20:23:46] [PASSED] ttm_resource_init_pinned
[20:23:46] [PASSED] ttm_resource_fini_basic
[20:23:46] [PASSED] ttm_resource_manager_init_basic
[20:23:46] [PASSED] ttm_resource_manager_usage_basic
[20:23:46] [PASSED] ttm_resource_manager_set_used_basic
[20:23:46] [PASSED] ttm_sys_man_alloc_basic
[20:23:46] [PASSED] ttm_sys_man_free_basic
[20:23:46] ================== [PASSED] ttm_resource ===================
[20:23:46] =================== ttm_tt (15 subtests) ===================
[20:23:46] ==================== ttm_tt_init_basic ====================
[20:23:46] [PASSED] Page-aligned size
[20:23:46] [PASSED] Extra pages requested
[20:23:46] ================ [PASSED] ttm_tt_init_basic ================
[20:23:46] [PASSED] ttm_tt_init_misaligned
[20:23:46] [PASSED] ttm_tt_fini_basic
[20:23:46] [PASSED] ttm_tt_fini_sg
[20:23:46] [PASSED] ttm_tt_fini_shmem
[20:23:46] [PASSED] ttm_tt_create_basic
[20:23:46] [PASSED] ttm_tt_create_invalid_bo_type
[20:23:46] [PASSED] ttm_tt_create_ttm_exists
[20:23:46] [PASSED] ttm_tt_create_failed
[20:23:46] [PASSED] ttm_tt_destroy_basic
[20:23:46] [PASSED] ttm_tt_populate_null_ttm
[20:23:46] [PASSED] ttm_tt_populate_populated_ttm
[20:23:46] [PASSED] ttm_tt_unpopulate_basic
[20:23:46] [PASSED] ttm_tt_unpopulate_empty_ttm
[20:23:46] [PASSED] ttm_tt_swapin_basic
[20:23:46] ===================== [PASSED] ttm_tt ======================
[20:23:46] =================== ttm_bo (14 subtests) ===================
[20:23:46] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[20:23:46] [PASSED] Cannot be interrupted and sleeps
[20:23:46] [PASSED] Cannot be interrupted, locks straight away
[20:23:46] [PASSED] Can be interrupted, sleeps
[20:23:46] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[20:23:46] [PASSED] ttm_bo_reserve_locked_no_sleep
[20:23:46] [PASSED] ttm_bo_reserve_no_wait_ticket
[20:23:46] [PASSED] ttm_bo_reserve_double_resv
[20:23:46] [PASSED] ttm_bo_reserve_interrupted
[20:23:46] [PASSED] ttm_bo_reserve_deadlock
[20:23:46] [PASSED] ttm_bo_unreserve_basic
[20:23:46] [PASSED] ttm_bo_unreserve_pinned
[20:23:46] [PASSED] ttm_bo_unreserve_bulk
[20:23:46] [PASSED] ttm_bo_fini_basic
[20:23:46] [PASSED] ttm_bo_fini_shared_resv
[20:23:46] [PASSED] ttm_bo_pin_basic
[20:23:46] [PASSED] ttm_bo_pin_unpin_resource
[20:23:46] [PASSED] ttm_bo_multiple_pin_one_unpin
[20:23:46] ===================== [PASSED] ttm_bo ======================
[20:23:46] ============== ttm_bo_validate (22 subtests) ===============
[20:23:46] ============== ttm_bo_init_reserved_sys_man ===============
[20:23:46] [PASSED] Buffer object for userspace
[20:23:46] [PASSED] Kernel buffer object
[20:23:46] [PASSED] Shared buffer object
[20:23:46] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[20:23:46] ============== ttm_bo_init_reserved_mock_man ==============
[20:23:46] [PASSED] Buffer object for userspace
[20:23:46] [PASSED] Kernel buffer object
[20:23:46] [PASSED] Shared buffer object
[20:23:46] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[20:23:46] [PASSED] ttm_bo_init_reserved_resv
[20:23:46] ================== ttm_bo_validate_basic ==================
[20:23:46] [PASSED] Buffer object for userspace
[20:23:46] [PASSED] Kernel buffer object
[20:23:46] [PASSED] Shared buffer object
[20:23:46] ============== [PASSED] ttm_bo_validate_basic ==============
[20:23:46] [PASSED] ttm_bo_validate_invalid_placement
[20:23:46] ============= ttm_bo_validate_same_placement ==============
[20:23:46] [PASSED] System manager
[20:23:46] [PASSED] VRAM manager
[20:23:46] ========= [PASSED] ttm_bo_validate_same_placement ==========
[20:23:46] [PASSED] ttm_bo_validate_failed_alloc
[20:23:46] [PASSED] ttm_bo_validate_pinned
[20:23:46] [PASSED] ttm_bo_validate_busy_placement
[20:23:46] ================ ttm_bo_validate_multihop =================
[20:23:46] [PASSED] Buffer object for userspace
[20:23:46] [PASSED] Kernel buffer object
[20:23:46] [PASSED] Shared buffer object
[20:23:46] ============ [PASSED] ttm_bo_validate_multihop =============
[20:23:46] ========== ttm_bo_validate_no_placement_signaled ==========
[20:23:46] [PASSED] Buffer object in system domain, no page vector
[20:23:46] [PASSED] Buffer object in system domain with an existing page vector
[20:23:46] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[20:23:46] ======== ttm_bo_validate_no_placement_not_signaled ========
[20:23:46] [PASSED] Buffer object for userspace
[20:23:46] [PASSED] Kernel buffer object
[20:23:46] [PASSED] Shared buffer object
[20:23:46] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[20:23:46] [PASSED] ttm_bo_validate_move_fence_signaled
[20:23:46] ========= ttm_bo_validate_move_fence_not_signaled =========
[20:23:46] [PASSED] Waits for GPU
[20:23:46] [PASSED] Tries to lock straight away
[20:23:46] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[20:23:46] [PASSED] ttm_bo_validate_swapout
[20:23:46] [PASSED] ttm_bo_validate_happy_evict
[20:23:46] [PASSED] ttm_bo_validate_all_pinned_evict
[20:23:46] [PASSED] ttm_bo_validate_allowed_only_evict
[20:23:46] [PASSED] ttm_bo_validate_deleted_evict
[20:23:46] [PASSED] ttm_bo_validate_busy_domain_evict
[20:23:46] [PASSED] ttm_bo_validate_evict_gutting
[20:23:46] [PASSED] ttm_bo_validate_recrusive_evict
[20:23:46] ================= [PASSED] ttm_bo_validate =================
[20:23:46] ============================================================
[20:23:46] Testing complete. Ran 102 tests: passed: 102
[20:23:46] Elapsed time: 11.907s total, 1.792s configuring, 9.900s building, 0.170s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[20:23:46] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:23:48] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[20:23:57] Starting KUnit Kernel (1/1)...
[20:23:57] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:23:57] =============== dma-buf-fence (12 subtests) ================
[20:23:57] [PASSED] test_sanitycheck
[20:23:57] [PASSED] test_signaling
[20:23:57] [PASSED] test_add_callback
[20:23:57] [PASSED] test_late_add_callback
[20:23:57] [PASSED] test_rm_callback
[20:23:57] [PASSED] test_late_rm_callback
[20:23:57] [PASSED] test_status
[20:23:57] [PASSED] test_error
[20:23:57] [PASSED] test_wait
[20:23:57] [PASSED] test_wait_timeout
[20:23:57] [PASSED] test_stub
[20:23:57] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[20:23:57] ================== [PASSED] dma-buf-fence ==================
[20:23:57] ============ dma-buf-fence-chain (11 subtests) =============
[20:23:57] [PASSED] test_sanitycheck
[20:23:57] [PASSED] test_find_seqno
[20:23:57] [PASSED] test_find_signaled
[20:23:57] [PASSED] test_find_out_of_order
[20:24:02] [PASSED] test_find_gap
[20:24:02] [PASSED] test_find_race
[20:24:02] [PASSED] test_signal_forward
[20:24:02] [PASSED] test_signal_backward
[20:24:02] [PASSED] test_wait_forward
[20:24:02] [PASSED] test_wait_backward
[20:24:02] [PASSED] test_wait_random
[20:24:02] =============== [PASSED] dma-buf-fence-chain ===============
[20:24:02] ============ dma-buf-fence-unwrap (10 subtests) ============
[20:24:02] [PASSED] test_sanitycheck
[20:24:02] [PASSED] test_unwrap_array
[20:24:02] [PASSED] test_unwrap_chain
[20:24:02] [PASSED] test_unwrap_chain_array
[20:24:02] [PASSED] test_unwrap_merge
[20:24:02] [PASSED] test_unwrap_merge_duplicate
[20:24:02] [PASSED] test_unwrap_merge_seqno
[20:24:02] [PASSED] test_unwrap_merge_order
[20:24:02] [PASSED] test_unwrap_merge_complex
[20:24:02] [PASSED] test_unwrap_merge_complex_seqno
[20:24:02] ============== [PASSED] dma-buf-fence-unwrap ===============
[20:24:02] ================ dma-buf-resv (5 subtests) =================
[20:24:02] [PASSED] test_sanitycheck
[20:24:02] ===================== test_signaling ======================
[20:24:02] [PASSED] kernel
[20:24:02] [PASSED] write
[20:24:02] [PASSED] read
[20:24:02] [PASSED] bookkeep
[20:24:02] ================= [PASSED] test_signaling ==================
[20:24:02] ====================== test_for_each ======================
[20:24:02] [PASSED] kernel
[20:24:02] [PASSED] write
[20:24:02] [PASSED] read
[20:24:02] [PASSED] bookkeep
[20:24:02] ================== [PASSED] test_for_each ==================
[20:24:02] ================= test_for_each_unlocked ==================
[20:24:02] [PASSED] kernel
[20:24:02] [PASSED] write
[20:24:02] [PASSED] read
[20:24:02] [PASSED] bookkeep
[20:24:02] ============= [PASSED] test_for_each_unlocked ==============
[20:24:02] ===================== test_get_fences =====================
[20:24:02] [PASSED] kernel
[20:24:02] [PASSED] write
[20:24:02] [PASSED] read
[20:24:02] [PASSED] bookkeep
[20:24:02] ================= [PASSED] test_get_fences =================
[20:24:02] ================== [PASSED] dma-buf-resv ===================
[20:24:02] ============================================================
[20:24:02] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[20:24:02] Elapsed time: 15.719s total, 1.802s configuring, 8.546s building, 5.356s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 21+ messages in thread
* ✓ Xe.CI.BAT: success for Crescent Island PMT support (rev4)
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
` (10 preceding siblings ...)
2026-08-12 20:24 ` ✓ CI.KUnit: success for Crescent Island PMT support (rev4) Patchwork
@ 2026-08-12 21:16 ` Patchwork
11 siblings, 0 replies; 21+ messages in thread
From: Patchwork @ 2026-08-12 21:16 UTC (permalink / raw)
To: Ruhl, Michael J; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 948 bytes --]
== Series Details ==
Series: Crescent Island PMT support (rev4)
URL : https://patchwork.freedesktop.org/series/160717/
State : success
== Summary ==
CI Bug Log - changes from xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a_BAT -> xe-pw-160717v4_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a -> xe-pw-160717v4
IGT_9054: 3d819a8f511b2bcd844647bcf7e433b9407d058e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a: 43db79ba5c8eac68b393cca2faa0b13a6505de1a
xe-pw-160717v4: 160717v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160717v4/index.html
[-- Attachment #2: Type: text/html, Size: 1496 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2026-08-12 22:17 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 19:37 [PATCH v2 00/10] Crescent Island PMT support Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 01/10] platform/x86/intel/pmt: complete pcidev to device update Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 02/10] platform/x86/intel/pmt: Add register access callbacks Michael J. Ruhl
2026-08-12 19:49 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 03/10] drm/xe/vsec: Protect against missing config Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 04/10] drm/xe/vsec: Use correct pm state get Michael J. Ruhl
2026-08-12 19:37 ` [PATCH v2 05/10] drm/xe/vsec: Support possible hotplug exit Michael J. Ruhl
2026-08-12 19:51 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 06/10] drm/xe/vsec: Support Crescent Island PMT Michael J. Ruhl
2026-08-12 19:49 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 07/10] drm/xe/vsec: Crescent Island PMT decode Michael J. Ruhl
2026-08-12 19:51 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 08/10] drm/xe/vsec: Crescent Island PMT callbacks Michael J. Ruhl
2026-08-12 19:57 ` sashiko-bot
2026-08-12 19:37 ` [PATCH v2 09/10] drm/xe/vsec: Support late bind fw information Michael J. Ruhl
2026-08-12 19:54 ` sashiko-bot
2026-08-12 20:12 ` Ruhl, Michael J
2026-08-12 19:37 ` [PATCH v2 10/10] drm/xe/vsec: Update PMT internal access for CRI Michael J. Ruhl
2026-08-12 20:04 ` sashiko-bot
2026-08-12 20:24 ` ✓ CI.KUnit: success for Crescent Island PMT support (rev4) Patchwork
2026-08-12 21:16 ` ✓ Xe.CI.BAT: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox