aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu
AgeCommit message (Collapse)AuthorFilesLines
2013-11-08drm/nv40/mpeg: use the nv31-provided classesIlia Mirkin4-75/+22
Since nv40 only covers pre-nv44 now, it can use the nv31-provided functions. Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv44/mpeg: create a copy of the nv31/nv40 implsIlia Mirkin4-12/+208
The nv31/nv40 impls are actually fairly nv44-specific, since they assume the presence of the instance register/context switching. Create a copy before nv31/nv40 get fixed. Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv31/mpeg: no need to set compat mode differently for nv44 grIlia Mirkin1-5/+1
Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv10/kms: add plane support for nv10-nv40Ilia Mirkin7-4/+342
Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv10: fix chipset checks, mostly for the benefit of nv1aIlia Mirkin5-10/+22
NV1A is numerically higher than NV17 but generationally lower. Use the new card type to help disambiguate. Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv10: introduce a new NV_11 card typeIlia Mirkin7-7/+19
NV11/17/1F/18 come after NV10/15/16/1A. In order to facilitate using numerical comparisons, split up the two sets into different card types. This change should be a no-op except that the relevant cards will see NV11 printed instead of NV10 for the family. Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau: fix backlight mask on ppc powerbookIlia Mirkin1-1/+1
This code was originally moved to using nv_mask by d31e078d84. This should not have any actual effect since the mask isn't applied to the value. Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau: remove prototype for non-existent nouveau_connector_bppIlia Mirkin1-3/+0
Signed-off-by: Ilia Mirkin <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/vic: rename PUNK1C1 to PVICBen Skeggs4-6/+6
NVIDIA's name for what rnndb calls PVCOMP. Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/therm: kill some over-zealous debuggingBen Skeggs3-14/+1
Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/core: split lock into list+exec and enable refcount locksBen Skeggs2-30/+34
This fixes a reported locking inversion when interacting with the DRM core's vblank routines. Reviewed-by: Maarten Lankhorst <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/core: convert event handler apis to split create/enable semanticsBen Skeggs12-138/+226
This is a necessary step towards being able to work with the insane locking requirements of the DRM core's vblank routines, and a nice cleanup as a side-effect. This is similar in spirit to the interfaces that Peter Hurley arrived at with his nouveau_event rcu conversion series. Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv50-/sw: share engine/channel constructor between implementationsBen Skeggs3-51/+37
Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/sw: prepare for the sharing of constructors between implementationsBen Skeggs14-79/+83
Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv50-/sw: make vblank tracking data private to the implementationsBen Skeggs4-27/+25
Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nv50-/sw: share engine/channel struct definitions between implementationsBen Skeggs3-24/+25
Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/core: Allow asymmetric nouveau_event_get/_putPeter Hurley3-14/+18
Most nouveau event handlers have storage in 'static' containers (structures with lifetimes nearly equivalent to the drm_device), but are dangerously reused via nouveau_event_get/_put. For example, if nouveau_event_get is called more than once for a given handler, the event handler list will be corrupted. Signed-off-by: Peter Hurley <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/core: Move event index check from critical sectionPeter Hurley1-8/+11
The index_nr field is constant for the lifetime of the event, so serialized access is unnecessary. Signed-off-by: Peter Hurley <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau/core: Add priv field for event handlersPeter Hurley2-13/+8
Provide private field for event handlers exclusive use. Convert nouveau_fence_wait_uevent() and nouveau_fence_wait_uevent_handler(); drop struct nouveau_fence_uevent. Signed-off-by: Peter Hurley <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau: off by one in nouveau_drm_vblank_enable()Dan Carpenter1-1/+1
The test here should be ">= ARRAY_SIZE()" instead of "> ARRAY_SIZE()". Signed-off-by: Dan Carpenter <[email protected]> Acked-by: Maarten Lankhorst <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-08drm/nouveau: remove pointless assignmentDave Jones1-1/+1
self-assignment of a variable doesn't make a lot of sense. Signed-off-by: Dave Jones <[email protected]> Signed-off-by: Ben Skeggs <[email protected]>
2013-11-07drm/i915/bdw: Handle forcewake for writes on gen8Ben Widawsky1-1/+52
GEN8 removes the GT FIFO which we've all come to know and love. Instead it offers a wider range of optimized registers which always keep a shadowed copy, and are fed to the GPU when it wakes. How this is implemented in hardware is still somewhat of a mystery. As far as I can tell, the basic design is as follows: If the register is not optimized, you must use the old forcewake mechanism to bring the GT out of sleep. [1] If register is in the optimized list the write will signal that the GT should begin to come out of whatever sleep state it is in. While the GT is coming out of sleep, the requested write will be stored in an intermediate shadow register. Do to the fact that the implementation details are not clear, I see several risks: 1. Order is not preserved as it is with GT FIFO. If we issue multiple writes to optimized registers, where order matters, we may need to serialize it with forcewake. 2. The optimized registers have only 1 shadowed slot, meaning if we issue multiple writes to the same register, and those values need to reach the GPU in order, forcewake will be required. [1] We could implement a SW queue the way the GT FIFO used to work if desired. NOTE: Compile tested only until we get real silicon. v2: - Use a default case to make future platforms also work. - Get rid of IS_BROADWELL since that's not yet defined, but we want to MMIO as soon as possible. v3: Apply suggestions from Mika's review: - s/optimized/shadowed/ - invert the logic of the helper so that it does what it says (the code itself was correct, just confusing to read). v4: - Squash in lost break. Signed-off-by: Ben Widawsky <[email protected]> (v1) Reviewed-by: Mika Kuoppala <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
2013-11-07Merge branch 'ttm-next-3.13' of git://people.freedesktop.org/~thomash/linux ↵Dave Airlie3-36/+102
into drm-next - A couple of fixes that never made it into fixes-3.12 - Make NO_EVICT bo's available for shrinkers when on delayed-delete list - Allow retrying page-faults that need to wait for GPU. * 'ttm-next-3.13' of git://people.freedesktop.org/~thomash/linux: drm/ttm: Fix memory type compatibility check drm/ttm: Fix ttm_bo_move_memcpy drm/ttm: Handle in-memory region copies drm/ttm: Make NO_EVICT bos available to shrinkers pending destruction drm/ttm: Allow vm fault retries
2013-11-06drm/i915/vlv: use per-pipe backlight controls v2Jesse Barnes4-12/+102
With the connector and pipe passed around, we can now set the backlight on the right pipe on VLV/BYT. v2: drop combination mode check for VLV (Jani) add save/restore code for VLV backlight regs (Jani) check for existing modulation freq when initializing backlight regs (Jani) Signed-off-by: Jesse Barnes <[email protected]> Signed-off-by: Jani Nikula <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67245 Tested-by: Joe Konno <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
2013-11-06drm/i915: make backlight functions take a connectorJesse Barnes7-37/+122
On VLV/BYT, backlight controls a per-pipe, so when adjusting the backlight we need to pass the correct info. So make the externally visible backlight functions take a connector argument, which can be used internally to figure out the pipe backlight to adjust. v2: make connector pipe lookup check for NULL crtc (Jani) fixup connector check in ASLE code (Jani) v3: make sure we take the mode config lock around lookups (Daniel) v4: fix double unlock in panel_get_brightness (Daniel) v5: push ASLE work into a work queue (Daniel) v6: separate ASLE work to a prep patch, rebase (Jani) Signed-off-by: Jesse Barnes <[email protected]> Signed-off-by: Jani Nikula <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
2013-11-06drm/i915: move opregion asle request handling to a work queueJani Nikula2-2/+19
Doing this has been long overdue anyway, but now we really need it in preparation for per connector backlight handling. Signed-off-by: Jani Nikula <[email protected]> Reviewed-by: Jesse Barnes <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
2013-11-06drm/ttm: Fix memory type compatibility checkThomas Hellstrom1-12/+20
Also check the busy placements before deciding to move a buffer object. Failing to do this may result in a completely unneccessary move within a single memory type. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]> Cc: [email protected]
2013-11-06drm/ttm: Fix ttm_bo_move_memcpyThomas Hellstrom1-11/+17
All error paths will want to keep the mm node, so handle this at the function exit. This fixes an ioremap failure error path. Also add some comments to make the function a bit easier to understand. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]> Cc: [email protected]
2013-11-06drm/ttm: Handle in-memory region copiesJakob Bornecrantz1-1/+3
Fix the case where the ttm pointer may be NULL causing a NULL pointer dereference. Signed-off-by: Jakob Bornecrantz <[email protected]> Signed-off-by: Thomas Hellström <[email protected]> Cc: [email protected]
2013-11-06drm/ttm: Make NO_EVICT bos available to shrinkers pending destructionThomas Hellstrom1-1/+13
NO_EVICT bos that are not idle when all references are dropped are put on the delayed destroy list. However, since they are not on LRU lists, they are not available to shrinkers at that point, and buffers on the delayed destroy list are not checked very often for idle. So when these buffers are put on the delayed destroy list, clear the NO_EVICT flag and put them on the right LRU list. This way they are immediately available for eviction or shrinkers and will not cause false OOMS. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]>
2013-11-06drm/ttm: Allow vm fault retriesThomas Hellstrom1-12/+50
Make use of the FAULT_FLAG_ALLOW_RETRY flag to allow dropping the mmap_sem while waiting for bo idle. FAULT_FLAG_ALLOW_RETRY appears to be primarily designed for disk waits but should work just as fine for GPU waits.. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]>
2013-11-06drm/vmwgfx: Use the linux DMA api to get valid device addresses of pagesThomas Hellstrom4-94/+620
The code handles three different cases: 1) physical page addresses. The ttm page array is used. 2) DMA subsystem addresses. A scatter-gather list is used. 3) Coherent pages. The ttm dma pool is used, together with the dma_ttm array os dma_addr_t Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]>
2013-11-06drm/ttm: Enable the dma page pool also for intel IOMMUsThomas Hellstrom2-5/+4
Used by the vmwgfx driver Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]> Reviewed-by: Konrad Rzeszutek Wilk <[email protected]>
2013-11-06drm/i915/vlv: use PIPE_START_VBLANK interrupts on VLVJesse Barnes1-1/+1
This fixes a mismatch between our vblank enable code and our IRQ handler. Also, since vblank start events come in before page flips reliably, it also fixes the kms_flip plain-flip test on my BYT system. Spotted-by: Ville Syrjälä <[email protected]> Signed-off-by: Jesse Barnes <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
2013-11-06qxl: add a connector property to denote hotplug should rescan modes.Dave Airlie2-0/+20
So GNOME userspace has an issue with when it rescans for modes on hotplug events, if the monitor has no EDID it assumes that nothing has changed on EDID as with real hw we'd never have new modes without a new EDID, and they kind off rely on the behaviour now, however with virtual GPUs we would like to rescan the modes and get a new preferred mode on hotplug events to handle dynamic guest resizing (where you resize the host window and the guest resizes with it). This is a simple property we can make userspace watch for to trigger new behaviour based on it, and can be used to replaced EDID hacks in virtual drivers. Acked-by: Marc-André Lureau <[email protected]> (on irc) Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: delay minor destruction to drm_dev_free()David Herrmann1-3/+7
Instead of freeing minors in drm_dev_unregister(), we only unplug them and delay the free to drm_dev_free(). Note that if drm_dev_register() has never been called, minors are NULL and this has no effect. This change is needed to allow early device unregistration. If we want to call drm_dev_unregister() on live devices, we need to guarantee that minors are still valid (but unplugged). This way, any open file can still access file_priv->minor->dev to get the DRM device. However, the minor is unplugged so no new users can occur. Signed-off-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: remove minor-id during unplugDavid Herrmann1-3/+1
Don't delay minor removal to drm_put_minor(). Otherwise, user-space can still open the minor and cause the kernel to oops. Instead, remove the minor during unplug so any new open() will fail to access this minor. Note that open() and drm_unplug_minor() are both protected by the global DRM mutex so we're fine. Signed-off-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: cleanup debugfs in drm_unplug_minor()David Herrmann1-4/+4
There is no reason to delay debugfs-cleanup to drm_put_minor(). We should forbid any access to debugfs files once the device is dead. Chances they oops once a card was unplugged are very high, anyway. Signed-off-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: make drm_get_minor() staticDavid Herrmann1-8/+11
drm_get_minor() is only used in one file. Make it static and add a kernel-doc comment which documents the current semantics. Signed-off-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: simplify drm_put_minor()David Herrmann1-18/+13
Allow passing NULL as minor to simplify DRM destruction paths. Also remove the double-pointer reset as it is no longer needed. drm_put_minor() is only called when the underlying object is destroyed. Hence, resetting minors to NULL is not necessary. As drm_put_minor() is no longer used by other DRM files, we can make it static, too. Signed-off-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: call drm_unplug_minor() from drm_put_minor()David Herrmann1-9/+24
This protects drm_unplug_minor() against repeated calls so we can use it in drm_put_minor(). This allows us to further simplify it in follow-ups as we no longer do minor-destruction in both functions but only in drm_unplug_minor(). Also add kernel-doc comments about what these calls do. [airlied: fixup for changes to kdev stuff] Signed-off-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: eliminate bit-copy restoration of crtcIlija Hadzic1-25/+8
Bit-copying restoration of CRTC structure in failure-recovery path of drm_crtc_helper_set_config function evokes a subtle and rare, but very dangerous, corruption of CRTC mutex structure. Namely, if drm_crtc_helper_set_config takes the path under 'fail:' label *and* some other process has attempted to grab the crtc mutex (and got blocked), restoring the CRTC structure by bit-copying it will overwrite the CRTC mutex state and the waiters list pointer within the mutex structure. Consequently the blocked process will never be scheduled. This patch fixes the issue by eliminating the bit-copy restoration. The elimination is possible because previous patches have cleaned up the resoration path so that only the fields touched by the drm_crtc_helper_set_config function are saved and restored if necessary. Signed-off-by: Ilija Hadzic <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: do not set crtc enabled field twiceIlija Hadzic1-2/+1
There is no need to set crtc->enabled field in drm_crtc_helper_set_config. This is already done (and properly restored in case of failure) in drm_crtc_helper_set_mode that is called by drm_crtc_helper_set_config. Doing it at only one place makes restoration in case of failure easier. Signed-off-by: Ilija Hadzic <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: fix error recovery path in drm_crtc_helper_set_modeIlija Hadzic1-4/+7
There is no need to save or restore hwmode field, because by the time this function sets this field, it cannot fail any more. However, we should save old enabled field because if the function fails, we want to return with unchanged CRTC. Signed-off-by: Ilija Hadzic <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: restore crtc origin if mode_set_base failsIlija Hadzic1-0/+2
Signed-off-by: Ilija Hadzic <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: eliminate old_fb from drm_crtc_helper_set_configIlija Hadzic1-8/+4
Old framebuffer is stored in save_set.fb and it is the same value that is later stored in old_fb. This makes old_fb redundant so we can replace it with save_set.fb. Signed-off-by: Ilija Hadzic <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: remove redundant if statementIlija Hadzic1-2/+1
Signed-off-by: Ilija Hadzic <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm: Do not drop root privileges for a fancier younger processChris Wilson1-2/+3
When a second process opens the device and master transferrence is complete, we walk the list of open devices and remove their authentication. This also revokes our root privilege. Instead of simply dropping the authentication, this patch reverts the authenticated state back to its original value. Signed-off-by: Chris Wilson <[email protected]> Reviewed-by: David Herrmann <[email protected]> Signed-off-by: Dave Airlie <[email protected]>
2013-11-06nouveau: drop interrupt busy setting.Dave Airlie1-3/+0
This causes problems with never going busy due to ptherm polling, and after talking to Ben I can't see it being required. Signed-off-by: Dave Airlie <[email protected]>
2013-11-06drm/sysfs: Remove stale comments about calling drm_sysfs_connector_add() ↵Ville Syrjälä1-6/+0
multiple times drm_connector_sysfs_add() explicitly checks if connector->kdev is already populated and returns success. So it clearly now allows being called multiple times. Remove some stale comments to the contrary. Signed-off-by: Ville Syrjälä <[email protected]> Reviewed-by: Jani Nikula <[email protected]> Signed-off-by: Dave Airlie <[email protected]>