From 933e89b52f9345294433ea503d867c10c48d4182 Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Fri, 31 Jan 2025 11:28:20 -0600 Subject: [PATCH 1/3] drivers/intel/gma: Fix alignment of extended VBT in opregion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Intel's reference implementation in Slimbootloader pads the area allocated for the extended VBT to the nearest 512-byte boundary, which strongly suggests that the Windows driver expects the same. TEST=build/boot Linux 6.9, Win11 on starlabs/starlite_adl, verify VBT read properly by OS. Change-Id: Ib3784eea6eb929ffec9672fc123b833c11c057e8 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/86275 Reviewed-by: Jérémy Compostella Tested-by: build bot (Jenkins) --- src/drivers/intel/gma/opregion.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/drivers/intel/gma/opregion.c b/src/drivers/intel/gma/opregion.c index d5516389e5..2d37fcf652 100644 --- a/src/drivers/intel/gma/opregion.c +++ b/src/drivers/intel/gma/opregion.c @@ -287,7 +287,7 @@ static inline bool uses_relative_vbt_addr(opregion_header_t *header) * values correctly for the opregion. */ static void opregion_add_ext_vbt(igd_opregion_t *opregion, uint8_t *ext_vbt, - optionrom_vbt_t *vbt) + optionrom_vbt_t *vbt, size_t ext_vbt_size) { opregion_header_t *header = &opregion->header; /* Copy VBT into extended VBT region (at offset 8 KiB) */ @@ -301,7 +301,7 @@ static void opregion_add_ext_vbt(igd_opregion_t *opregion, uint8_t *ext_vbt, else opregion->mailbox3.rvda = (uintptr_t)ext_vbt; - opregion->mailbox3.rvds = vbt->hdr_vbt_size; + opregion->mailbox3.rvds = ext_vbt_size; } /* Initialize IGD OpRegion, called from ACPI code and OS drivers */ @@ -311,6 +311,7 @@ enum cb_err intel_gma_init_igd_opregion(void) struct region_device rdev; optionrom_vbt_t *vbt = NULL; size_t opregion_size = sizeof(igd_opregion_t); + size_t ext_vbt_size; if (acpi_is_wakeup_s3()) return intel_gma_restore_opregion(); @@ -331,7 +332,9 @@ enum cb_err intel_gma_init_igd_opregion(void) } /* Add the space for the extended VBT header even if it's not used */ - opregion_size += vbt->hdr_vbt_size; + /* Align the VBT to nearest 512 byte boundary */ + ext_vbt_size = ALIGN_UP(vbt->hdr_vbt_size, 512); + opregion_size += ext_vbt_size; opregion = cbmem_add(CBMEM_ID_IGD_OPREGION, opregion_size); if (!opregion) { @@ -353,7 +356,7 @@ enum cb_err intel_gma_init_igd_opregion(void) if (is_ext_vbt_required(opregion, vbt)) { /* Place extended VBT just after opregion */ uint8_t *ext_vbt = (uint8_t *)opregion + sizeof(*opregion); - opregion_add_ext_vbt(opregion, ext_vbt, vbt); + opregion_add_ext_vbt(opregion, ext_vbt, vbt, ext_vbt_size); } else { /* Raw VBT size which can fit in gvd1 */ memcpy(opregion->vbt.gvd1, vbt, vbt->hdr_vbt_size); From 69c518b47ec0ac2235c59ef1c35abe4407679d09 Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Tue, 4 Feb 2025 10:32:58 -0600 Subject: [PATCH 2/3] drivers/intel/gma: Don't advertise support for opregion mailbox #2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IGD mailbox #2, Software SCI Interface, is not supported by coreboot currently, as it requires supporting the Get BIOS Data (GBDA) and System BIOS Callbacks (SBCB) interfaces. Since coreboot doesn't support these, don't advertise mailbox #2 support. This eliminates an error with the Linux display drivers: "SWSCI request timed out" TEST=build/boot Linux 6.9, Win11 on starlabs/starlite_adl Change-Id: I8efcf9c5d384b6e0ce159d65cb1497c2e2e47f42 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/86276 Reviewed-by: Sean Rhodes Tested-by: build bot (Jenkins) Reviewed-by: Jérémy Compostella --- src/drivers/intel/gma/opregion.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/drivers/intel/gma/opregion.h b/src/drivers/intel/gma/opregion.h index 7b6a85db52..2de9213743 100644 --- a/src/drivers/intel/gma/opregion.h +++ b/src/drivers/intel/gma/opregion.h @@ -41,8 +41,7 @@ typedef struct { #define IGD_MBOX4 (1 << 3) #define IGD_MBOX5 (1 << 4) -#define MAILBOXES_MOBILE (IGD_MBOX1 | IGD_MBOX2 | IGD_MBOX3 | \ - IGD_MBOX4 | IGD_MBOX5) +#define MAILBOXES_MOBILE (IGD_MBOX1 | IGD_MBOX3 | IGD_MBOX4 | IGD_MBOX5) #define MAILBOXES_DESKTOP (IGD_MBOX2 | IGD_MBOX4) #define SBIOS_VERSION_SIZE 32 From 173921b8f277958076074922364b1b297a064320 Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Tue, 4 Feb 2025 13:39:26 -0600 Subject: [PATCH 3/3] drivers/intel/gma: Drop unused MAILBOXES_DESKTOP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MAILBOXES_DESKTOP is unused, and the IGD opregion spec makes no distinction in the mailboxes supported between desktop and mobile platforms. Rename MAILBOXES_MOBILE to IGD_MAILBOXES for consistency with other mailbox variables and clean up the comment. Change-Id: Ia06fe75702887aa6953bf17bd4bc14af4038bec5 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/86279 Reviewed-by: Jérémy Compostella Tested-by: build bot (Jenkins) --- src/drivers/intel/gma/opregion.c | 4 ++-- src/drivers/intel/gma/opregion.h | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/drivers/intel/gma/opregion.c b/src/drivers/intel/gma/opregion.c index 2d37fcf652..0ee9d0e6e1 100644 --- a/src/drivers/intel/gma/opregion.c +++ b/src/drivers/intel/gma/opregion.c @@ -367,8 +367,8 @@ enum cb_err intel_gma_init_igd_opregion(void) /* 8kb */ opregion->header.size = sizeof(igd_opregion_t) / 1024; - // FIXME We just assume we're mobile for now - opregion->header.mailboxes = MAILBOXES_MOBILE; + // Supported mailboxes + opregion->header.mailboxes = IGD_MAILBOXES; // TODO Initialize Mailbox 1 opregion->mailbox1.clid = 1; diff --git a/src/drivers/intel/gma/opregion.h b/src/drivers/intel/gma/opregion.h index 2de9213743..77fccf8e54 100644 --- a/src/drivers/intel/gma/opregion.h +++ b/src/drivers/intel/gma/opregion.h @@ -41,8 +41,7 @@ typedef struct { #define IGD_MBOX4 (1 << 3) #define IGD_MBOX5 (1 << 4) -#define MAILBOXES_MOBILE (IGD_MBOX1 | IGD_MBOX3 | IGD_MBOX4 | IGD_MBOX5) -#define MAILBOXES_DESKTOP (IGD_MBOX2 | IGD_MBOX4) +#define IGD_MAILBOXES (IGD_MBOX1 | IGD_MBOX3 | IGD_MBOX4 | IGD_MBOX5) #define SBIOS_VERSION_SIZE 32