Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] drm/i915/bios: Refactor ROM access
@ 2024-09-10 13:42 Ville Syrjala
  2024-09-10 13:42 ` [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read Ville Syrjala
                   ` (8 more replies)
  0 siblings, 9 replies; 23+ messages in thread
From: Ville Syrjala @ 2024-09-10 13:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Unify the behaviour of the PCI ROM vs. SPI flash VBT
read codepaths, and relocate out the low level nuts details
from intel_bios.c into a new soc/intel_rom.c file.

Ville Syrjälä (5):
  drm/i915/bios: Add some size checks to SPI VBT read
  drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4
  drm/i915/bios: Extract intel_spi_read16()
  drm/i915/bios: Extract vbt_signature[]
  drm/i915/bios: Extract soc/intel_rom.c

 drivers/gpu/drm/i915/Makefile                 |   3 +-
 drivers/gpu/drm/i915/display/intel_bios.c     | 141 ++++-----------
 drivers/gpu/drm/i915/soc/intel_rom.c          | 160 ++++++++++++++++++
 drivers/gpu/drm/i915/soc/intel_rom.h          |  25 +++
 drivers/gpu/drm/xe/Makefile                   |   3 +-
 .../xe/compat-i915-headers/soc/intel_rom.h    |   6 +
 6 files changed, 230 insertions(+), 108 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.c
 create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.h
 create mode 100644 drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h

