1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef _CGS_COMMON_H
25#define _CGS_COMMON_H
26
27#include "amd_shared.h"
28
29
30
31
32enum cgs_gpu_mem_type {
33 CGS_GPU_MEM_TYPE__VISIBLE_FB,
34 CGS_GPU_MEM_TYPE__INVISIBLE_FB,
35 CGS_GPU_MEM_TYPE__VISIBLE_CONTIG_FB,
36 CGS_GPU_MEM_TYPE__INVISIBLE_CONTIG_FB,
37 CGS_GPU_MEM_TYPE__GART_CACHEABLE,
38 CGS_GPU_MEM_TYPE__GART_WRITECOMBINE
39};
40
41
42
43
44enum cgs_ind_reg {
45 CGS_IND_REG__MMIO,
46 CGS_IND_REG__PCIE,
47 CGS_IND_REG__SMC,
48 CGS_IND_REG__UVD_CTX,
49 CGS_IND_REG__DIDT,
50 CGS_IND_REG__AUDIO_ENDPT
51};
52
53
54
55
56enum cgs_clock {
57 CGS_CLOCK__SCLK,
58 CGS_CLOCK__MCLK,
59 CGS_CLOCK__VCLK,
60 CGS_CLOCK__DCLK,
61 CGS_CLOCK__ECLK,
62 CGS_CLOCK__ACLK,
63 CGS_CLOCK__ICLK,
64
65};
66
67
68
69
70enum cgs_engine {
71 CGS_ENGINE__UVD,
72 CGS_ENGINE__VCE,
73 CGS_ENGINE__VP8,
74 CGS_ENGINE__ACP_DMA,
75 CGS_ENGINE__ACP_DSP0,
76 CGS_ENGINE__ACP_DSP1,
77 CGS_ENGINE__ISP,
78
79};
80
81
82
83
84enum cgs_voltage_planes {
85 CGS_VOLTAGE_PLANE__SENSOR0,
86 CGS_VOLTAGE_PLANE__SENSOR1,
87
88};
89
90
91
92
93enum cgs_ucode_id {
94 CGS_UCODE_ID_SMU = 0,
95 CGS_UCODE_ID_SDMA0,
96 CGS_UCODE_ID_SDMA1,
97 CGS_UCODE_ID_CP_CE,
98 CGS_UCODE_ID_CP_PFP,
99 CGS_UCODE_ID_CP_ME,
100 CGS_UCODE_ID_CP_MEC,
101 CGS_UCODE_ID_CP_MEC_JT1,
102 CGS_UCODE_ID_CP_MEC_JT2,
103 CGS_UCODE_ID_GMCON_RENG,
104 CGS_UCODE_ID_RLC_G,
105 CGS_UCODE_ID_MAXIMUM,
106};
107
108
109
110
111
112
113struct cgs_clock_limits {
114 unsigned min;
115 unsigned max;
116 unsigned sustainable;
117};
118
119
120
121
122struct cgs_firmware_info {
123 uint16_t version;
124 uint16_t feature_version;
125 uint32_t image_size;
126 uint64_t mc_addr;
127 void *kptr;
128};
129
130typedef unsigned long cgs_handle_t;
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151typedef int (*cgs_gpu_mem_info_t)(void *cgs_device, enum cgs_gpu_mem_type type,
152 uint64_t *mc_start, uint64_t *mc_size,
153 uint64_t *mem_size);
154
155
156
157
158
159
160
161
162
163
164
165
166
167typedef int (*cgs_gmap_kmem_t)(void *cgs_device, void *kmem, uint64_t size,
168 uint64_t min_offset, uint64_t max_offset,
169 cgs_handle_t *kmem_handle, uint64_t *mcaddr);
170
171
172
173
174
175
176
177
178typedef int (*cgs_gunmap_kmem_t)(void *cgs_device, cgs_handle_t kmem_handle);
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207typedef int (*cgs_alloc_gpu_mem_t)(void *cgs_device, enum cgs_gpu_mem_type type,
208 uint64_t size, uint64_t align,
209 uint64_t min_offset, uint64_t max_offset,
210 cgs_handle_t *handle);
211
212
213
214
215
216
217
218
219typedef int (*cgs_free_gpu_mem_t)(void *cgs_device, cgs_handle_t handle);
220
221
222
223
224
225
226
227
228
229
230
231typedef int (*cgs_gmap_gpu_mem_t)(void *cgs_device, cgs_handle_t handle,
232 uint64_t *mcaddr);
233
234
235
236
237
238
239
240
241
242
243typedef int (*cgs_gunmap_gpu_mem_t)(void *cgs_device, cgs_handle_t handle);
244
245
246
247
248
249
250
251
252
253
254typedef int (*cgs_kmap_gpu_mem_t)(void *cgs_device, cgs_handle_t handle,
255 void **map);
256
257
258
259
260
261
262
263
264typedef int (*cgs_kunmap_gpu_mem_t)(void *cgs_device, cgs_handle_t handle);
265
266
267
268
269
270
271
272
273typedef uint32_t (*cgs_read_register_t)(void *cgs_device, unsigned offset);
274
275
276
277
278
279
280
281typedef void (*cgs_write_register_t)(void *cgs_device, unsigned offset,
282 uint32_t value);
283
284
285
286
287
288
289
290
291typedef uint32_t (*cgs_read_ind_register_t)(void *cgs_device, enum cgs_ind_reg space,
292 unsigned index);
293
294
295
296
297
298
299
300typedef void (*cgs_write_ind_register_t)(void *cgs_device, enum cgs_ind_reg space,
301 unsigned index, uint32_t value);
302
303
304
305
306
307
308
309
310typedef uint8_t (*cgs_read_pci_config_byte_t)(void *cgs_device, unsigned addr);
311
312
313
314
315
316
317
318
319typedef uint16_t (*cgs_read_pci_config_word_t)(void *cgs_device, unsigned addr);
320
321
322
323
324
325
326
327
328typedef uint32_t (*cgs_read_pci_config_dword_t)(void *cgs_device,
329 unsigned addr);
330
331
332
333
334
335
336
337typedef void (*cgs_write_pci_config_byte_t)(void *cgs_device, unsigned addr,
338 uint8_t value);
339
340
341
342
343
344
345
346typedef void (*cgs_write_pci_config_word_t)(void *cgs_device, unsigned addr,
347 uint16_t value);
348
349
350
351
352
353
354
355typedef void (*cgs_write_pci_config_dword_t)(void *cgs_device, unsigned addr,
356 uint32_t value);
357
358
359
360
361
362
363
364
365
366
367
368typedef const void *(*cgs_atom_get_data_table_t)(
369 void *cgs_device, unsigned table,
370 uint16_t *size, uint8_t *frev, uint8_t *crev);
371
372
373
374
375
376
377
378
379
380
381typedef int (*cgs_atom_get_cmd_table_revs_t)(void *cgs_device, unsigned table,
382 uint8_t *frev, uint8_t *crev);
383
384
385
386
387
388
389
390
391
392typedef int (*cgs_atom_exec_cmd_table_t)(void *cgs_device,
393 unsigned table, void *args);
394
395
396
397
398
399
400
401
402typedef int (*cgs_create_pm_request_t)(void *cgs_device, cgs_handle_t *request);
403
404
405
406
407
408
409
410
411typedef int (*cgs_destroy_pm_request_t)(void *cgs_device, cgs_handle_t request);
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427typedef int (*cgs_set_pm_request_t)(void *cgs_device, cgs_handle_t request,
428 int active);
429
430
431
432
433
434
435
436
437
438
439typedef int (*cgs_pm_request_clock_t)(void *cgs_device, cgs_handle_t request,
440 enum cgs_clock clock, unsigned freq);
441
442
443
444
445
446
447
448
449
450
451typedef int (*cgs_pm_request_engine_t)(void *cgs_device, cgs_handle_t request,
452 enum cgs_engine engine, int powered);
453
454
455
456
457
458
459
460
461
462typedef int (*cgs_pm_query_clock_limits_t)(void *cgs_device,
463 enum cgs_clock clock,
464 struct cgs_clock_limits *limits);
465
466
467
468
469
470
471
472
473
474typedef int (*cgs_set_camera_voltages_t)(void *cgs_device, uint32_t mask,
475 const uint32_t *voltages);
476
477
478
479
480
481
482
483
484typedef int (*cgs_get_firmware_info)(void *cgs_device,
485 enum cgs_ucode_id type,
486 struct cgs_firmware_info *info);
487
488typedef int(*cgs_set_powergating_state)(void *cgs_device,
489 enum amd_ip_block_type block_type,
490 enum amd_powergating_state state);
491
492typedef int(*cgs_set_clockgating_state)(void *cgs_device,
493 enum amd_ip_block_type block_type,
494 enum amd_clockgating_state state);
495
496struct cgs_ops {
497
498 cgs_gpu_mem_info_t gpu_mem_info;
499 cgs_gmap_kmem_t gmap_kmem;
500 cgs_gunmap_kmem_t gunmap_kmem;
501 cgs_alloc_gpu_mem_t alloc_gpu_mem;
502 cgs_free_gpu_mem_t free_gpu_mem;
503 cgs_gmap_gpu_mem_t gmap_gpu_mem;
504 cgs_gunmap_gpu_mem_t gunmap_gpu_mem;
505 cgs_kmap_gpu_mem_t kmap_gpu_mem;
506 cgs_kunmap_gpu_mem_t kunmap_gpu_mem;
507
508 cgs_read_register_t read_register;
509 cgs_write_register_t write_register;
510 cgs_read_ind_register_t read_ind_register;
511 cgs_write_ind_register_t write_ind_register;
512
513 cgs_read_pci_config_byte_t read_pci_config_byte;
514 cgs_read_pci_config_word_t read_pci_config_word;
515 cgs_read_pci_config_dword_t read_pci_config_dword;
516 cgs_write_pci_config_byte_t write_pci_config_byte;
517 cgs_write_pci_config_word_t write_pci_config_word;
518 cgs_write_pci_config_dword_t write_pci_config_dword;
519
520 cgs_atom_get_data_table_t atom_get_data_table;
521 cgs_atom_get_cmd_table_revs_t atom_get_cmd_table_revs;
522 cgs_atom_exec_cmd_table_t atom_exec_cmd_table;
523
524 cgs_create_pm_request_t create_pm_request;
525 cgs_destroy_pm_request_t destroy_pm_request;
526 cgs_set_pm_request_t set_pm_request;
527 cgs_pm_request_clock_t pm_request_clock;
528 cgs_pm_request_engine_t pm_request_engine;
529 cgs_pm_query_clock_limits_t pm_query_clock_limits;
530 cgs_set_camera_voltages_t set_camera_voltages;
531
532 cgs_get_firmware_info get_firmware_info;
533
534 cgs_set_powergating_state set_powergating_state;
535 cgs_set_clockgating_state set_clockgating_state;
536
537};
538
539struct cgs_os_ops;
540
541struct cgs_device
542{
543 const struct cgs_ops *ops;
544 const struct cgs_os_ops *os_ops;
545
546};
547
548
549
550#define CGS_CALL(func,dev,...) \
551 (((struct cgs_device *)dev)->ops->func(dev, ##__VA_ARGS__))
552#define CGS_OS_CALL(func,dev,...) \
553 (((struct cgs_device *)dev)->os_ops->func(dev, ##__VA_ARGS__))
554
555#define cgs_gpu_mem_info(dev,type,mc_start,mc_size,mem_size) \
556 CGS_CALL(gpu_mem_info,dev,type,mc_start,mc_size,mem_size)
557#define cgs_gmap_kmem(dev,kmem,size,min_off,max_off,kmem_handle,mcaddr) \
558 CGS_CALL(gmap_kmem,dev,kmem,size,min_off,max_off,kmem_handle,mcaddr)
559#define cgs_gunmap_kmem(dev,kmem_handle) \
560 CGS_CALL(gunmap_kmem,dev,keme_handle)
561#define cgs_alloc_gpu_mem(dev,type,size,align,min_off,max_off,handle) \
562 CGS_CALL(alloc_gpu_mem,dev,type,size,align,min_off,max_off,handle)
563#define cgs_free_gpu_mem(dev,handle) \
564 CGS_CALL(free_gpu_mem,dev,handle)
565#define cgs_gmap_gpu_mem(dev,handle,mcaddr) \
566 CGS_CALL(gmap_gpu_mem,dev,handle,mcaddr)
567#define cgs_gunmap_gpu_mem(dev,handle) \
568 CGS_CALL(gunmap_gpu_mem,dev,handle)
569#define cgs_kmap_gpu_mem(dev,handle,map) \
570 CGS_CALL(kmap_gpu_mem,dev,handle,map)
571#define cgs_kunmap_gpu_mem(dev,handle) \
572 CGS_CALL(kunmap_gpu_mem,dev,handle)
573
574#define cgs_read_register(dev,offset) \
575 CGS_CALL(read_register,dev,offset)
576#define cgs_write_register(dev,offset,value) \
577 CGS_CALL(write_register,dev,offset,value)
578#define cgs_read_ind_register(dev,space,index) \
579 CGS_CALL(read_ind_register,dev,space,index)
580#define cgs_write_ind_register(dev,space,index,value) \
581 CGS_CALL(write_ind_register,dev,space,index,value)
582
583#define cgs_read_pci_config_byte(dev,addr) \
584 CGS_CALL(read_pci_config_byte,dev,addr)
585#define cgs_read_pci_config_word(dev,addr) \
586 CGS_CALL(read_pci_config_word,dev,addr)
587#define cgs_read_pci_config_dword(dev,addr) \
588 CGS_CALL(read_pci_config_dword,dev,addr)
589#define cgs_write_pci_config_byte(dev,addr,value) \
590 CGS_CALL(write_pci_config_byte,dev,addr,value)
591#define cgs_write_pci_config_word(dev,addr,value) \
592 CGS_CALL(write_pci_config_word,dev,addr,value)
593#define cgs_write_pci_config_dword(dev,addr,value) \
594 CGS_CALL(write_pci_config_dword,dev,addr,value)
595
596#define cgs_atom_get_data_table(dev,table,size,frev,crev) \
597 CGS_CALL(atom_get_data_table,dev,table,size,frev,crev)
598#define cgs_atom_get_cmd_table_revs(dev,table,frev,crev) \
599 CGS_CALL(atom_get_cmd_table_revs,dev,table,frev,crev)
600#define cgs_atom_exec_cmd_table(dev,table,args) \
601 CGS_CALL(atom_exec_cmd_table,dev,table,args)
602
603#define cgs_create_pm_request(dev,request) \
604 CGS_CALL(create_pm_request,dev,request)
605#define cgs_destroy_pm_request(dev,request) \
606 CGS_CALL(destroy_pm_request,dev,request)
607#define cgs_set_pm_request(dev,request,active) \
608 CGS_CALL(set_pm_request,dev,request,active)
609#define cgs_pm_request_clock(dev,request,clock,freq) \
610 CGS_CALL(pm_request_clock,dev,request,clock,freq)
611#define cgs_pm_request_engine(dev,request,engine,powered) \
612 CGS_CALL(pm_request_engine,dev,request,engine,powered)
613#define cgs_pm_query_clock_limits(dev,clock,limits) \
614 CGS_CALL(pm_query_clock_limits,dev,clock,limits)
615#define cgs_set_camera_voltages(dev,mask,voltages) \
616 CGS_CALL(set_camera_voltages,dev,mask,voltages)
617#define cgs_get_firmware_info(dev, type, info) \
618 CGS_CALL(get_firmware_info, dev, type, info)
619#define cgs_set_powergating_state(dev, block_type, state) \
620 CGS_CALL(set_powergating_state, dev, block_type, state)
621#define cgs_set_clockgating_state(dev, block_type, state) \
622 CGS_CALL(set_clockgating_state, dev, block_type, state)
623
624#endif
625