diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index 0580f19d..3fa7e53c 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | |||
@@ -155,6 +155,37 @@ static void set_pmu_cmdline_args_falctracedmaidx_v2( | |||
155 | pmu->args_v2.falc_trace_dma_idx = idx; | 155 | pmu->args_v2.falc_trace_dma_idx = idx; |
156 | } | 156 | } |
157 | 157 | ||
158 | static u32 pmu_cmdline_size_v3(struct pmu_gk20a *pmu) | ||
159 | { | ||
160 | return sizeof(struct pmu_cmdline_args_v3); | ||
161 | } | ||
162 | |||
163 | static void set_pmu_cmdline_args_cpufreq_v3(struct pmu_gk20a *pmu, u32 freq) | ||
164 | { | ||
165 | pmu->args_v3.cpu_freq_hz = freq; | ||
166 | } | ||
167 | static void set_pmu_cmdline_args_secure_mode_v3(struct pmu_gk20a *pmu, u32 val) | ||
168 | { | ||
169 | pmu->args_v3.secure_mode = val; | ||
170 | } | ||
171 | |||
172 | static void set_pmu_cmdline_args_falctracesize_v3( | ||
173 | struct pmu_gk20a *pmu, u32 size) | ||
174 | { | ||
175 | pmu->args_v3.falc_trace_size = size; | ||
176 | } | ||
177 | |||
178 | static void set_pmu_cmdline_args_falctracedmabase_v3(struct pmu_gk20a *pmu) | ||
179 | { | ||
180 | pmu->args_v3.falc_trace_dma_base = ((u32)pmu->trace_buf.pmu_va)/0x100; | ||
181 | } | ||
182 | |||
183 | static void set_pmu_cmdline_args_falctracedmaidx_v3( | ||
184 | struct pmu_gk20a *pmu, u32 idx) | ||
185 | { | ||
186 | pmu->args_v3.falc_trace_dma_idx = idx; | ||
187 | } | ||
188 | |||
158 | static void set_pmu_cmdline_args_cpufreq_v1(struct pmu_gk20a *pmu, u32 freq) | 189 | static void set_pmu_cmdline_args_cpufreq_v1(struct pmu_gk20a *pmu, u32 freq) |
159 | { | 190 | { |
160 | pmu->args_v1.cpu_freq_hz = freq; | 191 | pmu->args_v1.cpu_freq_hz = freq; |
@@ -229,6 +260,11 @@ static void set_pmu_cmdline_args_cpufreq_v0(struct pmu_gk20a *pmu, u32 freq) | |||
229 | pmu->args_v0.cpu_freq_hz = freq; | 260 | pmu->args_v0.cpu_freq_hz = freq; |
230 | } | 261 | } |
231 | 262 | ||
263 | static void *get_pmu_cmdline_args_ptr_v3(struct pmu_gk20a *pmu) | ||
264 | { | ||
265 | return (void *)(&pmu->args_v3); | ||
266 | } | ||
267 | |||
232 | static void *get_pmu_cmdline_args_ptr_v2(struct pmu_gk20a *pmu) | 268 | static void *get_pmu_cmdline_args_ptr_v2(struct pmu_gk20a *pmu) |
233 | { | 269 | { |
234 | return (void *)(&pmu->args_v2); | 270 | return (void *)(&pmu->args_v2); |
@@ -661,6 +697,89 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu) | |||
661 | pmu->remove_support = gk20a_remove_pmu_support; | 697 | pmu->remove_support = gk20a_remove_pmu_support; |
662 | 698 | ||
663 | switch (pmu->desc->app_version) { | 699 | switch (pmu->desc->app_version) { |
700 | case APP_VERSION_GM20B_4: | ||
701 | g->ops.pmu_ver.get_perfmon_cntr_ptr = get_perfmon_cntr_ptr_v2; | ||
702 | g->ops.pmu_ver.set_perfmon_cntr_ut = set_perfmon_cntr_ut_v2; | ||
703 | g->ops.pmu_ver.set_perfmon_cntr_lt = set_perfmon_cntr_lt_v2; | ||
704 | g->ops.pmu_ver.set_perfmon_cntr_valid = | ||
705 | set_perfmon_cntr_valid_v2; | ||
706 | g->ops.pmu_ver.set_perfmon_cntr_index = | ||
707 | set_perfmon_cntr_index_v2; | ||
708 | g->ops.pmu_ver.set_perfmon_cntr_group_id = | ||
709 | set_perfmon_cntr_group_id_v2; | ||
710 | g->ops.pmu_ver.get_perfmon_cntr_sz = pmu_perfmon_cntr_sz_v2; | ||
711 | g->ops.pmu_ver.cmd_id_zbc_table_update = 16; | ||
712 | g->ops.pmu_ver.get_pmu_cmdline_args_size = | ||
713 | pmu_cmdline_size_v3; | ||
714 | g->ops.pmu_ver.set_pmu_cmdline_args_cpu_freq = | ||
715 | set_pmu_cmdline_args_cpufreq_v3; | ||
716 | g->ops.pmu_ver.set_pmu_cmdline_args_secure_mode = | ||
717 | set_pmu_cmdline_args_secure_mode_v3; | ||
718 | g->ops.pmu_ver.set_pmu_cmdline_args_trace_size = | ||
719 | set_pmu_cmdline_args_falctracesize_v3; | ||
720 | g->ops.pmu_ver.set_pmu_cmdline_args_trace_dma_base = | ||
721 | set_pmu_cmdline_args_falctracedmabase_v3; | ||
722 | g->ops.pmu_ver.set_pmu_cmdline_args_trace_dma_idx = | ||
723 | set_pmu_cmdline_args_falctracedmaidx_v3; | ||
724 | g->ops.pmu_ver.get_pmu_cmdline_args_ptr = | ||
725 | get_pmu_cmdline_args_ptr_v3; | ||
726 | g->ops.pmu_ver.get_pmu_allocation_struct_size = | ||
727 | get_pmu_allocation_size_v1; | ||
728 | g->ops.pmu_ver.set_pmu_allocation_ptr = | ||
729 | set_pmu_allocation_ptr_v1; | ||
730 | g->ops.pmu_ver.pmu_allocation_set_dmem_size = | ||
731 | pmu_allocation_set_dmem_size_v1; | ||
732 | g->ops.pmu_ver.pmu_allocation_get_dmem_size = | ||
733 | pmu_allocation_get_dmem_size_v1; | ||
734 | g->ops.pmu_ver.pmu_allocation_get_dmem_offset = | ||
735 | pmu_allocation_get_dmem_offset_v1; | ||
736 | g->ops.pmu_ver.pmu_allocation_get_dmem_offset_addr = | ||
737 | pmu_allocation_get_dmem_offset_addr_v1; | ||
738 | g->ops.pmu_ver.pmu_allocation_set_dmem_offset = | ||
739 | pmu_allocation_set_dmem_offset_v1; | ||
740 | g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params = | ||
741 | get_pmu_init_msg_pmu_queue_params_v1; | ||
742 | g->ops.pmu_ver.get_pmu_msg_pmu_init_msg_ptr = | ||
743 | get_pmu_msg_pmu_init_msg_ptr_v1; | ||
744 | g->ops.pmu_ver.get_pmu_init_msg_pmu_sw_mg_off = | ||
745 | get_pmu_init_msg_pmu_sw_mg_off_v1; | ||
746 | g->ops.pmu_ver.get_pmu_init_msg_pmu_sw_mg_size = | ||
747 | get_pmu_init_msg_pmu_sw_mg_size_v1; | ||
748 | g->ops.pmu_ver.get_pmu_perfmon_cmd_start_size = | ||
749 | get_pmu_perfmon_cmd_start_size_v1; | ||
750 | g->ops.pmu_ver.get_perfmon_cmd_start_offsetofvar = | ||
751 | get_perfmon_cmd_start_offsetofvar_v1; | ||
752 | g->ops.pmu_ver.perfmon_start_set_cmd_type = | ||
753 | perfmon_start_set_cmd_type_v1; | ||
754 | g->ops.pmu_ver.perfmon_start_set_group_id = | ||
755 | perfmon_start_set_group_id_v1; | ||
756 | g->ops.pmu_ver.perfmon_start_set_state_id = | ||
757 | perfmon_start_set_state_id_v1; | ||
758 | g->ops.pmu_ver.perfmon_start_set_flags = | ||
759 | perfmon_start_set_flags_v1; | ||
760 | g->ops.pmu_ver.perfmon_start_get_flags = | ||
761 | perfmon_start_get_flags_v1; | ||
762 | g->ops.pmu_ver.get_pmu_perfmon_cmd_init_size = | ||
763 | get_pmu_perfmon_cmd_init_size_v1; | ||
764 | g->ops.pmu_ver.get_perfmon_cmd_init_offsetofvar = | ||
765 | get_perfmon_cmd_init_offsetofvar_v1; | ||
766 | g->ops.pmu_ver.perfmon_cmd_init_set_sample_buffer = | ||
767 | perfmon_cmd_init_set_sample_buffer_v1; | ||
768 | g->ops.pmu_ver.perfmon_cmd_init_set_dec_cnt = | ||
769 | perfmon_cmd_init_set_dec_cnt_v1; | ||
770 | g->ops.pmu_ver.perfmon_cmd_init_set_base_cnt_id = | ||
771 | perfmon_cmd_init_set_base_cnt_id_v1; | ||
772 | g->ops.pmu_ver.perfmon_cmd_init_set_samp_period_us = | ||
773 | perfmon_cmd_init_set_samp_period_us_v1; | ||
774 | g->ops.pmu_ver.perfmon_cmd_init_set_num_cnt = | ||
775 | perfmon_cmd_init_set_num_cnt_v1; | ||
776 | g->ops.pmu_ver.perfmon_cmd_init_set_mov_avg = | ||
777 | perfmon_cmd_init_set_mov_avg_v1; | ||
778 | g->ops.pmu_ver.get_pmu_seq_in_a_ptr = | ||
779 | get_pmu_sequence_in_alloc_ptr_v1; | ||
780 | g->ops.pmu_ver.get_pmu_seq_out_a_ptr = | ||
781 | get_pmu_sequence_out_alloc_ptr_v1; | ||
782 | break; | ||
664 | case APP_VERSION_GM20B_3: | 783 | case APP_VERSION_GM20B_3: |
665 | case APP_VERSION_GM20B_2: | 784 | case APP_VERSION_GM20B_2: |
666 | g->ops.pmu_ver.get_perfmon_cntr_ptr = get_perfmon_cntr_ptr_v2; | 785 | g->ops.pmu_ver.get_perfmon_cntr_ptr = get_perfmon_cntr_ptr_v2; |