We really need to have separate NOT_SUPPORTED state (for lack of hardware support) and DISABLED state (to indicate user decision) as we will have to take special steps even if GuC firmware is now disabled but hardware exists and could have been previously used. v2: fix logic (Chris/CI) v3: use proper check to avoid probe failure (CI) v4: explain status transitions (Chris) 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/20190816205658.15020-1-michal.wajdeczko@intel.com
59 lines
1.7 KiB
C
59 lines
1.7 KiB
C
// SPDX-License-Identifier: MIT
|
|
/*
|
|
* Copyright © 2014-2019 Intel Corporation
|
|
*/
|
|
|
|
#include "gt/intel_gt.h"
|
|
#include "intel_huc_fw.h"
|
|
#include "i915_drv.h"
|
|
|
|
/**
|
|
* DOC: HuC Firmware
|
|
*
|
|
* Motivation:
|
|
* GEN9 introduces a new dedicated firmware for usage in media HEVC (High
|
|
* Efficiency Video Coding) operations. Userspace can use the firmware
|
|
* capabilities by adding HuC specific commands to batch buffers.
|
|
*
|
|
* Implementation:
|
|
* The same firmware loader is used as the GuC. However, the actual
|
|
* loading to HW is deferred until GEM initialization is done.
|
|
*
|
|
* Note that HuC firmware loading must be done before GuC loading.
|
|
*/
|
|
|
|
/**
|
|
* intel_huc_fw_init_early() - initializes HuC firmware struct
|
|
* @huc: intel_huc struct
|
|
*
|
|
* On platforms with HuC selects firmware for uploading
|
|
*/
|
|
void intel_huc_fw_init_early(struct intel_huc *huc)
|
|
{
|
|
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_uses_guc(uc),
|
|
INTEL_INFO(i915)->platform, INTEL_REVID(i915));
|
|
}
|
|
|
|
/**
|
|
* intel_huc_fw_upload() - load HuC uCode to device
|
|
* @huc: intel_huc structure
|
|
*
|
|
* Called from intel_uc_init_hw() during driver load, resume from sleep and
|
|
* after a GPU reset. Note that HuC must be loaded before GuC.
|
|
*
|
|
* The firmware image should have already been fetched into memory, so only
|
|
* check that fetch succeeded, and then transfer the image to the h/w.
|
|
*
|
|
* Return: non-zero code on error
|
|
*/
|
|
int intel_huc_fw_upload(struct intel_huc *huc)
|
|
{
|
|
/* HW doesn't look at destination address for HuC, so set it to 0 */
|
|
return intel_uc_fw_upload(&huc->fw, huc_to_gt(huc), 0, HUC_UKERNEL);
|
|
}
|