]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/xe/guc: Add more GuC load error status codes
authorJohn Harrison <John.C.Harrison@Intel.com>
Sat, 26 Jul 2025 02:43:37 +0000 (19:43 -0700)
committerJohn Harrison <John.C.Harrison@Intel.com>
Mon, 28 Jul 2025 21:38:44 +0000 (14:38 -0700)
The GuC load process will abort if certain status codes (which are
indicative of a fatal error) are reported. Otherwise, it keeps waiting
until the 'success' code is returned. New error codes have been added
in recent GuC releases, so add support for aborting on those as well.

v2: Shuffle HWCONFIG_START to the front of the switch to keep the
ordering as per the enum define for clarity (review feedback by
Jonathan). Also add a description for the basic 'invalid init data'
code which was missing.

Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
Link: https://lore.kernel.org/r/20250726024337.4056272-1-John.C.Harrison@Intel.com
drivers/gpu/drm/xe/abi/guc_errors_abi.h
drivers/gpu/drm/xe/xe_guc.c

index ecf748fd87df3253b8a7d18e349b5fd6dc586552..ad76b4baf42e9bcc64feffa56430305c77e6c44e 100644 (file)
@@ -63,6 +63,7 @@ enum xe_guc_load_status {
        XE_GUC_LOAD_STATUS_HWCONFIG_START                   = 0x05,
        XE_GUC_LOAD_STATUS_HWCONFIG_DONE                    = 0x06,
        XE_GUC_LOAD_STATUS_HWCONFIG_ERROR                   = 0x07,
+       XE_GUC_LOAD_STATUS_BOOTROM_VERSION_MISMATCH         = 0x08,
        XE_GUC_LOAD_STATUS_GDT_DONE                         = 0x10,
        XE_GUC_LOAD_STATUS_IDT_DONE                         = 0x20,
        XE_GUC_LOAD_STATUS_LAPIC_DONE                       = 0x30,
@@ -75,6 +76,8 @@ enum xe_guc_load_status {
        XE_GUC_LOAD_STATUS_INVALID_INIT_DATA_RANGE_START,
        XE_GUC_LOAD_STATUS_MPU_DATA_INVALID                 = 0x73,
        XE_GUC_LOAD_STATUS_INIT_MMIO_SAVE_RESTORE_INVALID   = 0x74,
+       XE_GUC_LOAD_STATUS_KLV_WORKAROUND_INIT_ERROR        = 0x75,
+       XE_GUC_LOAD_STATUS_INVALID_FTR_FLAG                 = 0x76,
        XE_GUC_LOAD_STATUS_INVALID_INIT_DATA_RANGE_END,
 
        XE_GUC_LOAD_STATUS_READY                            = 0xF0,
index b1d1d6da37581ea1468bfa953455b6b27b9beef0..9e34401e4489fb461f3871e37fe3bf58658e993e 100644 (file)
@@ -992,11 +992,14 @@ static int guc_load_done(u32 status)
        case XE_GUC_LOAD_STATUS_GUC_PREPROD_BUILD_MISMATCH:
        case XE_GUC_LOAD_STATUS_ERROR_DEVID_INVALID_GUCTYPE:
        case XE_GUC_LOAD_STATUS_HWCONFIG_ERROR:
+       case XE_GUC_LOAD_STATUS_BOOTROM_VERSION_MISMATCH:
        case XE_GUC_LOAD_STATUS_DPC_ERROR:
        case XE_GUC_LOAD_STATUS_EXCEPTION:
        case XE_GUC_LOAD_STATUS_INIT_DATA_INVALID:
        case XE_GUC_LOAD_STATUS_MPU_DATA_INVALID:
        case XE_GUC_LOAD_STATUS_INIT_MMIO_SAVE_RESTORE_INVALID:
+       case XE_GUC_LOAD_STATUS_KLV_WORKAROUND_INIT_ERROR:
+       case XE_GUC_LOAD_STATUS_INVALID_FTR_FLAG:
                return -1;
        }
 
@@ -1136,17 +1139,29 @@ static void guc_wait_ucode(struct xe_guc *guc)
                }
 
                switch (ukernel) {
+               case XE_GUC_LOAD_STATUS_HWCONFIG_START:
+                       xe_gt_err(gt, "still extracting hwconfig table.\n");
+                       break;
+
                case XE_GUC_LOAD_STATUS_EXCEPTION:
                        xe_gt_err(gt, "firmware exception. EIP: %#x\n",
                                  xe_mmio_read32(mmio, SOFT_SCRATCH(13)));
                        break;
 
+               case XE_GUC_LOAD_STATUS_INIT_DATA_INVALID:
+                       xe_gt_err(gt, "illegal init/ADS data\n");
+                       break;
+
                case XE_GUC_LOAD_STATUS_INIT_MMIO_SAVE_RESTORE_INVALID:
                        xe_gt_err(gt, "illegal register in save/restore workaround list\n");
                        break;
 
-               case XE_GUC_LOAD_STATUS_HWCONFIG_START:
-                       xe_gt_err(gt, "still extracting hwconfig table.\n");
+               case XE_GUC_LOAD_STATUS_KLV_WORKAROUND_INIT_ERROR:
+                       xe_gt_err(gt, "illegal workaround KLV data\n");
+                       break;
+
+               case XE_GUC_LOAD_STATUS_INVALID_FTR_FLAG:
+                       xe_gt_err(gt, "illegal feature flag specified\n");
                        break;
                }