GitHub/LineageOS/G12/android_kernel_amlogic_linux-4.9.git
12 years agodrm/exynos: add userptr feature for g2d module
Inki Dae [Sun, 4 Nov 2012 13:48:52 +0000 (05:48 -0800)]
drm/exynos: add userptr feature for g2d module

This patch adds userptr feautre for G2D module.

The userptr means user space address allocated by malloc().
And the purpose of this feature is to make G2D's dma able
to access the user space region.

To user this feature, user should flag G2D_BUF_USRPTR to
offset variable of struct drm_exynos_g2d_cmd and fill
struct drm_exynos_g2d_userptr with user space address
and size for it and then should set a pointer to
drm_exynos_g2d_userptr object to data variable of struct
drm_exynos_g2d_cmd. The last bit of offset variable is used
to check if the cmdlist's buffer type is userptr or not.
If userptr, the g2d driver gets user space address and size
and then gets pages through get_user_pages().
(another case is counted as gem handle)

Below is sample codes:

static void set_cmd(struct drm_exynos_g2d_cmd *cmd,
unsigned long offset, unsigned long data)
{
cmd->offset = offset;
cmd->data = data;
}

static int solid_fill_test(int x, int y, unsigned long userptr)
{
struct drm_exynos_g2d_cmd cmd_gem[5];
struct drm_exynos_g2d_userptr g2d_userptr;
unsigned int gem_nr = 0;
...

g2d_userptr.userptr = userptr;
g2d_userptr.size = x * y * 4;

set_cmd(&cmd_gem[gem_nr++], DST_BASE_ADDR_REG |
G2D_BUF_USERPTR,
(unsigned long)&g2d_userptr);
...
}

int main(int argc, char **argv)
{
unsigned long addr;
...

addr = malloc(x * y * 4);
...

solid_fill_test(x, y, addr);
...
}

And next, the pages are mapped with iommu table and the device
address is set to cmdlist so that G2D's dma can access it.
As you may know, the pages from get_user_pages() are pinned.
In other words, they CAN NOT be migrated and also swapped out.
So the dma access would be safe.

But the use of userptr feature has performance overhead so
this patch also has memory pool to the userptr feature.
Please, assume that user sends cmdlist filled with userptr
and size every time to g2d driver, and the get_user_pages
funcion will be called every time.

The memory pool has maximum 64MB size and the userptr that
user had ever sent, is holded in the memory pool.
This meaning is that if the userptr from user is same as one
in the memory pool, device address to the userptr in the memory
pool is set to cmdlist.

And last, the pages from get_user_pages() will be freed once
user calls free() and the dma access is completed. Actually,
get_user_pages() takes 2 reference counts if the user process
has never accessed user region allocated by malloc(). Then, if
the user calls free(), the page reference count becomes 1 and
becomes 0 with put_page() call. And the reverse holds as well.
This means how the pages backed are used by dma and freed.

This patch is based on "drm/exynos: add iommu support for g2d",
https://patchwork.kernel.org/patch/1629481/

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: remove unnecessary sg_alloc_table call
Prathyush K [Wed, 7 Nov 2012 10:28:58 +0000 (15:58 +0530)]
drm/exynos: remove unnecessary sg_alloc_table call

The function dma_get_sgtable will allocate a sg table internally so
it is not necessary to allocate a sg table before it. The unnecessary
'sg_alloc_table' call is removed.

Signed-off-by: Prathyush K <prathyush.k@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm: exynos: fix for mapping of dma buffers
Rahul Sharma [Mon, 5 Nov 2012 15:34:29 +0000 (21:04 +0530)]
drm: exynos: fix for mapping of dma buffers

This patch fixes the problem of mapping contigous and non contigous dma buffers.

Currently page struct is calculated from the buf->dma_addr which is not the
physical address. It is replaced by buf->pages which points to the page struct
of the first page of contigous memory chunk. This gives the correct page frame
number for mapping.

Non-contigous dma buffers are described using SG table and SG lists. Each
valid SG List is pointing to a single page or group of pages which are
physically contigous. Current implementation just maps the first page of each
SG List and leave the other pages unmapped, leading to a crash. Given solution
finds the page struct for the faulting page through parsing SG table and map it.

Signed-off-by: Rahul Sharma <rahul.sharma@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: remove EXYNOS_BO_NONCONTIG type checking.
Inki Dae [Fri, 2 Nov 2012 07:10:39 +0000 (16:10 +0900)]
drm/exynos: remove EXYNOS_BO_NONCONTIG type checking.

With iommu support, non-continuous buffer also is supported so
this patch removes these checking from exynos_drm_gem_get/put_dma_addr
funciton.

