rpms/kernel/devel drm-nouveau.patch, 1.15, 1.16 kernel.spec, 1.1377, 1.1378

Ben Skeggs bskeggs at fedoraproject.org
Wed Mar 4 05:41:38 UTC 2009


Author: bskeggs

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv31308

Modified Files:
	drm-nouveau.patch kernel.spec 
Log Message:
* Wed Mar 04 2009 Ben Skeggs <bskeggs at redhat.com>
- drm-nouveau.patch: lvds, dpms and gamma_set fixes



drm-nouveau.patch:

Index: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- drm-nouveau.patch	4 Mar 2009 00:42:11 -0000	1.15
+++ drm-nouveau.patch	4 Mar 2009 05:41:35 -0000	1.16
@@ -153,10 +153,10 @@
  		drm_put_minor(&dev->control);
 diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile
 new file mode 100644
-index 0000000..d2cbeb3
+index 0000000..12af41b
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/Makefile
-@@ -0,0 +1,25 @@
+@@ -0,0 +1,24 @@
 +#
 +# Makefile for the drm device driver.  This driver provides support for the
 +# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
@@ -176,8 +176,7 @@
 +             nv40_graph.o nv50_graph.o \
 +             nv04_instmem.o nv50_instmem.o \
 +             nv50_crtc.o nv50_dac.o nv50_sor.o nv50_connector.o \
-+             nv50_lut.o nv50_cursor.o nv50_i2c.o nv50_display.o \
-+             nv50_fbcon.o
++             nv50_cursor.o nv50_i2c.o nv50_display.o nv50_fbcon.o
 +
 +nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o
 +
@@ -1841,10 +1840,10 @@
 +#endif /* __NOUVEAU_CONNECTOR_H__ */
 diff --git a/drivers/gpu/drm/nouveau/nouveau_crtc.h b/drivers/gpu/drm/nouveau/nouveau_crtc.h
 new file mode 100644
-index 0000000..e0e6032
+index 0000000..0ba9475
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_crtc.h
-@@ -0,0 +1,53 @@
+@@ -0,0 +1,59 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -1885,7 +1884,13 @@
 +	bool use_dithering;
 +
 +	struct nv50_cursor *cursor;
-+	struct nv50_lut *lut;
++	struct {
++		struct mem_block *mem;
++		uint16_t r[256];
++		uint16_t g[256];
++		uint16_t b[256];
++		int depth;
++	} lut;
 +
 +	int (*set_dither) (struct nouveau_crtc *crtc);
 +	int (*set_scale) (struct nouveau_crtc *crtc, int mode, bool update);
@@ -17040,10 +17045,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_connector.c b/drivers/gpu/drm/nouveau/nv50_connector.c
 new file mode 100644
-index 0000000..6e7d5fe
+index 0000000..a16445a
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_connector.c
-@@ -0,0 +1,593 @@
+@@ -0,0 +1,592 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -17334,12 +17339,11 @@
 +	int rval;
 +
 +	/* DPMS */
