summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm206
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
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')
-rw-r--r--drivers/gpu/nvgpu/gm206/bios_gm206.c25
-rw-r--r--drivers/gpu/nvgpu/gm206/bios_gm206.h20
-rw-r--r--drivers/gpu/nvgpu/gm206/hal_gm206.c2
3 files changed, 40 insertions, 7 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 }
diff --git a/drivers/gpu/nvgpu/gm206/bios_gm206.h b/drivers/gpu/nvgpu/gm206/bios_gm206.h
index f93e5f58..5aa20364 100644
--- a/drivers/gpu/nvgpu/gm206/bios_gm206.h
+++ b/drivers/gpu/nvgpu/gm206/bios_gm206.h
@@ -15,18 +15,34 @@
15#define NVGPU_BIOS_GM206_H 15#define NVGPU_BIOS_GM206_H
16 16
17#define PERF_PTRS_WIDTH 0x4 17#define PERF_PTRS_WIDTH 0x4
18#define PERF_PTRS_WIDTH_16 0x2
18 19
19enum { 20enum {
20 CLOCKS_TABLE = 2, 21 CLOCKS_TABLE = 2,
21 CLOCK_PROGRAMMING_TABLE, 22 CLOCK_PROGRAMMING_TABLE,
22 NAFLL_TABLE, 23 FLL_TABLE,
23 ADC_TABLE, 24 VIN_TABLE,
25 FREQUENCY_CONTROLLER_TABLE
24}; 26};
25 27
26enum { 28enum {
29 PERFORMANCE_TABLE = 0,
30 MEMORY_CLOCK_TABLE,
31 MEMORY_TWEAK_TABLE,
32 POWER_CONTROL_TABLE,
33 THERMAL_CONTROL_TABLE,
34 THERMAL_DEVICE_TABLE,
35 THERMAL_COOLERS_TABLE,
36 PERFORMANCE_SETTINGS_SCRIPT,
27 CONTINUOUS_VIRTUAL_BINNING_TABLE, 37 CONTINUOUS_VIRTUAL_BINNING_TABLE,
28}; 38};
29 39
40enum {
41 VP_FIELD_TABLE = 0,
42 VP_FIELD_REGISTER,
43 VP_TRANSLATION_TABLE,
44};
45
30struct bit_token { 46struct bit_token {
31 u8 token_id; 47 u8 token_id;
32 u8 data_version; 48 u8 data_version;
diff --git a/drivers/gpu/nvgpu/gm206/hal_gm206.c b/drivers/gpu/nvgpu/gm206/hal_gm206.c
index 6b43c8e9..f771c07d 100644
--- a/drivers/gpu/nvgpu/gm206/hal_gm206.c
+++ b/drivers/gpu/nvgpu/gm206/hal_gm206.c
@@ -181,7 +181,7 @@ int gm206_init_hal(struct gk20a *g)
181 181
182 gops->privsecurity = 1; 182 gops->privsecurity = 1;
183 gops->securegpccs = 1; 183 gops->securegpccs = 1;
184 184 gops->pmupstate = false;
185 gm20b_init_mc(gops); 185 gm20b_init_mc(gops);
186 gm20b_init_ltc(gops); 186 gm20b_init_ltc(gops);
187 gm206_init_gr(gops); 187 gm206_init_gr(gops);