-- 
2.44.2


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
@ 2024-09-10 13:42 ` Ville Syrjala
  2024-09-12 11:56   ` Jani Nikula
  2024-09-10 13:42 ` [PATCH 2/5] drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4 Ville Syrjala
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjala @ 2024-09-10 13:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Unify the SPI vs. PCI ROM VBT read codepaths a bit by
pulling some size overflow checks from the PCI side
into the SPI side.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_bios.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index cd32c9cd38a9..86b81fd23f58 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -3088,11 +3088,22 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
 	if (count >= oprom_size)
 		goto err_not_found;
 
+	if (sizeof(struct vbt_header) > oprom_size - count) {
+		drm_dbg(display->drm, "VBT header incomplete\n");
+		goto err_not_found;
+	}
+
 	/* Get VBT size and allocate space for the VBT */
 	vbt_size = intel_spi_read(&i915->uncore,
 				  found + offsetof(struct vbt_header, vbt_size));
 	vbt_size &= 0xffff;
 
+	if (vbt_size > oprom_size - count) {
+		drm_dbg(display->drm,
+			"VBT incomplete (vbt_size overflows)\n");
+		goto err_not_found;
+	}
+
 	vbt = kzalloc(round_up(vbt_size, 4), GFP_KERNEL);
 	if (!vbt)
 		goto err_not_found;
-- 
2.44.2


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 2/5] drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
  2024-09-10 13:42 ` [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read Ville Syrjala
@ 2024-09-10 13:42 ` Ville Syrjala
  2024-09-12 11:57   ` Jani Nikula
  2024-09-10 13:42 ` [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16() Ville Syrjala
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjala @ 2024-09-10 13:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The SPI code rounds the VBT allocation to a multiple of four bytes
(presumably because it reads the VBT 4 bytes at a time). Do the
same for the PCI ROM side to eliminate pointless differences between
the two codepaths. This will make no functional difference.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_bios.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 86b81fd23f58..cc4a4cc2bf3e 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -3166,7 +3166,7 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
 	}
 
 	/* The rest will be validated by intel_bios_is_valid_vbt() */
-	vbt = kmalloc(vbt_size, GFP_KERNEL);
+	vbt = kmalloc(round_up(vbt_size, 4), GFP_KERNEL);
 	if (!vbt)
 		goto err_unmap_oprom;
 
-- 
2.44.2


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16()
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
  2024-09-10 13:42 ` [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read Ville Syrjala
  2024-09-10 13:42 ` [PATCH 2/5] drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4 Ville Syrjala
@ 2024-09-10 13:42 ` Ville Syrjala
  2024-09-12 12:02   ` Jani Nikula
  2024-09-10 13:42 ` [PATCH 4/5] drm/i915/bios: Extract vbt_signature[] Ville Syrjala
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjala @ 2024-09-10 13:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The SPI VBT codepath only knows how to read 4 bytes at a time.
So to read the 2 byte vbt_size it masks out the unwanted msbs.
Hide that little implementation detail inside a new intel_spi_read16()
helper. Alse rename the existing intel_spi_read() to intel_spi_read32()
to make it clear what it does.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_bios.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index cc4a4cc2bf3e..cbbda94c3dab 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -3053,13 +3053,18 @@ static struct vbt_header *firmware_get_vbt(struct intel_display *display,
 	return vbt;
 }
 
-static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
+static u32 intel_spi_read32(struct intel_uncore *uncore, u32 offset)
 {
 	intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
 
 	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
 }
 
+static u16 intel_spi_read16(struct intel_uncore *uncore, u32 offset)
+{
+	return intel_spi_read32(uncore, offset) & 0xffff;
+}
+
 static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
 					    size_t *size)
 {
@@ -3078,7 +3083,7 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
 	oprom_offset &= OROM_OFFSET_MASK;
 
 	for (count = 0; count < oprom_size; count += 4) {
-		data = intel_spi_read(&i915->uncore, oprom_offset + count);
+		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
 		if (data == *((const u32 *)"$VBT")) {
 			found = oprom_offset + count;
 			break;
@@ -3094,9 +3099,8 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
 	}
 
 	/* Get VBT size and allocate space for the VBT */
-	vbt_size = intel_spi_read(&i915->uncore,
-				  found + offsetof(struct vbt_header, vbt_size));
-	vbt_size &= 0xffff;
+	vbt_size = intel_spi_read16(&i915->uncore,
+				    found + offsetof(struct vbt_header, vbt_size));
 
 	if (vbt_size > oprom_size - count) {
 		drm_dbg(display->drm,
@@ -3109,7 +3113,7 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
 		goto err_not_found;
 
 	for (count = 0; count < vbt_size; count += 4)
-		*(vbt + store++) = intel_spi_read(&i915->uncore, found + count);
+		*(vbt + store++) = intel_spi_read32(&i915->uncore, found + count);
 
 	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
 		goto err_free_vbt;
-- 
2.44.2


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
                   ` (2 preceding siblings ...)
  2024-09-10 13:42 ` [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16() Ville Syrjala
@ 2024-09-10 13:42 ` Ville Syrjala
  2024-09-12 12:15   ` Jani Nikula
  2024-09-10 13:42 ` [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c Ville Syrjala
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjala @ 2024-09-10 13:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Replace the three hand rolled "$VBT"s with a vbt_signature[]
to avoid accidents.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index cbbda94c3dab..0b92b494117f 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
 	return _vbt + vbt->bdb_offset;
 }
 
+static const char vbt_signature[4] = "$VBT";
+
 /**
  * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
  * @display:	display device
@@ -2986,7 +2988,7 @@ bool intel_bios_is_valid_vbt(struct intel_display *display,
 		return false;
 	}
 
-	if (memcmp(vbt->signature, "$VBT", 4)) {
+	if (memcmp(vbt->signature, vbt_signature, sizeof(vbt_signature))) {
 		drm_dbg_kms(display->drm, "VBT invalid signature\n");
 		return false;
 	}
@@ -3082,9 +3084,11 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
 	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
 	oprom_offset &= OROM_OFFSET_MASK;
 
+	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
+
 	for (count = 0; count < oprom_size; count += 4) {
 		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
-		if (data == *((const u32 *)"$VBT")) {
+		if (data == *((const u32 *)vbt_signature)) {
 			found = oprom_offset + count;
 			break;
 		}
@@ -3144,9 +3148,11 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
 	if (!oprom)
 		return NULL;
 
+	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
+
 	/* Scour memory looking for the VBT signature. */
 	for (i = 0; i + 4 < size; i += 4) {
-		if (ioread32(oprom + i) != *((const u32 *)"$VBT"))
+		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
 			continue;
 
 		p = oprom + i;
-- 
2.44.2


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
                   ` (3 preceding siblings ...)
  2024-09-10 13:42 ` [PATCH 4/5] drm/i915/bios: Extract vbt_signature[] Ville Syrjala
@ 2024-09-10 13:42 ` Ville Syrjala
  2024-09-12 12:44   ` Jani Nikula
  2024-09-10 17:29 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: Refactor ROM access Patchwork
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjala @ 2024-09-10 13:42 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Abstract away the nuts and bolts of the SPI vs. PCI ROM
stuff, and hide it all in soc/intel_rom.c so that the
VBT code doesn't have to care about this stuff.

This leaves intel_bios.c with a single codepath that
can focus on the details related to the VBT layout.

This should have no functional changes.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/Makefile                 |   3 +-
 drivers/gpu/drm/i915/display/intel_bios.c     | 150 ++++------------
 drivers/gpu/drm/i915/soc/intel_rom.c          | 160 ++++++++++++++++++
 drivers/gpu/drm/i915/soc/intel_rom.h          |  25 +++
 drivers/gpu/drm/xe/Makefile                   |   3 +-
 .../xe/compat-i915-headers/soc/intel_rom.h    |   6 +
 6 files changed, 224 insertions(+), 123 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.c
 create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.h
 create mode 100644 drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index c63fa2133ccb..d14c8870aecb 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -51,7 +51,8 @@ i915-y += \
 i915-y += \
 	soc/intel_dram.o \
 	soc/intel_gmch.o \
-	soc/intel_pch.o
+	soc/intel_pch.o \
+	soc/intel_rom.o
 
 # core library code
 i915-y += \
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 0b92b494117f..37d4b4ddfa95 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -33,12 +33,12 @@
 #include <drm/drm_edid.h>
 #include <drm/drm_fixed.h>
 
+#include "soc/intel_rom.h"
+
 #include "i915_drv.h"
-#include "i915_reg.h"
 #include "intel_display.h"
 #include "intel_display_types.h"
 #include "intel_gmbus.h"
-#include "intel_uncore.h"
 
 #define _INTEL_BIOS_PRIVATE
 #include "intel_vbt_defs.h"
@@ -3055,150 +3055,58 @@ static struct vbt_header *firmware_get_vbt(struct intel_display *display,
 	return vbt;
 }
 
-static u32 intel_spi_read32(struct intel_uncore *uncore, u32 offset)
+static struct vbt_header *oprom_get_vbt(struct intel_display *display,
+					struct intel_rom *rom,
+					size_t *size, const char *type)
 {
-	intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
+	struct vbt_header *vbt;
+	size_t vbt_size;
+	loff_t offset;
 
-	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
-}
-
-static u16 intel_spi_read16(struct intel_uncore *uncore, u32 offset)
-{
-	return intel_spi_read32(uncore, offset) & 0xffff;
-}
-
-static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
-					    size_t *size)
-{
-	struct drm_i915_private *i915 = to_i915(display->drm);
-	u32 count, data, found, store = 0;
-	u32 static_region, oprom_offset;
-	u32 oprom_size = 0x200000;
-	u16 vbt_size;
-	u32 *vbt;
-
-	static_region = intel_uncore_read(&i915->uncore, SPI_STATIC_REGIONS);
-	static_region &= OPTIONROM_SPI_REGIONID_MASK;
-	intel_uncore_write(&i915->uncore, PRIMARY_SPI_REGIONID, static_region);
-
-	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
-	oprom_offset &= OROM_OFFSET_MASK;
+	if (!rom)
+		return NULL;
 
 	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
 
-	for (count = 0; count < oprom_size; count += 4) {
-		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
-		if (data == *((const u32 *)vbt_signature)) {
-			found = oprom_offset + count;
-			break;
-		}
-	}
+	offset = intel_rom_find(rom, *(const u32 *)vbt_signature);
+	if (offset < 0)
+		goto err_free_rom;
 
-	if (count >= oprom_size)
-		goto err_not_found;
-
-	if (sizeof(struct vbt_header) > oprom_size - count) {
+	if (sizeof(struct vbt_header) > intel_rom_size(rom) - offset) {
 		drm_dbg(display->drm, "VBT header incomplete\n");
-		goto err_not_found;
+		goto err_free_rom;
 	}
 
-	/* Get VBT size and allocate space for the VBT */
-	vbt_size = intel_spi_read16(&i915->uncore,
-				    found + offsetof(struct vbt_header, vbt_size));
+	BUILD_BUG_ON(sizeof(vbt->vbt_size) != sizeof(u16));
 
-	if (vbt_size > oprom_size - count) {
-		drm_dbg(display->drm,
-			"VBT incomplete (vbt_size overflows)\n");
-		goto err_not_found;
+	vbt_size = intel_rom_read16(rom, offset + offsetof(struct vbt_header, vbt_size));
+	if (vbt_size > intel_rom_size(rom) - offset) {
+		drm_dbg(display->drm, "VBT incomplete (vbt_size overflows)\n");
+		goto err_free_rom;
 	}
 
 	vbt = kzalloc(round_up(vbt_size, 4), GFP_KERNEL);
 	if (!vbt)
-		goto err_not_found;
+		goto err_free_rom;
 
-	for (count = 0; count < vbt_size; count += 4)
-		*(vbt + store++) = intel_spi_read32(&i915->uncore, found + count);
+	intel_rom_read_block(rom, vbt, offset, vbt_size);
 
 	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
 		goto err_free_vbt;
 
-	drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n");
+	drm_dbg_kms(display->drm, "Found valid VBT in %s\n", type);
 
 	if (size)
 		*size = vbt_size;
 
+	intel_rom_free(rom);
+
 	return (struct vbt_header *)vbt;
 
 err_free_vbt:
 	kfree(vbt);
-err_not_found:
-	return NULL;
-}
-
-static struct vbt_header *oprom_get_vbt(struct intel_display *display,
-					size_t *sizep)
-{
-	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
-	void __iomem *p = NULL, *oprom;
-	struct vbt_header *vbt;
-	u16 vbt_size;
-	size_t i, size;
-
-	oprom = pci_map_rom(pdev, &size);
-	if (!oprom)
-		return NULL;
-
-	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
-
-	/* Scour memory looking for the VBT signature. */
-	for (i = 0; i + 4 < size; i += 4) {
-		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
-			continue;
-
-		p = oprom + i;
-		size -= i;
-		break;
-	}
-
-	if (!p)
-		goto err_unmap_oprom;
-
-	if (sizeof(struct vbt_header) > size) {
-		drm_dbg(display->drm, "VBT header incomplete\n");
-		goto err_unmap_oprom;
-	}
-
-	vbt_size = ioread16(p + offsetof(struct vbt_header, vbt_size));
-	if (vbt_size > size) {
-		drm_dbg(display->drm,
-			"VBT incomplete (vbt_size overflows)\n");
-		goto err_unmap_oprom;
-	}
-
-	/* The rest will be validated by intel_bios_is_valid_vbt() */
-	vbt = kmalloc(round_up(vbt_size, 4), GFP_KERNEL);
-	if (!vbt)
-		goto err_unmap_oprom;
-
-	memcpy_fromio(vbt, p, vbt_size);
-
-	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
-		goto err_free_vbt;
-
-	pci_unmap_rom(pdev, oprom);
-
-	if (sizep)
-		*sizep = vbt_size;
-
-	drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n");
-
-	return vbt;
-
-err_free_vbt:
-	kfree(vbt);
-err_unmap_oprom:
-	pci_unmap_rom(pdev, oprom);
-
+err_free_rom:
+	intel_rom_free(rom);
 	return NULL;
 }
 
@@ -3220,11 +3128,11 @@ static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display
 	 */
 	if (!vbt && IS_DGFX(i915))
 		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
-			vbt = spi_oprom_get_vbt(display, sizep);
+			vbt = oprom_get_vbt(display, intel_rom_spi(i915), sizep, "SPI flash");
 
 	if (!vbt)
 		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
-			vbt = oprom_get_vbt(display, sizep);
+			vbt = oprom_get_vbt(display, intel_rom_pci(i915), sizep, "PCI ROM");
 
 	return vbt;
 }
diff --git a/drivers/gpu/drm/i915/soc/intel_rom.c b/drivers/gpu/drm/i915/soc/intel_rom.c
new file mode 100644
index 000000000000..243d98cab8c3
--- /dev/null
+++ b/drivers/gpu/drm/i915/soc/intel_rom.c
@@ -0,0 +1,160 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include "i915_drv.h"
+#include "i915_reg.h"
+
+#include "intel_rom.h"
+#include "intel_uncore.h"
+
+struct intel_rom {
+	/* for PCI ROM */
+	struct pci_dev *pdev;
+	void __iomem *oprom;
+
+	/* for SPI */
+	struct intel_uncore *uncore;
+	loff_t offset;
+
+	size_t size;
+
+	u32 (*read32)(struct intel_rom *rom, loff_t offset);
+	u16 (*read16)(struct intel_rom *rom, loff_t offset);
+	void (*read_block)(struct intel_rom *rom, void *data, loff_t offset, size_t size);
+	void (*free)(struct intel_rom *rom);
+};
+
+static u32 spi_read32(struct intel_rom *rom, loff_t offset)
+{
+	intel_uncore_write(rom->uncore, PRIMARY_SPI_ADDRESS,
+			   rom->offset + offset);
+
+	return intel_uncore_read(rom->uncore, PRIMARY_SPI_TRIGGER);
+}
+
+static u16 spi_read16(struct intel_rom *rom, loff_t offset)
+{
+	return spi_read32(rom, offset) & 0xffff;
+}
+
+struct intel_rom *intel_rom_spi(struct drm_i915_private *i915)
+{
+	struct intel_rom *rom;
+	u32 static_region;
+
+	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
+	if (!rom)
+		return NULL;
+
+	rom->uncore = &i915->uncore;
+
+	static_region = intel_uncore_read(rom->uncore, SPI_STATIC_REGIONS);
+	static_region &= OPTIONROM_SPI_REGIONID_MASK;
+	intel_uncore_write(rom->uncore, PRIMARY_SPI_REGIONID, static_region);
+
+	rom->offset = intel_uncore_read(rom->uncore, OROM_OFFSET) & OROM_OFFSET_MASK;
+
+	rom->size = 0x200000;
+
+	rom->read32 = spi_read32;
+	rom->read16 = spi_read16;
+
+	return rom;
+}
+
+static u32 pci_read32(struct intel_rom *rom, loff_t offset)
+{
+	return ioread32(rom->oprom + offset);
+}
+
+static u16 pci_read16(struct intel_rom *rom, loff_t offset)
+{
+	return ioread16(rom->oprom + offset);
+}
+
+static void pci_read_block(struct intel_rom *rom, void *data,
+			   loff_t offset, size_t size)
+{
+	memcpy_fromio(data, rom->oprom + offset, size);
+}
+
+static void pci_free(struct intel_rom *rom)
+{
+	pci_unmap_rom(rom->pdev, rom->oprom);
+}
+
+struct intel_rom *intel_rom_pci(struct drm_i915_private *i915)
+{
+	struct intel_rom *rom;
+
+	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
+	if (!rom)
+		return NULL;
+
+	rom->pdev = to_pci_dev(i915->drm.dev);
+
+	rom->oprom = pci_map_rom(rom->pdev, &rom->size);
+	if (!rom->oprom) {
+		kfree(rom);
+		return NULL;
+	}
+
+	rom->read32 = pci_read32;
+	rom->read16 = pci_read16;
+	rom->read_block = pci_read_block;
+	rom->free = pci_free;
+
+	return rom;
+}
+
+u32 intel_rom_read32(struct intel_rom *rom, loff_t offset)
+{
+	return rom->read32(rom, offset);
+}
+
+u16 intel_rom_read16(struct intel_rom *rom, loff_t offset)
+{
+	return rom->read16(rom, offset);
+}
+
+void intel_rom_read_block(struct intel_rom *rom, void *data,
+			  loff_t offset, size_t size)
+{
+	u32 *ptr = data;
+	loff_t index;
+
+	if (rom->read_block) {
+		rom->read_block(rom, data, offset, size);
+		return;
+	}
+
+	for (index = 0; index < size; index += 4)
+		*ptr++ = rom->read32(rom, offset + index);
+}
+
+loff_t intel_rom_find(struct intel_rom *rom, u32 needle)
+{
+	loff_t offset;
+
+	for (offset = 0; offset < rom->size; offset += 4) {
+		if (rom->read32(rom, offset) == needle)
+			return offset;
+	}
+
+	return -ENOENT;
+}
+
+size_t intel_rom_size(struct intel_rom *rom)
+{
+	return rom->size;
+}
+
+void intel_rom_free(struct intel_rom *rom)
+{
+	if (rom && rom->free)
+		rom->free(rom);
+
+	kfree(rom);
+}
diff --git a/drivers/gpu/drm/i915/soc/intel_rom.h b/drivers/gpu/drm/i915/soc/intel_rom.h
new file mode 100644
index 000000000000..fb2979c8ef7f
--- /dev/null
+++ b/drivers/gpu/drm/i915/soc/intel_rom.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef __INTEL_ROM_H__
+#define __INTEL_ROM_H__
+
+#include <linux/types.h>
+
+struct drm_i915_private;
+struct intel_rom;
+
+struct intel_rom *intel_rom_spi(struct drm_i915_private *i915);
+struct intel_rom *intel_rom_pci(struct drm_i915_private *i915);
+
+u32 intel_rom_read32(struct intel_rom *rom, loff_t offset);
+u16 intel_rom_read16(struct intel_rom *rom, loff_t offset);
+void intel_rom_read_block(struct intel_rom *rom, void *data,
+			  loff_t offset, size_t size);
+loff_t intel_rom_find(struct intel_rom *rom, u32 needle);
+size_t intel_rom_size(struct intel_rom *rom);
+void intel_rom_free(struct intel_rom *rom);
+
+#endif /* __INTEL_ROM_H__ */
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index edfd812e0f41..dd1c0666e6bd 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -180,7 +180,8 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
 # SOC code shared with i915
 xe-$(CONFIG_DRM_XE_DISPLAY) += \
 	i915-soc/intel_dram.o \
-	i915-soc/intel_pch.o
+	i915-soc/intel_pch.o \
+	i915-soc/intel_rom.o
 
 # Display code shared with i915
 xe-$(CONFIG_DRM_XE_DISPLAY) += \
diff --git a/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h b/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
new file mode 100644
index 000000000000..05cbfb697b2b
--- /dev/null
+++ b/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include "../../../i915/soc/intel_rom.h"
-- 
2.44.2


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: Refactor ROM access
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
                   ` (4 preceding siblings ...)
  2024-09-10 13:42 ` [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c Ville Syrjala
@ 2024-09-10 17:29 ` Patchwork
  2024-09-10 17:29 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-09-10 17:29 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/bios: Refactor ROM access
URL   : https://patchwork.freedesktop.org/series/138477/
State : warning

== Summary ==

Error: dim checkpatch failed
bb062a0a0f9d drm/i915/bios: Add some size checks to SPI VBT read
c5324d24888e drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4
ce1343a6bbda drm/i915/bios: Extract intel_spi_read16()
f7a27e3cc319 drm/i915/bios: Extract vbt_signature[]
afb82d4fd4a3 drm/i915/bios: Extract soc/intel_rom.c
-:244: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#244: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 411 lines checked



^ permalink raw reply	[flat|nested] 23+ messages in thread

* ✗ Fi.CI.SPARSE: warning for drm/i915/bios: Refactor ROM access
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
                   ` (5 preceding siblings ...)
  2024-09-10 17:29 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: Refactor ROM access Patchwork
@ 2024-09-10 17:29 ` Patchwork
  2024-09-10 17:46 ` ✓ Fi.CI.BAT: success " Patchwork
  2024-09-11  9:10 ` ✗ Fi.CI.IGT: failure " Patchwork
  8 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-09-10 17:29 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/bios: Refactor ROM access
URL   : https://patchwork.freedesktop.org/series/138477/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'



^ permalink raw reply	[flat|nested] 23+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915/bios: Refactor ROM access
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
                   ` (6 preceding siblings ...)
  2024-09-10 17:29 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-09-10 17:46 ` Patchwork
  2024-09-11  9:10 ` ✗ Fi.CI.IGT: failure " Patchwork
  8 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-09-10 17:46 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 13373 bytes --]

== Series Details ==

Series: drm/i915/bios: Refactor ROM access
URL   : https://patchwork.freedesktop.org/series/138477/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_15389 -> Patchwork_138477v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/index.html

Participating hosts (40 -> 39)
------------------------------

  Additional (2): fi-cfl-8109u bat-arls-1 
  Missing    (3): bat-dg2-11 fi-snb-2520m fi-bsw-n3050 

Known issues
------------

  Here are the changes found in Patchwork_138477v1 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@debugfs_test@basic-hwmon:
    - bat-arls-1:         NOTRUN -> [SKIP][1] ([i915#9318])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@debugfs_test@basic-hwmon.html

  * igt@fbdev@read:
    - bat-arls-1:         NOTRUN -> [DMESG-FAIL][2] ([i915#12102])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@fbdev@read.html

  * igt@gem_huc_copy@huc-copy:
    - fi-cfl-8109u:       NOTRUN -> [SKIP][3] ([i915#2190])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/fi-cfl-8109u/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - bat-arls-1:         NOTRUN -> [SKIP][4] ([i915#10213]) +3 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@verify-random:
    - fi-cfl-8109u:       NOTRUN -> [SKIP][5] ([i915#4613]) +3 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/fi-cfl-8109u/igt@gem_lmem_swapping@verify-random.html

  * igt@gem_mmap@basic:
    - bat-arls-1:         NOTRUN -> [SKIP][6] ([i915#11343] / [i915#4083])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@gem_mmap@basic.html

  * igt@gem_render_tiled_blits@basic:
    - bat-arls-1:         NOTRUN -> [SKIP][7] ([i915#10197] / [i915#10211] / [i915#4079])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@gem_render_tiled_blits@basic.html

  * igt@gem_tiled_blits@basic:
    - bat-arls-1:         NOTRUN -> [SKIP][8] ([i915#10196] / [i915#4077]) +2 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@gem_tiled_blits@basic.html

  * igt@gem_tiled_pread_basic:
    - bat-arls-1:         NOTRUN -> [SKIP][9] ([i915#10206] / [i915#4079])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@gem_tiled_pread_basic.html

  * igt@i915_module_load@reload:
    - bat-apl-1:          [PASS][10] -> [DMESG-WARN][11] ([i915#180] / [i915#1982]) +3 other tests dmesg-warn
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-apl-1/igt@i915_module_load@reload.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-apl-1/igt@i915_module_load@reload.html

  * igt@i915_pm_rps@basic-api:
    - bat-arls-1:         NOTRUN -> [SKIP][12] ([i915#10209] / [i915#11681])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live:
    - bat-arls-1:         NOTRUN -> [DMESG-WARN][13] ([i915#10341] / [i915#12133])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@i915_selftest@live.html

  * igt@i915_selftest@live@hangcheck:
    - bat-arls-1:         NOTRUN -> [DMESG-WARN][14] ([i915#11349])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@sanitycheck:
    - bat-apl-1:          [PASS][15] -> [DMESG-WARN][16] ([i915#11621]) +79 other tests dmesg-warn
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-apl-1/igt@i915_selftest@live@sanitycheck.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-apl-1/igt@i915_selftest@live@sanitycheck.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - bat-arls-1:         NOTRUN -> [SKIP][17] ([i915#10200] / [i915#12203])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - bat-arls-1:         NOTRUN -> [SKIP][18] ([i915#10200]) +8 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_addfb_basic@basic-y-tiled-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-arls-1:         NOTRUN -> [SKIP][19] ([i915#10202] / [i915#11346]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_dsc@dsc-basic:
    - fi-cfl-8109u:       NOTRUN -> [SKIP][20] +11 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/fi-cfl-8109u/igt@kms_dsc@dsc-basic.html
    - bat-arls-1:         NOTRUN -> [SKIP][21] ([i915#11346] / [i915#9886])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_dsc@dsc-basic.html

  * igt@kms_flip@basic-flip-vs-wf_vblank@a-dp1:
    - bat-apl-1:          [PASS][22] -> [DMESG-WARN][23] ([i915#11621] / [i915#180] / [i915#1982])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-apl-1/igt@kms_flip@basic-flip-vs-wf_vblank@a-dp1.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-apl-1/igt@kms_flip@basic-flip-vs-wf_vblank@a-dp1.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-arls-1:         NOTRUN -> [SKIP][24] ([i915#10207] / [i915#11346])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pipe_crc_basic@nonblocking-crc:
    - bat-apl-1:          [PASS][25] -> [DMESG-WARN][26] ([i915#180]) +10 other tests dmesg-warn
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-apl-1/igt@kms_pipe_crc_basic@nonblocking-crc.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-apl-1/igt@kms_pipe_crc_basic@nonblocking-crc.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-arls-1:         NOTRUN -> [SKIP][27] ([i915#11346] / [i915#9812])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - bat-apl-1:          [PASS][28] -> [DMESG-WARN][29] ([i915#11621] / [i915#180]) +33 other tests dmesg-warn
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-apl-1/igt@kms_pm_rpm@basic-pci-d3-state.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-apl-1/igt@kms_pm_rpm@basic-pci-d3-state.html

  * igt@kms_psr@psr-primary-mmap-gtt:
    - bat-arls-1:         NOTRUN -> [SKIP][30] ([i915#11346] / [i915#9732]) +3 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_psr@psr-primary-mmap-gtt.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-arls-1:         NOTRUN -> [SKIP][31] ([i915#10208] / [i915#8809])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-read:
    - bat-arls-1:         NOTRUN -> [SKIP][32] ([i915#10212] / [i915#3708])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-gtt:
    - bat-arls-1:         NOTRUN -> [SKIP][33] ([i915#10196] / [i915#3708] / [i915#4077]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@prime_vgem@basic-gtt.html

  * igt@prime_vgem@basic-read:
    - bat-arls-1:         NOTRUN -> [SKIP][34] ([i915#10214] / [i915#3708])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@prime_vgem@basic-read.html

  * igt@prime_vgem@basic-write:
    - bat-arls-1:         NOTRUN -> [SKIP][35] ([i915#10216] / [i915#3708])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-1/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@i915_selftest@live:
    - bat-arlh-2:         [INCOMPLETE][36] ([i915#10341] / [i915#12133]) -> [PASS][37]
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-arlh-2/igt@i915_selftest@live.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arlh-2/igt@i915_selftest@live.html
    - bat-arls-2:         [DMESG-WARN][38] ([i915#10341] / [i915#12133]) -> [PASS][39]
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-arls-2/igt@i915_selftest@live.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-2/igt@i915_selftest@live.html

  * igt@i915_selftest@live@guc:
    - bat-arlh-2:         [INCOMPLETE][40] -> [PASS][41]
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-arlh-2/igt@i915_selftest@live@guc.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arlh-2/igt@i915_selftest@live@guc.html

  * igt@i915_selftest@live@hangcheck:
    - bat-arls-2:         [DMESG-WARN][42] ([i915#11349]) -> [PASS][43]
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-arls-2/igt@i915_selftest@live@hangcheck.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-arls-2/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@workarounds:
    - bat-mtlp-6:         [ABORT][44] ([i915#12061]) -> [PASS][45] +1 other test pass
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/bat-mtlp-6/igt@i915_selftest@live@workarounds.html

  
  [i915#10196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10196
  [i915#10197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10197
  [i915#10200]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10200
  [i915#10202]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10202
  [i915#10206]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10206
  [i915#10207]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10207
  [i915#10208]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10208
  [i915#10209]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10209
  [i915#10211]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10211
  [i915#10212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10212
  [i915#10213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10213
  [i915#10214]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10214
  [i915#10216]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10216
  [i915#10341]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10341
  [i915#11343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11343
  [i915#11346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11346
  [i915#11349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11349
  [i915#11621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11621
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12102
  [i915#12133]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12133
  [i915#12203]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12203
  [i915#180]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/180
  [i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
  [i915#9318]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9318
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9886]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9886


Build changes
-------------

  * Linux: CI_DRM_15389 -> Patchwork_138477v1

  CI-20190529: 20190529
  CI_DRM_15389: f25ffe1514b26574258bb767f5c6f53facdfaaca @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8011: 26dca87f1252b7f6f0c0f833050256f0244d61e9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_138477v1: f25ffe1514b26574258bb767f5c6f53facdfaaca @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/index.html

[-- Attachment #2: Type: text/html, Size: 16412 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* ✗ Fi.CI.IGT: failure for drm/i915/bios: Refactor ROM access
  2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
                   ` (7 preceding siblings ...)
  2024-09-10 17:46 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2024-09-11  9:10 ` Patchwork
  8 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-09-11  9:10 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 81799 bytes --]

== Series Details ==

Series: drm/i915/bios: Refactor ROM access
URL   : https://patchwork.freedesktop.org/series/138477/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_15389_full -> Patchwork_138477v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_138477v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_138477v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (9 -> 10)
------------------------------

  Additional (1): shard-snb-0 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_138477v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gem_mmap_offset@clear@smem0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][1] +2 other tests incomplete
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@gem_mmap_offset@clear@smem0.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20:
    - shard-rkl:          NOTRUN -> [SKIP][2] +1 other test skip
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20.html

  
New tests
---------

  New tests have been introduced between CI_DRM_15389_full and Patchwork_138477v1_full:

### New IGT tests (1) ###

  * igt@kms_cursor_crc@cursor-random-256x85@pipe-d-hdmi-a-2:
    - Statuses : 1 pass(s)
    - Exec time: [4.16] s

  

Known issues
------------

  Here are the changes found in Patchwork_138477v1_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-dg1:          NOTRUN -> [SKIP][3] ([i915#8411]) +1 other test skip
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@device_reset@unbind-cold-reset-rebind:
    - shard-dg1:          NOTRUN -> [SKIP][4] ([i915#11078])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@device_reset@unbind-cold-reset-rebind.html

  * igt@drm_fdinfo@busy-check-all@bcs0:
    - shard-dg1:          NOTRUN -> [SKIP][5] ([i915#8414]) +18 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@drm_fdinfo@busy-check-all@bcs0.html

  * igt@drm_fdinfo@isolation:
    - shard-dg2:          NOTRUN -> [SKIP][6] ([i915#8414]) +7 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@drm_fdinfo@isolation.html

  * igt@drm_fdinfo@most-busy-idle-check-all:
    - shard-rkl:          [PASS][7] -> [FAIL][8] ([i915#12179])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-rkl-1/igt@drm_fdinfo@most-busy-idle-check-all.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-5/igt@drm_fdinfo@most-busy-idle-check-all.html

  * igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
    - shard-rkl:          [PASS][9] -> [FAIL][10] ([i915#7742])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-rkl-1/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-5/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html

  * igt@gem_basic@multigpu-create-close:
    - shard-dg1:          NOTRUN -> [SKIP][11] ([i915#7697])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@gem_basic@multigpu-create-close.html

  * igt@gem_ccs@block-multicopy-compressed:
    - shard-dg1:          NOTRUN -> [SKIP][12] ([i915#9323])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_ccs@block-multicopy-compressed.html

  * igt@gem_ctx_persistence@heartbeat-close:
    - shard-mtlp:         NOTRUN -> [SKIP][13] ([i915#8555])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@gem_ctx_persistence@heartbeat-close.html

  * igt@gem_ctx_persistence@heartbeat-many:
    - shard-dg1:          NOTRUN -> [SKIP][14] ([i915#8555])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_ctx_persistence@heartbeat-many.html

  * igt@gem_ctx_persistence@hostile:
    - shard-rkl:          NOTRUN -> [FAIL][15] ([i915#11980])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@gem_ctx_persistence@hostile.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg2:          NOTRUN -> [SKIP][16] ([i915#280])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-dg1:          NOTRUN -> [SKIP][17] ([i915#280]) +1 other test skip
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_eio@unwedge-stress:
    - shard-dg1:          NOTRUN -> [FAIL][18] ([i915#5784])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@bonded-dual:
    - shard-dg2:          NOTRUN -> [SKIP][19] ([i915#4771])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@gem_exec_balancer@bonded-dual.html

  * igt@gem_exec_balancer@bonded-pair:
    - shard-dg1:          NOTRUN -> [SKIP][20] ([i915#4771])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_exec_balancer@bonded-pair.html

  * igt@gem_exec_balancer@bonded-semaphore:
    - shard-dg1:          NOTRUN -> [SKIP][21] ([i915#4812]) +5 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_exec_balancer@bonded-semaphore.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-dg1:          NOTRUN -> [SKIP][22] ([i915#4036])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_exec_balancer@invalid-bonds.html

  * igt@gem_exec_balancer@noheartbeat:
    - shard-dg2:          NOTRUN -> [SKIP][23] ([i915#8555])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@gem_exec_balancer@noheartbeat.html

  * igt@gem_exec_balancer@parallel:
    - shard-rkl:          NOTRUN -> [SKIP][24] ([i915#4525]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@gem_exec_balancer@parallel.html

  * igt@gem_exec_capture@capture-invisible:
    - shard-dg1:          NOTRUN -> [SKIP][25] ([i915#6334]) +2 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_exec_capture@capture-invisible.html

  * igt@gem_exec_fair@basic-none:
    - shard-dg1:          NOTRUN -> [SKIP][26] ([i915#3539] / [i915#4852]) +7 other tests skip
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_exec_fair@basic-none.html

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-glk:          NOTRUN -> [FAIL][27] ([i915#2842]) +1 other test fail
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk7/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@gem_exec_fair@basic-none-share:
    - shard-dg2:          NOTRUN -> [SKIP][28] ([i915#3539] / [i915#4852])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@gem_exec_fair@basic-none-share.html

  * igt@gem_exec_fair@basic-pace-share:
    - shard-tglu:         [PASS][29] -> [FAIL][30] ([i915#2842]) +1 other test fail
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-9/igt@gem_exec_fair@basic-pace-share.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-7/igt@gem_exec_fair@basic-pace-share.html

  * igt@gem_exec_fair@basic-sync:
    - shard-dg1:          NOTRUN -> [SKIP][31] ([i915#3539])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@gem_exec_fair@basic-sync.html

  * igt@gem_exec_reloc@basic-gtt-read-active:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#3281]) +2 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@gem_exec_reloc@basic-gtt-read-active.html

  * igt@gem_exec_reloc@basic-wc-read:
    - shard-dg1:          NOTRUN -> [SKIP][33] ([i915#3281]) +20 other tests skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@gem_exec_reloc@basic-wc-read.html

  * igt@gem_exec_reloc@basic-wc-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][34] ([i915#3281]) +9 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@gem_exec_reloc@basic-wc-read-noreloc.html

  * igt@gem_exec_reloc@basic-write-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][35] ([i915#3281])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@gem_exec_reloc@basic-write-gtt.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-dg2:          NOTRUN -> [SKIP][36] ([i915#4537] / [i915#4812]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_fence_thrash@bo-write-verify-y:
    - shard-dg2:          NOTRUN -> [SKIP][37] ([i915#4860]) +2 other tests skip
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@gem_fence_thrash@bo-write-verify-y.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-busy:
    - shard-dg1:          NOTRUN -> [SKIP][38] ([i915#4860]) +1 other test skip
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html

  * igt@gem_lmem_swapping@basic:
    - shard-rkl:          NOTRUN -> [SKIP][39] ([i915#4613]) +2 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@random-engines:
    - shard-glk:          NOTRUN -> [SKIP][40] ([i915#4613]) +2 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk3/igt@gem_lmem_swapping@random-engines.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-dg1:          NOTRUN -> [DMESG-WARN][41] ([i915#1982] / [i915#5493])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg2:          [PASS][42] -> [TIMEOUT][43] ([i915#5493]) +1 other test timeout
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-1/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-1/igt@gem_lmem_swapping@smem-oom@lmem0.html
    - shard-dg1:          NOTRUN -> [DMESG-WARN][44] ([i915#1982] / [i915#4936] / [i915#5493])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@gem_media_vme:
    - shard-mtlp:         NOTRUN -> [SKIP][45] ([i915#284])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@gem_media_vme.html

  * igt@gem_mmap@pf-nonblock:
    - shard-dg2:          NOTRUN -> [SKIP][46] ([i915#4083]) +1 other test skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@gem_mmap@pf-nonblock.html

  * igt@gem_mmap_gtt@medium-copy-xy:
    - shard-dg2:          NOTRUN -> [SKIP][47] ([i915#4077]) +6 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@gem_mmap_gtt@medium-copy-xy.html

  * igt@gem_mmap_wc@write-read:
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#4083]) +9 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_mmap_wc@write-read.html

  * igt@gem_partial_pwrite_pread@reads-snoop:
    - shard-mtlp:         NOTRUN -> [SKIP][49] ([i915#3282])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@gem_partial_pwrite_pread@reads-snoop.html

  * igt@gem_partial_pwrite_pread@write:
    - shard-dg2:          NOTRUN -> [SKIP][50] ([i915#3282])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@gem_partial_pwrite_pread@write.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-rkl:          NOTRUN -> [SKIP][51] ([i915#3282]) +3 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-dg1:          NOTRUN -> [SKIP][52] ([i915#3282]) +5 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@create-regular-context-2:
    - shard-dg2:          NOTRUN -> [SKIP][53] ([i915#4270]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@gem_pxp@create-regular-context-2.html

  * igt@gem_pxp@verify-pxp-key-change-after-suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][54] ([i915#4270]) +6 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_pxp@verify-pxp-key-change-after-suspend-resume.html

  * igt@gem_pxp@verify-pxp-stale-buf-optout-execution:
    - shard-rkl:          NOTRUN -> [SKIP][55] ([i915#4270])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@gem_pxp@verify-pxp-stale-buf-optout-execution.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][56] ([i915#5190] / [i915#8428]) +2 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html

  * igt@gem_set_tiling_vs_blt@tiled-to-untiled:
    - shard-dg2:          NOTRUN -> [SKIP][57] ([i915#4079])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-rkl:          NOTRUN -> [SKIP][58] ([i915#8411])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_softpin@evict-snoop:
    - shard-dg1:          NOTRUN -> [SKIP][59] ([i915#4885])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@gem_softpin@evict-snoop.html

  * igt@gem_tiled_partial_pwrite_pread@writes-after-reads:
    - shard-dg1:          NOTRUN -> [SKIP][60] ([i915#4077]) +22 other tests skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@gem_tiled_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_tiled_pread_pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][61] ([i915#4079]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_tiled_pread_pwrite.html

  * igt@gem_userptr_blits@invalid-mmap-offset-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][62] ([i915#3297])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html

  * igt@gem_userptr_blits@map-fixed-invalidate-overlap:
    - shard-dg1:          NOTRUN -> [SKIP][63] ([i915#3297] / [i915#4880])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_userptr_blits@map-fixed-invalidate-overlap.html

  * igt@gem_userptr_blits@relocations:
    - shard-rkl:          NOTRUN -> [SKIP][64] ([i915#3281] / [i915#3297])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@gem_userptr_blits@relocations.html

  * igt@gem_userptr_blits@sd-probe:
    - shard-dg1:          NOTRUN -> [SKIP][65] ([i915#3297] / [i915#4958])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@gem_userptr_blits@sd-probe.html

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-dg1:          NOTRUN -> [SKIP][66] ([i915#3297]) +2 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-rkl:          NOTRUN -> [SKIP][67] ([i915#3297]) +2 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@gem_userptr_blits@unsync-unmap-cycles.html

  * igt@gen7_exec_parse@chained-batch:
    - shard-rkl:          NOTRUN -> [SKIP][68] +21 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@gen7_exec_parse@chained-batch.html

  * igt@gen9_exec_parse@basic-rejected:
    - shard-dg2:          NOTRUN -> [SKIP][69] ([i915#2856])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@bb-start-out:
    - shard-dg1:          NOTRUN -> [SKIP][70] ([i915#2527]) +5 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@gen9_exec_parse@bb-start-out.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-rkl:          NOTRUN -> [SKIP][71] ([i915#2527]) +1 other test skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@gen9_exec_parse@valid-registers.html

  * igt@i915_module_load@load:
    - shard-dg1:          NOTRUN -> [SKIP][72] ([i915#6227])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg2:          [PASS][73] -> [ABORT][74] ([i915#9820])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-8/igt@i915_module_load@reload-with-fault-injection.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-rkl:          NOTRUN -> [SKIP][75] ([i915#8399])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_pm_rps@min-max-config-loaded:
    - shard-dg1:          NOTRUN -> [SKIP][76] ([i915#11681] / [i915#6621])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@i915_pm_rps@min-max-config-loaded.html

  * igt@i915_pm_rps@thresholds-idle-park:
    - shard-dg2:          NOTRUN -> [SKIP][77] ([i915#11681])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@i915_pm_rps@thresholds-idle-park.html

  * igt@i915_pm_sseu@full-enable:
    - shard-dg1:          NOTRUN -> [SKIP][78] ([i915#4387])
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@i915_pm_sseu@full-enable.html

  * igt@i915_query@test-query-geometry-subslices:
    - shard-dg1:          NOTRUN -> [SKIP][79] ([i915#5723])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@i915_query@test-query-geometry-subslices.html

  * igt@i915_selftest@live@workarounds:
    - shard-mtlp:         [PASS][80] -> [ABORT][81] ([i915#12061]) +1 other test abort
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-mtlp-1/igt@i915_selftest@live@workarounds.html
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-6/igt@i915_selftest@live@workarounds.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - shard-dg1:          NOTRUN -> [SKIP][82] ([i915#4215])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_addfb_basic@basic-y-tiled-legacy.html

  * igt@kms_addfb_basic@tile-pitch-mismatch:
    - shard-dg1:          NOTRUN -> [SKIP][83] ([i915#4212]) +1 other test skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_addfb_basic@tile-pitch-mismatch.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-4-y-rc-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][84] ([i915#8709]) +7 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-18/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-4-y-rc-ccs.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-dp-4-4-rc-ccs-cc:
    - shard-dg2:          NOTRUN -> [SKIP][85] ([i915#8709]) +11 other tests skip
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-dp-4-4-rc-ccs-cc.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-dg1:          NOTRUN -> [SKIP][86] ([i915#9531])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-dg1:          NOTRUN -> [SKIP][87] ([i915#1769] / [i915#3555])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-0:
    - shard-rkl:          NOTRUN -> [SKIP][88] ([i915#5286]) +4 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#5286]) +2 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][90] ([i915#4538] / [i915#5286]) +4 other tests skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][91] ([i915#3638]) +1 other test skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_big_fb@x-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-0:
    - shard-mtlp:         NOTRUN -> [SKIP][92] +1 other test skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-270:
    - shard-dg2:          NOTRUN -> [SKIP][93] ([i915#4538] / [i915#5190]) +4 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@kms_big_fb@y-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-270:
    - shard-dg1:          NOTRUN -> [SKIP][94] ([i915#3638]) +2 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-dg2:          NOTRUN -> [SKIP][95] ([i915#5190])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][96] ([i915#4538]) +9 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_joiner@basic-force-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][97] ([i915#10656])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_big_joiner@basic-force-joiner.html

  * igt@kms_big_joiner@invalid-modeset:
    - shard-dg1:          NOTRUN -> [SKIP][98] ([i915#10656])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@kms_big_joiner@invalid-modeset.html

  * igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][99] ([i915#10307] / [i915#10434] / [i915#6095]) +4 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][100] ([i915#6095]) +148 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][101] ([i915#6095]) +60 other tests skip
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][102] ([i915#10307] / [i915#6095]) +142 other tests skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_ccs@ccs-on-another-bo-y-tiled-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][103] ([i915#12042])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][104] ([i915#12042]) +4 other tests skip
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-rkl:          NOTRUN -> [SKIP][105] ([i915#3742])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - shard-dg2:          NOTRUN -> [SKIP][106] ([i915#7828]) +3 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_chamelium_hpd@dp-hpd-fast:
    - shard-mtlp:         NOTRUN -> [SKIP][107] ([i915#7828])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_chamelium_hpd@dp-hpd-fast.html

  * igt@kms_chamelium_hpd@hdmi-hpd-fast:
    - shard-rkl:          NOTRUN -> [SKIP][108] ([i915#7828]) +5 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_chamelium_hpd@hdmi-hpd-fast.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-dg1:          NOTRUN -> [SKIP][109] ([i915#7828]) +12 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_content_protection@atomic:
    - shard-dg1:          NOTRUN -> [SKIP][110] ([i915#7116] / [i915#9424]) +1 other test skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@content-type-change:
    - shard-dg2:          NOTRUN -> [SKIP][111] ([i915#9424])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-rkl:          NOTRUN -> [SKIP][112] ([i915#3116])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg1:          NOTRUN -> [SKIP][113] ([i915#3299])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-dg2:          NOTRUN -> [SKIP][114] ([i915#3299])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@legacy:
    - shard-rkl:          NOTRUN -> [SKIP][115] ([i915#7118] / [i915#9424])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@lic-type-0:
    - shard-dg1:          NOTRUN -> [SKIP][116] ([i915#9424])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_content_protection@lic-type-0.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-dg1:          NOTRUN -> [SKIP][117] ([i915#11453]) +1 other test skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_cursor_crc@cursor-offscreen-512x170.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2:          NOTRUN -> [SKIP][118] ([i915#11453] / [i915#3359])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-rkl:          NOTRUN -> [SKIP][119] ([i915#11453]) +2 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-dg2:          NOTRUN -> [SKIP][120] ([i915#3555])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-max-size:
    - shard-mtlp:         NOTRUN -> [SKIP][121] ([i915#3555] / [i915#8814])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-5/igt@kms_cursor_crc@cursor-sliding-max-size.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-rkl:          NOTRUN -> [SKIP][122] ([i915#4103])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
    - shard-mtlp:         NOTRUN -> [SKIP][123] ([i915#9809])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-glk:          [PASS][124] -> [FAIL][125] ([i915#2346])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-dg2:          NOTRUN -> [SKIP][126] ([i915#4103] / [i915#4213])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_cursor_legacy@torture-move:
    - shard-dg1:          [PASS][127] -> [DMESG-WARN][128] ([i915#10166]) +1 other test dmesg-warn
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg1-15/igt@kms_cursor_legacy@torture-move.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_cursor_legacy@torture-move.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-dg1:          NOTRUN -> [SKIP][129] ([i915#9723]) +1 other test skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#8588])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_draw_crc@draw-method-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][131] ([i915#8812])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_draw_crc@draw-method-mmap-wc.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc:
    - shard-dg1:          NOTRUN -> [SKIP][132] ([i915#3840])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-dg1:          NOTRUN -> [SKIP][133] ([i915#3555] / [i915#3840]) +2 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg1:          NOTRUN -> [SKIP][134] ([i915#3469])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@chamelium:
    - shard-dg2:          NOTRUN -> [SKIP][135] ([i915#4854])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-2x:
    - shard-dg1:          NOTRUN -> [SKIP][136] ([i915#1839])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_feature_discovery@display-2x.html

  * igt@kms_feature_discovery@display-4x:
    - shard-rkl:          NOTRUN -> [SKIP][137] ([i915#1839])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-dg2:          NOTRUN -> [SKIP][138] ([i915#9337])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_fence_pin_leak:
    - shard-dg1:          NOTRUN -> [SKIP][139] ([i915#4881]) +1 other test skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_fence_pin_leak.html

  * igt@kms_flip@2x-absolute-wf_vblank:
    - shard-dg2:          NOTRUN -> [SKIP][140] +8 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@kms_flip@2x-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-fences-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][141] ([i915#8381])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_flip@2x-flip-vs-fences-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][142] ([i915#9934]) +10 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@2x-wf_vblank-ts-check:
    - shard-mtlp:         NOTRUN -> [SKIP][143] ([i915#3637])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_flip@2x-wf_vblank-ts-check.html

  * igt@kms_flip@flip-vs-fences:
    - shard-dg2:          NOTRUN -> [SKIP][144] ([i915#8381]) +1 other test skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_flip@flip-vs-fences.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-snb:          [PASS][145] -> [INCOMPLETE][146] ([i915#4839]) +1 other test incomplete
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-snb1/igt@kms_flip@flip-vs-suspend-interruptible.html
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-snb1/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
    - shard-dg2:          NOTRUN -> [SKIP][147] ([i915#2672] / [i915#3555])
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][148] ([i915#2672]) +3 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][149] ([i915#2587] / [i915#2672]) +7 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-rkl:          NOTRUN -> [SKIP][150] ([i915#2672] / [i915#3555]) +3 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][151] ([i915#2672] / [i915#3555]) +7 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling:
    - shard-dg2:          NOTRUN -> [SKIP][152] ([i915#2672] / [i915#3555] / [i915#5190]) +1 other test skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][153] ([i915#2672]) +2 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-valid-mode.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff:
    - shard-dg2:          [PASS][154] -> [FAIL][155] ([i915#6880])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff.html
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][156] +73 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
    - shard-mtlp:         NOTRUN -> [SKIP][157] ([i915#1825]) +1 other test skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move:
    - shard-rkl:          NOTRUN -> [SKIP][158] ([i915#3023]) +15 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][159] ([i915#5354]) +15 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
    - shard-rkl:          NOTRUN -> [SKIP][160] ([i915#1825]) +21 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-indfb-scaledprimary:
    - shard-snb:          NOTRUN -> [SKIP][161] +14 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-snb4/igt@kms_frontbuffer_tracking@fbcpsr-indfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][162] ([i915#3458]) +7 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][163] ([i915#3458]) +24 other tests skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][164] ([i915#8708]) +6 other tests skip
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][165] ([i915#8708]) +39 other tests skip
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#3555] / [i915#8228])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_hdr@invalid-metadata-sizes.html

  * igt@kms_hdr@static-swap:
    - shard-dg1:          NOTRUN -> [SKIP][167] ([i915#3555] / [i915#8228]) +2 other tests skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_hdr@static-swap.html

  * igt@kms_hdr@static-toggle-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][168] ([i915#3555] / [i915#8228])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_hdr@static-toggle-dpms.html

  * igt@kms_panel_fitting@legacy:
    - shard-rkl:          NOTRUN -> [SKIP][169] ([i915#6301])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_panel_fitting@legacy.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb:
    - shard-glk:          NOTRUN -> [FAIL][170] ([i915#12169])
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk5/igt@kms_plane_alpha_blend@alpha-opaque-fb.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [FAIL][171] ([i915#10647]) +1 other test fail
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk5/igt@kms_plane_alpha_blend@alpha-opaque-fb@pipe-a-hdmi-a-1.html

  * igt@kms_plane_multiple@tiling-4:
    - shard-rkl:          NOTRUN -> [SKIP][172] ([i915#3555]) +4 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_plane_multiple@tiling-4.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-dg1:          NOTRUN -> [SKIP][173] ([i915#3555]) +8 other tests skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [FAIL][174] ([i915#8292])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-4.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][175] ([i915#9423]) +28 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-5/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-3.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][176] ([i915#9423]) +3 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][177] ([i915#9423]) +26 other tests skip
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-d-hdmi-a-4.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation:
    - shard-glk:          NOTRUN -> [SKIP][178] +194 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk5/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25:
    - shard-rkl:          NOTRUN -> [SKIP][179] ([i915#6953])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][180] ([i915#9728]) +7 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25:
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#3555] / [i915#9423])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25:
    - shard-dg1:          NOTRUN -> [SKIP][182] ([i915#6953]) +1 other test skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][183] ([i915#9728]) +15 other tests skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-4.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-dg1:          NOTRUN -> [SKIP][184] ([i915#5354]) +1 other test skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_backlight@fade-with-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][185] ([i915#5354])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_pm_backlight@fade-with-suspend.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-rkl:          [PASS][186] -> [SKIP][187] ([i915#9340])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-rkl-4/igt@kms_pm_lpsp@kms-lpsp.html
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-1/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-dg2:          NOTRUN -> [SKIP][188] ([i915#8430])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg2:          [PASS][189] -> [SKIP][190] ([i915#9519]) +3 other tests skip
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-11/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-dg1:          NOTRUN -> [SKIP][191] ([i915#9519])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_prime@d3hot:
    - shard-dg1:          NOTRUN -> [SKIP][192] ([i915#6524]) +1 other test skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@cursor-plane-move-continuous-sf:
    - shard-dg1:          NOTRUN -> [SKIP][193] ([i915#11520]) +5 other tests skip
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-17/igt@kms_psr2_sf@cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf:
    - shard-dg2:          NOTRUN -> [SKIP][194] ([i915#11520]) +3 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@fbc-primary-plane-update-sf-dmg-area:
    - shard-rkl:          NOTRUN -> [SKIP][195] ([i915#11520]) +3 other tests skip
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@kms_psr2_sf@fbc-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-dg1:          NOTRUN -> [SKIP][196] ([i915#9683])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@fbc-psr2-cursor-blt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][197] ([i915#9688]) +3 other tests skip
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_psr@fbc-psr2-cursor-blt@edp-1.html

  * igt@kms_psr@fbc-psr2-sprite-render:
    - shard-rkl:          NOTRUN -> [SKIP][198] ([i915#1072] / [i915#9732]) +14 other tests skip
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_psr@fbc-psr2-sprite-render.html

  * igt@kms_psr@pr-primary-render:
    - shard-dg2:          NOTRUN -> [SKIP][199] ([i915#1072] / [i915#9732]) +4 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@kms_psr@pr-primary-render.html

  * igt@kms_psr@psr2-cursor-blt:
    - shard-dg2:          NOTRUN -> [SKIP][200] ([i915#1072] / [i915#9673] / [i915#9732]) +4 other tests skip
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_psr@psr2-cursor-blt.html

  * igt@kms_psr@psr2-sprite-blt:
    - shard-dg1:          NOTRUN -> [SKIP][201] ([i915#1072] / [i915#9732]) +34 other tests skip
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_psr@psr2-sprite-blt.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-dg1:          NOTRUN -> [SKIP][202] ([i915#9685]) +1 other test skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-dg1:          NOTRUN -> [SKIP][203] ([i915#5289]) +1 other test skip
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-mtlp:         NOTRUN -> [SKIP][204] ([i915#3555] / [i915#8809] / [i915#8823])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-dg1:          NOTRUN -> [SKIP][205] ([i915#8623])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_universal_plane@cursor-fb-leak:
    - shard-dg1:          NOTRUN -> [FAIL][206] ([i915#9196]) +1 other test fail
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_universal_plane@cursor-fb-leak.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1:
    - shard-tglu:         [PASS][207] -> [FAIL][208] ([i915#9196]) +1 other test fail
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-8/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-5/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-dg1:          NOTRUN -> [SKIP][209] ([i915#9906])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#9906])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@kms_writeback@writeback-check-output:
    - shard-dg1:          NOTRUN -> [SKIP][211] ([i915#2437])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_writeback@writeback-check-output.html

  * igt@kms_writeback@writeback-check-output-xrgb2101010:
    - shard-rkl:          NOTRUN -> [SKIP][212] ([i915#2437] / [i915#9412])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@kms_writeback@writeback-check-output-xrgb2101010.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-glk:          NOTRUN -> [SKIP][213] ([i915#2437])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk3/igt@kms_writeback@writeback-fb-id.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-dg1:          NOTRUN -> [SKIP][214] ([i915#2437] / [i915#9412])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@non-zero-reason:
    - shard-dg2:          NOTRUN -> [FAIL][215] ([i915#9100]) +1 other test fail
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@perf@non-zero-reason.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-dg1:          NOTRUN -> [SKIP][216] ([i915#8850])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@perf_pmu@cpu-hotplug.html

  * igt@perf_pmu@module-unload:
    - shard-dg2:          NOTRUN -> [FAIL][217] ([i915#11823])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-3/igt@perf_pmu@module-unload.html

  * igt@prime_vgem@basic-fence-mmap:
    - shard-dg1:          NOTRUN -> [SKIP][218] ([i915#3708] / [i915#4077])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-read:
    - shard-rkl:          NOTRUN -> [SKIP][219] ([i915#3291] / [i915#3708])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-2/igt@prime_vgem@basic-read.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-dg1:          NOTRUN -> [SKIP][220] ([i915#3708]) +2 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-16/igt@prime_vgem@fence-flip-hang.html

  * igt@prime_vgem@fence-write-hang:
    - shard-rkl:          NOTRUN -> [SKIP][221] ([i915#3708])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@prime_vgem@fence-write-hang.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-dg1:          NOTRUN -> [SKIP][222] ([i915#9917])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-13/igt@sriov_basic@enable-vfs-autoprobe-on.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-rkl:          NOTRUN -> [SKIP][223] ([i915#9917]) +1 other test skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-6/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-mtlp:         NOTRUN -> [FAIL][224] ([i915#9781])
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@syncobj_wait@invalid-wait-zero-handles.html
    - shard-snb:          NOTRUN -> [FAIL][225] ([i915#9781])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-snb4/igt@syncobj_wait@invalid-wait-zero-handles.html
    - shard-glk:          NOTRUN -> [FAIL][226] ([i915#9781])
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk7/igt@syncobj_wait@invalid-wait-zero-handles.html

  * igt@tools_test@sysfs_l3_parity:
    - shard-dg1:          NOTRUN -> [SKIP][227] ([i915#4818])
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-15/igt@tools_test@sysfs_l3_parity.html

  
#### Possible fixes ####

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-glk:          [FAIL][228] ([i915#2842]) -> [PASS][229] +1 other test pass
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk9/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk8/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-pace-solo:
    - shard-rkl:          [FAIL][230] ([i915#2842]) -> [PASS][231] +2 other tests pass
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-rkl-2/igt@gem_exec_fair@basic-pace-solo.html
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-4/igt@gem_exec_fair@basic-pace-solo.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-glk:          [ABORT][232] ([i915#5566]) -> [PASS][233]
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk7/igt@gen9_exec_parse@allowed-all.html
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk8/igt@gen9_exec_parse@allowed-all.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [ABORT][234] ([i915#9820]) -> [PASS][235]
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-snb2/igt@i915_module_load@reload-with-fault-injection.html
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-snb4/igt@i915_module_load@reload-with-fault-injection.html
    - shard-mtlp:         [ABORT][236] ([i915#10131] / [i915#9820]) -> [PASS][237]
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-mtlp-1/igt@i915_module_load@reload-with-fault-injection.html
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@kms_atomic_transition@modeset-transition-fencing:
    - shard-glk:          [FAIL][238] -> [PASS][239]
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk8/igt@kms_atomic_transition@modeset-transition-fencing.html
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk2/igt@kms_atomic_transition@modeset-transition-fencing.html

  * igt@kms_atomic_transition@modeset-transition-fencing@2x-outputs:
    - shard-glk:          [FAIL][240] ([i915#11859]) -> [PASS][241]
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk8/igt@kms_atomic_transition@modeset-transition-fencing@2x-outputs.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk2/igt@kms_atomic_transition@modeset-transition-fencing@2x-outputs.html

  * igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-4:
    - shard-dg1:          [FAIL][242] ([i915#5956]) -> [PASS][243] +1 other test pass
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg1-18/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-4.html
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg1-18/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-4.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition:
    - shard-snb:          [FAIL][244] ([i915#5956]) -> [PASS][245] +1 other test pass
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-snb5/igt@kms_atomic_transition@plane-toggle-modeset-transition.html
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-snb5/igt@kms_atomic_transition@plane-toggle-modeset-transition.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-glk:          [FAIL][246] ([i915#2346]) -> [PASS][247]
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk9/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_cursor_legacy@torture-bo:
    - shard-mtlp:         [INCOMPLETE][248] -> [PASS][249] +1 other test pass
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-mtlp-1/igt@kms_cursor_legacy@torture-bo.html
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-5/igt@kms_cursor_legacy@torture-bo.html

  * igt@kms_cursor_legacy@torture-move:
    - shard-tglu:         [DMESG-WARN][250] ([i915#10166]) -> [PASS][251]
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-7/igt@kms_cursor_legacy@torture-move.html
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-10/igt@kms_cursor_legacy@torture-move.html

  * igt@kms_cursor_legacy@torture-move@pipe-a:
    - shard-tglu:         [DMESG-WARN][252] ([i915#10166] / [i915#1982]) -> [PASS][253]
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-7/igt@kms_cursor_legacy@torture-move@pipe-a.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-10/igt@kms_cursor_legacy@torture-move@pipe-a.html

  * igt@kms_dither@fb-8bpc-vs-panel-8bpc:
    - shard-dg2:          [SKIP][254] ([i915#3555]) -> [PASS][255]
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-7/igt@kms_dither@fb-8bpc-vs-panel-8bpc.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_dither@fb-8bpc-vs-panel-8bpc.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@a-vga1:
    - shard-snb:          [FAIL][256] ([i915#2122]) -> [PASS][257] +1 other test pass
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-snb7/igt@kms_flip@wf_vblank-ts-check-interruptible@a-vga1.html
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-snb1/igt@kms_flip@wf_vblank-ts-check-interruptible@a-vga1.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-tglu:         [FAIL][258] ([i915#9295]) -> [PASS][259]
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-7/igt@kms_pm_dc@dc6-dpms.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-6/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu:         [SKIP][260] ([i915#4281]) -> [PASS][261]
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-6/igt@kms_pm_dc@dc9-dpms.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-6/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-rkl:          [SKIP][262] ([i915#9519]) -> [PASS][263] +1 other test pass
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-rkl-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-rkl-3/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_universal_plane@cursor-fb-leak:
    - shard-mtlp:         [FAIL][264] ([i915#9196]) -> [PASS][265] +1 other test pass
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-mtlp-6/igt@kms_universal_plane@cursor-fb-leak.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-2/igt@kms_universal_plane@cursor-fb-leak.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1:
    - shard-tglu:         [FAIL][266] ([i915#9196]) -> [PASS][267]
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-8/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-5/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html

  * igt@kms_vblank@query-forked-hang:
    - shard-dg2:          [INCOMPLETE][268] -> [PASS][269] +2 other tests pass
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-4/igt@kms_vblank@query-forked-hang.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@kms_vblank@query-forked-hang.html

  
#### Warnings ####

  * igt@gem_ctx_engines@invalid-engines:
    - shard-tglu:         [FAIL][270] ([i915#12031]) -> [FAIL][271] ([i915#12027])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-tglu-7/igt@gem_ctx_engines@invalid-engines.html
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-tglu-6/igt@gem_ctx_engines@invalid-engines.html

  * igt@kms_big_fb@x-tiled-8bpp-rotate-270:
    - shard-mtlp:         [ABORT][272] ([i915#10354]) -> [SKIP][273]
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-mtlp-2/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-mtlp-1/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-dg2:          [SKIP][274] ([i915#11453]) -> [SKIP][275] ([i915#11453] / [i915#3359])
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-7/igt@kms_cursor_crc@cursor-sliding-512x512.html
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_frontbuffer_tracking@fbcpsr-suspend:
    - shard-dg2:          [SKIP][276] ([i915#10433] / [i915#3458]) -> [SKIP][277] ([i915#3458]) +2 other tests skip
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-8/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html

  * igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
    - shard-dg2:          [SKIP][278] ([i915#3458]) -> [SKIP][279] ([i915#10433] / [i915#3458]) +2 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-5/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-dg2:          [FAIL][280] ([i915#8292]) -> [SKIP][281] ([i915#6953] / [i915#9423])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-11/igt@kms_plane_scaling@intel-max-src-size.html
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_psr@fbc-psr2-sprite-mmap-cpu:
    - shard-dg2:          [SKIP][282] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][283] ([i915#1072] / [i915#9732]) +4 other tests skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-11/igt@kms_psr@fbc-psr2-sprite-mmap-cpu.html
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_psr@fbc-psr2-sprite-mmap-cpu.html

  * igt@kms_psr@psr-cursor-render:
    - shard-dg2:          [SKIP][284] ([i915#1072] / [i915#9732]) -> [SKIP][285] ([i915#1072] / [i915#9673] / [i915#9732]) +4 other tests skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-7/igt@kms_psr@psr-cursor-render.html
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-11/igt@kms_psr@psr-cursor-render.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-dg2:          [SKIP][286] ([i915#11131] / [i915#4235]) -> [SKIP][287] ([i915#11131])
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-11/igt@kms_rotation_crc@bad-tiling.html
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-dg2:          [SKIP][288] ([i915#11131] / [i915#4235] / [i915#5190]) -> [SKIP][289] ([i915#11131] / [i915#5190])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-dg2-11/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-dg2-2/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-glk:          [FAIL][290] ([i915#10959]) -> [SKIP][291]
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15389/shard-glk4/igt@kms_tiled_display@basic-test-pattern.html
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/shard-glk8/igt@kms_tiled_display@basic-test-pattern.html

  
  [i915#10131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10131
  [i915#10166]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10166
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10354
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647
  [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#10959]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10959
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11131
  [i915#11453]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11453
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#11823]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11823
  [i915#11859]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11859
  [i915#11980]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11980
  [i915#12027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12027
  [i915#12031]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12031
  [i915#12042]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12042
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12169
  [i915#12179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12179
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
  [i915#1982]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1982
  [i915#2122]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2122
  [i915#2346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2346
  [i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#4036]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4036
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
  [i915#4215]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4215
  [i915#4235]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4281
  [i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4537]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4537
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4818]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4818
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4854
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880
  [i915#4881]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4881
  [i915#4885]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4885
  [i915#4936]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4936
  [i915#4958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4958
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493
  [i915#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#5784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5784
  [i915#5956]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5956
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6227]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6227
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621
  [i915#6880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6880
  [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
  [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8292]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8292
  [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8414
  [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
  [i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
  [i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
  [i915#8588]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8588
  [i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#8709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8709
  [i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
  [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
  [i915#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814
  [i915#8823]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8823
  [i915#8850]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8850
  [i915#9100]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9100
  [i915#9196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9196
  [i915#9295]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9295
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
  [i915#9340]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9340
  [i915#9412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9412
  [i915#9423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9423
  [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
  [i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519
  [i915#9531]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9531
  [i915#9673]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9673
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [i915#9728]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9728
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9781
  [i915#9809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9809
  [i915#9820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9820
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


Build changes
-------------

  * Linux: CI_DRM_15389 -> Patchwork_138477v1

  CI-20190529: 20190529
  CI_DRM_15389: f25ffe1514b26574258bb767f5c6f53facdfaaca @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8011: 26dca87f1252b7f6f0c0f833050256f0244d61e9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_138477v1: f25ffe1514b26574258bb767f5c6f53facdfaaca @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_138477v1/index.html

[-- Attachment #2: Type: text/html, Size: 100064 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read
  2024-09-10 13:42 ` [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read Ville Syrjala
@ 2024-09-12 11:56   ` Jani Nikula
  0 siblings, 0 replies; 23+ messages in thread
From: Jani Nikula @ 2024-09-12 11:56 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: intel-xe

On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Unify the SPI vs. PCI ROM VBT read codepaths a bit by
> pulling some size overflow checks from the PCI side
> into the SPI side.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index cd32c9cd38a9..86b81fd23f58 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -3088,11 +3088,22 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  	if (count >= oprom_size)
>  		goto err_not_found;
>  
> +	if (sizeof(struct vbt_header) > oprom_size - count) {
> +		drm_dbg(display->drm, "VBT header incomplete\n");
> +		goto err_not_found;
> +	}
> +
>  	/* Get VBT size and allocate space for the VBT */
>  	vbt_size = intel_spi_read(&i915->uncore,
>  				  found + offsetof(struct vbt_header, vbt_size));
>  	vbt_size &= 0xffff;
>  
> +	if (vbt_size > oprom_size - count) {
> +		drm_dbg(display->drm,
> +			"VBT incomplete (vbt_size overflows)\n");
> +		goto err_not_found;
> +	}
> +
>  	vbt = kzalloc(round_up(vbt_size, 4), GFP_KERNEL);
>  	if (!vbt)
>  		goto err_not_found;

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 2/5] drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4
  2024-09-10 13:42 ` [PATCH 2/5] drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4 Ville Syrjala
@ 2024-09-12 11:57   ` Jani Nikula
  0 siblings, 0 replies; 23+ messages in thread
From: Jani Nikula @ 2024-09-12 11:57 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: intel-xe

On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> The SPI code rounds the VBT allocation to a multiple of four bytes
> (presumably because it reads the VBT 4 bytes at a time). Do the
> same for the PCI ROM side to eliminate pointless differences between
> the two codepaths. This will make no functional difference.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index 86b81fd23f58..cc4a4cc2bf3e 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -3166,7 +3166,7 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
>  	}
>  
>  	/* The rest will be validated by intel_bios_is_valid_vbt() */
> -	vbt = kmalloc(vbt_size, GFP_KERNEL);
> +	vbt = kmalloc(round_up(vbt_size, 4), GFP_KERNEL);
>  	if (!vbt)
>  		goto err_unmap_oprom;

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16()
  2024-09-10 13:42 ` [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16() Ville Syrjala
@ 2024-09-12 12:02   ` Jani Nikula
  2024-09-20 17:00     ` Ville Syrjälä
  0 siblings, 1 reply; 23+ messages in thread
From: Jani Nikula @ 2024-09-12 12:02 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: intel-xe

On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> The SPI VBT codepath only knows how to read 4 bytes at a time.
> So to read the 2 byte vbt_size it masks out the unwanted msbs.
> Hide that little implementation detail inside a new intel_spi_read16()
> helper. Alse rename the existing intel_spi_read() to intel_spi_read32()
> to make it clear what it does.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index cc4a4cc2bf3e..cbbda94c3dab 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -3053,13 +3053,18 @@ static struct vbt_header *firmware_get_vbt(struct intel_display *display,
>  	return vbt;
>  }
>  
> -static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
> +static u32 intel_spi_read32(struct intel_uncore *uncore, u32 offset)
>  {
>  	intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
>  
>  	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
>  }
>  
> +static u16 intel_spi_read16(struct intel_uncore *uncore, u32 offset)
> +{
> +	return intel_spi_read32(uncore, offset) & 0xffff;
> +}
> +
>  static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  					    size_t *size)
>  {
> @@ -3078,7 +3083,7 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  	oprom_offset &= OROM_OFFSET_MASK;
>  
>  	for (count = 0; count < oprom_size; count += 4) {
> -		data = intel_spi_read(&i915->uncore, oprom_offset + count);
> +		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
>  		if (data == *((const u32 *)"$VBT")) {
>  			found = oprom_offset + count;
>  			break;
> @@ -3094,9 +3099,8 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  	}
>  
>  	/* Get VBT size and allocate space for the VBT */
> -	vbt_size = intel_spi_read(&i915->uncore,
> -				  found + offsetof(struct vbt_header, vbt_size));
> -	vbt_size &= 0xffff;
> +	vbt_size = intel_spi_read16(&i915->uncore,
> +				    found + offsetof(struct vbt_header, vbt_size));

Pedantically if vbt_size was the last member of struct vbt_header this
could read past the checked size, but it's not and meh. Also nothing to
do with this change, apart from this hiding the detail. Still meh.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


>  
>  	if (vbt_size > oprom_size - count) {
>  		drm_dbg(display->drm,
> @@ -3109,7 +3113,7 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  		goto err_not_found;
>  
>  	for (count = 0; count < vbt_size; count += 4)
> -		*(vbt + store++) = intel_spi_read(&i915->uncore, found + count);
> +		*(vbt + store++) = intel_spi_read32(&i915->uncore, found + count);
>  
>  	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
>  		goto err_free_vbt;

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-10 13:42 ` [PATCH 4/5] drm/i915/bios: Extract vbt_signature[] Ville Syrjala
@ 2024-09-12 12:15   ` Jani Nikula
  2024-09-20 16:59     ` Ville Syrjälä
  0 siblings, 1 reply; 23+ messages in thread
From: Jani Nikula @ 2024-09-12 12:15 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: intel-xe

On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Replace the three hand rolled "$VBT"s with a vbt_signature[]
> to avoid accidents.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index cbbda94c3dab..0b92b494117f 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
>  	return _vbt + vbt->bdb_offset;
>  }
>  
> +static const char vbt_signature[4] = "$VBT";

Always a bit scary to add strings without termination, but I guess it's
justified here.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


> +
>  /**
>   * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
>   * @display:	display device
> @@ -2986,7 +2988,7 @@ bool intel_bios_is_valid_vbt(struct intel_display *display,
>  		return false;
>  	}
>  
> -	if (memcmp(vbt->signature, "$VBT", 4)) {
> +	if (memcmp(vbt->signature, vbt_signature, sizeof(vbt_signature))) {
>  		drm_dbg_kms(display->drm, "VBT invalid signature\n");
>  		return false;
>  	}
> @@ -3082,9 +3084,11 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
>  	oprom_offset &= OROM_OFFSET_MASK;
>  
> +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> +
>  	for (count = 0; count < oprom_size; count += 4) {
>  		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
> -		if (data == *((const u32 *)"$VBT")) {
> +		if (data == *((const u32 *)vbt_signature)) {
>  			found = oprom_offset + count;
>  			break;
>  		}
> @@ -3144,9 +3148,11 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
>  	if (!oprom)
>  		return NULL;
>  
> +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> +
>  	/* Scour memory looking for the VBT signature. */
>  	for (i = 0; i + 4 < size; i += 4) {
> -		if (ioread32(oprom + i) != *((const u32 *)"$VBT"))
> +		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
>  			continue;
>  
>  		p = oprom + i;

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c
  2024-09-10 13:42 ` [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c Ville Syrjala
@ 2024-09-12 12:44   ` Jani Nikula
  2024-09-20 17:02     ` Ville Syrjälä
  0 siblings, 1 reply; 23+ messages in thread
From: Jani Nikula @ 2024-09-12 12:44 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: intel-xe

On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Abstract away the nuts and bolts of the SPI vs. PCI ROM
> stuff, and hide it all in soc/intel_rom.c so that the
> VBT code doesn't have to care about this stuff.
>
> This leaves intel_bios.c with a single codepath that
> can focus on the details related to the VBT layout.
>
> This should have no functional changes.

Neat! Some nitpicks inline, but overall,

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/Makefile                 |   3 +-
>  drivers/gpu/drm/i915/display/intel_bios.c     | 150 ++++------------
>  drivers/gpu/drm/i915/soc/intel_rom.c          | 160 ++++++++++++++++++
>  drivers/gpu/drm/i915/soc/intel_rom.h          |  25 +++
>  drivers/gpu/drm/xe/Makefile                   |   3 +-
>  .../xe/compat-i915-headers/soc/intel_rom.h    |   6 +
>  6 files changed, 224 insertions(+), 123 deletions(-)
>  create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.c
>  create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.h
>  create mode 100644 drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
>
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index c63fa2133ccb..d14c8870aecb 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -51,7 +51,8 @@ i915-y += \
>  i915-y += \
>  	soc/intel_dram.o \
>  	soc/intel_gmch.o \
> -	soc/intel_pch.o
> +	soc/intel_pch.o \
> +	soc/intel_rom.o
>  
>  # core library code
>  i915-y += \
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index 0b92b494117f..37d4b4ddfa95 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -33,12 +33,12 @@
>  #include <drm/drm_edid.h>
>  #include <drm/drm_fixed.h>
>  
> +#include "soc/intel_rom.h"
> +
>  #include "i915_drv.h"
> -#include "i915_reg.h"
>  #include "intel_display.h"
>  #include "intel_display_types.h"
>  #include "intel_gmbus.h"
> -#include "intel_uncore.h"
>  
>  #define _INTEL_BIOS_PRIVATE
>  #include "intel_vbt_defs.h"
> @@ -3055,150 +3055,58 @@ static struct vbt_header *firmware_get_vbt(struct intel_display *display,
>  	return vbt;
>  }
>  
> -static u32 intel_spi_read32(struct intel_uncore *uncore, u32 offset)
> +static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> +					struct intel_rom *rom,
> +					size_t *size, const char *type)
>  {
> -	intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
> +	struct vbt_header *vbt;
> +	size_t vbt_size;
> +	loff_t offset;
>  
> -	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
> -}
> -
> -static u16 intel_spi_read16(struct intel_uncore *uncore, u32 offset)
> -{
> -	return intel_spi_read32(uncore, offset) & 0xffff;
> -}
> -
> -static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> -					    size_t *size)
> -{
> -	struct drm_i915_private *i915 = to_i915(display->drm);
> -	u32 count, data, found, store = 0;
> -	u32 static_region, oprom_offset;
> -	u32 oprom_size = 0x200000;
> -	u16 vbt_size;
> -	u32 *vbt;
> -
> -	static_region = intel_uncore_read(&i915->uncore, SPI_STATIC_REGIONS);
> -	static_region &= OPTIONROM_SPI_REGIONID_MASK;
> -	intel_uncore_write(&i915->uncore, PRIMARY_SPI_REGIONID, static_region);
> -
> -	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
> -	oprom_offset &= OROM_OFFSET_MASK;
> +	if (!rom)
> +		return NULL;
>  
>  	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
>  
> -	for (count = 0; count < oprom_size; count += 4) {
> -		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
> -		if (data == *((const u32 *)vbt_signature)) {
> -			found = oprom_offset + count;
> -			break;
> -		}
> -	}
> +	offset = intel_rom_find(rom, *(const u32 *)vbt_signature);
> +	if (offset < 0)
> +		goto err_free_rom;
>  
> -	if (count >= oprom_size)
> -		goto err_not_found;
> -
> -	if (sizeof(struct vbt_header) > oprom_size - count) {
> +	if (sizeof(struct vbt_header) > intel_rom_size(rom) - offset) {
>  		drm_dbg(display->drm, "VBT header incomplete\n");
> -		goto err_not_found;
> +		goto err_free_rom;
>  	}
>  
> -	/* Get VBT size and allocate space for the VBT */
> -	vbt_size = intel_spi_read16(&i915->uncore,
> -				    found + offsetof(struct vbt_header, vbt_size));
> +	BUILD_BUG_ON(sizeof(vbt->vbt_size) != sizeof(u16));
>  
> -	if (vbt_size > oprom_size - count) {
> -		drm_dbg(display->drm,
> -			"VBT incomplete (vbt_size overflows)\n");
> -		goto err_not_found;
> +	vbt_size = intel_rom_read16(rom, offset + offsetof(struct vbt_header, vbt_size));
> +	if (vbt_size > intel_rom_size(rom) - offset) {
> +		drm_dbg(display->drm, "VBT incomplete (vbt_size overflows)\n");
> +		goto err_free_rom;
>  	}
>  
>  	vbt = kzalloc(round_up(vbt_size, 4), GFP_KERNEL);
>  	if (!vbt)
> -		goto err_not_found;
> +		goto err_free_rom;
>  
> -	for (count = 0; count < vbt_size; count += 4)
> -		*(vbt + store++) = intel_spi_read32(&i915->uncore, found + count);
> +	intel_rom_read_block(rom, vbt, offset, vbt_size);
>  
>  	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
>  		goto err_free_vbt;
>  
> -	drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n");
> +	drm_dbg_kms(display->drm, "Found valid VBT in %s\n", type);

There's some (pre-existing) drm_dbg vs. drm_dbg_kms discrepancy here.

>  
>  	if (size)
>  		*size = vbt_size;
>  
> +	intel_rom_free(rom);
> +
>  	return (struct vbt_header *)vbt;

The cast is now unnecessary.

>  
>  err_free_vbt:
>  	kfree(vbt);
> -err_not_found:
> -	return NULL;
> -}
> -
> -static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> -					size_t *sizep)
> -{
> -	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
> -	void __iomem *p = NULL, *oprom;
> -	struct vbt_header *vbt;
> -	u16 vbt_size;
> -	size_t i, size;
> -
> -	oprom = pci_map_rom(pdev, &size);
> -	if (!oprom)
> -		return NULL;
> -
> -	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> -
> -	/* Scour memory looking for the VBT signature. */
> -	for (i = 0; i + 4 < size; i += 4) {
> -		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
> -			continue;
> -
> -		p = oprom + i;
> -		size -= i;
> -		break;
> -	}
> -
> -	if (!p)
> -		goto err_unmap_oprom;
> -
> -	if (sizeof(struct vbt_header) > size) {
> -		drm_dbg(display->drm, "VBT header incomplete\n");
> -		goto err_unmap_oprom;
> -	}
> -
> -	vbt_size = ioread16(p + offsetof(struct vbt_header, vbt_size));
> -	if (vbt_size > size) {
> -		drm_dbg(display->drm,
> -			"VBT incomplete (vbt_size overflows)\n");
> -		goto err_unmap_oprom;
> -	}
> -
> -	/* The rest will be validated by intel_bios_is_valid_vbt() */
> -	vbt = kmalloc(round_up(vbt_size, 4), GFP_KERNEL);
> -	if (!vbt)
> -		goto err_unmap_oprom;
> -
> -	memcpy_fromio(vbt, p, vbt_size);
> -
> -	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
> -		goto err_free_vbt;
> -
> -	pci_unmap_rom(pdev, oprom);
> -
> -	if (sizep)
> -		*sizep = vbt_size;
> -
> -	drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n");
> -
> -	return vbt;
> -
> -err_free_vbt:
> -	kfree(vbt);
> -err_unmap_oprom:
> -	pci_unmap_rom(pdev, oprom);
> -
> +err_free_rom:
> +	intel_rom_free(rom);
>  	return NULL;
>  }
>  
> @@ -3220,11 +3128,11 @@ static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display
>  	 */
>  	if (!vbt && IS_DGFX(i915))
>  		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> -			vbt = spi_oprom_get_vbt(display, sizep);
> +			vbt = oprom_get_vbt(display, intel_rom_spi(i915), sizep, "SPI flash");
>  
>  	if (!vbt)
>  		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> -			vbt = oprom_get_vbt(display, sizep);
> +			vbt = oprom_get_vbt(display, intel_rom_pci(i915), sizep, "PCI ROM");
>  
>  	return vbt;
>  }
> diff --git a/drivers/gpu/drm/i915/soc/intel_rom.c b/drivers/gpu/drm/i915/soc/intel_rom.c
> new file mode 100644
> index 000000000000..243d98cab8c3
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/soc/intel_rom.c
> @@ -0,0 +1,160 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include "i915_drv.h"
> +#include "i915_reg.h"
> +
> +#include "intel_rom.h"
> +#include "intel_uncore.h"
> +
> +struct intel_rom {
> +	/* for PCI ROM */
> +	struct pci_dev *pdev;
> +	void __iomem *oprom;
> +
> +	/* for SPI */
> +	struct intel_uncore *uncore;
> +	loff_t offset;
> +
> +	size_t size;
> +
> +	u32 (*read32)(struct intel_rom *rom, loff_t offset);
> +	u16 (*read16)(struct intel_rom *rom, loff_t offset);
> +	void (*read_block)(struct intel_rom *rom, void *data, loff_t offset, size_t size);
> +	void (*free)(struct intel_rom *rom);
> +};
> +
> +static u32 spi_read32(struct intel_rom *rom, loff_t offset)
> +{
> +	intel_uncore_write(rom->uncore, PRIMARY_SPI_ADDRESS,
> +			   rom->offset + offset);
> +
> +	return intel_uncore_read(rom->uncore, PRIMARY_SPI_TRIGGER);
> +}
> +
> +static u16 spi_read16(struct intel_rom *rom, loff_t offset)
> +{
> +	return spi_read32(rom, offset) & 0xffff;
> +}
> +
> +struct intel_rom *intel_rom_spi(struct drm_i915_private *i915)

Would be nice to get rid of struct drm_i915_private too, but then it
needs pci_dev and uncore, and we'll need to abstract uncore too, so
let's just roll with this as a concrete step forward.

> +{
> +	struct intel_rom *rom;
> +	u32 static_region;
> +
> +	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
> +	if (!rom)
> +		return NULL;
> +
> +	rom->uncore = &i915->uncore;
> +
> +	static_region = intel_uncore_read(rom->uncore, SPI_STATIC_REGIONS);
> +	static_region &= OPTIONROM_SPI_REGIONID_MASK;
> +	intel_uncore_write(rom->uncore, PRIMARY_SPI_REGIONID, static_region);
> +
> +	rom->offset = intel_uncore_read(rom->uncore, OROM_OFFSET) & OROM_OFFSET_MASK;
> +
> +	rom->size = 0x200000;
> +
> +	rom->read32 = spi_read32;
> +	rom->read16 = spi_read16;
> +
> +	return rom;
> +}
> +
> +static u32 pci_read32(struct intel_rom *rom, loff_t offset)
> +{
> +	return ioread32(rom->oprom + offset);
> +}
> +
> +static u16 pci_read16(struct intel_rom *rom, loff_t offset)
> +{
> +	return ioread16(rom->oprom + offset);
> +}
> +
> +static void pci_read_block(struct intel_rom *rom, void *data,
> +			   loff_t offset, size_t size)
> +{
> +	memcpy_fromio(data, rom->oprom + offset, size);
> +}
> +
> +static void pci_free(struct intel_rom *rom)
> +{
> +	pci_unmap_rom(rom->pdev, rom->oprom);
> +}
> +
> +struct intel_rom *intel_rom_pci(struct drm_i915_private *i915)
> +{
> +	struct intel_rom *rom;
> +
> +	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
> +	if (!rom)
> +		return NULL;
> +
> +	rom->pdev = to_pci_dev(i915->drm.dev);
> +
> +	rom->oprom = pci_map_rom(rom->pdev, &rom->size);
> +	if (!rom->oprom) {
> +		kfree(rom);
> +		return NULL;
> +	}
> +
> +	rom->read32 = pci_read32;
> +	rom->read16 = pci_read16;
> +	rom->read_block = pci_read_block;
> +	rom->free = pci_free;
> +
> +	return rom;
> +}
> +
> +u32 intel_rom_read32(struct intel_rom *rom, loff_t offset)
> +{
> +	return rom->read32(rom, offset);
> +}
> +
> +u16 intel_rom_read16(struct intel_rom *rom, loff_t offset)
> +{
> +	return rom->read16(rom, offset);
> +}
> +
> +void intel_rom_read_block(struct intel_rom *rom, void *data,
> +			  loff_t offset, size_t size)
> +{
> +	u32 *ptr = data;
> +	loff_t index;

Just nitpicking, but should this (and rom reads above) now sanity check
offset+size against rom->size? IDK if it's worth it for such a simple
thing. The caller is supposed to know what it's doing.

> +
> +	if (rom->read_block) {
> +		rom->read_block(rom, data, offset, size);
> +		return;
> +	}
> +
> +	for (index = 0; index < size; index += 4)
> +		*ptr++ = rom->read32(rom, offset + index);
> +}
> +
> +loff_t intel_rom_find(struct intel_rom *rom, u32 needle)
> +{
> +	loff_t offset;
> +
> +	for (offset = 0; offset < rom->size; offset += 4) {
> +		if (rom->read32(rom, offset) == needle)
> +			return offset;
> +	}
> +
> +	return -ENOENT;
> +}
> +
> +size_t intel_rom_size(struct intel_rom *rom)
> +{
> +	return rom->size;
> +}
> +
> +void intel_rom_free(struct intel_rom *rom)
> +{
> +	if (rom && rom->free)
> +		rom->free(rom);
> +
> +	kfree(rom);
> +}
> diff --git a/drivers/gpu/drm/i915/soc/intel_rom.h b/drivers/gpu/drm/i915/soc/intel_rom.h
> new file mode 100644
> index 000000000000..fb2979c8ef7f
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/soc/intel_rom.h
> @@ -0,0 +1,25 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __INTEL_ROM_H__
> +#define __INTEL_ROM_H__
> +
> +#include <linux/types.h>
> +
> +struct drm_i915_private;
> +struct intel_rom;
> +
> +struct intel_rom *intel_rom_spi(struct drm_i915_private *i915);
> +struct intel_rom *intel_rom_pci(struct drm_i915_private *i915);
> +
> +u32 intel_rom_read32(struct intel_rom *rom, loff_t offset);
> +u16 intel_rom_read16(struct intel_rom *rom, loff_t offset);
> +void intel_rom_read_block(struct intel_rom *rom, void *data,
> +			  loff_t offset, size_t size);
> +loff_t intel_rom_find(struct intel_rom *rom, u32 needle);
> +size_t intel_rom_size(struct intel_rom *rom);
> +void intel_rom_free(struct intel_rom *rom);
> +
> +#endif /* __INTEL_ROM_H__ */
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index edfd812e0f41..dd1c0666e6bd 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -180,7 +180,8 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
>  # SOC code shared with i915
>  xe-$(CONFIG_DRM_XE_DISPLAY) += \
>  	i915-soc/intel_dram.o \
> -	i915-soc/intel_pch.o
> +	i915-soc/intel_pch.o \
> +	i915-soc/intel_rom.o
>  
>  # Display code shared with i915
>  xe-$(CONFIG_DRM_XE_DISPLAY) += \
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h b/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
> new file mode 100644
> index 000000000000..05cbfb697b2b
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
> @@ -0,0 +1,6 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include "../../../i915/soc/intel_rom.h"

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-12 12:15   ` Jani Nikula
@ 2024-09-20 16:59     ` Ville Syrjälä
  2024-09-23  9:12       ` Jani Nikula
  0 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjälä @ 2024-09-20 16:59 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Thu, Sep 12, 2024 at 03:15:52PM +0300, Jani Nikula wrote:
> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Replace the three hand rolled "$VBT"s with a vbt_signature[]
> > to avoid accidents.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> > index cbbda94c3dab..0b92b494117f 100644
> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> > @@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
> >  	return _vbt + vbt->bdb_offset;
> >  }
> >  
> > +static const char vbt_signature[4] = "$VBT";
> 
> Always a bit scary to add strings without termination, but I guess it's
> justified here.

I guess we could make it look less like a string with eg.
static const u8 vbt_signature[] = { '$', 'V', 'B', 'T' };
?

> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> 
> 
> > +
> >  /**
> >   * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
> >   * @display:	display device
> > @@ -2986,7 +2988,7 @@ bool intel_bios_is_valid_vbt(struct intel_display *display,
> >  		return false;
> >  	}
> >  
> > -	if (memcmp(vbt->signature, "$VBT", 4)) {
> > +	if (memcmp(vbt->signature, vbt_signature, sizeof(vbt_signature))) {
> >  		drm_dbg_kms(display->drm, "VBT invalid signature\n");
> >  		return false;
> >  	}
> > @@ -3082,9 +3084,11 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> >  	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
> >  	oprom_offset &= OROM_OFFSET_MASK;
> >  
> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> > +
> >  	for (count = 0; count < oprom_size; count += 4) {
> >  		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
> > -		if (data == *((const u32 *)"$VBT")) {
> > +		if (data == *((const u32 *)vbt_signature)) {
> >  			found = oprom_offset + count;
> >  			break;
> >  		}
> > @@ -3144,9 +3148,11 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> >  	if (!oprom)
> >  		return NULL;
> >  
> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> > +
> >  	/* Scour memory looking for the VBT signature. */
> >  	for (i = 0; i + 4 < size; i += 4) {
> > -		if (ioread32(oprom + i) != *((const u32 *)"$VBT"))
> > +		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
> >  			continue;
> >  
> >  		p = oprom + i;
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16()
  2024-09-12 12:02   ` Jani Nikula
@ 2024-09-20 17:00     ` Ville Syrjälä
  0 siblings, 0 replies; 23+ messages in thread
From: Ville Syrjälä @ 2024-09-20 17:00 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Thu, Sep 12, 2024 at 03:02:03PM +0300, Jani Nikula wrote:
> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > The SPI VBT codepath only knows how to read 4 bytes at a time.
> > So to read the 2 byte vbt_size it masks out the unwanted msbs.
> > Hide that little implementation detail inside a new intel_spi_read16()
> > helper. Alse rename the existing intel_spi_read() to intel_spi_read32()
> > to make it clear what it does.
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_bios.c | 16 ++++++++++------
> >  1 file changed, 10 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> > index cc4a4cc2bf3e..cbbda94c3dab 100644
> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> > @@ -3053,13 +3053,18 @@ static struct vbt_header *firmware_get_vbt(struct intel_display *display,
> >  	return vbt;
> >  }
> >  
> > -static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
> > +static u32 intel_spi_read32(struct intel_uncore *uncore, u32 offset)
> >  {
> >  	intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
> >  
> >  	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
> >  }
> >  
> > +static u16 intel_spi_read16(struct intel_uncore *uncore, u32 offset)
> > +{
> > +	return intel_spi_read32(uncore, offset) & 0xffff;
> > +}
> > +
> >  static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> >  					    size_t *size)
> >  {
> > @@ -3078,7 +3083,7 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> >  	oprom_offset &= OROM_OFFSET_MASK;
> >  
> >  	for (count = 0; count < oprom_size; count += 4) {
> > -		data = intel_spi_read(&i915->uncore, oprom_offset + count);
> > +		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
> >  		if (data == *((const u32 *)"$VBT")) {
> >  			found = oprom_offset + count;
> >  			break;
> > @@ -3094,9 +3099,8 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> >  	}
> >  
> >  	/* Get VBT size and allocate space for the VBT */
> > -	vbt_size = intel_spi_read(&i915->uncore,
> > -				  found + offsetof(struct vbt_header, vbt_size));
> > -	vbt_size &= 0xffff;
> > +	vbt_size = intel_spi_read16(&i915->uncore,
> > +				    found + offsetof(struct vbt_header, vbt_size));
> 
> Pedantically if vbt_size was the last member of struct vbt_header this
> could read past the checked size, but it's not and meh. Also nothing to
> do with this change, apart from this hiding the detail. Still meh.

This code raises a lot of other lingering questions as well:
- do 8/16 bit accesses not work at all?
- what happens on an unaligned 32bit access?

> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> 
> 
> >  
> >  	if (vbt_size > oprom_size - count) {
> >  		drm_dbg(display->drm,
> > @@ -3109,7 +3113,7 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> >  		goto err_not_found;
> >  
> >  	for (count = 0; count < vbt_size; count += 4)
> > -		*(vbt + store++) = intel_spi_read(&i915->uncore, found + count);
> > +		*(vbt + store++) = intel_spi_read32(&i915->uncore, found + count);
> >  
> >  	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
> >  		goto err_free_vbt;
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c
  2024-09-12 12:44   ` Jani Nikula
@ 2024-09-20 17:02     ` Ville Syrjälä
  2024-09-23  9:13       ` Jani Nikula
  0 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjälä @ 2024-09-20 17:02 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Thu, Sep 12, 2024 at 03:44:32PM +0300, Jani Nikula wrote:
> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Abstract away the nuts and bolts of the SPI vs. PCI ROM
> > stuff, and hide it all in soc/intel_rom.c so that the
> > VBT code doesn't have to care about this stuff.
> >
> > This leaves intel_bios.c with a single codepath that
> > can focus on the details related to the VBT layout.
> >
> > This should have no functional changes.
> 
> Neat! Some nitpicks inline, but overall,
> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> 
> 
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/Makefile                 |   3 +-
> >  drivers/gpu/drm/i915/display/intel_bios.c     | 150 ++++------------
> >  drivers/gpu/drm/i915/soc/intel_rom.c          | 160 ++++++++++++++++++
> >  drivers/gpu/drm/i915/soc/intel_rom.h          |  25 +++
> >  drivers/gpu/drm/xe/Makefile                   |   3 +-
> >  .../xe/compat-i915-headers/soc/intel_rom.h    |   6 +
> >  6 files changed, 224 insertions(+), 123 deletions(-)
> >  create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.c
> >  create mode 100644 drivers/gpu/drm/i915/soc/intel_rom.h
> >  create mode 100644 drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
> >
> > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> > index c63fa2133ccb..d14c8870aecb 100644
> > --- a/drivers/gpu/drm/i915/Makefile
> > +++ b/drivers/gpu/drm/i915/Makefile
> > @@ -51,7 +51,8 @@ i915-y += \
> >  i915-y += \
> >  	soc/intel_dram.o \
> >  	soc/intel_gmch.o \
> > -	soc/intel_pch.o
> > +	soc/intel_pch.o \
> > +	soc/intel_rom.o
> >  
> >  # core library code
> >  i915-y += \
> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> > index 0b92b494117f..37d4b4ddfa95 100644
> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> > @@ -33,12 +33,12 @@
> >  #include <drm/drm_edid.h>
> >  #include <drm/drm_fixed.h>
> >  
> > +#include "soc/intel_rom.h"
> > +
> >  #include "i915_drv.h"
> > -#include "i915_reg.h"
> >  #include "intel_display.h"
> >  #include "intel_display_types.h"
> >  #include "intel_gmbus.h"
> > -#include "intel_uncore.h"
> >  
> >  #define _INTEL_BIOS_PRIVATE
> >  #include "intel_vbt_defs.h"
> > @@ -3055,150 +3055,58 @@ static struct vbt_header *firmware_get_vbt(struct intel_display *display,
> >  	return vbt;
> >  }
> >  
> > -static u32 intel_spi_read32(struct intel_uncore *uncore, u32 offset)
> > +static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> > +					struct intel_rom *rom,
> > +					size_t *size, const char *type)
> >  {
> > -	intel_uncore_write(uncore, PRIMARY_SPI_ADDRESS, offset);
> > +	struct vbt_header *vbt;
> > +	size_t vbt_size;
> > +	loff_t offset;
> >  
> > -	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
> > -}
> > -
> > -static u16 intel_spi_read16(struct intel_uncore *uncore, u32 offset)
> > -{
> > -	return intel_spi_read32(uncore, offset) & 0xffff;
> > -}
> > -
> > -static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> > -					    size_t *size)
> > -{
> > -	struct drm_i915_private *i915 = to_i915(display->drm);
> > -	u32 count, data, found, store = 0;
> > -	u32 static_region, oprom_offset;
> > -	u32 oprom_size = 0x200000;
> > -	u16 vbt_size;
> > -	u32 *vbt;
> > -
> > -	static_region = intel_uncore_read(&i915->uncore, SPI_STATIC_REGIONS);
> > -	static_region &= OPTIONROM_SPI_REGIONID_MASK;
> > -	intel_uncore_write(&i915->uncore, PRIMARY_SPI_REGIONID, static_region);
> > -
> > -	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
> > -	oprom_offset &= OROM_OFFSET_MASK;
> > +	if (!rom)
> > +		return NULL;
> >  
> >  	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> >  
> > -	for (count = 0; count < oprom_size; count += 4) {
> > -		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
> > -		if (data == *((const u32 *)vbt_signature)) {
> > -			found = oprom_offset + count;
> > -			break;
> > -		}
> > -	}
> > +	offset = intel_rom_find(rom, *(const u32 *)vbt_signature);
> > +	if (offset < 0)
> > +		goto err_free_rom;
> >  
> > -	if (count >= oprom_size)
> > -		goto err_not_found;
> > -
> > -	if (sizeof(struct vbt_header) > oprom_size - count) {
> > +	if (sizeof(struct vbt_header) > intel_rom_size(rom) - offset) {
> >  		drm_dbg(display->drm, "VBT header incomplete\n");
> > -		goto err_not_found;
> > +		goto err_free_rom;
> >  	}
> >  
> > -	/* Get VBT size and allocate space for the VBT */
> > -	vbt_size = intel_spi_read16(&i915->uncore,
> > -				    found + offsetof(struct vbt_header, vbt_size));
> > +	BUILD_BUG_ON(sizeof(vbt->vbt_size) != sizeof(u16));
> >  
> > -	if (vbt_size > oprom_size - count) {
> > -		drm_dbg(display->drm,
> > -			"VBT incomplete (vbt_size overflows)\n");
> > -		goto err_not_found;
> > +	vbt_size = intel_rom_read16(rom, offset + offsetof(struct vbt_header, vbt_size));
> > +	if (vbt_size > intel_rom_size(rom) - offset) {
> > +		drm_dbg(display->drm, "VBT incomplete (vbt_size overflows)\n");
> > +		goto err_free_rom;
> >  	}
> >  
> >  	vbt = kzalloc(round_up(vbt_size, 4), GFP_KERNEL);
> >  	if (!vbt)
> > -		goto err_not_found;
> > +		goto err_free_rom;
> >  
> > -	for (count = 0; count < vbt_size; count += 4)
> > -		*(vbt + store++) = intel_spi_read32(&i915->uncore, found + count);
> > +	intel_rom_read_block(rom, vbt, offset, vbt_size);
> >  
> >  	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
> >  		goto err_free_vbt;
> >  
> > -	drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n");
> > +	drm_dbg_kms(display->drm, "Found valid VBT in %s\n", type);
> 
> There's some (pre-existing) drm_dbg vs. drm_dbg_kms discrepancy here.

I'll prepare a patch to clean that up.

> 
> >  
> >  	if (size)
> >  		*size = vbt_size;
> >  
> > +	intel_rom_free(rom);
> > +
> >  	return (struct vbt_header *)vbt;
> 
> The cast is now unnecessary.

Ack.

> 
> >  
> >  err_free_vbt:
> >  	kfree(vbt);
> > -err_not_found:
> > -	return NULL;
> > -}
> > -
> > -static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> > -					size_t *sizep)
> > -{
> > -	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
> > -	void __iomem *p = NULL, *oprom;
> > -	struct vbt_header *vbt;
> > -	u16 vbt_size;
> > -	size_t i, size;
> > -
> > -	oprom = pci_map_rom(pdev, &size);
> > -	if (!oprom)
> > -		return NULL;
> > -
> > -	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> > -
> > -	/* Scour memory looking for the VBT signature. */
> > -	for (i = 0; i + 4 < size; i += 4) {
> > -		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
> > -			continue;
> > -
> > -		p = oprom + i;
> > -		size -= i;
> > -		break;
> > -	}
> > -
> > -	if (!p)
> > -		goto err_unmap_oprom;
> > -
> > -	if (sizeof(struct vbt_header) > size) {
> > -		drm_dbg(display->drm, "VBT header incomplete\n");
> > -		goto err_unmap_oprom;
> > -	}
> > -
> > -	vbt_size = ioread16(p + offsetof(struct vbt_header, vbt_size));
> > -	if (vbt_size > size) {
> > -		drm_dbg(display->drm,
> > -			"VBT incomplete (vbt_size overflows)\n");
> > -		goto err_unmap_oprom;
> > -	}
> > -
> > -	/* The rest will be validated by intel_bios_is_valid_vbt() */
> > -	vbt = kmalloc(round_up(vbt_size, 4), GFP_KERNEL);
> > -	if (!vbt)
> > -		goto err_unmap_oprom;
> > -
> > -	memcpy_fromio(vbt, p, vbt_size);
> > -
> > -	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
> > -		goto err_free_vbt;
> > -
> > -	pci_unmap_rom(pdev, oprom);
> > -
> > -	if (sizep)
> > -		*sizep = vbt_size;
> > -
> > -	drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n");
> > -
> > -	return vbt;
> > -
> > -err_free_vbt:
> > -	kfree(vbt);
> > -err_unmap_oprom:
> > -	pci_unmap_rom(pdev, oprom);
> > -
> > +err_free_rom:
> > +	intel_rom_free(rom);
> >  	return NULL;
> >  }
> >  
> > @@ -3220,11 +3128,11 @@ static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display
> >  	 */
> >  	if (!vbt && IS_DGFX(i915))
> >  		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> > -			vbt = spi_oprom_get_vbt(display, sizep);
> > +			vbt = oprom_get_vbt(display, intel_rom_spi(i915), sizep, "SPI flash");
> >  
> >  	if (!vbt)
> >  		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> > -			vbt = oprom_get_vbt(display, sizep);
> > +			vbt = oprom_get_vbt(display, intel_rom_pci(i915), sizep, "PCI ROM");
> >  
> >  	return vbt;
> >  }
> > diff --git a/drivers/gpu/drm/i915/soc/intel_rom.c b/drivers/gpu/drm/i915/soc/intel_rom.c
> > new file mode 100644
> > index 000000000000..243d98cab8c3
> > --- /dev/null
> > +++ b/drivers/gpu/drm/i915/soc/intel_rom.c
> > @@ -0,0 +1,160 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#include "i915_drv.h"
> > +#include "i915_reg.h"
> > +
> > +#include "intel_rom.h"
> > +#include "intel_uncore.h"
> > +
> > +struct intel_rom {
> > +	/* for PCI ROM */
> > +	struct pci_dev *pdev;
> > +	void __iomem *oprom;
> > +
> > +	/* for SPI */
> > +	struct intel_uncore *uncore;
> > +	loff_t offset;
> > +
> > +	size_t size;
> > +
> > +	u32 (*read32)(struct intel_rom *rom, loff_t offset);
> > +	u16 (*read16)(struct intel_rom *rom, loff_t offset);
> > +	void (*read_block)(struct intel_rom *rom, void *data, loff_t offset, size_t size);
> > +	void (*free)(struct intel_rom *rom);
> > +};
> > +
> > +static u32 spi_read32(struct intel_rom *rom, loff_t offset)
> > +{
> > +	intel_uncore_write(rom->uncore, PRIMARY_SPI_ADDRESS,
> > +			   rom->offset + offset);
> > +
> > +	return intel_uncore_read(rom->uncore, PRIMARY_SPI_TRIGGER);
> > +}
> > +
> > +static u16 spi_read16(struct intel_rom *rom, loff_t offset)
> > +{
> > +	return spi_read32(rom, offset) & 0xffff;
> > +}
> > +
> > +struct intel_rom *intel_rom_spi(struct drm_i915_private *i915)
> 
> Would be nice to get rid of struct drm_i915_private too, but then it
> needs pci_dev and uncore, and we'll need to abstract uncore too, so
> let's just roll with this as a concrete step forward.

Yeah, dunno what we'll do about that suff.

> 
> > +{
> > +	struct intel_rom *rom;
> > +	u32 static_region;
> > +
> > +	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
> > +	if (!rom)
> > +		return NULL;
> > +
> > +	rom->uncore = &i915->uncore;
> > +
> > +	static_region = intel_uncore_read(rom->uncore, SPI_STATIC_REGIONS);
> > +	static_region &= OPTIONROM_SPI_REGIONID_MASK;
> > +	intel_uncore_write(rom->uncore, PRIMARY_SPI_REGIONID, static_region);
> > +
> > +	rom->offset = intel_uncore_read(rom->uncore, OROM_OFFSET) & OROM_OFFSET_MASK;
> > +
> > +	rom->size = 0x200000;
> > +
> > +	rom->read32 = spi_read32;
> > +	rom->read16 = spi_read16;
> > +
> > +	return rom;
> > +}
> > +
> > +static u32 pci_read32(struct intel_rom *rom, loff_t offset)
> > +{
> > +	return ioread32(rom->oprom + offset);
> > +}
> > +
> > +static u16 pci_read16(struct intel_rom *rom, loff_t offset)
> > +{
> > +	return ioread16(rom->oprom + offset);
> > +}
> > +
> > +static void pci_read_block(struct intel_rom *rom, void *data,
> > +			   loff_t offset, size_t size)
> > +{
> > +	memcpy_fromio(data, rom->oprom + offset, size);
> > +}
> > +
> > +static void pci_free(struct intel_rom *rom)
> > +{
> > +	pci_unmap_rom(rom->pdev, rom->oprom);
> > +}
> > +
> > +struct intel_rom *intel_rom_pci(struct drm_i915_private *i915)
> > +{
> > +	struct intel_rom *rom;
> > +
> > +	rom = kzalloc(sizeof(*rom), GFP_KERNEL);
> > +	if (!rom)
> > +		return NULL;
> > +
> > +	rom->pdev = to_pci_dev(i915->drm.dev);
> > +
> > +	rom->oprom = pci_map_rom(rom->pdev, &rom->size);
> > +	if (!rom->oprom) {
> > +		kfree(rom);
> > +		return NULL;
> > +	}
> > +
> > +	rom->read32 = pci_read32;
> > +	rom->read16 = pci_read16;
> > +	rom->read_block = pci_read_block;
> > +	rom->free = pci_free;
> > +
> > +	return rom;
> > +}
> > +
> > +u32 intel_rom_read32(struct intel_rom *rom, loff_t offset)
> > +{
> > +	return rom->read32(rom, offset);
> > +}
> > +
> > +u16 intel_rom_read16(struct intel_rom *rom, loff_t offset)
> > +{
> > +	return rom->read16(rom, offset);
> > +}
> > +
> > +void intel_rom_read_block(struct intel_rom *rom, void *data,
> > +			  loff_t offset, size_t size)
> > +{
> > +	u32 *ptr = data;
> > +	loff_t index;
> 
> Just nitpicking, but should this (and rom reads above) now sanity check
> offset+size against rom->size? IDK if it's worth it for such a simple
> thing. The caller is supposed to know what it's doing.

I considered that but decided to cut my losses before I
end up designing a whole new kernel subsystem.

> 
> > +
> > +	if (rom->read_block) {
> > +		rom->read_block(rom, data, offset, size);
> > +		return;
> > +	}
> > +
> > +	for (index = 0; index < size; index += 4)
> > +		*ptr++ = rom->read32(rom, offset + index);
> > +}
> > +
> > +loff_t intel_rom_find(struct intel_rom *rom, u32 needle)
> > +{
> > +	loff_t offset;
> > +
> > +	for (offset = 0; offset < rom->size; offset += 4) {
> > +		if (rom->read32(rom, offset) == needle)
> > +			return offset;
> > +	}
> > +
> > +	return -ENOENT;
> > +}
> > +
> > +size_t intel_rom_size(struct intel_rom *rom)
> > +{
> > +	return rom->size;
> > +}
> > +
> > +void intel_rom_free(struct intel_rom *rom)
> > +{
> > +	if (rom && rom->free)
> > +		rom->free(rom);
> > +
> > +	kfree(rom);
> > +}
> > diff --git a/drivers/gpu/drm/i915/soc/intel_rom.h b/drivers/gpu/drm/i915/soc/intel_rom.h
> > new file mode 100644
> > index 000000000000..fb2979c8ef7f
> > --- /dev/null
> > +++ b/drivers/gpu/drm/i915/soc/intel_rom.h
> > @@ -0,0 +1,25 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#ifndef __INTEL_ROM_H__
> > +#define __INTEL_ROM_H__
> > +
> > +#include <linux/types.h>
> > +
> > +struct drm_i915_private;
> > +struct intel_rom;
> > +
> > +struct intel_rom *intel_rom_spi(struct drm_i915_private *i915);
> > +struct intel_rom *intel_rom_pci(struct drm_i915_private *i915);
> > +
> > +u32 intel_rom_read32(struct intel_rom *rom, loff_t offset);
> > +u16 intel_rom_read16(struct intel_rom *rom, loff_t offset);
> > +void intel_rom_read_block(struct intel_rom *rom, void *data,
> > +			  loff_t offset, size_t size);
> > +loff_t intel_rom_find(struct intel_rom *rom, u32 needle);
> > +size_t intel_rom_size(struct intel_rom *rom);
> > +void intel_rom_free(struct intel_rom *rom);
> > +
> > +#endif /* __INTEL_ROM_H__ */
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index edfd812e0f41..dd1c0666e6bd 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -180,7 +180,8 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
> >  # SOC code shared with i915
> >  xe-$(CONFIG_DRM_XE_DISPLAY) += \
> >  	i915-soc/intel_dram.o \
> > -	i915-soc/intel_pch.o
> > +	i915-soc/intel_pch.o \
> > +	i915-soc/intel_rom.o
> >  
> >  # Display code shared with i915
> >  xe-$(CONFIG_DRM_XE_DISPLAY) += \
> > diff --git a/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h b/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
> > new file mode 100644
> > index 000000000000..05cbfb697b2b
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/compat-i915-headers/soc/intel_rom.h
> > @@ -0,0 +1,6 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#include "../../../i915/soc/intel_rom.h"
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-20 16:59     ` Ville Syrjälä
@ 2024-09-23  9:12       ` Jani Nikula
  2024-09-23 14:22         ` Ville Syrjälä
  0 siblings, 1 reply; 23+ messages in thread
From: Jani Nikula @ 2024-09-23  9:12 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx, intel-xe

On Fri, 20 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Thu, Sep 12, 2024 at 03:15:52PM +0300, Jani Nikula wrote:
>> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> >
>> > Replace the three hand rolled "$VBT"s with a vbt_signature[]
>> > to avoid accidents.
>> >
>> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> > ---
>> >  drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
>> >  1 file changed, 9 insertions(+), 3 deletions(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>> > index cbbda94c3dab..0b92b494117f 100644
>> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
>> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
>> > @@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
>> >  	return _vbt + vbt->bdb_offset;
>> >  }
>> >  
>> > +static const char vbt_signature[4] = "$VBT";
>> 
>> Always a bit scary to add strings without termination, but I guess it's
>> justified here.
>
> I guess we could make it look less like a string with eg.
> static const u8 vbt_signature[] = { '$', 'V', 'B', 'T' };
> ?

Alternatively,

static const char *vbt_signature = "$VBT";

>
>> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>> 
>> 
>> > +
>> >  /**
>> >   * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
>> >   * @display:	display device
>> > @@ -2986,7 +2988,7 @@ bool intel_bios_is_valid_vbt(struct intel_display *display,
>> >  		return false;
>> >  	}
>> >  
>> > -	if (memcmp(vbt->signature, "$VBT", 4)) {
>> > +	if (memcmp(vbt->signature, vbt_signature, sizeof(vbt_signature))) {

But then this would need strlen()

>> >  		drm_dbg_kms(display->drm, "VBT invalid signature\n");
>> >  		return false;
>> >  	}
>> > @@ -3082,9 +3084,11 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>> >  	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
>> >  	oprom_offset &= OROM_OFFSET_MASK;
>> >  
>> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));

And maybe this could be sizeof(vbt_signature) < sizeof(u32)

All of the alternatives are a bit disappointing, so maybe let's just
roll with the patch you already have here?

BR,
Jani.

>> > +
>> >  	for (count = 0; count < oprom_size; count += 4) {
>> >  		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
>> > -		if (data == *((const u32 *)"$VBT")) {
>> > +		if (data == *((const u32 *)vbt_signature)) {
>> >  			found = oprom_offset + count;
>> >  			break;
>> >  		}
>> > @@ -3144,9 +3148,11 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
>> >  	if (!oprom)
>> >  		return NULL;
>> >  
>> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
>> > +
>> >  	/* Scour memory looking for the VBT signature. */
>> >  	for (i = 0; i + 4 < size; i += 4) {
>> > -		if (ioread32(oprom + i) != *((const u32 *)"$VBT"))
>> > +		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
>> >  			continue;
>> >  
>> >  		p = oprom + i;
>> 
>> -- 
>> Jani Nikula, Intel

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c
  2024-09-20 17:02     ` Ville Syrjälä
@ 2024-09-23  9:13       ` Jani Nikula
  0 siblings, 0 replies; 23+ messages in thread
From: Jani Nikula @ 2024-09-23  9:13 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx, intel-xe

On Fri, 20 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Thu, Sep 12, 2024 at 03:44:32PM +0300, Jani Nikula wrote:
>> Just nitpicking, but should this (and rom reads above) now sanity check
>> offset+size against rom->size? IDK if it's worth it for such a simple
>> thing. The caller is supposed to know what it's doing.
>
> I considered that but decided to cut my losses before I
> end up designing a whole new kernel subsystem.

Good call. :)

BR,
Jani.


-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-23  9:12       ` Jani Nikula
@ 2024-09-23 14:22         ` Ville Syrjälä
  2024-09-23 14:24           ` Jani Nikula
  0 siblings, 1 reply; 23+ messages in thread
From: Ville Syrjälä @ 2024-09-23 14:22 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Mon, Sep 23, 2024 at 12:12:39PM +0300, Jani Nikula wrote:
> On Fri, 20 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Thu, Sep 12, 2024 at 03:15:52PM +0300, Jani Nikula wrote:
> >> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> >> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >> >
> >> > Replace the three hand rolled "$VBT"s with a vbt_signature[]
> >> > to avoid accidents.
> >> >
> >> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >> > ---
> >> >  drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
> >> >  1 file changed, 9 insertions(+), 3 deletions(-)
> >> >
> >> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> >> > index cbbda94c3dab..0b92b494117f 100644
> >> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
> >> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> >> > @@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
> >> >  	return _vbt + vbt->bdb_offset;
> >> >  }
> >> >  
> >> > +static const char vbt_signature[4] = "$VBT";
> >> 
> >> Always a bit scary to add strings without termination, but I guess it's
> >> justified here.
> >
> > I guess we could make it look less like a string with eg.
> > static const u8 vbt_signature[] = { '$', 'V', 'B', 'T' };
> > ?
> 
> Alternatively,
> 
> static const char *vbt_signature = "$VBT";

Or could just be something like:

static const char vbt_signature[] = "$VBT";
static const int vbt_signature_len = 4;

BUILD_BUG_ON(vbt_signature_len != sizeof(vbt_signature) - 1);
BUILD_BUG_ON(vbt_signature_len != sizeof(u32));

and use vbt_signature_len instead sizeof(vbt_signature) everwhere.

> 
> >
> >> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> >> 
> >> 
> >> > +
> >> >  /**
> >> >   * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
> >> >   * @display:	display device
> >> > @@ -2986,7 +2988,7 @@ bool intel_bios_is_valid_vbt(struct intel_display *display,
> >> >  		return false;
> >> >  	}
> >> >  
> >> > -	if (memcmp(vbt->signature, "$VBT", 4)) {
> >> > +	if (memcmp(vbt->signature, vbt_signature, sizeof(vbt_signature))) {
> 
> But then this would need strlen()
> 
> >> >  		drm_dbg_kms(display->drm, "VBT invalid signature\n");
> >> >  		return false;
> >> >  	}
> >> > @@ -3082,9 +3084,11 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
> >> >  	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
> >> >  	oprom_offset &= OROM_OFFSET_MASK;
> >> >  
> >> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> 
> And maybe this could be sizeof(vbt_signature) < sizeof(u32)
> 
> All of the alternatives are a bit disappointing, so maybe let's just
> roll with the patch you already have here?
> 
> BR,
> Jani.
> 
> >> > +
> >> >  	for (count = 0; count < oprom_size; count += 4) {
> >> >  		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
> >> > -		if (data == *((const u32 *)"$VBT")) {
> >> > +		if (data == *((const u32 *)vbt_signature)) {
> >> >  			found = oprom_offset + count;
> >> >  			break;
> >> >  		}
> >> > @@ -3144,9 +3148,11 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
> >> >  	if (!oprom)
> >> >  		return NULL;
> >> >  
> >> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
> >> > +
> >> >  	/* Scour memory looking for the VBT signature. */
> >> >  	for (i = 0; i + 4 < size; i += 4) {
> >> > -		if (ioread32(oprom + i) != *((const u32 *)"$VBT"))
> >> > +		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
> >> >  			continue;
> >> >  
> >> >  		p = oprom + i;
> >> 
> >> -- 
> >> Jani Nikula, Intel
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-23 14:22         ` Ville Syrjälä
@ 2024-09-23 14:24           ` Jani Nikula
  2024-09-23 14:29             ` Ville Syrjälä
  0 siblings, 1 reply; 23+ messages in thread
From: Jani Nikula @ 2024-09-23 14:24 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx, intel-xe

On Mon, 23 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Mon, Sep 23, 2024 at 12:12:39PM +0300, Jani Nikula wrote:
>> On Fri, 20 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > On Thu, Sep 12, 2024 at 03:15:52PM +0300, Jani Nikula wrote:
>> >> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>> >> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> >> >
>> >> > Replace the three hand rolled "$VBT"s with a vbt_signature[]
>> >> > to avoid accidents.
>> >> >
>> >> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> >> > ---
>> >> >  drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
>> >> >  1 file changed, 9 insertions(+), 3 deletions(-)
>> >> >
>> >> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
>> >> > index cbbda94c3dab..0b92b494117f 100644
>> >> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
>> >> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
>> >> > @@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
>> >> >  	return _vbt + vbt->bdb_offset;
>> >> >  }
>> >> >  
>> >> > +static const char vbt_signature[4] = "$VBT";
>> >> 
>> >> Always a bit scary to add strings without termination, but I guess it's
>> >> justified here.
>> >
>> > I guess we could make it look less like a string with eg.
>> > static const u8 vbt_signature[] = { '$', 'V', 'B', 'T' };
>> > ?
>> 
>> Alternatively,
>> 
>> static const char *vbt_signature = "$VBT";
>
> Or could just be something like:
>
> static const char vbt_signature[] = "$VBT";
> static const int vbt_signature_len = 4;
>
> BUILD_BUG_ON(vbt_signature_len != sizeof(vbt_signature) - 1);
> BUILD_BUG_ON(vbt_signature_len != sizeof(u32));
>
> and use vbt_signature_len instead sizeof(vbt_signature) everwhere.

Works for me, up to you.

BR,
Jani.

>
>> 
>> >
>> >> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>> >> 
>> >> 
>> >> > +
>> >> >  /**
>> >> >   * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
>> >> >   * @display:	display device
>> >> > @@ -2986,7 +2988,7 @@ bool intel_bios_is_valid_vbt(struct intel_display *display,
>> >> >  		return false;
>> >> >  	}
>> >> >  
>> >> > -	if (memcmp(vbt->signature, "$VBT", 4)) {
>> >> > +	if (memcmp(vbt->signature, vbt_signature, sizeof(vbt_signature))) {
>> 
>> But then this would need strlen()
>> 
>> >> >  		drm_dbg_kms(display->drm, "VBT invalid signature\n");
>> >> >  		return false;
>> >> >  	}
>> >> > @@ -3082,9 +3084,11 @@ static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>> >> >  	oprom_offset = intel_uncore_read(&i915->uncore, OROM_OFFSET);
>> >> >  	oprom_offset &= OROM_OFFSET_MASK;
>> >> >  
>> >> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
>> 
>> And maybe this could be sizeof(vbt_signature) < sizeof(u32)
>> 
>> All of the alternatives are a bit disappointing, so maybe let's just
>> roll with the patch you already have here?
>> 
>> BR,
>> Jani.
>> 
>> >> > +
>> >> >  	for (count = 0; count < oprom_size; count += 4) {
>> >> >  		data = intel_spi_read32(&i915->uncore, oprom_offset + count);
>> >> > -		if (data == *((const u32 *)"$VBT")) {
>> >> > +		if (data == *((const u32 *)vbt_signature)) {
>> >> >  			found = oprom_offset + count;
>> >> >  			break;
>> >> >  		}
>> >> > @@ -3144,9 +3148,11 @@ static struct vbt_header *oprom_get_vbt(struct intel_display *display,
>> >> >  	if (!oprom)
>> >> >  		return NULL;
>> >> >  
>> >> > +	BUILD_BUG_ON(sizeof(vbt_signature) != sizeof(u32));
>> >> > +
>> >> >  	/* Scour memory looking for the VBT signature. */
>> >> >  	for (i = 0; i + 4 < size; i += 4) {
>> >> > -		if (ioread32(oprom + i) != *((const u32 *)"$VBT"))
>> >> > +		if (ioread32(oprom + i) != *((const u32 *)vbt_signature))
>> >> >  			continue;
>> >> >  
>> >> >  		p = oprom + i;
>> >> 
>> >> -- 
>> >> Jani Nikula, Intel
>> 
>> -- 
>> Jani Nikula, Intel

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/5] drm/i915/bios: Extract vbt_signature[]
  2024-09-23 14:24           ` Jani Nikula
@ 2024-09-23 14:29             ` Ville Syrjälä
  0 siblings, 0 replies; 23+ messages in thread
From: Ville Syrjälä @ 2024-09-23 14:29 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Mon, Sep 23, 2024 at 05:24:46PM +0300, Jani Nikula wrote:
> On Mon, 23 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Mon, Sep 23, 2024 at 12:12:39PM +0300, Jani Nikula wrote:
> >> On Fri, 20 Sep 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> >> > On Thu, Sep 12, 2024 at 03:15:52PM +0300, Jani Nikula wrote:
> >> >> On Tue, 10 Sep 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> >> >> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >> >> >
> >> >> > Replace the three hand rolled "$VBT"s with a vbt_signature[]
> >> >> > to avoid accidents.
> >> >> >
> >> >> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >> >> > ---
> >> >> >  drivers/gpu/drm/i915/display/intel_bios.c | 12 +++++++++---
> >> >> >  1 file changed, 9 insertions(+), 3 deletions(-)
> >> >> >
> >> >> > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> >> >> > index cbbda94c3dab..0b92b494117f 100644
> >> >> > --- a/drivers/gpu/drm/i915/display/intel_bios.c
> >> >> > +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> >> >> > @@ -2964,6 +2964,8 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
> >> >> >  	return _vbt + vbt->bdb_offset;
> >> >> >  }
> >> >> >  
> >> >> > +static const char vbt_signature[4] = "$VBT";
> >> >> 
> >> >> Always a bit scary to add strings without termination, but I guess it's
> >> >> justified here.
> >> >
> >> > I guess we could make it look less like a string with eg.
> >> > static const u8 vbt_signature[] = { '$', 'V', 'B', 'T' };
> >> > ?
> >> 
> >> Alternatively,
> >> 
> >> static const char *vbt_signature = "$VBT";
> >
> > Or could just be something like:
> >
> > static const char vbt_signature[] = "$VBT";
> > static const int vbt_signature_len = 4;
> >
> > BUILD_BUG_ON(vbt_signature_len != sizeof(vbt_signature) - 1);
> > BUILD_BUG_ON(vbt_signature_len != sizeof(u32));
> >
> > and use vbt_signature_len instead sizeof(vbt_signature) everwhere.
> 
> Works for me, up to you.

I'll roll with that. I guess it's safer to have the '\0'
in case someone gets the urge to do something like
printk("Unable to find %s ...\n", vbt_signature) etc.

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2024-09-23 14:29 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-10 13:42 [PATCH 0/5] drm/i915/bios: Refactor ROM access Ville Syrjala
2024-09-10 13:42 ` [PATCH 1/5] drm/i915/bios: Add some size checks to SPI VBT read Ville Syrjala
2024-09-12 11:56   ` Jani Nikula
2024-09-10 13:42 ` [PATCH 2/5] drm/i915/bios: Round PCI ROM VBT allocation to multiple of 4 Ville Syrjala
2024-09-12 11:57   ` Jani Nikula
2024-09-10 13:42 ` [PATCH 3/5] drm/i915/bios: Extract intel_spi_read16() Ville Syrjala
2024-09-12 12:02   ` Jani Nikula
2024-09-20 17:00     ` Ville Syrjälä
2024-09-10 13:42 ` [PATCH 4/5] drm/i915/bios: Extract vbt_signature[] Ville Syrjala
2024-09-12 12:15   ` Jani Nikula
2024-09-20 16:59     ` Ville Syrjälä
2024-09-23  9:12       ` Jani Nikula
2024-09-23 14:22         ` Ville Syrjälä
2024-09-23 14:24           ` Jani Nikula
2024-09-23 14:29             ` Ville Syrjälä
2024-09-10 13:42 ` [PATCH 5/5] drm/i915/bios: Extract soc/intel_rom.c Ville Syrjala
2024-09-12 12:44   ` Jani Nikula
2024-09-20 17:02     ` Ville Syrjälä
2024-09-23  9:13       ` Jani Nikula
2024-09-10 17:29 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/bios: Refactor ROM access Patchwork
2024-09-10 17:29 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-09-10 17:46 ` ✓ Fi.CI.BAT: success " Patchwork
2024-09-11  9:10 ` ✗ Fi.CI.IGT: failure " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox