OSDN Git Service

drm/amd: Avoid reading the VBIOS part number twice
authorMario Limonciello <mario.limonciello@amd.com>
Tue, 18 Jul 2023 18:02:58 +0000 (13:02 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 21 Jul 2023 20:52:24 +0000 (16:52 -0400)
The VBIOS part number is read both in amdgpu_atom_parse() as well
as in atom_get_vbios_pn() and stored twice in the `struct atom_context`
structure. Remove the first unnecessary read and move the `pr_info`
line from that read into the second.

v2: squash in unused variable removal

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
drivers/gpu/drm/amd/amdgpu/atom.c
drivers/gpu/drm/amd/amdgpu/atom.h

index f4e3c13..dce9e7d 100644 (file)
@@ -1776,7 +1776,7 @@ static ssize_t amdgpu_atombios_get_vbios_version(struct device *dev,
        struct amdgpu_device *adev = drm_to_adev(ddev);
        struct atom_context *ctx = adev->mode_info.atom_context;
 
-       return sysfs_emit(buf, "%s\n", ctx->vbios_version);
+       return sysfs_emit(buf, "%s\n", ctx->vbios_pn);
 }
 
 static DEVICE_ATTR(vbios_version, 0444, amdgpu_atombios_get_vbios_version,
index 4620c47..c9f16ea 100644 (file)
@@ -60,10 +60,10 @@ static bool is_fru_eeprom_supported(struct amdgpu_device *adev, u32 *fru_addr)
        switch (adev->asic_type) {
        case CHIP_VEGA20:
                /* D161 and D163 are the VG20 server SKUs */
-               if (strnstr(atom_ctx->vbios_version, "D161",
-                           sizeof(atom_ctx->vbios_version)) ||
-                   strnstr(atom_ctx->vbios_version, "D163",
-                           sizeof(atom_ctx->vbios_version))) {
+               if (strnstr(atom_ctx->vbios_pn, "D161",
+                           sizeof(atom_ctx->vbios_pn)) ||
+                   strnstr(atom_ctx->vbios_pn, "D163",
+                           sizeof(atom_ctx->vbios_pn))) {
                        if (fru_addr)
                                *fru_addr = FRU_EEPROM_MADDR_6;
                        return true;
@@ -72,16 +72,16 @@ static bool is_fru_eeprom_supported(struct amdgpu_device *adev, u32 *fru_addr)
                }
        case CHIP_ALDEBARAN:
                /* All Aldebaran SKUs have an FRU */
-               if (!strnstr(atom_ctx->vbios_version, "D673",
-                            sizeof(atom_ctx->vbios_version)))
+               if (!strnstr(atom_ctx->vbios_pn, "D673",
+                            sizeof(atom_ctx->vbios_pn)))
                        if (fru_addr)
                                *fru_addr = FRU_EEPROM_MADDR_6;
                return true;
        case CHIP_SIENNA_CICHLID:
-               if (strnstr(atom_ctx->vbios_version, "D603",
-                           sizeof(atom_ctx->vbios_version))) {
-                       if (strnstr(atom_ctx->vbios_version, "D603GLXE",
-                                   sizeof(atom_ctx->vbios_version))) {
+               if (strnstr(atom_ctx->vbios_pn, "D603",
+                           sizeof(atom_ctx->vbios_pn))) {
+                       if (strnstr(atom_ctx->vbios_pn, "D603GLXE",
+                                   sizeof(atom_ctx->vbios_pn))) {
                                return false;
                        } else {
                                if (fru_addr)
index cab2fdd..12f3c7a 100644 (file)
@@ -1722,7 +1722,7 @@ static int amdgpu_debugfs_firmware_info_show(struct seq_file *m, void *unused)
        seq_printf(m, "MES feature version: %u, firmware version: 0x%08x\n",
                   fw_info.feature, fw_info.ver);
 
-       seq_printf(m, "VBIOS version: %s\n", ctx->vbios_version);
+       seq_printf(m, "VBIOS version: %s\n", ctx->vbios_pn);
 
        return 0;
 }
index fc317b0..0ba86cc 100644 (file)
@@ -2442,10 +2442,10 @@ static void amdgpu_ras_get_quirks(struct amdgpu_device *adev)
        if (!ctx)
                return;
 
-       if (strnstr(ctx->vbios_version, "D16406",
-                   sizeof(ctx->vbios_version)) ||
-               strnstr(ctx->vbios_version, "D36002",
-                       sizeof(ctx->vbios_version)))
+       if (strnstr(ctx->vbios_pn, "D16406",
+                   sizeof(ctx->vbios_pn)) ||
+               strnstr(ctx->vbios_pn, "D36002",
+                       sizeof(ctx->vbios_pn)))
                adev->ras_hw_enabled |= (1 << AMDGPU_RAS_BLOCK__GFX);
 }
 
index 0648dfe..4287743 100644 (file)
@@ -194,9 +194,9 @@ static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev,
                /* VEGA20 and ARCTURUS */
                if (adev->asic_type == CHIP_VEGA20)
                        control->i2c_address = EEPROM_I2C_MADDR_0;
-               else if (strnstr(atom_ctx->vbios_version,
+               else if (strnstr(atom_ctx->vbios_pn,
                                 "D342",
-                                sizeof(atom_ctx->vbios_version)))
+                                sizeof(atom_ctx->vbios_pn)))
                        control->i2c_address = EEPROM_I2C_MADDR_0;
                else
                        control->i2c_address = EEPROM_I2C_MADDR_4;
@@ -205,8 +205,8 @@ static bool __get_eeprom_i2c_addr(struct amdgpu_device *adev,
                control->i2c_address = EEPROM_I2C_MADDR_0;
                return true;
        case IP_VERSION(13, 0, 2):
-               if (strnstr(atom_ctx->vbios_version, "D673",
-                           sizeof(atom_ctx->vbios_version)))
+               if (strnstr(atom_ctx->vbios_pn, "D673",
+                           sizeof(atom_ctx->vbios_pn)))
                        control->i2c_address = EEPROM_I2C_MADDR_4;
                else
                        control->i2c_address = EEPROM_I2C_MADDR_0;
index 1c5d938..9f63ddb 100644 (file)
@@ -1438,6 +1438,8 @@ static void atom_get_vbios_pn(struct atom_context *ctx)
 
                ctx->vbios_pn[count] = 0;
        }
+
+       pr_info("ATOM BIOS: %s\n", ctx->vbios_pn);
 }
 
 static void atom_get_vbios_version(struct atom_context *ctx)
@@ -1460,11 +1462,9 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
        int base;
        struct atom_context *ctx =
            kzalloc(sizeof(struct atom_context), GFP_KERNEL);
-       char *str;
        struct _ATOM_ROM_HEADER *atom_rom_header;
        struct _ATOM_MASTER_DATA_TABLE *master_table;
        struct _ATOM_FIRMWARE_INFO *atom_fw_info;
-       u16 idx;
 
        if (!ctx)
                return NULL;
@@ -1502,16 +1502,6 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
                return NULL;
        }
 
-       idx = CU16(ATOM_ROM_PART_NUMBER_PTR);
-       if (idx == 0)
-               idx = 0x80;
-
-       str = CSTR(idx);
-       if (*str != '\0') {
-               pr_info("ATOM BIOS: %s\n", str);
-               strlcpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
-       }
-
        atom_rom_header = (struct _ATOM_ROM_HEADER *)CSTR(base);
        if (atom_rom_header->usMasterDataTableOffset != 0) {
                master_table = (struct _ATOM_MASTER_DATA_TABLE *)
index 0c18398..55bf99d 100644 (file)
@@ -33,7 +33,6 @@ struct drm_device;
 #define ATOM_ATI_MAGIC_PTR     0x30
 #define ATOM_ATI_MAGIC         " 761295520"
 #define ATOM_ROM_TABLE_PTR     0x48
-#define ATOM_ROM_PART_NUMBER_PTR       0x6E
 
 #define ATOM_ROM_MAGIC         "ATOM"
 #define ATOM_ROM_MAGIC_PTR     4
@@ -143,7 +142,6 @@ struct atom_context {
        int io_mode;
        uint32_t *scratch;
        int scratch_size_bytes;
-       char vbios_version[20];
 
        uint8_t name[STRLEN_LONG];
        uint8_t vbios_pn[STRLEN_LONG];