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

2023-03-13 Thread Alex Deucher
Applied.  Thanks!

Alex

On Sun, Mar 12, 2023 at 12:51 PM Guilherme G. Piccoli
 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 
> (0x)
> amdgpu :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  
> failed -110
> amdgpu :04:00.0: amdgpu: amdgpu_device_ip_init failed
> amdgpu :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: sta...@vger.kernel.org
> Cc: James Zhu 
> Cc: Leo Liu 
> Signed-off-by: Guilherme G. Piccoli 
> ---
>
>
> 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 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -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
>


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

2023-03-12 Thread Guilherme G. Piccoli
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 (0x)
amdgpu :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  
failed -110
amdgpu :04:00.0: amdgpu: amdgpu_device_ip_init failed
amdgpu :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: sta...@vger.kernel.org
Cc: James Zhu 
Cc: Leo Liu 
Signed-off-by: Guilherme G. Piccoli 
---


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 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -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