This patch is based on the below patch set, "drm/exynos: add
iommu support for -next".
http://www.spinics.net/lists/dri-devel/msg29041.html

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: add iommu support for g2d
Inki Dae [Sun, 4 Nov 2012 04:53:24 +0000 (21:53 -0700)]
drm/exynos: add iommu support for g2d

Chagelog v2:
removed unnecessary structure, struct g2d_gem_node.

Chagelog v1:
This patch adds iommu support for g2d driver. For this, it
adds subdrv_probe/remove callback to enable or disable
g2d iommu. And with this patch, in case of using g2d iommu,
we can get or put device address to a gem handle from user
through exynos_drm_gem_get/put_dma_addr(). Actually, these
functions take a reference to a gem handle so that the gem
object used by g2d dma is released properly.

And runqueue_node has a pointer to drm_file object of current
process to manage gem handles to owner.

This patch is based on the below patch set, "drm/exynos: add
iommu support for -next".
     http://www.spinics.net/lists/dri-devel/msg29041.html

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: add iommu support for hdmi driver
Inki Dae [Fri, 19 Oct 2012 08:37:35 +0000 (17:37 +0900)]
drm/exynos: add iommu support for hdmi driver

Changelog v2:
move iommu support feature to mixer side.
And below is Prathyush's comment.

According to the new IOMMU framework for exynos sysmmus,
the owner of the sysmmu-tv is mixer (which is the actual
device that does DMA) and not hdmi.
The mmu-master in sysmmu-tv node is set as below in exynos5250.dtsi
sysmmu-tv {
-
mmu-master = <&mixer>;
};

Changelog v1:
The iommu will be enabled when hdmi sub driver is probed and
will be disabled when removed.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: add iommu support to fimd driver
Inki Dae [Fri, 19 Oct 2012 08:16:36 +0000 (17:16 +0900)]
drm/exynos: add iommu support to fimd driver

The iommu will be enabled when fimd sub driver is probed and
will be disabled when removed.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: add iommu support for exynos drm framework
Inki Dae [Sat, 20 Oct 2012 14:53:42 +0000 (07:53 -0700)]
drm/exynos: add iommu support for exynos drm framework

Changelog v4:
- fix condition to drm_iommu_detach_device funtion.

Changelog v3:
- add dma_parms->max_segment_size setting of drm_device->dev.
- use devm_kzalloc instead of kzalloc.

Changelog v2:
- fix iommu attach condition.
  . check archdata.dma_ops of drm device instead of
    subdrv device's one.
- code clean to exynos_drm_iommu.c file.
  . remove '#ifdef CONFIG_ARM_DMA_USE_IOMMU' from exynos_drm_iommu.c
    and add it to driver/gpu/drm/exynos/Kconfig.

Changelog v1:
This patch adds iommu support for exynos drm framework with dma mapping
api. In this patch, we used dma mapping api to allocate physical memory
and maps it with iommu table and removed some existing codes and added
new some codes for iommu support.

GEM allocation requires one device object to use dma mapping api so
this patch uses one iommu mapping for all sub drivers. In other words,
all sub drivers have same iommu mapping.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agoARM: dma-mapping: add support for DMA_ATTR_FORCE_CONTIGUOUS attribute
Marek Szyprowski [Mon, 15 Oct 2012 14:03:52 +0000 (16:03 +0200)]
ARM: dma-mapping: add support for DMA_ATTR_FORCE_CONTIGUOUS attribute

This patch adds support for DMA_ATTR_FORCE_CONTIGUOUS attribute for
dma_alloc_attrs() in IOMMU-aware implementation. For allocating physically
contiguous buffers Contiguous Memory Allocator is used.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
12 years agocommon: DMA-mapping: add DMA_ATTR_FORCE_CONTIGUOUS attribute
Marek Szyprowski [Mon, 15 Oct 2012 14:03:51 +0000 (16:03 +0200)]
common: DMA-mapping: add DMA_ATTR_FORCE_CONTIGUOUS attribute

This patch adds DMA_ATTR_FORCE_CONTIGUOUS attribute to the DMA-mapping
subsystem.

By default DMA-mapping subsystem is allowed to assemble the buffer
allocated by dma_alloc_attrs() function from individual pages if it can
be mapped as contiguous chunk into device dma address space. By
specifing this attribute the allocated buffer is forced to be contiguous
also in physical memory.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
12 years agodrm: hold event_lock while accessing vblank_event_list
Imre Deak [Fri, 2 Nov 2012 11:30:50 +0000 (13:30 +0200)]
drm: hold event_lock while accessing vblank_event_list

Currently the only users of drm_vblank_off() are i915 and gma500,
neither of which holds the event_lock when calling this function.
Fix this by holding the event_lock while traversing the list.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: fix lockdep for event_lock wrt. vbl_time_lock
Imre Deak [Fri, 2 Nov 2012 11:30:49 +0000 (13:30 +0200)]
drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock

Currently the exynos driver calls drm_vblank_off() with the event_lock
held, while drm_vblank_off() will lock vbl_time and vblank_time_lock.
This lock dependency chain conflicts with the one in drm_handle_vblank()
where we first lock vblank_time_lock and then the event_lock.

Fix this by removing the above drm_vblank_off() calls which are in fact
never executed: drm_dev->vblank_disable_allowed is only ever non-zero
during driver init, until it's set in {fimd,vidi}_subdrv_probe. Both the
driver init and open code is protected by drm_global_mutex, so the
earliest page flip ioctl can happen only after vblank_disable_allowed is
set to 1. Thus {fimd,vidi}_finish_pageflip - with pending flip events -
will always get called with vblank_disable_allowed being 1.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: call drm_vblank_put for each queued flip event
Imre Deak [Fri, 2 Nov 2012 11:30:48 +0000 (13:30 +0200)]
drm/exynos: call drm_vblank_put for each queued flip event

It's guaranteed that for each event on pageflip_event_list we have
called drm_vblank_get() - see exynos_drm_crtc_page_flip() - so checking
for this is redundant.

Also we need to call drm_vblank_put() for each event on the list, not
only once, otherwise we'd leak vblank references if there are multiple
events on the list.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: hold event_lock while accessing pageflip_event_list
Imre Deak [Fri, 2 Nov 2012 11:30:47 +0000 (13:30 +0200)]
drm/exynos: hold event_lock while accessing pageflip_event_list

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: Fix potential NULL pointer dereference in exynos_drm_encoder.c
Sachin Kamat [Mon, 19 Nov 2012 09:20:30 +0000 (14:50 +0530)]
drm/exynos: Fix potential NULL pointer dereference in exynos_drm_encoder.c

Check overlay_ops is not NULL as checked in the previous 'if' condition.
Fixes the following smatch error:
drivers/gpu/drm/exynos/exynos_drm_encoder.c:509 exynos_drm_encoder_plane_disable()
error: we previously assumed 'overlay_ops' could be null (see line 499)

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: Make exynos4/5_fimd_driver_data static
Sachin Kamat [Mon, 19 Nov 2012 09:52:54 +0000 (15:22 +0530)]
drm/exynos: Make exynos4/5_fimd_driver_data static

Fixes the following sparse warnings:
drivers/gpu/drm/exynos/exynos_drm_fimd.c:65:25: warning:
symbol 'exynos4_fimd_driver_data' was not declared. Should it be static?
drivers/gpu/drm/exynos/exynos_drm_fimd.c:69:25: warning:
symbol 'exynos5_fimd_driver_data' was not declared. Should it be static?

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: fix overlay updating issue
Inki Dae [Wed, 14 Nov 2012 11:41:35 +0000 (20:41 +0900)]
drm/exynos: fix overlay updating issue

Chagelog v2:
Move encoder's dpms updating into exynos_drm_encoder_commit
function because when crtc's dpms is updated, encoder's dpms
is updated also. This would induce the issue that encoder
isn't disabled after crtc is disabled.

Changelog v1:
This patch fixes a issue that overlay data aren't applied
to real hardware when dpms off goes to on after setcrtc
was requested like below,
    dpms off -> setcrtc -> dpms off -> dpms on

For this, it makes encoder's dpms to be updated when
setcrtc is requested.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: remove unnecessary code.
Inki Dae [Wed, 14 Nov 2012 08:28:36 +0000 (17:28 +0900)]
drm/exynos: remove unnecessary code.

plane->fb will be set to new fb after update_plane callback is called
by drm_mode_set_plane()

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agodrm/exynos: fix linux framebuffer address setting.
Inki Dae [Fri, 9 Nov 2012 07:41:29 +0000 (16:41 +0900)]
drm/exynos: fix linux framebuffer address setting.

With iommu, buffer->dma_addr has device addres so this patch
fixes for physical address to be set to fix.smem_start always.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
12 years agoMerge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into...
Dave Airlie [Thu, 29 Nov 2012 10:23:56 +0000 (20:23 +1000)]
Merge branch 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel into drm-next

Daniel writes:
Besides the big item of lifting the "preliminary hw support" tag from the
 Haswell code, just small bits&pieces all over:
 - Leftover Haswell patches and some fixes from Paulo
 - LyncPoint PCH support (for hsw)
 - OOM handling improvements from Chris Wilson
 - connector property and send_vblank_event refactorings from Rob Clark
 - random pile of small fixes

 Note that the send_vblank refactorings will cause some locking WARNs to
 show up. Imre has fixed that up, but since all the driver changes outside
 of the drm core have been for exonys, those four patches are merged
 through the exonys-next tree.

Meh, I've forgotten to cherry-pick an important fix from Ben for a
regression in the 3.8 gen6+ gtt code. New pull request below. While I'm at
it, the hdmi VIC patch for the drm edid code is still in my queue, I'll
send you that in the next 3.8-fixes pull.

* 'for-airlied' of git://people.freedesktop.org/~danvet/drm-intel: (33 commits)
  drm/i915: Fix pte updates in ggtt clear range
  drm/i915: promote Haswell to full support
  drm/i915: Report the origin of the LVDS fixed panel mode
  drm/i915: LVDS fallback to fixed-mode if EDID not present
  drm/i915/sdvo: kfree the intel_sdvo_connector, not drm_connector, on destroy
  drm/i915: drm_connector_property -> drm_object_property
  drm/i915: use drm_send_vblank_event() helper
  drm/i915: Use pci_resource functions for BARs.
  drm/i915: Borrow our struct_mutex for the direct reclaim
  drm/i915: Defer assignment of obj->gtt_space until after all possible mallocs
  drm/i915: Apply the IBX transcoder A w/a for HDMI to SDVO as well
  drm/i915: implement WaMbcDriverBootEnable on Haswell
  drm/i915: fix intel_ddi_get_cdclk_freq for ULT machines
  drm/i915: make the panel fitter work on pipes B and C on Haswell
  drm/i915: make the panel fitter work on pipes B and C on IVB
  drm/i915: don't intel_crt_init if DDI A has 4 lanes
  drm/i915: make DP work on LPT-LP machines
  drm/i915: fix false positive "Unclaimed write" messages
  drm/i915: use cpu/pch transcoder on intel_enable_pipe
  drm/i915: don't limit Haswell CRT encoder to pipe A
  ...

12 years agodrm/i915: Fix pte updates in ggtt clear range
Ben Widawsky [Tue, 27 Nov 2012 05:52:54 +0000 (21:52 -0800)]
drm/i915: Fix pte updates in ggtt clear range

This bug was introduced by me:
commit e76e9aebcdbfebae8f4cd147e3c0f800d36e97f3
Author: Ben Widawsky <ben@bwidawsk.net>
Date:   Sun Nov 4 09:21:27 2012 -0800

    drm/i915: Stop using AGP layer for GEN6+

The existing code uses memset_io which follows memset semantics in only
guaranteeing a write of individual bytes. Since a PTE entry is 4 bytes,
this can only be correct if the scratch page address is 0.

This caused unsightly errors when we clear the range at load time,
though I'm not really sure what the heck is referencing that memory
anyway. I caught this is because I believe we have some other bug where
the display is doing reads of memory we feel should be cleared (or we
are relying on scratch pages to be a specific value).

Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
12 years agodrm: tegra: Add maintainers entry
Thierry Reding [Wed, 28 Nov 2012 19:45:28 +0000 (20:45 +0100)]
drm: tegra: Add maintainers entry

Add myself as the maintainer of the NVIDIA Tegra DRM driver.

Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Acked-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
12 years agodrm/pci: add missing variable initialization
Jingoo Han [Thu, 29 Nov 2012 04:26:05 +0000 (13:26 +0900)]
drm/pci: add missing variable initialization

Fixed build warning as below:

drivers/gpu/drm/drm_pci.c: In function 'drm_pcie_get_speed_cap_mask':
drivers/gpu/drm/drm_pci.c:496:9: warning: 'lnkcap' may be used uninitialized in this function [-Wuninitialized]
drivers/gpu/drm/drm_pci.c:497:10: warning: 'lnkcap2' may be used uninitialized in this function [-Wuninitialized]

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
12 years agodrm/nouveau/device: Remove duplicate inclusion of core/device.h
Sachin Kamat [Tue, 20 Nov 2012 06:05:32 +0000 (11:35 +0530)]
drm/nouveau/device: Remove duplicate inclusion of core/device.h

core/device.h was included twice.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: remove duplicate inclusion of nouveau_ttm.h
Sachin Kamat [Tue, 20 Nov 2012 05:53:50 +0000 (11:23 +0530)]
drm/nouveau: remove duplicate inclusion of nouveau_ttm.h

nouveau_ttm.h was included twice.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/fifo: trigger engine context unload before zeroing context pointer
Ben Skeggs [Tue, 27 Nov 2012 01:05:36 +0000 (11:05 +1000)]
drm/nouveau/fifo: trigger engine context unload before zeroing context pointer

Fixes a PCE0 page fault noticed on NVD9 during module unload.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: prevent log mangling
Daniel J Blueman [Sat, 24 Nov 2012 02:11:46 +0000 (10:11 +0800)]
drm/nouveau: prevent log mangling

On 3.7-rc6, add missing newline to to prevent the following kernel log
line getting appended to the current one after switching the integrated
GPU and suspending the discrete GPU.