-+	if (property == dev->mode_config.dpms_property && drm_connector->encoder) {
-+		struct drm_encoder_helper_funcs *helper_funcs =
-+			drm_connector->encoder->helper_private;
++	if (property == dev->mode_config.dpms_property) {
++		if (value > 3)
++			return -EINVAL;
 +
-+		helper_funcs->dpms(drm_connector->encoder, (int)value);
-+		return 0;
++		drm_helper_set_connector_dpms(drm_connector, value);
 +	}
 +
 +	/* Scaling mode */
@@ -17639,10 +17643,10 @@
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv50_crtc.c b/drivers/gpu/drm/nouveau/nv50_crtc.c
 new file mode 100644
-index 0000000..b081230
+index 0000000..5e6be22
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_crtc.c
-@@ -0,0 +1,723 @@
+@@ -0,0 +1,776 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -17680,7 +17684,55 @@
 +#include "nouveau_fbcon.h"
 +#include "nouveau_connector.h"
 +#include "nv50_cursor.h"
-+#include "nv50_lut.h"
++
++#define NV50_LUT_INDEX(val, w) ((val << (8 - w)) | (val >> ((w << 1) - 8)))
++static int
++nv50_crtc_lut_load(struct nouveau_crtc *crtc)
++{
++	uint32_t index = 0, i;
++	void __iomem *lut = crtc->lut.mem->kmap.virtual;
++
++	DRM_DEBUG("\n");
++
++	/* 16 bits, red, green, blue, unused, total of 64 bits per index */
++	/* 10 bits lut, with 14 bits values. */
++	switch (crtc->lut.depth) {
++	case 15:
++		/* R5G5B5 */
++		for (i = 0; i < 32; i++) {
++			index = NV50_LUT_INDEX(i, 5);
++			writew(crtc->lut.r[i] >> 2, lut + 8*index + 0);
++			writew(crtc->lut.g[i] >> 2, lut + 8*index + 2);
++			writew(crtc->lut.b[i] >> 2, lut + 8*index + 4);
++		}
++		break;
++	case 16:
++		/* R5G6B5 */
++		for (i = 0; i < 32; i++) {
++			index = NV50_LUT_INDEX(i, 5);
++			writew(crtc->lut.r[i] >> 2, lut + 8*index + 0);
++			writew(crtc->lut.b[i] >> 2, lut + 8*index + 4);
++		}
++
++		/* Green has an extra bit. */
++		for (i = 0; i < 64; i++) {
++			index = NV50_LUT_INDEX(i, 6);
++			writew(crtc->lut.g[i] >> 2, lut + 8*index + 2);
++		}
++		break;
++	default:
++		DRM_INFO("load 24bpp\n");
++		/* R8G8B8 */
++		for (i = 0; i < 256; i++) {
++			writew(crtc->lut.r[i] >> 2, lut + 8*i + 0);
++			writew(crtc->lut.g[i] >> 2, lut + 8*i + 2);
++			writew(crtc->lut.b[i] >> 2, lut + 8*i + 4);
++		}
++		break;
++	}
++
++	return 0;
++}
 +
 +static int
 +nv50_crtc_blank(struct nouveau_crtc *crtc, bool blanked)
@@ -17724,6 +17776,7 @@
 +			 NV50_CRTC0_BLANK_CTRL_UNBLANK);
 +	}
 +
++	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +	return 0;
 +}
 +
@@ -18005,9 +18058,10 @@
 +
 +	drm_crtc_cleanup(&crtc->base);
 +
-+	nv50_lut_destroy(crtc);
 +	nv50_cursor_destroy(crtc);
 +
++	if (crtc->lut.mem)
++		nouveau_mem_free(drm_crtc->dev, crtc->lut.mem);
 +	kfree(crtc->mode);
 +	kfree(crtc);
 +}
@@ -18057,15 +18111,33 @@
 +	return crtc->cursor->set_pos(crtc, x, y);
 +}
 +
