7 years agoMerge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux...
Dave Airlie [Wed, 3 Oct 2012 03:26:15 +0000]
Merge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6 into drm-next

This is a major rework of the nouveau driver core, to reflect more closely
how the hw is used and to make it easier to implement newer features now
that the GPUs are more clearly understood than when nouveau started.

It also contains a few other bits:
thermal patches
nv41/44 pcie gart fixes
i2c unregistering fixes.

* 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6: (191 commits)
  drm/nv98/crypt: fix fuc build with latest envyas
  drm/nouveau/devinit: fixup various issues with subdev ctor/init ordering
  drm/nv41/vm: fix and enable use of "real" pciegart
  drm/nv44/vm: fix and enable use of "real" pciegart
  drm/nv04/dmaobj: fixup vm target handling in preparation for nv4x pcie
  drm/nouveau: store supported dma mask in vmmgr
  drm/nvc0/ibus: initial implementation of subdev
  drm/nouveau/therm: add support for fan-control modes
  drm/nouveau/hwmon: rename pwm0* to pmw1* to follow hwmon's rules
  drm/nouveau/therm: calculate the pwm divisor on nv50+
  drm/nouveau/fan: rewrite the fan tachometer driver to get more precision, faster
  drm/nouveau/therm: move thermal-related functions to the therm subdev
  drm/nouveau/bios: parse the pwm divisor from the perf table
  drm/nouveau/therm: use the EXTDEV table to detect i2c monitoring devices
  drm/nouveau/therm: rework thermal table parsing
  drm/nouveau/gpio: expose the PWM/TOGGLE parameter found in the gpio vbios table
  drm/nouveau: fix pm initialization order
  drm/nouveau/bios: check that fixed tvdac gpio data is valid before using it
  drm/nouveau: log channel debug/error messages from client object rather than drm client
  drm/nouveau: have drm debugging macros build on top of core macros
  ...

Conflicts:
drivers/gpu/drm/nouveau/nouveau_dp.c

7 years agodrm/nv98/crypt: fix fuc build with latest envyas
Ben Skeggs [Wed, 3 Oct 2012 00:52:58 +0000]
drm/nv98/crypt: fix fuc build with latest envyas

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

7 years agodrm/nouveau/devinit: fixup various issues with subdev ctor/init ordering
Ben Skeggs [Tue, 2 Oct 2012 00:30:34 +0000]
drm/nouveau/devinit: fixup various issues with subdev ctor/init ordering

Details of the problem, and solution, are in comments in the commit
proper.

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

7 years agodrm/nv41/vm: fix and enable use of "real" pciegart
Ben Skeggs [Wed, 26 Sep 2012 22:56:24 +0000]
drm/nv41/vm: fix and enable use of "real" pciegart

Hopefully fixed the tlb flush timeout issue.  Was able to observe this
condition occur occasionally, and it appears the binary driver doesn't
wait on the old condition either..

Should give 39-bit DMA addressing on the relevant chipsets.

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

7 years agodrm/nv44/vm: fix and enable use of "real" pciegart
Ben Skeggs [Wed, 26 Sep 2012 22:55:53 +0000]
drm/nv44/vm: fix and enable use of "real" pciegart

Something seems to be missing in regards to flushing specific ranges of
the TLB.  For the moment, flushing the entire thing seems to make it
work alright.

Should give 39-bit DMA addressing on the relevant chipsets.

v2: allocate contig 16KiB for dummy pages, reported by mwk on irc

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

7 years agodrm/nv04/dmaobj: fixup vm target handling in preparation for nv4x pcie
Ben Skeggs [Wed, 26 Sep 2012 05:01:39 +0000]
drm/nv04/dmaobj: fixup vm target handling in preparation for nv4x pcie

We don't need to pull the page address out of the page tables on nv4x
chips that have a real GART.

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

7 years agodrm/nouveau: store supported dma mask in vmmgr
Ben Skeggs [Wed, 26 Sep 2012 04:37:51 +0000]
drm/nouveau: store supported dma mask in vmmgr

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

7 years agodrm/nvc0/ibus: initial implementation of subdev
Ben Skeggs [Wed, 26 Sep 2012 03:05:01 +0000]
drm/nvc0/ibus: initial implementation of subdev

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

7 years agodrm/nouveau/therm: add support for fan-control modes
Martin Peres [Tue, 4 Sep 2012 11:52:00 +0000]
drm/nouveau/therm: add support for fan-control modes

