]>
Commit | Line | Data |
---|---|---|
9274f4a9 BS |
1 | /* |
2 | * Copyright 2012 Red Hat Inc. | |
3 | * | |
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: | |
10 | * | |
11 | * The above copyright notice and this permission notice shall be included in | |
12 | * all copies or substantial portions of the Software. | |
13 | * | |
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. | |
21 | * | |
22 | * Authors: Ben Skeggs | |
23 | */ | |
9719047b BS |
24 | #include "priv.h" |
25 | #include "acpi.h" | |
9274f4a9 | 26 | |
9719047b | 27 | #include <core/notify.h> |
a1bfb29a | 28 | #include <core/option.h> |
d01c3092 | 29 | |
a1bfb29a | 30 | #include <subdev/bios.h> |
9274f4a9 BS |
31 | |
32 | static DEFINE_MUTEX(nv_devices_mutex); | |
33 | static LIST_HEAD(nv_devices); | |
34 | ||
7974dd1b BS |
35 | static struct nvkm_device * |
36 | nvkm_device_find_locked(u64 handle) | |
9274f4a9 | 37 | { |
7974dd1b | 38 | struct nvkm_device *device; |
9274f4a9 | 39 | list_for_each_entry(device, &nv_devices, head) { |
7974dd1b BS |
40 | if (device->handle == handle) |
41 | return device; | |
9274f4a9 | 42 | } |
7974dd1b BS |
43 | return NULL; |
44 | } | |
45 | ||
46 | struct nvkm_device * | |
47 | nvkm_device_find(u64 handle) | |
48 | { | |
49 | struct nvkm_device *device; | |
50 | mutex_lock(&nv_devices_mutex); | |
51 | device = nvkm_device_find_locked(handle); | |
9274f4a9 | 52 | mutex_unlock(&nv_devices_mutex); |
7974dd1b | 53 | return device; |
9274f4a9 BS |
54 | } |
55 | ||
803c1787 | 56 | int |
9719047b | 57 | nvkm_device_list(u64 *name, int size) |
803c1787 | 58 | { |
9719047b | 59 | struct nvkm_device *device; |
803c1787 BS |
60 | int nr = 0; |
61 | mutex_lock(&nv_devices_mutex); | |
62 | list_for_each_entry(device, &nv_devices, head) { | |
63 | if (nr++ < size) | |
64 | name[nr - 1] = device->handle; | |
65 | } | |
66 | mutex_unlock(&nv_devices_mutex); | |
67 | return nr; | |
68 | } | |
69 | ||
6cf813fb BS |
70 | static const struct nvkm_device_chip |
71 | null_chipset = { | |
72 | .name = "NULL", | |
46484438 | 73 | .bios = nvkm_bios_new, |
6cf813fb BS |
74 | }; |
75 | ||
76 | static const struct nvkm_device_chip | |
77 | nv4_chipset = { | |
78 | .name = "NV04", | |
46484438 | 79 | .bios = nvkm_bios_new, |
bb23f9d7 | 80 | .bus = nv04_bus_new, |
6625f55c | 81 | .clk = nv04_clk_new, |
151abd44 | 82 | .devinit = nv04_devinit_new, |
03c8952f | 83 | .fb = nv04_fb_new, |
49bd8da5 | 84 | .i2c = nv04_i2c_new, |
b7a2bc18 | 85 | .imem = nv04_instmem_new, |
54dcadd5 | 86 | .mc = nv04_mc_new, |
c9582455 | 87 | .mmu = nv04_mmu_new, |
0a34fb31 | 88 | .pci = nv04_pci_new, |
31649ecf | 89 | .timer = nv04_timer_new, |
70aa8670 | 90 | .disp = nv04_disp_new, |
bd70563f | 91 | .dma = nv04_dma_new, |
13de7f46 | 92 | .fifo = nv04_fifo_new, |
c85ee6ca | 93 | .gr = nv04_gr_new, |
6f41c7c5 | 94 | .sw = nv04_sw_new, |
6cf813fb BS |
95 | }; |
96 | ||
97 | static const struct nvkm_device_chip | |
98 | nv5_chipset = { | |
99 | .name = "NV05", | |
46484438 | 100 | .bios = nvkm_bios_new, |
bb23f9d7 | 101 | .bus = nv04_bus_new, |
6625f55c | 102 | .clk = nv04_clk_new, |
151abd44 | 103 | .devinit = nv05_devinit_new, |
03c8952f | 104 | .fb = nv04_fb_new, |
49bd8da5 | 105 | .i2c = nv04_i2c_new, |
b7a2bc18 | 106 | .imem = nv04_instmem_new, |
54dcadd5 | 107 | .mc = nv04_mc_new, |
c9582455 | 108 | .mmu = nv04_mmu_new, |
0a34fb31 | 109 | .pci = nv04_pci_new, |
31649ecf | 110 | .timer = nv04_timer_new, |
70aa8670 | 111 | .disp = nv04_disp_new, |
bd70563f | 112 | .dma = nv04_dma_new, |
13de7f46 | 113 | .fifo = nv04_fifo_new, |
c85ee6ca | 114 | .gr = nv04_gr_new, |
6f41c7c5 | 115 | .sw = nv04_sw_new, |
6cf813fb BS |
116 | }; |
117 | ||
118 | static const struct nvkm_device_chip | |
119 | nv10_chipset = { | |
120 | .name = "NV10", | |
46484438 | 121 | .bios = nvkm_bios_new, |
bb23f9d7 | 122 | .bus = nv04_bus_new, |
6625f55c | 123 | .clk = nv04_clk_new, |
151abd44 | 124 | .devinit = nv10_devinit_new, |
03c8952f | 125 | .fb = nv10_fb_new, |
2ea7249f | 126 | .gpio = nv10_gpio_new, |
49bd8da5 | 127 | .i2c = nv04_i2c_new, |
b7a2bc18 | 128 | .imem = nv04_instmem_new, |
54dcadd5 | 129 | .mc = nv04_mc_new, |
c9582455 | 130 | .mmu = nv04_mmu_new, |
0a34fb31 | 131 | .pci = nv04_pci_new, |
31649ecf | 132 | .timer = nv04_timer_new, |
70aa8670 | 133 | .disp = nv04_disp_new, |
bd70563f | 134 | .dma = nv04_dma_new, |
c85ee6ca | 135 | .gr = nv10_gr_new, |
6cf813fb BS |
136 | }; |
137 | ||
138 | static const struct nvkm_device_chip | |
139 | nv11_chipset = { | |
140 | .name = "NV11", | |
46484438 | 141 | .bios = nvkm_bios_new, |
bb23f9d7 | 142 | .bus = nv04_bus_new, |
6625f55c | 143 | .clk = nv04_clk_new, |
151abd44 | 144 | .devinit = nv10_devinit_new, |
03c8952f | 145 | .fb = nv10_fb_new, |
2ea7249f | 146 | .gpio = nv10_gpio_new, |
49bd8da5 | 147 | .i2c = nv04_i2c_new, |
b7a2bc18 | 148 | .imem = nv04_instmem_new, |
54dcadd5 | 149 | .mc = nv04_mc_new, |
c9582455 | 150 | .mmu = nv04_mmu_new, |
0a34fb31 | 151 | .pci = nv04_pci_new, |
31649ecf | 152 | .timer = nv04_timer_new, |
70aa8670 | 153 | .disp = nv04_disp_new, |
bd70563f | 154 | .dma = nv04_dma_new, |
13de7f46 | 155 | .fifo = nv10_fifo_new, |
c85ee6ca | 156 | .gr = nv15_gr_new, |
6f41c7c5 | 157 | .sw = nv10_sw_new, |
6cf813fb BS |
158 | }; |
159 | ||
160 | static const struct nvkm_device_chip | |
161 | nv15_chipset = { | |
162 | .name = "NV15", | |
46484438 | 163 | .bios = nvkm_bios_new, |
bb23f9d7 | 164 | .bus = nv04_bus_new, |
6625f55c | 165 | .clk = nv04_clk_new, |
151abd44 | 166 | .devinit = nv10_devinit_new, |
03c8952f | 167 | .fb = nv10_fb_new, |
2ea7249f | 168 | .gpio = nv10_gpio_new, |
49bd8da5 | 169 | .i2c = nv04_i2c_new, |
b7a2bc18 | 170 | .imem = nv04_instmem_new, |
54dcadd5 | 171 | .mc = nv04_mc_new, |
c9582455 | 172 | .mmu = nv04_mmu_new, |
0a34fb31 | 173 | .pci = nv04_pci_new, |
31649ecf | 174 | .timer = nv04_timer_new, |
70aa8670 | 175 | .disp = nv04_disp_new, |
bd70563f | 176 | .dma = nv04_dma_new, |
13de7f46 | 177 | .fifo = nv10_fifo_new, |
c85ee6ca | 178 | .gr = nv15_gr_new, |
6f41c7c5 | 179 | .sw = nv10_sw_new, |
6cf813fb BS |
180 | }; |
181 | ||
182 | static const struct nvkm_device_chip | |
183 | nv17_chipset = { | |
184 | .name = "NV17", | |
46484438 | 185 | .bios = nvkm_bios_new, |
bb23f9d7 | 186 | .bus = nv04_bus_new, |
6625f55c | 187 | .clk = nv04_clk_new, |
151abd44 | 188 | .devinit = nv10_devinit_new, |
03c8952f | 189 | .fb = nv10_fb_new, |
2ea7249f | 190 | .gpio = nv10_gpio_new, |
49bd8da5 | 191 | .i2c = nv04_i2c_new, |
b7a2bc18 | 192 | .imem = nv04_instmem_new, |
54dcadd5 | 193 | .mc = nv04_mc_new, |
c9582455 | 194 | .mmu = nv04_mmu_new, |
0a34fb31 | 195 | .pci = nv04_pci_new, |
31649ecf | 196 | .timer = nv04_timer_new, |
70aa8670 | 197 | .disp = nv04_disp_new, |
bd70563f | 198 | .dma = nv04_dma_new, |
13de7f46 | 199 | .fifo = nv17_fifo_new, |
c85ee6ca | 200 | .gr = nv17_gr_new, |
6f41c7c5 | 201 | .sw = nv10_sw_new, |
6cf813fb BS |
202 | }; |
203 | ||
204 | static const struct nvkm_device_chip | |
205 | nv18_chipset = { | |
206 | .name = "NV18", | |
46484438 | 207 | .bios = nvkm_bios_new, |
bb23f9d7 | 208 | .bus = nv04_bus_new, |
6625f55c | 209 | .clk = nv04_clk_new, |
151abd44 | 210 | .devinit = nv10_devinit_new, |
03c8952f | 211 | .fb = nv10_fb_new, |
2ea7249f | 212 | .gpio = nv10_gpio_new, |
49bd8da5 | 213 | .i2c = nv04_i2c_new, |
b7a2bc18 | 214 | .imem = nv04_instmem_new, |
54dcadd5 | 215 | .mc = nv04_mc_new, |
c9582455 | 216 | .mmu = nv04_mmu_new, |
0a34fb31 | 217 | .pci = nv04_pci_new, |
31649ecf | 218 | .timer = nv04_timer_new, |
70aa8670 | 219 | .disp = nv04_disp_new, |
bd70563f | 220 | .dma = nv04_dma_new, |
13de7f46 | 221 | .fifo = nv17_fifo_new, |
c85ee6ca | 222 | .gr = nv17_gr_new, |
6f41c7c5 | 223 | .sw = nv10_sw_new, |
6cf813fb BS |
224 | }; |
225 | ||
226 | static const struct nvkm_device_chip | |
227 | nv1a_chipset = { | |
228 | .name = "nForce", | |
46484438 | 229 | .bios = nvkm_bios_new, |
bb23f9d7 | 230 | .bus = nv04_bus_new, |
6625f55c | 231 | .clk = nv04_clk_new, |
151abd44 | 232 | .devinit = nv1a_devinit_new, |
03c8952f | 233 | .fb = nv1a_fb_new, |
2ea7249f | 234 | .gpio = nv10_gpio_new, |
49bd8da5 | 235 | .i2c = nv04_i2c_new, |
b7a2bc18 | 236 | .imem = nv04_instmem_new, |
54dcadd5 | 237 | .mc = nv04_mc_new, |
c9582455 | 238 | .mmu = nv04_mmu_new, |
0a34fb31 | 239 | .pci = nv04_pci_new, |
31649ecf | 240 | .timer = nv04_timer_new, |
70aa8670 | 241 | .disp = nv04_disp_new, |
bd70563f | 242 | .dma = nv04_dma_new, |
13de7f46 | 243 | .fifo = nv10_fifo_new, |
c85ee6ca | 244 | .gr = nv15_gr_new, |
6f41c7c5 | 245 | .sw = nv10_sw_new, |
6cf813fb BS |
246 | }; |
247 | ||
248 | static const struct nvkm_device_chip | |
249 | nv1f_chipset = { | |
250 | .name = "nForce2", | |
46484438 | 251 | .bios = nvkm_bios_new, |
bb23f9d7 | 252 | .bus = nv04_bus_new, |
6625f55c | 253 | .clk = nv04_clk_new, |
151abd44 | 254 | .devinit = nv1a_devinit_new, |
03c8952f | 255 | .fb = nv1a_fb_new, |
2ea7249f | 256 | .gpio = nv10_gpio_new, |
49bd8da5 | 257 | .i2c = nv04_i2c_new, |
b7a2bc18 | 258 | .imem = nv04_instmem_new, |
54dcadd5 | 259 | .mc = nv04_mc_new, |
c9582455 | 260 | .mmu = nv04_mmu_new, |
0a34fb31 | 261 | .pci = nv04_pci_new, |
31649ecf | 262 | .timer = nv04_timer_new, |
70aa8670 | 263 | .disp = nv04_disp_new, |
bd70563f | 264 | .dma = nv04_dma_new, |
13de7f46 | 265 | .fifo = nv17_fifo_new, |
c85ee6ca | 266 | .gr = nv17_gr_new, |
6f41c7c5 | 267 | .sw = nv10_sw_new, |
6cf813fb BS |
268 | }; |
269 | ||
270 | static const struct nvkm_device_chip | |
271 | nv20_chipset = { | |
272 | .name = "NV20", | |
46484438 | 273 | .bios = nvkm_bios_new, |
bb23f9d7 | 274 | .bus = nv04_bus_new, |
6625f55c | 275 | .clk = nv04_clk_new, |
151abd44 | 276 | .devinit = nv20_devinit_new, |
03c8952f | 277 | .fb = nv20_fb_new, |
2ea7249f | 278 | .gpio = nv10_gpio_new, |
49bd8da5 | 279 | .i2c = nv04_i2c_new, |
b7a2bc18 | 280 | .imem = nv04_instmem_new, |
54dcadd5 | 281 | .mc = nv04_mc_new, |
c9582455 | 282 | .mmu = nv04_mmu_new, |
0a34fb31 | 283 | .pci = nv04_pci_new, |
31649ecf | 284 | .timer = nv04_timer_new, |
70aa8670 | 285 | .disp = nv04_disp_new, |
bd70563f | 286 | .dma = nv04_dma_new, |
13de7f46 | 287 | .fifo = nv17_fifo_new, |
c85ee6ca | 288 | .gr = nv20_gr_new, |
6f41c7c5 | 289 | .sw = nv10_sw_new, |
6cf813fb BS |
290 | }; |
291 | ||
292 | static const struct nvkm_device_chip | |
293 | nv25_chipset = { | |
294 | .name = "NV25", | |
46484438 | 295 | .bios = nvkm_bios_new, |
bb23f9d7 | 296 | .bus = nv04_bus_new, |
6625f55c | 297 | .clk = nv04_clk_new, |
151abd44 | 298 | .devinit = nv20_devinit_new, |
03c8952f | 299 | .fb = nv25_fb_new, |
2ea7249f | 300 | .gpio = nv10_gpio_new, |
49bd8da5 | 301 | .i2c = nv04_i2c_new, |
b7a2bc18 | 302 | .imem = nv04_instmem_new, |
54dcadd5 | 303 | .mc = nv04_mc_new, |
c9582455 | 304 | .mmu = nv04_mmu_new, |
0a34fb31 | 305 | .pci = nv04_pci_new, |
31649ecf | 306 | .timer = nv04_timer_new, |
70aa8670 | 307 | .disp = nv04_disp_new, |
bd70563f | 308 | .dma = nv04_dma_new, |
13de7f46 | 309 | .fifo = nv17_fifo_new, |
c85ee6ca | 310 | .gr = nv25_gr_new, |
6f41c7c5 | 311 | .sw = nv10_sw_new, |
6cf813fb BS |
312 | }; |
313 | ||
314 | static const struct nvkm_device_chip | |
315 | nv28_chipset = { | |
316 | .name = "NV28", | |
46484438 | 317 | .bios = nvkm_bios_new, |
bb23f9d7 | 318 | .bus = nv04_bus_new, |
6625f55c | 319 | .clk = nv04_clk_new, |
151abd44 | 320 | .devinit = nv20_devinit_new, |
03c8952f | 321 | .fb = nv25_fb_new, |
2ea7249f | 322 | .gpio = nv10_gpio_new, |
49bd8da5 | 323 | .i2c = nv04_i2c_new, |
b7a2bc18 | 324 | .imem = nv04_instmem_new, |
54dcadd5 | 325 | .mc = nv04_mc_new, |
c9582455 | 326 | .mmu = nv04_mmu_new, |
0a34fb31 | 327 | .pci = nv04_pci_new, |
31649ecf | 328 | .timer = nv04_timer_new, |
70aa8670 | 329 | .disp = nv04_disp_new, |
bd70563f | 330 | .dma = nv04_dma_new, |
13de7f46 | 331 | .fifo = nv17_fifo_new, |
c85ee6ca | 332 | .gr = nv25_gr_new, |
6f41c7c5 | 333 | .sw = nv10_sw_new, |
6cf813fb BS |
334 | }; |
335 | ||
336 | static const struct nvkm_device_chip | |
337 | nv2a_chipset = { | |
338 | .name = "NV2A", | |
46484438 | 339 | .bios = nvkm_bios_new, |
bb23f9d7 | 340 | .bus = nv04_bus_new, |
6625f55c | 341 | .clk = nv04_clk_new, |
151abd44 | 342 | .devinit = nv20_devinit_new, |
03c8952f | 343 | .fb = nv25_fb_new, |
2ea7249f | 344 | .gpio = nv10_gpio_new, |
49bd8da5 | 345 | .i2c = nv04_i2c_new, |
b7a2bc18 | 346 | .imem = nv04_instmem_new, |
54dcadd5 | 347 | .mc = nv04_mc_new, |
c9582455 | 348 | .mmu = nv04_mmu_new, |
0a34fb31 | 349 | .pci = nv04_pci_new, |
31649ecf | 350 | .timer = nv04_timer_new, |
70aa8670 | 351 | .disp = nv04_disp_new, |
bd70563f | 352 | .dma = nv04_dma_new, |
13de7f46 | 353 | .fifo = nv17_fifo_new, |
c85ee6ca | 354 | .gr = nv2a_gr_new, |
6f41c7c5 | 355 | .sw = nv10_sw_new, |
6cf813fb BS |
356 | }; |
357 | ||
358 | static const struct nvkm_device_chip | |
359 | nv30_chipset = { | |
360 | .name = "NV30", | |
46484438 | 361 | .bios = nvkm_bios_new, |
bb23f9d7 | 362 | .bus = nv04_bus_new, |
6625f55c | 363 | .clk = nv04_clk_new, |
151abd44 | 364 | .devinit = nv20_devinit_new, |
03c8952f | 365 | .fb = nv30_fb_new, |
2ea7249f | 366 | .gpio = nv10_gpio_new, |
49bd8da5 | 367 | .i2c = nv04_i2c_new, |
b7a2bc18 | 368 | .imem = nv04_instmem_new, |
54dcadd5 | 369 | .mc = nv04_mc_new, |
c9582455 | 370 | .mmu = nv04_mmu_new, |
0a34fb31 | 371 | .pci = nv04_pci_new, |
31649ecf | 372 | .timer = nv04_timer_new, |
70aa8670 | 373 | .disp = nv04_disp_new, |
bd70563f | 374 | .dma = nv04_dma_new, |
13de7f46 | 375 | .fifo = nv17_fifo_new, |
c85ee6ca | 376 | .gr = nv30_gr_new, |
6f41c7c5 | 377 | .sw = nv10_sw_new, |
6cf813fb BS |
378 | }; |
379 | ||
380 | static const struct nvkm_device_chip | |
381 | nv31_chipset = { | |
382 | .name = "NV31", | |
46484438 | 383 | .bios = nvkm_bios_new, |
bb23f9d7 | 384 | .bus = nv31_bus_new, |
6625f55c | 385 | .clk = nv04_clk_new, |
151abd44 | 386 | .devinit = nv20_devinit_new, |
03c8952f | 387 | .fb = nv30_fb_new, |
2ea7249f | 388 | .gpio = nv10_gpio_new, |
49bd8da5 | 389 | .i2c = nv04_i2c_new, |
b7a2bc18 | 390 | .imem = nv04_instmem_new, |
54dcadd5 | 391 | .mc = nv04_mc_new, |
c9582455 | 392 | .mmu = nv04_mmu_new, |
0a34fb31 | 393 | .pci = nv04_pci_new, |
31649ecf | 394 | .timer = nv04_timer_new, |
70aa8670 | 395 | .disp = nv04_disp_new, |
bd70563f | 396 | .dma = nv04_dma_new, |
13de7f46 | 397 | .fifo = nv17_fifo_new, |
c85ee6ca | 398 | .gr = nv30_gr_new, |
7624fc01 | 399 | .mpeg = nv31_mpeg_new, |
6f41c7c5 | 400 | .sw = nv10_sw_new, |
6cf813fb BS |
401 | }; |
402 | ||
403 | static const struct nvkm_device_chip | |
404 | nv34_chipset = { | |
405 | .name = "NV34", | |
46484438 | 406 | .bios = nvkm_bios_new, |
bb23f9d7 | 407 | .bus = nv31_bus_new, |
6625f55c | 408 | .clk = nv04_clk_new, |
151abd44 | 409 | .devinit = nv10_devinit_new, |
03c8952f | 410 | .fb = nv10_fb_new, |
2ea7249f | 411 | .gpio = nv10_gpio_new, |
49bd8da5 | 412 | .i2c = nv04_i2c_new, |
b7a2bc18 | 413 | .imem = nv04_instmem_new, |
54dcadd5 | 414 | .mc = nv04_mc_new, |
c9582455 | 415 | .mmu = nv04_mmu_new, |
0a34fb31 | 416 | .pci = nv04_pci_new, |
31649ecf | 417 | .timer = nv04_timer_new, |
70aa8670 | 418 | .disp = nv04_disp_new, |
bd70563f | 419 | .dma = nv04_dma_new, |
13de7f46 | 420 | .fifo = nv17_fifo_new, |
c85ee6ca | 421 | .gr = nv34_gr_new, |
7624fc01 | 422 | .mpeg = nv31_mpeg_new, |
6f41c7c5 | 423 | .sw = nv10_sw_new, |
6cf813fb BS |
424 | }; |
425 | ||
426 | static const struct nvkm_device_chip | |
427 | nv35_chipset = { | |
428 | .name = "NV35", | |
46484438 | 429 | .bios = nvkm_bios_new, |
bb23f9d7 | 430 | .bus = nv04_bus_new, |
6625f55c | 431 | .clk = nv04_clk_new, |
151abd44 | 432 | .devinit = nv20_devinit_new, |
03c8952f | 433 | .fb = nv35_fb_new, |
2ea7249f | 434 | .gpio = nv10_gpio_new, |
49bd8da5 | 435 | .i2c = nv04_i2c_new, |
b7a2bc18 | 436 | .imem = nv04_instmem_new, |
54dcadd5 | 437 | .mc = nv04_mc_new, |
c9582455 | 438 | .mmu = nv04_mmu_new, |
0a34fb31 | 439 | .pci = nv04_pci_new, |
31649ecf | 440 | .timer = nv04_timer_new, |
70aa8670 | 441 | .disp = nv04_disp_new, |
bd70563f | 442 | .dma = nv04_dma_new, |
13de7f46 | 443 | .fifo = nv17_fifo_new, |
c85ee6ca | 444 | .gr = nv35_gr_new, |
6f41c7c5 | 445 | .sw = nv10_sw_new, |
6cf813fb BS |
446 | }; |
447 | ||
448 | static const struct nvkm_device_chip | |
449 | nv36_chipset = { | |
450 | .name = "NV36", | |
46484438 | 451 | .bios = nvkm_bios_new, |
bb23f9d7 | 452 | .bus = nv31_bus_new, |
6625f55c | 453 | .clk = nv04_clk_new, |
151abd44 | 454 | .devinit = nv20_devinit_new, |
03c8952f | 455 | .fb = nv36_fb_new, |
2ea7249f | 456 | .gpio = nv10_gpio_new, |
49bd8da5 | 457 | .i2c = nv04_i2c_new, |
b7a2bc18 | 458 | .imem = nv04_instmem_new, |
54dcadd5 | 459 | .mc = nv04_mc_new, |
c9582455 | 460 | .mmu = nv04_mmu_new, |
0a34fb31 | 461 | .pci = nv04_pci_new, |
31649ecf | 462 | .timer = nv04_timer_new, |
70aa8670 | 463 | .disp = nv04_disp_new, |
bd70563f | 464 | .dma = nv04_dma_new, |
13de7f46 | 465 | .fifo = nv17_fifo_new, |
c85ee6ca | 466 | .gr = nv35_gr_new, |
7624fc01 | 467 | .mpeg = nv31_mpeg_new, |
6f41c7c5 | 468 | .sw = nv10_sw_new, |
6cf813fb BS |
469 | }; |
470 | ||
471 | static const struct nvkm_device_chip | |
472 | nv40_chipset = { | |
473 | .name = "NV40", | |
46484438 | 474 | .bios = nvkm_bios_new, |
bb23f9d7 | 475 | .bus = nv31_bus_new, |
6625f55c | 476 | .clk = nv40_clk_new, |
151abd44 | 477 | .devinit = nv1a_devinit_new, |
03c8952f | 478 | .fb = nv40_fb_new, |
2ea7249f | 479 | .gpio = nv10_gpio_new, |
49bd8da5 | 480 | .i2c = nv04_i2c_new, |
b7a2bc18 | 481 | .imem = nv40_instmem_new, |
2b700825 | 482 | .mc = nv04_mc_new, |
c9582455 | 483 | .mmu = nv04_mmu_new, |
0a34fb31 | 484 | .pci = nv40_pci_new, |
57113c01 | 485 | .therm = nv40_therm_new, |
31649ecf | 486 | .timer = nv40_timer_new, |
437b2296 | 487 | .volt = nv40_volt_new, |
70aa8670 | 488 | .disp = nv04_disp_new, |
bd70563f | 489 | .dma = nv04_dma_new, |
13de7f46 | 490 | .fifo = nv40_fifo_new, |
c85ee6ca | 491 | .gr = nv40_gr_new, |
7624fc01 | 492 | .mpeg = nv40_mpeg_new, |
97070f23 | 493 | .pm = nv40_pm_new, |
6f41c7c5 | 494 | .sw = nv10_sw_new, |
6cf813fb BS |
495 | }; |
496 | ||
497 | static const struct nvkm_device_chip | |
498 | nv41_chipset = { | |
499 | .name = "NV41", | |
46484438 | 500 | .bios = nvkm_bios_new, |
bb23f9d7 | 501 | .bus = nv31_bus_new, |
6625f55c | 502 | .clk = nv40_clk_new, |
151abd44 | 503 | .devinit = nv1a_devinit_new, |
03c8952f | 504 | .fb = nv41_fb_new, |
2ea7249f | 505 | .gpio = nv10_gpio_new, |
49bd8da5 | 506 | .i2c = nv04_i2c_new, |
b7a2bc18 | 507 | .imem = nv40_instmem_new, |
2b700825 | 508 | .mc = nv04_mc_new, |
c9582455 | 509 | .mmu = nv41_mmu_new, |
0a34fb31 | 510 | .pci = nv40_pci_new, |
57113c01 | 511 | .therm = nv40_therm_new, |
31649ecf | 512 | .timer = nv41_timer_new, |
437b2296 | 513 | .volt = nv40_volt_new, |
70aa8670 | 514 | .disp = nv04_disp_new, |
bd70563f | 515 | .dma = nv04_dma_new, |
13de7f46 | 516 | .fifo = nv40_fifo_new, |
c85ee6ca | 517 | .gr = nv40_gr_new, |
7624fc01 | 518 | .mpeg = nv40_mpeg_new, |
97070f23 | 519 | .pm = nv40_pm_new, |
6f41c7c5 | 520 | .sw = nv10_sw_new, |
6cf813fb BS |
521 | }; |
522 | ||
523 | static const struct nvkm_device_chip | |
524 | nv42_chipset = { | |
525 | .name = "NV42", | |
46484438 | 526 | .bios = nvkm_bios_new, |
bb23f9d7 | 527 | .bus = nv31_bus_new, |
6625f55c | 528 | .clk = nv40_clk_new, |
151abd44 | 529 | .devinit = nv1a_devinit_new, |
03c8952f | 530 | .fb = nv41_fb_new, |
2ea7249f | 531 | .gpio = nv10_gpio_new, |
49bd8da5 | 532 | .i2c = nv04_i2c_new, |
b7a2bc18 | 533 | .imem = nv40_instmem_new, |
2b700825 | 534 | .mc = nv04_mc_new, |
c9582455 | 535 | .mmu = nv41_mmu_new, |
0a34fb31 | 536 | .pci = nv40_pci_new, |
57113c01 | 537 | .therm = nv40_therm_new, |
31649ecf | 538 | .timer = nv41_timer_new, |
437b2296 | 539 | .volt = nv40_volt_new, |
70aa8670 | 540 | .disp = nv04_disp_new, |
bd70563f | 541 | .dma = nv04_dma_new, |
13de7f46 | 542 | .fifo = nv40_fifo_new, |
c85ee6ca | 543 | .gr = nv40_gr_new, |
7624fc01 | 544 | .mpeg = nv40_mpeg_new, |
97070f23 | 545 | .pm = nv40_pm_new, |
6f41c7c5 | 546 | .sw = nv10_sw_new, |
6cf813fb BS |
547 | }; |
548 | ||
549 | static const struct nvkm_device_chip | |
550 | nv43_chipset = { | |
551 | .name = "NV43", | |
46484438 | 552 | .bios = nvkm_bios_new, |
bb23f9d7 | 553 | .bus = nv31_bus_new, |
6625f55c | 554 | .clk = nv40_clk_new, |
151abd44 | 555 | .devinit = nv1a_devinit_new, |
03c8952f | 556 | .fb = nv41_fb_new, |
2ea7249f | 557 | .gpio = nv10_gpio_new, |
49bd8da5 | 558 | .i2c = nv04_i2c_new, |
b7a2bc18 | 559 | .imem = nv40_instmem_new, |
2b700825 | 560 | .mc = nv04_mc_new, |
c9582455 | 561 | .mmu = nv41_mmu_new, |
0a34fb31 | 562 | .pci = nv40_pci_new, |
57113c01 | 563 | .therm = nv40_therm_new, |
31649ecf | 564 | .timer = nv41_timer_new, |
437b2296 | 565 | .volt = nv40_volt_new, |
70aa8670 | 566 | .disp = nv04_disp_new, |
bd70563f | 567 | .dma = nv04_dma_new, |
13de7f46 | 568 | .fifo = nv40_fifo_new, |
c85ee6ca | 569 | .gr = nv40_gr_new, |
7624fc01 | 570 | .mpeg = nv40_mpeg_new, |
97070f23 | 571 | .pm = nv40_pm_new, |
6f41c7c5 | 572 | .sw = nv10_sw_new, |
6cf813fb BS |
573 | }; |
574 | ||
575 | static const struct nvkm_device_chip | |
576 | nv44_chipset = { | |
577 | .name = "NV44", | |
46484438 | 578 | .bios = nvkm_bios_new, |
bb23f9d7 | 579 | .bus = nv31_bus_new, |
6625f55c | 580 | .clk = nv40_clk_new, |
151abd44 | 581 | .devinit = nv1a_devinit_new, |
03c8952f | 582 | .fb = nv44_fb_new, |
2ea7249f | 583 | .gpio = nv10_gpio_new, |
49bd8da5 | 584 | .i2c = nv04_i2c_new, |
b7a2bc18 | 585 | .imem = nv40_instmem_new, |
54dcadd5 | 586 | .mc = nv44_mc_new, |
c9582455 | 587 | .mmu = nv44_mmu_new, |
0a34fb31 | 588 | .pci = nv40_pci_new, |
57113c01 | 589 | .therm = nv40_therm_new, |
31649ecf | 590 | .timer = nv41_timer_new, |
437b2296 | 591 | .volt = nv40_volt_new, |
70aa8670 | 592 | .disp = nv04_disp_new, |
bd70563f | 593 | .dma = nv04_dma_new, |
13de7f46 | 594 | .fifo = nv40_fifo_new, |
c85ee6ca | 595 | .gr = nv44_gr_new, |
7624fc01 | 596 | .mpeg = nv44_mpeg_new, |
97070f23 | 597 | .pm = nv40_pm_new, |
6f41c7c5 | 598 | .sw = nv10_sw_new, |
6cf813fb BS |
599 | }; |
600 | ||
601 | static const struct nvkm_device_chip | |
602 | nv45_chipset = { | |
603 | .name = "NV45", | |
46484438 | 604 | .bios = nvkm_bios_new, |
bb23f9d7 | 605 | .bus = nv31_bus_new, |
6625f55c | 606 | .clk = nv40_clk_new, |
151abd44 | 607 | .devinit = nv1a_devinit_new, |
03c8952f | 608 | .fb = nv40_fb_new, |
2ea7249f | 609 | .gpio = nv10_gpio_new, |
49bd8da5 | 610 | .i2c = nv04_i2c_new, |
b7a2bc18 | 611 | .imem = nv40_instmem_new, |
2b700825 | 612 | .mc = nv04_mc_new, |
c9582455 | 613 | .mmu = nv04_mmu_new, |
0a34fb31 | 614 | .pci = nv40_pci_new, |
57113c01 | 615 | .therm = nv40_therm_new, |
31649ecf | 616 | .timer = nv41_timer_new, |
437b2296 | 617 | .volt = nv40_volt_new, |
70aa8670 | 618 | .disp = nv04_disp_new, |
bd70563f | 619 | .dma = nv04_dma_new, |
13de7f46 | 620 | .fifo = nv40_fifo_new, |
c85ee6ca | 621 | .gr = nv40_gr_new, |
7624fc01 | 622 | .mpeg = nv44_mpeg_new, |
97070f23 | 623 | .pm = nv40_pm_new, |
6f41c7c5 | 624 | .sw = nv10_sw_new, |
6cf813fb BS |
625 | }; |
626 | ||
627 | static const struct nvkm_device_chip | |
628 | nv46_chipset = { | |
629 | .name = "G72", | |
46484438 | 630 | .bios = nvkm_bios_new, |
bb23f9d7 | 631 | .bus = nv31_bus_new, |
6625f55c | 632 | .clk = nv40_clk_new, |
151abd44 | 633 | .devinit = nv1a_devinit_new, |
03c8952f | 634 | .fb = nv46_fb_new, |
2ea7249f | 635 | .gpio = nv10_gpio_new, |
49bd8da5 | 636 | .i2c = nv04_i2c_new, |
b7a2bc18 | 637 | .imem = nv40_instmem_new, |
54dcadd5 | 638 | .mc = nv44_mc_new, |
c9582455 | 639 | .mmu = nv44_mmu_new, |
c4266a9c | 640 | .pci = nv46_pci_new, |
57113c01 | 641 | .therm = nv40_therm_new, |
31649ecf | 642 | .timer = nv41_timer_new, |
437b2296 | 643 | .volt = nv40_volt_new, |
70aa8670 | 644 | .disp = nv04_disp_new, |
bd70563f | 645 | .dma = nv04_dma_new, |
13de7f46 | 646 | .fifo = nv40_fifo_new, |
c85ee6ca | 647 | .gr = nv44_gr_new, |
7624fc01 | 648 | .mpeg = nv44_mpeg_new, |
97070f23 | 649 | .pm = nv40_pm_new, |
6f41c7c5 | 650 | .sw = nv10_sw_new, |
6cf813fb BS |
651 | }; |
652 | ||
653 | static const struct nvkm_device_chip | |
654 | nv47_chipset = { | |
655 | .name = "G70", | |
46484438 | 656 | .bios = nvkm_bios_new, |
bb23f9d7 | 657 | .bus = nv31_bus_new, |
6625f55c | 658 | .clk = nv40_clk_new, |
151abd44 | 659 | .devinit = nv1a_devinit_new, |
03c8952f | 660 | .fb = nv47_fb_new, |
2ea7249f | 661 | .gpio = nv10_gpio_new, |
49bd8da5 | 662 | .i2c = nv04_i2c_new, |
b7a2bc18 | 663 | .imem = nv40_instmem_new, |
2b700825 | 664 | .mc = nv04_mc_new, |
c9582455 | 665 | .mmu = nv41_mmu_new, |
0a34fb31 | 666 | .pci = nv40_pci_new, |
57113c01 | 667 | .therm = nv40_therm_new, |
31649ecf | 668 | .timer = nv41_timer_new, |
437b2296 | 669 | .volt = nv40_volt_new, |
70aa8670 | 670 | .disp = nv04_disp_new, |
bd70563f | 671 | .dma = nv04_dma_new, |
13de7f46 | 672 | .fifo = nv40_fifo_new, |
c85ee6ca | 673 | .gr = nv40_gr_new, |
7624fc01 | 674 | .mpeg = nv44_mpeg_new, |
97070f23 | 675 | .pm = nv40_pm_new, |
6f41c7c5 | 676 | .sw = nv10_sw_new, |
6cf813fb BS |
677 | }; |
678 | ||
679 | static const struct nvkm_device_chip | |
680 | nv49_chipset = { | |
681 | .name = "G71", | |
46484438 | 682 | .bios = nvkm_bios_new, |
bb23f9d7 | 683 | .bus = nv31_bus_new, |
6625f55c | 684 | .clk = nv40_clk_new, |
151abd44 | 685 | .devinit = nv1a_devinit_new, |
03c8952f | 686 | .fb = nv49_fb_new, |
2ea7249f | 687 | .gpio = nv10_gpio_new, |
49bd8da5 | 688 | .i2c = nv04_i2c_new, |
b7a2bc18 | 689 | .imem = nv40_instmem_new, |
2b700825 | 690 | .mc = nv04_mc_new, |
c9582455 | 691 | .mmu = nv41_mmu_new, |
0a34fb31 | 692 | .pci = nv40_pci_new, |
57113c01 | 693 | .therm = nv40_therm_new, |
31649ecf | 694 | .timer = nv41_timer_new, |
437b2296 | 695 | .volt = nv40_volt_new, |
70aa8670 | 696 | .disp = nv04_disp_new, |
bd70563f | 697 | .dma = nv04_dma_new, |
13de7f46 | 698 | .fifo = nv40_fifo_new, |
c85ee6ca | 699 | .gr = nv40_gr_new, |
7624fc01 | 700 | .mpeg = nv44_mpeg_new, |
97070f23 | 701 | .pm = nv40_pm_new, |
6f41c7c5 | 702 | .sw = nv10_sw_new, |
6cf813fb BS |
703 | }; |
704 | ||
705 | static const struct nvkm_device_chip | |
706 | nv4a_chipset = { | |
707 | .name = "NV44A", | |
46484438 | 708 | .bios = nvkm_bios_new, |
bb23f9d7 | 709 | .bus = nv31_bus_new, |
6625f55c | 710 | .clk = nv40_clk_new, |
151abd44 | 711 | .devinit = nv1a_devinit_new, |
03c8952f | 712 | .fb = nv44_fb_new, |
2ea7249f | 713 | .gpio = nv10_gpio_new, |
49bd8da5 | 714 | .i2c = nv04_i2c_new, |
b7a2bc18 | 715 | .imem = nv40_instmem_new, |
54dcadd5 | 716 | .mc = nv44_mc_new, |
c9582455 | 717 | .mmu = nv44_mmu_new, |
0a34fb31 | 718 | .pci = nv40_pci_new, |
57113c01 | 719 | .therm = nv40_therm_new, |
31649ecf | 720 | .timer = nv41_timer_new, |
437b2296 | 721 | .volt = nv40_volt_new, |
70aa8670 | 722 | .disp = nv04_disp_new, |
bd70563f | 723 | .dma = nv04_dma_new, |
13de7f46 | 724 | .fifo = nv40_fifo_new, |
c85ee6ca | 725 | .gr = nv44_gr_new, |
7624fc01 | 726 | .mpeg = nv44_mpeg_new, |
97070f23 | 727 | .pm = nv40_pm_new, |
6f41c7c5 | 728 | .sw = nv10_sw_new, |
6cf813fb BS |
729 | }; |
730 | ||
731 | static const struct nvkm_device_chip | |
732 | nv4b_chipset = { | |
733 | .name = "G73", | |
46484438 | 734 | .bios = nvkm_bios_new, |
bb23f9d7 | 735 | .bus = nv31_bus_new, |
6625f55c | 736 | .clk = nv40_clk_new, |
151abd44 | 737 | .devinit = nv1a_devinit_new, |
03c8952f | 738 | .fb = nv49_fb_new, |
2ea7249f | 739 | .gpio = nv10_gpio_new, |
49bd8da5 | 740 | .i2c = nv04_i2c_new, |
b7a2bc18 | 741 | .imem = nv40_instmem_new, |
2b700825 | 742 | .mc = nv04_mc_new, |
c9582455 | 743 | .mmu = nv41_mmu_new, |
0a34fb31 | 744 | .pci = nv40_pci_new, |
57113c01 | 745 | .therm = nv40_therm_new, |
31649ecf | 746 | .timer = nv41_timer_new, |
437b2296 | 747 | .volt = nv40_volt_new, |
70aa8670 | 748 | .disp = nv04_disp_new, |
bd70563f | 749 | .dma = nv04_dma_new, |
13de7f46 | 750 | .fifo = nv40_fifo_new, |
c85ee6ca | 751 | .gr = nv40_gr_new, |
7624fc01 | 752 | .mpeg = nv44_mpeg_new, |
97070f23 | 753 | .pm = nv40_pm_new, |
6f41c7c5 | 754 | .sw = nv10_sw_new, |
6cf813fb BS |
755 | }; |
756 | ||
757 | static const struct nvkm_device_chip | |
758 | nv4c_chipset = { | |
759 | .name = "C61", | |
46484438 | 760 | .bios = nvkm_bios_new, |
bb23f9d7 | 761 | .bus = nv31_bus_new, |
6625f55c | 762 | .clk = nv40_clk_new, |
151abd44 | 763 | .devinit = nv1a_devinit_new, |
03c8952f | 764 | .fb = nv46_fb_new, |
2ea7249f | 765 | .gpio = nv10_gpio_new, |
49bd8da5 | 766 | .i2c = nv04_i2c_new, |
b7a2bc18 | 767 | .imem = nv40_instmem_new, |
2b700825 | 768 | .mc = nv44_mc_new, |
c9582455 | 769 | .mmu = nv44_mmu_new, |
0a34fb31 | 770 | .pci = nv4c_pci_new, |
57113c01 | 771 | .therm = nv40_therm_new, |
31649ecf | 772 | .timer = nv41_timer_new, |
437b2296 | 773 | .volt = nv40_volt_new, |
70aa8670 | 774 | .disp = nv04_disp_new, |
bd70563f | 775 | .dma = nv04_dma_new, |
13de7f46 | 776 | .fifo = nv40_fifo_new, |
c85ee6ca | 777 | .gr = nv44_gr_new, |
7624fc01 | 778 | .mpeg = nv44_mpeg_new, |
97070f23 | 779 | .pm = nv40_pm_new, |
6f41c7c5 | 780 | .sw = nv10_sw_new, |
6cf813fb BS |
781 | }; |
782 | ||
783 | static const struct nvkm_device_chip | |
784 | nv4e_chipset = { | |
785 | .name = "C51", | |
46484438 | 786 | .bios = nvkm_bios_new, |
bb23f9d7 | 787 | .bus = nv31_bus_new, |
6625f55c | 788 | .clk = nv40_clk_new, |
151abd44 | 789 | .devinit = nv1a_devinit_new, |
03c8952f | 790 | .fb = nv4e_fb_new, |
2ea7249f | 791 | .gpio = nv10_gpio_new, |
49bd8da5 | 792 | .i2c = nv4e_i2c_new, |
b7a2bc18 | 793 | .imem = nv40_instmem_new, |
2b700825 | 794 | .mc = nv44_mc_new, |
c9582455 | 795 | .mmu = nv44_mmu_new, |
0a34fb31 | 796 | .pci = nv4c_pci_new, |
57113c01 | 797 | .therm = nv40_therm_new, |
31649ecf | 798 | .timer = nv41_timer_new, |
437b2296 | 799 | .volt = nv40_volt_new, |
70aa8670 | 800 | .disp = nv04_disp_new, |
bd70563f | 801 | .dma = nv04_dma_new, |
13de7f46 | 802 | .fifo = nv40_fifo_new, |
c85ee6ca | 803 | .gr = nv44_gr_new, |
7624fc01 | 804 | .mpeg = nv44_mpeg_new, |
97070f23 | 805 | .pm = nv40_pm_new, |
6f41c7c5 | 806 | .sw = nv10_sw_new, |
6cf813fb BS |
807 | }; |
808 | ||
809 | static const struct nvkm_device_chip | |
810 | nv50_chipset = { | |
811 | .name = "G80", | |
32932281 | 812 | .bar = nv50_bar_new, |
46484438 | 813 | .bios = nvkm_bios_new, |
bb23f9d7 | 814 | .bus = nv50_bus_new, |
6625f55c | 815 | .clk = nv50_clk_new, |
151abd44 | 816 | .devinit = nv50_devinit_new, |
03c8952f | 817 | .fb = nv50_fb_new, |
c5fcafa5 | 818 | .fuse = nv50_fuse_new, |
2ea7249f | 819 | .gpio = nv50_gpio_new, |
49bd8da5 | 820 | .i2c = nv50_i2c_new, |
b7a2bc18 | 821 | .imem = nv50_instmem_new, |
54dcadd5 | 822 | .mc = nv50_mc_new, |
c9582455 | 823 | .mmu = nv50_mmu_new, |
a4f7bd36 | 824 | .mxm = nv50_mxm_new, |
c4266a9c | 825 | .pci = nv46_pci_new, |
57113c01 | 826 | .therm = nv50_therm_new, |
31649ecf | 827 | .timer = nv41_timer_new, |
437b2296 | 828 | .volt = nv40_volt_new, |
70aa8670 | 829 | .disp = nv50_disp_new, |
bd70563f | 830 | .dma = nv50_dma_new, |
13de7f46 | 831 | .fifo = nv50_fifo_new, |
c85ee6ca | 832 | .gr = nv50_gr_new, |
7624fc01 | 833 | .mpeg = nv50_mpeg_new, |
97070f23 | 834 | .pm = nv50_pm_new, |
6f41c7c5 | 835 | .sw = nv50_sw_new, |
6cf813fb BS |
836 | }; |
837 | ||
838 | static const struct nvkm_device_chip | |
839 | nv63_chipset = { | |
840 | .name = "C73", | |
46484438 | 841 | .bios = nvkm_bios_new, |
bb23f9d7 | 842 | .bus = nv31_bus_new, |
6625f55c | 843 | .clk = nv40_clk_new, |
151abd44 | 844 | .devinit = nv1a_devinit_new, |
03c8952f | 845 | .fb = nv46_fb_new, |
2ea7249f | 846 | .gpio = nv10_gpio_new, |
49bd8da5 | 847 | .i2c = nv04_i2c_new, |
b7a2bc18 | 848 | .imem = nv40_instmem_new, |
2b700825 | 849 | .mc = nv44_mc_new, |
c9582455 | 850 | .mmu = nv44_mmu_new, |
0a34fb31 | 851 | .pci = nv4c_pci_new, |
57113c01 | 852 | .therm = nv40_therm_new, |
31649ecf | 853 | .timer = nv41_timer_new, |
437b2296 | 854 | .volt = nv40_volt_new, |
70aa8670 | 855 | .disp = nv04_disp_new, |
bd70563f | 856 | .dma = nv04_dma_new, |
13de7f46 | 857 | .fifo = nv40_fifo_new, |
c85ee6ca | 858 | .gr = nv44_gr_new, |
7624fc01 | 859 | .mpeg = nv44_mpeg_new, |
97070f23 | 860 | .pm = nv40_pm_new, |
6f41c7c5 | 861 | .sw = nv10_sw_new, |
6cf813fb BS |
862 | }; |
863 | ||
864 | static const struct nvkm_device_chip | |
865 | nv67_chipset = { | |
866 | .name = "C67", | |
46484438 | 867 | .bios = nvkm_bios_new, |
bb23f9d7 | 868 | .bus = nv31_bus_new, |
6625f55c | 869 | .clk = nv40_clk_new, |
151abd44 | 870 | .devinit = nv1a_devinit_new, |
03c8952f | 871 | .fb = nv46_fb_new, |
2ea7249f | 872 | .gpio = nv10_gpio_new, |
49bd8da5 | 873 | .i2c = nv04_i2c_new, |
b7a2bc18 | 874 | .imem = nv40_instmem_new, |
2b700825 | 875 | .mc = nv44_mc_new, |
c9582455 | 876 | .mmu = nv44_mmu_new, |
0a34fb31 | 877 | .pci = nv4c_pci_new, |
57113c01 | 878 | .therm = nv40_therm_new, |
31649ecf | 879 | .timer = nv41_timer_new, |
437b2296 | 880 | .volt = nv40_volt_new, |
70aa8670 | 881 | .disp = nv04_disp_new, |
bd70563f | 882 | .dma = nv04_dma_new, |
13de7f46 | 883 | .fifo = nv40_fifo_new, |
c85ee6ca | 884 | .gr = nv44_gr_new, |
7624fc01 | 885 | .mpeg = nv44_mpeg_new, |
97070f23 | 886 | .pm = nv40_pm_new, |
6f41c7c5 | 887 | .sw = nv10_sw_new, |
6cf813fb BS |
888 | }; |
889 | ||
890 | static const struct nvkm_device_chip | |
891 | nv68_chipset = { | |
892 | .name = "C68", | |
46484438 | 893 | .bios = nvkm_bios_new, |
bb23f9d7 | 894 | .bus = nv31_bus_new, |
6625f55c | 895 | .clk = nv40_clk_new, |
151abd44 | 896 | .devinit = nv1a_devinit_new, |
03c8952f | 897 | .fb = nv46_fb_new, |
2ea7249f | 898 | .gpio = nv10_gpio_new, |
49bd8da5 | 899 | .i2c = nv04_i2c_new, |
b7a2bc18 | 900 | .imem = nv40_instmem_new, |
2b700825 | 901 | .mc = nv44_mc_new, |
c9582455 | 902 | .mmu = nv44_mmu_new, |
0a34fb31 | 903 | .pci = nv4c_pci_new, |
57113c01 | 904 | .therm = nv40_therm_new, |
31649ecf | 905 | .timer = nv41_timer_new, |
437b2296 | 906 | .volt = nv40_volt_new, |
70aa8670 | 907 | .disp = nv04_disp_new, |
bd70563f | 908 | .dma = nv04_dma_new, |
13de7f46 | 909 | .fifo = nv40_fifo_new, |
c85ee6ca | 910 | .gr = nv44_gr_new, |
7624fc01 | 911 | .mpeg = nv44_mpeg_new, |
97070f23 | 912 | .pm = nv40_pm_new, |
6f41c7c5 | 913 | .sw = nv10_sw_new, |
6cf813fb BS |
914 | }; |
915 | ||
916 | static const struct nvkm_device_chip | |
917 | nv84_chipset = { | |
918 | .name = "G84", | |
32932281 | 919 | .bar = g84_bar_new, |
46484438 | 920 | .bios = nvkm_bios_new, |
bb23f9d7 | 921 | .bus = nv50_bus_new, |
6625f55c | 922 | .clk = g84_clk_new, |
151abd44 | 923 | .devinit = g84_devinit_new, |
03c8952f | 924 | .fb = g84_fb_new, |
c5fcafa5 | 925 | .fuse = nv50_fuse_new, |
2ea7249f | 926 | .gpio = nv50_gpio_new, |
49bd8da5 | 927 | .i2c = nv50_i2c_new, |
b7a2bc18 | 928 | .imem = nv50_instmem_new, |
54dcadd5 | 929 | .mc = nv50_mc_new, |
c9582455 | 930 | .mmu = nv50_mmu_new, |
a4f7bd36 | 931 | .mxm = nv50_mxm_new, |
3e55b53b | 932 | .pci = g84_pci_new, |
57113c01 | 933 | .therm = g84_therm_new, |
31649ecf | 934 | .timer = nv41_timer_new, |
437b2296 | 935 | .volt = nv40_volt_new, |
98b20c9a | 936 | .bsp = g84_bsp_new, |
14d74aca | 937 | .cipher = g84_cipher_new, |
70aa8670 | 938 | .disp = g84_disp_new, |
bd70563f | 939 | .dma = nv50_dma_new, |
13de7f46 | 940 | .fifo = g84_fifo_new, |
c85ee6ca | 941 | .gr = g84_gr_new, |
7624fc01 | 942 | .mpeg = g84_mpeg_new, |
97070f23 | 943 | .pm = g84_pm_new, |
6f41c7c5 | 944 | .sw = nv50_sw_new, |
98b20c9a | 945 | .vp = g84_vp_new, |
6cf813fb BS |
946 | }; |
947 | ||
948 | static const struct nvkm_device_chip | |
949 | nv86_chipset = { | |
950 | .name = "G86", | |
32932281 | 951 | .bar = g84_bar_new, |
46484438 | 952 | .bios = nvkm_bios_new, |
bb23f9d7 | 953 | .bus = nv50_bus_new, |
6625f55c | 954 | .clk = g84_clk_new, |
151abd44 | 955 | .devinit = g84_devinit_new, |
03c8952f | 956 | .fb = g84_fb_new, |
c5fcafa5 | 957 | .fuse = nv50_fuse_new, |
2ea7249f | 958 | .gpio = nv50_gpio_new, |
49bd8da5 | 959 | .i2c = nv50_i2c_new, |
b7a2bc18 | 960 | .imem = nv50_instmem_new, |
54dcadd5 | 961 | .mc = nv50_mc_new, |
c9582455 | 962 | .mmu = nv50_mmu_new, |
a4f7bd36 | 963 | .mxm = nv50_mxm_new, |
3e55b53b | 964 | .pci = g84_pci_new, |
57113c01 | 965 | .therm = g84_therm_new, |
31649ecf | 966 | .timer = nv41_timer_new, |
437b2296 | 967 | .volt = nv40_volt_new, |
98b20c9a | 968 | .bsp = g84_bsp_new, |
14d74aca | 969 | .cipher = g84_cipher_new, |
70aa8670 | 970 | .disp = g84_disp_new, |
bd70563f | 971 | .dma = nv50_dma_new, |
13de7f46 | 972 | .fifo = g84_fifo_new, |
c85ee6ca | 973 | .gr = g84_gr_new, |
7624fc01 | 974 | .mpeg = g84_mpeg_new, |
97070f23 | 975 | .pm = g84_pm_new, |
6f41c7c5 | 976 | .sw = nv50_sw_new, |
98b20c9a | 977 | .vp = g84_vp_new, |
6cf813fb BS |
978 | }; |
979 | ||
980 | static const struct nvkm_device_chip | |
981 | nv92_chipset = { | |
982 | .name = "G92", | |
32932281 | 983 | .bar = g84_bar_new, |
46484438 | 984 | .bios = nvkm_bios_new, |
bb23f9d7 | 985 | .bus = nv50_bus_new, |
6625f55c | 986 | .clk = g84_clk_new, |
151abd44 | 987 | .devinit = g84_devinit_new, |
03c8952f | 988 | .fb = g84_fb_new, |
c5fcafa5 | 989 | .fuse = nv50_fuse_new, |
2ea7249f | 990 | .gpio = nv50_gpio_new, |
49bd8da5 | 991 | .i2c = nv50_i2c_new, |
b7a2bc18 | 992 | .imem = nv50_instmem_new, |
54dcadd5 | 993 | .mc = nv50_mc_new, |
c9582455 | 994 | .mmu = nv50_mmu_new, |
a4f7bd36 | 995 | .mxm = nv50_mxm_new, |
3e55b53b | 996 | .pci = g84_pci_new, |
57113c01 | 997 | .therm = g84_therm_new, |
31649ecf | 998 | .timer = nv41_timer_new, |
437b2296 | 999 | .volt = nv40_volt_new, |
98b20c9a | 1000 | .bsp = g84_bsp_new, |
14d74aca | 1001 | .cipher = g84_cipher_new, |
70aa8670 | 1002 | .disp = g84_disp_new, |
bd70563f | 1003 | .dma = nv50_dma_new, |
13de7f46 | 1004 | .fifo = g84_fifo_new, |
c85ee6ca | 1005 | .gr = g84_gr_new, |
7624fc01 | 1006 | .mpeg = g84_mpeg_new, |
97070f23 | 1007 | .pm = g84_pm_new, |
6f41c7c5 | 1008 | .sw = nv50_sw_new, |
98b20c9a | 1009 | .vp = g84_vp_new, |
6cf813fb BS |
1010 | }; |
1011 | ||
1012 | static const struct nvkm_device_chip | |
1013 | nv94_chipset = { | |
1014 | .name = "G94", | |
32932281 | 1015 | .bar = g84_bar_new, |
46484438 | 1016 | .bios = nvkm_bios_new, |
bb23f9d7 | 1017 | .bus = g94_bus_new, |
6625f55c | 1018 | .clk = g84_clk_new, |
151abd44 | 1019 | .devinit = g84_devinit_new, |
03c8952f | 1020 | .fb = g84_fb_new, |
c5fcafa5 | 1021 | .fuse = nv50_fuse_new, |
2ea7249f | 1022 | .gpio = g94_gpio_new, |
49bd8da5 | 1023 | .i2c = g94_i2c_new, |
b7a2bc18 | 1024 | .imem = nv50_instmem_new, |
2b700825 | 1025 | .mc = nv50_mc_new, |
c9582455 | 1026 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1027 | .mxm = nv50_mxm_new, |
b31505c4 | 1028 | .pci = g94_pci_new, |
57113c01 | 1029 | .therm = g84_therm_new, |
31649ecf | 1030 | .timer = nv41_timer_new, |
437b2296 | 1031 | .volt = nv40_volt_new, |
98b20c9a | 1032 | .bsp = g84_bsp_new, |
14d74aca | 1033 | .cipher = g84_cipher_new, |
70aa8670 | 1034 | .disp = g94_disp_new, |
bd70563f | 1035 | .dma = nv50_dma_new, |
13de7f46 | 1036 | .fifo = g84_fifo_new, |
c85ee6ca | 1037 | .gr = g84_gr_new, |
7624fc01 | 1038 | .mpeg = g84_mpeg_new, |
97070f23 | 1039 | .pm = g84_pm_new, |
6f41c7c5 | 1040 | .sw = nv50_sw_new, |
98b20c9a | 1041 | .vp = g84_vp_new, |
6cf813fb BS |
1042 | }; |
1043 | ||
1044 | static const struct nvkm_device_chip | |
1045 | nv96_chipset = { | |
1046 | .name = "G96", | |
0a34fb31 | 1047 | .bar = g84_bar_new, |
46484438 | 1048 | .bios = nvkm_bios_new, |
0a34fb31 | 1049 | .bus = g94_bus_new, |
6625f55c | 1050 | .clk = g84_clk_new, |
151abd44 | 1051 | .devinit = g84_devinit_new, |
03c8952f | 1052 | .fb = g84_fb_new, |
0a34fb31 BS |
1053 | .fuse = nv50_fuse_new, |
1054 | .gpio = g94_gpio_new, | |
1055 | .i2c = g94_i2c_new, | |
b7a2bc18 | 1056 | .imem = nv50_instmem_new, |
2b700825 | 1057 | .mc = nv50_mc_new, |
c9582455 | 1058 | .mmu = nv50_mmu_new, |
0a34fb31 | 1059 | .mxm = nv50_mxm_new, |
b31505c4 | 1060 | .pci = g94_pci_new, |
0a34fb31 BS |
1061 | .therm = g84_therm_new, |
1062 | .timer = nv41_timer_new, | |
437b2296 | 1063 | .volt = nv40_volt_new, |
0a34fb31 BS |
1064 | .bsp = g84_bsp_new, |
1065 | .cipher = g84_cipher_new, | |
1066 | .disp = g94_disp_new, | |
bd70563f | 1067 | .dma = nv50_dma_new, |
13de7f46 | 1068 | .fifo = g84_fifo_new, |
c85ee6ca | 1069 | .gr = g84_gr_new, |
7624fc01 | 1070 | .mpeg = g84_mpeg_new, |
97070f23 | 1071 | .pm = g84_pm_new, |
0a34fb31 BS |
1072 | .sw = nv50_sw_new, |
1073 | .vp = g84_vp_new, | |
6cf813fb BS |
1074 | }; |
1075 | ||
1076 | static const struct nvkm_device_chip | |
1077 | nv98_chipset = { | |
1078 | .name = "G98", | |
0a34fb31 | 1079 | .bar = g84_bar_new, |
46484438 | 1080 | .bios = nvkm_bios_new, |
0a34fb31 | 1081 | .bus = g94_bus_new, |
6625f55c | 1082 | .clk = g84_clk_new, |
151abd44 | 1083 | .devinit = g98_devinit_new, |
03c8952f | 1084 | .fb = g84_fb_new, |
0a34fb31 BS |
1085 | .fuse = nv50_fuse_new, |
1086 | .gpio = g94_gpio_new, | |
1087 | .i2c = g94_i2c_new, | |
b7a2bc18 | 1088 | .imem = nv50_instmem_new, |
0a34fb31 | 1089 | .mc = g98_mc_new, |
c9582455 | 1090 | .mmu = nv50_mmu_new, |
0a34fb31 | 1091 | .mxm = nv50_mxm_new, |
b31505c4 | 1092 | .pci = g94_pci_new, |
0a34fb31 BS |
1093 | .therm = g84_therm_new, |
1094 | .timer = nv41_timer_new, | |
437b2296 | 1095 | .volt = nv40_volt_new, |
0a34fb31 | 1096 | .disp = g94_disp_new, |
bd70563f | 1097 | .dma = nv50_dma_new, |
13de7f46 | 1098 | .fifo = g84_fifo_new, |
c85ee6ca | 1099 | .gr = g84_gr_new, |
53e60da4 | 1100 | .mspdec = g98_mspdec_new, |
53e60da4 | 1101 | .msppp = g98_msppp_new, |
0a34fb31 | 1102 | .msvld = g98_msvld_new, |
97070f23 | 1103 | .pm = g84_pm_new, |
0a34fb31 BS |
1104 | .sec = g98_sec_new, |
1105 | .sw = nv50_sw_new, | |
6cf813fb BS |
1106 | }; |
1107 | ||
1108 | static const struct nvkm_device_chip | |
1109 | nva0_chipset = { | |
1110 | .name = "GT200", | |
32932281 | 1111 | .bar = g84_bar_new, |
46484438 | 1112 | .bios = nvkm_bios_new, |
bb23f9d7 | 1113 | .bus = g94_bus_new, |
6625f55c | 1114 | .clk = g84_clk_new, |
151abd44 | 1115 | .devinit = g84_devinit_new, |
03c8952f | 1116 | .fb = g84_fb_new, |
c5fcafa5 | 1117 | .fuse = nv50_fuse_new, |
2ea7249f | 1118 | .gpio = g94_gpio_new, |
49bd8da5 | 1119 | .i2c = nv50_i2c_new, |
b7a2bc18 | 1120 | .imem = nv50_instmem_new, |
54dcadd5 | 1121 | .mc = g98_mc_new, |
c9582455 | 1122 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1123 | .mxm = nv50_mxm_new, |
b31505c4 | 1124 | .pci = g94_pci_new, |
57113c01 | 1125 | .therm = g84_therm_new, |
31649ecf | 1126 | .timer = nv41_timer_new, |
437b2296 | 1127 | .volt = nv40_volt_new, |
98b20c9a | 1128 | .bsp = g84_bsp_new, |
14d74aca | 1129 | .cipher = g84_cipher_new, |
70aa8670 | 1130 | .disp = gt200_disp_new, |
bd70563f | 1131 | .dma = nv50_dma_new, |
13de7f46 | 1132 | .fifo = g84_fifo_new, |
c85ee6ca | 1133 | .gr = gt200_gr_new, |
7624fc01 | 1134 | .mpeg = g84_mpeg_new, |
97070f23 | 1135 | .pm = gt200_pm_new, |
6f41c7c5 | 1136 | .sw = nv50_sw_new, |
98b20c9a | 1137 | .vp = g84_vp_new, |
6cf813fb BS |
1138 | }; |
1139 | ||
1140 | static const struct nvkm_device_chip | |
1141 | nva3_chipset = { | |
1142 | .name = "GT215", | |
32932281 | 1143 | .bar = g84_bar_new, |
46484438 | 1144 | .bios = nvkm_bios_new, |
bb23f9d7 | 1145 | .bus = g94_bus_new, |
6625f55c | 1146 | .clk = gt215_clk_new, |
151abd44 | 1147 | .devinit = gt215_devinit_new, |
03c8952f | 1148 | .fb = gt215_fb_new, |
c5fcafa5 | 1149 | .fuse = nv50_fuse_new, |
2ea7249f | 1150 | .gpio = g94_gpio_new, |
49bd8da5 | 1151 | .i2c = g94_i2c_new, |
b7a2bc18 | 1152 | .imem = nv50_instmem_new, |
54dcadd5 | 1153 | .mc = g98_mc_new, |
c9582455 | 1154 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1155 | .mxm = nv50_mxm_new, |
b31505c4 | 1156 | .pci = g94_pci_new, |
e2ca4e7d | 1157 | .pmu = gt215_pmu_new, |
57113c01 | 1158 | .therm = gt215_therm_new, |
31649ecf | 1159 | .timer = nv41_timer_new, |
437b2296 | 1160 | .volt = nv40_volt_new, |
53e60da4 | 1161 | .ce[0] = gt215_ce_new, |
70aa8670 | 1162 | .disp = gt215_disp_new, |
bd70563f | 1163 | .dma = nv50_dma_new, |
13de7f46 | 1164 | .fifo = g84_fifo_new, |
c85ee6ca | 1165 | .gr = gt215_gr_new, |
7624fc01 | 1166 | .mpeg = g84_mpeg_new, |
53e60da4 BS |
1167 | .mspdec = gt215_mspdec_new, |
1168 | .msppp = gt215_msppp_new, | |
1169 | .msvld = gt215_msvld_new, | |
97070f23 | 1170 | .pm = gt215_pm_new, |
6f41c7c5 | 1171 | .sw = nv50_sw_new, |
6cf813fb BS |
1172 | }; |
1173 | ||
1174 | static const struct nvkm_device_chip | |
1175 | nva5_chipset = { | |
1176 | .name = "GT216", | |
32932281 | 1177 | .bar = g84_bar_new, |
46484438 | 1178 | .bios = nvkm_bios_new, |
bb23f9d7 | 1179 | .bus = g94_bus_new, |
6625f55c | 1180 | .clk = gt215_clk_new, |
151abd44 | 1181 | .devinit = gt215_devinit_new, |
03c8952f | 1182 | .fb = gt215_fb_new, |
c5fcafa5 | 1183 | .fuse = nv50_fuse_new, |
2ea7249f | 1184 | .gpio = g94_gpio_new, |
49bd8da5 | 1185 | .i2c = g94_i2c_new, |
b7a2bc18 | 1186 | .imem = nv50_instmem_new, |
54dcadd5 | 1187 | .mc = g98_mc_new, |
c9582455 | 1188 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1189 | .mxm = nv50_mxm_new, |
b31505c4 | 1190 | .pci = g94_pci_new, |
e2ca4e7d | 1191 | .pmu = gt215_pmu_new, |
57113c01 | 1192 | .therm = gt215_therm_new, |
31649ecf | 1193 | .timer = nv41_timer_new, |
437b2296 | 1194 | .volt = nv40_volt_new, |
53e60da4 | 1195 | .ce[0] = gt215_ce_new, |
70aa8670 | 1196 | .disp = gt215_disp_new, |
bd70563f | 1197 | .dma = nv50_dma_new, |
13de7f46 | 1198 | .fifo = g84_fifo_new, |
c85ee6ca | 1199 | .gr = gt215_gr_new, |
53e60da4 BS |
1200 | .mspdec = gt215_mspdec_new, |
1201 | .msppp = gt215_msppp_new, | |
1202 | .msvld = gt215_msvld_new, | |
97070f23 | 1203 | .pm = gt215_pm_new, |
6f41c7c5 | 1204 | .sw = nv50_sw_new, |
6cf813fb BS |
1205 | }; |
1206 | ||
1207 | static const struct nvkm_device_chip | |
1208 | nva8_chipset = { | |
1209 | .name = "GT218", | |
32932281 | 1210 | .bar = g84_bar_new, |
46484438 | 1211 | .bios = nvkm_bios_new, |
bb23f9d7 | 1212 | .bus = g94_bus_new, |
6625f55c | 1213 | .clk = gt215_clk_new, |
151abd44 | 1214 | .devinit = gt215_devinit_new, |
03c8952f | 1215 | .fb = gt215_fb_new, |
c5fcafa5 | 1216 | .fuse = nv50_fuse_new, |
2ea7249f | 1217 | .gpio = g94_gpio_new, |
49bd8da5 | 1218 | .i2c = g94_i2c_new, |
b7a2bc18 | 1219 | .imem = nv50_instmem_new, |
54dcadd5 | 1220 | .mc = g98_mc_new, |
c9582455 | 1221 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1222 | .mxm = nv50_mxm_new, |
b31505c4 | 1223 | .pci = g94_pci_new, |
e2ca4e7d | 1224 | .pmu = gt215_pmu_new, |
57113c01 | 1225 | .therm = gt215_therm_new, |
31649ecf | 1226 | .timer = nv41_timer_new, |
437b2296 | 1227 | .volt = nv40_volt_new, |
53e60da4 | 1228 | .ce[0] = gt215_ce_new, |
70aa8670 | 1229 | .disp = gt215_disp_new, |
bd70563f | 1230 | .dma = nv50_dma_new, |
13de7f46 | 1231 | .fifo = g84_fifo_new, |
c85ee6ca | 1232 | .gr = gt215_gr_new, |
53e60da4 BS |
1233 | .mspdec = gt215_mspdec_new, |
1234 | .msppp = gt215_msppp_new, | |
1235 | .msvld = gt215_msvld_new, | |
97070f23 | 1236 | .pm = gt215_pm_new, |
6f41c7c5 | 1237 | .sw = nv50_sw_new, |
6cf813fb BS |
1238 | }; |
1239 | ||
1240 | static const struct nvkm_device_chip | |
1241 | nvaa_chipset = { | |
1242 | .name = "MCP77/MCP78", | |
32932281 | 1243 | .bar = g84_bar_new, |
46484438 | 1244 | .bios = nvkm_bios_new, |
bb23f9d7 | 1245 | .bus = g94_bus_new, |
6625f55c | 1246 | .clk = mcp77_clk_new, |
151abd44 | 1247 | .devinit = g98_devinit_new, |
03c8952f | 1248 | .fb = mcp77_fb_new, |
c5fcafa5 | 1249 | .fuse = nv50_fuse_new, |
2ea7249f | 1250 | .gpio = g94_gpio_new, |
49bd8da5 | 1251 | .i2c = g94_i2c_new, |
b7a2bc18 | 1252 | .imem = nv50_instmem_new, |
54dcadd5 | 1253 | .mc = g98_mc_new, |
c9582455 | 1254 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1255 | .mxm = nv50_mxm_new, |
b31505c4 | 1256 | .pci = g94_pci_new, |
57113c01 | 1257 | .therm = g84_therm_new, |
31649ecf | 1258 | .timer = nv41_timer_new, |
437b2296 | 1259 | .volt = nv40_volt_new, |
70aa8670 | 1260 | .disp = g94_disp_new, |
bd70563f | 1261 | .dma = nv50_dma_new, |
13de7f46 | 1262 | .fifo = g84_fifo_new, |
c85ee6ca | 1263 | .gr = gt200_gr_new, |
53e60da4 BS |
1264 | .mspdec = g98_mspdec_new, |
1265 | .msppp = g98_msppp_new, | |
1266 | .msvld = g98_msvld_new, | |
97070f23 | 1267 | .pm = g84_pm_new, |
53e60da4 | 1268 | .sec = g98_sec_new, |
6f41c7c5 | 1269 | .sw = nv50_sw_new, |
6cf813fb BS |
1270 | }; |
1271 | ||
1272 | static const struct nvkm_device_chip | |
1273 | nvac_chipset = { | |
1274 | .name = "MCP79/MCP7A", | |
32932281 | 1275 | .bar = g84_bar_new, |
46484438 | 1276 | .bios = nvkm_bios_new, |
bb23f9d7 | 1277 | .bus = g94_bus_new, |
6625f55c | 1278 | .clk = mcp77_clk_new, |
151abd44 | 1279 | .devinit = g98_devinit_new, |
03c8952f | 1280 | .fb = mcp77_fb_new, |
c5fcafa5 | 1281 | .fuse = nv50_fuse_new, |
2ea7249f | 1282 | .gpio = g94_gpio_new, |
49bd8da5 | 1283 | .i2c = g94_i2c_new, |
b7a2bc18 | 1284 | .imem = nv50_instmem_new, |
54dcadd5 | 1285 | .mc = g98_mc_new, |
c9582455 | 1286 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1287 | .mxm = nv50_mxm_new, |
b31505c4 | 1288 | .pci = g94_pci_new, |
57113c01 | 1289 | .therm = g84_therm_new, |
31649ecf | 1290 | .timer = nv41_timer_new, |
437b2296 | 1291 | .volt = nv40_volt_new, |
70aa8670 | 1292 | .disp = g94_disp_new, |
bd70563f | 1293 | .dma = nv50_dma_new, |
13de7f46 | 1294 | .fifo = g84_fifo_new, |
c85ee6ca | 1295 | .gr = mcp79_gr_new, |
53e60da4 BS |
1296 | .mspdec = g98_mspdec_new, |
1297 | .msppp = g98_msppp_new, | |
1298 | .msvld = g98_msvld_new, | |
97070f23 | 1299 | .pm = g84_pm_new, |
53e60da4 | 1300 | .sec = g98_sec_new, |
6f41c7c5 | 1301 | .sw = nv50_sw_new, |
6cf813fb BS |
1302 | }; |
1303 | ||
1304 | static const struct nvkm_device_chip | |
1305 | nvaf_chipset = { | |
1306 | .name = "MCP89", | |
32932281 | 1307 | .bar = g84_bar_new, |
46484438 | 1308 | .bios = nvkm_bios_new, |
bb23f9d7 | 1309 | .bus = g94_bus_new, |
6625f55c | 1310 | .clk = gt215_clk_new, |
151abd44 | 1311 | .devinit = mcp89_devinit_new, |
03c8952f | 1312 | .fb = mcp89_fb_new, |
c5fcafa5 | 1313 | .fuse = nv50_fuse_new, |
2ea7249f | 1314 | .gpio = g94_gpio_new, |
49bd8da5 | 1315 | .i2c = g94_i2c_new, |
b7a2bc18 | 1316 | .imem = nv50_instmem_new, |
54dcadd5 | 1317 | .mc = g98_mc_new, |
c9582455 | 1318 | .mmu = nv50_mmu_new, |
a4f7bd36 | 1319 | .mxm = nv50_mxm_new, |
b31505c4 | 1320 | .pci = g94_pci_new, |
e2ca4e7d | 1321 | .pmu = gt215_pmu_new, |
57113c01 | 1322 | .therm = gt215_therm_new, |
31649ecf | 1323 | .timer = nv41_timer_new, |
437b2296 | 1324 | .volt = nv40_volt_new, |
53e60da4 | 1325 | .ce[0] = gt215_ce_new, |
70aa8670 | 1326 | .disp = gt215_disp_new, |
bd70563f | 1327 | .dma = nv50_dma_new, |
13de7f46 | 1328 | .fifo = g84_fifo_new, |
c85ee6ca | 1329 | .gr = mcp89_gr_new, |
53e60da4 BS |
1330 | .mspdec = gt215_mspdec_new, |
1331 | .msppp = gt215_msppp_new, | |
1332 | .msvld = mcp89_msvld_new, | |
97070f23 | 1333 | .pm = gt215_pm_new, |
6f41c7c5 | 1334 | .sw = nv50_sw_new, |
6cf813fb BS |
1335 | }; |
1336 | ||
1337 | static const struct nvkm_device_chip | |
1338 | nvc0_chipset = { | |
1339 | .name = "GF100", | |
32932281 | 1340 | .bar = gf100_bar_new, |
46484438 | 1341 | .bios = nvkm_bios_new, |
bb23f9d7 | 1342 | .bus = gf100_bus_new, |
6625f55c | 1343 | .clk = gf100_clk_new, |
151abd44 | 1344 | .devinit = gf100_devinit_new, |
03c8952f | 1345 | .fb = gf100_fb_new, |
c5fcafa5 | 1346 | .fuse = gf100_fuse_new, |
2ea7249f | 1347 | .gpio = g94_gpio_new, |
49bd8da5 | 1348 | .i2c = g94_i2c_new, |
551d3417 | 1349 | .ibus = gf100_ibus_new, |
b71c0892 | 1350 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1351 | .imem = nv50_instmem_new, |
70bc7182 | 1352 | .ltc = gf100_ltc_new, |
54dcadd5 | 1353 | .mc = gf100_mc_new, |
c9582455 | 1354 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1355 | .mxm = nv50_mxm_new, |
0a34fb31 | 1356 | .pci = gf100_pci_new, |
e2ca4e7d | 1357 | .pmu = gf100_pmu_new, |
57113c01 | 1358 | .therm = gt215_therm_new, |
31649ecf | 1359 | .timer = nv41_timer_new, |
437b2296 | 1360 | .volt = nv40_volt_new, |
53e60da4 BS |
1361 | .ce[0] = gf100_ce_new, |
1362 | .ce[1] = gf100_ce_new, | |
70aa8670 | 1363 | .disp = gt215_disp_new, |
bd70563f | 1364 | .dma = gf100_dma_new, |
13de7f46 | 1365 | .fifo = gf100_fifo_new, |
c85ee6ca | 1366 | .gr = gf100_gr_new, |
53e60da4 BS |
1367 | .mspdec = gf100_mspdec_new, |
1368 | .msppp = gf100_msppp_new, | |
1369 | .msvld = gf100_msvld_new, | |
97070f23 | 1370 | .pm = gf100_pm_new, |
6f41c7c5 | 1371 | .sw = gf100_sw_new, |
6cf813fb BS |
1372 | }; |
1373 | ||
1374 | static const struct nvkm_device_chip | |
1375 | nvc1_chipset = { | |
1376 | .name = "GF108", | |
32932281 | 1377 | .bar = gf100_bar_new, |
46484438 | 1378 | .bios = nvkm_bios_new, |
bb23f9d7 | 1379 | .bus = gf100_bus_new, |
6625f55c | 1380 | .clk = gf100_clk_new, |
151abd44 | 1381 | .devinit = gf100_devinit_new, |
03c8952f | 1382 | .fb = gf100_fb_new, |
c5fcafa5 | 1383 | .fuse = gf100_fuse_new, |
2ea7249f | 1384 | .gpio = g94_gpio_new, |
49bd8da5 | 1385 | .i2c = g94_i2c_new, |
551d3417 | 1386 | .ibus = gf100_ibus_new, |
b71c0892 | 1387 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1388 | .imem = nv50_instmem_new, |
70bc7182 | 1389 | .ltc = gf100_ltc_new, |
2b700825 | 1390 | .mc = gf100_mc_new, |
c9582455 | 1391 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1392 | .mxm = nv50_mxm_new, |
bec4961e | 1393 | .pci = gf106_pci_new, |
e2ca4e7d | 1394 | .pmu = gf100_pmu_new, |
57113c01 | 1395 | .therm = gt215_therm_new, |
31649ecf | 1396 | .timer = nv41_timer_new, |
437b2296 | 1397 | .volt = nv40_volt_new, |
53e60da4 | 1398 | .ce[0] = gf100_ce_new, |
70aa8670 | 1399 | .disp = gt215_disp_new, |
bd70563f | 1400 | .dma = gf100_dma_new, |
13de7f46 | 1401 | .fifo = gf100_fifo_new, |
c85ee6ca | 1402 | .gr = gf108_gr_new, |
53e60da4 BS |
1403 | .mspdec = gf100_mspdec_new, |
1404 | .msppp = gf100_msppp_new, | |
1405 | .msvld = gf100_msvld_new, | |
97070f23 | 1406 | .pm = gf108_pm_new, |
6f41c7c5 | 1407 | .sw = gf100_sw_new, |
6cf813fb BS |
1408 | }; |
1409 | ||
1410 | static const struct nvkm_device_chip | |
1411 | nvc3_chipset = { | |
1412 | .name = "GF106", | |
32932281 | 1413 | .bar = gf100_bar_new, |
46484438 | 1414 | .bios = nvkm_bios_new, |
bb23f9d7 | 1415 | .bus = gf100_bus_new, |
6625f55c | 1416 | .clk = gf100_clk_new, |
151abd44 | 1417 | .devinit = gf100_devinit_new, |
03c8952f | 1418 | .fb = gf100_fb_new, |
c5fcafa5 | 1419 | .fuse = gf100_fuse_new, |
2ea7249f | 1420 | .gpio = g94_gpio_new, |
49bd8da5 | 1421 | .i2c = g94_i2c_new, |
551d3417 | 1422 | .ibus = gf100_ibus_new, |
b71c0892 | 1423 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1424 | .imem = nv50_instmem_new, |
70bc7182 | 1425 | .ltc = gf100_ltc_new, |
2b700825 | 1426 | .mc = gf100_mc_new, |
c9582455 | 1427 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1428 | .mxm = nv50_mxm_new, |
bec4961e | 1429 | .pci = gf106_pci_new, |
e2ca4e7d | 1430 | .pmu = gf100_pmu_new, |
57113c01 | 1431 | .therm = gt215_therm_new, |
31649ecf | 1432 | .timer = nv41_timer_new, |
437b2296 | 1433 | .volt = nv40_volt_new, |
53e60da4 | 1434 | .ce[0] = gf100_ce_new, |
70aa8670 | 1435 | .disp = gt215_disp_new, |
bd70563f | 1436 | .dma = gf100_dma_new, |
13de7f46 | 1437 | .fifo = gf100_fifo_new, |
c85ee6ca | 1438 | .gr = gf104_gr_new, |
53e60da4 BS |
1439 | .mspdec = gf100_mspdec_new, |
1440 | .msppp = gf100_msppp_new, | |
1441 | .msvld = gf100_msvld_new, | |
97070f23 | 1442 | .pm = gf100_pm_new, |
6f41c7c5 | 1443 | .sw = gf100_sw_new, |
6cf813fb BS |
1444 | }; |
1445 | ||
1446 | static const struct nvkm_device_chip | |
1447 | nvc4_chipset = { | |
1448 | .name = "GF104", | |
32932281 | 1449 | .bar = gf100_bar_new, |
46484438 | 1450 | .bios = nvkm_bios_new, |
bb23f9d7 | 1451 | .bus = gf100_bus_new, |
6625f55c | 1452 | .clk = gf100_clk_new, |
151abd44 | 1453 | .devinit = gf100_devinit_new, |
03c8952f | 1454 | .fb = gf100_fb_new, |
c5fcafa5 | 1455 | .fuse = gf100_fuse_new, |
2ea7249f | 1456 | .gpio = g94_gpio_new, |
49bd8da5 | 1457 | .i2c = g94_i2c_new, |
551d3417 | 1458 | .ibus = gf100_ibus_new, |
b71c0892 | 1459 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1460 | .imem = nv50_instmem_new, |
70bc7182 | 1461 | .ltc = gf100_ltc_new, |
54dcadd5 | 1462 | .mc = gf100_mc_new, |
c9582455 | 1463 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1464 | .mxm = nv50_mxm_new, |
0a34fb31 | 1465 | .pci = gf100_pci_new, |
e2ca4e7d | 1466 | .pmu = gf100_pmu_new, |
57113c01 | 1467 | .therm = gt215_therm_new, |
31649ecf | 1468 | .timer = nv41_timer_new, |
437b2296 | 1469 | .volt = nv40_volt_new, |
53e60da4 BS |
1470 | .ce[0] = gf100_ce_new, |
1471 | .ce[1] = gf100_ce_new, | |
70aa8670 | 1472 | .disp = gt215_disp_new, |
bd70563f | 1473 | .dma = gf100_dma_new, |
13de7f46 | 1474 | .fifo = gf100_fifo_new, |
c85ee6ca | 1475 | .gr = gf104_gr_new, |
53e60da4 BS |
1476 | .mspdec = gf100_mspdec_new, |
1477 | .msppp = gf100_msppp_new, | |
1478 | .msvld = gf100_msvld_new, | |
97070f23 | 1479 | .pm = gf100_pm_new, |
6f41c7c5 | 1480 | .sw = gf100_sw_new, |
6cf813fb BS |
1481 | }; |
1482 | ||
1483 | static const struct nvkm_device_chip | |
1484 | nvc8_chipset = { | |
1485 | .name = "GF110", | |
32932281 | 1486 | .bar = gf100_bar_new, |
46484438 | 1487 | .bios = nvkm_bios_new, |
bb23f9d7 | 1488 | .bus = gf100_bus_new, |
6625f55c | 1489 | .clk = gf100_clk_new, |
151abd44 | 1490 | .devinit = gf100_devinit_new, |
03c8952f | 1491 | .fb = gf100_fb_new, |
c5fcafa5 | 1492 | .fuse = gf100_fuse_new, |
2ea7249f | 1493 | .gpio = g94_gpio_new, |
49bd8da5 | 1494 | .i2c = g94_i2c_new, |
551d3417 | 1495 | .ibus = gf100_ibus_new, |
b71c0892 | 1496 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1497 | .imem = nv50_instmem_new, |
70bc7182 | 1498 | .ltc = gf100_ltc_new, |
54dcadd5 | 1499 | .mc = gf100_mc_new, |
c9582455 | 1500 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1501 | .mxm = nv50_mxm_new, |
0a34fb31 | 1502 | .pci = gf100_pci_new, |
e2ca4e7d | 1503 | .pmu = gf100_pmu_new, |
57113c01 | 1504 | .therm = gt215_therm_new, |
31649ecf | 1505 | .timer = nv41_timer_new, |
437b2296 | 1506 | .volt = nv40_volt_new, |
53e60da4 BS |
1507 | .ce[0] = gf100_ce_new, |
1508 | .ce[1] = gf100_ce_new, | |
70aa8670 | 1509 | .disp = gt215_disp_new, |
bd70563f | 1510 | .dma = gf100_dma_new, |
13de7f46 | 1511 | .fifo = gf100_fifo_new, |
c85ee6ca | 1512 | .gr = gf110_gr_new, |
53e60da4 BS |
1513 | .mspdec = gf100_mspdec_new, |
1514 | .msppp = gf100_msppp_new, | |
1515 | .msvld = gf100_msvld_new, | |
97070f23 | 1516 | .pm = gf100_pm_new, |
6f41c7c5 | 1517 | .sw = gf100_sw_new, |
6cf813fb BS |
1518 | }; |
1519 | ||
1520 | static const struct nvkm_device_chip | |
1521 | nvce_chipset = { | |
1522 | .name = "GF114", | |
32932281 | 1523 | .bar = gf100_bar_new, |
46484438 | 1524 | .bios = nvkm_bios_new, |
bb23f9d7 | 1525 | .bus = gf100_bus_new, |
6625f55c | 1526 | .clk = gf100_clk_new, |
151abd44 | 1527 | .devinit = gf100_devinit_new, |
03c8952f | 1528 | .fb = gf100_fb_new, |
c5fcafa5 | 1529 | .fuse = gf100_fuse_new, |
2ea7249f | 1530 | .gpio = g94_gpio_new, |
49bd8da5 | 1531 | .i2c = g94_i2c_new, |
551d3417 | 1532 | .ibus = gf100_ibus_new, |
b71c0892 | 1533 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1534 | .imem = nv50_instmem_new, |
70bc7182 | 1535 | .ltc = gf100_ltc_new, |
54dcadd5 | 1536 | .mc = gf100_mc_new, |
c9582455 | 1537 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1538 | .mxm = nv50_mxm_new, |
0a34fb31 | 1539 | .pci = gf100_pci_new, |
e2ca4e7d | 1540 | .pmu = gf100_pmu_new, |
57113c01 | 1541 | .therm = gt215_therm_new, |
31649ecf | 1542 | .timer = nv41_timer_new, |
437b2296 | 1543 | .volt = nv40_volt_new, |
53e60da4 BS |
1544 | .ce[0] = gf100_ce_new, |
1545 | .ce[1] = gf100_ce_new, | |
70aa8670 | 1546 | .disp = gt215_disp_new, |
bd70563f | 1547 | .dma = gf100_dma_new, |
13de7f46 | 1548 | .fifo = gf100_fifo_new, |
c85ee6ca | 1549 | .gr = gf104_gr_new, |
53e60da4 BS |
1550 | .mspdec = gf100_mspdec_new, |
1551 | .msppp = gf100_msppp_new, | |
1552 | .msvld = gf100_msvld_new, | |
97070f23 | 1553 | .pm = gf100_pm_new, |
6f41c7c5 | 1554 | .sw = gf100_sw_new, |
6cf813fb BS |
1555 | }; |
1556 | ||
1557 | static const struct nvkm_device_chip | |
1558 | nvcf_chipset = { | |
1559 | .name = "GF116", | |
32932281 | 1560 | .bar = gf100_bar_new, |
46484438 | 1561 | .bios = nvkm_bios_new, |
bb23f9d7 | 1562 | .bus = gf100_bus_new, |
6625f55c | 1563 | .clk = gf100_clk_new, |
151abd44 | 1564 | .devinit = gf100_devinit_new, |
03c8952f | 1565 | .fb = gf100_fb_new, |
c5fcafa5 | 1566 | .fuse = gf100_fuse_new, |
2ea7249f | 1567 | .gpio = g94_gpio_new, |
49bd8da5 | 1568 | .i2c = g94_i2c_new, |
551d3417 | 1569 | .ibus = gf100_ibus_new, |
b71c0892 | 1570 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1571 | .imem = nv50_instmem_new, |
70bc7182 | 1572 | .ltc = gf100_ltc_new, |
2b700825 | 1573 | .mc = gf100_mc_new, |
c9582455 | 1574 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1575 | .mxm = nv50_mxm_new, |
bec4961e | 1576 | .pci = gf106_pci_new, |
e2ca4e7d | 1577 | .pmu = gf100_pmu_new, |
57113c01 | 1578 | .therm = gt215_therm_new, |
31649ecf | 1579 | .timer = nv41_timer_new, |
437b2296 | 1580 | .volt = nv40_volt_new, |
53e60da4 | 1581 | .ce[0] = gf100_ce_new, |
70aa8670 | 1582 | .disp = gt215_disp_new, |
bd70563f | 1583 | .dma = gf100_dma_new, |
13de7f46 | 1584 | .fifo = gf100_fifo_new, |
c85ee6ca | 1585 | .gr = gf104_gr_new, |
53e60da4 BS |
1586 | .mspdec = gf100_mspdec_new, |
1587 | .msppp = gf100_msppp_new, | |
1588 | .msvld = gf100_msvld_new, | |
97070f23 | 1589 | .pm = gf100_pm_new, |
6f41c7c5 | 1590 | .sw = gf100_sw_new, |
6cf813fb BS |
1591 | }; |
1592 | ||
1593 | static const struct nvkm_device_chip | |
1594 | nvd7_chipset = { | |
1595 | .name = "GF117", | |
32932281 | 1596 | .bar = gf100_bar_new, |
46484438 | 1597 | .bios = nvkm_bios_new, |
bb23f9d7 | 1598 | .bus = gf100_bus_new, |
6625f55c | 1599 | .clk = gf100_clk_new, |
151abd44 | 1600 | .devinit = gf100_devinit_new, |
03c8952f | 1601 | .fb = gf100_fb_new, |
c5fcafa5 | 1602 | .fuse = gf100_fuse_new, |
2ea7249f | 1603 | .gpio = gf119_gpio_new, |
49bd8da5 | 1604 | .i2c = gf117_i2c_new, |
b6afa265 | 1605 | .ibus = gf117_ibus_new, |
b71c0892 | 1606 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1607 | .imem = nv50_instmem_new, |
70bc7182 | 1608 | .ltc = gf100_ltc_new, |
2b700825 | 1609 | .mc = gf100_mc_new, |
c9582455 | 1610 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1611 | .mxm = nv50_mxm_new, |
bec4961e | 1612 | .pci = gf106_pci_new, |
57113c01 | 1613 | .therm = gf119_therm_new, |
31649ecf | 1614 | .timer = nv41_timer_new, |
53e60da4 | 1615 | .ce[0] = gf100_ce_new, |
70aa8670 | 1616 | .disp = gf119_disp_new, |
bd70563f | 1617 | .dma = gf119_dma_new, |
13de7f46 | 1618 | .fifo = gf100_fifo_new, |
c85ee6ca | 1619 | .gr = gf117_gr_new, |
53e60da4 BS |
1620 | .mspdec = gf100_mspdec_new, |
1621 | .msppp = gf100_msppp_new, | |
1622 | .msvld = gf100_msvld_new, | |
97070f23 | 1623 | .pm = gf117_pm_new, |
6f41c7c5 | 1624 | .sw = gf100_sw_new, |
6cf813fb BS |
1625 | }; |
1626 | ||
1627 | static const struct nvkm_device_chip | |
1628 | nvd9_chipset = { | |
1629 | .name = "GF119", | |
32932281 | 1630 | .bar = gf100_bar_new, |
46484438 | 1631 | .bios = nvkm_bios_new, |
bb23f9d7 | 1632 | .bus = gf100_bus_new, |
6625f55c | 1633 | .clk = gf100_clk_new, |
151abd44 | 1634 | .devinit = gf100_devinit_new, |
03c8952f | 1635 | .fb = gf100_fb_new, |
c5fcafa5 | 1636 | .fuse = gf100_fuse_new, |
2ea7249f | 1637 | .gpio = gf119_gpio_new, |
49bd8da5 | 1638 | .i2c = gf119_i2c_new, |
b6afa265 | 1639 | .ibus = gf117_ibus_new, |
b71c0892 | 1640 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1641 | .imem = nv50_instmem_new, |
70bc7182 | 1642 | .ltc = gf100_ltc_new, |
2b700825 | 1643 | .mc = gf100_mc_new, |
c9582455 | 1644 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1645 | .mxm = nv50_mxm_new, |
bec4961e | 1646 | .pci = gf106_pci_new, |
e2ca4e7d | 1647 | .pmu = gf119_pmu_new, |
57113c01 | 1648 | .therm = gf119_therm_new, |
31649ecf | 1649 | .timer = nv41_timer_new, |
437b2296 | 1650 | .volt = nv40_volt_new, |
53e60da4 | 1651 | .ce[0] = gf100_ce_new, |
70aa8670 | 1652 | .disp = gf119_disp_new, |
bd70563f | 1653 | .dma = gf119_dma_new, |
13de7f46 | 1654 | .fifo = gf100_fifo_new, |
c85ee6ca | 1655 | .gr = gf119_gr_new, |
53e60da4 BS |
1656 | .mspdec = gf100_mspdec_new, |
1657 | .msppp = gf100_msppp_new, | |
1658 | .msvld = gf100_msvld_new, | |
97070f23 | 1659 | .pm = gf117_pm_new, |
6f41c7c5 | 1660 | .sw = gf100_sw_new, |
6cf813fb BS |
1661 | }; |
1662 | ||
1663 | static const struct nvkm_device_chip | |
1664 | nve4_chipset = { | |
1665 | .name = "GK104", | |
32932281 | 1666 | .bar = gf100_bar_new, |
46484438 | 1667 | .bios = nvkm_bios_new, |
bb23f9d7 | 1668 | .bus = gf100_bus_new, |
6625f55c | 1669 | .clk = gk104_clk_new, |
151abd44 | 1670 | .devinit = gf100_devinit_new, |
03c8952f | 1671 | .fb = gk104_fb_new, |
c5fcafa5 | 1672 | .fuse = gf100_fuse_new, |
2ea7249f | 1673 | .gpio = gk104_gpio_new, |
49bd8da5 | 1674 | .i2c = gk104_i2c_new, |
551d3417 | 1675 | .ibus = gk104_ibus_new, |
b71c0892 | 1676 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1677 | .imem = nv50_instmem_new, |
70bc7182 | 1678 | .ltc = gk104_ltc_new, |
2b700825 | 1679 | .mc = gf100_mc_new, |
c9582455 | 1680 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1681 | .mxm = nv50_mxm_new, |
28c80605 | 1682 | .pci = gk104_pci_new, |
e2ca4e7d | 1683 | .pmu = gk104_pmu_new, |
57113c01 | 1684 | .therm = gf119_therm_new, |
31649ecf | 1685 | .timer = nv41_timer_new, |
1531dbbb | 1686 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1687 | .ce[0] = gk104_ce_new, |
1688 | .ce[1] = gk104_ce_new, | |
1689 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1690 | .disp = gk104_disp_new, |
bd70563f | 1691 | .dma = gf119_dma_new, |
13de7f46 | 1692 | .fifo = gk104_fifo_new, |
c85ee6ca | 1693 | .gr = gk104_gr_new, |
53e60da4 BS |
1694 | .mspdec = gk104_mspdec_new, |
1695 | .msppp = gf100_msppp_new, | |
1696 | .msvld = gk104_msvld_new, | |
97070f23 | 1697 | .pm = gk104_pm_new, |
6f41c7c5 | 1698 | .sw = gf100_sw_new, |
6cf813fb BS |
1699 | }; |
1700 | ||
1701 | static const struct nvkm_device_chip | |
1702 | nve6_chipset = { | |
1703 | .name = "GK106", | |
32932281 | 1704 | .bar = gf100_bar_new, |
46484438 | 1705 | .bios = nvkm_bios_new, |
bb23f9d7 | 1706 | .bus = gf100_bus_new, |
6625f55c | 1707 | .clk = gk104_clk_new, |
151abd44 | 1708 | .devinit = gf100_devinit_new, |
03c8952f | 1709 | .fb = gk104_fb_new, |
c5fcafa5 | 1710 | .fuse = gf100_fuse_new, |
2ea7249f | 1711 | .gpio = gk104_gpio_new, |
49bd8da5 | 1712 | .i2c = gk104_i2c_new, |
551d3417 | 1713 | .ibus = gk104_ibus_new, |
b71c0892 | 1714 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1715 | .imem = nv50_instmem_new, |
70bc7182 | 1716 | .ltc = gk104_ltc_new, |
2b700825 | 1717 | .mc = gf100_mc_new, |
c9582455 | 1718 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1719 | .mxm = nv50_mxm_new, |
28c80605 | 1720 | .pci = gk104_pci_new, |
e2ca4e7d | 1721 | .pmu = gk104_pmu_new, |
57113c01 | 1722 | .therm = gf119_therm_new, |
31649ecf | 1723 | .timer = nv41_timer_new, |
1531dbbb | 1724 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1725 | .ce[0] = gk104_ce_new, |
1726 | .ce[1] = gk104_ce_new, | |
1727 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1728 | .disp = gk104_disp_new, |
bd70563f | 1729 | .dma = gf119_dma_new, |
13de7f46 | 1730 | .fifo = gk104_fifo_new, |
c85ee6ca | 1731 | .gr = gk104_gr_new, |
53e60da4 BS |
1732 | .mspdec = gk104_mspdec_new, |
1733 | .msppp = gf100_msppp_new, | |
1734 | .msvld = gk104_msvld_new, | |
97070f23 | 1735 | .pm = gk104_pm_new, |
6f41c7c5 | 1736 | .sw = gf100_sw_new, |
6cf813fb BS |
1737 | }; |
1738 | ||
1739 | static const struct nvkm_device_chip | |
1740 | nve7_chipset = { | |
1741 | .name = "GK107", | |
32932281 | 1742 | .bar = gf100_bar_new, |
46484438 | 1743 | .bios = nvkm_bios_new, |
bb23f9d7 | 1744 | .bus = gf100_bus_new, |
6625f55c | 1745 | .clk = gk104_clk_new, |
151abd44 | 1746 | .devinit = gf100_devinit_new, |
03c8952f | 1747 | .fb = gk104_fb_new, |
c5fcafa5 | 1748 | .fuse = gf100_fuse_new, |
2ea7249f | 1749 | .gpio = gk104_gpio_new, |
49bd8da5 | 1750 | .i2c = gk104_i2c_new, |
551d3417 | 1751 | .ibus = gk104_ibus_new, |
b71c0892 | 1752 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1753 | .imem = nv50_instmem_new, |
70bc7182 | 1754 | .ltc = gk104_ltc_new, |
2b700825 | 1755 | .mc = gf100_mc_new, |
c9582455 | 1756 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1757 | .mxm = nv50_mxm_new, |
28c80605 | 1758 | .pci = gk104_pci_new, |
3c9aca31 | 1759 | .pmu = gk104_pmu_new, |
57113c01 | 1760 | .therm = gf119_therm_new, |
31649ecf | 1761 | .timer = nv41_timer_new, |
1531dbbb | 1762 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1763 | .ce[0] = gk104_ce_new, |
1764 | .ce[1] = gk104_ce_new, | |
1765 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1766 | .disp = gk104_disp_new, |
bd70563f | 1767 | .dma = gf119_dma_new, |
13de7f46 | 1768 | .fifo = gk104_fifo_new, |
c85ee6ca | 1769 | .gr = gk104_gr_new, |
53e60da4 BS |
1770 | .mspdec = gk104_mspdec_new, |
1771 | .msppp = gf100_msppp_new, | |
1772 | .msvld = gk104_msvld_new, | |
97070f23 | 1773 | .pm = gk104_pm_new, |
6f41c7c5 | 1774 | .sw = gf100_sw_new, |
6cf813fb BS |
1775 | }; |
1776 | ||
1777 | static const struct nvkm_device_chip | |
1778 | nvea_chipset = { | |
1779 | .name = "GK20A", | |
32932281 | 1780 | .bar = gk20a_bar_new, |
bb23f9d7 | 1781 | .bus = gf100_bus_new, |
6625f55c | 1782 | .clk = gk20a_clk_new, |
03c8952f | 1783 | .fb = gk20a_fb_new, |
c5fcafa5 | 1784 | .fuse = gf100_fuse_new, |
551d3417 | 1785 | .ibus = gk20a_ibus_new, |
b7a2bc18 | 1786 | .imem = gk20a_instmem_new, |
70bc7182 | 1787 | .ltc = gk104_ltc_new, |
54dcadd5 | 1788 | .mc = gk20a_mc_new, |
c9582455 | 1789 | .mmu = gf100_mmu_new, |
e2ca4e7d | 1790 | .pmu = gk20a_pmu_new, |
31649ecf | 1791 | .timer = gk20a_timer_new, |
437b2296 | 1792 | .volt = gk20a_volt_new, |
e5b31ca6 | 1793 | .ce[2] = gk104_ce_new, |
bd70563f | 1794 | .dma = gf119_dma_new, |
13de7f46 | 1795 | .fifo = gk20a_fifo_new, |
c85ee6ca | 1796 | .gr = gk20a_gr_new, |
97070f23 | 1797 | .pm = gk104_pm_new, |
6f41c7c5 | 1798 | .sw = gf100_sw_new, |
6cf813fb BS |
1799 | }; |
1800 | ||
1801 | static const struct nvkm_device_chip | |
1802 | nvf0_chipset = { | |
1803 | .name = "GK110", | |
32932281 | 1804 | .bar = gf100_bar_new, |
46484438 | 1805 | .bios = nvkm_bios_new, |
bb23f9d7 | 1806 | .bus = gf100_bus_new, |
6625f55c | 1807 | .clk = gk104_clk_new, |
151abd44 | 1808 | .devinit = gf100_devinit_new, |
03c8952f | 1809 | .fb = gk104_fb_new, |
c5fcafa5 | 1810 | .fuse = gf100_fuse_new, |
2ea7249f | 1811 | .gpio = gk104_gpio_new, |
49bd8da5 | 1812 | .i2c = gk104_i2c_new, |
551d3417 | 1813 | .ibus = gk104_ibus_new, |
b71c0892 | 1814 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1815 | .imem = nv50_instmem_new, |
70bc7182 | 1816 | .ltc = gk104_ltc_new, |
2b700825 | 1817 | .mc = gf100_mc_new, |
c9582455 | 1818 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1819 | .mxm = nv50_mxm_new, |
28c80605 | 1820 | .pci = gk104_pci_new, |
e2ca4e7d | 1821 | .pmu = gk110_pmu_new, |
57113c01 | 1822 | .therm = gf119_therm_new, |
31649ecf | 1823 | .timer = nv41_timer_new, |
1531dbbb | 1824 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1825 | .ce[0] = gk104_ce_new, |
1826 | .ce[1] = gk104_ce_new, | |
1827 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1828 | .disp = gk110_disp_new, |
bd70563f | 1829 | .dma = gf119_dma_new, |
13de7f46 | 1830 | .fifo = gk104_fifo_new, |
c85ee6ca | 1831 | .gr = gk110_gr_new, |
53e60da4 BS |
1832 | .mspdec = gk104_mspdec_new, |
1833 | .msppp = gf100_msppp_new, | |
1834 | .msvld = gk104_msvld_new, | |
6f41c7c5 | 1835 | .sw = gf100_sw_new, |
6cf813fb BS |
1836 | }; |
1837 | ||
1838 | static const struct nvkm_device_chip | |
1839 | nvf1_chipset = { | |
1840 | .name = "GK110B", | |
32932281 | 1841 | .bar = gf100_bar_new, |
46484438 | 1842 | .bios = nvkm_bios_new, |
bb23f9d7 | 1843 | .bus = gf100_bus_new, |
6625f55c | 1844 | .clk = gk104_clk_new, |
151abd44 | 1845 | .devinit = gf100_devinit_new, |
03c8952f | 1846 | .fb = gk104_fb_new, |
c5fcafa5 | 1847 | .fuse = gf100_fuse_new, |
2ea7249f | 1848 | .gpio = gk104_gpio_new, |
49bd8da5 | 1849 | .i2c = gf119_i2c_new, |
551d3417 | 1850 | .ibus = gk104_ibus_new, |
b71c0892 | 1851 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1852 | .imem = nv50_instmem_new, |
70bc7182 | 1853 | .ltc = gk104_ltc_new, |
2b700825 | 1854 | .mc = gf100_mc_new, |
c9582455 | 1855 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1856 | .mxm = nv50_mxm_new, |
28c80605 | 1857 | .pci = gk104_pci_new, |
e2ca4e7d | 1858 | .pmu = gk110_pmu_new, |
57113c01 | 1859 | .therm = gf119_therm_new, |
31649ecf | 1860 | .timer = nv41_timer_new, |
1531dbbb | 1861 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1862 | .ce[0] = gk104_ce_new, |
1863 | .ce[1] = gk104_ce_new, | |
1864 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1865 | .disp = gk110_disp_new, |
bd70563f | 1866 | .dma = gf119_dma_new, |
13de7f46 | 1867 | .fifo = gk104_fifo_new, |
c85ee6ca | 1868 | .gr = gk110b_gr_new, |
53e60da4 BS |
1869 | .mspdec = gk104_mspdec_new, |
1870 | .msppp = gf100_msppp_new, | |
1871 | .msvld = gk104_msvld_new, | |
6f41c7c5 | 1872 | .sw = gf100_sw_new, |
6cf813fb BS |
1873 | }; |
1874 | ||
1875 | static const struct nvkm_device_chip | |
1876 | nv106_chipset = { | |
1877 | .name = "GK208B", | |
32932281 | 1878 | .bar = gf100_bar_new, |
46484438 | 1879 | .bios = nvkm_bios_new, |
bb23f9d7 | 1880 | .bus = gf100_bus_new, |
6625f55c | 1881 | .clk = gk104_clk_new, |
151abd44 | 1882 | .devinit = gf100_devinit_new, |
03c8952f | 1883 | .fb = gk104_fb_new, |
c5fcafa5 | 1884 | .fuse = gf100_fuse_new, |
2ea7249f | 1885 | .gpio = gk104_gpio_new, |
49bd8da5 | 1886 | .i2c = gk104_i2c_new, |
551d3417 | 1887 | .ibus = gk104_ibus_new, |
b71c0892 | 1888 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1889 | .imem = nv50_instmem_new, |
70bc7182 | 1890 | .ltc = gk104_ltc_new, |
54dcadd5 | 1891 | .mc = gk20a_mc_new, |
c9582455 | 1892 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1893 | .mxm = nv50_mxm_new, |
28c80605 | 1894 | .pci = gk104_pci_new, |
e2ca4e7d | 1895 | .pmu = gk208_pmu_new, |
57113c01 | 1896 | .therm = gf119_therm_new, |
31649ecf | 1897 | .timer = nv41_timer_new, |
1531dbbb | 1898 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1899 | .ce[0] = gk104_ce_new, |
1900 | .ce[1] = gk104_ce_new, | |
1901 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1902 | .disp = gk110_disp_new, |
bd70563f | 1903 | .dma = gf119_dma_new, |
13de7f46 | 1904 | .fifo = gk208_fifo_new, |
c85ee6ca | 1905 | .gr = gk208_gr_new, |
53e60da4 BS |
1906 | .mspdec = gk104_mspdec_new, |
1907 | .msppp = gf100_msppp_new, | |
1908 | .msvld = gk104_msvld_new, | |
6f41c7c5 | 1909 | .sw = gf100_sw_new, |
6cf813fb BS |
1910 | }; |
1911 | ||
1912 | static const struct nvkm_device_chip | |
1913 | nv108_chipset = { | |
1914 | .name = "GK208", | |
32932281 | 1915 | .bar = gf100_bar_new, |
46484438 | 1916 | .bios = nvkm_bios_new, |
bb23f9d7 | 1917 | .bus = gf100_bus_new, |
6625f55c | 1918 | .clk = gk104_clk_new, |
151abd44 | 1919 | .devinit = gf100_devinit_new, |
03c8952f | 1920 | .fb = gk104_fb_new, |
c5fcafa5 | 1921 | .fuse = gf100_fuse_new, |
2ea7249f | 1922 | .gpio = gk104_gpio_new, |
49bd8da5 | 1923 | .i2c = gk104_i2c_new, |
551d3417 | 1924 | .ibus = gk104_ibus_new, |
b71c0892 | 1925 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1926 | .imem = nv50_instmem_new, |
70bc7182 | 1927 | .ltc = gk104_ltc_new, |
54dcadd5 | 1928 | .mc = gk20a_mc_new, |
c9582455 | 1929 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1930 | .mxm = nv50_mxm_new, |
28c80605 | 1931 | .pci = gk104_pci_new, |
e2ca4e7d | 1932 | .pmu = gk208_pmu_new, |
57113c01 | 1933 | .therm = gf119_therm_new, |
31649ecf | 1934 | .timer = nv41_timer_new, |
1531dbbb | 1935 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1936 | .ce[0] = gk104_ce_new, |
1937 | .ce[1] = gk104_ce_new, | |
1938 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1939 | .disp = gk110_disp_new, |
bd70563f | 1940 | .dma = gf119_dma_new, |
13de7f46 | 1941 | .fifo = gk208_fifo_new, |
c85ee6ca | 1942 | .gr = gk208_gr_new, |
53e60da4 BS |
1943 | .mspdec = gk104_mspdec_new, |
1944 | .msppp = gf100_msppp_new, | |
1945 | .msvld = gk104_msvld_new, | |
6f41c7c5 | 1946 | .sw = gf100_sw_new, |
6cf813fb BS |
1947 | }; |
1948 | ||
1949 | static const struct nvkm_device_chip | |
1950 | nv117_chipset = { | |
1951 | .name = "GM107", | |
32932281 | 1952 | .bar = gf100_bar_new, |
46484438 | 1953 | .bios = nvkm_bios_new, |
bb23f9d7 | 1954 | .bus = gf100_bus_new, |
6625f55c | 1955 | .clk = gk104_clk_new, |
151abd44 | 1956 | .devinit = gm107_devinit_new, |
03c8952f | 1957 | .fb = gm107_fb_new, |
c5fcafa5 | 1958 | .fuse = gm107_fuse_new, |
2ea7249f | 1959 | .gpio = gk104_gpio_new, |
49bd8da5 | 1960 | .i2c = gf119_i2c_new, |
551d3417 | 1961 | .ibus = gk104_ibus_new, |
b71c0892 | 1962 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 1963 | .imem = nv50_instmem_new, |
70bc7182 | 1964 | .ltc = gm107_ltc_new, |
54dcadd5 | 1965 | .mc = gk20a_mc_new, |
c9582455 | 1966 | .mmu = gf100_mmu_new, |
a4f7bd36 | 1967 | .mxm = nv50_mxm_new, |
28c80605 | 1968 | .pci = gk104_pci_new, |
e2ca4e7d | 1969 | .pmu = gm107_pmu_new, |
57113c01 | 1970 | .therm = gm107_therm_new, |
31649ecf | 1971 | .timer = gk20a_timer_new, |
dc47700f | 1972 | .volt = gk104_volt_new, |
e5b31ca6 BS |
1973 | .ce[0] = gk104_ce_new, |
1974 | .ce[2] = gk104_ce_new, | |
70aa8670 | 1975 | .disp = gm107_disp_new, |
bd70563f | 1976 | .dma = gf119_dma_new, |
13de7f46 | 1977 | .fifo = gk208_fifo_new, |
c85ee6ca | 1978 | .gr = gm107_gr_new, |
6f41c7c5 | 1979 | .sw = gf100_sw_new, |
6cf813fb BS |
1980 | }; |
1981 | ||
2ed95a4c BS |
1982 | static const struct nvkm_device_chip |
1983 | nv120_chipset = { | |
1984 | .name = "GM200", | |
1985 | .bar = gf100_bar_new, | |
1986 | .bios = nvkm_bios_new, | |
1987 | .bus = gf100_bus_new, | |
db1eb528 | 1988 | .devinit = gm200_devinit_new, |
2ed95a4c BS |
1989 | .fb = gm107_fb_new, |
1990 | .fuse = gm107_fuse_new, | |
1991 | .gpio = gk104_gpio_new, | |
db1eb528 BS |
1992 | .i2c = gm200_i2c_new, |
1993 | .ibus = gm200_ibus_new, | |
b71c0892 | 1994 | .iccsense = gf100_iccsense_new, |
2ed95a4c | 1995 | .imem = nv50_instmem_new, |
db1eb528 | 1996 | .ltc = gm200_ltc_new, |
2ed95a4c BS |
1997 | .mc = gk20a_mc_new, |
1998 | .mmu = gf100_mmu_new, | |
1999 | .mxm = nv50_mxm_new, | |
2000 | .pci = gk104_pci_new, | |
2001 | .pmu = gm107_pmu_new, | |
9cc45521 | 2002 | .secboot = gm200_secboot_new, |
2ed95a4c BS |
2003 | .timer = gk20a_timer_new, |
2004 | .volt = gk104_volt_new, | |
db1eb528 BS |
2005 | .ce[0] = gm200_ce_new, |
2006 | .ce[1] = gm200_ce_new, | |
2007 | .ce[2] = gm200_ce_new, | |
2008 | .disp = gm200_disp_new, | |
2ed95a4c | 2009 | .dma = gf119_dma_new, |
db1eb528 | 2010 | .fifo = gm200_fifo_new, |
96fc422c | 2011 | .gr = gm200_gr_new, |
2ed95a4c BS |
2012 | .sw = gf100_sw_new, |
2013 | }; | |
2014 | ||
6cf813fb BS |
2015 | static const struct nvkm_device_chip |
2016 | nv124_chipset = { | |
2017 | .name = "GM204", | |
32932281 | 2018 | .bar = gf100_bar_new, |
46484438 | 2019 | .bios = nvkm_bios_new, |
bb23f9d7 | 2020 | .bus = gf100_bus_new, |
db1eb528 | 2021 | .devinit = gm200_devinit_new, |
03c8952f | 2022 | .fb = gm107_fb_new, |
c5fcafa5 | 2023 | .fuse = gm107_fuse_new, |
2ea7249f | 2024 | .gpio = gk104_gpio_new, |
db1eb528 BS |
2025 | .i2c = gm200_i2c_new, |
2026 | .ibus = gm200_ibus_new, | |
b71c0892 | 2027 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 2028 | .imem = nv50_instmem_new, |
db1eb528 | 2029 | .ltc = gm200_ltc_new, |
54dcadd5 | 2030 | .mc = gk20a_mc_new, |
c9582455 | 2031 | .mmu = gf100_mmu_new, |
a4f7bd36 | 2032 | .mxm = nv50_mxm_new, |
28c80605 | 2033 | .pci = gk104_pci_new, |
e2ca4e7d | 2034 | .pmu = gm107_pmu_new, |
9cc45521 | 2035 | .secboot = gm200_secboot_new, |
31649ecf | 2036 | .timer = gk20a_timer_new, |
24580d1c | 2037 | .volt = gk104_volt_new, |
db1eb528 BS |
2038 | .ce[0] = gm200_ce_new, |
2039 | .ce[1] = gm200_ce_new, | |
2040 | .ce[2] = gm200_ce_new, | |
2041 | .disp = gm200_disp_new, | |
bd70563f | 2042 | .dma = gf119_dma_new, |
db1eb528 | 2043 | .fifo = gm200_fifo_new, |
9ec28052 | 2044 | .gr = gm200_gr_new, |
6f41c7c5 | 2045 | .sw = gf100_sw_new, |
6cf813fb BS |
2046 | }; |
2047 | ||
2048 | static const struct nvkm_device_chip | |
2049 | nv126_chipset = { | |
2050 | .name = "GM206", | |
32932281 | 2051 | .bar = gf100_bar_new, |
46484438 | 2052 | .bios = nvkm_bios_new, |
bb23f9d7 | 2053 | .bus = gf100_bus_new, |
db1eb528 | 2054 | .devinit = gm200_devinit_new, |
03c8952f | 2055 | .fb = gm107_fb_new, |
c5fcafa5 | 2056 | .fuse = gm107_fuse_new, |
2ea7249f | 2057 | .gpio = gk104_gpio_new, |
db1eb528 BS |
2058 | .i2c = gm200_i2c_new, |
2059 | .ibus = gm200_ibus_new, | |
b71c0892 | 2060 | .iccsense = gf100_iccsense_new, |
b7a2bc18 | 2061 | .imem = nv50_instmem_new, |
db1eb528 | 2062 | .ltc = gm200_ltc_new, |
54dcadd5 | 2063 | .mc = gk20a_mc_new, |
c9582455 | 2064 | .mmu = gf100_mmu_new, |
a4f7bd36 | 2065 | .mxm = nv50_mxm_new, |
28c80605 | 2066 | .pci = gk104_pci_new, |
e2ca4e7d | 2067 | .pmu = gm107_pmu_new, |
9cc45521 | 2068 | .secboot = gm200_secboot_new, |
31649ecf | 2069 | .timer = gk20a_timer_new, |
24580d1c | 2070 | .volt = gk104_volt_new, |
db1eb528 BS |
2071 | .ce[0] = gm200_ce_new, |
2072 | .ce[1] = gm200_ce_new, | |
2073 | .ce[2] = gm200_ce_new, | |
2074 | .disp = gm200_disp_new, | |
bd70563f | 2075 | .dma = gf119_dma_new, |
db1eb528 | 2076 | .fifo = gm200_fifo_new, |
7d31cb7c | 2077 | .gr = gm200_gr_new, |
6f41c7c5 | 2078 | .sw = gf100_sw_new, |
6cf813fb BS |
2079 | }; |
2080 | ||
2081 | static const struct nvkm_device_chip | |
2082 | nv12b_chipset = { | |
2083 | .name = "GM20B", | |
32932281 | 2084 | .bar = gk20a_bar_new, |
bb23f9d7 | 2085 | .bus = gf100_bus_new, |
03c8952f | 2086 | .fb = gk20a_fb_new, |
c5fcafa5 | 2087 | .fuse = gm107_fuse_new, |
551d3417 | 2088 | .ibus = gk20a_ibus_new, |
b7a2bc18 | 2089 | .imem = gk20a_instmem_new, |
db1eb528 | 2090 | .ltc = gm200_ltc_new, |
54dcadd5 | 2091 | .mc = gk20a_mc_new, |
c9582455 | 2092 | .mmu = gf100_mmu_new, |
923f1bd2 | 2093 | .secboot = gm20b_secboot_new, |
31649ecf | 2094 | .timer = gk20a_timer_new, |
db1eb528 | 2095 | .ce[2] = gm200_ce_new, |
bd70563f | 2096 | .dma = gf119_dma_new, |
13de7f46 | 2097 | .fifo = gm20b_fifo_new, |
c85ee6ca | 2098 | .gr = gm20b_gr_new, |
6f41c7c5 | 2099 | .sw = gf100_sw_new, |
6cf813fb BS |
2100 | }; |
2101 | ||
79ca2770 | 2102 | static int |
9719047b BS |
2103 | nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size, |
2104 | struct nvkm_notify *notify) | |
79ca2770 BS |
2105 | { |
2106 | if (!WARN_ON(size != 0)) { | |
2107 | notify->size = 0; | |
2108 | notify->types = 1; | |
2109 | notify->index = 0; | |
2110 | return 0; | |
2111 | } | |
2112 | return -EINVAL; | |
2113 | } | |
2114 | ||
2115 | static const struct nvkm_event_func | |
9719047b BS |
2116 | nvkm_device_event_func = { |
2117 | .ctor = nvkm_device_event_ctor, | |
79ca2770 BS |
2118 | }; |
2119 | ||
6cf813fb BS |
2120 | struct nvkm_subdev * |
2121 | nvkm_device_subdev(struct nvkm_device *device, int index) | |
2122 | { | |
2123 | struct nvkm_engine *engine; | |
2124 | ||
2125 | if (device->disable_mask & (1ULL << index)) | |
2126 | return NULL; | |
2127 | ||
2128 | switch (index) { | |
68f3f702 | 2129 | #define _(n,p,m) case NVKM_SUBDEV_##n: if (p) return (m); break |
dc06e366 MP |
2130 | _(BAR , device->bar , &device->bar->subdev); |
2131 | _(VBIOS , device->bios , &device->bios->subdev); | |
2132 | _(BUS , device->bus , &device->bus->subdev); | |
2133 | _(CLK , device->clk , &device->clk->subdev); | |
2134 | _(DEVINIT , device->devinit , &device->devinit->subdev); | |
2135 | _(FB , device->fb , &device->fb->subdev); | |
2136 | _(FUSE , device->fuse , &device->fuse->subdev); | |
2137 | _(GPIO , device->gpio , &device->gpio->subdev); | |
2138 | _(I2C , device->i2c , &device->i2c->subdev); | |
2139 | _(IBUS , device->ibus , device->ibus); | |
2140 | _(ICCSENSE, device->iccsense, &device->iccsense->subdev); | |
2141 | _(INSTMEM , device->imem , &device->imem->subdev); | |
2142 | _(LTC , device->ltc , &device->ltc->subdev); | |
2143 | _(MC , device->mc , &device->mc->subdev); | |
2144 | _(MMU , device->mmu , &device->mmu->subdev); | |
2145 | _(MXM , device->mxm , device->mxm); | |
2146 | _(PCI , device->pci , &device->pci->subdev); | |
2147 | _(PMU , device->pmu , &device->pmu->subdev); | |
2148 | _(SECBOOT , device->secboot , &device->secboot->subdev); | |
2149 | _(THERM , device->therm , &device->therm->subdev); | |
2150 | _(TIMER , device->timer , &device->timer->subdev); | |
2151 | _(VOLT , device->volt , &device->volt->subdev); | |
6cf813fb BS |
2152 | #undef _ |
2153 | default: | |
2154 | engine = nvkm_device_engine(device, index); | |
2155 | if (engine) | |
2156 | return &engine->subdev; | |
2157 | break; | |
2158 | } | |
2159 | return NULL; | |
2160 | } | |
2161 | ||
2162 | struct nvkm_engine * | |
2163 | nvkm_device_engine(struct nvkm_device *device, int index) | |
2164 | { | |
2165 | if (device->disable_mask & (1ULL << index)) | |
2166 | return NULL; | |
2167 | ||
2168 | switch (index) { | |
68f3f702 | 2169 | #define _(n,p,m) case NVKM_ENGINE_##n: if (p) return (m); break |
6cf813fb BS |
2170 | _(BSP , device->bsp , device->bsp); |
2171 | _(CE0 , device->ce[0] , device->ce[0]); | |
2172 | _(CE1 , device->ce[1] , device->ce[1]); | |
2173 | _(CE2 , device->ce[2] , device->ce[2]); | |
2174 | _(CIPHER , device->cipher , device->cipher); | |
2175 | _(DISP , device->disp , &device->disp->engine); | |
2176 | _(DMAOBJ , device->dma , &device->dma->engine); | |
2177 | _(FIFO , device->fifo , &device->fifo->engine); | |
2178 | _(GR , device->gr , &device->gr->engine); | |
2179 | _(IFB , device->ifb , device->ifb); | |
2180 | _(ME , device->me , device->me); | |
2181 | _(MPEG , device->mpeg , device->mpeg); | |
2182 | _(MSENC , device->msenc , device->msenc); | |
2183 | _(MSPDEC , device->mspdec , device->mspdec); | |
2184 | _(MSPPP , device->msppp , device->msppp); | |
2185 | _(MSVLD , device->msvld , device->msvld); | |
2186 | _(PM , device->pm , &device->pm->engine); | |
2187 | _(SEC , device->sec , device->sec); | |
2188 | _(SW , device->sw , &device->sw->engine); | |
2189 | _(VIC , device->vic , device->vic); | |
2190 | _(VP , device->vp , device->vp); | |
2191 | #undef _ | |
2192 | default: | |
2193 | WARN_ON(1); | |
2194 | break; | |
2195 | } | |
2196 | return NULL; | |
2197 | } | |
2198 | ||
a1e88736 BS |
2199 | int |
2200 | nvkm_device_fini(struct nvkm_device *device, bool suspend) | |
066a5d09 | 2201 | { |
6cf813fb BS |
2202 | const char *action = suspend ? "suspend" : "fini"; |
2203 | struct nvkm_subdev *subdev; | |
10caad33 | 2204 | int ret, i; |
6cf813fb BS |
2205 | s64 time; |
2206 | ||
2207 | nvdev_trace(device, "%s running...\n", action); | |
2208 | time = ktime_to_us(ktime_get()); | |
2209 | ||
2210 | nvkm_acpi_fini(device); | |
10caad33 | 2211 | |
68f3f702 | 2212 | for (i = NVKM_SUBDEV_NR - 1; i >= 0; i--) { |
6cf813fb BS |
2213 | if ((subdev = nvkm_device_subdev(device, i))) { |
2214 | ret = nvkm_subdev_fini(subdev, suspend); | |
2215 | if (ret && suspend) | |
2216 | goto fail; | |
10caad33 BS |
2217 | } |
2218 | } | |
2219 | ||
7974dd1b BS |
2220 | |
2221 | if (device->func->fini) | |
2222 | device->func->fini(device, suspend); | |
6cf813fb BS |
2223 | |
2224 | time = ktime_to_us(ktime_get()) - time; | |
2225 | nvdev_trace(device, "%s completed in %lldus...\n", action, time); | |
2226 | return 0; | |
2227 | ||
10caad33 | 2228 | fail: |
6cf813fb BS |
2229 | do { |
2230 | if ((subdev = nvkm_device_subdev(device, i))) { | |
2231 | int rret = nvkm_subdev_init(subdev); | |
2232 | if (rret) | |
2233 | nvkm_fatal(subdev, "failed restart, %d\n", ret); | |
10caad33 | 2234 | } |
68f3f702 | 2235 | } while (++i < NVKM_SUBDEV_NR); |
10caad33 | 2236 | |
6cf813fb | 2237 | nvdev_trace(device, "%s failed with %d\n", action, ret); |
10caad33 | 2238 | return ret; |
066a5d09 BS |
2239 | } |
2240 | ||
6cf813fb | 2241 | static int |
7974dd1b BS |
2242 | nvkm_device_preinit(struct nvkm_device *device) |
2243 | { | |
6cf813fb BS |
2244 | struct nvkm_subdev *subdev; |
2245 | int ret, i; | |
7974dd1b BS |
2246 | s64 time; |
2247 | ||
2248 | nvdev_trace(device, "preinit running...\n"); | |
2249 | time = ktime_to_us(ktime_get()); | |
2250 | ||
2251 | if (device->func->preinit) { | |
2252 | ret = device->func->preinit(device); | |
2253 | if (ret) | |
2254 | goto fail; | |
2255 | } | |
2256 | ||
68f3f702 | 2257 | for (i = 0; i < NVKM_SUBDEV_NR; i++) { |
6cf813fb BS |
2258 | if ((subdev = nvkm_device_subdev(device, i))) { |
2259 | ret = nvkm_subdev_preinit(subdev); | |
2260 | if (ret) | |
2261 | goto fail; | |
2262 | } | |
2263 | } | |
2264 | ||
8de65bd0 BS |
2265 | ret = nvkm_devinit_post(device->devinit, &device->disable_mask); |
2266 | if (ret) | |
2267 | goto fail; | |
6cf813fb | 2268 | |
7974dd1b BS |
2269 | time = ktime_to_us(ktime_get()) - time; |
2270 | nvdev_trace(device, "preinit completed in %lldus\n", time); | |
2271 | return 0; | |
2272 | ||
2273 | fail: | |
2274 | nvdev_error(device, "preinit failed with %d\n", ret); | |
2275 | return ret; | |
2276 | } | |
2277 | ||
a1e88736 BS |
2278 | int |
2279 | nvkm_device_init(struct nvkm_device *device) | |
066a5d09 | 2280 | { |
6cf813fb | 2281 | struct nvkm_subdev *subdev; |
68f3f702 | 2282 | int ret, i; |
6cf813fb | 2283 | s64 time; |
ed76a870 | 2284 | |
7974dd1b BS |
2285 | ret = nvkm_device_preinit(device); |
2286 | if (ret) | |
2287 | return ret; | |
2288 | ||
6cf813fb BS |
2289 | nvkm_device_fini(device, false); |
2290 | ||
2291 | nvdev_trace(device, "init running...\n"); | |
2292 | time = ktime_to_us(ktime_get()); | |
10caad33 | 2293 | |
2b700825 BS |
2294 | if (device->func->init) { |
2295 | ret = device->func->init(device); | |
2296 | if (ret) | |
2297 | goto fail; | |
2298 | } | |
2299 | ||
68f3f702 BS |
2300 | for (i = 0; i < NVKM_SUBDEV_NR; i++) { |
2301 | if ((subdev = nvkm_device_subdev(device, i))) { | |
2302 | ret = nvkm_subdev_init(subdev); | |
2303 | if (ret) | |
2b700825 | 2304 | goto fail_subdev; |
10caad33 BS |
2305 | } |
2306 | } | |
2307 | ||
6cf813fb BS |
2308 | nvkm_acpi_init(device); |
2309 | ||
2310 | time = ktime_to_us(ktime_get()) - time; | |
2311 | nvdev_trace(device, "init completed in %lldus\n", time); | |
2312 | return 0; | |
2313 | ||
2b700825 | 2314 | fail_subdev: |
6cf813fb BS |
2315 | do { |
2316 | if ((subdev = nvkm_device_subdev(device, i))) | |
2317 | nvkm_subdev_fini(subdev, false); | |
2318 | } while (--i >= 0); | |
10caad33 | 2319 | |
2b700825 | 2320 | fail: |
0529a46a AC |
2321 | nvkm_device_fini(device, false); |
2322 | ||
6cf813fb | 2323 | nvdev_error(device, "init failed with %d\n", ret); |
10caad33 | 2324 | return ret; |
066a5d09 BS |
2325 | } |
2326 | ||
e781dc8f BS |
2327 | void |
2328 | nvkm_device_del(struct nvkm_device **pdevice) | |
2329 | { | |
2330 | struct nvkm_device *device = *pdevice; | |
0ac9d210 | 2331 | int i; |
e781dc8f | 2332 | if (device) { |
e781dc8f | 2333 | mutex_lock(&nv_devices_mutex); |
6cf813fb | 2334 | device->disable_mask = 0; |
68f3f702 | 2335 | for (i = NVKM_SUBDEV_NR - 1; i >= 0; i--) { |
6cf813fb BS |
2336 | struct nvkm_subdev *subdev = |
2337 | nvkm_device_subdev(device, i); | |
2338 | nvkm_subdev_del(&subdev); | |
2339 | } | |
0ac9d210 BS |
2340 | |
2341 | nvkm_event_fini(&device->event); | |
e781dc8f BS |
2342 | |
2343 | if (device->pri) | |
2344 | iounmap(device->pri); | |
0ac9d210 | 2345 | list_del(&device->head); |
7974dd1b BS |
2346 | |
2347 | if (device->func->dtor) | |
2348 | *pdevice = device->func->dtor(device); | |
0ac9d210 | 2349 | mutex_unlock(&nv_devices_mutex); |
e781dc8f | 2350 | |
7974dd1b | 2351 | kfree(*pdevice); |
e781dc8f BS |
2352 | *pdevice = NULL; |
2353 | } | |
2354 | } | |
2355 | ||
9274f4a9 | 2356 | int |
7974dd1b BS |
2357 | nvkm_device_ctor(const struct nvkm_device_func *func, |
2358 | const struct nvkm_device_quirk *quirk, | |
26c9e8ef | 2359 | struct device *dev, enum nvkm_device_type type, u64 handle, |
7974dd1b BS |
2360 | const char *name, const char *cfg, const char *dbg, |
2361 | bool detect, bool mmio, u64 subdev_mask, | |
2362 | struct nvkm_device *device) | |
9274f4a9 | 2363 | { |
6cf813fb | 2364 | struct nvkm_subdev *subdev; |
0ac9d210 BS |
2365 | u64 mmio_base, mmio_size; |
2366 | u32 boot0, strap; | |
2367 | void __iomem *map; | |
9274f4a9 | 2368 | int ret = -EEXIST; |
0ac9d210 | 2369 | int i; |
9274f4a9 BS |
2370 | |
2371 | mutex_lock(&nv_devices_mutex); | |
7974dd1b BS |
2372 | if (nvkm_device_find_locked(handle)) |
2373 | goto done; | |
9274f4a9 | 2374 | |
7974dd1b | 2375 | device->func = func; |
7974dd1b | 2376 | device->quirk = quirk; |
26c9e8ef BS |
2377 | device->dev = dev; |
2378 | device->type = type; | |
7974dd1b | 2379 | device->handle = handle; |
9274f4a9 BS |
2380 | device->cfgopt = cfg; |
2381 | device->dbgopt = dbg; | |
7974dd1b | 2382 | device->name = name; |
0d5dd3f3 | 2383 | list_add_tail(&device->head, &nv_devices); |
68f3f702 | 2384 | device->debug = nvkm_dbgopt(device->dbgopt, "device"); |
6cf813fb | 2385 | |
9719047b | 2386 | ret = nvkm_event_init(&nvkm_device_event_func, 1, 1, &device->event); |
0ac9d210 BS |
2387 | if (ret) |
2388 | goto done; | |
2389 | ||
7e8820fe BS |
2390 | mmio_base = device->func->resource_addr(device, 0); |
2391 | mmio_size = device->func->resource_size(device, 0); | |
0ac9d210 BS |
2392 | |
2393 | /* identify the chipset, and determine classes of subdev/engines */ | |
2394 | if (detect) { | |
2395 | map = ioremap(mmio_base, 0x102000); | |
2396 | if (ret = -ENOMEM, map == NULL) | |
2397 | goto done; | |
2398 | ||
2399 | /* switch mmio to cpu's native endianness */ | |
2400 | #ifndef __BIG_ENDIAN | |
2401 | if (ioread32_native(map + 0x000004) != 0x00000000) { | |
2402 | #else | |
2403 | if (ioread32_native(map + 0x000004) == 0x00000000) { | |
2404 | #endif | |
2405 | iowrite32_native(0x01000001, map + 0x000004); | |
2406 | ioread32_native(map); | |
2407 | } | |
2408 | ||
2409 | /* read boot0 and strapping information */ | |
2410 | boot0 = ioread32_native(map + 0x000000); | |
2411 | strap = ioread32_native(map + 0x101000); | |
2412 | iounmap(map); | |
2413 | ||
2414 | /* determine chipset and derive architecture from it */ | |
2415 | if ((boot0 & 0x1f000000) > 0) { | |
2416 | device->chipset = (boot0 & 0x1ff00000) >> 20; | |
2417 | device->chiprev = (boot0 & 0x000000ff); | |
2418 | switch (device->chipset & 0x1f0) { | |
2419 | case 0x010: { | |
2420 | if (0x461 & (1 << (device->chipset & 0xf))) | |
2421 | device->card_type = NV_10; | |
2422 | else | |
2423 | device->card_type = NV_11; | |
2424 | device->chiprev = 0x00; | |
2425 | break; | |
2426 | } | |
2427 | case 0x020: device->card_type = NV_20; break; | |
2428 | case 0x030: device->card_type = NV_30; break; | |
2429 | case 0x040: | |
2430 | case 0x060: device->card_type = NV_40; break; | |
2431 | case 0x050: | |
2432 | case 0x080: | |
2433 | case 0x090: | |
2434 | case 0x0a0: device->card_type = NV_50; break; | |
2435 | case 0x0c0: | |
2436 | case 0x0d0: device->card_type = NV_C0; break; | |
2437 | case 0x0e0: | |
2438 | case 0x0f0: | |
2439 | case 0x100: device->card_type = NV_E0; break; | |
2440 | case 0x110: | |
2441 | case 0x120: device->card_type = GM100; break; | |
2442 | default: | |
2443 | break; | |
2444 | } | |
2445 | } else | |
2446 | if ((boot0 & 0xff00fff0) == 0x20004000) { | |
2447 | if (boot0 & 0x00f00000) | |
2448 | device->chipset = 0x05; | |
2449 | else | |
2450 | device->chipset = 0x04; | |
2451 | device->card_type = NV_04; | |
2452 | } | |
2453 | ||
68f3f702 | 2454 | switch (device->chipset) { |
6cf813fb BS |
2455 | case 0x004: device->chip = &nv4_chipset; break; |
2456 | case 0x005: device->chip = &nv5_chipset; break; | |
2457 | case 0x010: device->chip = &nv10_chipset; break; | |
2458 | case 0x011: device->chip = &nv11_chipset; break; | |
2459 | case 0x015: device->chip = &nv15_chipset; break; | |
2460 | case 0x017: device->chip = &nv17_chipset; break; | |
2461 | case 0x018: device->chip = &nv18_chipset; break; | |
2462 | case 0x01a: device->chip = &nv1a_chipset; break; | |
2463 | case 0x01f: device->chip = &nv1f_chipset; break; | |
2464 | case 0x020: device->chip = &nv20_chipset; break; | |
2465 | case 0x025: device->chip = &nv25_chipset; break; | |
2466 | case 0x028: device->chip = &nv28_chipset; break; | |
2467 | case 0x02a: device->chip = &nv2a_chipset; break; | |
2468 | case 0x030: device->chip = &nv30_chipset; break; | |
2469 | case 0x031: device->chip = &nv31_chipset; break; | |
2470 | case 0x034: device->chip = &nv34_chipset; break; | |
2471 | case 0x035: device->chip = &nv35_chipset; break; | |
2472 | case 0x036: device->chip = &nv36_chipset; break; | |
2473 | case 0x040: device->chip = &nv40_chipset; break; | |
2474 | case 0x041: device->chip = &nv41_chipset; break; | |
2475 | case 0x042: device->chip = &nv42_chipset; break; | |
2476 | case 0x043: device->chip = &nv43_chipset; break; | |
2477 | case 0x044: device->chip = &nv44_chipset; break; | |
2478 | case 0x045: device->chip = &nv45_chipset; break; | |
2479 | case 0x046: device->chip = &nv46_chipset; break; | |
2480 | case 0x047: device->chip = &nv47_chipset; break; | |
2481 | case 0x049: device->chip = &nv49_chipset; break; | |
2482 | case 0x04a: device->chip = &nv4a_chipset; break; | |
2483 | case 0x04b: device->chip = &nv4b_chipset; break; | |
2484 | case 0x04c: device->chip = &nv4c_chipset; break; | |
2485 | case 0x04e: device->chip = &nv4e_chipset; break; | |
2486 | case 0x050: device->chip = &nv50_chipset; break; | |
2487 | case 0x063: device->chip = &nv63_chipset; break; | |
2488 | case 0x067: device->chip = &nv67_chipset; break; | |
2489 | case 0x068: device->chip = &nv68_chipset; break; | |
2490 | case 0x084: device->chip = &nv84_chipset; break; | |
2491 | case 0x086: device->chip = &nv86_chipset; break; | |
2492 | case 0x092: device->chip = &nv92_chipset; break; | |
2493 | case 0x094: device->chip = &nv94_chipset; break; | |
2494 | case 0x096: device->chip = &nv96_chipset; break; | |
2495 | case 0x098: device->chip = &nv98_chipset; break; | |
2496 | case 0x0a0: device->chip = &nva0_chipset; break; | |
2497 | case 0x0a3: device->chip = &nva3_chipset; break; | |
2498 | case 0x0a5: device->chip = &nva5_chipset; break; | |
2499 | case 0x0a8: device->chip = &nva8_chipset; break; | |
2500 | case 0x0aa: device->chip = &nvaa_chipset; break; | |
2501 | case 0x0ac: device->chip = &nvac_chipset; break; | |
2502 | case 0x0af: device->chip = &nvaf_chipset; break; | |
2503 | case 0x0c0: device->chip = &nvc0_chipset; break; | |
2504 | case 0x0c1: device->chip = &nvc1_chipset; break; | |
2505 | case 0x0c3: device->chip = &nvc3_chipset; break; | |
2506 | case 0x0c4: device->chip = &nvc4_chipset; break; | |
2507 | case 0x0c8: device->chip = &nvc8_chipset; break; | |
2508 | case 0x0ce: device->chip = &nvce_chipset; break; | |
2509 | case 0x0cf: device->chip = &nvcf_chipset; break; | |
2510 | case 0x0d7: device->chip = &nvd7_chipset; break; | |
2511 | case 0x0d9: device->chip = &nvd9_chipset; break; | |
2512 | case 0x0e4: device->chip = &nve4_chipset; break; | |
2513 | case 0x0e6: device->chip = &nve6_chipset; break; | |
2514 | case 0x0e7: device->chip = &nve7_chipset; break; | |
2515 | case 0x0ea: device->chip = &nvea_chipset; break; | |
2516 | case 0x0f0: device->chip = &nvf0_chipset; break; | |
2517 | case 0x0f1: device->chip = &nvf1_chipset; break; | |
2518 | case 0x106: device->chip = &nv106_chipset; break; | |
2519 | case 0x108: device->chip = &nv108_chipset; break; | |
2520 | case 0x117: device->chip = &nv117_chipset; break; | |
2ed95a4c | 2521 | case 0x120: device->chip = &nv120_chipset; break; |
6cf813fb BS |
2522 | case 0x124: device->chip = &nv124_chipset; break; |
2523 | case 0x126: device->chip = &nv126_chipset; break; | |
2524 | case 0x12b: device->chip = &nv12b_chipset; break; | |
2525 | default: | |
0ac9d210 BS |
2526 | nvdev_error(device, "unknown chipset (%08x)\n", boot0); |
2527 | goto done; | |
2528 | } | |
2529 | ||
6cf813fb BS |
2530 | nvdev_info(device, "NVIDIA %s (%08x)\n", |
2531 | device->chip->name, boot0); | |
0ac9d210 BS |
2532 | |
2533 | /* determine frequency of timing crystal */ | |
2534 | if ( device->card_type <= NV_10 || device->chipset < 0x17 || | |
2535 | (device->chipset >= 0x20 && device->chipset < 0x25)) | |
2536 | strap &= 0x00000040; | |
2537 | else | |
2538 | strap &= 0x00400040; | |
2539 | ||
2540 | switch (strap) { | |
2541 | case 0x00000000: device->crystal = 13500; break; | |
2542 | case 0x00000040: device->crystal = 14318; break; | |
2543 | case 0x00400000: device->crystal = 27000; break; | |
2544 | case 0x00400040: device->crystal = 25000; break; | |
2545 | } | |
2546 | } else { | |
6cf813fb | 2547 | device->chip = &null_chipset; |
0ac9d210 BS |
2548 | } |
2549 | ||
6cf813fb BS |
2550 | if (!device->name) |
2551 | device->name = device->chip->name; | |
2552 | ||
0ac9d210 BS |
2553 | if (mmio) { |
2554 | device->pri = ioremap(mmio_base, mmio_size); | |
2555 | if (!device->pri) { | |
2556 | nvdev_error(device, "unable to map PRI\n"); | |
1299b637 AC |
2557 | ret = -ENOMEM; |
2558 | goto done; | |
0ac9d210 BS |
2559 | } |
2560 | } | |
2561 | ||
a1e88736 | 2562 | mutex_init(&device->mutex); |
6cf813fb | 2563 | |
68f3f702 | 2564 | for (i = 0; i < NVKM_SUBDEV_NR; i++) { |
6cf813fb BS |
2565 | #define _(s,m) case s: \ |
2566 | if (device->chip->m && (subdev_mask & (1ULL << (s)))) { \ | |
2567 | ret = device->chip->m(device, (s), &device->m); \ | |
2568 | if (ret) { \ | |
2569 | subdev = nvkm_device_subdev(device, (s)); \ | |
2570 | nvkm_subdev_del(&subdev); \ | |
2571 | device->m = NULL; \ | |
2572 | if (ret != -ENODEV) { \ | |
2573 | nvdev_error(device, "%s ctor failed, %d\n", \ | |
2574 | nvkm_subdev_name[s], ret); \ | |
2575 | goto done; \ | |
2576 | } \ | |
2577 | } \ | |
2578 | } \ | |
2579 | break | |
2580 | switch (i) { | |
dc06e366 MP |
2581 | _(NVKM_SUBDEV_BAR , bar); |
2582 | _(NVKM_SUBDEV_VBIOS , bios); | |
2583 | _(NVKM_SUBDEV_BUS , bus); | |
2584 | _(NVKM_SUBDEV_CLK , clk); | |
2585 | _(NVKM_SUBDEV_DEVINIT , devinit); | |
2586 | _(NVKM_SUBDEV_FB , fb); | |
2587 | _(NVKM_SUBDEV_FUSE , fuse); | |
2588 | _(NVKM_SUBDEV_GPIO , gpio); | |
2589 | _(NVKM_SUBDEV_I2C , i2c); | |
2590 | _(NVKM_SUBDEV_IBUS , ibus); | |
2591 | _(NVKM_SUBDEV_ICCSENSE, iccsense); | |
2592 | _(NVKM_SUBDEV_INSTMEM , imem); | |
2593 | _(NVKM_SUBDEV_LTC , ltc); | |
2594 | _(NVKM_SUBDEV_MC , mc); | |
2595 | _(NVKM_SUBDEV_MMU , mmu); | |
2596 | _(NVKM_SUBDEV_MXM , mxm); | |
2597 | _(NVKM_SUBDEV_PCI , pci); | |
2598 | _(NVKM_SUBDEV_PMU , pmu); | |
2599 | _(NVKM_SUBDEV_SECBOOT , secboot); | |
2600 | _(NVKM_SUBDEV_THERM , therm); | |
2601 | _(NVKM_SUBDEV_TIMER , timer); | |
2602 | _(NVKM_SUBDEV_VOLT , volt); | |
2603 | _(NVKM_ENGINE_BSP , bsp); | |
2604 | _(NVKM_ENGINE_CE0 , ce[0]); | |
2605 | _(NVKM_ENGINE_CE1 , ce[1]); | |
2606 | _(NVKM_ENGINE_CE2 , ce[2]); | |
2607 | _(NVKM_ENGINE_CIPHER , cipher); | |
2608 | _(NVKM_ENGINE_DISP , disp); | |
2609 | _(NVKM_ENGINE_DMAOBJ , dma); | |
2610 | _(NVKM_ENGINE_FIFO , fifo); | |
2611 | _(NVKM_ENGINE_GR , gr); | |
2612 | _(NVKM_ENGINE_IFB , ifb); | |
2613 | _(NVKM_ENGINE_ME , me); | |
2614 | _(NVKM_ENGINE_MPEG , mpeg); | |
2615 | _(NVKM_ENGINE_MSENC , msenc); | |
2616 | _(NVKM_ENGINE_MSPDEC , mspdec); | |
2617 | _(NVKM_ENGINE_MSPPP , msppp); | |
2618 | _(NVKM_ENGINE_MSVLD , msvld); | |
2619 | _(NVKM_ENGINE_PM , pm); | |
2620 | _(NVKM_ENGINE_SEC , sec); | |
2621 | _(NVKM_ENGINE_SW , sw); | |
2622 | _(NVKM_ENGINE_VIC , vic); | |
2623 | _(NVKM_ENGINE_VP , vp); | |
6cf813fb BS |
2624 | default: |
2625 | WARN_ON(1); | |
2626 | continue; | |
2627 | } | |
2628 | #undef _ | |
2629 | } | |
2630 | ||
2631 | ret = 0; | |
9274f4a9 BS |
2632 | done: |
2633 | mutex_unlock(&nv_devices_mutex); | |
2634 | return ret; | |
2635 | } |