[PATCH] drm/amd: Avoid reading the VBIOS part number twice

Alex Deucher alexdeucher at gmail.com
Tue Jul 18 19:37:23 UTC 2023


On Tue, Jul 18, 2023 at 2:03 PM Mario Limonciello
<mario.limonciello at amd.com> wrote:
>
> 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.
>
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c  |  2 +-
>  .../gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c    | 20 +++++++++----------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c       |  2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c       |  8 ++++----
>  .../gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c    |  8 ++++----
>  drivers/gpu/drm/amd/amdgpu/atom.c             | 13 ++----------
>  drivers/gpu/drm/amd/amdgpu/atom.h             |  2 --
>  7 files changed, 22 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> index f4e3c133a16ca..dce9e7d5e4ec6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> @@ -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,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> index 4620c4712ce32..c9f16eab0f3d0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> @@ -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)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index cca5a495611f3..46844082762a6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -1719,7 +1719,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;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> index 8aaa427f8c0f6..5055c14d6b426 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> @@ -2440,10 +2440,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);
>  }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> index 0648dfe559afc..4287743e12124 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> @@ -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;
> diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu/atom.c
> index 5f610e9a5f0f8..edbb862c1025a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/atom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/atom.c
> @@ -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,7 +1462,6 @@ 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;
> @@ -1502,16 +1503,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);
> -               strscpy(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 *)
> diff --git a/drivers/gpu/drm/amd/amdgpu/atom.h b/drivers/gpu/drm/amd/amdgpu/atom.h
> index 0c18398245206..55bf99d5288d0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/atom.h
> +++ b/drivers/gpu/drm/amd/amdgpu/atom.h
> @@ -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];
> --
> 2.34.1
>


More information about the amd-gfx mailing list