drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
Extension
.h
Size
22642 bytes
Lines
661
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 psp_ring {
	enum psp_ring_type		ring_type;
	struct psp_gfx_rb_frame		*ring_mem;
	uint64_t			ring_mem_mc_addr;
	void				*ring_mem_handle;
	uint32_t			ring_size;
	uint32_t			ring_wptr;
};

/* More registers may will be supported */
enum psp_reg_prog_id {
	PSP_REG_IH_RB_CNTL        = 0,  /* register IH_RB_CNTL */
	PSP_REG_IH_RB_CNTL_RING1  = 1,  /* register IH_RB_CNTL_RING1 */
	PSP_REG_IH_RB_CNTL_RING2  = 2,  /* register IH_RB_CNTL_RING2 */
	PSP_REG_MMHUB_L1_TLB_CNTL = 25,
	PSP_REG_LAST
};

#define PSP_WAITREG_CHANGED BIT(0) /* check if the value has changed */
#define PSP_WAITREG_NOVERBOSE BIT(1) /* No error verbose */

struct psp_funcs {
	int (*init_microcode)(struct psp_context *psp);
	int (*wait_for_bootloader)(struct psp_context *psp);
	int (*bootloader_load_kdb)(struct psp_context *psp);
	int (*bootloader_load_spl)(struct psp_context *psp);
	int (*bootloader_load_sysdrv)(struct psp_context *psp);
	int (*bootloader_load_soc_drv)(struct psp_context *psp);
	int (*bootloader_load_intf_drv)(struct psp_context *psp);
	int (*bootloader_load_dbg_drv)(struct psp_context *psp);
	int (*bootloader_load_ras_drv)(struct psp_context *psp);
	int (*bootloader_load_ipkeymgr_drv)(struct psp_context *psp);
	int (*bootloader_load_spdm_drv)(struct psp_context *psp);
	int (*bootloader_load_sos)(struct psp_context *psp);
	int (*ring_create)(struct psp_context *psp,
			   enum psp_ring_type ring_type);
	int (*ring_stop)(struct psp_context *psp,
			    enum psp_ring_type ring_type);
	int (*ring_destroy)(struct psp_context *psp,
			    enum psp_ring_type ring_type);
	bool (*smu_reload_quirk)(struct psp_context *psp);
	int (*mode1_reset)(struct psp_context *psp);
	int (*mem_training)(struct psp_context *psp, uint32_t ops);
	uint32_t (*ring_get_wptr)(struct psp_context *psp);
	void (*ring_set_wptr)(struct psp_context *psp, uint32_t value);
	int (*load_usbc_pd_fw)(struct psp_context *psp, uint64_t fw_pri_mc_addr);
	int (*read_usbc_pd_fw)(struct psp_context *psp, uint32_t *fw_ver);
	int (*update_spirom)(struct psp_context *psp, uint64_t fw_pri_mc_addr);
	int (*dump_spirom)(struct psp_context *psp, uint64_t fw_pri_mc_addr);
	int (*vbflash_stat)(struct psp_context *psp);
	int (*fatal_error_recovery_quirk)(struct psp_context *psp);
	bool (*get_ras_capability)(struct psp_context *psp);
	bool (*is_aux_sos_load_required)(struct psp_context *psp);
	bool (*is_reload_needed)(struct psp_context *psp);
	int (*reg_program_no_ring)(struct psp_context *psp, uint32_t val,
				   enum psp_reg_prog_id id);
	int (*get_fw_type)(struct amdgpu_firmware_info *ucode,
			enum psp_gfx_fw_type *type);
};

struct ta_funcs {
	int (*fn_ta_initialize)(struct psp_context *psp);
	int (*fn_ta_invoke)(struct psp_context *psp, uint32_t ta_cmd_id);
	int (*fn_ta_terminate)(struct psp_context *psp);
};

#define AMDGPU_XGMI_MAX_CONNECTED_NODES		64
struct psp_xgmi_node_info {
	uint64_t				node_id;
	uint8_t					num_hops;
	uint8_t					is_sharing_enabled;
	enum ta_xgmi_assigned_sdma_engine	sdma_engine;
	uint8_t					num_links;
	struct xgmi_connected_port_num		port_num[TA_XGMI__MAX_PORT_NUM];
};

struct psp_xgmi_topology_info {
	uint32_t			num_nodes;
	struct psp_xgmi_node_info	nodes[AMDGPU_XGMI_MAX_CONNECTED_NODES];
};

struct psp_bin_desc {
	uint32_t fw_version;
	uint32_t feature_version;
	uint32_t size_bytes;
	uint8_t *start_addr;
};

struct ta_mem_context {
	struct amdgpu_bo		*shared_bo;

Annotation

Implementation Notes