[PATCH] drm/amdgpu/vcn: Disable indirect SRAM on Vangogh broken BIOSes

Alex Deucher alexdeucher at gmail.com
Mon Mar 13 15:42:43 UTC 2023


Applied.  Thanks!

Alex

On Sun, Mar 12, 2023 at 12:51 PM Guilherme G. Piccoli
<gpiccoli at igalia.com> 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 at vger.kernel.org
> Cc: James Zhu <James.Zhu at amd.com>
> Cc: Leo Liu <leo.liu at amd.com>
> Signed-off-by: Guilherme G. Piccoli <gpiccoli at igalia.com>
> ---
>
>
> 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
>


More information about the dri-devel mailing list