Applied. Thanks! Alex On Sun, Mar 12, 2023 at 12:51 PM Guilherme G. Piccoli <gpiccoli@xxxxxxxxxx> wrote: > > The VCN firmware loading path enables the indirect SRAM mode if it's > advertised as supported. We might have some cases of FW issues that > prevents this mode to working properly though, ending-up in a failed > probe. An example below, observed in the Steam Deck: > > [...] > [drm] failed to load ucode VCN0_RAM(0x3A) > [drm] psp gfx command LOAD_IP_FW(0x6) failed and response status is (0xFFFF0000) > amdgpu 0000:04:00.0: [drm:amdgpu_ring_test_helper [amdgpu]] *ERROR* ring vcn_dec_0 test failed (-110) > [drm:amdgpu_device_init.cold [amdgpu]] *ERROR* hw_init of IP block <vcn_v3_0> failed -110 > amdgpu 0000:04:00.0: amdgpu: amdgpu_device_ip_init failed > amdgpu 0000:04:00.0: amdgpu: Fatal error during GPU init > [...] > > Disabling the VCN block circumvents this, but it's a very invasive > workaround that turns off the entire feature. So, let's add a quirk > on VCN loading that checks for known problematic BIOSes on Vangogh, > so we can proactively disable the indirect SRAM mode and allow the > HW proper probe and VCN IP block to work fine. > > Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2385 > Fixes: 82132ecc5432 ("drm/amdgpu: enable Vangogh VCN indirect sram mode") > Cc: stable@xxxxxxxxxxxxxxx > Cc: James Zhu <James.Zhu@xxxxxxx> > Cc: Leo Liu <leo.liu@xxxxxxx> > Signed-off-by: Guilherme G. Piccoli <gpiccoli@xxxxxxxxxx> > --- > > > Hi folks, based on the feedback from the gitlab issue, here is the upstream > attempt to quirk the Steam Deck's BIOSes having known issues with the > indirect SRAM mode. I've tested it on both the quirked BIOSes, and also > with some working ones. This patch is based on agd5f/amd-staging-drm-next. > > Thanks in advance for reviews! > Cheers, > > Guilherme > > > drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c > index 02d428ddf2f8..dc4f3f4cb644 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); > > -- > 2.39.2 >