Commit Graph

2259 Commits (d70d60529f77ec73322be7b887fd6a3faf133bce)

Author SHA1 Message Date
Jesse Barnes 94dcc83ad2 Revert "i915: only use tiled blits on 965+"
This reverts commit 727d4f1d16, somehow git
deleted the symlink and replaced it with the file.
2008-07-01 16:09:02 -07:00
Jesse Barnes 727d4f1d16 i915: only use tiled blits on 965+
When scheduled swaps occur, we need to blit between front & back buffers.  If
the buffers are tiled, we need to set the appropriate XY_SRC_COPY tile bit, but
only on 965 chips, since it will cause corruption on pre-965 (e.g. 945).

Bug reported by and fix tested by Tomas Janousek <tomi@nomi.cz>.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2008-07-01 12:25:16 -07:00
Jie Luo e935925cd7 i915: enable bus mastering on i915 at resume time
On 9xx chips, bus mastering needs to be enabled at resume time for much of the
chip to function.  With this patch, vblank interrupts will work as expected
on resume, along with other chip functions.   Fixes kernel bugzilla #10844.

Signed-off-by: Jie Luo <clotho67@gmail.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2008-07-01 12:22:54 -07:00
Maarten Maathuis 2b9c5719c0 NV50: switch to fixed point scale factor calculations 2008-07-01 16:00:09 +02:00
Maarten Maathuis bc32d1798a NV50: some i2c cleanup 2008-07-01 15:14:30 +02:00
Maarten Maathuis 91c742663a NV50: use list_head item instead of list_head head to avoid confusion 2008-06-27 18:58:13 +02:00
Maarten Maathuis 9f28da80f6 Change some obviously wrong things about property blobs, still broken though.
- I do not fully understand these blobs, so i'm leaving it at this for the moment.
2008-06-27 18:45:08 +02:00
Maarten Maathuis 71906e86e8 [modesetting-101] Actually store properties when being changed. 2008-06-27 16:30:25 +02:00
Maarten Maathuis 01ee5eda9a NV50: A minor change. 2008-06-27 01:29:30 +02:00
Maarten Maathuis 701011224c NV50: Implement DPMS. 2008-06-27 01:16:36 +02:00
Maarten Maathuis d88616555d [modesetting-101] tab-cleanup 2008-06-26 23:21:01 +02:00
Maarten Maathuis 087e3f577d Revert "modesetting-101: Make dpms property optional + misc cleanup."
This reverts commit 13943fe582.
2008-06-26 23:12:04 +02:00
Maarten Maathuis 13943fe582 modesetting-101: Make dpms property optional + misc cleanup.
- intel_crt seems the only one to provide it, so init it there.
2008-06-26 21:28:29 +02:00
Maarten Maathuis 4d85d5d251 NV50: i misunderstood NOUVEAU_MEM_INTERNAL, so remove it 2008-06-25 15:27:07 +02:00
Maarten Maathuis 09b67dda0b NV50: Some cleanup and fixes. 2008-06-25 15:16:38 +02:00
root d55629a13d silence warning 2008-06-24 23:18:29 +01:00
Jesse Barnes d726eb2e5e i915: remove unused variable
Leftover dev_priv from the move of the suspend/resume code into shared-core.
2008-06-24 12:57:21 -07:00
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
Maarten Maathuis 5dbcb7551f NV50: minor change 2008-06-24 20:29:08 +02:00
Keith Packard 2c6feb7a5a [intel-gem] Include drm_compat.h to get kmap_atomic_prot_pfn 2008-06-24 09:52:43 -07:00
Keith Packard c0043155ad drm_compat: it's CONFIG_HIGHMEM, not CONFIG_HIMEM
A mis-spelled config option (was it spelled that way in the past?)
eliminated kmap_atomic_prot_pfn from core DRM.
2008-06-24 09:52:33 -07:00
Keith Packard ed73651d47 [intel-gem] Recover resources from wedged hardware.
Clean up queues, free objects. On the next entervt, unmark the hardware to
let the user try again (presumably after resetting the chip). Someday we'll
automatically recover...
2008-06-24 09:52:14 -07:00
Keith Packard 71d975072c [intel-gem] pwrite through GTT
Pin/copy_from_user/unpin through the GTT to eliminate clflush costs.
Benchmarks say this helps quite a bit.
2008-06-24 09:52:05 -07:00
Maarten Maathuis 14522b3e1b NV50: fix a few misc things 2008-06-24 12:38:57 +02:00
Maarten Maathuis 315fef7ee4 NV50: fix cursor hide/show 2008-06-24 10:16:52 +02:00
Maarten Maathuis e7582cfff6 NV50: These are actually errors. 2008-06-24 09:41:13 +02:00
Maarten Maathuis 5072a2911e NV50: fix some misc bugs 2008-06-24 00:00:02 +02:00
Maarten Maathuis 246b41fea4 [modesetting-101] update mode count after fill_modes.
- This avoids returning with a mode count of 0, thus not allocating space for the 2nd ioctl.
2008-06-23 22:59:17 +02:00
Maarten Maathuis 0a45f15066 NV50: Improve set_config and fix some minor bugs. 2008-06-23 20:33:32 +02:00
Maarten Maathuis b0b0f37443 NV50: Fix a few more possible leaks. 2008-06-22 19:04:22 +02:00
Maarten Maathuis 7c9551a464 fix typo 2008-06-22 18:58:04 +02:00
Maarten Maathuis e67cd7dda9 NV50: A few minor added safeties + cleanup. 2008-06-22 18:47:51 +02:00
Maarten Maathuis 3809209349 Undo something i didn't want to change.
- I made it consistent with recent kernel fb code (maybe this is older bugged code?)
- Still i don't use this and i should leave it to others.
2008-06-22 17:01:30 +02:00
Maarten Maathuis 473a1997ac NV50: Initial import of kernel modesetting. 2008-06-22 16:29:00 +02:00
Dave Airlie 11f2a2ed6f agp: use true/false instead of TRUE/FALSE 2008-06-22 18:25:22 +10:00
Keith Packard 8be6ec491f [intel-gem] Add /proc/dri/*/i915_gem_interrupt
This tracks most of the interrupt-related status, including the
interrupt registers in the chip and the sequence number variables.
2008-06-21 00:13:18 -07:00
Keith Packard f4bd566e0b [intel-gem] Remove unused variable. 2008-06-21 00:10:10 -07:00
Keith Packard 54817317e9 [intel-gem] Use polling in i915_gem_idle instead of interrupts.
While waiting for the hardware to idle on leavevt or lastclose, poll
for the sync sequence number instead of waiting for an interrupt. This
allows the code to bail if the hardware hangs for some reason. Also, this
avoids issues with signals as the exisiting wait function is interruptible.
2008-06-20 21:10:42 -07:00
Keith Packard 71b1623e22 [intel-gem] Add intel-specific /proc entries to help monitor gem operation
This adds gem_active, gem_flushing, gem_inactive, gem_request and gem_seqno
entries to monitor gem operation and help debug issues.
2008-06-20 21:07:46 -07:00
Keith Packard 2bd9799e4c Add device-specific proc_init and proc_cleanup hooks
This allows device drivers to add proc files
2008-06-20 16:40:14 -07:00
Keith Packard 918420deef [intel-gem] Use shmem_getpage instead of find_or_create_page
find_or_create_page doesn't quite set up pages correctly; any newly created
pages aren't hooked into the shmem object quite right; user space mmaps of
those pages end up mapping pages full of zeros which then get written to the
real pages inappropriately. This patch requires that the kernel export
shmem_getpage.
2008-06-20 00:21:57 -07:00
Keith Packard 52e5d24fae [intel-gem] Add DRM_IOCTL_I915_GEM_SW_FINISH to flag CPU writes
When a software fallback has completed, usermode must notify the kernel so
that any scanout buffers can be synchronized. This ioctl should be called
whenever a fallback completes to flush CPU and chipset caches.
2008-06-20 00:21:57 -07: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
Jesse Barnes f58e21c7d0 i915: add blanking support to intelfb
Got tired of not having my LCD actually turn off when I left the machine at the
console.
2008-06-18 16:49:51 -07:00
Jesse Barnes 57b8837b4e i915: cleanup PCI state before disabling MSI
Core MSI code will BUG() if an interrupt handler is still registered when
pci_disable_msi() is called.
2008-06-18 15:31:48 -07:00
Jesse Barnes 86accbcb34 Merge commit 'origin/drm-gem' into modesetting-gem
Lots of conflicts, seems to load ok, but I'm sure some bugs snuck in.

Conflicts:

	linux-core/drmP.h
	linux-core/drm_lock.c
	linux-core/i915_gem.c
	shared-core/drm.h
	shared-core/i915_dma.c
	shared-core/i915_drv.h
	shared-core/i915_irq.c
2008-06-18 15:25:54 -07:00
Jesse Barnes c843d47b90 i915: use WC mapping for framebuffer screen_base 2008-06-18 14:51:46 -07:00
Jesse Barnes 241ff808b0 Merge branch 'modesetting-101' into modesetting-gem 2008-06-18 14:01:47 -07:00
Jesse Barnes 7010d50007 i915: switch back to fbcon on panic
Normally when X is running, panic messages will be invisible and the machine
will just appear to hard hang.  This patch adds support for switching back to
the fbcon framebuffer on panic (through the use of a panic notifier
registration) so we can see what happened.

Note that in order to be really useful, X will have to run its VT in something
other than KD_GRAPHICS mode.  Also, not all kernel errors result in panics,
some go through BUG() which may trigger another type of event, not resulting in
a switch.
2008-06-18 13:57:39 -07:00
Eric Anholt e7424e4580 [intel] Quirk away MSI support on 945G/GM.
The PCI caps register reports MSI support even though it isn't really there.
2008-06-16 15:15:02 -07:00
Eric Anholt c847271179 [linux] Use the device's irq for handler setup instead of stale dev->irq.
This fixes registration when MSI is set up after the stub function fills in
dev->irq.  Otherwise /proc/interrupts would report attachment to the fasteoi
interrupt.  dev->irq is still exposed (and updated at IRQ setup)
for the drivers that use it for whatever reason.
2008-06-16 15:09:11 -07:00
Keith Packard 3e48e14499 [intel-gem] Execute MI_FLUSH in leavevt_ioctl
In leavevt_ioctl, queue an MI_FLUSH and then block waiting for it to
complete. This will empty the active and flushing lists. That leaves only
the inactive list to evict.
2008-06-13 19:49:47 -07:00
Keith Packard 19c3418848 [intel-gem] inactive list may contain objects in CPU write domain
Pin/unpin need to know whether to remove/add objects from the inactive list,
inactive objects cannot be in any GPU write domain as those would be on the
flushing list instead. However, inactive objects may be in the CPU write
domain.
2008-06-13 19:47:23 -07:00
Keith Packard 93c2871ecc [intel-gem] BUG_ON active objects in gem_object_unbind
Now that gem_object_unbind waits for rendering to complete, objects should
not be active when they are being pulled from the GTT. BUG_ON if this is
broken.
2008-06-13 19:43:40 -07:00
Keith Packard 68856b619b [intel-gem] Debugging -- verify inactive list invariants
Inactive list elements may not be pinned, active or have non-CPU write
domains.
2008-06-13 19:40:16 -07:00
Keith Packard 732b196074 [intel-gem] whitespace fixes 2008-06-13 19:37:44 -07:00
Keith Packard a7139cb851 [intel-gem] show total GTT space in /proc/dri/*/gem_objects 2008-06-13 19:35:22 -07:00
Keith Packard 73bc18cad8 [intel-gem] Wait for rendering to complete before unbinding.
Moving to the CPU domain doesn't ensure that rendering is finished, the
buffer may still be in use as a texture or other data source.
2008-06-13 17:06:35 -07:00
Keith Packard 217beb9c8d [intel-gem] add gtt and pin counts to /proc/dri/*/gem_objects
Not quite portable, but these are useful for intel. Some more general
mechanism could be done...
2008-06-13 15:43:02 -07:00
Keith Packard 4086cdb655 [intel-gem] Left the last exec buffer pinned. oops.
Loop end variable 'pinned' was set one too low.
2008-06-13 15:38:13 -07:00
Keith Packard baf5213694 [intel-gem] Pin objects during execbuffer
Pinning the objects avoids accidentally evicting them while binding
other objects.
2008-06-13 14:29:46 -07:00
Keith Packard ced9ebf645 [intel-gem] throttle based on frames rather than time. Reduces jitter.
Record the last execbuffer sequence for each client.
Record that sequence in the throttle ioctl as the 'throttle sequence'.
Wait for the last throttle sequence in the throttle ioctl.
2008-06-13 14:29:46 -07:00
Keith Packard 6b2cba1ecc [intel-gem] evict_something was failing when wait_request freed objects
When i915_wait_request clears object from the active list, it may end up
freeing them and not moving them to the inactive list. This ends up
unbinding objects from the GTT without there ever being new objects visible
to i915_gem_evict_something on the inactive list. As the only success
condition required the presence of objects on the inactive list, this would
falsely assume that no GTT space had been made available, and end up
returning -ENOMEM to the application.
2008-06-13 14:29:46 -07:00
Keith Packard 3762c9ea67 [intel] Enable MSI for i915 IRQ 2008-06-13 14:29:46 -07:00
Keith Packard 462af73149 [intel-gem] Use a delayed_work instead of a timer + work_struct
We want request retirement to occur about once a second when the request
queue is non-empty. This was done with a timer that queued a work_struct,
using a delayed_work instead makes a lot more sense.
2008-06-13 14:29:46 -07:00
Keith Packard e5364914ac [intel-gem] Reorder i915_add_request to schedule work last
i915_add_request was calling schedule_delayed_work before adding the request
to the list; it makes more sense to do that last.
2008-06-13 14:29:45 -07:00
Keith Packard f378319b56 Use /bin/pwd instead of trusting shell built-in 2008-06-13 14:29:45 -07:00
Eric Anholt c892e26bdf [gem] Don't require the lock in execbuf now that it's not needed for the ring. 2008-06-13 09:49:05 -07: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
Eric Anholt b2606e325a [gem] Remove the drm_client_lock_take in set_domain.
We no longer need to use it to protect against shared ringbuffer access.
2008-06-11 16:19:23 -07:00
Jesse Barnes 4a2e29bf99 Use GEM in modesetting
Use GEM for ring buffer setup and framebuffer allocation.  This means reworking
the hardware status page stuff a bit (just use the basic range allocator for
vram for now) and #ifdef'ing out the TTM & DRI2 code.  Works well enough to
load/unload several times and display fbcon on my T61 (though there's still
some unexplained console corruption).
2008-06-11 15:59:01 -07:00
Eric Anholt 846d792ac1 [gem] Another round of cleanups from checkpatch.pl 2008-06-11 15:51:17 -07:00
Eric Anholt 2655005762 [gem] Move potentially device-specific ioctls to the intel driver.
This is the create (may want location flags), pread/pwrite/mmap
(performance tuning hints), and set_domain (will 32 bits be enough for
everyone?) ioctls.  Left in the generic set are just flink/open/close.

The 2D driver must be updated for this change, and API but not ABI is broken
for 3D.  The driver version is bumped to mark this.
2008-06-11 14:42:40 -07:00
Eric Anholt 2a35d857b3 Remove override of drm module list in preparation for merge. 2008-06-11 12:20:56 -07:00
Eric Anholt dac3bcb414 [gem] Remove carefully-sprinkled i915_kernel_lost_context().
They are not unnecessary since the kernel's the only thing touching the ring.
2008-06-11 11:28:20 -07:00
Jesse Barnes f5412a944f Merge commit 'origin/drm-gem' into modesetting-gem
Use new GEM based ring buffer initialization.  Still need to init GEM & use it
for framebuffer allocation etc.

Conflicts:

	shared-core/i915_dma.c
	shared-core/i915_drv.h
2008-06-11 10:25:45 -07:00
Eric Anholt 2150da5d1a [gem] Manage the ringbuffer from the kernel in the GEM case.
This requires that the X Server use the execbuf interface for buffer
submission, as it no longer has direct access to the ring.  This is
therefore a flag day for the gem interface.

This also adds enter/leavevt ioctls for use by the X Server.  These would
get stubbed out in a modesetting implementation, but are required while
in an environment where the device's state is only managed by the DRM while
X has the VT.
2008-06-10 22:57:07 -07:00
Ian Romanick b535567ee9 xgixp: Remove dependency on TTM fences 2008-06-10 22:18:14 -07:00
Jesse Barnes a1d9600724 Merge commit 'origin/drm-gem' into modesetting-gem
Passed the compile test; it's ready to ship.

Conflicts:

	libdrm/Makefile.am
	linux-core/Makefile.kernel
	linux-core/drmP.h
	linux-core/drm_memrange.c
	linux-core/drm_stub.c
	shared-core/drm.h
	shared-core/i915_dma.c
	shared-core/i915_drv.h
	shared-core/i915_irq.c
2008-06-10 17:31:54 -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
Jesse Barnes c987e76d95 Add EDID quirk handling
Port over EDID quirks from X.Org so we can handle more monitors.  This meant
adding size info to the drm_display_mode struct, but other than that the
changes were isolated to the DRM EDID handling code (as they should be).
2008-06-09 16:20:45 -07:00
Robert Noland 116870a908 I915 suspend/resume for FreeBSD 2008-06-08 13:56:14 -04:00
Keith Packard 6cd0ef06a6 [intel] remove settable use_mi_batchbuffer_start
The driver can know what hardware requires MI_BATCH_BUFFER vs
MI_BATCH_BUFFER_START; there's no reason to let user mode configure this.
2008-06-06 13:26:03 -07:00
Keith Packard 9f46c6935d [intel-gem] Use timers to retire requests periodically.
Without the user IRQ running constantly, there's no wakeup when the ring
empties to go retire requests and free buffers. Use a 1 second timer to make
that happen more often.
2008-06-06 13:00:47 -07:00
Keith Packard 56a96841d0 [intel-gem] Add explicit throttle ioctl
Instead of throttling and execbuffer time, have the application ask to
throttle explicitly. This allows the throttle to happen less often, and
without holding the DRM lock.
2008-06-06 13:00:46 -07:00
Keith Packard 118baeee18 [intel-gem] Dump error status on wait_request failure 2008-06-06 13:00:46 -07:00
Dave Airlie 6d4ffd12cd drm: fix up fb resize again 2008-06-06 16:24:27 +10:00
Dave Airlie 00bb548c61 intel: don't set the mode on the framebuffer if isn't set to scanout our framebuffer 2008-06-06 15:38:53 +10:00
Dave Airlie ec774e4d72 Merge remote branch 'origin/modesetting-101' into modesetting-101-fb 2008-06-06 15:21:57 +10:00
Dave Airlie be501f00a3 intelfb: add multi fb paths 2008-06-06 15:21:22 +10:00
Dave Airlie e6a3a1fdad intelfb: remove duplicate define 2008-06-06 14:55:03 +10:00
Dave Airlie fc08877b17 intelfb: admit fbdev is crap and punt on trying to resize to a larger fbdev. 2008-06-06 14:53:34 +10:00
Dave Airlie 8387a232a3 intelfb: move mode sets into the intel crtcs
better place to store them.
2008-06-06 12:02:51 +10:00
Dave Airlie 25c1bb334f drm/intel: make hotplug just be an event 2008-06-06 10:39:58 +10:00
Dave Airlie 5f94172f81 intel: if no spare crtc exists don't just take one. 2008-06-06 10:31:36 +10:00
Jesse Barnes 03bf1fba67 sysfs registration/teardown fixups
A check in drm_sysfs_connector_remove was supposed to allow it to be called
even with unregistered objects, to make cleanup paths a little simpler.
However, device_is_regsitered didn't always seem to return what we thought it
would, so we'd sometimes end up leaving objects lying around rather than
unregistering them.

Fix this situation up by requiring devices to be registered before being
removed.  Any problems resulting from this change should be easier to track
down than the alternative (which is leaving kobjects registered after unload).
2008-06-05 15:58:43 -07:00
Dave Airlie d9ead89c79 drm/modeset: add more debugging and fixup some fb enable/disabe bits 2008-06-05 16:32:41 +10:00
Dave Airlie b31adb005a drm/modesetting: more fb interface cleanups 2008-06-05 15:55:03 +10:00
Dave Airlie efcf066eff drm/modesetting: attempt to make fb code more sane 2008-06-05 15:21:07 +10:00
Dave Airlie f73e54bbf0 drm: modesetting unify the hotplug init paths a lot.
remove fb callbacks, just probe into the driver to sort it out
2008-06-05 13:40:08 +10:00
Dave Airlie 56a1293184 modesetting: fix fb clearing up 2008-06-05 11:43:48 +10:00
Dave Airlie 1495dd31d6 modesetting: use surface width height for buffer allocs 2008-06-05 11:24:57 +10:00
Dave Airlie 1d980669e6 modesetting: add surface width/heights 2008-06-05 11:20:52 +10:00
Dave Airlie 967bd21911 modesetting: initial attempt at debonging fb 2008-06-05 11:11:22 +10:00
Jesse Barnes e90716671d i915: use kzalloc to allocate intel_output for lvds
Better to initialize all the struct fields to 0.  Also more consistent with
other output init routines.
2008-06-04 12:50:03 -07:00
Jesse Barnes 52183fb05b Fix crash in drm_mode_connector_update_edid_property
We need to initialize the edid_blob_ptr to NULL when we init a connector,
otherwise drm_mode_connector_update_edid_property may think there's a valid
EDID lying around and try to destroy it, causing a crash.
2008-06-04 09:38:44 -07:00
Dave Airlie cf1964f971 drm: fix hotplug oops 2008-06-04 15:17:13 +10:00
Dave Airlie a8725d95bc intel: report a known connector 2008-06-04 15:17:00 +10:00
Keith Packard 0903de0c8f Drop struct_mutex while waiting in drm_client_lock_take
struct_mutex cannot be held while blocking on DRM lock.
2008-06-03 21:49:57 -07:00
Dave Airlie 382aa3ceeb drm: introduce generation counter to interface.
Idea being if you want to add new crtc/output/encoder dynamically later,
you just increase the generation counter and userspace should re-read
all the resources
2008-06-04 13:50:51 +10:00
Dave Airlie 9f31bd09c1 drm/sysfs: don't try an unregister if not registered 2008-06-04 13:16:49 +10:00
Dave Airlie 8e4c61e526 intel: use kzalloc 2008-06-04 13:09:20 +10:00
Dave Airlie 8690ad8ae0 drm/modesetting: bo not used anymore 2008-06-04 13:09:05 +10:00
Dave Airlie 58aca7485a drm: remove sysfs in driver for now.. should probably be in helper 2008-06-04 13:03:23 +10:00
Dave Airlie fd27591c6c drm/modesetting: pass object handle to driver !bo 2008-06-04 13:00:31 +10:00
Dave Airlie 76a44f14d6 drm/modesetting: overhaul the fb create/delete.
Move TTM code into the driver
2008-06-04 11:59:28 +10:00
Dave Airlie 40229b6ad5 drm: make mode comparison more betterer.
This compares the clocks after converting to fb pico timings so we
get the same answer if the X and fb modes are the same.
2008-06-04 10:36:58 +10: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
Keith Packard 867c2bb461 [intel-gem] reloc_and_validate_object → object_bind_and_relocate
Just renaming this function and related parameters to match terminology used
elsewhere in the driver.
2008-06-02 12:37:10 -07:00
Keith Packard 1cb2940a25 [intel-gem] Propagate set_domain errors.
set_domain can block waiting for rendering to complete. If that process is
interrupted by a signal, it can return -EINTR. Catch this error in all
callers and correctly deal with the result.
2008-06-02 10:59:15 -07:00
Alan Hourihane 3ed17803d8 more checks for NULL encoder so we don't segfault. 2008-06-02 10:44:29 +01:00
Alan Hourihane dc022084cd Fix warnings 2008-06-02 10:03:28 +01:00
Dave Airlie 149b17311a drm: initial mode object groups.
This creates a default group attached to the legacy drm minor nodes.

It covers all the objects in the set. make set resources only return
objects for this set. Need to fix up other functions to only work on
objects in their allowed set.
2008-06-02 16:45:44 +10:00
Dave Airlie 50d3e5bd02 drm/modesetting: redo object handles around a core object.
handle crtc/encoders/connectors/fb/mode/property/blob using this system.
2008-06-02 16:19:21 +10:00
Dave Airlie c321bc4f92 drm: only report framebuffers available on this fd.
Not 100% sure this is a good idea, but I think I'd rather things
communicate with bo handles not fb ids.
2008-06-02 14:33:42 +10:00
Dave Airlie 4e7b246398 drm: add functions to get/set gamma ramps 2008-06-02 14:04:41 +10:00
Dave Airlie eba6cdc936 Merge branch 'modesetting-101-encoders' into modesetting-101 2008-06-02 12:58:10 +10:00
Dave Airlie 7fec6c0e2a drm: fixup encoder picking in set_config stage 2008-06-02 12:57:09 +10:00
Dave Airlie 46c78a2223 drm/modesetting: add best encoder finding for modesetting
This asks the driver to suggest the best encoder for the connector
during the pick crtcs stage.

Need to also do this during mode setting stages
2008-06-02 11:44:35 +10:00
Dave Airlie 0dd000b578 drm/modesetting: move some connector functions to helper.
Migrated the output mode collection into the helper.
2008-06-02 11:12:28 +10:00
Dave Airlie dba95ec343 drm: fixup some interfaces so test code works again 2008-06-02 10:41:12 +10:00
Dave Airlie e439e74776 drm/modesetting: another re-org of some internals.
Move dpms into the helper functions.
Move crtc into the encoder.
Move disable unused functions into the helper.
2008-06-02 10:05:54 +10:00
Eric Anholt 461bfa3da6 Merge commit 'origin/master' into drm-gem
Conflicts:

	linux-core/Makefile.kernel
	shared-core/i915_drv.h
	shared-core/nouveau_state.c
2008-05-30 14:42:08 -07:00
Eric Anholt 50bce2bc62 [intel-gem] Only update obj->write_domain if we're actually changing it.
The problem was revealed where on 965, the display list vertex buffer would see:

create		      -> (CPU, CPU)
set_domain (CPU, CPU) -> (CPU, CPU)
set_comain (CPU, 0)   -> (CPU, 0) (no clflush occurred)
execbuf	   (GPU, 0)   -> (CPU+GPU, 0) (still no clflush)

instead of:

create		      -> (CPU, CPU)
set_domain (CPU, CPU) -> (CPU, CPU)
set_comain (CPU, 0)   -> (CPU, CPU)
execbuf	   (GPU, 0)   -> (CPU+GPU, 0) (clflushed)
2008-05-30 13:47:34 -07:00
Eric Anholt 4f92ed3427 [intel-gem] Add an option to check GTT versus CPU coherency at execbuf time. 2008-05-30 12:42:48 -07:00
Kristian Høgsberg efb48c6cf7 Fix ivch i2c read function to use the "special" i2c format. 2008-05-30 14:24:21 -04:00
Dave Airlie 5d47185eb6 drm: switch possible crtc/clones over to encoders 2008-05-30 15:32:58 +10:00
Dave Airlie 9d38448ed3 modesetting: the great renaming.
Okay we have crtc, encoder and connectors.

No more outputs exposed beyond driver internals

I've broken intel tv connector stuff.
Really for TV we should have one TV connector, with a sub property for the
type of signal been driven over it
2008-05-30 15:10:04 +10:00
Dave Airlie 6aeef92c0c drm: attach an encoder.
Time to do some renaming on the connectors I think
2008-05-30 13:57:27 +10:00
Dave Airlie 9239cf511f drm: add encoder attach/detach 2008-05-30 13:31:16 +10:00
Dave Airlie 1542492b79 drm: init the encoder list/count 2008-05-30 12:24:30 +10:00
Dave Airlie 6b5592790d drm: add red hat copyright. 2008-05-30 12:20:36 +10:00
Dave Airlie b72419a8f7 drm: add encoder ids to the output handling 2008-05-30 12:19:13 +10:00
Dave Airlie 8ae82f3a2f drm: add encoder / get encoder to the modesetting resources interface 2008-05-30 12:03:36 +10:00
Dave Airlie 6b970f193b drm: remove unused init func from outputs 2008-05-30 11:48:41 +10:00
Dave Airlie 9654c776fd drm/modesetting: add initial encoder structures and setup functions 2008-05-30 11:47:57 +10:00
Dave Airlie 98c5cf7f6f modesetting: reorganise out crtc/outputs are allocated.
Use subclassing from the drivers to allocate the objects. This saves
two objects being allocated for each crtc/output and generally makes
exit paths cleaner.
2008-05-30 11:25:41 +10:00
Eric Anholt 3b1e4e6dc3 [intel-gem] Write the presumed_offset back out after updating it.
Otherwise, 965 constant state buffers get re-relocated every exec.  Ouch.
2008-05-29 12:53:21 -07:00
Keith Packard 19ff3366e4 [intel-gem] Clean up active/inactive/flushing list debugging. 2008-05-28 23:56:31 -07:00
Dave Airlie df8cd54286 modesetting: reorganise code into core and helper functions.
This splits a lot of the core modesetting code out into a file of
helper functions, that are only called from themselves and/or the driver.

The driver gets called into more often or can call these functions from itself
if it is a helper using driver.

I've broken framebuffer resize doing this but I didn't like the API for that
in any case.
2008-05-29 14:02:14 +10:00
Dave Airlie ee5afc6342 modeset: disable radeon ms by default
as I'm going to break it.
2008-05-29 13:58:26 +10:00
Alan Hourihane 3a3f39d144 Merge branch 'master' of git+ssh://git.freedesktop.org/git/mesa/drm into modesetting-101
Conflicts:

	shared-core/i915_dma.c
	shared-core/i915_drv.h
2008-05-28 21:01:18 +01:00
Jesse Barnes 070755af3f i915: unmap BIOS when we're done with it
At the moment, we only read it at startup time, so we can just unmap it there
when we're done.
2008-05-28 08:24:42 -07:00
Dave Airlie 5b86823fa3 radeon: split microcode out into a separate header file. 2008-05-28 11:12:57 +10:00
Eric Anholt e10502002f [intel-gem] Replace idlelock usage with real lock acquisition. 2008-05-27 18:03:18 -07:00
Keith Packard 1f4e36081b [intel-gem] Must hold DRM lock while setting object domain
Object domain transfer can involve adding flush ops to the request queue,
and so the DRM lock must be held to avoid having the X server smash pointers
badly.
2008-05-26 17:41:46 -07:00
Keith Packard d434b64f6a [i915] leave interrupts masked off when not in use.
The interrupt enable register cannot be used to temporarily disable
interrupts, instead use the interrupt mask register.

Note that this change means that a pile of buffers will be left stuck on the
chip as the final interrupts will not be recognized to come and drain things.
2008-05-26 03:25:16 -07:00
Keith Packard 7cf3fd29fe [intel-gem] Add DRM_I915_GEM_BUSY ioctl to check for idle buffers.
This new ioctl returns whether re-using the buffer would force a wait.
2008-05-25 20:45:20 -07:00
Keith Packard 6d1d11704a [intel-gem] Compute npages instead of nbytes in flush_pwrite
i915_gem_flush_pwrite optimizes short writes to the buffer by clflushing
only the modified pages, but it was miscomputing the number of pages.
2008-05-25 20:44:19 -07:00
Keith Packard c69b81df62 [intel-gem] replace call to jiffies_to-msec with simple inline 2008-05-25 20:41:42 -07:00
Jesse Barnes 9fc4ea5c00 i915: do a better job of parsing VBIOS data
Add code to get panel modes from the VBIOS if present and check whether certain
outputs exist.  Should make our display detection code a little more robust.
2008-05-23 18:42:47 -07:00
Jesse Barnes b4d8cda8e6 drm_mode_debug_printmodeline doesn't need struct drm_device *
Makes printing modelines from some routines easier.
2008-05-23 18:41:58 -07:00
Keith Packard 8c2b207f9b [intel-gem] Encourage multiple caches to hold read data
When reading from multiple domains, allow each cache to continue
to hold data until writes occur somewhere. This is done by
first leaving the read_domains alone at bind time (presumably the CPU read
cache contains valid data still) and then in set_domain, if no write_domain
is specified, the new read domains are simply merged into the existing read
domains.

A huge comment was added above set_domain to explain how things are
expected to work.
2008-05-22 23:08:38 -07:00
Keith Packard 44ed693ca6 [gem] Use CPU domain for new or pageable objects
Newly allocated objects need to be in the CPU domain as they've just been
cleared by the CPU. Also, unmapping objects from the GTT needs to put them
into the CPU domain, both to flush rendering as well as to ensure that any
paging action gets flushed before we remap to the GTT.
2008-05-22 22:00:21 -07:00
Keith Packard 71b09a5f75 [intel-gem] Force ring retire by emiting flush before user-interrupt.
Commands in the ring are parsed and started when the head pointer passes by
them, but they are not necessarily finished until a MI_FLUSH happens. This
patch inserts a flush after the execbuffer (the only place a flush wasn't
already happening).
2008-05-22 22:00:21 -07:00
Keith Packard da3f099a7c [intel-gem] invalidate ring locals for pin/unpin/set_domain/free functions
Ring locals must be reloaded from hardware in case the X server ran.
2008-05-22 22:00:21 -07:00
Eric Anholt 5e662f90d1 [gem] Release GEM buffers from work task scheduled from IRQ.
There are now 3 lists.  Active is buffers currently in the ringbuffer.
Flushing is not in the ringbuffer, but needs a flush before unbinding.
Inactive is as before.  This prevents object_free → unbind →
wait_rendering → object_reference and a kernel oops about weird refcounting.

This also avoids an synchronous extra flush and wait when freeing a buffer
which had a write_domain set (such as a temporary rendered to and then from
using the 2d engine).  It will sit around on the flushing list until the
appropriate flush gets emitted, or we need the GTT space for another
operation.
2008-05-22 22:00:21 -07:00
Hong Liu 1cde3cc1ac i915: check dummy page before freeing
The dummy read page will point to NULL if drm_bo_driver_init failed at
firstopen (modeset is not enabled), and will cause kernel oops at
subsequent drm_lastclose call, so be sure to check it.
2008-05-22 10:35:55 -07:00
Eric Anholt d6f7968577 [gem] Replace ring throttling hack with actual time measurement. 2008-05-21 16:40:14 -07:00
Eric Anholt 54fa32cdfe [gem] Fix bad test for list_for_each completion.
Since it's a circular list, the entry won't be NULL at termination.
2008-05-21 15:15:58 -07:00
Eric Anholt 7078978db0 [gem] Hold a reference on the object in i915_gem_wait_space.
Otherwise, in the middle of the function called using it the last ref
might disappear.
2008-05-21 15:04:07 -07:00
Keith Packard f8e38e49dd [intel-gem] invalidate ring locals for pin/unpin/set_domain/free functions
Ring locals must be reloaded from hardware in case the X server ran.
2008-05-21 15:00:16 -07:00
Eric Anholt af8e087157 [gem] Use a separate sequence number field from classic/ttm
This lets us get some qualities we desire, such as using the full 32-bit
range (except zero), avoiding DRM_WAIT_ON, and a 1:1 mapping of active
sequence numbers to request structs, which will be used soon for throttling
and interrupt-driven list cleanup.
2008-05-20 14:16:26 -07:00
Eric Anholt ab36a6f983 [gem] Rename sequence numbers from "cookie" to "seqno" 2008-05-20 10:53:10 -07:00
Eric Anholt 6c3ac484b0 [gem] Clean up active/inactive list handling using helper functions.
Additionally, a boolean active field is added to indicate which list an
object is on, rather than smashing last_rendering_cookie to 0 to show
inactive.  This will help with flush-reduction later on, and makes the code
clearer.
2008-05-20 10:52:39 -07:00
Eric Anholt 7dced2f33a [gem] Hold dev->struct_mutex to protect structure data. 2008-05-15 18:45:23 -07:00
Eric Anholt 3ab152da66 [gem] Rename the GTT LRU lists to active (executing) and inactive (idle). 2008-05-15 11:59:58 -07:00
Eric Anholt aafafe507b [gem] typo fix in comment. 2008-05-15 11:59:57 -07: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
Jesse Barnes ee631e1b86 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-05-13 14:44:17 -07:00
Jesse Barnes d32ce7f621 i915: TV hotplug fixes
In order to avoid recursive ->detect->interrupt->detect->interrupt->...
we need to disable TV hotplug interrupts in
intel_tv.c:intel_tv_detect_type.  We also need to enable the TV interrupt
detection and hotplug sequence properly in i915_irq.c.
2008-05-12 15:47:19 -07:00
Eric Anholt f650d7240a [GEM] Typo (and thinking) fixes in drm-gem.txt and doxygen. 2008-05-12 13:17:01 -07:00
Keith Packard 17e8000ac0 [intel] Minor kludge -- wait for the ring to be nearly empty before queuing
No need to fill the ring that much; wait for it to become nearly empty
before adding the execbuffer request. A better fix will involve scheduling
ring insertion in the irq handler.
2008-05-12 13:04:18 -07:00
Keith Packard 6aeff6b9e3 [gem] Set write domain to CPU when doing pwrite.
Leave the flush call in place, which can fix domains up if necessary.
2008-05-12 13:01:57 -07:00
Keith Packard 6950b7da71 [gem] Clarify use of explicit domain control. Remove Gen3 from I-cache usage. 2008-05-12 13:00:55 -07:00
Hong Liu a51e38548c fix kernel oops when removing fb
drm_crtc->fb may point to NULL, f.e X server will allocate a new fb
and assign it to the CRTC at startup, when X server exits, it will destroy
the allocated fb, making drm_crtc->fb points to NULL.
2008-05-12 12:31:56 -07:00
Hong Liu b2dee13f5d free dummy read page if fail to init mm
Since drm_bo_driver_init will be called in driver_load, we need to free
what it alloced when error to avoid memory leak.
2008-05-12 12:07:27 -07:00
Dave Airlie 3f66a0005c drm: remove root only from a lot of drm ioctls to get stuff running as non-root 2008-05-12 16:29:22 +10:00
Dave Airlie 1eedeed091 drm: masters are always authenticated 2008-05-12 16:28:58 +10:00
Dave Airlie 8f7fc880e8 drm: fix oops on reading proc file with no master 2008-05-12 16:28:40 +10:00
Keith Packard ff39db099b [GEM] Make pread/pwrite manage memory domains. No luck with movnti though.
pread and pwrite must update the memory domains to ensure consistency with
the GPU. At some point, it should be possible to avoid clflush through this
path, but that isn't working for me.
2008-05-11 00:10:16 -07:00
Keith Packard 1b0bf30143 [intel-GEM] exec list can contain pinned, lru cannot.
The exec list contains all objects, in order of use. The lru list contains
only unpinned objects ready to be evicted. This required two changes -- the
first was to not migrate pinned objects from exec to lru, the second was to
search for the first unpinned object in the exec list when doing eviction.
2008-05-10 22:04:39 -07:00
Keith Packard 1f9eaceb71 Merge commit 'anholt/drm-gem' into drm-gem 2008-05-10 21:05:25 -07:00
Keith Packard 177b8b0703 [GEM] Add drm-gem.txt
Add some API and implementation documentation for GEM.
2008-05-10 21:04:42 -07:00
Keith Packard a37ac493da [intel-GEM] Clean up GEM ioctl naming.
Rename 'validate_entry' to 'exec_object', then clean up some field names in
structures (renaming buffer_offset to just offset, for example).
2008-05-10 21:04:18 -07:00
Eric Anholt 48a8531aa4 GEM: Fix arguments to drm_memrange_init so we don't exceed our allocation.
It takes (offset, size), not (offset, end).
2008-05-09 18:23:51 -07:00
Eric Anholt c5c59eab80 GEM: Separate the LRU into execution list and LRU list.
Now, the LRU list has objects that are completely done rendering and ready
to kick out, while the execution list has things with active rendering,
which have associated cookies and reference counts on them.
2008-05-09 17:38:32 -07:00
Eric Anholt f56f2acb5a GEM: Clear obj_priv->agp_mem when we free it.
Still managing to get something wrong with this, oopsing down in agp.
2008-05-09 15:07:49 -07:00
Eric Anholt f0ae335cd7 GEM: Avoid leaking refs on target objects on presumed offset success. 2008-05-09 15:02:50 -07:00
Jesse Barnes 6ee0c09b0e i915: use BDB TV flag for TV detection
Even if the TV encoder hasn't been fused off, we may not have a TV connector on
the platform.  The BDB in the BIOS should give us this info in some cases.
2008-05-09 14:19:39 -07:00
Jesse Barnes 12725a37af i915: add basic VBT support
Map the VBIOS (and therefore VBT) at init time for use by various output
initialization routines.
2008-05-09 14:19:00 -07:00
Keith Packard 1e26ca44c9 [gem] API cleanup. allocate->create unreference->close name->flink
Make the API names a bit more consistent.
2008-05-09 12:18:09 -07:00
Alan Hourihane eeff906aa0 Fix build problems 2008-05-09 16:36:28 +01:00
Keith Packard ec75369b40 [i915] clean up whinging from checkpatch.pl 2008-05-08 13:09:17 -07:00
Keith Packard 07ad5ce1e1 Clean up whinging from checkpatch.pl in drm_gem.c
Whitespace changes, a few too-long-lines and some extra braces.
2008-05-08 13:08:22 -07:00
Eric Anholt 2f573e6df4 GEM: Fix oops on NULL dereference when we try clflushing when we don't need to. 2008-05-08 12:46:02 -07:00
Jakob Bornecrantz 7bcbc443f4 i915: Changed intel_fb to use the new drm_crtc_set_config interface 2008-05-08 20:10:18 +02:00
Keith Packard 9af4c49743 [intel-gem] Move domains to relocation records. add set_domain ioctl.
Domain information is about buffer relationships, not buffer contents. That
means a relocation contains the domain information as it knows how the
source buffer references the target buffer.

This also adds the set_domain ioctl so that user space can move buffers to
the cpu domain.
2008-05-08 10:44:02 -07:00
Jakob Bornecrantz 9d9104ad5f i915: Fixed indent in intel_fb.c 2008-05-08 15:25:37 +02:00
Jakob Bornecrantz ba36d54ad4 drm: Made set_config use drm_mode_set as a argument 2008-05-08 15:03:57 +02:00
Dave Airlie 442e124123 drm: check for NULL fb here, shouldn't happen but avoid oops for now 2008-05-08 16:11:25 +10:00
Dave Airlie 19abd5c1ac drm: set crtc->fb to NULL 2008-05-08 16:10:26 +10:00
Dave Airlie 74a49aea61 intel: set correct limits on screen width/height from DDX 2008-05-08 16:10:06 +10:00
Dave Airlie 576cba86b7 drm: fix replacefb to change fb properties 2008-05-08 16:09:45 +10:00
Dave Airlie ed072ed075 drm_mode: initial replacefb implemenation 2008-05-08 14:02:05 +10:00
Dave Airlie df46e0691b drm: fix typo from previous merge 2008-05-08 10:45:18 +10:00
Dave Airlie ef204fb5c2 Merge remote branch 'origin/master' into modesetting-101
Conflicts:

	linux-core/Makefile.kernel
	shared-core/i915_drv.h
2008-05-08 10:25:01 +10:00
Arjan van de Ven aa0621a19f Apply a few stylistic cleanups to match kernel code. 2008-05-07 15:54:53 -07:00
Eric Anholt 06e9761f94 GEM: Wait for existing rendering to complete before writing relocation data.
This should already have been generally safe since we don't change contents
and put in new relocations between execbufs, so if we were writing in a new
relocation then we'd already waited rendering to complete when we moved
the target of the relocation.  However, doing the right thing will be required
if we do buffer reuse.
2008-05-07 14:10:04 -07:00
Eric Anholt 5f5f01ed91 GEM: Extend cache domain stuff for 965.
One of our MI_FLUSH bits is reserved on 965, being always implied, and there's
a vertex cache that was forgotten.
2008-05-07 12:46:06 -07: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
Keith Packard 6a6c37af9e [intel-GEM] ref count objects in gtt-lru.
If objects on the lru aren't ref counted, they'll get pulled from the gtt as
soon as they are freed. This change does cause objects to get stuck in the
gtt until they're forced out by new requests. The lru should get cleaned
when the irq occurs.
2008-05-06 21:59:06 -07:00
Keith Packard 61253f4f67 [intel-GEM] Add memory domain support.
Memory domains allow the kernel to track which caches to flush and how to
move objects before buffer execution.
2008-05-06 20:00:23 -07:00
Keith Packard 2b9ef32669 Merge commit 'anholt/drm-gem' into drm-gem 2008-05-06 14:43:56 -07:00
Keith Packard 631e86c5c4 Start coding up memory domains 2008-05-06 14:43:49 -07:00
Eric Anholt d2373b2a34 GEM: Use irq-based fencing rather than syncing and evicting every exec. 2008-05-06 13:28:26 -07:00
Eric Anholt dd6976c56f GEM: Skip relocation if presumed offset matches. 2008-05-06 11:25:53 -07:00
Eric Anholt 8551bfc6db GEM: Save the last ioremapped page for relocations in case we need it again. 2008-05-06 11:18:57 -07:00
Keith Packard 91cba3ae17 Dump last batch buffer when hardware lockup is detected. 2008-05-05 22:10:02 -07:00
Keith Packard 2c8f970baa Unlock pages right after getting them.
pages come back from find_or_create_page locked, but must not stay locked
for long. Unlock them immediately instead of waiting until we're done with
them to avoid deadlock when applications try to touch them.
2008-05-05 17:17:19 -07:00
Keith Packard 5b0d0fa7f8 Merge commit 'anholt/drm-gem' into drm-gem
Conflicts:

	linux-core/i915_gem.c
2008-05-05 14:40:20 -07:00
Eric Anholt dafe48e623 GEM: Replace drm_memrange_for_each with just evicting what we brought in.
I was wrong about how the data structure worked, and didn't care to fix it
to support debugging code.
2008-05-05 14:38:26 -07:00
Keith Packard d59a9300ec Remove some debug messages. 2008-05-05 14:32:01 -07:00
Keith Packard f0bc796a02 Add object base to relocation store address.
The relocated value was being written to the wrong location, missing
the object base address.
2008-05-05 14:22:42 -07:00
Keith Packard 4867780bd6 Emit clflush and chipset flush when mapping objects to gtt 2008-05-05 13:32:28 -07:00
Keith Packard 4511e6cd80 Correct execbuffer offset. Add memory barrier and chipset flush. 2008-05-05 11:27:06 -07:00
Keith Packard b6f173c430 Add i915_dispatch_gem_execbuffer (broken).
This function submits a gem-based execbuffer to the ring.
It doesn't work yet.
2008-05-05 10:51:49 -07:00
Eric Anholt 166ff364fb Don't forget to set the memrange private, and reset ring on kernel entry. 2008-05-02 17:50:46 -07:00
Eric Anholt afe574f328 Don't include the tail guard memrange in foreach callbacking. 2008-05-02 17:49:52 -07:00
Keith Packard 5f0614b86f Check for do_mmap errors 2008-05-02 17:13:11 -07:00
Keith Packard ab3549d133 Add a bit of /proc/dri/*/gem support. Clean up some refcount/pagelock issues.
Track named objects in /proc/dri/0/gem_names.
Track total object count in /proc/dri/0/gem_objects.
Initialize device gem data.
return -ENODEV for gem ioctls if the driver doesn't support gem.
Call unlock_page when unbinding from gtt.
Add numerous misssing calls to drm_gem_object_unreference.
2008-05-02 16:34:16 -07:00
Keith Packard 39e20bcd5f Add name/open ioctls, separate handle and pointer ref counts.
Names are just another unique integer set (from another idr object).
Names are removed when the user refernces (handles) are all destroyed --
this required that handles for objects be counted separately from
internal kernel references (so that we can tell when the handles are all
gone).
2008-05-02 12:29:17 -07:00
Keith Packard 49e8e3372a Remove drm_driver argument to functions taking drm_gem_object.
Now that drm_gem_object has a drm_driver * in it, functions don't need both
parameters.
2008-05-02 10:36:00 -07:00
Keith Packard 0d547c9ed9 Add alignment to all aperture allocation requests.
When pinning buffers, or using execbuffer, allow the application to specify
the necessary aperture allocation alignment constraints.
2008-05-01 20:41:55 -07:00
Keith Packard 30efad5113 Fix gem ioctls to be 32/64-bit clean.
mixed 32/64 bit systems need 'special' help for ioctl where the user-space
and kernel-space datatypes differ. Fixing the datatypes to be the same size,
and align the same way for both 32 and 64-bit ppc and x86 environments will
elimiante the need to have magic 32/64-bit ioctl translation code.
2008-05-01 20:31:16 -07:00
Keith Packard abc896638f Use krefs for refcounting.
krefs are way easier than a custom-coded spinlock+int combo.
2008-05-01 20:12:39 -07:00
Eric Anholt c10695bb7a Unbind objects when freeing, fix some error paths, and warn in others. 2008-05-01 17:31:57 -07:00
Eric Anholt ddc80651d5 Fix offset passed to AGP to be pages instead of bytes.
Fix some utterly bonged loop while we were staring at it.
2008-05-01 17:31:29 -07:00
Eric Anholt 3f641b56c7 Fix missing member settings in obj/obj_priv, and some error paths. 2008-05-01 16:48:25 -07:00
Eric Anholt 7d5f783eca Make GEM object handles be nonzero. 2008-05-01 16:38:37 -07:00
Eric Anholt d2529d1396 Remove _args from gem ioctl argument structure tags. 2008-05-01 16:27:03 -07:00
Eric Anholt 793549116e Add pin/unpin object ioctls for gem. 2008-05-01 15:40:02 -07:00
Eric Anholt ccd1bae0f6 checkpoint: relocations support. 2008-05-01 15:22:21 -07:00
Eric Anholt 5af87acbc2 checkpoint: gtt binding written. 2008-05-01 14:20:44 -07:00
Eric Anholt 2140e102f9 checkpoint: rename to GEM and a few more i915 bits. 2008-05-01 11:39:20 -07:00
Eric Anholt 1a84067950 Hacking towards hooking up execbuffer. 2008-04-30 16:03:15 -07:00
Eric Anholt 81ba8ded7e Remove the remainder of the mmfs device. 2008-04-29 13:48:51 -07:00
Eric Anholt dabd056bf3 Move mmfs ioctls into the DRM. Untested. 2008-04-29 13:32:52 -07: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
Eric Anholt 3ad8db2071 Rename drm_mm.c and its fuctions to drm_memrange.
It's not really a graphics memory allocator, just something to track ranges
of address space.  It doesn't involve actual allocation, and was consuming
some desired namespace.
2008-04-28 16:54:53 -07:00
Thomas Hellstrom 7f269bec7e Merge branch 'master' into modesetting-101
Conflicts:

	linux-core/Makefile.kernel
	linux-core/drm_compat.c
	linux-core/drm_fops.c
	linux-core/drm_lock.c
	shared-core/drm.h
	shared-core/i915_dma.c
	shared-core/i915_drv.h
	shared-core/i915_irq.c
2008-04-28 12:10:44 +02: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
Eric Anholt 22877864c2 Add mmap ioctl to mmfs. 2008-04-23 16:22:09 -07:00
Eric Anholt 8c741ed54e Add pread/pwrite ioctls to mmfs. 2008-04-23 14:25:54 -07:00
Eric Anholt 8665b666c7 Move mmfs.h userland interface to shared-core. 2008-04-23 11:23:40 -07:00
Eric Anholt 47a2b7dc03 Initial add of mmfs module. 2008-04-23 10:42:06 -07:00
Eric Anholt c82894034f Clarify that drm_agp_ttm_backend is associated with a drm_ttm.
On first looking at it I assumed it was an aspect of the ttm backend as a
whole rather than specific allocations from a backend.
2008-04-23 10:42:06 -07:00
Kristian Høgsberg 55a9941977 Make via compile.
Chase the lock to it's new location.
2008-04-23 12:43:52 -04:00
Kristian Høgsberg 33fa02f2d8 Make radeon_ms compile.
Remove lock functions and use pci_map_rom() instead of pci_map_rom_copy().
2008-04-23 12:42:26 -04: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
Hong Liu b57e1f7efd add sysfs entry for DVO output
forget to add it in the previous DVO porting patch.

Signed-off-by: Hong Liu <hong.liu@intel.com>
2008-04-22 18:35:26 -07:00
Hong Liu c250104c8f fix removing output_attrs
fix a typo in removing output sysfs.

