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
*/
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)
*/
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 = >->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));
}
/**
/**
* 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
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;
#include <linux/types.h>
#include "intel_uc_fw_abi.h"
+#include "intel_device_info.h"
#include "i915_gem.h"
struct drm_printer;
}
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);