Home | History | Annotate | Line # | Download | only in uc
      1 /*	$NetBSD: intel_huc_fw.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $	*/
      2 
      3 // SPDX-License-Identifier: MIT
      4 /*
      5  * Copyright  2014-2019 Intel Corporation
      6  */
      7 
      8 #include <sys/cdefs.h>
      9 __KERNEL_RCSID(0, "$NetBSD: intel_huc_fw.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
     10 
     11 #include "gt/intel_gt.h"
     12 #include "intel_huc_fw.h"
     13 #include "i915_drv.h"
     14 
     15 /**
     16  * intel_huc_fw_init_early() - initializes HuC firmware struct
     17  * @huc: intel_huc struct
     18  *
     19  * On platforms with HuC selects firmware for uploading
     20  */
     21 void intel_huc_fw_init_early(struct intel_huc *huc)
     22 {
     23 	struct intel_gt *gt = huc_to_gt(huc);
     24 	struct intel_uc *uc = &gt->uc;
     25 	struct drm_i915_private *i915 = gt->i915;
     26 
     27 	intel_uc_fw_init_early(&huc->fw, INTEL_UC_FW_TYPE_HUC,
     28 			       intel_uc_uses_guc(uc),
     29 			       INTEL_INFO(i915)->platform, INTEL_REVID(i915));
     30 }
     31 
     32 /**
     33  * intel_huc_fw_upload() - load HuC uCode to device
     34  * @huc: intel_huc structure
     35  *
     36  * Called from intel_uc_init_hw() during driver load, resume from sleep and
     37  * after a GPU reset. Note that HuC must be loaded before GuC.
     38  *
     39  * The firmware image should have already been fetched into memory, so only
     40  * check that fetch succeeded, and then transfer the image to the h/w.
     41  *
     42  * Return:	non-zero code on error
     43  */
     44 int intel_huc_fw_upload(struct intel_huc *huc)
     45 {
     46 	/* HW doesn't look at destination address for HuC, so set it to 0 */
     47 	return intel_uc_fw_upload(&huc->fw, 0, HUC_UKERNEL);
     48 }
     49