RE: [PATCH 2/2] drm/amdgpu: Retry i2c transfer once if it fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - AMD Internal Distribution Only]

Sounds good, thanks for the input Lijo! I'll get that tested and verify that it works too.

 Kent

> -----Original Message-----
> From: Lazar, Lijo <Lijo.Lazar@xxxxxxx>
> Sent: Tuesday, September 10, 2024 10:06 AM
> To: Russell, Kent <Kent.Russell@xxxxxxx>; amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Russell, Kent <Kent.Russell@xxxxxxx>
> Subject: RE: [PATCH 2/2] drm/amdgpu: Retry i2c transfer once if it fails
>
> [AMD Official Use Only - AMD Internal Distribution Only]
>
> The ideal place is -
>         smu_v13_0_6_request_i2c_xfer
>
> Restricts the change to specific SOCs with collision problem.
> Gives a bit more survival chance with a retry on every chunk requested.
>
> Thanks,
> Lijo
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Kent
> Russell
> Sent: Tuesday, September 10, 2024 7:07 PM
> To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Russell, Kent <Kent.Russell@xxxxxxx>
> Subject: [PATCH 2/2] drm/amdgpu: Retry i2c transfer once if it fails
>
> During init, there can be some collisions on the i2c bus that result in the EEPROM
> read failing. This has been mitigated in the PMFW to a degree, but there is still a
> small chance that the bus will be busy.
> When the read fails during RAS init, that disables page retirement altogether,
> which is obviously not ideal. To try to avoid that situation, set the eeprom_read
> function to retry once if the first read fails.
>
> Signed-off-by: Kent Russell <kent.russell@xxxxxxx>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> index 35fee3e8cde2..32755a37dcef 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> @@ -227,8 +227,14 @@ int amdgpu_eeprom_read(struct i2c_adapter
> *i2c_adap,
>                        u32 eeprom_addr, u8 *eeprom_buf,
>                        u32 bytes)
>  {
> -       return amdgpu_eeprom_xfer(i2c_adap, eeprom_addr, eeprom_buf, bytes,
> +       int ret;
> +
> +       ret = amdgpu_eeprom_xfer(i2c_adap, eeprom_addr, eeprom_buf, bytes,
> +                                 true);
> +       if (ret)
> +               ret = amdgpu_eeprom_xfer(i2c_adap, eeprom_addr, eeprom_buf,
> bytes,
>                                   true);
> +       return ret;
>  }
>
>  int amdgpu_eeprom_write(struct i2c_adapter *i2c_adap,
> --
> 2.34.1
>





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux