diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gm206/bios_gm206.c | 28 |
1 files changed, 28 insertions, 0 deletions
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 { | |||
63 | u8 header_checksum; | 63 | u8 header_checksum; |
64 | } __packed; | 64 | } __packed; |
65 | 65 | ||
66 | #define TOKEN_ID_BIOSDATA 0x42 | ||
66 | #define TOKEN_ID_NVINIT_PTRS 0x49 | 67 | #define TOKEN_ID_NVINIT_PTRS 0x49 |
67 | #define TOKEN_ID_FALCON_DATA 0x70 | 68 | #define TOKEN_ID_FALCON_DATA 0x70 |
68 | #define TOKEN_ID_PERF_PTRS 0x50 | 69 | #define TOKEN_ID_PERF_PTRS 0x50 |
69 | #define TOKEN_ID_CLOCK_PTRS 0x43 | 70 | #define TOKEN_ID_CLOCK_PTRS 0x43 |
70 | #define TOKEN_ID_VIRT_PTRS 0x56 | 71 | #define TOKEN_ID_VIRT_PTRS 0x56 |
71 | 72 | ||
73 | struct biosdata { | ||
74 | u32 version; | ||
75 | u8 oem_version; | ||
76 | u8 checksum; | ||
77 | u16 int15callbackspost; | ||
78 | u16 int16callbackssystem; | ||
79 | u16 boardid; | ||
80 | u16 framecount; | ||
81 | u8 biosmoddate[8]; | ||
82 | } __packed; | ||
83 | |||
72 | struct nvinit_ptrs { | 84 | struct nvinit_ptrs { |
73 | u16 initscript_table_ptr; | 85 | u16 initscript_table_ptr; |
74 | u16 macro_index_table_ptr; | 86 | u16 macro_index_table_ptr; |
@@ -252,6 +264,19 @@ static int gm206_bios_parse_rom(struct gk20a *g) | |||
252 | return 0; | 264 | return 0; |
253 | } | 265 | } |
254 | 266 | ||
267 | static void gm206_bios_parse_biosdata(struct gk20a *g, int offset) | ||
268 | { | ||
269 | struct biosdata biosdata; | ||
270 | |||
271 | memcpy(&biosdata, &g->bios.data[offset], sizeof(biosdata)); | ||
272 | gk20a_dbg_fn("bios version %x, oem version %x", | ||
273 | biosdata.version, | ||
274 | biosdata.oem_version); | ||
275 | |||
276 | g->gpu_characteristics.vbios_version = biosdata.version; | ||
277 | g->gpu_characteristics.vbios_oem_version = biosdata.oem_version; | ||
278 | } | ||
279 | |||
255 | static void gm206_bios_parse_nvinit_ptrs(struct gk20a *g, int offset) | 280 | static void gm206_bios_parse_nvinit_ptrs(struct gk20a *g, int offset) |
256 | { | 281 | { |
257 | struct nvinit_ptrs nvinit_ptrs; | 282 | struct nvinit_ptrs nvinit_ptrs; |
@@ -506,6 +531,9 @@ static void gm206_bios_parse_bit(struct gk20a *g, int offset) | |||
506 | bit_token.data_size, bit_token.data_version); | 531 | bit_token.data_size, bit_token.data_version); |
507 | 532 | ||
508 | switch (bit_token.token_id) { | 533 | switch (bit_token.token_id) { |
534 | case TOKEN_ID_BIOSDATA: | ||
535 | gm206_bios_parse_biosdata(g, bit_token.data_ptr); | ||
536 | break; | ||
509 | case TOKEN_ID_NVINIT_PTRS: | 537 | case TOKEN_ID_NVINIT_PTRS: |
510 | gm206_bios_parse_nvinit_ptrs(g, bit_token.data_ptr); | 538 | gm206_bios_parse_nvinit_ptrs(g, bit_token.data_ptr); |
511 | break; | 539 | break; |