Commit graph

1372 commits

Author SHA1 Message Date
Jesse Barnes
893cd01a1d i915: register definition & header file cleanup
It would be nice if one day the DRM driver was the canonical source for
register definitions and core macros.  To that end, this patch cleans things up
quite a bit, removing redundant definitions (some with different names
referring to the same register) and generally tidying up the header file.
2008-06-24 12:51:29 -07:00
Dave Airlie
11f2a2ed6f agp: use true/false instead of TRUE/FALSE 2008-06-22 18:25:22 +10:00
Dave Airlie
1915de2c56 drm: only use kernel ioctl cmd when doing a core ioctl.
Need to overhaul the mess that is driver ioctls
2008-06-20 15:35:47 +10:00
Dave Airlie
8712f0a17b drm: fix the ioctl to not believe userspace.
believing userspace causes oopses
2008-06-20 12:03:41 +10:00
Ian Romanick
5d99e79c3e xgi: Bump kernel version
This should have been bumped when the fence interface was changed the
other day.  Better late than never, I suppose.
2008-06-12 15:36:48 -07:00
Ian Romanick
b535567ee9 xgixp: Remove dependency on TTM fences 2008-06-10 22:18:14 -07:00
Ian Romanick
4f3da2f200 xgi: Fix 64-bit kernel / 32-bit user issue. 2008-06-10 11:29:15 -07:00
Dave Airlie
cdd0cb0ab3 ati_pcigart: split out the page insert function 2008-06-10 16:27:50 +10:00
Robert Noland
116870a908 I915 suspend/resume for FreeBSD 2008-06-08 13:56:14 -04:00
Michel Dänzer
ba7263b8c2 vblank: Don't wait or update the counter while the CRTC is supposedly disabled.
Without kernel modesetting, this requires cooperation of the userspace
modesetting driver. We may have to leave the vblank interrupt enabled otherwise
to avoid problems.
2008-06-03 11:28:10 +02:00
Michel Dänzer
237172b767 vblank: Clean up compensation for spurious wraparounds of driver counter.
Only compensate when the driver counter actually appears to have moved
backwards.

The compensation deltas need to be incremental instead of absolute; drop the
vblank_offset field and just use atomic_sub().
2008-06-03 11:28:10 +02:00
Michel Dänzer
d1dcb2b32e vblank: Special-case driver vblank counter going back by 1.
Turns out the radeon driver is affected by the same problem that prompted i915
to revert to less useful counter flipping at the end of the vblank interval. In
the long term, we can hopefully implement more reliable methods to achieve
counter flipping at the beginning of vblank, but otherwise this should be an
acceptable workaround.
2008-06-03 11:28:09 +02:00
Michel Dänzer
0144ebeb8a vblank: Don't return current sequence number and time if interrupted by signal. 2008-06-03 11:28:09 +02:00
Michel Dänzer
6b520005c6 Revert "don't copy back if an error was returned."
This reverts commit 6671ad1917.

The vblank ioctl needs to update the userspace parameters when interrupted by
a signal, which was prevented by this. Let's see if this breaks other ioctls...
2008-06-03 11:27:39 +02:00
Dave Airlie
f1e12d40af drm/ati_pcigart: use proper page mapping function
This should be pci_map_page not pci_map_single
2008-06-03 12:44:06 +10:00
Dave Airlie
5b86823fa3 radeon: split microcode out into a separate header file. 2008-05-28 11:12:57 +10:00
Dave Airlie
a09c0bbe11 ati_pcigart: oops wrong way around not that it actually mattered 2008-05-14 22:48:12 +10:00
Dave Airlie
4c6ec02eb8 ati_pcigart: stop working in the evenings you mess up too often 2008-05-14 22:44:22 +10:00
Dave Airlie
2712cdeec3 Revert "ati_pcigart: fixup properly this version might even work"
This reverts commit bc0836e12a.

tree has some kref hacks in it - oops
2008-05-14 22:43:28 +10:00
Dave Airlie
bc0836e12a ati_pcigart: fixup properly this version might even work 2008-05-14 22:42:21 +10:00
Dave Airlie
dd1f33f83c ati_pcigart: fill out 40-bit gart table support properly
Thanks to Alex for supplying this info.
2008-05-14 22:35:32 +10:00
Dave Airlie
b44f2da380 drm: nopage compat fixup for drm_vm
The kernel has removed nopage so move the old nopage codepaths into a compat vm file and switch to using the fault paths.

nopfn is on its way out in the future also, so we should switch to using fault
for that path as well soon
2008-05-07 15:10:23 +10:00
Jesse Barnes
cb33133ef3 i915: fix off by one in VGA save/restore of AR & CR regs
Turns out it's important to save/restore AR14 in particular.
2008-04-29 12:39:38 -07:00
Jesse Barnes
7f8e406085 Use fixed sized types in new ioctls
Make both crtc and the command argument 32 bits to avoid any 32-on-64 compat
issues.
2008-04-27 09:42:17 -07:00
Thomas Hellstrom
10b9a116a7 Don't disable IRQs, just tasklets, when taking the drm lock spinlock. 2008-04-23 17:34:21 +02:00
Jakob Bornecrantz
9ba3aaaa1a Fixed unlock check on EAGAIN 2008-04-23 12:43:45 +02:00
Pekka Paalanen
b3967765c0 linux-core Makefile: add GIT_REVISION
This tries to automatically fetch a git revision string and if succeeds,
it #defines GIT_REVISION string macro. Packagers can override it by
'make GIT_REVISION=foo'.

Update Nouveau to use GIT_REVISION, if defined, instead of DRIVER_DATE
in struct drm_driver.

