diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 25217b05c0ea..e7974de8b035 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -26,6 +26,7 @@  #include <linux/firmware.h>  #include <linux/module.h> +#include <linux/dmi.h>  #include <linux/pci.h>  #include <linux/debugfs.h>  #include <drm/drm_drv.h> @@ -114,6 +115,24 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)  	    (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG))  		adev->vcn.indirect_sram = true; +	/* +	 * Some Steam Deck's BIOS versions are incompatible with the +	 * indirect SRAM mode, leading to amdgpu being unable to get +	 * properly probed (and even potentially crashing the kernel). +	 * Hence, check for these versions here - notice this is +	 * restricted to Vangogh (Deck's APU). +	 */ +	if (adev->ip_versions[UVD_HWIP][0] == IP_VERSION(3, 0, 2)) { +		const char *bios_ver = dmi_get_system_info(DMI_BIOS_VERSION); + +		if (bios_ver && (!strncmp("F7A0113", bios_ver, 7) || +		     !strncmp("F7A0114", bios_ver, 7))) { +			adev->vcn.indirect_sram = false; +			dev_info(adev->dev, +				"Steam Deck quirk: indirect SRAM disabled on BIOS %s\n", bios_ver); +		} +	} +  	hdr = (const struct common_firmware_header *)adev->vcn.fw->data;  	adev->vcn.fw_version = le32_to_cpu(hdr->ucode_version); |