Contributors: 9
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Daniele Ceraolo Spurio |
83 |
49.70% |
6 |
24.00% |
Sagar Arun Kamble |
23 |
13.77% |
3 |
12.00% |
Michal Wajdeczko |
20 |
11.98% |
7 |
28.00% |
Anusha Srivatsa |
15 |
8.98% |
2 |
8.00% |
Vitaly Lubart |
10 |
5.99% |
1 |
4.00% |
Arkadiusz Hiler |
6 |
3.59% |
2 |
8.00% |
Huang, Sean Z |
5 |
2.99% |
2 |
8.00% |
Tvrtko A. Ursulin |
3 |
1.80% |
1 |
4.00% |
Alan Previn |
2 |
1.20% |
1 |
4.00% |
Total |
167 |
|
25 |
|
// SPDX-License-Identifier: MIT
/*
* Copyright © 2014-2019 Intel Corporation
*/
#include "gt/intel_gsc.h"
#include "gt/intel_gt.h"
#include "intel_huc.h"
#include "intel_huc_fw.h"
#include "i915_drv.h"
#include "pxp/intel_pxp_huc.h"
int intel_huc_fw_load_and_auth_via_gsc(struct intel_huc *huc)
{
int ret;
if (!intel_huc_is_loaded_by_gsc(huc))
return -ENODEV;
if (!intel_uc_fw_is_loadable(&huc->fw))
return -ENOEXEC;
/*
* If we abort a suspend, HuC might still be loaded when the mei
* component gets re-bound and this function called again. If so, just
* mark the HuC as loaded.
*/
if (intel_huc_is_authenticated(huc)) {
intel_uc_fw_change_status(&huc->fw, INTEL_UC_FIRMWARE_RUNNING);
return 0;
}
GEM_WARN_ON(intel_uc_fw_is_loaded(&huc->fw));
ret = intel_pxp_huc_load_and_auth(huc_to_gt(huc)->i915->pxp);
if (ret)
return ret;
intel_uc_fw_change_status(&huc->fw, INTEL_UC_FIRMWARE_TRANSFERRED);
return intel_huc_wait_for_auth_complete(huc);
}
/**
* intel_huc_fw_upload() - load HuC uCode to device via DMA transfer
* @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)
{
if (intel_huc_is_loaded_by_gsc(huc))
return -ENODEV;
/* HW doesn't look at destination address for HuC, so set it to 0 */
return intel_uc_fw_upload(&huc->fw, 0, HUC_UKERNEL);
}