For now, only 2 control modes are available:
- NONE: The fan is never touched (default)
- MANUAL: The fan is set to the user-defined fan speed (pwm1)

This patch introduces a distinction between ptherm internal fan management
and external fan management. The latter is bound to respect the fan mode
while the first can still select the speed it wants unless the NONE mode
is selected. This is important for automatic fan management.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/hwmon: rename pwm0* to pmw1* to follow hwmon's rules
Martin Peres [Tue, 4 Sep 2012 11:39:40 +0000]
drm/nouveau/hwmon: rename pwm0* to pmw1* to follow hwmon's rules

This was reported by tizbac on IRC.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/therm: calculate the pwm divisor on nv50+
Martin Peres [Sun, 2 Sep 2012 02:01:43 +0000]
drm/nouveau/therm: calculate the pwm divisor on nv50+

v2: Martin Peres <martin.peres@labri.fr>
- fixed unintentional use of floating point

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/fan: rewrite the fan tachometer driver to get more precision, faster
Martin Peres [Sun, 2 Sep 2012 01:20:45 +0000]
drm/nouveau/fan: rewrite the fan tachometer driver to get more precision, faster

The previous driver waited for 250ms to accumulate data. This version times a
complete fan rotation and extrapolates to RPM.

The fan rotational speed should now be read in less than 250ms (worst case)
and usually in less 50ms.

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/therm: move thermal-related functions to the therm subdev
Martin Peres [Sun, 2 Sep 2012 00:55:58 +0000]
drm/nouveau/therm: move thermal-related functions to the therm subdev

It looks scary because of the size, but I tried to keep the differences minimal.
Further patches will fix the actual "driver" code and add new features.

v2: change filenames, split to submodules

v3: add a missing include