Signed-off-by: Daniel J Blueman <daniel@quora.org>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: unpin various bo's before destroying
Marcin Slusarz [Sun, 25 Nov 2012 22:04:23 +0000 (23:04 +0100)]
drm/nouveau: unpin various bo's before destroying

These objects leak VRAM - but only on module unload.

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: unpin pushbuffer bo before destroying it
Marcin Slusarz [Sun, 25 Nov 2012 22:02:28 +0000 (23:02 +0100)]
drm/nouveau: unpin pushbuffer bo before destroying it

Fixes GART leak (as accounted by nouveau_drm.gem.gart_available).

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: remove misleading comment from nouveau_prime_new
Marcin Slusarz [Sun, 25 Nov 2012 22:01:28 +0000 (23:01 +0100)]
drm/nouveau: remove misleading comment from nouveau_prime_new

Copy/pasted from nouveau_gem_new.

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: raise reporting levels of some messages
Marcin Slusarz [Sun, 25 Nov 2012 22:00:57 +0000 (23:00 +0100)]
drm/nouveau: raise reporting levels of some messages

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/core: fix the assumption that NVDEV_XXXX is always under 32
Martin Peres [Mon, 26 Nov 2012 23:30:32 +0000 (00:30 +0100)]
drm/nouveau/core: fix the assumption that NVDEV_XXXX is always under 32

It fixes a bug that would have been introduced when adding more
sudevs/engines.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/ppp: remove nouveau_ppp base class
Ben Skeggs [Fri, 23 Nov 2012 01:20:11 +0000 (11:20 +1000)]
drm/nouveau/ppp: remove nouveau_ppp base class

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agonve0/ppp: enable support via nvc0's implementation
Ben Skeggs [Fri, 23 Nov 2012 01:14:49 +0000 (11:14 +1000)]
nve0/ppp: enable support via nvc0's implementation

NVIDIA also appear to use the same class on Fermi/Kepler for PPP.

Will allow use of the engine if firmware (nvXX_fuc086) provided.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agonvc0/ppp: initial implementation of engine
Maarten Lankhorst [Fri, 23 Nov 2012 01:13:36 +0000 (11:13 +1000)]
nvc0/ppp: initial implementation of engine

Will allow use of the engine if firmware (nvXX_fuc086) provided.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agonvc0/vp: initial implementation of engine
Maarten Lankhorst [Fri, 23 Nov 2012 01:10:45 +0000 (11:10 +1000)]
nvc0/vp: initial implementation of engine

Will allow use of the engine if firmware (nvXX_fuc085) provided.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agonvc0/bsp: initial implementation of engine
Maarten Lankhorst [Fri, 23 Nov 2012 01:08:23 +0000 (11:08 +1000)]
nvc0/bsp: initial implementation of engine

Will allow use of the engine if firmware (nvXX_fuc084) provided.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/vdec: remove nouveau_{bsp,vp} base classes, use nouveau_engine directly
Ben Skeggs [Thu, 22 Nov 2012 06:01:06 +0000 (16:01 +1000)]
drm/nouveau/vdec: remove nouveau_{bsp,vp} base classes, use nouveau_engine directly

Later chipsets use falcon anyway, and I can't currently see a good need
for a shared base class.

PPP will get the same treatment once Maarten's patches are merged.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nve0/fifo: allow for future binding of ppp contexts
Ben Skeggs [Thu, 22 Nov 2012 05:54:46 +0000 (15:54 +1000)]
drm/nve0/fifo: allow for future binding of ppp contexts

No support for the class yet, but will be pulled in with Maarten's Fermi
vdec patches.  The Kepler PPP class is identical.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nve0/vp: implement initial support for engine
Ben Skeggs [Thu, 22 Nov 2012 05:48:41 +0000 (15:48 +1000)]
drm/nve0/vp: implement initial support for engine

Will allow use of the engine if firmware (nvXX_fuc085) provided.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nve0/bsp: implement initial support for engine
Ben Skeggs [Thu, 22 Nov 2012 05:42:23 +0000 (15:42 +1000)]
drm/nve0/bsp: implement initial support for engine

Will allow use of the engine if firmware (nvXX_fuc084) provided.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nve0: allow specification of channel engine type in abi16 call
Ben Skeggs [Thu, 22 Nov 2012 03:43:55 +0000 (13:43 +1000)]
drm/nve0: allow specification of channel engine type in abi16 call

Previously, if either vram/gart handles were specified as ~0, the ioctl
call would fail.  In order to hack engine selection into the ioctl for
kepler, we now define (fb_ctxdma_handle == ~0) to mean "engine mask is
in tt_ctxdma_handle".

