summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2017-01-31 02:26:10 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-02-08 00:53:39 -0500
commit02190c7597d3b1a04ebcbc746b41f949ab699a18 (patch)
tree882e161d094e43a97bd51973795ea3ff6cd5d4cb /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
parent3335ff9fe90d3f523a463107bae864b011590182 (diff)
gpu: nvgpu: PMU interface headers reorganization
Moved PMU/Falcon interface which are present in pmu_gk20a.h & pmu_common.h to new files as per feature nvgpu_gpmu_cmdif.h - Top-level header-file that defines the command/message interfaces used to communicate with PMU gpmuif_pmu.h - PMU Command/Message init interfaces gpmuif_cmn.h - Common definitions used by interfaces Jira NVGPU-19 Change-Id: Id8ea6075e4dbba7697036951dcb85487eb861710 Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: http://git-master/r/1296415 GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.h310
1 files changed, 1 insertions, 309 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
index ad29516a..84377d0b 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
@@ -24,12 +24,7 @@
24#include <linux/version.h> 24#include <linux/version.h>
25#include "pmu_api.h" 25#include "pmu_api.h"
26#include "pmu_common.h" 26#include "pmu_common.h"
27#include "pmuif/gpmuifboardobj.h" 27#include "pmuif/nvgpu_gpmu_cmdif.h"
28#include "pmuif/gpmuifclk.h"
29#include "pmuif/gpmuifperf.h"
30#include "pmuif/gpmuifpmgr.h"
31#include "pmuif/gpmuifvolt.h"
32#include "pmuif/gpmuiftherm.h"
33 28
34/* defined by pmu hw spec */ 29/* defined by pmu hw spec */
35#define GK20A_PMU_VA_SIZE (512 * 1024 * 1024) 30#define GK20A_PMU_VA_SIZE (512 * 1024 * 1024)
@@ -74,53 +69,6 @@ enum {
74 GK20A_PMU_DMAIDX_END = 7 69 GK20A_PMU_DMAIDX_END = 7
75}; 70};
76 71
77struct pmu_cmdline_args_v2 {
78 u32 cpu_freq_hz; /* Frequency of the clock driving PMU */
79 u32 falc_trace_size; /* falctrace buffer size (bytes) */
80 u32 falc_trace_dma_base; /* 256-byte block address */
81 u32 falc_trace_dma_idx; /* dmaIdx for DMA operations */
82 u8 secure_mode;
83 u8 raise_priv_sec; /*Raise priv level required for desired
84 registers*/
85 struct pmu_mem_v1 gc6_ctx; /* dmem offset of gc6 context */
86};
87
88struct pmu_cmdline_args_v3 {
89 u32 reserved;
90 u32 cpu_freq_hz; /* Frequency of the clock driving PMU */
91 u32 falc_trace_size; /* falctrace buffer size (bytes) */
92 u32 falc_trace_dma_base; /* 256-byte block address */
93 u32 falc_trace_dma_idx; /* dmaIdx for DMA operations */
94 u8 secure_mode;
95 u8 raise_priv_sec; /*Raise priv level required for desired
96 registers*/
97 struct pmu_mem_v1 gc6_ctx; /* dmem offset of gc6 context */
98};
99
100struct pmu_cmdline_args_v4 {
101 u32 reserved;
102 u32 cpu_freq_hz; /* Frequency of the clock driving PMU */
103 u32 falc_trace_size; /* falctrace buffer size (bytes) */
104 struct falc_dma_addr dma_addr; /* 256-byte block address */
105 u32 falc_trace_dma_idx; /* dmaIdx for DMA operations */
106 u8 secure_mode;
107 u8 raise_priv_sec; /*Raise priv level required for desired
108 registers*/
109 struct pmu_mem_desc_v0 gc6_ctx; /* dmem offset of gc6 context */
110 u8 pad;
111};
112
113struct pmu_cmdline_args_v5 {
114 u32 cpu_freq_hz; /* Frequency of the clock driving PMU */
115 struct flcn_mem_desc_v0 trace_buf;
116 u8 secure_mode;
117 u8 raise_priv_sec;
118 struct flcn_mem_desc_v0 gc6_ctx;
119 struct flcn_mem_desc_v0 init_data_dma_info;
120 u32 dummy;
121};
122
123
124#define GK20A_PMU_TRACE_BUFSIZE 0x4000 /* 4K */ 72#define GK20A_PMU_TRACE_BUFSIZE 0x4000 /* 4K */
125#define GK20A_PMU_DMEM_BLKSIZE2 8 73#define GK20A_PMU_DMEM_BLKSIZE2 8
126 74
@@ -176,29 +124,6 @@ struct pmu_ucode_desc_v1 {
176 u32 compressed; 124 u32 compressed;
177}; 125};
178 126
179#define PMU_UNIT_REWIND (0x00)
180#define PMU_UNIT_PG (0x03)
181#define PMU_UNIT_INIT (0x07)
182#define PMU_UNIT_ACR (0x0A)
183#define PMU_UNIT_PERFMON_T18X (0x11)
184#define PMU_UNIT_PERFMON (0x12)
185#define PMU_UNIT_PERF (0x13)
186#define PMU_UNIT_RC (0x1F)
187#define PMU_UNIT_FECS_MEM_OVERRIDE (0x1E)
188#define PMU_UNIT_CLK (0x0D)
189#define PMU_UNIT_THERM (0x14)
190#define PMU_UNIT_PMGR (0x18)
191#define PMU_UNIT_VOLT (0x0E)
192
193#define PMU_UNIT_END (0x23)
194
195#define PMU_UNIT_TEST_START (0xFE)
196#define PMU_UNIT_END_SIM (0xFF)
197#define PMU_UNIT_TEST_END (0xFF)
198
199#define PMU_UNIT_ID_IS_VALID(id) \
200 (((id) < PMU_UNIT_END) || ((id) >= PMU_UNIT_TEST_START))
201
202#define PMU_DMEM_ALLOC_ALIGNMENT (4) 127#define PMU_DMEM_ALLOC_ALIGNMENT (4)
203#define PMU_DMEM_ALIGNMENT (4) 128#define PMU_DMEM_ALIGNMENT (4)
204 129
@@ -212,124 +137,7 @@ struct pmu_ucode_desc_v1 {
212#define PMU_MSG_HDR_SIZE sizeof(struct pmu_hdr) 137#define PMU_MSG_HDR_SIZE sizeof(struct pmu_hdr)
213#define PMU_CMD_HDR_SIZE sizeof(struct pmu_hdr) 138#define PMU_CMD_HDR_SIZE sizeof(struct pmu_hdr)
214 139
215#define PMU_QUEUE_COUNT 5
216
217enum {
218 PMU_INIT_MSG_TYPE_PMU_INIT = 0,
219};
220
221struct pmu_init_msg_pmu_v0 {
222 u8 msg_type;
223 u8 pad;
224
225 struct {
226 u16 size;
227 u16 offset;
228 u8 index;
229 u8 pad;
230 } queue_info[PMU_QUEUE_COUNT];
231
232 u16 sw_managed_area_offset;
233 u16 sw_managed_area_size;
234};
235
236struct pmu_init_msg_pmu_v1 {
237 u8 msg_type;
238 u8 pad;
239 u16 os_debug_entry_point;
240
241 struct {
242 u16 size;
243 u16 offset;
244 u8 index;
245 u8 pad;
246 } queue_info[PMU_QUEUE_COUNT];
247
248 u16 sw_managed_area_offset;
249 u16 sw_managed_area_size;
250};
251struct pmu_init_msg_pmu_v2 {
252 u8 msg_type;
253 u8 pad;
254 u16 os_debug_entry_point;
255
256 struct {
257 u16 size;
258 u16 offset;
259 u8 index;
260 u8 pad;
261 } queue_info[PMU_QUEUE_COUNT];
262
263 u16 sw_managed_area_offset;
264 u16 sw_managed_area_size;
265 u8 dummy[18];
266};
267
268#define PMU_QUEUE_COUNT_FOR_V4 5
269#define PMU_QUEUE_COUNT_FOR_V3 3
270#define PMU_QUEUE_HPQ_IDX_FOR_V3 0
271#define PMU_QUEUE_LPQ_IDX_FOR_V3 1
272#define PMU_QUEUE_MSG_IDX_FOR_V3 2
273struct pmu_init_msg_pmu_v3 {
274 u8 msg_type;
275 u8 queue_index[PMU_QUEUE_COUNT_FOR_V3];
276 u16 queue_size[PMU_QUEUE_COUNT_FOR_V3];
277 u16 queue_offset;
278
279 u16 sw_managed_area_offset;
280 u16 sw_managed_area_size;
281
282 u16 os_debug_entry_point;
283
284 u8 dummy[18];
285};
286
287struct pmu_init_msg_pmu_v4 {
288 u8 msg_type;
289 u8 queue_index[PMU_QUEUE_COUNT_FOR_V4];
290 u16 queue_size[PMU_QUEUE_COUNT_FOR_V4];
291 u16 queue_offset;
292
293 u16 sw_managed_area_offset;
294 u16 sw_managed_area_size;
295
296 u16 os_debug_entry_point;
297
298 u8 dummy[18];
299};
300
301union pmu_init_msg_pmu {
302 struct pmu_init_msg_pmu_v0 v0;
303 struct pmu_init_msg_pmu_v1 v1;
304 struct pmu_init_msg_pmu_v2 v2;
305 struct pmu_init_msg_pmu_v3 v3;
306 struct pmu_init_msg_pmu_v4 v4;
307};
308
309struct pmu_init_msg {
310 union {
311 u8 msg_type;
312 struct pmu_init_msg_pmu_v1 pmu_init_v1;
313 struct pmu_init_msg_pmu_v0 pmu_init_v0;
314 struct pmu_init_msg_pmu_v2 pmu_init_v2;
315 struct pmu_init_msg_pmu_v3 pmu_init_v3;
316 struct pmu_init_msg_pmu_v4 pmu_init_v4;
317 };
318};
319
320enum {
321 PMU_RC_MSG_TYPE_UNHANDLED_CMD = 0,
322};
323
324struct pmu_rc_msg_unhandled_cmd {
325 u8 msg_type;
326 u8 unit_id;
327};
328 140
329struct pmu_rc_msg {
330 u8 msg_type;
331 struct pmu_rc_msg_unhandled_cmd unhandled_cmd;
332};
333 141
334/***************************** ACR ERROR CODES ******************************/ 142/***************************** ACR ERROR CODES ******************************/
335/*! 143/*!
@@ -374,120 +182,10 @@ struct pmu_perfmon_counter_v2 {
374#define PMU_PERFMON_FLAG_CLEAR_PREV (0x00000004) 182#define PMU_PERFMON_FLAG_CLEAR_PREV (0x00000004)
375 183
376 184
377struct pmu_cmd {
378 struct pmu_hdr hdr;
379 union {
380 struct pmu_perfmon_cmd perfmon;
381 struct pmu_pg_cmd pg;
382 struct pmu_zbc_cmd zbc;
383 struct pmu_acr_cmd acr;
384 struct pmu_lrf_tex_ltc_dram_cmd lrf_tex_ltc_dram;
385 struct nv_pmu_boardobj_cmd boardobj;
386 struct nv_pmu_perf_cmd perf;
387 struct nv_pmu_volt_cmd volt;
388 struct nv_pmu_clk_cmd clk;
389 struct nv_pmu_pmgr_cmd pmgr;
390 struct nv_pmu_therm_cmd therm;
391 } cmd;
392};
393
394struct pmu_msg {
395 struct pmu_hdr hdr;
396 union {
397 struct pmu_init_msg init;
398 struct pmu_perfmon_msg perfmon;
399 struct pmu_pg_msg pg;
400 struct pmu_rc_msg rc;
401 struct pmu_acr_msg acr;
402 struct pmu_lrf_tex_ltc_dram_msg lrf_tex_ltc_dram;
403 struct nv_pmu_boardobj_msg boardobj;
404 struct nv_pmu_perf_msg perf;
405 struct nv_pmu_volt_msg volt;
406 struct nv_pmu_clk_msg clk;
407 struct nv_pmu_pmgr_msg pmgr;
408 struct nv_pmu_therm_msg therm;
409 } msg;
410};
411
412#define PMU_SHA1_GID_SIGNATURE 0xA7C66AD2
413#define PMU_SHA1_GID_SIGNATURE_SIZE 4
414
415#define PMU_SHA1_GID_SIZE 16
416
417struct pmu_sha1_gid {
418 bool valid;
419 u8 gid[PMU_SHA1_GID_SIZE];
420};
421
422struct pmu_sha1_gid_data {
423 u8 signature[PMU_SHA1_GID_SIGNATURE_SIZE];
424 u8 gid[PMU_SHA1_GID_SIZE];
425};
426
427#define PMU_COMMAND_QUEUE_HPQ 0 /* write by sw, read by pmu, protected by sw mutex lock */
428#define PMU_COMMAND_QUEUE_LPQ 1 /* write by sw, read by pmu, protected by sw mutex lock */
429#define PMU_COMMAND_QUEUE_BIOS 2 /* read/write by sw/hw, protected by hw pmu mutex, id = 2 */
430#define PMU_COMMAND_QUEUE_SMI 3 /* read/write by sw/hw, protected by hw pmu mutex, id = 3 */
431#define PMU_MESSAGE_QUEUE 4 /* write by pmu, read by sw, accessed by interrupt handler, no lock */
432#define PMU_QUEUE_COUNT 5
433
434enum {
435 PMU_MUTEX_ID_RSVD1 = 0 ,
436 PMU_MUTEX_ID_GPUSER ,
437 PMU_MUTEX_ID_QUEUE_BIOS ,
438 PMU_MUTEX_ID_QUEUE_SMI ,
439 PMU_MUTEX_ID_GPMUTEX ,
440 PMU_MUTEX_ID_I2C ,
441 PMU_MUTEX_ID_RMLOCK ,
442 PMU_MUTEX_ID_MSGBOX ,
443 PMU_MUTEX_ID_FIFO ,
444 PMU_MUTEX_ID_PG ,
445 PMU_MUTEX_ID_GR ,
446 PMU_MUTEX_ID_CLK ,
447 PMU_MUTEX_ID_RSVD6 ,
448 PMU_MUTEX_ID_RSVD7 ,
449 PMU_MUTEX_ID_RSVD8 ,
450 PMU_MUTEX_ID_RSVD9 ,
451 PMU_MUTEX_ID_INVALID
452};
453
454#define PMU_IS_COMMAND_QUEUE(id) \
455 ((id) < PMU_MESSAGE_QUEUE)
456
457#define PMU_IS_SW_COMMAND_QUEUE(id) \
458 (((id) == PMU_COMMAND_QUEUE_HPQ) || \
459 ((id) == PMU_COMMAND_QUEUE_LPQ))
460
461#define PMU_IS_MESSAGE_QUEUE(id) \
462 ((id) == PMU_MESSAGE_QUEUE)
463
464enum
465{
466 OFLAG_READ = 0,
467 OFLAG_WRITE
468};
469
470#define QUEUE_SET (true)
471#define QUEUE_GET (false)
472
473#define QUEUE_ALIGNMENT (4)
474
475#define PMU_PGENG_GR_BUFFER_IDX_INIT (0) 185#define PMU_PGENG_GR_BUFFER_IDX_INIT (0)
476#define PMU_PGENG_GR_BUFFER_IDX_ZBC (1) 186#define PMU_PGENG_GR_BUFFER_IDX_ZBC (1)
477#define PMU_PGENG_GR_BUFFER_IDX_FECS (2) 187#define PMU_PGENG_GR_BUFFER_IDX_FECS (2)
478 188
479enum
480{
481 PMU_DMAIDX_UCODE = 0,
482 PMU_DMAIDX_VIRT = 1,
483 PMU_DMAIDX_PHYS_VID = 2,
484 PMU_DMAIDX_PHYS_SYS_COH = 3,
485 PMU_DMAIDX_PHYS_SYS_NCOH = 4,
486 PMU_DMAIDX_RSVD = 5,
487 PMU_DMAIDX_PELPG = 6,
488 PMU_DMAIDX_END = 7
489};
490
491struct pmu_gk20a; 189struct pmu_gk20a;
492struct pmu_queue; 190struct pmu_queue;
493 191
@@ -515,12 +213,6 @@ struct pmu_queue {
515 bool opened; /* opened implies locked */ 213 bool opened; /* opened implies locked */
516}; 214};
517 215
518
519#define PMU_MUTEX_ID_IS_VALID(id) \
520 ((id) < PMU_MUTEX_ID_INVALID)
521
522#define PMU_INVALID_MUTEX_OWNER_ID (0)
523
524struct pmu_mutex { 216struct pmu_mutex {
525 u32 id; 217 u32 id;
526 u32 index; 218 u32 index;