drm/amdgpu: simplify amdgpu_ras_eeprom.c
authorAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Mar 2023 00:09:08 +0000 (20:09 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Dec 2023 17:39:26 +0000 (18:39 +0100)
[ Upstream commit 6246059a19d4cd32ef1af42a6ab016b779cd68c4 ]

All chips that support RAS also support IP discovery, so
use the IP versions rather than a mix of IP versions and
asic types.  Checking the validity of the atom_ctx pointer
is not required as the vbios is already fetched at this
point.

v2: add comments to id asic types based on feedback from Luben

Reviewed-by: Luben Tuikov <luben.tuikov@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: Luben Tuikov <luben.tuikov@amd.com>
Stable-dep-of: e0409021e34a ("drm/amdgpu: Update EEPROM I2C address for smu v13_0_0")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c

index 40cd9d8..c2827ed 100644 (file)
 
 static bool __is_ras_eeprom_supported(struct amdgpu_device *adev)
 {
-       if (adev->asic_type == CHIP_IP_DISCOVERY) {
-               switch (adev->ip_versions[MP1_HWIP][0]) {
-               case IP_VERSION(13, 0, 0):
-               case IP_VERSION(13, 0, 10):
-                       return true;
-               default:
-                       return false;
-               }
-       }
-
-       return  adev->asic_type == CHIP_VEGA20 ||
-               adev->asic_type == CHIP_ARCTURUS ||
-               adev->asic_type == CHIP_SIENNA_CICHLID ||
-               adev->asic_type == CHIP_ALDEBARAN;
-}
-
-static bool __get_eeprom_i2c_addr_arct(struct amdgpu_device *adev,
-                                      struct amdgpu_ras_eeprom_control *control)
-{
-       struct atom_context *atom_ctx = adev->mode_info.atom_context;
-
-       if (!control || !atom_ctx)
-               return false;
-
-       if (strnstr(atom_ctx->vbios_version,
-                   "D342",
-                   sizeof(atom_ctx->vbios_version)))
-               control->i2c_address = EEPROM_I2C_MADDR_0;
-       else
-               control->i2c_address = EEPROM_I2C_MADDR_4;
-
-       return true;
-}
-
-static bool __get_eeprom_i2c_addr_ip_discovery(struct amdgpu_device *adev,
-                                      struct amdgpu_ras_eeprom_control *control)
-{
        switch (adev->ip_versions[MP1_HWIP][0]) {
+       case IP_VERSION(11, 0, 2): /* VEGA20 and ARCTURUS */
+       case IP_VERSION(11, 0, 7): /* Sienna cichlid */
        case IP_VERSION(13, 0, 0):
+       case IP_VERSION(13, 0, 2): /* Aldebaran */
        case IP_VERSION(13, 0, 10):
-               control->i2c_address = EEPROM_I2C_MADDR_4;
                return true;
        default:
                return false;
@@ -178,29 +143,32 @@ static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev,
                return true;
        }
 
-       switch (adev->asic_type) {
-       case CHIP_VEGA20:
-               control->i2c_address = EEPROM_I2C_MADDR_0;
+       switch (adev->ip_versions[MP1_HWIP][0]) {
+       case IP_VERSION(11, 0, 2):
+               /* VEGA20 and ARCTURUS */
+               if (adev->asic_type == CHIP_VEGA20)
+                       control->i2c_address = EEPROM_I2C_MADDR_0;
+               else if (strnstr(atom_ctx->vbios_version,
+                                "D342",
+                                sizeof(atom_ctx->vbios_version)))
+                       control->i2c_address = EEPROM_I2C_MADDR_0;
+               else
+                       control->i2c_address = EEPROM_I2C_MADDR_4;
                return true;
-
-       case CHIP_ARCTURUS:
-               return __get_eeprom_i2c_addr_arct(adev, control);
-
-       case CHIP_SIENNA_CICHLID:
+       case IP_VERSION(11, 0, 7):
                control->i2c_address = EEPROM_I2C_MADDR_0;
                return true;
-
-       case CHIP_ALDEBARAN:
+       case IP_VERSION(13, 0, 2):
                if (strnstr(atom_ctx->vbios_version, "D673",
                            sizeof(atom_ctx->vbios_version)))
                        control->i2c_address = EEPROM_I2C_MADDR_4;
                else
                        control->i2c_address = EEPROM_I2C_MADDR_0;
                return true;
-
-       case CHIP_IP_DISCOVERY:
-               return __get_eeprom_i2c_addr_ip_discovery(adev, control);
-
+       case IP_VERSION(13, 0, 0):
+       case IP_VERSION(13, 0, 10):
+               control->i2c_address = EEPROM_I2C_MADDR_4;
+               return true;
        default:
                return false;
        }