drm/i915/uc: Consider enable_guc modparam during fw selection
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Wed, 31 Jul 2019 22:33:19 +0000 (22:33 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 1 Aug 2019 20:13:27 +0000 (21:13 +0100)
We can use value of enable_guc modparam during firmware path selection
and start using firmware status to see if GuC/HuC is being used.
This is first step to make enable_guc modparam read-only.

v2: rebased, don't care about <0 (Chris)
v3: oops

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/20190731223321.36436-3-michal.wajdeczko@intel.com
drivers/gpu/drm/i915/gt/uc/intel_guc.h
drivers/gpu/drm/i915/gt/uc/intel_huc.h
drivers/gpu/drm/i915/gt/uc/intel_uc.h
drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c

index 714e9892aaffc8fab9ea96316bb3aeb238bfa2ed..5901506672cd9f504cb96f08352ae32ec6bf2096 100644 (file)
@@ -172,6 +172,11 @@ int intel_guc_suspend(struct intel_guc *guc);
 int intel_guc_resume(struct intel_guc *guc);
 struct i915_vma *intel_guc_allocate_vma(struct intel_guc *guc, u32 size);
 
+static inline bool intel_guc_is_supported(struct intel_guc *guc)
+{
+       return intel_uc_fw_supported(&guc->fw);
+}
+
 static inline bool intel_guc_is_running(struct intel_guc *guc)
 {
        return intel_uc_fw_is_running(&guc->fw);
index 4465209ce233b20f4a4f7b0c62e0e3e62aae2323..a6ae59b8cb773681ac839550d08baad2d7c001f0 100644 (file)
@@ -55,6 +55,11 @@ static inline int intel_huc_sanitize(struct intel_huc *huc)
        return 0;
 }
 
+static inline bool intel_huc_is_supported(struct intel_huc *huc)
+{
+       return intel_uc_fw_supported(&huc->fw);
+}
+
 static inline bool intel_huc_is_authenticated(struct intel_huc *huc)
 {
        return intel_uc_fw_is_running(&huc->fw);
index 7ccf6cfa984cf8819b65fbb55d1cebc080a1e369..a81c016ff078a9a217ee5528460ad7fcc0d5a747 100644 (file)
@@ -51,8 +51,7 @@ int intel_uc_runtime_resume(struct intel_uc *uc);
 
 static inline bool intel_uc_supports_guc(struct intel_uc *uc)
 {
-       GEM_BUG_ON(i915_modparams.enable_guc < 0);
-       return i915_modparams.enable_guc > 0;
+       return intel_guc_is_supported(&uc->guc);
 }
 
 static inline bool intel_uc_supports_guc_submission(struct intel_uc *uc)
@@ -63,8 +62,7 @@ static inline bool intel_uc_supports_guc_submission(struct intel_uc *uc)
 
 static inline bool intel_uc_supports_huc(struct intel_uc *uc)
 {
-       GEM_BUG_ON(i915_modparams.enable_guc < 0);
-       return i915_modparams.enable_guc & ENABLE_GUC_LOAD_HUC;
+       return intel_huc_is_supported(&uc->huc);
 }
 
 #endif
index ac91e3efd02bdc683175cb8ffdf0b2975de42099..650ad6037b743609c51986e9388cf94c13f3ccee 100644 (file)
@@ -132,6 +132,25 @@ __uc_fw_auto_select(struct intel_uc_fw *uc_fw, enum intel_platform p, u8 rev)
                        uc_fw->path = NULL;
                }
        }
+
+       /* We don't want to enable GuC/HuC on pre-Gen11 by default */
+       if (i915_modparams.enable_guc == -1 && p < INTEL_ICELAKE)
+               uc_fw->path = NULL;
+}
+
+static const char *__override_guc_firmware_path(void)
+{
+       if (i915_modparams.enable_guc & (ENABLE_GUC_SUBMISSION |
+                                        ENABLE_GUC_LOAD_HUC))
+               return i915_modparams.guc_firmware_path;
+       return "";
+}
+
+static const char *__override_huc_firmware_path(void)
+{
+       if (i915_modparams.enable_guc & ENABLE_GUC_LOAD_HUC)
+               return i915_modparams.huc_firmware_path;
+       return "";
 }
 
 static bool
@@ -139,10 +158,10 @@ __uc_fw_override(struct intel_uc_fw *uc_fw)
 {
        switch (uc_fw->type) {
        case INTEL_UC_FW_TYPE_GUC:
-               uc_fw->path = i915_modparams.guc_firmware_path;
+               uc_fw->path = __override_guc_firmware_path();
                break;
        case INTEL_UC_FW_TYPE_HUC:
-               uc_fw->path = i915_modparams.huc_firmware_path;
+               uc_fw->path = __override_huc_firmware_path();
                break;
        }