gpu: nvgpu: PS35: Clk Prog Boardobj changes

1. Add VBIOS PS3.5 Clk programming table parsing code.
2. Update pmuifclk.h to match R400 pmu ucode pmuifclk.h
3. New clk_prog boardobj types have been added to support
   PS3.5 and to match the pmu ucode side changes
4. Add PS3.5 related construct and pmudatainit fops
5. PS3.5 clk programming table has secondary VF curve entries.
   Though these entries are currently marked as invalid for
   all SKUs, we need to add them to match struct sizes on PMU.
6. The pmuifclk.h nvgpu<->pmu interface changes needed for
   Turing(PS3.5) are NOT compatible with GV100 branched ucode.
   The secondary VF curve entries added for PS3.5 increase the
   entrysize breaking compatibility with GV100.
7. This change is therefore dependant on GV100 PMU ucode changes
   which increase the entrysize on GV100 pmu side.

JIRA NVGPU-1153

Change-Id: I868e503f87731442aae6503872ade4c208831d34
Signed-off-by: tkudav <tkudav@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1842627
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
tkudav
2018-09-24 14:14:51 +05:30
committed by mobile promotions
parent 69b46a6174
commit f4bd7552b3
5 changed files with 782 additions and 97 deletions

View File

@@ -57,7 +57,7 @@ struct clk_progs {
struct boardobjgrp_e255 super;
u8 slave_entry_count;
u8 vf_entry_count;
u8 vf_sec_entry_count;
};
struct clk_prog {
@@ -93,6 +93,42 @@ struct clk_prog_1x_master_table {
struct ctrl_clk_clk_prog_1x_master_table_slave_entry *p_slave_entries;
};
struct clk_prog_3x_master {
bool b_o_c_o_v_enabled;
struct ctrl_clk_clk_prog_1x_master_vf_entry *p_vf_entries;
struct ctrl_clk_clk_delta deltas;
union ctrl_clk_clk_prog_1x_master_source_data source_data;
vf_flatten *vfflatten;
vf_lookup *vflookup;
get_fpoints *getfpoints;
get_slaveclk *getslaveclk;
};
struct clk_prog_3x_master_ratio {
struct ctrl_clk_clk_prog_1x_master_ratio_slave_entry *p_slave_entries;
};
struct clk_prog_3x_master_table {
struct ctrl_clk_clk_prog_1x_master_table_slave_entry *p_slave_entries;
};
struct clk_prog_35_master {
struct clk_prog_1x super;
struct clk_prog_3x_master master;
struct ctrl_clk_clk_prog_35_master_sec_vf_entry_voltrail
*p_voltrail_sec_vf_entries;
};
struct clk_prog_35_master_ratio {
struct clk_prog_35_master super;
struct clk_prog_3x_master_ratio ratio;
};
struct clk_prog_35_master_table {
struct clk_prog_35_master super;
struct clk_prog_3x_master_table table;
};
#define CLK_CLK_PROG_GET(pclk, idx) \
((struct clk_prog *)BOARDOBJGRP_OBJ_GET_BY_IDX( \
&pclk->clk_progobjs.super.super, (u8)(idx)))