aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_drv.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/gpu/drm/radeon/radeon_drv.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_drv.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c99
1 files changed, 72 insertions, 27 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 795403b0e2cd..73dfbe8e5f9e 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -47,9 +47,13 @@
47 * - 2.4.0 - add crtc id query 47 * - 2.4.0 - add crtc id query
48 * - 2.5.0 - add get accel 2 to work around ddx breakage for evergreen 48 * - 2.5.0 - add get accel 2 to work around ddx breakage for evergreen
49 * - 2.6.0 - add tiling config query (r6xx+), add initial HiZ support (r300->r500) 49 * - 2.6.0 - add tiling config query (r6xx+), add initial HiZ support (r300->r500)
50 * 2.7.0 - fixups for r600 2D tiling support. (no external ABI change), add eg dyn gpr regs
51 * 2.8.0 - pageflip support, r500 US_FORMAT regs. r500 ARGB2101010 colorbuf, r300->r500 CMASK, clock crystal query
52 * 2.9.0 - r600 tiling (s3tc,rgtc) working, SET_PREDICATION packet 3 on r600 + eg, backend query
53 * 2.10.0 - fusion 2D tiling
50 */ 54 */
51#define KMS_DRIVER_MAJOR 2 55#define KMS_DRIVER_MAJOR 2
52#define KMS_DRIVER_MINOR 6 56#define KMS_DRIVER_MINOR 10
53#define KMS_DRIVER_PATCHLEVEL 0 57#define KMS_DRIVER_PATCHLEVEL 0
54int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); 58int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
55int radeon_driver_unload_kms(struct drm_device *dev); 59int radeon_driver_unload_kms(struct drm_device *dev);
@@ -65,6 +69,10 @@ int radeon_resume_kms(struct drm_device *dev);
65u32 radeon_get_vblank_counter_kms(struct drm_device *dev, int crtc); 69u32 radeon_get_vblank_counter_kms(struct drm_device *dev, int crtc);
66int radeon_enable_vblank_kms(struct drm_device *dev, int crtc); 70int radeon_enable_vblank_kms(struct drm_device *dev, int crtc);
67void radeon_disable_vblank_kms(struct drm_device *dev, int crtc); 71void radeon_disable_vblank_kms(struct drm_device *dev, int crtc);
72int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc,
73 int *max_error,
74 struct timeval *vblank_time,
75 unsigned flags);
68void radeon_driver_irq_preinstall_kms(struct drm_device *dev); 76void radeon_driver_irq_preinstall_kms(struct drm_device *dev);
69int radeon_driver_irq_postinstall_kms(struct drm_device *dev); 77int radeon_driver_irq_postinstall_kms(struct drm_device *dev);
70void radeon_driver_irq_uninstall_kms(struct drm_device *dev); 78void radeon_driver_irq_uninstall_kms(struct drm_device *dev);
@@ -73,9 +81,21 @@ int radeon_dma_ioctl_kms(struct drm_device *dev, void *data,
73 struct drm_file *file_priv); 81 struct drm_file *file_priv);
74int radeon_gem_object_init(struct drm_gem_object *obj); 82int radeon_gem_object_init(struct drm_gem_object *obj);
75void radeon_gem_object_free(struct drm_gem_object *obj); 83void radeon_gem_object_free(struct drm_gem_object *obj);
84extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, int crtc,
85 int *vpos, int *hpos);
76extern struct drm_ioctl_desc radeon_ioctls_kms[]; 86extern struct drm_ioctl_desc radeon_ioctls_kms[];
77extern int radeon_max_kms_ioctl; 87extern int radeon_max_kms_ioctl;
78int radeon_mmap(struct file *filp, struct vm_area_struct *vma); 88int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
89int radeon_mode_dumb_mmap(struct drm_file *filp,
90 struct drm_device *dev,
91 uint32_t handle, uint64_t *offset_p);
92int radeon_mode_dumb_create(struct drm_file *file_priv,
93 struct drm_device *dev,
94 struct drm_mode_create_dumb *args);
95int radeon_mode_dumb_destroy(struct drm_file *file_priv,
96 struct drm_device *dev,
97 uint32_t handle);
98
79#if defined(CONFIG_DEBUG_FS) 99#if defined(CONFIG_DEBUG_FS)
80int radeon_debugfs_init(struct drm_minor *minor); 100int radeon_debugfs_init(struct drm_minor *minor);
81void radeon_debugfs_cleanup(struct drm_minor *minor); 101void radeon_debugfs_cleanup(struct drm_minor *minor);
@@ -93,10 +113,10 @@ int radeon_benchmarking = 0;
93int radeon_testing = 0; 113int radeon_testing = 0;
94int radeon_connector_table = 0; 114int radeon_connector_table = 0;
95int radeon_tv = 1; 115int radeon_tv = 1;
96int radeon_new_pll = -1; 116int radeon_audio = 0;
97int radeon_audio = 1;
98int radeon_disp_priority = 0; 117int radeon_disp_priority = 0;
99int radeon_hw_i2c = 0; 118int radeon_hw_i2c = 0;
119int radeon_pcie_gen2 = 0;
100 120
101MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); 121MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
102module_param_named(no_wb, radeon_no_wb, int, 0444); 122module_param_named(no_wb, radeon_no_wb, int, 0444);
@@ -131,10 +151,7 @@ module_param_named(connector_table, radeon_connector_table, int, 0444);
131MODULE_PARM_DESC(tv, "TV enable (0 = disable)"); 151MODULE_PARM_DESC(tv, "TV enable (0 = disable)");
132module_param_named(tv, radeon_tv, int, 0444); 152module_param_named(tv, radeon_tv, int, 0444);
133 153
134MODULE_PARM_DESC(new_pll, "Select new PLL code"); 154MODULE_PARM_DESC(audio, "Audio enable (1 = enable)");
135module_param_named(new_pll, radeon_new_pll, int, 0444);
136
137MODULE_PARM_DESC(audio, "Audio enable (0 = disable)");
138module_param_named(audio, radeon_audio, int, 0444); 155module_param_named(audio, radeon_audio, int, 0444);
139 156
140MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)"); 157MODULE_PARM_DESC(disp_priority, "Display Priority (0 = auto, 1 = normal, 2 = high)");
@@ -143,6 +160,9 @@ module_param_named(disp_priority, radeon_disp_priority, int, 0444);
143MODULE_PARM_DESC(hw_i2c, "hw i2c engine enable (0 = disable)"); 160MODULE_PARM_DESC(hw_i2c, "hw i2c engine enable (0 = disable)");
144module_param_named(hw_i2c, radeon_hw_i2c, int, 0444); 161module_param_named(hw_i2c, radeon_hw_i2c, int, 0444);
145 162
163MODULE_PARM_DESC(pcie_gen2, "PCIE Gen2 mode (1 = enable)");
164module_param_named(pcie_gen2, radeon_pcie_gen2, int, 0444);
165
146static int radeon_suspend(struct drm_device *dev, pm_message_t state) 166static int radeon_suspend(struct drm_device *dev, pm_message_t state)
147{ 167{
148 drm_radeon_private_t *dev_priv = dev->dev_private; 168 drm_radeon_private_t *dev_priv = dev->dev_private;
@@ -203,8 +223,6 @@ static struct drm_driver driver_old = {
203 .irq_uninstall = radeon_driver_irq_uninstall, 223 .irq_uninstall = radeon_driver_irq_uninstall,
204 .irq_handler = radeon_driver_irq_handler, 224 .irq_handler = radeon_driver_irq_handler,
205 .reclaim_buffers = drm_core_reclaim_buffers, 225 .reclaim_buffers = drm_core_reclaim_buffers,
206 .get_map_ofs = drm_core_get_map_ofs,
207 .get_reg_ofs = drm_core_get_reg_ofs,
208 .ioctls = radeon_ioctls, 226 .ioctls = radeon_ioctls,
209 .dma_ioctl = radeon_cp_buffers, 227 .dma_ioctl = radeon_cp_buffers,
210 .fops = { 228 .fops = {
@@ -219,11 +237,7 @@ static struct drm_driver driver_old = {
219#ifdef CONFIG_COMPAT 237#ifdef CONFIG_COMPAT
220 .compat_ioctl = radeon_compat_ioctl, 238 .compat_ioctl = radeon_compat_ioctl,
221#endif 239#endif
222 }, 240 .llseek = noop_llseek,
223
224 .pci_driver = {
225 .name = DRIVER_NAME,
226 .id_table = pciidlist,
227 }, 241 },
228 242
229 .name = DRIVER_NAME, 243 .name = DRIVER_NAME,
@@ -236,9 +250,28 @@ static struct drm_driver driver_old = {
236 250
237static struct drm_driver kms_driver; 251static struct drm_driver kms_driver;
238 252
253static void radeon_kick_out_firmware_fb(struct pci_dev *pdev)
254{
255 struct apertures_struct *ap;
256 bool primary = false;
257
258 ap = alloc_apertures(1);
259 ap->ranges[0].base = pci_resource_start(pdev, 0);
260 ap->ranges[0].size = pci_resource_len(pdev, 0);
261
262#ifdef CONFIG_X86
263 primary = pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
264#endif
265 remove_conflicting_framebuffers(ap, "radeondrmfb", primary);
266 kfree(ap);
267}
268
239static int __devinit 269static int __devinit
240radeon_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) 270radeon_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
241{ 271{
272 /* Get rid of things like offb */
273 radeon_kick_out_firmware_fb(pdev);
274
242 return drm_get_pci_dev(pdev, ent, &kms_driver); 275 return drm_get_pci_dev(pdev, ent, &kms_driver);
243} 276}
244 277
@@ -281,6 +314,8 @@ static struct drm_driver kms_driver = {
281 .get_vblank_counter = radeon_get_vblank_counter_kms, 314 .get_vblank_counter = radeon_get_vblank_counter_kms,
282 .enable_vblank = radeon_enable_vblank_kms, 315 .enable_vblank = radeon_enable_vblank_kms,
283 .disable_vblank = radeon_disable_vblank_kms, 316 .disable_vblank = radeon_disable_vblank_kms,
317 .get_vblank_timestamp = radeon_get_vblank_timestamp_kms,
318 .get_scanout_position = radeon_get_crtc_scanoutpos,
284#if defined(CONFIG_DEBUG_FS) 319#if defined(CONFIG_DEBUG_FS)
285 .debugfs_init = radeon_debugfs_init, 320 .debugfs_init = radeon_debugfs_init,
286 .debugfs_cleanup = radeon_debugfs_cleanup, 321 .debugfs_cleanup = radeon_debugfs_cleanup,
@@ -290,12 +325,13 @@ static struct drm_driver kms_driver = {
290 .irq_uninstall = radeon_driver_irq_uninstall_kms, 325 .irq_uninstall = radeon_driver_irq_uninstall_kms,
291 .irq_handler = radeon_driver_irq_handler_kms, 326 .irq_handler = radeon_driver_irq_handler_kms,
292 .reclaim_buffers = drm_core_reclaim_buffers, 327 .reclaim_buffers = drm_core_reclaim_buffers,
293 .get_map_ofs = drm_core_get_map_ofs,
294 .get_reg_ofs = drm_core_get_reg_ofs,
295 .ioctls = radeon_ioctls_kms, 328 .ioctls = radeon_ioctls_kms,
296 .gem_init_object = radeon_gem_object_init, 329 .gem_init_object = radeon_gem_object_init,
297 .gem_free_object = radeon_gem_object_free, 330 .gem_free_object = radeon_gem_object_free,
298 .dma_ioctl = radeon_dma_ioctl_kms, 331 .dma_ioctl = radeon_dma_ioctl_kms,
332 .dumb_create = radeon_mode_dumb_create,
333 .dumb_map_offset = radeon_mode_dumb_mmap,
334 .dumb_destroy = radeon_mode_dumb_destroy,
299 .fops = { 335 .fops = {
300 .owner = THIS_MODULE, 336 .owner = THIS_MODULE,
301 .open = drm_open, 337 .open = drm_open,
@@ -310,15 +346,6 @@ static struct drm_driver kms_driver = {
310#endif 346#endif
311 }, 347 },
312 348
313 .pci_driver = {
314 .name = DRIVER_NAME,
315 .id_table = pciidlist,
316 .probe = radeon_pci_probe,
317 .remove = radeon_pci_remove,
318 .suspend = radeon_pci_suspend,
319 .resume = radeon_pci_resume,
320 },
321
322 .name = DRIVER_NAME, 349 .name = DRIVER_NAME,
323 .desc = DRIVER_DESC, 350 .desc = DRIVER_DESC,
324 .date = DRIVER_DATE, 351 .date = DRIVER_DATE,
@@ -328,15 +355,32 @@ static struct drm_driver kms_driver = {
328}; 355};
329 356
330static struct drm_driver *driver; 357static struct drm_driver *driver;
358static struct pci_driver *pdriver;
359
360static struct pci_driver radeon_pci_driver = {
361 .name = DRIVER_NAME,
362 .id_table = pciidlist,
363};
364
365static struct pci_driver radeon_kms_pci_driver = {
366 .name = DRIVER_NAME,
367 .id_table = pciidlist,
368 .probe = radeon_pci_probe,
369 .remove = radeon_pci_remove,
370 .suspend = radeon_pci_suspend,
371 .resume = radeon_pci_resume,
372};
331 373
332static int __init radeon_init(void) 374static int __init radeon_init(void)
333{ 375{
334 driver = &driver_old; 376 driver = &driver_old;
377 pdriver = &radeon_pci_driver;
335 driver->num_ioctls = radeon_max_ioctl; 378 driver->num_ioctls = radeon_max_ioctl;
336#ifdef CONFIG_VGA_CONSOLE 379#ifdef CONFIG_VGA_CONSOLE
337 if (vgacon_text_force() && radeon_modeset == -1) { 380 if (vgacon_text_force() && radeon_modeset == -1) {
338 DRM_INFO("VGACON disable radeon kernel modesetting.\n"); 381 DRM_INFO("VGACON disable radeon kernel modesetting.\n");
339 driver = &driver_old; 382 driver = &driver_old;
383 pdriver = &radeon_pci_driver;
340 driver->driver_features &= ~DRIVER_MODESET; 384 driver->driver_features &= ~DRIVER_MODESET;
341 radeon_modeset = 0; 385 radeon_modeset = 0;
342 } 386 }
@@ -354,18 +398,19 @@ static int __init radeon_init(void)
354 if (radeon_modeset == 1) { 398 if (radeon_modeset == 1) {
355 DRM_INFO("radeon kernel modesetting enabled.\n"); 399 DRM_INFO("radeon kernel modesetting enabled.\n");
356 driver = &kms_driver; 400 driver = &kms_driver;
401 pdriver = &radeon_kms_pci_driver;
357 driver->driver_features |= DRIVER_MODESET; 402 driver->driver_features |= DRIVER_MODESET;
358 driver->num_ioctls = radeon_max_kms_ioctl; 403 driver->num_ioctls = radeon_max_kms_ioctl;
359 radeon_register_atpx_handler(); 404 radeon_register_atpx_handler();
360 } 405 }
361 /* if the vga console setting is enabled still 406 /* if the vga console setting is enabled still
362 * let modprobe override it */ 407 * let modprobe override it */
363 return drm_init(driver); 408 return drm_pci_init(driver, pdriver);
364} 409}
365 410
366static void __exit radeon_exit(void) 411static void __exit radeon_exit(void)
367{ 412{
368 drm_exit(driver); 413 drm_pci_exit(driver, pdriver);
369 radeon_unregister_atpx_handler(); 414 radeon_unregister_atpx_handler();
370} 415}
371 416