Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36d9b154 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm-nouveau-next' of...

Merge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6 into drm-next

"Nothing overly exciting here aside from calim's fermi/kepler vram
compression patches.  The rest is misc fixes I gathered from the list.

Most of the stuff from me is fixing issues that have come up from the
work on kepler PM, as well as a commit moving all the old-school
modesetting out of the way (no code changes here).  There's other
patches to go on top of that, but, it'll have to wait until I can rip
out the old PM code, it's a bit tangled."

* 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6: (38 commits)
  drm/nouveau/fifo: implement channel creation event generation
  drm/nouveau/core: allow non-maskable events
  drm/nouveau/timer: allow alarms to be cancelled
  drm/nouveau/device: tweak the device/subdev relationship a little
  drm/nouveau/device: enable proper constructor/destructor
  drm/nouveau/device: have engine object initialised before creation
  drm/nouveau/device: convert to engine, rather than subdev
  drm/nv50-/disp: use self as parent for subobjects
  drm/nv50-/fifo: use parent as self for subobjects
  drm/nv20-nv30/gr: use parent as self for subobjects
  drm/nvc0-/gr: use self as parent for subobjects
  drm/nv04-nv40/instmem: use self as parent for subobjects
  drm/nv04-nv40/vm: use self as parent for subobjects
  drm/nv50-/bar: use self as parent for subobjects
  drm/nv04-nv40/instmem: remove parent deref hack
  drm/nouveau/i2c: remove parent deref hack
  drm/nouveau/core: rebase object ref/use counts after ctor/init/fini events
  drm/nv50/disp: inform core when we're not creating a new context
  drm/nouveau/therm: send some messages to debug level
  drm/nve0/gr: add handling for a bunch of PGRAPH traps
  ...
parents a90b590e 893e90c5
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -53,15 +53,6 @@ nouveau-y += core/subdev/clock/nva3.o
nouveau-y += core/subdev/clock/nvc0.o
nouveau-y += core/subdev/clock/pllnv04.o
nouveau-y += core/subdev/clock/pllnva3.o
nouveau-y += core/subdev/device/base.o
nouveau-y += core/subdev/device/nv04.o
nouveau-y += core/subdev/device/nv10.o
nouveau-y += core/subdev/device/nv20.o
nouveau-y += core/subdev/device/nv30.o
nouveau-y += core/subdev/device/nv40.o
nouveau-y += core/subdev/device/nv50.o
nouveau-y += core/subdev/device/nvc0.o
nouveau-y += core/subdev/device/nve0.o
nouveau-y += core/subdev/devinit/base.o
nouveau-y += core/subdev/devinit/nv04.o
nouveau-y += core/subdev/devinit/nv05.o
@@ -126,6 +117,7 @@ nouveau-y += core/subdev/therm/ic.o
nouveau-y += core/subdev/therm/temp.o
nouveau-y += core/subdev/therm/nv40.o
nouveau-y += core/subdev/therm/nv50.o
nouveau-y += core/subdev/therm/nv84.o
nouveau-y += core/subdev/therm/nva3.o
nouveau-y += core/subdev/therm/nvd0.o
nouveau-y += core/subdev/timer/base.o
@@ -150,6 +142,15 @@ nouveau-y += core/engine/copy/nvc0.o
nouveau-y += core/engine/copy/nve0.o
nouveau-y += core/engine/crypt/nv84.o
nouveau-y += core/engine/crypt/nv98.o
nouveau-y += core/engine/device/base.o
nouveau-y += core/engine/device/nv04.o
nouveau-y += core/engine/device/nv10.o
nouveau-y += core/engine/device/nv20.o
nouveau-y += core/engine/device/nv30.o
nouveau-y += core/engine/device/nv40.o
nouveau-y += core/engine/device/nv50.o
nouveau-y += core/engine/device/nvc0.o
nouveau-y += core/engine/device/nve0.o
nouveau-y += core/engine/disp/base.o
nouveau-y += core/engine/disp/nv04.o
nouveau-y += core/engine/disp/nv50.o
@@ -212,7 +213,7 @@ nouveau-y += core/engine/vp/nve0.o

# drm/core
nouveau-y += nouveau_drm.o nouveau_chan.o nouveau_dma.o nouveau_fence.o
nouveau-y += nouveau_irq.o nouveau_vga.o nouveau_agp.o
nouveau-y += nouveau_vga.o nouveau_agp.o
nouveau-y += nouveau_ttm.o nouveau_sgdma.o nouveau_bo.o nouveau_gem.o
nouveau-y += nouveau_prime.o nouveau_abi16.o
nouveau-y += nv04_fence.o nv10_fence.o nv17_fence.o
@@ -224,9 +225,7 @@ nouveau-y += nouveau_connector.o nouveau_dp.o
nouveau-y += nv04_fbcon.o nv50_fbcon.o nvc0_fbcon.o

