From 18c7268cbbfd815da9e3e06047b41c325a5947b1 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Fri, 9 Sep 2016 10:35:05 -0700 Subject: gpu: nvgpu: Retrieve VBIOS version from dGPU Retrieve VBIOS version from biosdata VBIOS structure. Bug 1811880 Change-Id: I24f4114ce7c8925bde4b195888da62454707b8e6 Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/1218062 (cherry picked from commit fb23e9522bc268fcf0d71cc7f2ae9a0bc6cfda23) Reviewed-on: http://git-master/r/1234089 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit --- drivers/gpu/nvgpu/gm206/bios_gm206.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'drivers/gpu/nvgpu/gm206/bios_gm206.c') diff --git a/drivers/gpu/nvgpu/gm206/bios_gm206.c b/drivers/gpu/nvgpu/gm206/bios_gm206.c index a8f3f1d5..7b6a50d0 100644 --- a/drivers/gpu/nvgpu/gm206/bios_gm206.c +++ b/drivers/gpu/nvgpu/gm206/bios_gm206.c @@ -63,12 +63,24 @@ struct bit { u8 header_checksum; } __packed; +#define TOKEN_ID_BIOSDATA 0x42 #define TOKEN_ID_NVINIT_PTRS 0x49 #define TOKEN_ID_FALCON_DATA 0x70 #define TOKEN_ID_PERF_PTRS 0x50 #define TOKEN_ID_CLOCK_PTRS 0x43 #define TOKEN_ID_VIRT_PTRS 0x56 +struct biosdata { + u32 version; + u8 oem_version; + u8 checksum; + u16 int15callbackspost; + u16 int16callbackssystem; + u16 boardid; + u16 framecount; + u8 biosmoddate[8]; +} __packed; + struct nvinit_ptrs { u16 initscript_table_ptr; u16 macro_index_table_ptr; @@ -252,6 +264,19 @@ static int gm206_bios_parse_rom(struct gk20a *g) return 0; } +static void gm206_bios_parse_biosdata(struct gk20a *g, int offset) +{ + struct biosdata biosdata; + + memcpy(&biosdata, &g->bios.data[offset], sizeof(biosdata)); + gk20a_dbg_fn("bios version %x, oem version %x", + biosdata.version, + biosdata.oem_version); + + g->gpu_characteristics.vbios_version = biosdata.version; + g->gpu_characteristics.vbios_oem_version = biosdata.oem_version; +} + static void gm206_bios_parse_nvinit_ptrs(struct gk20a *g, int offset) { struct nvinit_ptrs nvinit_ptrs; @@ -506,6 +531,9 @@ static void gm206_bios_parse_bit(struct gk20a *g, int offset) bit_token.data_size, bit_token.data_version); switch (bit_token.token_id) { + case TOKEN_ID_BIOSDATA: + gm206_bios_parse_biosdata(g, bit_token.data_ptr); + break; case TOKEN_ID_NVINIT_PTRS: gm206_bios_parse_nvinit_ptrs(g, bit_token.data_ptr); break; -- cgit v1.2.2