Signed-off-by: Hong Liu <hong.liu@intel.com>
2008-04-22 18:32:39 -07: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
Hong Liu 21a93915d8 Porting DVO stuff
Ported from Xorg intel 2d driver. Changed interfaces definitions, which needed
to be changed later if other device wants to use these DVO stuff.
2008-04-17 11:43:28 -07: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
Jesse Barnes 3b32ee36ae Fixup Intel TV property code
Use the new TV property creation routine and fixup the set_property code
to actually do a mode set call when properties change.
2008-04-10 20:31:31 -07:00
Jesse Barnes 83c3acb7da Split TV property creation into its own routine
It needs to take arguments from the caller about supported TV formats,
so declare it in drm_crtc.h and export it.
2008-04-10 20:30:12 -07:00
Jesse Barnes bee546ad69 Remove structure fields & code
Cleanup some random cruft left over from the initial port.
2008-04-10 19:02:53 -07:00
Jesse Barnes ebd1544973 Fix masking in get_load_detect_pipe
Start i at -1 so that the masking works right.
2008-04-10 11:27:39 -07:00
Jesse Barnes 0a6e301e6d Keep display info in struct display_info
Some fields had snuck into the drm_output structure.  Put them back and
fill in more stuff from the EDID block.
2008-04-10 11:23:55 -07:00
Jesse Barnes b3737f3fd9 Fix TV load detection
Now that we can allocate load detect pipes, we can perform TV out load
detection correctly.  Call the new routines and enable proper TV
detection.
2008-04-09 14:13:38 -07:00
Jesse Barnes 6c92689dcc Port pipe reservation code for load detection
TV out needs to do load detection, which means we have to find an
available pipe to use for the detection.  Port over the pipe reservation
code for this purpose.
2008-04-09 14:13:38 -07:00
Jesse Barnes 256a96135e Add newline to debug output for output add 2008-04-09 14:13:38 -07:00
Alan Hourihane 61a81a043c Older kernels don't have kobject_uevent_env(), so punt
the event for these older kernels.
2008-04-09 22:07:40 +01:00
Jesse Barnes fa116081a9 Fixup sysfs output registration
Put off registering new outputs with sysfs until they're properly configured,
or we may get duplicates if the type hasn't been set yet (as is the case with
SDVO initialization).  This also means moving de-registration into the cleanup
function instead of output destroy, since the latter occurs during the normal
course of setup when an output isn't found (and therefore not registered with
sysfs yet.
2008-04-09 11:30:15 -07:00
Jesse Barnes e3c7a0fcb0 Merge branch 'modesetting-101' of ssh://git.freedesktop.org/git/mesa/drm into modesetting-101 2008-04-08 12:48:41 -07:00
Jesse Barnes 5a3ce06f3a Improved DRM sysfs support
This patch ties outputs, output properties and hotplug events into the
DRM core.  Each output has a corresponding directory under the primary
DRM device (usually card0) containing dpms, edid, modes, and connection
status files.

