[PATCH 2/2] drm/amdgpu: Process any VBIOS RAS EEPROM address

Alex Deucher alexdeucher at gmail.com
Thu Aug 26 19:56:13 UTC 2021


On Wed, Aug 25, 2021 at 2:32 PM Luben Tuikov <luben.tuikov at amd.com> wrote:
>
> We can now process any RAS EEPROM address from
> VBIOS. Generalize so as to compute the top three
> bits of the 19-bit EEPROM address, from any byte
> returned as the "i2c address" from VBIOS.
>
> Cc: John Clements <john.clements at amd.com>
> Cc: Hawking Zhang <Hawking.Zhang at amd.com>
> Cc: Alex Deucher <Alexander.Deucher at amd.com>
> Signed-off-by: Luben Tuikov <luben.tuikov at amd.com>

Series is:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  .../gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c    | 25 ++++++++++---------
>  1 file changed, 13 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> index 194590252bb952..dc44c946a2442a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> @@ -114,21 +114,22 @@ static bool __get_eeprom_i2c_addr_arct(struct amdgpu_device *adev,
>  static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev,
>                                   struct amdgpu_ras_eeprom_control *control)
>  {
> +       u8 i2c_addr;
> +
>         if (!control)
>                 return false;
>
> -       control->i2c_address = 0;
> -
> -       if (amdgpu_atomfirmware_ras_rom_addr(adev, (uint8_t*)&control->i2c_address))
> -       {
> -               if (control->i2c_address == 0xA0)
> -                       control->i2c_address = 0;
> -               else if (control->i2c_address == 0xA8)
> -                       control->i2c_address = 0x40000;
> -               else {
> -                       dev_warn(adev->dev, "RAS EEPROM I2C address not supported");
> -                       return false;
> -               }
> +       if (amdgpu_atomfirmware_ras_rom_addr(adev, &i2c_addr)) {
> +               /* The address given by VBIOS is an 8-bit, wire-format
> +                * address, i.e. the most significant byte.
> +                *
> +                * Normalize it to a 19-bit EEPROM address. Remove the
> +                * device type identifier and make it a 7-bit address;
> +                * then make it a 19-bit EEPROM address. See top of
> +                * amdgpu_eeprom.c.
> +                */
> +               i2c_addr = (i2c_addr & 0x0F) >> 1;
> +               control->i2c_address = ((u32) i2c_addr) << 16;
>
>                 return true;
>         }
> --
> 2.32.0
>


More information about the amd-gfx mailing list