This approach also allows new userspace to detect lack of support for
non-PGRAPH channels on older kernels.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/core: implement shortcut for simple engctx construction
Ben Skeggs [Thu, 22 Nov 2012 03:27:37 +0000 (13:27 +1000)]
drm/nouveau/core: implement shortcut for simple engctx construction

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvc0/copy: share interrupt handler with nva3
Ben Skeggs [Thu, 22 Nov 2012 03:02:06 +0000 (13:02 +1000)]
drm/nvc0/copy: share interrupt handler with nva3

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/fb: implement trap handler as subdev interrupt handler
Ben Skeggs [Thu, 22 Nov 2012 02:57:32 +0000 (12:57 +1000)]
drm/nv50/fb: implement trap handler as subdev interrupt handler

nv50_fb_trap() will now be called automagically by the mc intr handler,
rather than each engine's handler having to check for traps manually.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/mc: allow calling of multiple handlers for a give intr bit
Ben Skeggs [Thu, 22 Nov 2012 02:49:42 +0000 (12:49 +1000)]
drm/nouveau/mc: allow calling of multiple handlers for a give intr bit

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/copy: remove nouveau_copy base class
Ben Skeggs [Thu, 22 Nov 2012 02:37:30 +0000 (12:37 +1000)]
drm/nouveau/copy: remove nouveau_copy base class

nva3/nvc0 are using falcon, nve0 is now using engine directly.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvc0/copy: use nouveau_falcon base class
Ben Skeggs [Thu, 22 Nov 2012 02:33:25 +0000 (12:33 +1000)]
drm/nvc0/copy: use nouveau_falcon base class

Reviewed-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nva3/copy: use nouveau_falcon base class
Ben Skeggs [Thu, 22 Nov 2012 02:27:05 +0000 (12:27 +1000)]
drm/nva3/copy: use nouveau_falcon base class

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv98/crypt: use nouveau_falcon base class
Ben Skeggs [Thu, 22 Nov 2012 02:18:57 +0000 (12:18 +1000)]
drm/nv98/crypt: use nouveau_falcon base class

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: initial falcon (fuc) engine base class implementation
Ben Skeggs [Wed, 21 Nov 2012 11:02:32 +0000 (21:02 +1000)]
drm/nouveau: initial falcon (fuc) engine base class implementation

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: convert to dev_pm_ops
Dave Airlie [Fri, 2 Nov 2012 01:04:28 +0000 (11:04 +1000)]
drm/nouveau: convert to dev_pm_ops

This is a precursor to dynamic power management support for nouveau,

we need to use pm ops for that, so first convert the driver to using pm ops
interfaces.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: Add interface to detect optimus and v1 support
Dave Airlie [Fri, 2 Nov 2012 01:04:27 +0000 (11:04 +1000)]
drm/nouveau: Add interface to detect optimus and v1 support

This is required to decide if we can auto-powerdown and how to implement it.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/disp: add support for 10bpc over DisplayPort
Ben Skeggs [Wed, 21 Nov 2012 04:49:54 +0000 (14:49 +1000)]
drm/nouveau/disp: add support for 10bpc over DisplayPort

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: rename nvd0_display to nv50_display to reflect reality since merge
Ben Skeggs [Wed, 21 Nov 2012 04:40:21 +0000 (14:40 +1000)]
drm/nouveau: rename nvd0_display to nv50_display to reflect reality since merge

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50-nvc0: switch to common disp impl, removing previous version
Ben Skeggs [Fri, 16 Nov 2012 01:54:31 +0000 (11:54 +1000)]
drm/nv50-nvc0: switch to common disp impl, removing previous version

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: implement support for colour vibrance control
Ben Skeggs [Wed, 21 Nov 2012 03:03:42 +0000 (13:03 +1000)]
drm/nvd0/disp: implement support for colour vibrance control

Ported from original nv50 commit by Christoph, with added support for the
setting on later chipsets.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: remove fetching of capabilities report
Ben Skeggs [Mon, 19 Nov 2012 00:18:25 +0000 (10:18 +1000)]
drm/nvd0/disp: remove fetching of capabilities report

Unused, and caused a race with evo_sync().  Will revisit using it properly
later on.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: enable support for older display classes
Ben Skeggs [Fri, 16 Nov 2012 01:44:14 +0000 (11:44 +1000)]
drm/nvd0/disp: enable support for older display classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: support creation of fb dma objects on older chipsets
Ben Skeggs [Fri, 16 Nov 2012 03:58:48 +0000 (13:58 +1000)]
drm/nvd0/disp: support creation of fb dma objects on older chipsets

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: implement support for older DISP_SYNC classes
Ben Skeggs [Fri, 16 Nov 2012 03:16:51 +0000 (13:16 +1000)]
drm/nvd0/disp: implement support for older DISP_SYNC classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: implement sor support for older display classes
Ben Skeggs [Fri, 16 Nov 2012 01:40:34 +0000 (11:40 +1000)]
drm/nvd0/disp: implement sor support for older display classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: implement dac support for older display classes
Ben Skeggs [Fri, 16 Nov 2012 01:21:37 +0000 (11:21 +1000)]
drm/nvd0/disp: implement dac support for older display classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: start implementing support for older display classes
Ben Skeggs [Fri, 16 Nov 2012 00:24:31 +0000 (10:24 +1000)]
drm/nvd0/disp: start implementing support for older display classes

