[NOMERGE v3] Add debugging for failed GuC firmware load
Dave Gordon
david.s.gordon at intel.com
Fri Jul 22 16:47:54 UTC 2016
Signed-off-by: Dave Gordon <david.s.gordon at intel.com>
---
drivers/gpu/drm/i915/intel_guc_loader.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
index b9c9f15..9b72aaa 100644
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
@@ -559,10 +559,34 @@ static void guc_fw_fetch(struct drm_device *dev, struct intel_guc_fw *guc_fw)
size_t size;
int err;
+ unsigned int save_debug = drm_debug;
+ drm_debug |= DRM_UT_DRIVER;
+
DRM_DEBUG_DRIVER("before requesting firmware: GuC fw fetch status %s\n",
intel_guc_fw_status_repr(guc_fw->guc_fw_fetch_status));
err = request_firmware(&fw, guc_fw->guc_fw_path, &dev->pdev->dev);
+
+ if (WARN_ON(err == -ENOENT)) {
+ struct drm_i915_private *dev_priv = to_i915(dev);
+
+ DRM_DEBUG_DRIVER("GuC firmware NOT FOUND at '%s'\n", guc_fw->guc_fw_path);
+
+ err = request_firmware(&fw, dev_priv->csr.fw_path, &dev_priv->drm.pdev->dev);
+ if (err)
+ DRM_DEBUG_DRIVER("CSR firmware NOT FOUND at '%s'\n", dev_priv->csr.fw_path);
+ else
+ DRM_DEBUG_DRIVER("CSR firmware found at '%s'\n", dev_priv->csr.fw_path);
+ release_firmware(fw);
+
+ msleep(3000);
+ err = request_firmware(&fw, guc_fw->guc_fw_path, &dev_priv->drm.pdev->dev);
+ if (err)
+ DRM_DEBUG_DRIVER("GuC firmware still NOT FOUND at '%s'\n", guc_fw->guc_fw_path);
+ else
+ DRM_DEBUG_DRIVER("GuC firmware FOUND at '%s' after retry!\n", guc_fw->guc_fw_path);
+ }
+
if (err)
goto fail;
if (!fw)
@@ -653,12 +677,13 @@ static void guc_fw_fetch(struct drm_device *dev, struct intel_guc_fw *guc_fw)
release_firmware(fw);
guc_fw->guc_fw_fetch_status = GUC_FIRMWARE_SUCCESS;
+ drm_debug = save_debug;
return;
fail:
DRM_DEBUG_DRIVER("GuC fw fetch status FAIL; err %d, fw %p, obj %p\n",
err, fw, guc_fw->guc_fw_obj);
- DRM_ERROR("Failed to fetch GuC firmware from %s (error %d)\n",
+ DRM_ERROR("Failed to fetch GuC firmware from '%s' (error %d)\n",
guc_fw->guc_fw_path, err);
mutex_lock(&dev->struct_mutex);
@@ -670,6 +695,7 @@ static void guc_fw_fetch(struct drm_device *dev, struct intel_guc_fw *guc_fw)
release_firmware(fw); /* OK even if fw is NULL */
guc_fw->guc_fw_fetch_status = GUC_FIRMWARE_FAIL;
+ drm_debug = save_debug;
}
/**
--
1.9.1
More information about the Intel-gfx-trybot
mailing list