Expose XXX.XXX.XXX.XXX.XXXXXX vbios version string in
AMDGPU_INFO_VBIOS_INFO ioctl

Signed-off-by: Jiawei Gu <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    |  2 ++
 drivers/gpu/drm/amd/amdgpu/atom.c          | 16 ++++++++++++++++
 drivers/gpu/drm/amd/amdgpu/atom.h          |  1 +
 drivers/gpu/drm/amd/include/atomfirmware.h |  1 +
 include/uapi/drm/amdgpu_drm.h              |  1 +
 5 files changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index e1008a79b441..30e4fed3de22 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -870,6 +870,8 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, 
struct drm_file *filp)
                        vbios_info.dbdf = PCI_DEVID(adev->pdev->bus->number, 
adev->pdev->devfn);
                        memcpy(vbios_info.vbios_pn, atom_context->vbios_pn, 
sizeof(atom_context->vbios_pn));
                        vbios_info.version = atom_context->version;
+                       memcpy(vbios_info.vbios_ver_str, 
atom_context->vbios_ver_str,
+                                               
sizeof(atom_context->vbios_ver_str));
                        memcpy(vbios_info.date, atom_context->date, 
sizeof(atom_context->date));
                        vbios_info.serial = adev->unique_id;
                        vbios_info.dev_id = adev->pdev->device;
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c 
b/drivers/gpu/drm/amd/amdgpu/atom.c
index 0e2f0ea13b40..542b2c2414e4 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -1438,6 +1438,21 @@ static void atom_get_vbios_pn(struct atom_context *ctx)
        }
 }
 
+static void atom_get_vbios_version(struct atom_context *ctx)
+{
+       unsigned char *vbios_ver;
+
+       /* find anchor ATOMBIOSBK-AMD */
+       vbios_ver = atom_find_str_in_rom(ctx, BIOS_VERSION_PREFIX, 3, 1024, 64);
+       if (vbios_ver != NULL) {
+               /* skip ATOMBIOSBK-AMD VER */
+               vbios_ver += 18;
+               memcpy(ctx->vbios_ver_str, vbios_ver, STRLEN_NORMAL);
+       } else {
+               ctx->vbios_ver_str[0] = '\0';
+       }
+}
+
 struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
 {
        int base;
@@ -1511,6 +1526,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info 
*card, void *bios)
        atom_get_vbios_name(ctx);
        atom_get_vbios_pn(ctx);
        atom_get_vbios_date(ctx);
+       atom_get_vbios_version(ctx);
 
        return ctx;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.h 
b/drivers/gpu/drm/amd/amdgpu/atom.h
index c729f7ceba4f..6463ce6e756d 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.h
+++ b/drivers/gpu/drm/amd/amdgpu/atom.h
@@ -148,6 +148,7 @@ struct atom_context {
        uint8_t name[STRLEN_LONG];
        uint8_t vbios_pn[STRLEN_LONG];
        uint32_t version;
+       uint8_t vbios_ver_str[STRLEN_NORMAL];
        uint8_t date[STRLEN_NORMAL];
        uint32_t sub_dev_id;
        uint32_t sub_ved_id;
diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h 
b/drivers/gpu/drm/amd/include/atomfirmware.h
index 14d0d7d58255..28deecc2f990 100644
--- a/drivers/gpu/drm/amd/include/atomfirmware.h
+++ b/drivers/gpu/drm/amd/include/atomfirmware.h
@@ -198,6 +198,7 @@ enum atom_dp_vs_preemph_def{
 };
 
 #define BIOS_ATOM_PREFIX   "ATOMBIOS"
+#define BIOS_VERSION_PREFIX  "ATOMBIOSBK-AMD"
 #define BIOS_STRING_LENGTH 43
 
 /*
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 2d9e84658bbc..e0f98ca9a755 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -956,6 +956,7 @@ struct drm_amdgpu_info_vbios {
        __u32 dbdf;
        __u8 vbios_pn[64];
        __u32 version;
+       __u8 vbios_ver_str[32];
        __u8 date[32];
        __u64 serial;
        __u32 dev_id;
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to