Currently unused, but checkpointing the merged head handling routines.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/dp: remove last bits of VBIOS parsing from DRM code
Ben Skeggs [Thu, 15 Nov 2012 08:58:01 +0000 (18:58 +1000)]
drm/nouveau/dp: remove last bits of VBIOS parsing from DRM code

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/dp: move core link training calls to common code
Ben Skeggs [Thu, 15 Nov 2012 08:56:02 +0000 (18:56 +1000)]
drm/nouveau/dp: move core link training calls to common code

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: remove (now obsolete) BIT U table parsing from DRM code
Ben Skeggs [Sun, 11 Nov 2012 23:55:16 +0000 (09:55 +1000)]
drm/nouveau: remove (now obsolete) BIT U table parsing from DRM code

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: move remaining interrupt handling into core
Ben Skeggs [Fri, 9 Nov 2012 02:09:48 +0000 (12:09 +1000)]
drm/nv50/disp: move remaining interrupt handling into core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: calculate U script id in supervisor interrupt
Ben Skeggs [Fri, 9 Nov 2012 01:25:37 +0000 (11:25 +1000)]
drm/nvd0/disp: calculate U script id in supervisor interrupt

This is like we do on nv50:nvd9 already.  There's been no problems seen
yet with using this *seemingly* scratch register to store the value, but
we won't be able to do this anymore once nv50's code is merged.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv84/disp: move hdmi control into core
Ben Skeggs [Fri, 9 Nov 2012 00:54:38 +0000 (10:54 +1000)]
drm/nv84/disp: move hdmi control into core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nva3/disp: move hda codec handling to core
Ben Skeggs [Fri, 9 Nov 2012 00:38:10 +0000 (10:38 +1000)]
drm/nva3/disp: move hda codec handling to core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: move dp link training helpers into core
Ben Skeggs [Thu, 8 Nov 2012 23:53:28 +0000 (09:53 +1000)]
drm/nv50/disp: move dp link training helpers into core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: call into core for dac load detection
Ben Skeggs [Thu, 8 Nov 2012 23:38:06 +0000 (09:38 +1000)]
drm/nv50/disp: call into core for dac load detection

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: call into core to handle dac/sor power state changes
Ben Skeggs [Thu, 8 Nov 2012 23:32:56 +0000 (09:32 +1000)]
drm/nv50/disp: call into core to handle dac/sor power state changes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: allocate display from driver core
Ben Skeggs [Thu, 8 Nov 2012 23:22:31 +0000 (09:22 +1000)]
drm/nv50/disp: allocate display from driver core

EVO channels still handled "manually", this won't be ported here, and
will instead be held off until nv50_display/nvd0_display are merged.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/bios: implement some dcb output entry parsing/matching functions
Ben Skeggs [Thu, 8 Nov 2012 07:41:06 +0000 (17:41 +1000)]
drm/nouveau/bios: implement some dcb output entry parsing/matching functions

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: handle DP transfer unit setup from second supervisor interrupt
Ben Skeggs [Thu, 8 Nov 2012 04:59:26 +0000 (14:59 +1000)]
drm/nvd0/disp: handle DP transfer unit setup from second supervisor interrupt

This is what we've done forever in nv50_display.c, and also allows the
last direct MMIO accesses to be removed from nvd0_display.c.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: move HDMI control to core
Ben Skeggs [Thu, 8 Nov 2012 04:22:28 +0000 (14:22 +1000)]
drm/nvd0/disp: move HDMI control to core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: move HDA codec setup to core
Ben Skeggs [Thu, 8 Nov 2012 04:03:56 +0000 (14:03 +1000)]
drm/nvd0/disp: move HDA codec setup to core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: call into core to handle dac power state changes
Ben Skeggs [Thu, 8 Nov 2012 02:08:55 +0000 (12:08 +1000)]
drm/nvd0/disp: call into core to handle dac power state changes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: call into core to handle sor power state changes
Ben Skeggs [Thu, 8 Nov 2012 02:01:39 +0000 (12:01 +1000)]
drm/nvd0/disp: call into core to handle sor power state changes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: move link training helpers into core as display methods
Ben Skeggs [Wed, 7 Nov 2012 06:43:00 +0000 (16:43 +1000)]
drm/nvd0/disp: move link training helpers into core as display methods

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/core: allow representing method ranges in nouveau_omthds
Ben Skeggs [Wed, 7 Nov 2012 06:28:35 +0000 (16:28 +1000)]
drm/nouveau/core: allow representing method ranges in nouveau_omthds

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/core: expose full method calling capabilities with nv_exec
Ben Skeggs [Wed, 7 Nov 2012 06:16:41 +0000 (16:16 +1000)]
drm/nouveau/core: expose full method calling capabilities with nv_exec

