diff options
author | Mahantesh Kumbar <mkumbar@nvidia.com> | 2017-01-31 02:26:10 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-02-08 00:53:39 -0500 |
commit | 02190c7597d3b1a04ebcbc746b41f949ab699a18 (patch) | |
tree | 882e161d094e43a97bd51973795ea3ff6cd5d4cb /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |
parent | 3335ff9fe90d3f523a463107bae864b011590182 (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.h | 310 |
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 | ||
77 | struct 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 | |||
88 | struct 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 | |||
100 | struct 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 | |||
113 | struct 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 | |||
217 | enum { | ||
218 | PMU_INIT_MSG_TYPE_PMU_INIT = 0, | ||
219 | }; | ||
220 | |||
221 | struct 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 | |||
236 | struct 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 | }; | ||
251 | struct 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 | ||
273 | struct 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 | |||
287 | struct 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 | |||
301 | union 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 | |||
309 | struct 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 | |||
320 | enum { | ||
321 | PMU_RC_MSG_TYPE_UNHANDLED_CMD = 0, | ||
322 | }; | ||
323 | |||
324 | struct pmu_rc_msg_unhandled_cmd { | ||
325 | u8 msg_type; | ||
326 | u8 unit_id; | ||
327 | }; | ||
328 | 140 | ||
329 | struct 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 | ||
377 | struct 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 | |||
394 | struct 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 | |||
417 | struct pmu_sha1_gid { | ||
418 | bool valid; | ||
419 | u8 gid[PMU_SHA1_GID_SIZE]; | ||
420 | }; | ||
421 | |||
422 | struct 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 | |||
434 | enum { | ||
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 | |||
464 | enum | ||
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 | ||
479 | enum | ||
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 | |||
491 | struct pmu_gk20a; | 189 | struct pmu_gk20a; |
492 | struct pmu_queue; | 190 | struct 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 | |||
524 | struct pmu_mutex { | 216 | struct pmu_mutex { |
525 | u32 id; | 217 | u32 id; |
526 | u32 index; | 218 | u32 index; |