Re: [PATCH] drm/amdgpu: Remove redundant I2C EEPROM address

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

 



On Mon, Nov 7, 2022 at 12:23 PM Luben Tuikov <luben.tuikov@xxxxxxx> wrote:
>
> Remove redundant EEPROM_I2C_MADDR_54H address, since we already have it
> represented (ARCTURUS), and since we don't include the I2C device type
> identifier in EEPROM memory addresses, i.e. that high up in the device
> abstraction--we only use EEPROM memory addresses, as memory is continuously
> represented by EEPROM device(s) on the I2C bus.
>
> Add a comment describing what these memory addresses are, how they come
> about and how they're usually extracted from the device address byte.
>
> Cc: Candice Li <candice.li@xxxxxxx>
> Cc: Tao Zhou <tao.zhou1@xxxxxxx>
> Cc: Alex Deucher <Alexander.Deucher@xxxxxxx>
> Fixes: 367a1ebddde5d0 ("drm/amdgpu: Add EEPROM I2C address support for ip discovery")
> Signed-off-by: Luben Tuikov <luben.tuikov@xxxxxxx>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c    |  2 ++
>  .../gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c    | 24 ++++++++++++++++---
>  2 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> index 4d9eb0137f8c43..d6c4293829aab1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> @@ -79,6 +79,8 @@
>   * That is, for an I2C EEPROM driver everything is controlled by
>   * the "eeprom_addr".
>   *
> + * See also top of amdgpu_ras_eeprom.c.
> + *
>   * P.S. If you need to write, lock and read the Identification Page,
>   * (M24M02-DR device only, which we do not use), change the "7" to
>   * "0xF" in the macro below, and let the client set bit 20 to 1 in
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> index 7268ae65c140c1..1bb92a64f24afc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> @@ -33,12 +33,30 @@
>
>  #include "amdgpu_reset.h"
>
> +/* These are memory addresses as would be seen by one or more EEPROM
> + * chips strung on the I2C bus, usually by manipulating pins 1-3 of a
> + * set of EEPROM devices. They form a continuous memory space.
> + *
> + * The I2C device address includes the device type identifier, 1010b,
> + * which is a reserved value and indicates that this is an I2C EEPROM
> + * device. It also includes the top 3 bits of the 19 bit EEPROM memory
> + * address, namely bits 18, 17, and 16. This makes up the 7 bit
> + * address sent on the I2C bus with bit 0 being the direction bit,
> + * which is not represented here, and sent by the hardware directly.
> + *
> + * For instance,
> + *   50h = 1010000b => device type identifier 1010b, bits 18:16 = 000b, address 0.
> + *   54h = 1010100b => --"--, bits 18:16 = 100b, address 40000h.
> + *   56h = 1010110b => --"--, bits 18:16 = 110b, address 60000h.
> + * Depending on the size of the I2C EEPROM device(s), bits 18:16 may
> + * address memory in a device or a device on the I2C bus, depending on
> + * the status of pins 1-3. See top of amdgpu_eeprom.c.
> + */
>  #define EEPROM_I2C_MADDR_VEGA20         0x0
>  #define EEPROM_I2C_MADDR_ARCTURUS       0x40000
>  #define EEPROM_I2C_MADDR_ARCTURUS_D342  0x0
>  #define EEPROM_I2C_MADDR_SIENNA_CICHLID 0x0
>  #define EEPROM_I2C_MADDR_ALDEBARAN      0x0

As a follow on patch maybe we can clean up the rest of these
duplicates?  And rather than using the asic type, maybe just switch to
the define to a more descriptive name?  E.g.,
#define EEPROM_I2C_MADDR_0H       0x00000
#define EEPROM_I2C_MADDR_4H       0x40000
#define EEPROM_I2C_MADDR_6H       0x60000

Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx>

> -#define EEPROM_I2C_MADDR_54H            (0x54UL << 16)
>
>  /*
>   * The 2 macros bellow represent the actual size in bytes that
> @@ -130,7 +148,7 @@ static bool __get_eeprom_i2c_addr_ip_discovery(struct amdgpu_device *adev,
>         switch (adev->ip_versions[MP1_HWIP][0]) {
>         case IP_VERSION(13, 0, 0):
>         case IP_VERSION(13, 0, 10):
> -               control->i2c_address = EEPROM_I2C_MADDR_54H;
> +               control->i2c_address = EEPROM_I2C_MADDR_ARCTURUS;
>                 return true;
>         default:
>                 return false;
> @@ -185,7 +203,7 @@ static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev,
>
>         switch (adev->ip_versions[MP1_HWIP][0]) {
>         case IP_VERSION(13, 0, 0):
> -               control->i2c_address = EEPROM_I2C_MADDR_54H;
> +               control->i2c_address = EEPROM_I2C_MADDR_ARCTURUS;
>                 break;
>
>         default:
>
> base-commit: 03b61a92efbaf17ac3d9f82ae81aa4cf8ed40608
> --
> 2.38.1
>



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

  Powered by Linux