From 1372ec4df256978ebef8a87619290f994b127c6d Mon Sep 17 00:00:00 2001 From: Mahantesh Kumbar Date: Tue, 15 Sep 2015 16:31:07 -0700 Subject: gpu: nvgpu: interface update to sync CL #19870492 - pg statistics update - perfmon update - ADD GR inti params interface to enable ELPG Bug n/a Change-Id: I39ae1d4518733480a42f06a0be7bd794fc93ff6f Signed-off-by: Mahantesh Kumbar Reviewed-on: http://git-master/r/799684 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom Reviewed-on: http://git-master/r/806176 Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 143 ++++++++++++++++++++++++++++++++---- 1 file changed, 127 insertions(+), 16 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index 110f3c5a..7cc248fa 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c @@ -522,6 +522,11 @@ static u16 get_pmu_init_msg_pmu_sw_mg_size_v0(union pmu_init_msg_pmu *init_msg) return init->sw_managed_area_size; } +static u32 get_pmu_perfmon_cmd_start_size_v2(void) +{ + return sizeof(struct pmu_perfmon_cmd_start_v2); +} + static u32 get_pmu_perfmon_cmd_start_size_v1(void) { return sizeof(struct pmu_perfmon_cmd_start_v1); @@ -532,6 +537,20 @@ static u32 get_pmu_perfmon_cmd_start_size_v0(void) return sizeof(struct pmu_perfmon_cmd_start_v0); } +static int get_perfmon_cmd_start_offsetofvar_v2( + enum pmu_perfmon_cmd_start_fields field) +{ + switch (field) { + case COUNTER_ALLOC: + return offsetof(struct pmu_perfmon_cmd_start_v2, + counter_alloc); + default: + return -EINVAL; + } + + return 0; +} + static int get_perfmon_cmd_start_offsetofvar_v1( enum pmu_perfmon_cmd_start_fields field) { @@ -541,8 +560,8 @@ static int get_perfmon_cmd_start_offsetofvar_v1( counter_alloc); default: return -EINVAL; - break; } + return 0; } @@ -560,6 +579,11 @@ static int get_perfmon_cmd_start_offsetofvar_v0( return 0; } +static u32 get_pmu_perfmon_cmd_init_size_v2(void) +{ + return sizeof(struct pmu_perfmon_cmd_init_v2); +} + static u32 get_pmu_perfmon_cmd_init_size_v1(void) { return sizeof(struct pmu_perfmon_cmd_init_v1); @@ -570,6 +594,20 @@ static u32 get_pmu_perfmon_cmd_init_size_v0(void) return sizeof(struct pmu_perfmon_cmd_init_v0); } +static int get_perfmon_cmd_init_offsetofvar_v2( + enum pmu_perfmon_cmd_start_fields field) +{ + switch (field) { + case COUNTER_ALLOC: + return offsetof(struct pmu_perfmon_cmd_init_v2, + counter_alloc); + default: + return -EINVAL; + break; + } + return 0; +} + static int get_perfmon_cmd_init_offsetofvar_v1( enum pmu_perfmon_cmd_start_fields field) { @@ -598,6 +636,12 @@ static int get_perfmon_cmd_init_offsetofvar_v0( return 0; } +static void perfmon_start_set_cmd_type_v2(struct pmu_perfmon_cmd *pc, u8 value) +{ + struct pmu_perfmon_cmd_start_v2 *start = &pc->start_v2; + start->cmd_type = value; +} + static void perfmon_start_set_cmd_type_v1(struct pmu_perfmon_cmd *pc, u8 value) { struct pmu_perfmon_cmd_start_v1 *start = &pc->start_v1; @@ -610,6 +654,12 @@ static void perfmon_start_set_cmd_type_v0(struct pmu_perfmon_cmd *pc, u8 value) start->cmd_type = value; } +static void perfmon_start_set_group_id_v2(struct pmu_perfmon_cmd *pc, u8 value) +{ + struct pmu_perfmon_cmd_start_v2 *start = &pc->start_v2; + start->group_id = value; +} + static void perfmon_start_set_group_id_v1(struct pmu_perfmon_cmd *pc, u8 value) { struct pmu_perfmon_cmd_start_v1 *start = &pc->start_v1; @@ -622,6 +672,12 @@ static void perfmon_start_set_group_id_v0(struct pmu_perfmon_cmd *pc, u8 value) start->group_id = value; } +static void perfmon_start_set_state_id_v2(struct pmu_perfmon_cmd *pc, u8 value) +{ + struct pmu_perfmon_cmd_start_v2 *start = &pc->start_v2; + start->state_id = value; +} + static void perfmon_start_set_state_id_v1(struct pmu_perfmon_cmd *pc, u8 value) { struct pmu_perfmon_cmd_start_v1 *start = &pc->start_v1; @@ -634,6 +690,12 @@ static void perfmon_start_set_state_id_v0(struct pmu_perfmon_cmd *pc, u8 value) start->state_id = value; } +static void perfmon_start_set_flags_v2(struct pmu_perfmon_cmd *pc, u8 value) +{ + struct pmu_perfmon_cmd_start_v2 *start = &pc->start_v2; + start->flags = value; +} + static void perfmon_start_set_flags_v1(struct pmu_perfmon_cmd *pc, u8 value) { struct pmu_perfmon_cmd_start_v1 *start = &pc->start_v1; @@ -646,6 +708,12 @@ static void perfmon_start_set_flags_v0(struct pmu_perfmon_cmd *pc, u8 value) start->flags = value; } +static u8 perfmon_start_get_flags_v2(struct pmu_perfmon_cmd *pc) +{ + struct pmu_perfmon_cmd_start_v2 *start = &pc->start_v2; + return start->flags; +} + static u8 perfmon_start_get_flags_v1(struct pmu_perfmon_cmd *pc) { struct pmu_perfmon_cmd_start_v1 *start = &pc->start_v1; @@ -658,6 +726,14 @@ static u8 perfmon_start_get_flags_v0(struct pmu_perfmon_cmd *pc) return start->flags; } +static void perfmon_cmd_init_set_sample_buffer_v2(struct pmu_perfmon_cmd *pc, + u16 value) +{ + struct pmu_perfmon_cmd_init_v2 *init = &pc->init_v2; + init->sample_buffer = value; +} + + static void perfmon_cmd_init_set_sample_buffer_v1(struct pmu_perfmon_cmd *pc, u16 value) { @@ -672,6 +748,13 @@ static void perfmon_cmd_init_set_sample_buffer_v0(struct pmu_perfmon_cmd *pc, init->sample_buffer = value; } +static void perfmon_cmd_init_set_dec_cnt_v2(struct pmu_perfmon_cmd *pc, + u8 value) +{ + struct pmu_perfmon_cmd_init_v2 *init = &pc->init_v2; + init->to_decrease_count = value; +} + static void perfmon_cmd_init_set_dec_cnt_v1(struct pmu_perfmon_cmd *pc, u8 value) { @@ -686,6 +769,13 @@ static void perfmon_cmd_init_set_dec_cnt_v0(struct pmu_perfmon_cmd *pc, init->to_decrease_count = value; } +static void perfmon_cmd_init_set_base_cnt_id_v2(struct pmu_perfmon_cmd *pc, + u8 value) +{ + struct pmu_perfmon_cmd_init_v2 *init = &pc->init_v2; + init->base_counter_id = value; +} + static void perfmon_cmd_init_set_base_cnt_id_v1(struct pmu_perfmon_cmd *pc, u8 value) { @@ -700,6 +790,13 @@ static void perfmon_cmd_init_set_base_cnt_id_v0(struct pmu_perfmon_cmd *pc, init->base_counter_id = value; } +static void perfmon_cmd_init_set_samp_period_us_v2(struct pmu_perfmon_cmd *pc, + u32 value) +{ + struct pmu_perfmon_cmd_init_v2 *init = &pc->init_v2; + init->sample_period_us = value; +} + static void perfmon_cmd_init_set_samp_period_us_v1(struct pmu_perfmon_cmd *pc, u32 value) { @@ -714,6 +811,13 @@ static void perfmon_cmd_init_set_samp_period_us_v0(struct pmu_perfmon_cmd *pc, init->sample_period_us = value; } +static void perfmon_cmd_init_set_num_cnt_v2(struct pmu_perfmon_cmd *pc, + u8 value) +{ + struct pmu_perfmon_cmd_init_v2 *init = &pc->init_v2; + init->num_counters = value; +} + static void perfmon_cmd_init_set_num_cnt_v1(struct pmu_perfmon_cmd *pc, u8 value) { @@ -728,6 +832,13 @@ static void perfmon_cmd_init_set_num_cnt_v0(struct pmu_perfmon_cmd *pc, init->num_counters = value; } +static void perfmon_cmd_init_set_mov_avg_v2(struct pmu_perfmon_cmd *pc, + u8 value) +{ + struct pmu_perfmon_cmd_init_v2 *init = &pc->init_v2; + init->samples_in_moving_avg = value; +} + static void perfmon_cmd_init_set_mov_avg_v1(struct pmu_perfmon_cmd *pc, u8 value) { @@ -961,35 +1072,35 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu) g->ops.pmu_ver.get_pmu_init_msg_pmu_sw_mg_size = get_pmu_init_msg_pmu_sw_mg_size_v1; g->ops.pmu_ver.get_pmu_perfmon_cmd_start_size = - get_pmu_perfmon_cmd_start_size_v1; + get_pmu_perfmon_cmd_start_size_v2; g->ops.pmu_ver.get_perfmon_cmd_start_offsetofvar = - get_perfmon_cmd_start_offsetofvar_v1; + get_perfmon_cmd_start_offsetofvar_v2; g->ops.pmu_ver.perfmon_start_set_cmd_type = - perfmon_start_set_cmd_type_v1; + perfmon_start_set_cmd_type_v2; g->ops.pmu_ver.perfmon_start_set_group_id = - perfmon_start_set_group_id_v1; + perfmon_start_set_group_id_v2; g->ops.pmu_ver.perfmon_start_set_state_id = - perfmon_start_set_state_id_v1; + perfmon_start_set_state_id_v2; g->ops.pmu_ver.perfmon_start_set_flags = - perfmon_start_set_flags_v1; + perfmon_start_set_flags_v2; g->ops.pmu_ver.perfmon_start_get_flags = - perfmon_start_get_flags_v1; + perfmon_start_get_flags_v2; g->ops.pmu_ver.get_pmu_perfmon_cmd_init_size = - get_pmu_perfmon_cmd_init_size_v1; + get_pmu_perfmon_cmd_init_size_v2; g->ops.pmu_ver.get_perfmon_cmd_init_offsetofvar = - get_perfmon_cmd_init_offsetofvar_v1; + get_perfmon_cmd_init_offsetofvar_v2; g->ops.pmu_ver.perfmon_cmd_init_set_sample_buffer = - perfmon_cmd_init_set_sample_buffer_v1; + perfmon_cmd_init_set_sample_buffer_v2; g->ops.pmu_ver.perfmon_cmd_init_set_dec_cnt = - perfmon_cmd_init_set_dec_cnt_v1; + perfmon_cmd_init_set_dec_cnt_v2; g->ops.pmu_ver.perfmon_cmd_init_set_base_cnt_id = - perfmon_cmd_init_set_base_cnt_id_v1; + perfmon_cmd_init_set_base_cnt_id_v2; g->ops.pmu_ver.perfmon_cmd_init_set_samp_period_us = - perfmon_cmd_init_set_samp_period_us_v1; + perfmon_cmd_init_set_samp_period_us_v2; g->ops.pmu_ver.perfmon_cmd_init_set_num_cnt = - perfmon_cmd_init_set_num_cnt_v1; + perfmon_cmd_init_set_num_cnt_v2; g->ops.pmu_ver.perfmon_cmd_init_set_mov_avg = - perfmon_cmd_init_set_mov_avg_v1; + perfmon_cmd_init_set_mov_avg_v2; g->ops.pmu_ver.get_pmu_seq_in_a_ptr = get_pmu_sequence_in_alloc_ptr_v1; g->ops.pmu_ver.get_pmu_seq_out_a_ptr = -- cgit v1.2.2