New hotplug change events occur when outputs are added or hotplug events
are detected.
2008-04-08 12:42:23 -07:00
Jerome Glisse 779e826c1e radeon_ms: command buffer validation use array of function pointer 2008-04-08 02:18:14 +02:00
Patrice Mandin db61f02bd7 Missing KERNEL_VERSION macro 2008-04-07 22:24:24 +02:00
Jerome Glisse fee64980c4 radeon_ms: another fb fix reset mode if fb changed 2008-04-07 20:49:36 +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
Jerome Glisse 060e725a0e radeon_ms: fix framebuffer code 2008-04-06 19:23:20 +02: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
Jerome Glisse 4dfb959238 radeon_ms: fixes fb handling 2008-04-03 03:14:52 +02:00
Jerome Glisse 09e637848a radeon_ms: initial pass at command buffer validation 2008-03-31 00:55:05 +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
Jerome Glisse 0da289bafd radeon_ms: this is a modesetting driver, bring things up to date 2008-03-27 20:08:37 +01:00
Dave Airlie acb6c9ef97 drm: remove authentication on master exit.
using contexts for this is bad for multiple masters
2008-03-27 15:55:49 +10:00
Ben Skeggs a244d29050 nouveau: silence warning 2008-03-24 03:26:37 +11:00
Jerome Glisse 71b66b0043 Merge branch 'modesetting-101' of ssh://git.freedesktop.org/git/mesa/drm into modesetting-101 2008-03-20 17:44:32 +01:00
Jerome Glisse 6ef119abf5 radeon_ms: fix fence 2008-03-20 17:43:43 +01: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 607964ed9e drm: add master set/drop protocol
this may not survive long - just need something for testing
2008-03-17 16:38:20 +10:00
Dave Airlie e6be93b2a6 drm: pick correct master for cleaning up
When a master is exiting, make sure we clean it up and not the currently
in charge master.
2008-03-17 16:38:17 +10:00
Dave Airlie d1513528d7 drm: select the correct master to attempt to remove the lock from.
When destroying DRI sarea, make sure you use the master associated with the
sarea and not the one currently in charge
2008-03-17 16:38:15 +10: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
Alan Hourihane 631c6af4d9 Fix green offset 2008-03-13 11:47:37 +00:00
Thomas Hellstrom 88bd1e4a35 Merge branch 'intel-post-reloc'
Conflicts:

	linux-core/drm_compat.c
	linux-core/drm_compat.h
	linux-core/drm_ttm.c
	shared-core/i915_dma.c

