brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · ba5cb08 Raw
102 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2014-2019 Intel Corporation4 */5 6#ifndef _INTEL_HUC_H_7#define _INTEL_HUC_H_8 9#include "i915_reg_defs.h"10#include "i915_sw_fence.h"11#include "intel_uc_fw.h"12#include "intel_huc_fw.h"13 14#include <linux/notifier.h>15#include <linux/hrtimer.h>16 17struct bus_type;18struct i915_vma;19 20enum intel_huc_delayed_load_status {21	INTEL_HUC_WAITING_ON_GSC = 0,22	INTEL_HUC_WAITING_ON_PXP,23	INTEL_HUC_DELAYED_LOAD_ERROR,24};25 26enum intel_huc_authentication_type {27	INTEL_HUC_AUTH_BY_GUC = 0,28	INTEL_HUC_AUTH_BY_GSC,29	INTEL_HUC_AUTH_MAX_MODES30};31 32struct intel_huc {33	/* Generic uC firmware management */34	struct intel_uc_fw fw;35 36	/* HuC-specific additions */37	struct {38		i915_reg_t reg;39		u32 mask;40		u32 value;41	} status[INTEL_HUC_AUTH_MAX_MODES];42 43	struct {44		struct i915_sw_fence fence;45		struct hrtimer timer;46		struct notifier_block nb;47		enum intel_huc_delayed_load_status status;48	} delayed_load;49 50	/* for load via GSCCS */51	struct i915_vma *heci_pkt;52 53	bool loaded_via_gsc;54};55 56int intel_huc_sanitize(struct intel_huc *huc);57void intel_huc_init_early(struct intel_huc *huc);58int intel_huc_init(struct intel_huc *huc);59void intel_huc_fini(struct intel_huc *huc);60void intel_huc_suspend(struct intel_huc *huc);61int intel_huc_auth(struct intel_huc *huc, enum intel_huc_authentication_type type);62int intel_huc_wait_for_auth_complete(struct intel_huc *huc,63				     enum intel_huc_authentication_type type);64bool intel_huc_is_authenticated(struct intel_huc *huc,65				enum intel_huc_authentication_type type);66int intel_huc_check_status(struct intel_huc *huc);67void intel_huc_update_auth_status(struct intel_huc *huc);68 69void intel_huc_register_gsc_notifier(struct intel_huc *huc, const struct bus_type *bus);70void intel_huc_unregister_gsc_notifier(struct intel_huc *huc, const struct bus_type *bus);71 72static inline bool intel_huc_is_supported(struct intel_huc *huc)73{74	return intel_uc_fw_is_supported(&huc->fw);75}76 77static inline bool intel_huc_is_wanted(struct intel_huc *huc)78{79	return intel_uc_fw_is_enabled(&huc->fw);80}81 82static inline bool intel_huc_is_used(struct intel_huc *huc)83{84	GEM_BUG_ON(__intel_uc_fw_status(&huc->fw) == INTEL_UC_FIRMWARE_SELECTED);85	return intel_uc_fw_is_available(&huc->fw);86}87 88static inline bool intel_huc_is_loaded_by_gsc(const struct intel_huc *huc)89{90	return huc->loaded_via_gsc;91}92 93static inline bool intel_huc_wait_required(struct intel_huc *huc)94{95	return intel_huc_is_used(huc) && intel_huc_is_loaded_by_gsc(huc) &&96	       !intel_huc_is_authenticated(huc, INTEL_HUC_AUTH_BY_GSC);97}98 99void intel_huc_load_status(struct intel_huc *huc, struct drm_printer *p);100 101#endif102