drivers/gpu/drm/i915/pxp/intel_pxp_types.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/i915/pxp/intel_pxp_types.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/i915/pxp/intel_pxp_types.h
Extension
.h
Size
4160 bytes
Lines
131
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct intel_pxp {
	/**
	 * @ctrl_gt: pointer to the tile that owns the controls for PXP subsystem assets that
	 * the VDBOX, the KCR engine (and GSC CS depending on the platform)
	 */
	struct intel_gt *ctrl_gt;

	/**
	 * @platform_cfg_is_bad: used to track if any prior arb session creation resulted
	 * in a failure that was caused by a platform configuration issue, meaning that
	 * failure will not get resolved without a change to the platform (not kernel)
	 * such as BIOS configuration, firwmware update, etc. This bool gets reflected when
	 * GET_PARAM:I915_PARAM_PXP_STATUS is called.
	 */
	bool platform_cfg_is_bad;

	/**
	 * @kcr_base: base mmio offset for the KCR engine which is different on legacy platforms
	 * vs newer platforms where the KCR is inside the media-tile.
	 */
	u32 kcr_base;

	/**
	 * @gsccs_res: resources for request submission for platforms that have a GSC engine.
	 */
	struct gsccs_session_resources {
		u64 host_session_handle; /* used by firmware to link commands to sessions */
		struct intel_context *ce; /* context for gsc command submission */

		struct i915_vma *pkt_vma; /* GSC FW cmd packet vma */
		void *pkt_vaddr;  /* GSC FW cmd packet virt pointer */

		struct i915_vma *bb_vma; /* HECI_PKT batch buffer vma */
		void *bb_vaddr; /* HECI_PKT batch buffer virt pointer */
	} gsccs_res;

	/**
	 * @pxp_component: i915_pxp_component struct of the bound mei_pxp
	 * module. Only set and cleared inside component bind/unbind functions,
	 * which are protected by &tee_mutex.
	 */
	struct i915_pxp_component *pxp_component;

	/**
	 * @dev_link: Enforce module relationship for power management ordering.
	 */
	struct device_link *dev_link;
	/**
	 * @pxp_component_added: track if the pxp component has been added.
	 * Set and cleared in tee init and fini functions respectively.
	 */
	bool pxp_component_added;

	/** @ce: kernel-owned context used for PXP operations */
	struct intel_context *ce;

	/** @arb_mutex: protects arb session start */
	struct mutex arb_mutex;
	/**
	 * @arb_is_valid: tracks arb session status.
	 * After a teardown, the arb session can still be in play on the HW
	 * even if the keys are gone, so we can't rely on the HW state of the
	 * session to know if it's valid and need to track the status in SW.
	 */
	bool arb_is_valid;

	/**
	 * @key_instance: tracks which key instance we're on, so we can use it
	 * to determine if an object was created using the current key or a
	 * previous one.
	 */
	u32 key_instance;

	/** @tee_mutex: protects the tee channel binding and messaging. */
	struct mutex tee_mutex;

	/** @stream_cmd: LMEM obj used to send stream PXP commands to the GSC */
	struct {
		struct drm_i915_gem_object *obj; /* contains PXP command memory */
		void *vaddr; /* virtual memory for PXP command */
	} stream_cmd;

	/**
	 * @hw_state_invalidated: if the HW perceives an attack on the integrity
	 * of the encryption it will invalidate the keys and expect SW to
	 * re-initialize the session. We keep track of this state to make sure
	 * we only re-start the arb session when required.
	 */
	bool hw_state_invalidated;

Annotation

Implementation Notes