v4: Ben Skeggs <bskeggs@redhat.com>
- fixed set_defaults() to allow min_duty < 30 (thermal table will
  override this if it's actually necessary)
- fixed set_defaults() to not provide pwm_freq so nv4x (which only has
  pwm_div) can actually work.  the boards using pwm_freq will have a
  thermal table entry to provide us the value.
- removed unused files

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/bios: parse the pwm divisor from the perf table
Martin Peres [Thu, 30 Aug 2012 00:31:59 +0000]
drm/nouveau/bios: parse the pwm divisor from the perf table

v2: perf_table now is more in line with the other functions

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/therm: use the EXTDEV table to detect i2c monitoring devices
Martin Peres [Sat, 18 Aug 2012 14:33:53 +0000]
drm/nouveau/therm: use the EXTDEV table to detect i2c monitoring devices

This commit also adds a static list of all known devices and their possible
i2c addresses.

v2: use the common table parsing technique as suggested by darktama

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/therm: rework thermal table parsing
Martin Peres [Thu, 16 Aug 2012 09:00:55 +0000]
drm/nouveau/therm: rework thermal table parsing

As an accident, it should also fix temperature reading on nv4x.

v2: introduce nvbios_therm_entry as advised by darktama

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/gpio: expose the PWM/TOGGLE parameter found in the gpio vbios table
Martin Peres [Sat, 12 May 2012 13:28:51 +0000]
drm/nouveau/gpio: expose the PWM/TOGGLE parameter found in the gpio vbios table

Signed-off-by: Martin Peres <martin.peres@labri.fr>
Reviewed-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau: fix pm initialization order
Dmitry Eremin-Solenikov [Tue, 25 Sep 2012 06:31:40 +0000]
drm/nouveau: fix pm initialization order

If nouveau_pm_perflvl_get() fails, pm->profiles list will be left
uninitialized, which causes oops during nouveau_pm_fini().

Move INIT_LIST_HEAD before call to nouveau_pm_perflvl_get().

Signed-off-by: Dmitry Eremin-Solenikov <dmitry_eremin@mentor.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/bios: check that fixed tvdac gpio data is valid before using it
Ben Skeggs [Wed, 12 Sep 2012 05:55:01 +0000]
drm/nouveau/bios: check that fixed tvdac gpio data is valid before using it

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

7 years agodrm/nouveau: log channel debug/error messages from client object rather than drm...
Ben Skeggs [Wed, 12 Sep 2012 03:40:47 +0000]
drm/nouveau: log channel debug/error messages from client object rather than drm client

This will make it more obvious which application caused particular messages.

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

7 years agodrm/nouveau: have drm debugging macros build on top of core macros
Ben Skeggs [Wed, 12 Sep 2012 03:38:13 +0000]
drm/nouveau: have drm debugging macros build on top of core macros

May kill the DRM version completely at some point, undecided..

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

7 years agodrm/nouveau/core: have client-id be a string, rather than an integer
Ben Skeggs [Wed, 12 Sep 2012 03:09:23 +0000]
drm/nouveau/core: have client-id be a string, rather than an integer

Can be somewhat more informative that way...

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

7 years agodrm/nvc0/fifo: re-bash PBUS regs after vm-fault to BARs/PEEPHOLE
Ben Skeggs [Fri, 7 Sep 2012 00:26:38 +0000]
drm/nvc0/fifo: re-bash PBUS regs after vm-fault to BARs/PEEPHOLE

Seems to be required to "re-arm" the engines after a vm fault.

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

7 years agodrm/nvc0/gr: implement initial trap handler
Ben Skeggs [Thu, 6 Sep 2012 05:03:47 +0000]
drm/nvc0/gr: implement initial trap handler

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

7 years agodrm/nvc0/gr: rebuild fuc with latest envyas
Ben Skeggs [Thu, 6 Sep 2012 03:09:22 +0000]
drm/nvc0/gr: rebuild fuc with latest envyas

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

7 years agodrm/nvc0/ltcg: read LTS count at startup
Ben Skeggs [Wed, 5 Sep 2012 02:19:26 +0000]
drm/nvc0/ltcg: read LTS count at startup

Not really sure how to confirm this 100%, but, the numbers match on all the
traces I have for NVCx (2 LTS), NVD9 (1LTS) and NVEx (4LTS).

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

7 years agodrm/nve0/gr: enable use of our fuc by default
Ben Skeggs [Thu, 23 Aug 2012 05:52:28 +0000]
drm/nve0/gr: enable use of our fuc by default

Graphics acceleration is still disabled by default due to lingering issues
that need to be solved.

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

7 years agodrm/nve0/gr: remove 0x404160 bashing from hub fuc
Ben Skeggs [Thu, 23 Aug 2012 05:32:38 +0000]
drm/nve0/gr: remove 0x404160 bashing from hub fuc

Triggers PIBUS interrupts due to register not existing anymore, and as
a result HUB_SET_CHAN times out.

After this commit, our fuc loads and can accelerate at least fbcon, X,
glxgears and OA on NVE4.  NVE7 not tested as of yet.

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

7 years agodrm/nve0/gr: initial fuc implementation, based on fermi's code
Ben Skeggs [Thu, 23 Aug 2012 00:47:40 +0000]
drm/nve0/gr: initial fuc implementation, based on fermi's code

Currently identical except the available chipset register lists.  This will
*not* currently work and is disabled by default because of this.

May get merged again later, remains to be seen what further changes will be
required.

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

7 years agodrm/nve0/ibus: handle PIBUS interrupts to prevent storm
Ben Skeggs [Thu, 23 Aug 2012 03:55:42 +0000]
drm/nve0/ibus: handle PIBUS interrupts to prevent storm

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

7 years agodrm/nouveau/sw: trap and clear PMC_INTR_0_SOFTWARE
Ben Skeggs [Thu, 23 Aug 2012 05:14:21 +0000]
drm/nouveau/sw: trap and clear PMC_INTR_0_SOFTWARE

Came in useful for debugging another issue earlier, so keep it around.

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

7 years agodrm/nouveau: quiet some static-related sparse noise
Marcin Slusarz [Sun, 19 Aug 2012 21:00:00 +0000]
drm/nouveau: quiet some static-related sparse noise

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau: constify instances of nouveau_bitfield and nouveau_enum structs
Marcin Slusarz [Sun, 19 Aug 2012 20:59:59 +0000]
drm/nouveau: constify instances of nouveau_bitfield and nouveau_enum structs

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nouveau/fifo: use defines instead of hardcoded class ids
Ben Skeggs [Sun, 19 Aug 2012 06:03:00 +0000]
drm/nouveau/fifo: use defines instead of hardcoded class ids

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

7 years agodrm/nouveau/dmaobj: reject unsupported parent types instead of half-succeeding
Ben Skeggs [Sun, 19 Aug 2012 05:58:38 +0000]
drm/nouveau/dmaobj: reject unsupported parent types instead of half-succeeding

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

7 years agodrm/nouveau: add defines for internal class names
Ben Skeggs [Sun, 19 Aug 2012 05:53:15 +0000]
drm/nouveau: add defines for internal class names

Will probably flesh the documentation of the classes out a bit too at some
later point.

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

7 years agodrm/nv50/fifo: add support for dma channel class
Ben Skeggs [Tue, 14 Aug 2012 05:33:20 +0000]
drm/nv50/fifo: add support for dma channel class

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

7 years agodrm/nv84/fifo: add support for dma channel class
Ben Skeggs [Tue, 14 Aug 2012 05:30:14 +0000]
drm/nv84/fifo: add support for dma channel class

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

7 years agodrm/nouveau/fifo: version the dma channel class struct
Ben Skeggs [Tue, 14 Aug 2012 05:02:29 +0000]
drm/nouveau/fifo: version the dma channel class struct

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

7 years agodrm/nouveau/fifo: separate object classes for dma channels
Ben Skeggs [Tue, 14 Aug 2012 04:53:51 +0000]
drm/nouveau/fifo: separate object classes for dma channels

Future code will use the object class rather than chipset checks in order to
identify available channel features.

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

7 years agodrm/nouveau: restore fifo chid information in engine error messages
Ben Skeggs [Mon, 13 Aug 2012 06:26:07 +0000]
drm/nouveau: restore fifo chid information in engine error messages

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

7 years agodrm/nouveau/core: have fifo store a unique context identifier at attach time
Ben Skeggs [Fri, 10 Aug 2012 05:10:34 +0000]
drm/nouveau/core: have fifo store a unique context identifier at attach time

This value will match something that's easily available from the engine IRQ
handlers, and used to lookup the relevant context.

Since the changes in how this is done on each generation match when the
major PFIFO changes happened, fifo is responsible for calculating the
correct value to avoid duplicating the same code among many engine modules.

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

7 years agodrm/nouveau/fifo: add method to lookup fifo chid related to a given object
Ben Skeggs [Fri, 10 Aug 2012 04:02:44 +0000]
drm/nouveau/fifo: add method to lookup fifo chid related to a given object

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

7 years agodrm/nouveau/core: protect engine context list with hardirq-safe spinlock
Ben Skeggs [Fri, 10 Aug 2012 03:47:56 +0000]
drm/nouveau/core: protect engine context list with hardirq-safe spinlock

IRQ handlers will need access to engine contexts.

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

7 years agodrm/nv84/fifo: mask only the engine we're waiting on for channel unload
Ben Skeggs [Mon, 6 Aug 2012 11:56:18 +0000]
drm/nv84/fifo: mask only the engine we're waiting on for channel unload

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

7 years agodrm/nve0: use async copy engine for ttm buffer moves if available
Ben Skeggs [Mon, 6 Aug 2012 09:38:25 +0000]
drm/nve0: use async copy engine for ttm buffer moves if available

Kepler PFIFO lost the ability to address multiple engines from a single
channel, so we need a separate one for the copy engine.

v2: Marcin Slusarz <marcin.slusarz@gmail.com>
- regression fix: restore hw accelerated buffer copies

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

7 years agodrm/nve0/copy: add initial support for the async copy engines
Ben Skeggs [Mon, 6 Aug 2012 09:28:02 +0000]
drm/nve0/copy: add initial support for the async copy engines

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

7 years agodrm/nve0/fifo: support engine selection when creating fifo channels
Ben Skeggs [Mon, 6 Aug 2012 08:16:37 +0000]
drm/nve0/fifo: support engine selection when creating fifo channels

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

7 years agodrm/nouveau/device: return proper error codes if ioremap fails
Ben Skeggs [Mon, 6 Aug 2012 06:31:26 +0000]
drm/nouveau/device: return proper error codes if ioremap fails

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

7 years agodrm/nouveau/core: remove some left-over pieces from the porting process
Ben Skeggs [Mon, 6 Aug 2012 06:30:10 +0000]
drm/nouveau/core: remove some left-over pieces from the porting process

Reported-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/nvc0-/gr: remove reset-after-grctx-construction hack
Ben Skeggs [Sun, 5 Aug 2012 01:29:10 +0000]
drm/nvc0-/gr: remove reset-after-grctx-construction hack

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

7 years agodrm/nouveau: add Kconfig options for debug control
Ben Skeggs [Fri, 3 Aug 2012 04:58:10 +0000]
drm/nouveau: add Kconfig options for debug control

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

7 years agodrm/nouveau: port remainder of drm code, and rip out compat layer
Ben Skeggs [Tue, 31 Jul 2012 06:16:21 +0000]
drm/nouveau: port remainder of drm code, and rip out compat layer

v2: Ben Skeggs <bskeggs@redhat.com>
- fill in nouveau_pm.dev to prevent oops
- fix ppc issues (build + OF shadow)

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

7 years agodrm/nouveau/device: include the official chipset names
Ben Skeggs [Thu, 26 Jul 2012 22:28:20 +0000]
drm/nouveau/device: include the official chipset names

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

7 years agodrm/nouveau/backlight: remove dependence on nouveau_drv.h
Ben Skeggs [Wed, 25 Jul 2012 23:12:47 +0000]
drm/nouveau/backlight: remove dependence on nouveau_drv.h

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

7 years agodrm/nouveau: flatten nv{Read,Write}{MC,VIDEO,FB,EXTDEV}
Ben Skeggs [Wed, 25 Jul 2012 22:59:23 +0000]
drm/nouveau: flatten nv{Read,Write}{MC,VIDEO,FB,EXTDEV}

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

7 years agodrm/nouveau: move compat ioctl out of nouveau_drv.h
Ben Skeggs [Wed, 25 Jul 2012 22:54:33 +0000]
drm/nouveau: move compat ioctl out of nouveau_drv.h

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

7 years agodrm/nouveau/acpi: move definitions out of nouveau_drv.h
Ben Skeggs [Wed, 25 Jul 2012 22:51:21 +0000]
drm/nouveau/acpi: move definitions out of nouveau_drv.h

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

7 years agodrm/nouveau/mxm: split up into bios code and a subdev module
Ben Skeggs [Sun, 22 Jul 2012 06:41:26 +0000]
drm/nouveau/mxm: split up into bios code and a subdev module

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

7 years agodrm/nouveau: start culling unused code
Ben Skeggs [Sun, 22 Jul 2012 05:03:09 +0000]
drm/nouveau: start culling unused code

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

7 years agodrm/nouveau: port all engines to new engine module format
Ben Skeggs [Thu, 19 Jul 2012 22:17:34 +0000]
drm/nouveau: port all engines to new engine module format

This is a HUGE commit, but it's not nearly as bad as it looks - any problems
can be isolated to a particular chipset and engine combination.  It was
simply too difficult to port each one at a time, the compat layers are
*already* ridiculous.

Most of the changes here are simply to the glue, the process for each of the
engine modules was to start with a standard skeleton and copy+paste the old
code into the appropriate places, fixing up variable names etc as needed.

v2: Marcin Slusarz <marcin.slusarz@gmail.com>
- fix find/replace bug in license header

v3: Ben Skeggs <bskeggs@redhat.com>
- bump indirect pushbuf size to 8KiB, 4KiB barely enough for userspace and
  left no space for kernel's requirements during GEM pushbuf submission.
- fix duplicate assignments noticed by clang

v4: Marcin Slusarz <marcin.slusarz@gmail.com>
- add sparse annotations to nv04_fifo_pause/nv04_fifo_start
- use ioread32_native/iowrite32_native for fifo control registers

v5: Ben Skeggs <bskeggs@redhat.com>
- rebase on v3.6-rc4, modified to keep copy engine fix intact
- nv10/fence: unmap fence bo before destroying
- fixed fermi regression when using nvidia gr fuc
- fixed typo in supported dma_mask checking

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

7 years agodrm/nvc0-/gr: generate grctx template at init time, not first context ctor
Ben Skeggs [Sat, 4 Aug 2012 08:40:45 +0000]
drm/nvc0-/gr: generate grctx template at init time, not first context ctor

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

7 years agodrm/nvc0-/gr: share headers between fermi and kepler graphics code
Ben Skeggs [Sat, 4 Aug 2012 08:26:50 +0000]
drm/nvc0-/gr: share headers between fermi and kepler graphics code

v2: Ben Skeggs <bskeggs@redhat.com>
- de-inline nv_icmd, triggers some gcc issue causing ctxnv[ce]0.c to
  take a *very* *very* long time to build on some configs.

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

7 years agodrm/nouveau/pageflip: kick flip handling out of engsw and into fence
Ben Skeggs [Sun, 22 Jul 2012 01:55:54 +0000]
drm/nouveau/pageflip: kick flip handling out of engsw and into fence

This is all very much a policy thing, and hence will not belong in SW
after the rework.

engsw now only handles receiving the event to say "can flip now" and makes
a callback to perform the actual work.

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

7 years agodrm/nouveau: move some more code around to more appropriate places
Ben Skeggs [Thu, 19 Jul 2012 07:54:21 +0000]
drm/nouveau: move some more code around to more appropriate places

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

7 years agodrm/nvc0-nve0/graph: rename dev to priv, no code changes
Ben Skeggs [Thu, 19 Jul 2012 07:32:01 +0000]
drm/nvc0-nve0/graph: rename dev to priv, no code changes

There's a *lot* of code in here, and it's all going to use the PGRAPH priv
pointer rather than drm_device after the engine rework.  This is handling
all the rename-only parts of the change.

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

7 years agodrm/nouveau/fence: un-port from nouveau_exec_engine interfaces
Ben Skeggs [Thu, 19 Jul 2012 00:51:42 +0000]
drm/nouveau/fence: un-port from nouveau_exec_engine interfaces

Still the same code, but not an "engine" anymore.  The fence code is more of
a policy decision rather than exposing mechanisms, so it's not appropriate
to port it to the new engine subsystem.

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

7 years agodrm/nouveau: pull nouveau_gem definitions into their own header
Ben Skeggs [Wed, 18 Jul 2012 12:15:33 +0000]
drm/nouveau: pull nouveau_gem definitions into their own header

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

7 years agodrm/nouveau: pull nouveau_bo definitions into their own header
Ben Skeggs [Wed, 18 Jul 2012 07:17:09 +0000]
drm/nouveau: pull nouveau_bo definitions into their own header

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

7 years agodrm/nv04/disp: kick all private state out to own header
Ben Skeggs [Wed, 18 Jul 2012 00:00:50 +0000]
drm/nv04/disp: kick all private state out to own header

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

7 years agodrm/nouveau/instmem: completely new implementation, as a subdev module
Ben Skeggs [Sat, 14 Jul 2012 09:09:17 +0000]
drm/nouveau/instmem: completely new implementation, as a subdev module

v2 (Ben Skeggs):
- some fixes for 64KiB PAGE_SIZE
- fix porting issues in (currently unused) nv41/nv44 pciegart code

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

7 years agodrm/nouveau: remove last use of nouveau_gpuobj_new_fake()
Ben Skeggs [Sat, 14 Jul 2012 01:03:52 +0000]
drm/nouveau: remove last use of nouveau_gpuobj_new_fake()

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

7 years agodrm/nv50/instmem: remove use of nouveau_gpuobj_new_fake()
Ben Skeggs [Sat, 14 Jul 2012 00:48:12 +0000]
drm/nv50/instmem: remove use of nouveau_gpuobj_new_fake()

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

7 years agodrm/nouveau/gpuobj: remove flags for vm-mappings
Ben Skeggs [Fri, 13 Jul 2012 07:21:22 +0000]
drm/nouveau/gpuobj: remove flags for vm-mappings

Having GPUOBJ and VM intertwined like this makes it *really* hard to
continue porting to the new driver architecture, split it out in
favour of requiring explit maps be the caller.

It's more flexible and obvious this way anyway...

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

7 years agodrm/nouveau/gpuobj: create wrapper functions for mapping gpuobj into vm/bar
Ben Skeggs [Fri, 13 Jul 2012 07:05:35 +0000]
drm/nouveau/gpuobj: create wrapper functions for mapping gpuobj into vm/bar

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

7 years agodrm/nvc0/fifo: handle bar1 control regs much like fifo/nve0
Ben Skeggs [Fri, 13 Jul 2012 06:54:45 +0000]
drm/nvc0/fifo: handle bar1 control regs much like fifo/nve0

The partial mapping thing is stupid and pointless...

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

7 years agodrm/nv04-nv40/fifo: remove use of nouveau_gpuobj_new_fake()
Ben Skeggs [Fri, 13 Jul 2012 06:49:49 +0000]
drm/nv04-nv40/fifo: remove use of nouveau_gpuobj_new_fake()

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

7 years agodrm/nv04-nv40/instmem: remove use of nouveau_gpuobj_new_fake()
Ben Skeggs [Fri, 13 Jul 2012 06:42:14 +0000]
drm/nv04-nv40/instmem: remove use of nouveau_gpuobj_new_fake()

These type of fake objects will not be supported for much longer.

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

7 years agodrm/nv04-nv40/instmem: duplicate nv04 code as nv40, remove alternate paths
Ben Skeggs [Fri, 13 Jul 2012 06:14:25 +0000]
drm/nv04-nv40/instmem: duplicate nv04 code as nv40, remove alternate paths

A ton of duplication for the moment, will go away when they become subdevs.

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

7 years agodrm/nouveau/fb: merge fb/vram and port to subdev interfaces
Ben Skeggs [Wed, 11 Jul 2012 09:05:01 +0000]
drm/nouveau/fb: merge fb/vram and port to subdev interfaces

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

7 years agodrm/nv50-/instmem: allocate vram for kernel objects from end of vram
Ben Skeggs [Wed, 11 Jul 2012 08:10:11 +0000]
drm/nv50-/instmem: allocate vram for kernel objects from end of vram

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

7 years agodrm/nouveau/core: add support for reverse mm allocations
Ben Skeggs [Wed, 11 Jul 2012 06:28:19 +0000]
drm/nouveau/core: add support for reverse mm allocations

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

7 years agodrm/nouveau/timer: port to subdev interfaces
Ben Skeggs [Wed, 11 Jul 2012 06:08:25 +0000]
drm/nouveau/timer: port to subdev interfaces

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

7 years agodrm/nouveau/mc: port to subdev interfaces
Ben Skeggs [Wed, 11 Jul 2012 05:58:56 +0000]
drm/nouveau/mc: port to subdev interfaces

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

7 years agodrm/nouveau: implement devinit subdev, and new init table parser
Ben Skeggs [Wed, 11 Jul 2012 00:44:20 +0000]
drm/nouveau: implement devinit subdev, and new init table parser

v2:
- make sure not to execute display scripts unless resuming

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

7 years agodrm/nouveau/clock: pull in the implementation from all over the place
Ben Skeggs [Tue, 10 Jul 2012 07:26:46 +0000]
drm/nouveau/clock: pull in the implementation from all over the place

Still missing the main bits we use to change performance levels, I'll get
to it after all the hard yakka has been finished.

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

7 years agodrm/nouveau/clk: implement stub clock subdev
Ben Skeggs [Tue, 10 Jul 2012 06:45:24 +0000]
drm/nouveau/clk: implement stub clock subdev

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

7 years agodrm/nouveau/i2c: port to subdev interfaces
Ben Skeggs [Tue, 10 Jul 2012 04:36:38 +0000]
drm/nouveau/i2c: port to subdev interfaces

v2/v3: Ben Skeggs <bskeggs@redhat.com>
- fix typo in default bus selection
- fix accidental loss of destructor

v4: Dmitry Eremin-Solenikov <dmitry_eremin@mentor.com>
- fix typo causing incorrect default i2c port settings when no BMP data

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

7 years agodrm/nouveau/gpio: port gpio to subdev interfaces
Ben Skeggs [Tue, 10 Jul 2012 02:20:17 +0000]
drm/nouveau/gpio: port gpio to subdev interfaces

v2: Ben Skeggs <bskeggs@redhat.com>
- rebase on top of v3.6-rc6 with gpio reset patch integrated already

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

7 years agodrm/nouveau/oldbios: remove shadowing support, use bios subdev's image
Ben Skeggs [Tue, 10 Jul 2012 01:38:08 +0000]
drm/nouveau/oldbios: remove shadowing support, use bios subdev's image

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

7 years agodrm/nouveau/bios: pull in basic vbios subdev, more to come later
Ben Skeggs [Tue, 10 Jul 2012 00:49:22 +0000]
drm/nouveau/bios: pull in basic vbios subdev, more to come later

v2: Ben Skeggs <bskeggs@redhat.com>
- use unaligned macros to access vbios image
- endianness fixes

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

7 years agodrm/nouveau: have non-core mmio accesses go through device object
Ben Skeggs [Mon, 9 Jul 2012 04:14:48 +0000]
drm/nouveau: have non-core mmio accesses go through device object

Adds an extra layer of indirection to each register access, but it's not
too bad, and will also go away as pieces are ported.

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

7 years agodrm/nouveau: implement module init functions in nouveau_drm.c
Ben Skeggs [Fri, 6 Jul 2012 02:14:00 +0000]
drm/nouveau: implement module init functions in nouveau_drm.c

These currently just call the existing ones in nouveau_drv.c, but will be
extended in upcoming commits.  This needed to be separated from the current
code as there will be some header clashes until things are ported.

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

7 years agodrm/nouveau/core: pull in most of the new core infrastructure
Ben Skeggs [Thu, 5 Jul 2012 21:36:43 +0000]
drm/nouveau/core: pull in most of the new core infrastructure

This commit provides most of the infrastructure to support a major overhaul
of Nouveau's internals coming in the following commits.  This work aims to
take all the things we've learned over the last several years, and turn that
into a cleaner architecture that's more maintainable going forward.

RAMHT and MM bits of the new core have been left out for the moment, and
will be pulled in as I go through the process of porting the code to
become either subdev or engine modules.

There are several main goals I wanted to achieve through this work:

-- Reduce complexity

The goal here was to make each component of the driver as independent as
possible, which will ease maintainability and readability, and provide a
good base for resetting locked up GPU units in the future.

-- Better tracking of GPU units that are required at any given time

This is for future PM work, we'll be able to tell exactly what parts of the
GPU we need powered at any given point (etc).

-- Expose all available NVIDIA GPUs to the client

In order to support things such as multi-GPU channels, we want to be able
to expose all the NVIDIA GPUs to the client over a single file descriptor
so it can send a single push buffer to multiple GPUs.

-- Untangle the core hardware support code from the DRM implementation

This happened initially as an unexpected side-effect of developing the
initial core infrastructure in userspace, but it turned into a goal of
the whole project.  Initial benefits will be the availablility of a
number of userspace tools and tests using the same code as the driver
itself, but will also be important as I look into some virtualisation
ideas.

v2: Ben Skeggs <bskeggs@redhat.com>
- fix duplicate assignments noticed by clang
- implement some forgotten yelling in error path
- ensure 64-bit engine mask is used everywhere

v3: Marcin Slusarz <marcin.slusarz@gmail.com>
- sparse fixes
- inline nv_printk into nv_assert to prevent recursive inlining issues

v4: Ben Skeggs <bskeggs@redhat.com>
- fixed minor memory leak on gpuobj destruction

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

7 years agodrm/nouveau/agp: move all agp stuff into its own source file
Ben Skeggs [Thu, 5 Jul 2012 11:36:32 +0000]
drm/nouveau/agp: move all agp stuff into its own source file

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

7 years agodrm/nouveau: restructure source tree, split core from drm implementation
Ben Skeggs [Wed, 4 Jul 2012 13:44:54 +0000]
drm/nouveau: restructure source tree, split core from drm implementation

Future work will be headed in the way of separating the policy supplied by
the nouveau drm module from the mechanisms provided by the driver core.

There will be a couple of major classes (subdev, engine) of driver modules
that have clearly defined tasks, and the further directory structure change
is to reflect this.

No code changes here whatsoever, aside from fixing up a couple of include
file pathnames.

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

7 years agodrm/nouveau/gem: use bo.offset rather than mm_node.start
Ben Skeggs [Fri, 3 Aug 2012 19:46:01 +0000]
drm/nouveau/gem: use bo.offset rather than mm_node.start

Won't necessarily be a drm_mm_node in the future, and I can't think of any
good reason to not use the offset from the bo struct.  There may have been
some reason once apon a time, but, separate commit just in case.

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

7 years agodrm/nvc0/fence: restore pre-suspend fence buffer context on resume
Ben Skeggs [Fri, 28 Sep 2012 01:50:29 +0000]
drm/nvc0/fence: restore pre-suspend fence buffer context on resume

Fixes some unfortunate races on resume.  The G84 version of the code doesn't
need this as "gpuobj"s are automagically suspended/resumed by the core code
whereas pinned buffer objects are not.

Cc: stable@vger.kernel.org
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

7 years agodrm/savage: re-add busmaster enable, regression fix
Florian Zumbiehl [Tue, 2 Oct 2012 12:20:37 +0000]
drm/savage: re-add busmaster enable, regression fix

466e69b8b03b8c1987367912782bc12988ad8794 dropped busmaster enable from the
global drm code and moved it to the individual drivers, but missed the savage
driver. So, this re-adds busmaster enable to the savage driver, fixing the
regression.

Signed-off-by: Florian Zumbiehl <florz@florz.de>
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>

7 years agodrm/ast: drop duplicate initialization
Dan Carpenter [Tue, 2 Oct 2012 08:26:46 +0000]
drm/ast: drop duplicate initialization

We set ".disable" to "ast_crtc_disable" twice.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>