drm/i915/uc: HuC firmware can't be supported without GuC
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Wed, 7 Aug 2019 17:00:29 +0000 (17:00 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 7 Aug 2019 19:53:15 +0000 (20:53 +0100)
There is no point in selecting HuC firmware if GuC is unsupported
or it was already disabled, as we need GuC to authenticate HuC.

While around, make uc_fw_init_early work without direct access
to whole i915, pass only needed platform/rev info.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190807170034.8440-3-michal.wajdeczko@intel.com
drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
drivers/gpu/drm/i915/gt/uc/intel_huc_fw.c
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h

index 28735c14b9a030c783734807924064ec04a95f7b..11765cfb0498e60c0698a72d5523475791675ee1 100644 (file)
  */
 void intel_guc_fw_init_early(struct intel_guc *guc)
 {
-       intel_uc_fw_init_early(&guc->fw, INTEL_UC_FW_TYPE_GUC, guc_to_gt(guc)->i915);
+       struct drm_i915_private *i915 = guc_to_gt(guc)->i915;
+
+       intel_uc_fw_init_early(&guc->fw, INTEL_UC_FW_TYPE_GUC, HAS_GT_UC(i915),
+                              INTEL_INFO(i915)->platform, INTEL_REVID(i915));
 }
 
 static void guc_prepare_xfer(struct intel_uncore *uncore)
index 0e885859c828dd2015035323dfaaea7d852f1a4e..88dfed83782748f60a57b152ab3fa90a38c04c0a 100644 (file)
  */
 void intel_huc_fw_init_early(struct intel_huc *huc)
 {
-       intel_uc_fw_init_early(&huc->fw, INTEL_UC_FW_TYPE_HUC, huc_to_gt(huc)->i915);
+       struct intel_gt *gt = huc_to_gt(huc);
+       struct intel_uc *uc = &gt->uc;
+       struct drm_i915_private *i915 = gt->i915;
+
+       intel_uc_fw_init_early(&huc->fw, INTEL_UC_FW_TYPE_HUC,
+                              intel_uc_supports_guc(uc),
+                              INTEL_INFO(i915)->platform, INTEL_REVID(i915));
 }
 
 /**
index a3a22a26016c72e6974e219173f8a8304b244feb..00235cac84aafbe492f5a9f13c6efad660806688 100644 (file)
@@ -171,16 +171,18 @@ __uc_fw_override(struct intel_uc_fw *uc_fw)
 
 /**
  * intel_uc_fw_init_early - initialize the uC object and select the firmware
- * @i915: device private
  * @uc_fw: uC firmware
  * @type: type of uC
+ * @supported: is uC support possible
+ * @platform: platform identifier
+ * @rev: hardware revision
  *
  * Initialize the state of our uC object and relevant tracking and select the
  * firmware to fetch and load.
  */
 void intel_uc_fw_init_early(struct intel_uc_fw *uc_fw,
-                           enum intel_uc_fw_type type,
-                           struct drm_i915_private *i915)
+                           enum intel_uc_fw_type type, bool supported,
+                           enum intel_platform platform, u8 rev)
 {
        /*
         * we use FIRMWARE_UNINITIALIZED to detect checks against uc_fw->status
@@ -192,9 +194,8 @@ void intel_uc_fw_init_early(struct intel_uc_fw *uc_fw,
 
        uc_fw->type = type;
 
-       if (HAS_GT_UC(i915) && likely(!__uc_fw_override(uc_fw)))
-               __uc_fw_auto_select(uc_fw, INTEL_INFO(i915)->platform,
-                                   INTEL_REVID(i915));
+       if (supported && likely(!__uc_fw_override(uc_fw)))
+               __uc_fw_auto_select(uc_fw, platform, rev);
 
        if (uc_fw->path && *uc_fw->path)
                uc_fw->status = INTEL_UC_FIRMWARE_SELECTED;
index bfe3614613b7b8337a9512d453049a5706513bb0..7a858710d446e7c227ff2f86e51136146cdd5ded 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <linux/types.h>
 #include "intel_uc_fw_abi.h"
+#include "intel_device_info.h"
 #include "i915_gem.h"
 
 struct drm_printer;
@@ -170,8 +171,8 @@ static inline u32 intel_uc_fw_get_upload_size(struct intel_uc_fw *uc_fw)
 }
 
 void intel_uc_fw_init_early(struct intel_uc_fw *uc_fw,
-                           enum intel_uc_fw_type type,
-                           struct drm_i915_private *i915);
+                           enum intel_uc_fw_type type, bool supported,
+                           enum intel_platform platform, u8 rev);
 void intel_uc_fw_fetch(struct intel_uc_fw *uc_fw,
                       struct drm_i915_private *i915);
 void intel_uc_fw_cleanup_fetch(struct intel_uc_fw *uc_fw);