[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