summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm206/bios_gm206.c
diff options
context:
space:
mode:
authorVijayakumar Subbu <vsubbu@nvidia.com>2016-07-28 01:29:15 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-09-29 16:17:46 -0400
commitb17d9708c9e9930778de43de1edf1385acb13ebd (patch)
treefc485e96cc19575d463c61c8b80a09dd89745f3f /drivers/gpu/nvgpu/gm206/bios_gm206.c
parent27b47b1969d7d9cdd3de9fd6f0131ad357f4b0fa (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.c25
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
65struct nvinit_ptrs { 66struct 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 }