diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gm206')
-rw-r--r-- | drivers/gpu/nvgpu/gm206/bios_gm206.c | 25 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm206/bios_gm206.h | 20 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm206/hal_gm206.c | 2 |
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 | ||
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 | } |
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 | ||
19 | enum { | 20 | enum { |
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 | ||
26 | enum { | 28 | enum { |
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 | ||
40 | enum { | ||
41 | VP_FIELD_TABLE = 0, | ||
42 | VP_FIELD_REGISTER, | ||
43 | VP_TRANSLATION_TABLE, | ||
44 | }; | ||
45 | |||
30 | struct bit_token { | 46 | struct 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); |