Bump driver minor to 13 due to introduction of new
relocation type.
2008-03-12 11:34:29 +01:00
Alan Hourihane b6dc381fab Merge branch 'master' of git+ssh://git.freedesktop.org/git/mesa/drm into modesetting-101
Conflicts:

	shared-core/i915_dma.c
	shared-core/i915_drv.h
	shared-core/i915_irq.c
2008-03-12 10:18:33 +00:00
Thomas Hellstrom 2a618e5a7f Bug # 14712
Disable page saving for GPU read-only TTMs.
2008-03-12 10:36:40 +01:00
Thomas Hellstrom 5bebcd7a0b Dont allow !sysadmin clients to alter the memory type of
NO_EVICT buffers.
2008-03-12 10:19:36 +01:00
Alan Hourihane 88be276a42 Fix for debug memory routines 2008-03-12 10:13:22 +01:00
Alan Hourihane 3262577407 Add error message 2008-03-12 10:11:49 +01:00
Thomas Hellstrom c0a1cd052a Add an emergency pinnable memory quota for root-only processes. 2008-03-12 10:10:03 +01:00
Thomas Hellstrom 7bcce66a1d Fix kernel crash when we hit OOM conditions.
(Alan Hourihane)
2008-03-12 10:07:56 +01:00
Thomas Hellstrom f1a681ebe5 Avoid duplicate calls to drm_ttm_bind in some cases. 2008-03-12 10:02:09 +01:00
Thomas Hellstrom fa1d88e3b2 Make sure other TTM memory types than TT is really unbound when evicted. 2008-03-12 09:56:06 +01:00
Dave Airlie 981f515e2b drm: fix fd closing ordering.
If the master fd goes away before the aiglx fd, we try and get a lock
that actually doesn't exist.
2008-03-12 14:48:01 +10:00
Alan Hourihane 903d9231d6 Add support for monitor hotplug signals/waits
Also adjust i915 irq handling as it follows the 16bit'ism's
of the i8xx series.
2008-03-11 20:30:25 +00:00
Dave Airlie 52748d1792 drm: hopefully fix cursors on 965 2008-03-11 13:23:33 +10:00
Jerome Glisse a7e6ca62ad Merge branch 'modesetting-101' of ssh://git.freedesktop.org/git/mesa/drm into modesetting-101 2008-03-10 23:36:27 +01:00
Jerome Glisse a7dc4d08b9 rradeon_ms: rework fence code and bring radeon ms up to date 2008-03-10 23:35:07 +01:00
Dave Airlie 07ba3b7193 remove unneeded load call 2008-03-10 18:30:17 +10:00