-+void nv50_crtc_gamma_set(struct drm_crtc *drm_crtc, u16 *r, u16 *g, u16 *b,
-+			 uint32_t size)
++void
++nv50_crtc_gamma_set(struct drm_crtc *drm_crtc, u16 *r, u16 *g, u16 *b,
++		    uint32_t size)
 +{
 +	struct nouveau_crtc *crtc = to_nouveau_crtc(drm_crtc);
++	int i;
 +
 +	if (size != 256)
 +		return;
 +
-+	crtc->lut->set(crtc, (uint16_t *)r, (uint16_t *)g, (uint16_t *)b);
++	for (i = 0; i < 256; i++) {
++		crtc->lut.r[i] = r[i];
++		crtc->lut.g[i] = g[i];
++		crtc->lut.b[i] = b[i];
++	}
++
++	/* We need to know the depth before we upload, but it's possible to
++	 * get called before a framebuffer is bound.  If this is the case,
++	 * mark the lut values as dirty by setting depth==0, and it'll be
++	 * uploaded on the first mode_set_base()
++	 */
++	if (!crtc->base.fb) {
++		crtc->lut.depth = 0;
++		return;
++	}
++
++	nv50_crtc_lut_load(crtc);
 +}
 +
 +static const struct drm_crtc_funcs nv50_crtc_funcs = {
@@ -18191,54 +18263,6 @@
 +	struct drm_crtc_helper_funcs *crtc_helper = drm_crtc->helper_private;
 +	struct nouveau_connector *connector = NULL;
 +
-+	{
-+		int r_size = 0, g_size = 0, b_size = 0;
-+		uint16_t *r_val, *g_val, *b_val;
-+		int i;
-+
-+		/* set framebuffer */
-+		switch (drm_crtc->fb->depth) {
-+		case 15:
-+			r_size = 32;
-+			g_size = 32;
-+			b_size = 32;
-+			break;
-+		case 16:
-+			r_size = 32;
-+			g_size = 64;
-+			b_size = 32;
-+			break;
-+		case 24:
-+		default:
-+			r_size = 256;
-+			g_size = 256;
-+			b_size = 256;
-+			break;
-+		}
-+
-+		r_val = kmalloc(r_size * sizeof(uint16_t), GFP_KERNEL);
-+		g_val = kmalloc(g_size * sizeof(uint16_t), GFP_KERNEL);
-+		b_val = kmalloc(b_size * sizeof(uint16_t), GFP_KERNEL);
-+
-+		/* Set the color indices. */
-+		for (i = 0; i < r_size; i++) {
-+			r_val[i] = i << 8;
-+		}
-+		for (i = 0; i < g_size; i++) {
-+			g_val[i] = i << 8;
-+		}
-+		for (i = 0; i < b_size; i++) {
-+			b_val[i] = i << 8;
-+		}
-+
-+		crtc->lut->set(crtc, r_val, g_val, b_val);
-+
-+		/* free before returning */
-+		kfree(r_val);
-+		kfree(g_val);
-+		kfree(b_val);
-+	}
-+
 +	/* Find the connector attached to this CRTC */
 +	list_for_each_entry(drm_encoder, &dev->mode_config.encoder_list, head) {
 +		struct drm_connector *drm_connector;
@@ -18279,7 +18303,6 @@
 +	struct nouveau_framebuffer *fb = to_nouveau_framebuffer(drm_fb);
 +	struct nouveau_gem_object *ngem = nouveau_gem_object(fb->gem);
 +	uint32_t v_vram = ngem->bo->offset - dev_priv->vm_vram_base;
-+	uint32_t v_lut = crtc->lut->bo->offset - dev_priv->vm_vram_base;
 +	uint32_t offset = crtc->index * 0x400;
 +
 +	OUT_MODE(NV50_CRTC0_FB_OFFSET + offset, v_vram >> 8);
@@ -18310,9 +18333,14 @@
 +		 NV50_CRTC_COLOR_CTRL_MODE_COLOR);
 +	OUT_MODE(NV50_CRTC0_FB_POS + offset, (y << 16) | x);
 +
++	if (crtc->lut.depth != fb->base.depth) {
++		crtc->lut.depth = fb->base.depth;
++		nv50_crtc_lut_load(crtc);
++	}
++
 +	OUT_MODE(NV50_CRTC0_CLUT_MODE + offset, fb->base.depth == 8 ?
 +		 NV50_CRTC0_CLUT_MODE_OFF : NV50_CRTC0_CLUT_MODE_ON);
-+	OUT_MODE(NV50_CRTC0_CLUT_OFFSET + offset, v_lut >> 8);
++	OUT_MODE(NV50_CRTC0_CLUT_OFFSET + offset, crtc->lut.mem->start >> 8);
 +
 +	OUT_MODE(NV50_UPDATE_DISPLAY, 0);
 +	return 0;
@@ -18331,6 +18359,7 @@
 +int nv50_crtc_create(struct drm_device *dev, int index)
 +{
 +	struct nouveau_crtc *crtc = NULL;
++	int ret, i;
 +
 +	DRM_DEBUG("\n");
 +
@@ -18346,6 +18375,35 @@
 +		return -ENOMEM;
 +	}
 +
++	/* Default CLUT parameters, will be activated on the hw upon
++	 * first mode set.
++	 */
++	for (i = 0; i < 256; i++) {
++		crtc->lut.r[i] = i << 8;
++		crtc->lut.g[i] = i << 8;
++		crtc->lut.b[i] = i << 8;
++	}
++	crtc->lut.depth = 0;
++
++	crtc->lut.mem = nouveau_mem_alloc(dev, 0x100, 4096, NOUVEAU_MEM_FB |
++					  NOUVEAU_MEM_NOVM | NOUVEAU_MEM_MAPPED,
++					  (struct drm_file *)-2);
++	if (crtc->lut.mem) {
++		ret = drm_bo_kmap(crtc->lut.mem->bo, 0,
++				  crtc->lut.mem->bo->mem.num_pages,
++				  &crtc->lut.mem->kmap);
++		if (ret) {
++			nouveau_mem_free(dev, crtc->lut.mem);
++			crtc->lut.mem = NULL;
++		}
++	}
++
++	if (!crtc->lut.mem) {
++		kfree(crtc->mode);
++		kfree(crtc);
++		return -ENOMEM;
++	}
++
 +	crtc->index = index;
 +
 +	/* set function pointers */
@@ -18362,7 +18420,6 @@
 +	drm_crtc_helper_add(&crtc->base, &nv50_crtc_helper_funcs);
 +	drm_mode_crtc_set_gamma_size(&crtc->base, 256);
 +
-+	nv50_lut_create(crtc);
 +	nv50_cursor_create(crtc);
 +	return 0;
 +}
