On Tue, Jun 8, 2021 at 5:40 PM Luben Tuikov <luben.tui...@amd.com> wrote:
>
> Fix the size of the EEPROM from 256000 bytes
> to 262144 bytes (256 KiB).
>
> Fix a couple or wrap around bugs. If a valid
> value/address is 0 <= addr < size, the inverse of
> this inequality (barring negative values which
> make no sense here) is addr >= size. Fix this in
> the RAS code.
>
> Cc: Jean Delvare <jdelv...@suse.de>
> Cc: Alexander Deucher <alexander.deuc...@amd.com>
> Cc: Andrey Grodzovsky <andrey.grodzov...@amd.com>
> Cc: Lijo Lazar <lijo.la...@amd.com>
> Cc: Stanley Yang <stanley.y...@amd.com>
> Cc: Hawking Zhang <hawking.zh...@amd.com>
> Signed-off-by: Luben Tuikov <luben.tui...@amd.com>

Acked-by: Alex Deucher <alexander.deuc...@amd.com>

> ---
>  .../gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c    | 20 +++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> index f316fb11b16d9e..3ef38b90fc3a83 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> @@ -52,12 +52,11 @@
>  /* Bad GPU tag ‘BADG’ */
>  #define EEPROM_TABLE_HDR_BAD 0x42414447
>
> -/* Assume 2 Mbit size */
> -#define EEPROM_SIZE_BYTES 256000
> -#define EEPROM_PAGE__SIZE_BYTES 256
> -#define EEPROM_HDR_START 0
> -#define EEPROM_RECORD_START (EEPROM_HDR_START + EEPROM_TABLE_HEADER_SIZE)
> -#define EEPROM_MAX_RECORD_NUM ((EEPROM_SIZE_BYTES - 
> EEPROM_TABLE_HEADER_SIZE) / EEPROM_TABLE_RECORD_SIZE)
> +/* Assume 2-Mbit size */
> +#define EEPROM_SIZE_BYTES       (256 * 1024)
> +#define EEPROM_HDR_START        0
> +#define EEPROM_RECORD_START     (EEPROM_HDR_START + EEPROM_TABLE_HEADER_SIZE)
> +#define EEPROM_MAX_RECORD_NUM   ((EEPROM_SIZE_BYTES - 
> EEPROM_TABLE_HEADER_SIZE) / EEPROM_TABLE_RECORD_SIZE)
>
>  #define to_amdgpu_device(x) (container_of(x, struct amdgpu_ras, 
> eeprom_control))->adev
>
> @@ -402,9 +401,8 @@ static uint32_t __correct_eeprom_dest_address(uint32_t 
> curr_address)
>         uint32_t next_address = curr_address + EEPROM_TABLE_RECORD_SIZE;
>
>         /* When all EEPROM memory used jump back to 0 address */
> -       if (next_address > EEPROM_SIZE_BYTES) {
> -               DRM_INFO("Reached end of EEPROM memory, jumping to 0 "
> -                        "and overriding old record");
> +       if (next_address >= EEPROM_SIZE_BYTES) {
> +               DRM_INFO("Reached end of EEPROM memory, wrap around to 0.");
>                 return EEPROM_RECORD_START;
>         }
>
> @@ -476,7 +474,9 @@ int amdgpu_ras_eeprom_process_recods(struct 
> amdgpu_ras_eeprom_control *control,
>         }
>
>         /* In case of overflow just start from beginning to not lose newest 
> records */
> -       if (write && (control->next_addr + EEPROM_TABLE_RECORD_SIZE * num > 
> EEPROM_SIZE_BYTES))
> +       if (write &&
> +           (control->next_addr +
> +            EEPROM_TABLE_RECORD_SIZE * num >= EEPROM_SIZE_BYTES))
>                 control->next_addr = EEPROM_RECORD_START;
>
>         /*
> --
> 2.32.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to