dGPU firmware flashing

IFWI

Flashing the dGPU integrated firmware image (IFWI) is supported by GPUs that use the PSP to orchestrate the update (Navi3x or newer GPUs). For supported GPUs, amdgpu will export a series of sysfs files that can be used for the flash process.

The IFWI flash process is:

  1. Ensure the IFWI image is intended for the dGPU on the system.

  2. “Write” the IFWI image to the sysfs file psp_vbflash. This will stage the IFWI in memory.

  3. “Read” from the psp_vbflash sysfs file to initiate the flash process.

  4. Poll the psp_vbflash_status sysfs file to determine when the flash process completes.

USB-C PD F/W

On GPUs that support flashing an updated USB-C PD firmware image, the process is done using the usbc_pd_fw sysfs file.

  • Reading the file will provide the current firmware version.

  • Writing the name of a firmware payload stored in /lib/firmware/amdgpu to the sysfs file will initiate the flash process.

The firmware payload stored in /lib/firmware/amdgpu can be named any name as long as it doesn’t conflict with other existing binaries that are used by amdgpu.

sysfs files

void amdgpu_psp_irq_mgr_dispatch(struct amdgpu_psp_irq_mgr *mgr, struct amdgpu_iv_entry *entry)

run the registered handler for a PSP event

Parameters

struct amdgpu_psp_irq_mgr *mgr

IRQ manager

struct amdgpu_iv_entry *entry

IH entry from the PSP soft ring

Description

Invokes the handler for the entry’s event id (or the default handler) in process context. Call from the .process callback for PSP soft ring entries.

int amdgpu_psp_irq_mgr_register(struct amdgpu_psp_irq_mgr *mgr, const struct amdgpu_psp_irq_handler *handlers, int count, const struct amdgpu_psp_irq_handler *default_handler)

register PSP interrupt handlers by event id

Parameters

struct amdgpu_psp_irq_mgr *mgr

PSP interrupt manager

const struct amdgpu_psp_irq_handler *handlers

per-event handlers, or NULL

int count

number of handlers

const struct amdgpu_psp_irq_handler *default_handler

fallback for unregistered event ids, or NULL

Description

Handlers must be statically allocated and stay valid until psp_irq_mgr_fini().

Return

0 on success, negative error from xa_insert (e.g. duplicate event_id).

int parse_psp_v1_bin_descriptor(struct psp_bin_desc *desc, const struct psp_firmware_header_v1_0 *hdr)

Populate struct psp_bin_desc from a v1.0 PSP firmware header (standalone images such as ASD or TOC).

Parameters

struct psp_bin_desc *desc

undescribed

const struct psp_firmware_header_v1_0 *hdr

undescribed

usbc_pd_fw

Reading from this file will retrieve the USB-C PD firmware version. Writing to this file will trigger the update process.

PTL sysfs attributes

These sysfs files under /sys/class/drm/cardX/device/ptl allow users to enable or disable the Peak Tops Limiter (PTL), configure preferred PTL data formats, and query supported formats for each GPU.

psp_vbflash

Writing to this file will stage an IFWI for update. Reading from this file will trigger the update process.

psp_vbflash_status

The status of the flash process. 0: IFWI flash not complete. 1: IFWI flash complete.