@@ -18912,10 +18969,10 @@
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
 new file mode 100644
-index 0000000..0fbcf67
+index 0000000..5bd41ef
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_display.c
-@@ -0,0 +1,439 @@
+@@ -0,0 +1,441 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -19111,6 +19168,7 @@
 +		}
 +	}
 +
++#if 0
 +	nv_wr32(NV50_PDISPLAY_UNK200_CTRL, 0);
 +	nv_wr32(NV50_PDISPLAY_CTRL_STATE, 0);
 +	if (!nv_wait(NV50_PDISPLAY_UNK200_CTRL, 0x1e0000, 0)) {
@@ -19118,6 +19176,7 @@
 +		DRM_ERROR("0x610200 = 0x%08x\n",
 +			  nv_rd32(NV50_PDISPLAY_UNK200_CTRL));
 +	}
++#endif
 +
 +	for (i = 0; i < 2; i++) {
 +		if (!nv_wait(NV50_PDISPLAY_SOR_REGS_DPMS_STATE(i),
@@ -42309,241 +42368,6 @@
 +	}
 +}
 +
-diff --git a/drivers/gpu/drm/nouveau/nv50_lut.c b/drivers/gpu/drm/nouveau/nv50_lut.c
-new file mode 100644
-index 0000000..08881cc
---- /dev/null
-+++ b/drivers/gpu/drm/nouveau/nv50_lut.c
-@@ -0,0 +1,177 @@
-+/*
-+ * Copyright (C) 2008 Maarten Maathuis.
-+ * All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial
-+ * portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
-+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#include "nv50_lut.h"
-+#include "nouveau_crtc.h"
-+#include "nv50_display.h"
-+
-+static int nv50_lut_alloc(struct nouveau_crtc *crtc)
-+{
-+	struct drm_device *dev = crtc->base.dev;
-+	int ret;
-+
-+	DRM_DEBUG("\n");
-+
-+	ret = drm_buffer_object_create(dev, 4096, drm_bo_type_kernel,
-+				       DRM_BO_FLAG_MEM_VRAM |
-+				       DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE |
-+				       DRM_BO_FLAG_NO_EVICT,
-+				       DRM_BO_HINT_DONT_FENCE, 0, 0,
-+				       &crtc->lut->bo);
-+	if (ret)
-+		return ret;
-+
-+	ret = drm_bo_kmap(crtc->lut->bo, 0, crtc->lut->bo->mem.num_pages,
-+			  &crtc->lut->kmap);
-+	if (ret) {
-+		drm_bo_usage_deref_unlocked(&crtc->lut->bo);
-+		return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+static int nv50_lut_free(struct nouveau_crtc *crtc)
-+{
-+	DRM_DEBUG("\n");
-+
-+	if (crtc->lut->bo) {
-+		drm_bo_kunmap(&crtc->lut->kmap);
-+		drm_bo_usage_deref_unlocked(&crtc->lut->bo);
-+	}
-+
-+	return 0;
-+}
-+
-+#define NV50_LUT_INDEX(val, w) ((val << (8 - w)) | (val >> ((w << 1) - 8)))
-+static int nv50_lut_set(struct nouveau_crtc *crtc,
-+			uint16_t *red, uint16_t *green, uint16_t *blue)
-+{
-+	struct drm_framebuffer *drm_fb = crtc->base.fb;
-+	uint32_t index = 0, i;
-+	void __iomem *lut;
-+
-+	DRM_DEBUG("\n");
-+
-+	if (!crtc->lut || !crtc->lut->bo) {
-+		DRM_ERROR("Something wrong with the LUT\n");
-+		return -EINVAL;
-+	}
-+	lut = crtc->lut->kmap.virtual;
-+
-+	/* 16 bits, red, green, blue, unused, total of 64 bits per index */
-+	/* 10 bits lut, with 14 bits values. */
-+	switch (drm_fb->depth) {
-+	case 15:
-+		/* R5G5B5 */
-+		for (i = 0; i < 32; i++) {
-+			index = NV50_LUT_INDEX(i, 5);
-+			writew(red[i] >> 2, lut + 8*index + 0);
-+			writew(green[i] >> 2, lut + 8*index + 2);
-+			writew(blue[i] >> 2, lut + 8*index + 4);
-+		}
-+		break;
-+	case 16:
-+		/* R5G6B5 */
-+		for (i = 0; i < 32; i++) {
-+			index = NV50_LUT_INDEX(i, 5);
-+			writew(red[i] >> 2, lut + 8*index + 0);
-+			writew(blue[i] >> 2, lut + 8*index + 4);
-+		}
-+
-+		/* Green has an extra bit. */
-+		for (i = 0; i < 64; i++) {
-+			index = NV50_LUT_INDEX(i, 6);
-+			writew(green[i] >> 2, lut + 8*index + 2);
-+		}
-+		break;
-+	default:
-+		/* R8G8B8 */
-+		for (i = 0; i < 256; i++) {
-+			writew(red[i] >> 2, lut + 8*i + 0);
-+			writew(green[i] >> 2, lut + 8*i + 2);
-+			writew(blue[i] >> 2, lut + 8*i + 4);
-+		}
-+		break;
-+	}
-+
-+	crtc->lut->depth = drm_fb->depth;
-+	return 0;
-+}
-+
-+int nv50_lut_create(struct nouveau_crtc *crtc)
-+{
-+	int rval = 0;
-+
-+	DRM_DEBUG("\n");
-+
-+	if (!crtc)
-+		return -EINVAL;
-+
-+	crtc->lut = kzalloc(sizeof(struct nv50_lut), GFP_KERNEL);
-+
-+	if (!crtc->lut)
-+		return -ENOMEM;
-+
-+	rval = nv50_lut_alloc(crtc);
-+	if (rval != 0) {
-+		goto out;
-+	}
-+
-+	/* lut will be inited when fb is bound */
-+	crtc->lut->depth = 0;
-+
-+	/* function pointers */
-+	crtc->lut->set = nv50_lut_set;
-+
-+	return 0;
-+
-+out:
-+	if (crtc->lut)
-+		kfree(crtc->lut);
-+
-+	return rval;
-+}
-+
-+int nv50_lut_destroy(struct nouveau_crtc *crtc)
-+{
-+	int rval = 0;
-+
-+	DRM_DEBUG("\n");
-+
-+	if (!crtc)
-+		return -EINVAL;
-+
-+	rval = nv50_lut_free(crtc);
-+
-+	kfree(crtc->lut);
-+	crtc->lut = NULL;
-+
-+	if (rval != 0)
-+		return rval;
-+
-+	return 0;
-+}
-diff --git a/drivers/gpu/drm/nouveau/nv50_lut.h b/drivers/gpu/drm/nouveau/nv50_lut.h
-new file mode 100644
-index 0000000..690e39f
---- /dev/null
-+++ b/drivers/gpu/drm/nouveau/nv50_lut.h
-@@ -0,0 +1,46 @@
-+/*
-+ * Copyright (C) 2008 Maarten Maathuis.
-+ * All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining
-+ * a copy of this software and associated documentation files (the
-+ * "Software"), to deal in the Software without restriction, including
-+ * without limitation the rights to use, copy, modify, merge, publish,
-+ * distribute, sublicense, and/or sell copies of the Software, and to
-+ * permit persons to whom the Software is furnished to do so, subject to
-+ * the following conditions:
-+ *
-+ * The above copyright notice and this permission notice (including the
-+ * next paragraph) shall be included in all copies or substantial
-+ * portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-+ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
-+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#ifndef __NV50_LUT_H__
-+#define __NV50_LUT_H__
-+
-+#include "nv50_display.h"
-+
-+struct nouveau_crtc;
-+
-+struct nv50_lut {
-+	struct drm_buffer_object *bo;
-+	struct drm_bo_kmap_obj kmap;
-+
-+	int depth; /* check against fb to see if it needs to be reuploaded */
-+
-+	int (*set) (struct nouveau_crtc *crtc, uint16_t *red, uint16_t *green, uint16_t *blue);
-+};
-+
-+int nv50_lut_create(struct nouveau_crtc *crtc);
-+int nv50_lut_destroy(struct nouveau_crtc *crtc);
-+
-+#endif /* __NV50_LUT_H__ */
 diff --git a/drivers/gpu/drm/nouveau/nv50_mc.c b/drivers/gpu/drm/nouveau/nv50_mc.c
 new file mode 100644
 index 0000000..0843473


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1377
retrieving revision 1.1378
diff -u -r1.1377 -r1.1378
--- kernel.spec	4 Mar 2009 03:50:51 -0000	1.1377
+++ kernel.spec	4 Mar 2009 05:41:36 -0000	1.1378
@@ -1792,6 +1792,9 @@
 # and build.
 
 %changelog
+* Wed Mar 04 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: lvds, dpms and gamma_set fixes
+
 * Wed Mar 04 2009 Dave Jones <davej at redhat.com> 2.6.29-0.197.rc7
 - 2.6.29-rc7
 




More information about the fedora-extras-commits mailing list