]>
git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
2 * Copyright 2012 Red Hat Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
27 #include <core/notify.h>
28 #include <core/option.h>
30 #include <subdev/bios.h>
32 static DEFINE_MUTEX(nv_devices_mutex
);
33 static LIST_HEAD(nv_devices
);
35 static struct nvkm_device
*
36 nvkm_device_find_locked(u64 handle
)
38 struct nvkm_device
*device
;
39 list_for_each_entry(device
, &nv_devices
, head
) {
40 if (device
->handle
== handle
)
47 nvkm_device_find(u64 handle
)
49 struct nvkm_device
*device
;
50 mutex_lock(&nv_devices_mutex
);
51 device
= nvkm_device_find_locked(handle
);
52 mutex_unlock(&nv_devices_mutex
);
57 nvkm_device_list(u64
*name
, int size
)
59 struct nvkm_device
*device
;
61 mutex_lock(&nv_devices_mutex
);
62 list_for_each_entry(device
, &nv_devices
, head
) {
64 name
[nr
- 1] = device
->handle
;
66 mutex_unlock(&nv_devices_mutex
);
70 static const struct nvkm_device_chip
73 .bios
= nvkm_bios_new
,
76 static const struct nvkm_device_chip
79 .bios
= nvkm_bios_new
,
82 .devinit
= nv04_devinit_new
,
85 .imem
= nv04_instmem_new
,
89 .timer
= nv04_timer_new
,
90 .disp
= nv04_disp_new
,
92 .fifo
= nv04_fifo_new
,
97 static const struct nvkm_device_chip
100 .bios
= nvkm_bios_new
,
103 .devinit
= nv05_devinit_new
,
106 .imem
= nv04_instmem_new
,
110 .timer
= nv04_timer_new
,
111 .disp
= nv04_disp_new
,
113 .fifo
= nv04_fifo_new
,
118 static const struct nvkm_device_chip
121 .bios
= nvkm_bios_new
,
124 .devinit
= nv10_devinit_new
,
126 .gpio
= nv10_gpio_new
,
128 .imem
= nv04_instmem_new
,
132 .timer
= nv04_timer_new
,
133 .disp
= nv04_disp_new
,
138 static const struct nvkm_device_chip
141 .bios
= nvkm_bios_new
,
144 .devinit
= nv10_devinit_new
,
146 .gpio
= nv10_gpio_new
,
148 .imem
= nv04_instmem_new
,
152 .timer
= nv04_timer_new
,
153 .disp
= nv04_disp_new
,
155 .fifo
= nv10_fifo_new
,
160 static const struct nvkm_device_chip
163 .bios
= nvkm_bios_new
,
166 .devinit
= nv10_devinit_new
,
168 .gpio
= nv10_gpio_new
,
170 .imem
= nv04_instmem_new
,
174 .timer
= nv04_timer_new
,
175 .disp
= nv04_disp_new
,
177 .fifo
= nv10_fifo_new
,
182 static const struct nvkm_device_chip
185 .bios
= nvkm_bios_new
,
188 .devinit
= nv10_devinit_new
,
190 .gpio
= nv10_gpio_new
,
192 .imem
= nv04_instmem_new
,
196 .timer
= nv04_timer_new
,
197 .disp
= nv04_disp_new
,
199 .fifo
= nv17_fifo_new
,
204 static const struct nvkm_device_chip
207 .bios
= nvkm_bios_new
,
210 .devinit
= nv10_devinit_new
,
212 .gpio
= nv10_gpio_new
,
214 .imem
= nv04_instmem_new
,
218 .timer
= nv04_timer_new
,
219 .disp
= nv04_disp_new
,
221 .fifo
= nv17_fifo_new
,
226 static const struct nvkm_device_chip
229 .bios
= nvkm_bios_new
,
232 .devinit
= nv1a_devinit_new
,
234 .gpio
= nv10_gpio_new
,
236 .imem
= nv04_instmem_new
,
240 .timer
= nv04_timer_new
,
241 .disp
= nv04_disp_new
,
243 .fifo
= nv10_fifo_new
,
248 static const struct nvkm_device_chip
251 .bios
= nvkm_bios_new
,
254 .devinit
= nv1a_devinit_new
,
256 .gpio
= nv10_gpio_new
,
258 .imem
= nv04_instmem_new
,
262 .timer
= nv04_timer_new
,
263 .disp
= nv04_disp_new
,
265 .fifo
= nv17_fifo_new
,
270 static const struct nvkm_device_chip
273 .bios
= nvkm_bios_new
,
276 .devinit
= nv20_devinit_new
,
278 .gpio
= nv10_gpio_new
,
280 .imem
= nv04_instmem_new
,
284 .timer
= nv04_timer_new
,
285 .disp
= nv04_disp_new
,
287 .fifo
= nv17_fifo_new
,
292 static const struct nvkm_device_chip
295 .bios
= nvkm_bios_new
,
298 .devinit
= nv20_devinit_new
,
300 .gpio
= nv10_gpio_new
,
302 .imem
= nv04_instmem_new
,
306 .timer
= nv04_timer_new
,
307 .disp
= nv04_disp_new
,
309 .fifo
= nv17_fifo_new
,
314 static const struct nvkm_device_chip
317 .bios
= nvkm_bios_new
,
320 .devinit
= nv20_devinit_new
,
322 .gpio
= nv10_gpio_new
,
324 .imem
= nv04_instmem_new
,
328 .timer
= nv04_timer_new
,
329 .disp
= nv04_disp_new
,
331 .fifo
= nv17_fifo_new
,
336 static const struct nvkm_device_chip
339 .bios
= nvkm_bios_new
,
342 .devinit
= nv20_devinit_new
,
344 .gpio
= nv10_gpio_new
,
346 .imem
= nv04_instmem_new
,
350 .timer
= nv04_timer_new
,
351 .disp
= nv04_disp_new
,
353 .fifo
= nv17_fifo_new
,
358 static const struct nvkm_device_chip
361 .bios
= nvkm_bios_new
,
364 .devinit
= nv20_devinit_new
,
366 .gpio
= nv10_gpio_new
,
368 .imem
= nv04_instmem_new
,
372 .timer
= nv04_timer_new
,
373 .disp
= nv04_disp_new
,
375 .fifo
= nv17_fifo_new
,
380 static const struct nvkm_device_chip
383 .bios
= nvkm_bios_new
,
386 .devinit
= nv20_devinit_new
,
388 .gpio
= nv10_gpio_new
,
390 .imem
= nv04_instmem_new
,
394 .timer
= nv04_timer_new
,
395 .disp
= nv04_disp_new
,
397 .fifo
= nv17_fifo_new
,
399 .mpeg
= nv31_mpeg_new
,
403 static const struct nvkm_device_chip
406 .bios
= nvkm_bios_new
,
409 .devinit
= nv10_devinit_new
,
411 .gpio
= nv10_gpio_new
,
413 .imem
= nv04_instmem_new
,
417 .timer
= nv04_timer_new
,
418 .disp
= nv04_disp_new
,
420 .fifo
= nv17_fifo_new
,
422 .mpeg
= nv31_mpeg_new
,
426 static const struct nvkm_device_chip
429 .bios
= nvkm_bios_new
,
432 .devinit
= nv20_devinit_new
,
434 .gpio
= nv10_gpio_new
,
436 .imem
= nv04_instmem_new
,
440 .timer
= nv04_timer_new
,
441 .disp
= nv04_disp_new
,
443 .fifo
= nv17_fifo_new
,
448 static const struct nvkm_device_chip
451 .bios
= nvkm_bios_new
,
454 .devinit
= nv20_devinit_new
,
456 .gpio
= nv10_gpio_new
,
458 .imem
= nv04_instmem_new
,
462 .timer
= nv04_timer_new
,
463 .disp
= nv04_disp_new
,
465 .fifo
= nv17_fifo_new
,
467 .mpeg
= nv31_mpeg_new
,
471 static const struct nvkm_device_chip
474 .bios
= nvkm_bios_new
,
477 .devinit
= nv1a_devinit_new
,
479 .gpio
= nv10_gpio_new
,
481 .imem
= nv40_instmem_new
,
485 .therm
= nv40_therm_new
,
486 .timer
= nv40_timer_new
,
487 .volt
= nv40_volt_new
,
488 .disp
= nv04_disp_new
,
490 .fifo
= nv40_fifo_new
,
492 .mpeg
= nv40_mpeg_new
,
497 static const struct nvkm_device_chip
500 .bios
= nvkm_bios_new
,
503 .devinit
= nv1a_devinit_new
,
505 .gpio
= nv10_gpio_new
,
507 .imem
= nv40_instmem_new
,
511 .therm
= nv40_therm_new
,
512 .timer
= nv41_timer_new
,
513 .volt
= nv40_volt_new
,
514 .disp
= nv04_disp_new
,
516 .fifo
= nv40_fifo_new
,
518 .mpeg
= nv40_mpeg_new
,
523 static const struct nvkm_device_chip
526 .bios
= nvkm_bios_new
,
529 .devinit
= nv1a_devinit_new
,
531 .gpio
= nv10_gpio_new
,
533 .imem
= nv40_instmem_new
,
537 .therm
= nv40_therm_new
,
538 .timer
= nv41_timer_new
,
539 .volt
= nv40_volt_new
,
540 .disp
= nv04_disp_new
,
542 .fifo
= nv40_fifo_new
,
544 .mpeg
= nv40_mpeg_new
,
549 static const struct nvkm_device_chip
552 .bios
= nvkm_bios_new
,
555 .devinit
= nv1a_devinit_new
,
557 .gpio
= nv10_gpio_new
,
559 .imem
= nv40_instmem_new
,
563 .therm
= nv40_therm_new
,
564 .timer
= nv41_timer_new
,
565 .volt
= nv40_volt_new
,
566 .disp
= nv04_disp_new
,
568 .fifo
= nv40_fifo_new
,
570 .mpeg
= nv40_mpeg_new
,
575 static const struct nvkm_device_chip
578 .bios
= nvkm_bios_new
,
581 .devinit
= nv1a_devinit_new
,
583 .gpio
= nv10_gpio_new
,
585 .imem
= nv40_instmem_new
,
589 .therm
= nv40_therm_new
,
590 .timer
= nv41_timer_new
,
591 .volt
= nv40_volt_new
,
592 .disp
= nv04_disp_new
,
594 .fifo
= nv40_fifo_new
,
596 .mpeg
= nv44_mpeg_new
,
601 static const struct nvkm_device_chip
604 .bios
= nvkm_bios_new
,
607 .devinit
= nv1a_devinit_new
,
609 .gpio
= nv10_gpio_new
,
611 .imem
= nv40_instmem_new
,
615 .therm
= nv40_therm_new
,
616 .timer
= nv41_timer_new
,
617 .volt
= nv40_volt_new
,
618 .disp
= nv04_disp_new
,
620 .fifo
= nv40_fifo_new
,
622 .mpeg
= nv44_mpeg_new
,
627 static const struct nvkm_device_chip
630 .bios
= nvkm_bios_new
,
633 .devinit
= nv1a_devinit_new
,
635 .gpio
= nv10_gpio_new
,
637 .imem
= nv40_instmem_new
,
641 .therm
= nv40_therm_new
,
642 .timer
= nv41_timer_new
,
643 .volt
= nv40_volt_new
,
644 .disp
= nv04_disp_new
,
646 .fifo
= nv40_fifo_new
,
648 .mpeg
= nv44_mpeg_new
,
653 static const struct nvkm_device_chip
656 .bios
= nvkm_bios_new
,
659 .devinit
= nv1a_devinit_new
,
661 .gpio
= nv10_gpio_new
,
663 .imem
= nv40_instmem_new
,
667 .therm
= nv40_therm_new
,
668 .timer
= nv41_timer_new
,
669 .volt
= nv40_volt_new
,
670 .disp
= nv04_disp_new
,
672 .fifo
= nv40_fifo_new
,
674 .mpeg
= nv44_mpeg_new
,
679 static const struct nvkm_device_chip
682 .bios
= nvkm_bios_new
,
685 .devinit
= nv1a_devinit_new
,
687 .gpio
= nv10_gpio_new
,
689 .imem
= nv40_instmem_new
,
693 .therm
= nv40_therm_new
,
694 .timer
= nv41_timer_new
,
695 .volt
= nv40_volt_new
,
696 .disp
= nv04_disp_new
,
698 .fifo
= nv40_fifo_new
,
700 .mpeg
= nv44_mpeg_new
,
705 static const struct nvkm_device_chip
708 .bios
= nvkm_bios_new
,
711 .devinit
= nv1a_devinit_new
,
713 .gpio
= nv10_gpio_new
,
715 .imem
= nv40_instmem_new
,
719 .therm
= nv40_therm_new
,
720 .timer
= nv41_timer_new
,
721 .volt
= nv40_volt_new
,
722 .disp
= nv04_disp_new
,
724 .fifo
= nv40_fifo_new
,
726 .mpeg
= nv44_mpeg_new
,
731 static const struct nvkm_device_chip
734 .bios
= nvkm_bios_new
,
737 .devinit
= nv1a_devinit_new
,
739 .gpio
= nv10_gpio_new
,
741 .imem
= nv40_instmem_new
,
745 .therm
= nv40_therm_new
,
746 .timer
= nv41_timer_new
,
747 .volt
= nv40_volt_new
,
748 .disp
= nv04_disp_new
,
750 .fifo
= nv40_fifo_new
,
752 .mpeg
= nv44_mpeg_new
,
757 static const struct nvkm_device_chip
760 .bios
= nvkm_bios_new
,
763 .devinit
= nv1a_devinit_new
,
765 .gpio
= nv10_gpio_new
,
767 .imem
= nv40_instmem_new
,
771 .therm
= nv40_therm_new
,
772 .timer
= nv41_timer_new
,
773 .volt
= nv40_volt_new
,
774 .disp
= nv04_disp_new
,
776 .fifo
= nv40_fifo_new
,
778 .mpeg
= nv44_mpeg_new
,
783 static const struct nvkm_device_chip
786 .bios
= nvkm_bios_new
,
789 .devinit
= nv1a_devinit_new
,
791 .gpio
= nv10_gpio_new
,
793 .imem
= nv40_instmem_new
,
797 .therm
= nv40_therm_new
,
798 .timer
= nv41_timer_new
,
799 .volt
= nv40_volt_new
,
800 .disp
= nv04_disp_new
,
802 .fifo
= nv40_fifo_new
,
804 .mpeg
= nv44_mpeg_new
,
809 static const struct nvkm_device_chip
813 .bios
= nvkm_bios_new
,
816 .devinit
= nv50_devinit_new
,
818 .fuse
= nv50_fuse_new
,
819 .gpio
= nv50_gpio_new
,
821 .imem
= nv50_instmem_new
,
826 .therm
= nv50_therm_new
,
827 .timer
= nv41_timer_new
,
828 .volt
= nv40_volt_new
,
829 .disp
= nv50_disp_new
,
831 .fifo
= nv50_fifo_new
,
833 .mpeg
= nv50_mpeg_new
,
838 static const struct nvkm_device_chip
841 .bios
= nvkm_bios_new
,
844 .devinit
= nv1a_devinit_new
,
846 .gpio
= nv10_gpio_new
,
848 .imem
= nv40_instmem_new
,
852 .therm
= nv40_therm_new
,
853 .timer
= nv41_timer_new
,
854 .volt
= nv40_volt_new
,
855 .disp
= nv04_disp_new
,
857 .fifo
= nv40_fifo_new
,
859 .mpeg
= nv44_mpeg_new
,
864 static const struct nvkm_device_chip
867 .bios
= nvkm_bios_new
,
870 .devinit
= nv1a_devinit_new
,
872 .gpio
= nv10_gpio_new
,
874 .imem
= nv40_instmem_new
,
878 .therm
= nv40_therm_new
,
879 .timer
= nv41_timer_new
,
880 .volt
= nv40_volt_new
,
881 .disp
= nv04_disp_new
,
883 .fifo
= nv40_fifo_new
,
885 .mpeg
= nv44_mpeg_new
,
890 static const struct nvkm_device_chip
893 .bios
= nvkm_bios_new
,
896 .devinit
= nv1a_devinit_new
,
898 .gpio
= nv10_gpio_new
,
900 .imem
= nv40_instmem_new
,
904 .therm
= nv40_therm_new
,
905 .timer
= nv41_timer_new
,
906 .volt
= nv40_volt_new
,
907 .disp
= nv04_disp_new
,
909 .fifo
= nv40_fifo_new
,
911 .mpeg
= nv44_mpeg_new
,
916 static const struct nvkm_device_chip
920 .bios
= nvkm_bios_new
,
923 .devinit
= g84_devinit_new
,
925 .fuse
= nv50_fuse_new
,
926 .gpio
= nv50_gpio_new
,
928 .imem
= nv50_instmem_new
,
933 .therm
= g84_therm_new
,
934 .timer
= nv41_timer_new
,
935 .volt
= nv40_volt_new
,
937 .cipher
= g84_cipher_new
,
938 .disp
= g84_disp_new
,
940 .fifo
= g84_fifo_new
,
942 .mpeg
= g84_mpeg_new
,
948 static const struct nvkm_device_chip
952 .bios
= nvkm_bios_new
,
955 .devinit
= g84_devinit_new
,
957 .fuse
= nv50_fuse_new
,
958 .gpio
= nv50_gpio_new
,
960 .imem
= nv50_instmem_new
,
965 .therm
= g84_therm_new
,
966 .timer
= nv41_timer_new
,
967 .volt
= nv40_volt_new
,
969 .cipher
= g84_cipher_new
,
970 .disp
= g84_disp_new
,
972 .fifo
= g84_fifo_new
,
974 .mpeg
= g84_mpeg_new
,
980 static const struct nvkm_device_chip
984 .bios
= nvkm_bios_new
,
987 .devinit
= g84_devinit_new
,
989 .fuse
= nv50_fuse_new
,
990 .gpio
= nv50_gpio_new
,
992 .imem
= nv50_instmem_new
,
997 .therm
= g84_therm_new
,
998 .timer
= nv41_timer_new
,
999 .volt
= nv40_volt_new
,
1001 .cipher
= g84_cipher_new
,
1002 .disp
= g84_disp_new
,
1003 .dma
= nv50_dma_new
,
1004 .fifo
= g84_fifo_new
,
1006 .mpeg
= g84_mpeg_new
,
1012 static const struct nvkm_device_chip
1016 .bios
= nvkm_bios_new
,
1019 .devinit
= g84_devinit_new
,
1021 .fuse
= nv50_fuse_new
,
1022 .gpio
= g94_gpio_new
,
1024 .imem
= nv50_instmem_new
,
1026 .mmu
= nv50_mmu_new
,
1027 .mxm
= nv50_mxm_new
,
1029 .therm
= g84_therm_new
,
1030 .timer
= nv41_timer_new
,
1031 .volt
= nv40_volt_new
,
1033 .cipher
= g84_cipher_new
,
1034 .disp
= g94_disp_new
,
1035 .dma
= nv50_dma_new
,
1036 .fifo
= g84_fifo_new
,
1038 .mpeg
= g84_mpeg_new
,
1044 static const struct nvkm_device_chip
1048 .bios
= nvkm_bios_new
,
1051 .devinit
= g84_devinit_new
,
1053 .fuse
= nv50_fuse_new
,
1054 .gpio
= g94_gpio_new
,
1056 .imem
= nv50_instmem_new
,
1058 .mmu
= nv50_mmu_new
,
1059 .mxm
= nv50_mxm_new
,
1061 .therm
= g84_therm_new
,
1062 .timer
= nv41_timer_new
,
1063 .volt
= nv40_volt_new
,
1065 .cipher
= g84_cipher_new
,
1066 .disp
= g94_disp_new
,
1067 .dma
= nv50_dma_new
,
1068 .fifo
= g84_fifo_new
,
1070 .mpeg
= g84_mpeg_new
,
1076 static const struct nvkm_device_chip
1080 .bios
= nvkm_bios_new
,
1083 .devinit
= g98_devinit_new
,
1085 .fuse
= nv50_fuse_new
,
1086 .gpio
= g94_gpio_new
,
1088 .imem
= nv50_instmem_new
,
1090 .mmu
= nv50_mmu_new
,
1091 .mxm
= nv50_mxm_new
,
1093 .therm
= g84_therm_new
,
1094 .timer
= nv41_timer_new
,
1095 .volt
= nv40_volt_new
,
1096 .disp
= g94_disp_new
,
1097 .dma
= nv50_dma_new
,
1098 .fifo
= g84_fifo_new
,
1100 .mspdec
= g98_mspdec_new
,
1101 .msppp
= g98_msppp_new
,
1102 .msvld
= g98_msvld_new
,
1108 static const struct nvkm_device_chip
1112 .bios
= nvkm_bios_new
,
1115 .devinit
= g84_devinit_new
,
1117 .fuse
= nv50_fuse_new
,
1118 .gpio
= g94_gpio_new
,
1119 .i2c
= nv50_i2c_new
,
1120 .imem
= nv50_instmem_new
,
1122 .mmu
= nv50_mmu_new
,
1123 .mxm
= nv50_mxm_new
,
1125 .therm
= g84_therm_new
,
1126 .timer
= nv41_timer_new
,
1127 .volt
= nv40_volt_new
,
1129 .cipher
= g84_cipher_new
,
1130 .disp
= gt200_disp_new
,
1131 .dma
= nv50_dma_new
,
1132 .fifo
= g84_fifo_new
,
1134 .mpeg
= g84_mpeg_new
,
1140 static const struct nvkm_device_chip
1144 .bios
= nvkm_bios_new
,
1146 .clk
= gt215_clk_new
,
1147 .devinit
= gt215_devinit_new
,
1149 .fuse
= nv50_fuse_new
,
1150 .gpio
= g94_gpio_new
,
1152 .imem
= nv50_instmem_new
,
1154 .mmu
= nv50_mmu_new
,
1155 .mxm
= nv50_mxm_new
,
1157 .pmu
= gt215_pmu_new
,
1158 .therm
= gt215_therm_new
,
1159 .timer
= nv41_timer_new
,
1160 .volt
= nv40_volt_new
,
1161 .ce
[0] = gt215_ce_new
,
1162 .disp
= gt215_disp_new
,
1163 .dma
= nv50_dma_new
,
1164 .fifo
= g84_fifo_new
,
1166 .mpeg
= g84_mpeg_new
,
1167 .mspdec
= gt215_mspdec_new
,
1168 .msppp
= gt215_msppp_new
,
1169 .msvld
= gt215_msvld_new
,
1174 static const struct nvkm_device_chip
1178 .bios
= nvkm_bios_new
,
1180 .clk
= gt215_clk_new
,
1181 .devinit
= gt215_devinit_new
,
1183 .fuse
= nv50_fuse_new
,
1184 .gpio
= g94_gpio_new
,
1186 .imem
= nv50_instmem_new
,
1188 .mmu
= nv50_mmu_new
,
1189 .mxm
= nv50_mxm_new
,
1191 .pmu
= gt215_pmu_new
,
1192 .therm
= gt215_therm_new
,
1193 .timer
= nv41_timer_new
,
1194 .volt
= nv40_volt_new
,
1195 .ce
[0] = gt215_ce_new
,
1196 .disp
= gt215_disp_new
,
1197 .dma
= nv50_dma_new
,
1198 .fifo
= g84_fifo_new
,
1200 .mspdec
= gt215_mspdec_new
,
1201 .msppp
= gt215_msppp_new
,
1202 .msvld
= gt215_msvld_new
,
1207 static const struct nvkm_device_chip
1211 .bios
= nvkm_bios_new
,
1213 .clk
= gt215_clk_new
,
1214 .devinit
= gt215_devinit_new
,
1216 .fuse
= nv50_fuse_new
,
1217 .gpio
= g94_gpio_new
,
1219 .imem
= nv50_instmem_new
,
1221 .mmu
= nv50_mmu_new
,
1222 .mxm
= nv50_mxm_new
,
1224 .pmu
= gt215_pmu_new
,
1225 .therm
= gt215_therm_new
,
1226 .timer
= nv41_timer_new
,
1227 .volt
= nv40_volt_new
,
1228 .ce
[0] = gt215_ce_new
,
1229 .disp
= gt215_disp_new
,
1230 .dma
= nv50_dma_new
,
1231 .fifo
= g84_fifo_new
,
1233 .mspdec
= gt215_mspdec_new
,
1234 .msppp
= gt215_msppp_new
,
1235 .msvld
= gt215_msvld_new
,
1240 static const struct nvkm_device_chip
1242 .name
= "MCP77/MCP78",
1244 .bios
= nvkm_bios_new
,
1246 .clk
= mcp77_clk_new
,
1247 .devinit
= g98_devinit_new
,
1249 .fuse
= nv50_fuse_new
,
1250 .gpio
= g94_gpio_new
,
1252 .imem
= nv50_instmem_new
,
1254 .mmu
= nv50_mmu_new
,
1255 .mxm
= nv50_mxm_new
,
1257 .therm
= g84_therm_new
,
1258 .timer
= nv41_timer_new
,
1259 .volt
= nv40_volt_new
,
1260 .disp
= g94_disp_new
,
1261 .dma
= nv50_dma_new
,
1262 .fifo
= g84_fifo_new
,
1264 .mspdec
= g98_mspdec_new
,
1265 .msppp
= g98_msppp_new
,
1266 .msvld
= g98_msvld_new
,
1272 static const struct nvkm_device_chip
1274 .name
= "MCP79/MCP7A",
1276 .bios
= nvkm_bios_new
,
1278 .clk
= mcp77_clk_new
,
1279 .devinit
= g98_devinit_new
,
1281 .fuse
= nv50_fuse_new
,
1282 .gpio
= g94_gpio_new
,
1284 .imem
= nv50_instmem_new
,
1286 .mmu
= nv50_mmu_new
,
1287 .mxm
= nv50_mxm_new
,
1289 .therm
= g84_therm_new
,
1290 .timer
= nv41_timer_new
,
1291 .volt
= nv40_volt_new
,
1292 .disp
= g94_disp_new
,
1293 .dma
= nv50_dma_new
,
1294 .fifo
= g84_fifo_new
,
1296 .mspdec
= g98_mspdec_new
,
1297 .msppp
= g98_msppp_new
,
1298 .msvld
= g98_msvld_new
,
1304 static const struct nvkm_device_chip
1308 .bios
= nvkm_bios_new
,
1310 .clk
= gt215_clk_new
,
1311 .devinit
= mcp89_devinit_new
,
1313 .fuse
= nv50_fuse_new
,
1314 .gpio
= g94_gpio_new
,
1316 .imem
= nv50_instmem_new
,
1318 .mmu
= nv50_mmu_new
,
1319 .mxm
= nv50_mxm_new
,
1321 .pmu
= gt215_pmu_new
,
1322 .therm
= gt215_therm_new
,
1323 .timer
= nv41_timer_new
,
1324 .volt
= nv40_volt_new
,
1325 .ce
[0] = gt215_ce_new
,
1326 .disp
= gt215_disp_new
,
1327 .dma
= nv50_dma_new
,
1328 .fifo
= g84_fifo_new
,
1330 .mspdec
= gt215_mspdec_new
,
1331 .msppp
= gt215_msppp_new
,
1332 .msvld
= mcp89_msvld_new
,
1337 static const struct nvkm_device_chip
1340 .bar
= gf100_bar_new
,
1341 .bios
= nvkm_bios_new
,
1342 .bus
= gf100_bus_new
,
1343 .clk
= gf100_clk_new
,
1344 .devinit
= gf100_devinit_new
,
1346 .fuse
= gf100_fuse_new
,
1347 .gpio
= g94_gpio_new
,
1349 .ibus
= gf100_ibus_new
,
1350 .iccsense
= gf100_iccsense_new
,
1351 .imem
= nv50_instmem_new
,
1352 .ltc
= gf100_ltc_new
,
1354 .mmu
= gf100_mmu_new
,
1355 .mxm
= nv50_mxm_new
,
1356 .pci
= gf100_pci_new
,
1357 .pmu
= gf100_pmu_new
,
1358 .therm
= gt215_therm_new
,
1359 .timer
= nv41_timer_new
,
1360 .volt
= gf100_volt_new
,
1361 .ce
[0] = gf100_ce_new
,
1362 .ce
[1] = gf100_ce_new
,
1363 .disp
= gt215_disp_new
,
1364 .dma
= gf100_dma_new
,
1365 .fifo
= gf100_fifo_new
,
1367 .mspdec
= gf100_mspdec_new
,
1368 .msppp
= gf100_msppp_new
,
1369 .msvld
= gf100_msvld_new
,
1374 static const struct nvkm_device_chip
1377 .bar
= gf100_bar_new
,
1378 .bios
= nvkm_bios_new
,
1379 .bus
= gf100_bus_new
,
1380 .clk
= gf100_clk_new
,
1381 .devinit
= gf100_devinit_new
,
1383 .fuse
= gf100_fuse_new
,
1384 .gpio
= g94_gpio_new
,
1386 .ibus
= gf100_ibus_new
,
1387 .iccsense
= gf100_iccsense_new
,
1388 .imem
= nv50_instmem_new
,
1389 .ltc
= gf100_ltc_new
,
1391 .mmu
= gf100_mmu_new
,
1392 .mxm
= nv50_mxm_new
,
1393 .pci
= gf106_pci_new
,
1394 .pmu
= gf100_pmu_new
,
1395 .therm
= gt215_therm_new
,
1396 .timer
= nv41_timer_new
,
1397 .volt
= gf100_volt_new
,
1398 .ce
[0] = gf100_ce_new
,
1399 .disp
= gt215_disp_new
,
1400 .dma
= gf100_dma_new
,
1401 .fifo
= gf100_fifo_new
,
1403 .mspdec
= gf100_mspdec_new
,
1404 .msppp
= gf100_msppp_new
,
1405 .msvld
= gf100_msvld_new
,
1410 static const struct nvkm_device_chip
1413 .bar
= gf100_bar_new
,
1414 .bios
= nvkm_bios_new
,
1415 .bus
= gf100_bus_new
,
1416 .clk
= gf100_clk_new
,
1417 .devinit
= gf100_devinit_new
,
1419 .fuse
= gf100_fuse_new
,
1420 .gpio
= g94_gpio_new
,
1422 .ibus
= gf100_ibus_new
,
1423 .iccsense
= gf100_iccsense_new
,
1424 .imem
= nv50_instmem_new
,
1425 .ltc
= gf100_ltc_new
,
1427 .mmu
= gf100_mmu_new
,
1428 .mxm
= nv50_mxm_new
,
1429 .pci
= gf106_pci_new
,
1430 .pmu
= gf100_pmu_new
,
1431 .therm
= gt215_therm_new
,
1432 .timer
= nv41_timer_new
,
1433 .volt
= gf100_volt_new
,
1434 .ce
[0] = gf100_ce_new
,
1435 .disp
= gt215_disp_new
,
1436 .dma
= gf100_dma_new
,
1437 .fifo
= gf100_fifo_new
,
1439 .mspdec
= gf100_mspdec_new
,
1440 .msppp
= gf100_msppp_new
,
1441 .msvld
= gf100_msvld_new
,
1446 static const struct nvkm_device_chip
1449 .bar
= gf100_bar_new
,
1450 .bios
= nvkm_bios_new
,
1451 .bus
= gf100_bus_new
,
1452 .clk
= gf100_clk_new
,
1453 .devinit
= gf100_devinit_new
,
1455 .fuse
= gf100_fuse_new
,
1456 .gpio
= g94_gpio_new
,
1458 .ibus
= gf100_ibus_new
,
1459 .iccsense
= gf100_iccsense_new
,
1460 .imem
= nv50_instmem_new
,
1461 .ltc
= gf100_ltc_new
,
1463 .mmu
= gf100_mmu_new
,
1464 .mxm
= nv50_mxm_new
,
1465 .pci
= gf100_pci_new
,
1466 .pmu
= gf100_pmu_new
,
1467 .therm
= gt215_therm_new
,
1468 .timer
= nv41_timer_new
,
1469 .volt
= gf100_volt_new
,
1470 .ce
[0] = gf100_ce_new
,
1471 .ce
[1] = gf100_ce_new
,
1472 .disp
= gt215_disp_new
,
1473 .dma
= gf100_dma_new
,
1474 .fifo
= gf100_fifo_new
,
1476 .mspdec
= gf100_mspdec_new
,
1477 .msppp
= gf100_msppp_new
,
1478 .msvld
= gf100_msvld_new
,
1483 static const struct nvkm_device_chip
1486 .bar
= gf100_bar_new
,
1487 .bios
= nvkm_bios_new
,
1488 .bus
= gf100_bus_new
,
1489 .clk
= gf100_clk_new
,
1490 .devinit
= gf100_devinit_new
,
1492 .fuse
= gf100_fuse_new
,
1493 .gpio
= g94_gpio_new
,
1495 .ibus
= gf100_ibus_new
,
1496 .iccsense
= gf100_iccsense_new
,
1497 .imem
= nv50_instmem_new
,
1498 .ltc
= gf100_ltc_new
,
1500 .mmu
= gf100_mmu_new
,
1501 .mxm
= nv50_mxm_new
,
1502 .pci
= gf100_pci_new
,
1503 .pmu
= gf100_pmu_new
,
1504 .therm
= gt215_therm_new
,
1505 .timer
= nv41_timer_new
,
1506 .volt
= gf100_volt_new
,
1507 .ce
[0] = gf100_ce_new
,
1508 .ce
[1] = gf100_ce_new
,
1509 .disp
= gt215_disp_new
,
1510 .dma
= gf100_dma_new
,
1511 .fifo
= gf100_fifo_new
,
1513 .mspdec
= gf100_mspdec_new
,
1514 .msppp
= gf100_msppp_new
,
1515 .msvld
= gf100_msvld_new
,
1520 static const struct nvkm_device_chip
1523 .bar
= gf100_bar_new
,
1524 .bios
= nvkm_bios_new
,
1525 .bus
= gf100_bus_new
,
1526 .clk
= gf100_clk_new
,
1527 .devinit
= gf100_devinit_new
,
1529 .fuse
= gf100_fuse_new
,
1530 .gpio
= g94_gpio_new
,
1532 .ibus
= gf100_ibus_new
,
1533 .iccsense
= gf100_iccsense_new
,
1534 .imem
= nv50_instmem_new
,
1535 .ltc
= gf100_ltc_new
,
1537 .mmu
= gf100_mmu_new
,
1538 .mxm
= nv50_mxm_new
,
1539 .pci
= gf100_pci_new
,
1540 .pmu
= gf100_pmu_new
,
1541 .therm
= gt215_therm_new
,
1542 .timer
= nv41_timer_new
,
1543 .volt
= gf100_volt_new
,
1544 .ce
[0] = gf100_ce_new
,
1545 .ce
[1] = gf100_ce_new
,
1546 .disp
= gt215_disp_new
,
1547 .dma
= gf100_dma_new
,
1548 .fifo
= gf100_fifo_new
,
1550 .mspdec
= gf100_mspdec_new
,
1551 .msppp
= gf100_msppp_new
,
1552 .msvld
= gf100_msvld_new
,
1557 static const struct nvkm_device_chip
1560 .bar
= gf100_bar_new
,
1561 .bios
= nvkm_bios_new
,
1562 .bus
= gf100_bus_new
,
1563 .clk
= gf100_clk_new
,
1564 .devinit
= gf100_devinit_new
,
1566 .fuse
= gf100_fuse_new
,
1567 .gpio
= g94_gpio_new
,
1569 .ibus
= gf100_ibus_new
,
1570 .iccsense
= gf100_iccsense_new
,
1571 .imem
= nv50_instmem_new
,
1572 .ltc
= gf100_ltc_new
,
1574 .mmu
= gf100_mmu_new
,
1575 .mxm
= nv50_mxm_new
,
1576 .pci
= gf106_pci_new
,
1577 .pmu
= gf100_pmu_new
,
1578 .therm
= gt215_therm_new
,
1579 .timer
= nv41_timer_new
,
1580 .volt
= gf100_volt_new
,
1581 .ce
[0] = gf100_ce_new
,
1582 .disp
= gt215_disp_new
,
1583 .dma
= gf100_dma_new
,
1584 .fifo
= gf100_fifo_new
,
1586 .mspdec
= gf100_mspdec_new
,
1587 .msppp
= gf100_msppp_new
,
1588 .msvld
= gf100_msvld_new
,
1593 static const struct nvkm_device_chip
1596 .bar
= gf100_bar_new
,
1597 .bios
= nvkm_bios_new
,
1598 .bus
= gf100_bus_new
,
1599 .clk
= gf100_clk_new
,
1600 .devinit
= gf100_devinit_new
,
1602 .fuse
= gf100_fuse_new
,
1603 .gpio
= gf119_gpio_new
,
1604 .i2c
= gf117_i2c_new
,
1605 .ibus
= gf117_ibus_new
,
1606 .iccsense
= gf100_iccsense_new
,
1607 .imem
= nv50_instmem_new
,
1608 .ltc
= gf100_ltc_new
,
1610 .mmu
= gf100_mmu_new
,
1611 .mxm
= nv50_mxm_new
,
1612 .pci
= gf106_pci_new
,
1613 .therm
= gf119_therm_new
,
1614 .timer
= nv41_timer_new
,
1615 .volt
= gf100_volt_new
,
1616 .ce
[0] = gf100_ce_new
,
1617 .disp
= gf119_disp_new
,
1618 .dma
= gf119_dma_new
,
1619 .fifo
= gf100_fifo_new
,
1621 .mspdec
= gf100_mspdec_new
,
1622 .msppp
= gf100_msppp_new
,
1623 .msvld
= gf100_msvld_new
,
1628 static const struct nvkm_device_chip
1631 .bar
= gf100_bar_new
,
1632 .bios
= nvkm_bios_new
,
1633 .bus
= gf100_bus_new
,
1634 .clk
= gf100_clk_new
,
1635 .devinit
= gf100_devinit_new
,
1637 .fuse
= gf100_fuse_new
,
1638 .gpio
= gf119_gpio_new
,
1639 .i2c
= gf119_i2c_new
,
1640 .ibus
= gf117_ibus_new
,
1641 .iccsense
= gf100_iccsense_new
,
1642 .imem
= nv50_instmem_new
,
1643 .ltc
= gf100_ltc_new
,
1645 .mmu
= gf100_mmu_new
,
1646 .mxm
= nv50_mxm_new
,
1647 .pci
= gf106_pci_new
,
1648 .pmu
= gf119_pmu_new
,
1649 .therm
= gf119_therm_new
,
1650 .timer
= nv41_timer_new
,
1651 .volt
= gf100_volt_new
,
1652 .ce
[0] = gf100_ce_new
,
1653 .disp
= gf119_disp_new
,
1654 .dma
= gf119_dma_new
,
1655 .fifo
= gf100_fifo_new
,
1657 .mspdec
= gf100_mspdec_new
,
1658 .msppp
= gf100_msppp_new
,
1659 .msvld
= gf100_msvld_new
,
1664 static const struct nvkm_device_chip
1667 .bar
= gf100_bar_new
,
1668 .bios
= nvkm_bios_new
,
1669 .bus
= gf100_bus_new
,
1670 .clk
= gk104_clk_new
,
1671 .devinit
= gf100_devinit_new
,
1673 .fuse
= gf100_fuse_new
,
1674 .gpio
= gk104_gpio_new
,
1675 .i2c
= gk104_i2c_new
,
1676 .ibus
= gk104_ibus_new
,
1677 .iccsense
= gf100_iccsense_new
,
1678 .imem
= nv50_instmem_new
,
1679 .ltc
= gk104_ltc_new
,
1681 .mmu
= gf100_mmu_new
,
1682 .mxm
= nv50_mxm_new
,
1683 .pci
= gk104_pci_new
,
1684 .pmu
= gk104_pmu_new
,
1685 .therm
= gf119_therm_new
,
1686 .timer
= nv41_timer_new
,
1687 .top
= gk104_top_new
,
1688 .volt
= gk104_volt_new
,
1689 .ce
[0] = gk104_ce_new
,
1690 .ce
[1] = gk104_ce_new
,
1691 .ce
[2] = gk104_ce_new
,
1692 .disp
= gk104_disp_new
,
1693 .dma
= gf119_dma_new
,
1694 .fifo
= gk104_fifo_new
,
1696 .mspdec
= gk104_mspdec_new
,
1697 .msppp
= gf100_msppp_new
,
1698 .msvld
= gk104_msvld_new
,
1703 static const struct nvkm_device_chip
1706 .bar
= gf100_bar_new
,
1707 .bios
= nvkm_bios_new
,
1708 .bus
= gf100_bus_new
,
1709 .clk
= gk104_clk_new
,
1710 .devinit
= gf100_devinit_new
,
1712 .fuse
= gf100_fuse_new
,
1713 .gpio
= gk104_gpio_new
,
1714 .i2c
= gk104_i2c_new
,
1715 .ibus
= gk104_ibus_new
,
1716 .iccsense
= gf100_iccsense_new
,
1717 .imem
= nv50_instmem_new
,
1718 .ltc
= gk104_ltc_new
,
1720 .mmu
= gf100_mmu_new
,
1721 .mxm
= nv50_mxm_new
,
1722 .pci
= gk104_pci_new
,
1723 .pmu
= gk104_pmu_new
,
1724 .therm
= gf119_therm_new
,
1725 .timer
= nv41_timer_new
,
1726 .top
= gk104_top_new
,
1727 .volt
= gk104_volt_new
,
1728 .ce
[0] = gk104_ce_new
,
1729 .ce
[1] = gk104_ce_new
,
1730 .ce
[2] = gk104_ce_new
,
1731 .disp
= gk104_disp_new
,
1732 .dma
= gf119_dma_new
,
1733 .fifo
= gk104_fifo_new
,
1735 .mspdec
= gk104_mspdec_new
,
1736 .msppp
= gf100_msppp_new
,
1737 .msvld
= gk104_msvld_new
,
1742 static const struct nvkm_device_chip
1745 .bar
= gf100_bar_new
,
1746 .bios
= nvkm_bios_new
,
1747 .bus
= gf100_bus_new
,
1748 .clk
= gk104_clk_new
,
1749 .devinit
= gf100_devinit_new
,
1751 .fuse
= gf100_fuse_new
,
1752 .gpio
= gk104_gpio_new
,
1753 .i2c
= gk104_i2c_new
,
1754 .ibus
= gk104_ibus_new
,
1755 .iccsense
= gf100_iccsense_new
,
1756 .imem
= nv50_instmem_new
,
1757 .ltc
= gk104_ltc_new
,
1759 .mmu
= gf100_mmu_new
,
1760 .mxm
= nv50_mxm_new
,
1761 .pci
= gk104_pci_new
,
1762 .pmu
= gk104_pmu_new
,
1763 .therm
= gf119_therm_new
,
1764 .timer
= nv41_timer_new
,
1765 .top
= gk104_top_new
,
1766 .volt
= gk104_volt_new
,
1767 .ce
[0] = gk104_ce_new
,
1768 .ce
[1] = gk104_ce_new
,
1769 .ce
[2] = gk104_ce_new
,
1770 .disp
= gk104_disp_new
,
1771 .dma
= gf119_dma_new
,
1772 .fifo
= gk104_fifo_new
,
1774 .mspdec
= gk104_mspdec_new
,
1775 .msppp
= gf100_msppp_new
,
1776 .msvld
= gk104_msvld_new
,
1781 static const struct nvkm_device_chip
1784 .bar
= gk20a_bar_new
,
1785 .bus
= gf100_bus_new
,
1786 .clk
= gk20a_clk_new
,
1788 .fuse
= gf100_fuse_new
,
1789 .ibus
= gk20a_ibus_new
,
1790 .imem
= gk20a_instmem_new
,
1791 .ltc
= gk104_ltc_new
,
1793 .mmu
= gf100_mmu_new
,
1794 .pmu
= gk20a_pmu_new
,
1795 .timer
= gk20a_timer_new
,
1796 .top
= gk104_top_new
,
1797 .volt
= gk20a_volt_new
,
1798 .ce
[2] = gk104_ce_new
,
1799 .dma
= gf119_dma_new
,
1800 .fifo
= gk20a_fifo_new
,
1806 static const struct nvkm_device_chip
1809 .bar
= gf100_bar_new
,
1810 .bios
= nvkm_bios_new
,
1811 .bus
= gf100_bus_new
,
1812 .clk
= gk104_clk_new
,
1813 .devinit
= gf100_devinit_new
,
1815 .fuse
= gf100_fuse_new
,
1816 .gpio
= gk104_gpio_new
,
1817 .i2c
= gk104_i2c_new
,
1818 .ibus
= gk104_ibus_new
,
1819 .iccsense
= gf100_iccsense_new
,
1820 .imem
= nv50_instmem_new
,
1821 .ltc
= gk104_ltc_new
,
1823 .mmu
= gf100_mmu_new
,
1824 .mxm
= nv50_mxm_new
,
1825 .pci
= gk104_pci_new
,
1826 .pmu
= gk110_pmu_new
,
1827 .therm
= gf119_therm_new
,
1828 .timer
= nv41_timer_new
,
1829 .top
= gk104_top_new
,
1830 .volt
= gk104_volt_new
,
1831 .ce
[0] = gk104_ce_new
,
1832 .ce
[1] = gk104_ce_new
,
1833 .ce
[2] = gk104_ce_new
,
1834 .disp
= gk110_disp_new
,
1835 .dma
= gf119_dma_new
,
1836 .fifo
= gk110_fifo_new
,
1838 .mspdec
= gk104_mspdec_new
,
1839 .msppp
= gf100_msppp_new
,
1840 .msvld
= gk104_msvld_new
,
1844 static const struct nvkm_device_chip
1847 .bar
= gf100_bar_new
,
1848 .bios
= nvkm_bios_new
,
1849 .bus
= gf100_bus_new
,
1850 .clk
= gk104_clk_new
,
1851 .devinit
= gf100_devinit_new
,
1853 .fuse
= gf100_fuse_new
,
1854 .gpio
= gk104_gpio_new
,
1855 .i2c
= gk104_i2c_new
,
1856 .ibus
= gk104_ibus_new
,
1857 .iccsense
= gf100_iccsense_new
,
1858 .imem
= nv50_instmem_new
,
1859 .ltc
= gk104_ltc_new
,
1861 .mmu
= gf100_mmu_new
,
1862 .mxm
= nv50_mxm_new
,
1863 .pci
= gk104_pci_new
,
1864 .pmu
= gk110_pmu_new
,
1865 .therm
= gf119_therm_new
,
1866 .timer
= nv41_timer_new
,
1867 .top
= gk104_top_new
,
1868 .volt
= gk104_volt_new
,
1869 .ce
[0] = gk104_ce_new
,
1870 .ce
[1] = gk104_ce_new
,
1871 .ce
[2] = gk104_ce_new
,
1872 .disp
= gk110_disp_new
,
1873 .dma
= gf119_dma_new
,
1874 .fifo
= gk110_fifo_new
,
1875 .gr
= gk110b_gr_new
,
1876 .mspdec
= gk104_mspdec_new
,
1877 .msppp
= gf100_msppp_new
,
1878 .msvld
= gk104_msvld_new
,
1882 static const struct nvkm_device_chip
1885 .bar
= gf100_bar_new
,
1886 .bios
= nvkm_bios_new
,
1887 .bus
= gf100_bus_new
,
1888 .clk
= gk104_clk_new
,
1889 .devinit
= gf100_devinit_new
,
1891 .fuse
= gf100_fuse_new
,
1892 .gpio
= gk104_gpio_new
,
1893 .i2c
= gk104_i2c_new
,
1894 .ibus
= gk104_ibus_new
,
1895 .iccsense
= gf100_iccsense_new
,
1896 .imem
= nv50_instmem_new
,
1897 .ltc
= gk104_ltc_new
,
1899 .mmu
= gf100_mmu_new
,
1900 .mxm
= nv50_mxm_new
,
1901 .pci
= gk104_pci_new
,
1902 .pmu
= gk208_pmu_new
,
1903 .therm
= gf119_therm_new
,
1904 .timer
= nv41_timer_new
,
1905 .top
= gk104_top_new
,
1906 .volt
= gk104_volt_new
,
1907 .ce
[0] = gk104_ce_new
,
1908 .ce
[1] = gk104_ce_new
,
1909 .ce
[2] = gk104_ce_new
,
1910 .disp
= gk110_disp_new
,
1911 .dma
= gf119_dma_new
,
1912 .fifo
= gk208_fifo_new
,
1914 .mspdec
= gk104_mspdec_new
,
1915 .msppp
= gf100_msppp_new
,
1916 .msvld
= gk104_msvld_new
,
1920 static const struct nvkm_device_chip
1923 .bar
= gf100_bar_new
,
1924 .bios
= nvkm_bios_new
,
1925 .bus
= gf100_bus_new
,
1926 .clk
= gk104_clk_new
,
1927 .devinit
= gf100_devinit_new
,
1929 .fuse
= gf100_fuse_new
,
1930 .gpio
= gk104_gpio_new
,
1931 .i2c
= gk104_i2c_new
,
1932 .ibus
= gk104_ibus_new
,
1933 .iccsense
= gf100_iccsense_new
,
1934 .imem
= nv50_instmem_new
,
1935 .ltc
= gk104_ltc_new
,
1937 .mmu
= gf100_mmu_new
,
1938 .mxm
= nv50_mxm_new
,
1939 .pci
= gk104_pci_new
,
1940 .pmu
= gk208_pmu_new
,
1941 .therm
= gf119_therm_new
,
1942 .timer
= nv41_timer_new
,
1943 .top
= gk104_top_new
,
1944 .volt
= gk104_volt_new
,
1945 .ce
[0] = gk104_ce_new
,
1946 .ce
[1] = gk104_ce_new
,
1947 .ce
[2] = gk104_ce_new
,
1948 .disp
= gk110_disp_new
,
1949 .dma
= gf119_dma_new
,
1950 .fifo
= gk208_fifo_new
,
1952 .mspdec
= gk104_mspdec_new
,
1953 .msppp
= gf100_msppp_new
,
1954 .msvld
= gk104_msvld_new
,
1958 static const struct nvkm_device_chip
1961 .bar
= gf100_bar_new
,
1962 .bios
= nvkm_bios_new
,
1963 .bus
= gf100_bus_new
,
1964 .clk
= gk104_clk_new
,
1965 .devinit
= gm107_devinit_new
,
1967 .fuse
= gm107_fuse_new
,
1968 .gpio
= gk104_gpio_new
,
1969 .i2c
= gk104_i2c_new
,
1970 .ibus
= gk104_ibus_new
,
1971 .iccsense
= gf100_iccsense_new
,
1972 .imem
= nv50_instmem_new
,
1973 .ltc
= gm107_ltc_new
,
1975 .mmu
= gf100_mmu_new
,
1976 .mxm
= nv50_mxm_new
,
1977 .pci
= gk104_pci_new
,
1978 .pmu
= gm107_pmu_new
,
1979 .therm
= gm107_therm_new
,
1980 .timer
= gk20a_timer_new
,
1981 .top
= gk104_top_new
,
1982 .volt
= gk104_volt_new
,
1983 .ce
[0] = gm107_ce_new
,
1984 .ce
[2] = gm107_ce_new
,
1985 .disp
= gm107_disp_new
,
1986 .dma
= gf119_dma_new
,
1987 .fifo
= gm107_fifo_new
,
1992 static const struct nvkm_device_chip
1995 .bar
= gf100_bar_new
,
1996 .bios
= nvkm_bios_new
,
1997 .bus
= gf100_bus_new
,
1998 .clk
= gk104_clk_new
,
1999 .devinit
= gm107_devinit_new
,
2001 .fuse
= gm107_fuse_new
,
2002 .gpio
= gk104_gpio_new
,
2003 .i2c
= gk104_i2c_new
,
2004 .ibus
= gk104_ibus_new
,
2005 .iccsense
= gf100_iccsense_new
,
2006 .imem
= nv50_instmem_new
,
2007 .ltc
= gm107_ltc_new
,
2009 .mmu
= gf100_mmu_new
,
2010 .mxm
= nv50_mxm_new
,
2011 .pci
= gk104_pci_new
,
2012 .pmu
= gm107_pmu_new
,
2013 .therm
= gm107_therm_new
,
2014 .timer
= gk20a_timer_new
,
2015 .top
= gk104_top_new
,
2016 .volt
= gk104_volt_new
,
2017 .ce
[0] = gm107_ce_new
,
2018 .ce
[2] = gm107_ce_new
,
2019 .disp
= gm107_disp_new
,
2020 .dma
= gf119_dma_new
,
2021 .fifo
= gm107_fifo_new
,
2026 static const struct nvkm_device_chip
2029 .bar
= gf100_bar_new
,
2030 .bios
= nvkm_bios_new
,
2031 .bus
= gf100_bus_new
,
2032 .devinit
= gm200_devinit_new
,
2034 .fuse
= gm107_fuse_new
,
2035 .gpio
= gk104_gpio_new
,
2036 .i2c
= gm200_i2c_new
,
2037 .ibus
= gm200_ibus_new
,
2038 .iccsense
= gf100_iccsense_new
,
2039 .imem
= nv50_instmem_new
,
2040 .ltc
= gm200_ltc_new
,
2042 .mmu
= gf100_mmu_new
,
2043 .mxm
= nv50_mxm_new
,
2044 .pci
= gk104_pci_new
,
2045 .pmu
= gm107_pmu_new
,
2046 .secboot
= gm200_secboot_new
,
2047 .timer
= gk20a_timer_new
,
2048 .top
= gk104_top_new
,
2049 .volt
= gk104_volt_new
,
2050 .ce
[0] = gm200_ce_new
,
2051 .ce
[1] = gm200_ce_new
,
2052 .ce
[2] = gm200_ce_new
,
2053 .disp
= gm200_disp_new
,
2054 .dma
= gf119_dma_new
,
2055 .fifo
= gm200_fifo_new
,
2060 static const struct nvkm_device_chip
2063 .bar
= gf100_bar_new
,
2064 .bios
= nvkm_bios_new
,
2065 .bus
= gf100_bus_new
,
2066 .devinit
= gm200_devinit_new
,
2068 .fuse
= gm107_fuse_new
,
2069 .gpio
= gk104_gpio_new
,
2070 .i2c
= gm200_i2c_new
,
2071 .ibus
= gm200_ibus_new
,
2072 .iccsense
= gf100_iccsense_new
,
2073 .imem
= nv50_instmem_new
,
2074 .ltc
= gm200_ltc_new
,
2076 .mmu
= gf100_mmu_new
,
2077 .mxm
= nv50_mxm_new
,
2078 .pci
= gk104_pci_new
,
2079 .pmu
= gm107_pmu_new
,
2080 .secboot
= gm200_secboot_new
,
2081 .timer
= gk20a_timer_new
,
2082 .top
= gk104_top_new
,
2083 .volt
= gk104_volt_new
,
2084 .ce
[0] = gm200_ce_new
,
2085 .ce
[1] = gm200_ce_new
,
2086 .ce
[2] = gm200_ce_new
,
2087 .disp
= gm200_disp_new
,
2088 .dma
= gf119_dma_new
,
2089 .fifo
= gm200_fifo_new
,
2094 static const struct nvkm_device_chip
2097 .bar
= gf100_bar_new
,
2098 .bios
= nvkm_bios_new
,
2099 .bus
= gf100_bus_new
,
2100 .devinit
= gm200_devinit_new
,
2102 .fuse
= gm107_fuse_new
,
2103 .gpio
= gk104_gpio_new
,
2104 .i2c
= gm200_i2c_new
,
2105 .ibus
= gm200_ibus_new
,
2106 .iccsense
= gf100_iccsense_new
,
2107 .imem
= nv50_instmem_new
,
2108 .ltc
= gm200_ltc_new
,
2110 .mmu
= gf100_mmu_new
,
2111 .mxm
= nv50_mxm_new
,
2112 .pci
= gk104_pci_new
,
2113 .pmu
= gm107_pmu_new
,
2114 .secboot
= gm200_secboot_new
,
2115 .timer
= gk20a_timer_new
,
2116 .top
= gk104_top_new
,
2117 .volt
= gk104_volt_new
,
2118 .ce
[0] = gm200_ce_new
,
2119 .ce
[1] = gm200_ce_new
,
2120 .ce
[2] = gm200_ce_new
,
2121 .disp
= gm200_disp_new
,
2122 .dma
= gf119_dma_new
,
2123 .fifo
= gm200_fifo_new
,
2128 static const struct nvkm_device_chip
2131 .bar
= gk20a_bar_new
,
2132 .bus
= gf100_bus_new
,
2133 .clk
= gm20b_clk_new
,
2135 .fuse
= gm107_fuse_new
,
2136 .ibus
= gk20a_ibus_new
,
2137 .imem
= gk20a_instmem_new
,
2138 .ltc
= gm200_ltc_new
,
2140 .mmu
= gf100_mmu_new
,
2141 .pmu
= gm20b_pmu_new
,
2142 .secboot
= gm20b_secboot_new
,
2143 .timer
= gk20a_timer_new
,
2144 .top
= gk104_top_new
,
2145 .ce
[2] = gm200_ce_new
,
2146 .volt
= gm20b_volt_new
,
2147 .dma
= gf119_dma_new
,
2148 .fifo
= gm20b_fifo_new
,
2153 static const struct nvkm_device_chip
2156 .bar
= gf100_bar_new
,
2157 .bios
= nvkm_bios_new
,
2158 .bus
= gf100_bus_new
,
2159 .devinit
= gm200_devinit_new
,
2161 .fuse
= gm107_fuse_new
,
2162 .gpio
= gk104_gpio_new
,
2163 .i2c
= gm200_i2c_new
,
2164 .ibus
= gm200_ibus_new
,
2165 .imem
= nv50_instmem_new
,
2166 .ltc
= gp100_ltc_new
,
2168 .mmu
= gf100_mmu_new
,
2169 .secboot
= gm200_secboot_new
,
2170 .pci
= gp100_pci_new
,
2171 .pmu
= gp100_pmu_new
,
2172 .timer
= gk20a_timer_new
,
2173 .top
= gk104_top_new
,
2174 .ce
[0] = gp100_ce_new
,
2175 .ce
[1] = gp100_ce_new
,
2176 .ce
[2] = gp100_ce_new
,
2177 .ce
[3] = gp100_ce_new
,
2178 .ce
[4] = gp100_ce_new
,
2179 .ce
[5] = gp100_ce_new
,
2180 .dma
= gf119_dma_new
,
2181 .disp
= gp100_disp_new
,
2182 .fifo
= gp100_fifo_new
,
2187 static const struct nvkm_device_chip
2190 .bar
= gf100_bar_new
,
2191 .bios
= nvkm_bios_new
,
2192 .bus
= gf100_bus_new
,
2193 .devinit
= gm200_devinit_new
,
2195 .fuse
= gm107_fuse_new
,
2196 .gpio
= gk104_gpio_new
,
2197 .i2c
= gm200_i2c_new
,
2198 .ibus
= gm200_ibus_new
,
2199 .imem
= nv50_instmem_new
,
2200 .ltc
= gp100_ltc_new
,
2202 .mmu
= gf100_mmu_new
,
2203 .secboot
= gp102_secboot_new
,
2204 .pci
= gp100_pci_new
,
2205 .pmu
= gp102_pmu_new
,
2206 .timer
= gk20a_timer_new
,
2207 .top
= gk104_top_new
,
2208 .ce
[0] = gp102_ce_new
,
2209 .ce
[1] = gp102_ce_new
,
2210 .ce
[2] = gp102_ce_new
,
2211 .ce
[3] = gp102_ce_new
,
2212 .disp
= gp102_disp_new
,
2213 .dma
= gf119_dma_new
,
2214 .fifo
= gp100_fifo_new
,
2216 .nvdec
= gp102_nvdec_new
,
2217 .sec2
= gp102_sec2_new
,
2221 static const struct nvkm_device_chip
2224 .bar
= gf100_bar_new
,
2225 .bios
= nvkm_bios_new
,
2226 .bus
= gf100_bus_new
,
2227 .devinit
= gm200_devinit_new
,
2229 .fuse
= gm107_fuse_new
,
2230 .gpio
= gk104_gpio_new
,
2231 .i2c
= gm200_i2c_new
,
2232 .ibus
= gm200_ibus_new
,
2233 .imem
= nv50_instmem_new
,
2234 .ltc
= gp100_ltc_new
,
2236 .mmu
= gf100_mmu_new
,
2237 .secboot
= gp102_secboot_new
,
2238 .pci
= gp100_pci_new
,
2239 .pmu
= gp102_pmu_new
,
2240 .timer
= gk20a_timer_new
,
2241 .top
= gk104_top_new
,
2242 .ce
[0] = gp102_ce_new
,
2243 .ce
[1] = gp102_ce_new
,
2244 .ce
[2] = gp102_ce_new
,
2245 .ce
[3] = gp102_ce_new
,
2246 .disp
= gp102_disp_new
,
2247 .dma
= gf119_dma_new
,
2248 .fifo
= gp100_fifo_new
,
2250 .nvdec
= gp102_nvdec_new
,
2251 .sec2
= gp102_sec2_new
,
2255 static const struct nvkm_device_chip
2258 .bar
= gf100_bar_new
,
2259 .bios
= nvkm_bios_new
,
2260 .bus
= gf100_bus_new
,
2261 .devinit
= gm200_devinit_new
,
2263 .fuse
= gm107_fuse_new
,
2264 .gpio
= gk104_gpio_new
,
2265 .i2c
= gm200_i2c_new
,
2266 .ibus
= gm200_ibus_new
,
2267 .imem
= nv50_instmem_new
,
2268 .ltc
= gp100_ltc_new
,
2270 .mmu
= gf100_mmu_new
,
2271 .secboot
= gp102_secboot_new
,
2272 .pci
= gp100_pci_new
,
2273 .pmu
= gp102_pmu_new
,
2274 .timer
= gk20a_timer_new
,
2275 .top
= gk104_top_new
,
2276 .ce
[0] = gp102_ce_new
,
2277 .ce
[1] = gp102_ce_new
,
2278 .ce
[2] = gp102_ce_new
,
2279 .ce
[3] = gp102_ce_new
,
2280 .disp
= gp102_disp_new
,
2281 .dma
= gf119_dma_new
,
2282 .fifo
= gp100_fifo_new
,
2284 .nvdec
= gp102_nvdec_new
,
2285 .sec2
= gp102_sec2_new
,
2289 static const struct nvkm_device_chip
2292 .bar
= gf100_bar_new
,
2293 .bios
= nvkm_bios_new
,
2294 .bus
= gf100_bus_new
,
2295 .devinit
= gm200_devinit_new
,
2297 .fuse
= gm107_fuse_new
,
2298 .gpio
= gk104_gpio_new
,
2299 .i2c
= gm200_i2c_new
,
2300 .ibus
= gm200_ibus_new
,
2301 .imem
= nv50_instmem_new
,
2302 .ltc
= gp100_ltc_new
,
2304 .mmu
= gf100_mmu_new
,
2305 .secboot
= gp102_secboot_new
,
2306 .pci
= gp100_pci_new
,
2307 .pmu
= gp102_pmu_new
,
2308 .timer
= gk20a_timer_new
,
2309 .top
= gk104_top_new
,
2310 .ce
[0] = gp102_ce_new
,
2311 .ce
[1] = gp102_ce_new
,
2312 .ce
[2] = gp102_ce_new
,
2313 .ce
[3] = gp102_ce_new
,
2314 .disp
= gp102_disp_new
,
2315 .dma
= gf119_dma_new
,
2316 .fifo
= gp100_fifo_new
,
2318 .nvdec
= gp102_nvdec_new
,
2319 .sec2
= gp102_sec2_new
,
2323 static const struct nvkm_device_chip
2326 .bar
= gk20a_bar_new
,
2327 .bus
= gf100_bus_new
,
2329 .fuse
= gm107_fuse_new
,
2330 .ibus
= gp10b_ibus_new
,
2331 .imem
= gk20a_instmem_new
,
2332 .ltc
= gp100_ltc_new
,
2334 .mmu
= gf100_mmu_new
,
2335 .secboot
= gp10b_secboot_new
,
2336 .pmu
= gm20b_pmu_new
,
2337 .timer
= gk20a_timer_new
,
2338 .top
= gk104_top_new
,
2339 .ce
[2] = gp102_ce_new
,
2340 .dma
= gf119_dma_new
,
2341 .fifo
= gp10b_fifo_new
,
2347 nvkm_device_event_ctor(struct nvkm_object
*object
, void *data
, u32 size
,
2348 struct nvkm_notify
*notify
)
2350 if (!WARN_ON(size
!= 0)) {
2359 static const struct nvkm_event_func
2360 nvkm_device_event_func
= {
2361 .ctor
= nvkm_device_event_ctor
,
2364 struct nvkm_subdev
*
2365 nvkm_device_subdev(struct nvkm_device
*device
, int index
)
2367 struct nvkm_engine
*engine
;
2369 if (device
->disable_mask
& (1ULL << index
))
2373 #define _(n,p,m) case NVKM_SUBDEV_##n: if (p) return (m); break
2374 _(BAR
, device
->bar
, &device
->bar
->subdev
);
2375 _(VBIOS
, device
->bios
, &device
->bios
->subdev
);
2376 _(BUS
, device
->bus
, &device
->bus
->subdev
);
2377 _(CLK
, device
->clk
, &device
->clk
->subdev
);
2378 _(DEVINIT
, device
->devinit
, &device
->devinit
->subdev
);
2379 _(FB
, device
->fb
, &device
->fb
->subdev
);
2380 _(FUSE
, device
->fuse
, &device
->fuse
->subdev
);
2381 _(GPIO
, device
->gpio
, &device
->gpio
->subdev
);
2382 _(I2C
, device
->i2c
, &device
->i2c
->subdev
);
2383 _(IBUS
, device
->ibus
, device
->ibus
);
2384 _(ICCSENSE
, device
->iccsense
, &device
->iccsense
->subdev
);
2385 _(INSTMEM
, device
->imem
, &device
->imem
->subdev
);
2386 _(LTC
, device
->ltc
, &device
->ltc
->subdev
);
2387 _(MC
, device
->mc
, &device
->mc
->subdev
);
2388 _(MMU
, device
->mmu
, &device
->mmu
->subdev
);
2389 _(MXM
, device
->mxm
, device
->mxm
);
2390 _(PCI
, device
->pci
, &device
->pci
->subdev
);
2391 _(PMU
, device
->pmu
, &device
->pmu
->subdev
);
2392 _(SECBOOT
, device
->secboot
, &device
->secboot
->subdev
);
2393 _(THERM
, device
->therm
, &device
->therm
->subdev
);
2394 _(TIMER
, device
->timer
, &device
->timer
->subdev
);
2395 _(TOP
, device
->top
, &device
->top
->subdev
);
2396 _(VOLT
, device
->volt
, &device
->volt
->subdev
);
2399 engine
= nvkm_device_engine(device
, index
);
2401 return &engine
->subdev
;
2407 struct nvkm_engine
*
2408 nvkm_device_engine(struct nvkm_device
*device
, int index
)
2410 if (device
->disable_mask
& (1ULL << index
))
2414 #define _(n,p,m) case NVKM_ENGINE_##n: if (p) return (m); break
2415 _(BSP
, device
->bsp
, device
->bsp
);
2416 _(CE0
, device
->ce
[0] , device
->ce
[0]);
2417 _(CE1
, device
->ce
[1] , device
->ce
[1]);
2418 _(CE2
, device
->ce
[2] , device
->ce
[2]);
2419 _(CE3
, device
->ce
[3] , device
->ce
[3]);
2420 _(CE4
, device
->ce
[4] , device
->ce
[4]);
2421 _(CE5
, device
->ce
[5] , device
->ce
[5]);
2422 _(CIPHER
, device
->cipher
, device
->cipher
);
2423 _(DISP
, device
->disp
, &device
->disp
->engine
);
2424 _(DMAOBJ
, device
->dma
, &device
->dma
->engine
);
2425 _(FIFO
, device
->fifo
, &device
->fifo
->engine
);
2426 _(GR
, device
->gr
, &device
->gr
->engine
);
2427 _(IFB
, device
->ifb
, device
->ifb
);
2428 _(ME
, device
->me
, device
->me
);
2429 _(MPEG
, device
->mpeg
, device
->mpeg
);
2430 _(MSENC
, device
->msenc
, device
->msenc
);
2431 _(MSPDEC
, device
->mspdec
, device
->mspdec
);
2432 _(MSPPP
, device
->msppp
, device
->msppp
);
2433 _(MSVLD
, device
->msvld
, device
->msvld
);
2434 _(NVENC0
, device
->nvenc
[0], device
->nvenc
[0]);
2435 _(NVENC1
, device
->nvenc
[1], device
->nvenc
[1]);
2436 _(NVENC2
, device
->nvenc
[2], device
->nvenc
[2]);
2437 _(NVDEC
, device
->nvdec
, &device
->nvdec
->engine
);
2438 _(PM
, device
->pm
, &device
->pm
->engine
);
2439 _(SEC
, device
->sec
, device
->sec
);
2440 _(SEC2
, device
->sec2
, &device
->sec2
->engine
);
2441 _(SW
, device
->sw
, &device
->sw
->engine
);
2442 _(VIC
, device
->vic
, device
->vic
);
2443 _(VP
, device
->vp
, device
->vp
);
2453 nvkm_device_fini(struct nvkm_device
*device
, bool suspend
)
2455 const char *action
= suspend
? "suspend" : "fini";
2456 struct nvkm_subdev
*subdev
;
2460 nvdev_trace(device
, "%s running...\n", action
);
2461 time
= ktime_to_us(ktime_get());
2463 nvkm_acpi_fini(device
);
2465 for (i
= NVKM_SUBDEV_NR
- 1; i
>= 0; i
--) {
2466 if ((subdev
= nvkm_device_subdev(device
, i
))) {
2467 ret
= nvkm_subdev_fini(subdev
, suspend
);
2474 if (device
->func
->fini
)
2475 device
->func
->fini(device
, suspend
);
2477 time
= ktime_to_us(ktime_get()) - time
;
2478 nvdev_trace(device
, "%s completed in %lldus...\n", action
, time
);
2483 if ((subdev
= nvkm_device_subdev(device
, i
))) {
2484 int rret
= nvkm_subdev_init(subdev
);
2486 nvkm_fatal(subdev
, "failed restart, %d\n", ret
);
2488 } while (++i
< NVKM_SUBDEV_NR
);
2490 nvdev_trace(device
, "%s failed with %d\n", action
, ret
);
2495 nvkm_device_preinit(struct nvkm_device
*device
)
2497 struct nvkm_subdev
*subdev
;
2501 nvdev_trace(device
, "preinit running...\n");
2502 time
= ktime_to_us(ktime_get());
2504 if (device
->func
->preinit
) {
2505 ret
= device
->func
->preinit(device
);
2510 for (i
= 0; i
< NVKM_SUBDEV_NR
; i
++) {
2511 if ((subdev
= nvkm_device_subdev(device
, i
))) {
2512 ret
= nvkm_subdev_preinit(subdev
);
2518 ret
= nvkm_devinit_post(device
->devinit
, &device
->disable_mask
);
2522 time
= ktime_to_us(ktime_get()) - time
;
2523 nvdev_trace(device
, "preinit completed in %lldus\n", time
);
2527 nvdev_error(device
, "preinit failed with %d\n", ret
);
2532 nvkm_device_init(struct nvkm_device
*device
)
2534 struct nvkm_subdev
*subdev
;
2538 ret
= nvkm_device_preinit(device
);
2542 nvkm_device_fini(device
, false);
2544 nvdev_trace(device
, "init running...\n");
2545 time
= ktime_to_us(ktime_get());
2547 if (device
->func
->init
) {
2548 ret
= device
->func
->init(device
);
2553 for (i
= 0; i
< NVKM_SUBDEV_NR
; i
++) {
2554 if ((subdev
= nvkm_device_subdev(device
, i
))) {
2555 ret
= nvkm_subdev_init(subdev
);
2561 nvkm_acpi_init(device
);
2563 time
= ktime_to_us(ktime_get()) - time
;
2564 nvdev_trace(device
, "init completed in %lldus\n", time
);
2569 if ((subdev
= nvkm_device_subdev(device
, i
)))
2570 nvkm_subdev_fini(subdev
, false);
2574 nvkm_device_fini(device
, false);
2576 nvdev_error(device
, "init failed with %d\n", ret
);
2581 nvkm_device_del(struct nvkm_device
**pdevice
)
2583 struct nvkm_device
*device
= *pdevice
;
2586 mutex_lock(&nv_devices_mutex
);
2587 device
->disable_mask
= 0;
2588 for (i
= NVKM_SUBDEV_NR
- 1; i
>= 0; i
--) {
2589 struct nvkm_subdev
*subdev
=
2590 nvkm_device_subdev(device
, i
);
2591 nvkm_subdev_del(&subdev
);
2594 nvkm_event_fini(&device
->event
);
2597 iounmap(device
->pri
);
2598 list_del(&device
->head
);
2600 if (device
->func
->dtor
)
2601 *pdevice
= device
->func
->dtor(device
);
2602 mutex_unlock(&nv_devices_mutex
);
2610 nvkm_device_ctor(const struct nvkm_device_func
*func
,
2611 const struct nvkm_device_quirk
*quirk
,
2612 struct device
*dev
, enum nvkm_device_type type
, u64 handle
,
2613 const char *name
, const char *cfg
, const char *dbg
,
2614 bool detect
, bool mmio
, u64 subdev_mask
,
2615 struct nvkm_device
*device
)
2617 struct nvkm_subdev
*subdev
;
2618 u64 mmio_base
, mmio_size
;
2624 mutex_lock(&nv_devices_mutex
);
2625 if (nvkm_device_find_locked(handle
))
2628 device
->func
= func
;
2629 device
->quirk
= quirk
;
2631 device
->type
= type
;
2632 device
->handle
= handle
;
2633 device
->cfgopt
= cfg
;
2634 device
->dbgopt
= dbg
;
2635 device
->name
= name
;
2636 list_add_tail(&device
->head
, &nv_devices
);
2637 device
->debug
= nvkm_dbgopt(device
->dbgopt
, "device");
2639 ret
= nvkm_event_init(&nvkm_device_event_func
, 1, 1, &device
->event
);
2643 mmio_base
= device
->func
->resource_addr(device
, 0);
2644 mmio_size
= device
->func
->resource_size(device
, 0);
2646 /* identify the chipset, and determine classes of subdev/engines */
2648 map
= ioremap(mmio_base
, 0x102000);
2649 if (ret
= -ENOMEM
, map
== NULL
)
2652 /* switch mmio to cpu's native endianness */
2653 #ifndef __BIG_ENDIAN
2654 if (ioread32_native(map
+ 0x000004) != 0x00000000) {
2656 if (ioread32_native(map
+ 0x000004) == 0x00000000) {
2658 iowrite32_native(0x01000001, map
+ 0x000004);
2659 ioread32_native(map
);
2662 /* read boot0 and strapping information */
2663 boot0
= ioread32_native(map
+ 0x000000);
2664 strap
= ioread32_native(map
+ 0x101000);
2667 /* determine chipset and derive architecture from it */
2668 if ((boot0
& 0x1f000000) > 0) {
2669 device
->chipset
= (boot0
& 0x1ff00000) >> 20;
2670 device
->chiprev
= (boot0
& 0x000000ff);
2671 switch (device
->chipset
& 0x1f0) {
2673 if (0x461 & (1 << (device
->chipset
& 0xf)))
2674 device
->card_type
= NV_10
;
2676 device
->card_type
= NV_11
;
2677 device
->chiprev
= 0x00;
2680 case 0x020: device
->card_type
= NV_20
; break;
2681 case 0x030: device
->card_type
= NV_30
; break;
2683 case 0x060: device
->card_type
= NV_40
; break;
2687 case 0x0a0: device
->card_type
= NV_50
; break;
2689 case 0x0d0: device
->card_type
= NV_C0
; break;
2692 case 0x100: device
->card_type
= NV_E0
; break;
2694 case 0x120: device
->card_type
= GM100
; break;
2695 case 0x130: device
->card_type
= GP100
; break;
2700 if ((boot0
& 0xff00fff0) == 0x20004000) {
2701 if (boot0
& 0x00f00000)
2702 device
->chipset
= 0x05;
2704 device
->chipset
= 0x04;
2705 device
->card_type
= NV_04
;
2708 switch (device
->chipset
) {
2709 case 0x004: device
->chip
= &nv4_chipset
; break;
2710 case 0x005: device
->chip
= &nv5_chipset
; break;
2711 case 0x010: device
->chip
= &nv10_chipset
; break;
2712 case 0x011: device
->chip
= &nv11_chipset
; break;
2713 case 0x015: device
->chip
= &nv15_chipset
; break;
2714 case 0x017: device
->chip
= &nv17_chipset
; break;
2715 case 0x018: device
->chip
= &nv18_chipset
; break;
2716 case 0x01a: device
->chip
= &nv1a_chipset
; break;
2717 case 0x01f: device
->chip
= &nv1f_chipset
; break;
2718 case 0x020: device
->chip
= &nv20_chipset
; break;
2719 case 0x025: device
->chip
= &nv25_chipset
; break;
2720 case 0x028: device
->chip
= &nv28_chipset
; break;
2721 case 0x02a: device
->chip
= &nv2a_chipset
; break;
2722 case 0x030: device
->chip
= &nv30_chipset
; break;
2723 case 0x031: device
->chip
= &nv31_chipset
; break;
2724 case 0x034: device
->chip
= &nv34_chipset
; break;
2725 case 0x035: device
->chip
= &nv35_chipset
; break;
2726 case 0x036: device
->chip
= &nv36_chipset
; break;
2727 case 0x040: device
->chip
= &nv40_chipset
; break;
2728 case 0x041: device
->chip
= &nv41_chipset
; break;
2729 case 0x042: device
->chip
= &nv42_chipset
; break;
2730 case 0x043: device
->chip
= &nv43_chipset
; break;
2731 case 0x044: device
->chip
= &nv44_chipset
; break;
2732 case 0x045: device
->chip
= &nv45_chipset
; break;
2733 case 0x046: device
->chip
= &nv46_chipset
; break;
2734 case 0x047: device
->chip
= &nv47_chipset
; break;
2735 case 0x049: device
->chip
= &nv49_chipset
; break;
2736 case 0x04a: device
->chip
= &nv4a_chipset
; break;
2737 case 0x04b: device
->chip
= &nv4b_chipset
; break;
2738 case 0x04c: device
->chip
= &nv4c_chipset
; break;
2739 case 0x04e: device
->chip
= &nv4e_chipset
; break;
2740 case 0x050: device
->chip
= &nv50_chipset
; break;
2741 case 0x063: device
->chip
= &nv63_chipset
; break;
2742 case 0x067: device
->chip
= &nv67_chipset
; break;
2743 case 0x068: device
->chip
= &nv68_chipset
; break;
2744 case 0x084: device
->chip
= &nv84_chipset
; break;
2745 case 0x086: device
->chip
= &nv86_chipset
; break;
2746 case 0x092: device
->chip
= &nv92_chipset
; break;
2747 case 0x094: device
->chip
= &nv94_chipset
; break;
2748 case 0x096: device
->chip
= &nv96_chipset
; break;
2749 case 0x098: device
->chip
= &nv98_chipset
; break;
2750 case 0x0a0: device
->chip
= &nva0_chipset
; break;
2751 case 0x0a3: device
->chip
= &nva3_chipset
; break;
2752 case 0x0a5: device
->chip
= &nva5_chipset
; break;
2753 case 0x0a8: device
->chip
= &nva8_chipset
; break;
2754 case 0x0aa: device
->chip
= &nvaa_chipset
; break;
2755 case 0x0ac: device
->chip
= &nvac_chipset
; break;
2756 case 0x0af: device
->chip
= &nvaf_chipset
; break;
2757 case 0x0c0: device
->chip
= &nvc0_chipset
; break;
2758 case 0x0c1: device
->chip
= &nvc1_chipset
; break;
2759 case 0x0c3: device
->chip
= &nvc3_chipset
; break;
2760 case 0x0c4: device
->chip
= &nvc4_chipset
; break;
2761 case 0x0c8: device
->chip
= &nvc8_chipset
; break;
2762 case 0x0ce: device
->chip
= &nvce_chipset
; break;
2763 case 0x0cf: device
->chip
= &nvcf_chipset
; break;
2764 case 0x0d7: device
->chip
= &nvd7_chipset
; break;
2765 case 0x0d9: device
->chip
= &nvd9_chipset
; break;
2766 case 0x0e4: device
->chip
= &nve4_chipset
; break;
2767 case 0x0e6: device
->chip
= &nve6_chipset
; break;
2768 case 0x0e7: device
->chip
= &nve7_chipset
; break;
2769 case 0x0ea: device
->chip
= &nvea_chipset
; break;
2770 case 0x0f0: device
->chip
= &nvf0_chipset
; break;
2771 case 0x0f1: device
->chip
= &nvf1_chipset
; break;
2772 case 0x106: device
->chip
= &nv106_chipset
; break;
2773 case 0x108: device
->chip
= &nv108_chipset
; break;
2774 case 0x117: device
->chip
= &nv117_chipset
; break;
2775 case 0x118: device
->chip
= &nv118_chipset
; break;
2776 case 0x120: device
->chip
= &nv120_chipset
; break;
2777 case 0x124: device
->chip
= &nv124_chipset
; break;
2778 case 0x126: device
->chip
= &nv126_chipset
; break;
2779 case 0x12b: device
->chip
= &nv12b_chipset
; break;
2780 case 0x130: device
->chip
= &nv130_chipset
; break;
2781 case 0x132: device
->chip
= &nv132_chipset
; break;
2782 case 0x134: device
->chip
= &nv134_chipset
; break;
2783 case 0x136: device
->chip
= &nv136_chipset
; break;
2784 case 0x137: device
->chip
= &nv137_chipset
; break;
2785 case 0x13b: device
->chip
= &nv13b_chipset
; break;
2787 nvdev_error(device
, "unknown chipset (%08x)\n", boot0
);
2791 nvdev_info(device
, "NVIDIA %s (%08x)\n",
2792 device
->chip
->name
, boot0
);
2794 /* determine frequency of timing crystal */
2795 if ( device
->card_type
<= NV_10
|| device
->chipset
< 0x17 ||
2796 (device
->chipset
>= 0x20 && device
->chipset
< 0x25))
2797 strap
&= 0x00000040;
2799 strap
&= 0x00400040;
2802 case 0x00000000: device
->crystal
= 13500; break;
2803 case 0x00000040: device
->crystal
= 14318; break;
2804 case 0x00400000: device
->crystal
= 27000; break;
2805 case 0x00400040: device
->crystal
= 25000; break;
2808 device
->chip
= &null_chipset
;
2812 device
->name
= device
->chip
->name
;
2815 device
->pri
= ioremap(mmio_base
, mmio_size
);
2817 nvdev_error(device
, "unable to map PRI\n");
2823 mutex_init(&device
->mutex
);
2825 for (i
= 0; i
< NVKM_SUBDEV_NR
; i
++) {
2826 #define _(s,m) case s: \
2827 if (device->chip->m && (subdev_mask & (1ULL << (s)))) { \
2828 ret = device->chip->m(device, (s), &device->m); \
2830 subdev = nvkm_device_subdev(device, (s)); \
2831 nvkm_subdev_del(&subdev); \
2833 if (ret != -ENODEV) { \
2834 nvdev_error(device, "%s ctor failed, %d\n", \
2835 nvkm_subdev_name[s], ret); \
2842 _(NVKM_SUBDEV_BAR
, bar
);
2843 _(NVKM_SUBDEV_VBIOS
, bios
);
2844 _(NVKM_SUBDEV_BUS
, bus
);
2845 _(NVKM_SUBDEV_CLK
, clk
);
2846 _(NVKM_SUBDEV_DEVINIT
, devinit
);
2847 _(NVKM_SUBDEV_FB
, fb
);
2848 _(NVKM_SUBDEV_FUSE
, fuse
);
2849 _(NVKM_SUBDEV_GPIO
, gpio
);
2850 _(NVKM_SUBDEV_I2C
, i2c
);
2851 _(NVKM_SUBDEV_IBUS
, ibus
);
2852 _(NVKM_SUBDEV_ICCSENSE
, iccsense
);
2853 _(NVKM_SUBDEV_INSTMEM
, imem
);
2854 _(NVKM_SUBDEV_LTC
, ltc
);
2855 _(NVKM_SUBDEV_MC
, mc
);
2856 _(NVKM_SUBDEV_MMU
, mmu
);
2857 _(NVKM_SUBDEV_MXM
, mxm
);
2858 _(NVKM_SUBDEV_PCI
, pci
);
2859 _(NVKM_SUBDEV_PMU
, pmu
);
2860 _(NVKM_SUBDEV_SECBOOT
, secboot
);
2861 _(NVKM_SUBDEV_THERM
, therm
);
2862 _(NVKM_SUBDEV_TIMER
, timer
);
2863 _(NVKM_SUBDEV_TOP
, top
);
2864 _(NVKM_SUBDEV_VOLT
, volt
);
2865 _(NVKM_ENGINE_BSP
, bsp
);
2866 _(NVKM_ENGINE_CE0
, ce
[0]);
2867 _(NVKM_ENGINE_CE1
, ce
[1]);
2868 _(NVKM_ENGINE_CE2
, ce
[2]);
2869 _(NVKM_ENGINE_CE3
, ce
[3]);
2870 _(NVKM_ENGINE_CE4
, ce
[4]);
2871 _(NVKM_ENGINE_CE5
, ce
[5]);
2872 _(NVKM_ENGINE_CIPHER
, cipher
);
2873 _(NVKM_ENGINE_DISP
, disp
);
2874 _(NVKM_ENGINE_DMAOBJ
, dma
);
2875 _(NVKM_ENGINE_FIFO
, fifo
);
2876 _(NVKM_ENGINE_GR
, gr
);
2877 _(NVKM_ENGINE_IFB
, ifb
);
2878 _(NVKM_ENGINE_ME
, me
);
2879 _(NVKM_ENGINE_MPEG
, mpeg
);
2880 _(NVKM_ENGINE_MSENC
, msenc
);
2881 _(NVKM_ENGINE_MSPDEC
, mspdec
);
2882 _(NVKM_ENGINE_MSPPP
, msppp
);
2883 _(NVKM_ENGINE_MSVLD
, msvld
);
2884 _(NVKM_ENGINE_NVENC0
, nvenc
[0]);
2885 _(NVKM_ENGINE_NVENC1
, nvenc
[1]);
2886 _(NVKM_ENGINE_NVENC2
, nvenc
[2]);
2887 _(NVKM_ENGINE_NVDEC
, nvdec
);
2888 _(NVKM_ENGINE_PM
, pm
);
2889 _(NVKM_ENGINE_SEC
, sec
);
2890 _(NVKM_ENGINE_SEC2
, sec2
);
2891 _(NVKM_ENGINE_SW
, sw
);
2892 _(NVKM_ENGINE_VIC
, vic
);
2893 _(NVKM_ENGINE_VP
, vp
);
2903 mutex_unlock(&nv_devices_mutex
);