nv_call() just allows mthd+u32 submission, nv_exec() exposes the
mthd+data+size interface which will be used in future commits.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/bios: implement "full" BIT 'd' table (and subtable) parsing in core
Ben Skeggs [Tue, 6 Nov 2012 06:03:51 +0000 (16:03 +1000)]
drm/nouveau/bios: implement "full" BIT 'd' table (and subtable) parsing in core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: move remaining interrupt handling to core
Ben Skeggs [Fri, 2 Nov 2012 01:33:27 +0000 (11:33 +1000)]
drm/nvd0/disp: move remaining interrupt handling to core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/core: add some missing subdev/engine disable flags
Ben Skeggs [Thu, 1 Nov 2012 01:09:53 +0000 (11:09 +1000)]
drm/nouveau/core: add some missing subdev/engine disable flags

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/bios: implement BIT 'U' table (and subtable) parsing in core
Ben Skeggs [Fri, 2 Nov 2012 01:02:47 +0000 (11:02 +1000)]
drm/nouveau/bios: implement BIT 'U' table (and subtable) parsing in core

This will, in the near future, replace what's currently in the DRM
nouveau_bios.c code.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: allocate display and evo channels from driver core
Ben Skeggs [Tue, 16 Oct 2012 04:18:32 +0000 (14:18 +1000)]
drm/nvd0/disp: allocate display and evo channels from driver core

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau: run mode_config destructor before destroying internal display state
Ben Skeggs [Tue, 30 Oct 2012 00:59:12 +0000 (10:59 +1000)]
drm/nouveau: run mode_config destructor before destroying internal display state

Later changes will depend on being able to pull down CRTCs etc with the
master display state still intact.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nouveau/drm/nvd0/disp: display->disp
Ben Skeggs [Mon, 29 Oct 2012 03:36:45 +0000 (13:36 +1000)]
drm/nouveau/drm/nvd0/disp: display->disp

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/disp: introduce a nvd0_head as a subclass of nouveau_crtc
Ben Skeggs [Tue, 16 Oct 2012 04:00:31 +0000 (14:00 +1000)]
drm/nvd0/disp: introduce a nvd0_head as a subclass of nouveau_crtc

This will be used instead of storing a heap of per-head data (such as evo
channels) in nvd0_display in some other way.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0-nve0/disp: initial implementation of evo channel classes
Ben Skeggs [Tue, 28 Aug 2012 04:10:39 +0000 (14:10 +1000)]
drm/nvd0-nve0/disp: initial implementation of evo channel classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: allow PCI_US pushbuf binding
Ben Skeggs [Tue, 30 Oct 2012 00:03:38 +0000 (10:03 +1000)]
drm/nv50/disp: allow PCI_US pushbuf binding

12 years agodrm/nv50/disp: initial implementation of the various channel object classes
Ben Skeggs [Tue, 14 Aug 2012 04:11:49 +0000 (14:11 +1000)]
drm/nv50/disp: initial implementation of the various channel object classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: enable interrupts and setup memory area
Ben Skeggs [Tue, 14 Aug 2012 02:50:14 +0000 (12:50 +1000)]
drm/nv50/disp: enable interrupts and setup memory area

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: copy caps to evo
Ben Skeggs [Tue, 14 Aug 2012 01:29:57 +0000 (11:29 +1000)]
drm/nv50/disp: copy caps to evo

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nv50/disp: create skeleton display/channel object classes
Ben Skeggs [Tue, 14 Aug 2012 00:04:04 +0000 (10:04 +1000)]
drm/nv50/disp: create skeleton display/channel object classes

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvd0/dmaobj: initial bind() method implementation
Ben Skeggs [Mon, 8 Oct 2012 04:44:00 +0000 (14:44 +1000)]
drm/nvd0/dmaobj: initial bind() method implementation

Currently unused, and rudimentary.  Lots to figure out here still, but
this is sufficient for what disp will need.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 years agodrm/nvc0/dmaobj: implement initial bind() method
Ben Skeggs [Mon, 8 Oct 2012 04:34:35 +0000 (14:34 +1000)]
drm/nvc0/dmaobj: implement initial bind() method

Currently unused.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>