diff options
author | Vijayakumar Subbu <vsubbu@nvidia.com> | 2016-07-28 01:29:15 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-09-29 16:17:46 -0400 |
commit | b17d9708c9e9930778de43de1edf1385acb13ebd (patch) | |
tree | fc485e96cc19575d463c61c8b80a09dd89745f3f /drivers/gpu/nvgpu/gm206/bios_gm206.c | |
parent | 27b47b1969d7d9cdd3de9fd6f0131ad357f4b0fa (diff) |
gpu: nvgpu: Add dGPU clocks support
JIRA DNVGPU-45
Change-Id: I237ce81e31b036c05c82d46eea8694ffe1c2e3df
Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com>
Signed-off-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-on: http://git-master/r/1205849
(cherry picked from commit 9a4006f76b75a8ad525e7aa5ad1f609aaae49126)
Reviewed-on: http://git-master/r/1227256
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm206/bios_gm206.c')
-rw-r--r-- | drivers/gpu/nvgpu/gm206/bios_gm206.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gm206/bios_gm206.c b/drivers/gpu/nvgpu/gm206/bios_gm206.c index 6caecb32..21c852a5 100644 --- a/drivers/gpu/nvgpu/gm206/bios_gm206.c +++ b/drivers/gpu/nvgpu/gm206/bios_gm206.c | |||
@@ -61,6 +61,7 @@ struct bit { | |||
61 | #define TOKEN_ID_FALCON_DATA 0x70 | 61 | #define TOKEN_ID_FALCON_DATA 0x70 |
62 | #define TOKEN_ID_PERF_PTRS 0x50 | 62 | #define TOKEN_ID_PERF_PTRS 0x50 |
63 | #define TOKEN_ID_CLOCK_PTRS 0x43 | 63 | #define TOKEN_ID_CLOCK_PTRS 0x43 |
64 | #define TOKEN_ID_VIRT_PTRS 0x56 | ||
64 | 65 | ||
65 | struct nvinit_ptrs { | 66 | struct nvinit_ptrs { |
66 | u16 initscript_table_ptr; | 67 | u16 initscript_table_ptr; |
@@ -434,17 +435,29 @@ static void *gm206_bios_get_perf_table_ptrs(struct gk20a *g, | |||
434 | { | 435 | { |
435 | u32 perf_table_id_offset = 0; | 436 | u32 perf_table_id_offset = 0; |
436 | u8 *perf_table_ptr = NULL; | 437 | u8 *perf_table_ptr = NULL; |
438 | u8 data_size = 4; | ||
437 | 439 | ||
438 | if (ptoken != NULL && | 440 | if (ptoken != NULL) { |
439 | table_id < (ptoken->data_size/sizeof(u32))) { | ||
440 | 441 | ||
441 | perf_table_id_offset = *((u32 *)&g->bios.data[ | 442 | if (ptoken->token_id == TOKEN_ID_VIRT_PTRS) { |
443 | perf_table_id_offset = *((u16 *)&g->bios.data[ | ||
444 | ptoken->data_ptr + | ||
445 | (table_id * PERF_PTRS_WIDTH_16)]); | ||
446 | data_size = PERF_PTRS_WIDTH_16; | ||
447 | } else { | ||
448 | perf_table_id_offset = *((u32 *)&g->bios.data[ | ||
442 | ptoken->data_ptr + | 449 | ptoken->data_ptr + |
443 | (table_id * PERF_PTRS_WIDTH)]); | 450 | (table_id * PERF_PTRS_WIDTH)]); |
451 | data_size = PERF_PTRS_WIDTH; | ||
452 | } | ||
453 | } else | ||
454 | return (void *)perf_table_ptr; | ||
455 | |||
456 | if (table_id < (ptoken->data_size/data_size)) { | ||
444 | 457 | ||
445 | gk20a_dbg_info("Perf_Tbl_ID-offset 0x%x Tbl_ID_Ptr-offset- 0x%x", | 458 | gk20a_dbg_info("Perf_Tbl_ID-offset 0x%x Tbl_ID_Ptr-offset- 0x%x", |
446 | (ptoken->data_ptr + | 459 | (ptoken->data_ptr + |
447 | (table_id * PERF_PTRS_WIDTH)), | 460 | (table_id * data_size)), |
448 | perf_table_id_offset); | 461 | perf_table_id_offset); |
449 | 462 | ||
450 | if (perf_table_id_offset != 0) { | 463 | if (perf_table_id_offset != 0) { |
@@ -503,6 +516,10 @@ static void gm206_bios_parse_bit(struct gk20a *g, int offset) | |||
503 | g->bios.clock_token = | 516 | g->bios.clock_token = |
504 | (struct bit_token *)&g->bios.data[offset]; | 517 | (struct bit_token *)&g->bios.data[offset]; |
505 | break; | 518 | break; |
519 | case TOKEN_ID_VIRT_PTRS: | ||
520 | g->bios.virt_token = | ||
521 | (struct bit_token *)&g->bios.data[offset]; | ||
522 | break; | ||
506 | default: | 523 | default: |
507 | break; | 524 | break; |
508 | } | 525 | } |