Signed-off-by: Pekka Paalanen <pq@iki.fi>
2008-04-22 22:07:21 +03:00
Thomas Hellstrom
1ad1bd5bd9 Fix buffer object map wait error.
Add some branch prediction hints.
2008-04-14 13:52:33 +02:00
Thomas Hellstrom
c5955c6523 Fix buffer object creation validation.
BO lock fixes.
2008-04-14 12:14:20 +02:00
Thomas Hellstrom
c9b73ef6da Unlock the BO mutex while waiting for idle, unmapped, unfenced.
Move unfenced checking into idle checking.
Never time out while waiting for software events like unmapped or unfenced.
2008-04-14 12:13:33 +02:00
Thomas Hellstrom
65dd0e68ff Fix up buffer manager locking. 2008-04-14 12:13:17 +02:00
Keith Packard
b986d7d2c9 Save and restore dsparb and d_state regs 2008-04-11 20:31:07 -07:00
Patrice Mandin
db61f02bd7 Missing KERNEL_VERSION macro 2008-04-07 22:24:24 +02:00
Ben Skeggs
dfa9f03992 nouveau: enable accelerated move to sysmem 2008-04-07 13:29:11 +10:00
Ben Skeggs
c12b60b509 nouveau: enable m2mf for tt<->vram moves, fix fence_poll 2008-04-07 13:05:51 +10:00
Thomas Hellstrom
e89710bef7 Place highmem pages last in the ttm page array. 2008-04-06 11:21:22 +02:00
Thomas Hellstrom
c3888b97f6 Use clflush() when available for cache flushing. 2008-04-06 10:32:02 +02:00
Thomas Hellstrom
51a0fdcf3f [I915] Fix VRAM eviction. 2008-04-06 10:30:27 +02:00
Thomas Hellstrom
87ae5b22e3 Fix emergency allocation accounting. 2008-04-06 10:30:27 +02:00
Thomas Hellstrom
22d931f966 Initialize the fence::error member. 2008-03-30 21:30:43 +02:00
Thomas Hellstrom
1f4ba62567 [i915] Report buffer state _after_ fence submission to user-space.
This fixes a problem where the wrong bo->fence_type was reported, and
also saves some memory space.
[bo core] export the drm_bo_fill_rep_arg function.
2008-03-30 15:14:45 +02:00
Thomas Hellström
b8567bafff Don't call fence::poll during irq if there are no waiters. 2008-03-30 15:11:47 +02:00
Ben Skeggs
a244d29050 nouveau: silence warning 2008-03-24 03:26:37 +11:00
Thomas Hellstrom
602800a280 Evict cached_mapped relocatee before applying reloc.
Fix that got left out after the intel-post-reloc merge.
2008-03-17 11:38:46 +01:00
Dave Airlie
1f96e9a982 drm/pcigart: fix the pci gart to use the drm_pci wrapper.
This is the correct fix for the RS690 and hopefully the dma coherent work.

For now we limit everybody to a 32-bit DMA mask but it is possible for
RS690 to use a 40-bit DMA mask for the GART table itself,
and the PCIE cards can use 40-bits for the table entries.

Signed-off-by: Dave Airlie <airlied@redhat.com>
2008-03-17 07:05:46 +10:00
Thomas Hellstrom
b81d7b3b8d [via] Allow a little larger stride for SG DMA DownloadFromScreen. 2008-03-16 11:45:57 +01:00
Dave Airlie
afa803ee40 ati: fix rs690 igp gart by allocating the page table in 32-bit memory 2008-03-16 15:02:53 +10:00
Dave Airlie
76946ed83d drm: this u32 should be a dma_addr_t
doesn't fix anything but just making it consistent
2008-03-16 12:56:11 +10:00
Alan Hourihane
1ea8a470fe fix build problems 2008-03-14 00:25:42 +00:00
Mike Isely
ae1bb96a7e drm: Fix race that can lockup the kernel
The i915_vblank_swap() function schedules an automatic buffer swap
upon receipt of the vertical sync interrupt.  Such an operation is
lengthy so it can't be allowed to happen in normal interrupt context,
thus the DRM implements this by scheduling the work in a kernel
softirq-scheduled tasklet.  In order for the buffer swap to work
safely, the DRM's central lock must be taken, via a call to
drm_lock_take() located in drivers/char/drm/drm_irq.c within the
function drm_locked_tasklet_func().  The lock-taking logic uses a
non-interrupt-blocking spinlock to implement the manipulations needed
to take the lock.  This semantic would be safe if all attempts to use
the spinlock only happen from process context.  However this buffer
swap happens from softirq context which is really a form of interrupt
context.  Thus we have an unsafe situation, in that
drm_locked_tasklet_func() can block on a spinlock already taken by a
thread in process context which will never get scheduled again because
of the blocked softirq tasklet.  This wedges the kernel hard.

To trigger this bug, run a dual-head cloned mode configuration which
uses the i915 drm, then execute an opengl application which
synchronizes buffer swaps against the vertical sync interrupt.  In my
testing, a lockup always results after running anywhere from 5 minutes
to an hour and a half.  I believe dual-head is needed to really
trigger the problem because then the vertical sync interrupt handling
is no longer predictable (due to being interrupt-sourced from two
different heads running at different speeds).  This raises the
probability of the tasklet trying to run while the userspace DRI is
doing things to the GPU (and manipulating the DRM lock).

The fix is to change the relevant spinlock semantics to be the
interrupt-blocking form.  After this change I am no longer able to
trigger the lockup; the longest test run so far was 20 hours (test
stopped after that point).

Note: I have examined the places where this spinlock is being
employed; all are reasonably short bounded sequences and should be
suitable for interrupts being blocked without impacting overall kernel
interrupt response latency.

Signed-off-by: Mike Isely <isely@pobox.com>
2008-03-14 09:53:05 +10:00