# drm/kms/nv04:nv50
nouveau-y += nouveau_hw.o nouveau_calc.o
nouveau-y += nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o
nouveau-y += nv04_crtc.o nv04_display.o nv04_cursor.o
include $(src)/dispnv04/Makefile

# drm/kms/nv50-
nouveau-y += nv50_display.o
+4 −3
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@
#include <core/handle.h>
#include <core/option.h>

#include <subdev/device.h>
#include <engine/device.h>

static void
nouveau_client_dtor(struct nouveau_object *object)
@@ -58,8 +58,9 @@ nouveau_client_create_(const char *name, u64 devname, const char *cfg,
		return -ENODEV;

	ret = nouveau_namedb_create_(NULL, NULL, &nouveau_client_oclass,
				     NV_CLIENT_CLASS, nouveau_device_sclass,
				     0, length, pobject);
				     NV_CLIENT_CLASS, NULL,
				     (1ULL << NVDEV_ENGINE_DEVICE),
				     length, pobject);
	client = *pobject;
	if (ret)
		return ret;
+2 −2
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ nouveau_engine_create_(struct nouveau_object *parent,
		       const char *iname, const char *fname,
		       int length, void **pobject)
{
	struct nouveau_device *device = nv_device(parent);
	struct nouveau_engine *engine;
	int ret;

@@ -43,7 +42,8 @@ nouveau_engine_create_(struct nouveau_object *parent,
	if (ret)
		return ret;

	if (!nouveau_boolopt(device->cfgopt, iname, enable)) {
	if ( parent &&
	    !nouveau_boolopt(nv_device(parent)->cfgopt, iname, enable)) {
		if (!enable)
			nv_warn(engine, "disabled, %s=1 to enable\n", iname);
		return -ENODEV;
+8 −4
Original line number Diff line number Diff line
@@ -27,8 +27,10 @@ static void
nouveau_event_put_locked(struct nouveau_event *event, int index,
			 struct nouveau_eventh *handler)
{
	if (!--event->index[index].refs)
	if (!--event->index[index].refs) {
		if (event->disable)
			event->disable(event, index);
	}
	list_del(&handler->head);
}

@@ -53,9 +55,11 @@ nouveau_event_get(struct nouveau_event *event, int index,
	spin_lock_irqsave(&event->lock, flags);
	if (index < event->index_nr) {
		list_add(&handler->head, &event->index[index].list);
		if (!event->index[index].refs++)
		if (!event->index[index].refs++) {
			if (event->enable)
				event->enable(event, index);
		}
	}
	spin_unlock_irqrestore(&event->lock, flags);
}

+13 −6
Original line number Diff line number Diff line
@@ -136,26 +136,30 @@ nouveau_object_ctor(struct nouveau_object *parent,
		    struct nouveau_object **pobject)
{
	struct nouveau_ofuncs *ofuncs = oclass->ofuncs;
	struct nouveau_object *object = NULL;
	int ret;

	*pobject = NULL;

	ret = ofuncs->ctor(parent, engine, oclass, data, size, pobject);
	ret = ofuncs->ctor(parent, engine, oclass, data, size, &object);
	*pobject = object;
	if (ret < 0) {
		if (ret != -ENODEV) {
			nv_error(parent, "failed to create 0x%08x, %d\n",
				 oclass->handle, ret);
		}

		if (*pobject) {
			ofuncs->dtor(*pobject);
		if (object) {
			ofuncs->dtor(object);
			*pobject = NULL;
		}

		return ret;
	}

	nv_debug(*pobject, "created\n");
	if (ret == 0) {
		nv_debug(object, "created\n");
		atomic_set(&object->refcount, 1);
	}

	return 0;
}

@@ -327,6 +331,7 @@ nouveau_object_inc(struct nouveau_object *object)
	}

	ret = nv_ofuncs(object)->init(object);
	atomic_set(&object->usecount, 1);
	if (ret) {
		nv_error(object, "init failed, %d\n", ret);
		goto fail_self;
@@ -357,6 +362,7 @@ nouveau_object_decf(struct nouveau_object *object)
	nv_trace(object, "stopping...\n");

	ret = nv_ofuncs(object)->fini(object, false);
	atomic_set(&object->usecount, 0);
	if (ret)
		nv_warn(object, "failed fini, %d\n", ret);

@@ -381,6 +387,7 @@ nouveau_object_decs(struct nouveau_object *object)
	nv_trace(object, "suspending...\n");

	ret = nv_ofuncs(object)->fini(object, true);
	atomic_set(&object->usecount, 0);
	if (ret) {
		nv_error(object, "failed suspend, %d\n", ret);
		return ret;
Loading