Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd: Add documentation for how to flash a dGPU

The flashing process for dGPUs uses sysfs files in a
non-obvious way, so document it for users.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Mario Limonciello and committed by
Alex Deucher
649663af 98d19a6c

+50
+33
Documentation/gpu/amdgpu/flashing.rst
··· 1 + ======================= 2 + dGPU firmware flashing 3 + ======================= 4 + 5 + IFWI 6 + ---- 7 + Flashing the dGPU integrated firmware image (IFWI) is supported by GPUs that 8 + use the PSP to orchestrate the update (Navi3x or newer GPUs). 9 + For supported GPUs, `amdgpu` will export a series of sysfs files that can be 10 + used for the flash process. 11 + 12 + The IFWI flash process is: 13 + 14 + 1. Ensure the IFWI image is intended for the dGPU on the system. 15 + 2. "Write" the IFWI image to the sysfs file `psp_vbflash`. This will stage the IFWI in memory. 16 + 3. "Read" from the `psp_vbflash` sysfs file to initiate the flash process. 17 + 4. Poll the `psp_vbflash_status` sysfs file to determine when the flash process completes. 18 + 19 + USB-C PD F/W 20 + ------------ 21 + On GPUs that support flashing an updated USB-C PD firmware image, the process 22 + is done using the `usbc_pd_fw` sysfs file. 23 + 24 + * Reading the file will provide the current firmware version. 25 + * Writing the name of a firmware payload stored in `/lib/firmware/amdgpu` to the sysfs file will initiate the flash process. 26 + 27 + The firmware payload stored in `/lib/firmware/amdgpu` can be named any name 28 + as long as it doesn't conflict with other existing binaries that are used by 29 + `amdgpu`. 30 + 31 + sysfs files 32 + ----------- 33 + .. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+1
Documentation/gpu/amdgpu/index.rst
··· 10 10 module-parameters 11 11 driver-core 12 12 display/index 13 + flashing 13 14 xgmi 14 15 ras 15 16 thermal
+16
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
··· 3570 3570 drm_dev_exit(idx); 3571 3571 } 3572 3572 3573 + /** 3574 + * DOC: usbc_pd_fw 3575 + * Reading from this file will retrieve the USB-C PD firmware version. Writing to 3576 + * this file will trigger the update process. 3577 + */ 3573 3578 static DEVICE_ATTR(usbc_pd_fw, 0644, 3574 3579 psp_usbc_pd_fw_sysfs_read, 3575 3580 psp_usbc_pd_fw_sysfs_write); ··· 3668 3663 return 0; 3669 3664 } 3670 3665 3666 + /** 3667 + * DOC: psp_vbflash 3668 + * Writing to this file will stage an IFWI for update. Reading from this file 3669 + * will trigger the update process. 3670 + */ 3671 3671 static struct bin_attribute psp_vbflash_bin_attr = { 3672 3672 .attr = {.name = "psp_vbflash", .mode = 0660}, 3673 3673 .size = 0, ··· 3680 3670 .read = amdgpu_psp_vbflash_read, 3681 3671 }; 3682 3672 3673 + /** 3674 + * DOC: psp_vbflash_status 3675 + * The status of the flash process. 3676 + * 0: IFWI flash not complete. 3677 + * 1: IFWI flash complete. 3678 + */ 3683 3679 static ssize_t amdgpu_psp_vbflash_status(struct device *dev, 3684 3680 struct device_attribute *attr, 3685 3681 char *buf)