To be able to setup GuC submission functions during engine init we need to commit to using GuC as soon as possible. Currently, the only thing that can stop us from using the microcontrollers once we've fetched the blobs is a fundamental error (e.g. OOM); given that if we hit such an error we can't really fall-back to anything, we can "officialize" the FW fetching completion as the moment at which we're committing to using GuC. To better differentiate this case, the uses_guc check, which indicates that GuC is supported and was selected in modparam, is renamed to wants_guc and a new uses_guc is introduced to represent the case were we're committed to using the GuC. Note that uses_guc does still not imply that the blob is actually loaded on the HW (is_running is the check for that). Also, since we need to have attempted the fetch for the result of uses_guc to be meaningful, we need to make sure we've moved away from INTEL_UC_FIRMWARE_SELECTED. All the GuC changes have been mirrored on the HuC for coherency. v2: split fetch return changes and new macros to their own patches, support HuC only if GuC is wanted, improve "used" state description (Michal) v3: s/wants_huc/uses_huc in uc_init_wopcm Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com> Cc: John Harrison <John.C.Harrison@Intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Fernando Pacheco <fernando.pacheco@intel.com> #v1 Reviewed-by: John Harrison <John.C.Harrison@Intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20200218223327.11058-6-daniele.ceraolospurio@intel.com
61 lines
1.3 KiB
C
61 lines
1.3 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2014-2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _INTEL_HUC_H_
|
|
#define _INTEL_HUC_H_
|
|
|
|
#include "i915_reg.h"
|
|
#include "intel_uc_fw.h"
|
|
#include "intel_huc_fw.h"
|
|
|
|
struct intel_huc {
|
|
/* Generic uC firmware management */
|
|
struct intel_uc_fw fw;
|
|
|
|
/* HuC-specific additions */
|
|
struct i915_vma *rsa_data;
|
|
|
|
struct {
|
|
i915_reg_t reg;
|
|
u32 mask;
|
|
u32 value;
|
|
} status;
|
|
};
|
|
|
|
void intel_huc_init_early(struct intel_huc *huc);
|
|
int intel_huc_init(struct intel_huc *huc);
|
|
void intel_huc_fini(struct intel_huc *huc);
|
|
int intel_huc_auth(struct intel_huc *huc);
|
|
int intel_huc_check_status(struct intel_huc *huc);
|
|
|
|
static inline int intel_huc_sanitize(struct intel_huc *huc)
|
|
{
|
|
intel_uc_fw_sanitize(&huc->fw);
|
|
return 0;
|
|
}
|
|
|
|
static inline bool intel_huc_is_supported(struct intel_huc *huc)
|
|
{
|
|
return intel_uc_fw_is_supported(&huc->fw);
|
|
}
|
|
|
|
static inline bool intel_huc_is_wanted(struct intel_huc *huc)
|
|
{
|
|
return intel_uc_fw_is_enabled(&huc->fw);
|
|
}
|
|
|
|
static inline bool intel_huc_is_used(struct intel_huc *huc)
|
|
{
|
|
GEM_BUG_ON(__intel_uc_fw_status(&huc->fw) == INTEL_UC_FIRMWARE_SELECTED);
|
|
return intel_uc_fw_is_available(&huc->fw);
|
|
}
|
|
|
|
static inline bool intel_huc_is_authenticated(struct intel_huc *huc)
|
|
{
|
|
return intel_uc_fw_is_running(&huc->fw);
|
|
}
|
|
|
|
#endif
|