Am 2020-09-29 um 11:08 a.m. schrieb Kent Russell:
> The VG20 DIDs 66a0, 66a1 and 66a4 are used for various SKUs that may or may
> not have the FRU EEPROM on it. Parse the VBIOS to check for server SKU
> variants (D131 or D134) until a more general solution can be determined.
>
> v2: Remove string-based logic, correct the VBIOS string comment
>
> Signed-off-by: Kent Russell <kent.russ...@amd.com>

Reviewed-by: Felix Kuehling <felix.kuehl...@amd.com>


> ---
>  .../gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c    | 34 +++++++++++++------
>  1 file changed, 23 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> index e811fecc540f..01208519f9d7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> @@ -34,18 +34,30 @@
>  
>  static bool is_fru_eeprom_supported(struct amdgpu_device *adev)
>  {
> -     /* TODO: Gaming SKUs don't have the FRU EEPROM.
> -      * Use this hack to address hangs on modprobe on gaming SKUs
> -      * until a proper solution can be implemented by only supporting
> -      * the explicit chip IDs for VG20 Server cards
> -      *
> -      * TODO: Add list of supported Arcturus DIDs once confirmed
> +     /* TODO: See if we can figure this out dynamically instead of
> +      * having to parse VBIOS versions.
>        */
> -     if ((adev->asic_type == CHIP_VEGA20 && adev->pdev->device == 0x66a0) ||
> -         (adev->asic_type == CHIP_VEGA20 && adev->pdev->device == 0x66a1) ||
> -         (adev->asic_type == CHIP_VEGA20 && adev->pdev->device == 0x66a4))
> -             return true;
> -     return false;
> +     struct atom_context *atom_ctx = adev->mode_info.atom_context;
> +
> +     /* VBIOS is of the format ###-DXXXYY-##. For SKU identification,
> +      * we can use just the "DXXX" portion. If there were more models, we
> +      * could convert the 3 characters to a hex integer and use a switch
> +      * for ease/speed/readability. For now, 2 string comparisons are
> +      * reasonable and not too expensive
> +      */
> +     switch (adev->asic_type) {
> +     case CHIP_VEGA20:
> +             /* D161 and D163 are the VG20 server SKUs */
> +             if (strnstr(atom_ctx->vbios_version, "D161",
> +                         sizeof(atom_ctx->vbios_version)) ||
> +                 strnstr(atom_ctx->vbios_version, "D163",
> +                         sizeof(atom_ctx->vbios_version)))
> +                     return true;
> +             else
> +                     return false;
> +     default:
> +             return false;
> +     }
>  }
>  
>  static int amdgpu_fru_read_eeprom(struct amdgpu_device *adev, uint32_t 
> addrptr,
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to