aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2014-02-23 20:28:37 -0500
committerBen Skeggs <bskeggs@redhat.com>2014-03-26 00:01:00 -0400
commit3f204647cd9ede1bc39a4f19a3d374e11455814f (patch)
tree7453a2207474ca1233c86959faa9b26752ed1312 /drivers/gpu
parentc68c29c04c4ff11e51d98b2225c1e3b37ed22996 (diff)
drm/gm100/device: recognise GM107
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/nouveau/Makefile1
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/device/base.c2
-rw-r--r--drivers/gpu/drm/nouveau/core/engine/device/gm100.c108
-rw-r--r--drivers/gpu/drm/nouveau/core/include/core/device.h1
-rw-r--r--drivers/gpu/drm/nouveau/core/include/engine/device.h1
5 files changed, 113 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile
index e3a224fecad6..a4a3dffce105 100644
--- a/drivers/gpu/drm/nouveau/Makefile
+++ b/drivers/gpu/drm/nouveau/Makefile
@@ -211,6 +211,7 @@ nouveau-y += core/engine/device/nv40.o
211nouveau-y += core/engine/device/nv50.o 211nouveau-y += core/engine/device/nv50.o
212nouveau-y += core/engine/device/nvc0.o 212nouveau-y += core/engine/device/nvc0.o
213nouveau-y += core/engine/device/nve0.o 213nouveau-y += core/engine/device/nve0.o
214nouveau-y += core/engine/device/gm100.o
214nouveau-y += core/engine/disp/base.o 215nouveau-y += core/engine/disp/base.o
215nouveau-y += core/engine/disp/nv04.o 216nouveau-y += core/engine/disp/nv04.o
216nouveau-y += core/engine/disp/nv50.o 217nouveau-y += core/engine/disp/nv50.o
diff --git a/drivers/gpu/drm/nouveau/core/engine/device/base.c b/drivers/gpu/drm/nouveau/core/engine/device/base.c
index dd01c6c435d6..96559ac400dc 100644
--- a/drivers/gpu/drm/nouveau/core/engine/device/base.c
+++ b/drivers/gpu/drm/nouveau/core/engine/device/base.c
@@ -185,6 +185,7 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
185 case 0x0e0: 185 case 0x0e0:
186 case 0x0f0: 186 case 0x0f0:
187 case 0x100: device->card_type = NV_E0; break; 187 case 0x100: device->card_type = NV_E0; break;
188 case 0x110: device->card_type = GM100; break;
188 default: 189 default:
189 break; 190 break;
190 } 191 }
@@ -208,6 +209,7 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
208 case NV_C0: 209 case NV_C0:
209 case NV_D0: ret = nvc0_identify(device); break; 210 case NV_D0: ret = nvc0_identify(device); break;
210 case NV_E0: ret = nve0_identify(device); break; 211 case NV_E0: ret = nve0_identify(device); break;
212 case GM100: ret = gm100_identify(device); break;
211 default: 213 default:
212 ret = -EINVAL; 214 ret = -EINVAL;
213 break; 215 break;
diff --git a/drivers/gpu/drm/nouveau/core/engine/device/gm100.c b/drivers/gpu/drm/nouveau/core/engine/device/gm100.c
new file mode 100644
index 000000000000..b39850ac02bf
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/core/engine/device/gm100.c
@@ -0,0 +1,108 @@
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 */
24
25#include <subdev/bios.h>
26#include <subdev/bus.h>
27#include <subdev/gpio.h>
28#include <subdev/i2c.h>
29#include <subdev/clock.h>
30#include <subdev/therm.h>
31#include <subdev/mxm.h>
32#include <subdev/devinit.h>
33#include <subdev/mc.h>
34#include <subdev/timer.h>
35#include <subdev/fb.h>
36#include <subdev/ltcg.h>
37#include <subdev/ibus.h>
38#include <subdev/instmem.h>
39#include <subdev/vm.h>
40#include <subdev/bar.h>
41#include <subdev/pwr.h>
42#include <subdev/volt.h>
43
44#include <engine/device.h>
45#include <engine/dmaobj.h>
46#include <engine/fifo.h>
47#include <engine/software.h>
48#include <engine/graph.h>
49#include <engine/disp.h>
50#include <engine/copy.h>
51#include <engine/bsp.h>
52#include <engine/vp.h>
53#include <engine/ppp.h>
54#include <engine/perfmon.h>
55
56int
57gm100_identify(struct nouveau_device *device)
58{
59 switch (device->chipset) {
60 case 0x117:
61 device->cname = "GM107";
62 device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass;
63 device->oclass[NVDEV_SUBDEV_GPIO ] = &nve0_gpio_oclass;
64 device->oclass[NVDEV_SUBDEV_I2C ] = &nvd0_i2c_oclass;
65 device->oclass[NVDEV_SUBDEV_CLOCK ] = &nve0_clock_oclass;
66#if 0
67 device->oclass[NVDEV_SUBDEV_THERM ] = &nvd0_therm_oclass;
68#endif
69 device->oclass[NVDEV_SUBDEV_MXM ] = &nv50_mxm_oclass;
70 device->oclass[NVDEV_SUBDEV_DEVINIT] = gm107_devinit_oclass;
71 device->oclass[NVDEV_SUBDEV_MC ] = nvc3_mc_oclass;
72 device->oclass[NVDEV_SUBDEV_BUS ] = nvc0_bus_oclass;
73 device->oclass[NVDEV_SUBDEV_TIMER ] = &gk20a_timer_oclass;
74 device->oclass[NVDEV_SUBDEV_FB ] = gm107_fb_oclass;
75 device->oclass[NVDEV_SUBDEV_LTCG ] = gm107_ltcg_oclass;
76 device->oclass[NVDEV_SUBDEV_IBUS ] = &nve0_ibus_oclass;
77 device->oclass[NVDEV_SUBDEV_INSTMEM] = nv50_instmem_oclass;
78 device->oclass[NVDEV_SUBDEV_VM ] = &nvc0_vmmgr_oclass;
79 device->oclass[NVDEV_SUBDEV_BAR ] = &nvc0_bar_oclass;
80#if 0
81 device->oclass[NVDEV_SUBDEV_PWR ] = &nv108_pwr_oclass;
82 device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass;
83#endif
84 device->oclass[NVDEV_ENGINE_DMAOBJ ] = &nvd0_dmaeng_oclass;
85 device->oclass[NVDEV_ENGINE_FIFO ] = nv108_fifo_oclass;
86 device->oclass[NVDEV_ENGINE_SW ] = nvc0_software_oclass;
87#if 0
88 device->oclass[NVDEV_ENGINE_GR ] = nv108_graph_oclass;
89#endif
90 device->oclass[NVDEV_ENGINE_DISP ] = gm107_disp_oclass;
91 device->oclass[NVDEV_ENGINE_COPY0 ] = &nve0_copy0_oclass;
92#if 0
93 device->oclass[NVDEV_ENGINE_COPY1 ] = &nve0_copy1_oclass;
94#endif
95 device->oclass[NVDEV_ENGINE_COPY2 ] = &nve0_copy2_oclass;
96#if 0
97 device->oclass[NVDEV_ENGINE_BSP ] = &nve0_bsp_oclass;
98 device->oclass[NVDEV_ENGINE_VP ] = &nve0_vp_oclass;
99 device->oclass[NVDEV_ENGINE_PPP ] = &nvc0_ppp_oclass;
100#endif
101 break;
102 default:
103 nv_fatal(device, "unknown Maxwell chipset\n");
104 return -EINVAL;
105 }
106
107 return 0;
108}
diff --git a/drivers/gpu/drm/nouveau/core/include/core/device.h b/drivers/gpu/drm/nouveau/core/include/core/device.h
index eb31bb206eaa..7e7acee916fb 100644
--- a/drivers/gpu/drm/nouveau/core/include/core/device.h
+++ b/drivers/gpu/drm/nouveau/core/include/core/device.h
@@ -85,6 +85,7 @@ struct nouveau_device {
85 NV_C0 = 0xc0, 85 NV_C0 = 0xc0,
86 NV_D0 = 0xd0, 86 NV_D0 = 0xd0,
87 NV_E0 = 0xe0, 87 NV_E0 = 0xe0,
88 GM100 = 0x110,
88 } card_type; 89 } card_type;
89 u32 chipset; 90 u32 chipset;
90 u32 crystal; 91 u32 crystal;
diff --git a/drivers/gpu/drm/nouveau/core/include/engine/device.h b/drivers/gpu/drm/nouveau/core/include/engine/device.h
index b3dd2c4c2f1e..5856694d9b3b 100644
--- a/drivers/gpu/drm/nouveau/core/include/engine/device.h
+++ b/drivers/gpu/drm/nouveau/core/include/engine/device.h
@@ -17,6 +17,7 @@ int nv40_identify(struct nouveau_device *);
17int nv50_identify(struct nouveau_device *); 17int nv50_identify(struct nouveau_device *);
18int nvc0_identify(struct nouveau_device *); 18int nvc0_identify(struct nouveau_device *);
19int nve0_identify(struct nouveau_device *); 19int nve0_identify(struct nouveau_device *);
20int gm100_identify(struct nouveau_device *);
20 21
21struct nouveau_device *nouveau_device_find(u64 name); 22struct nouveau_device *nouveau_device_find(u64 name);
22 23