rpms/kernel/devel drm-edid-9340d8cf.patch, NONE, 1.1.2.1 patch-2.6.31.9.bz2.sign, NONE, 1.1.2.1 .cvsignore, 1.1014.2.35, 1.1014.2.36 drm-next-b390f944.patch, 1.1.2.1, 1.1.2.2 drm-nouveau.patch, 1.8.6.25, 1.8.6.26 kernel.spec, 1.1294.2.81, 1.1294.2.82 sources, 1.976.2.36, 1.976.2.37 upstream, 1.888.2.35, 1.888.2.36 xen.pvops.patch, 1.1.2.51, 1.1.2.52 crypto-via-padlock-fix-nano-aes.patch, 1.1.2.1, NONE drm-conservative-fallback-modes.patch, 1.1.2.1, NONE drm-default-mode.patch, 1.1.2.1, NONE drm-edid-header-fixup.patch, 1.1.2.1, NONE drm-edid-retry.patch, 1.1.2.2, NONE drm-i915-fix-sync-to-vbl-when-vga-is-off.patch, 1.1.2.2, NONE highmem-Fix-debug_kmap_atomic-to-also-handle-KM_IRQ_.patch, 1.1.2.1, NONE highmem-Fix-race-in-debug_kmap_atomic-which-could-ca.patch, 1.1.2.1, NONE highmem-fix-arm-powerpc-kmap_types.patch, 1.1.2.1, NONE ipv4-fix-null-ptr-deref-in-ip_fragment.patch, 1.1.2.1, NONE patch-2.6.31.6.bz2.sign, 1.1.2.1, NONE

myoung myoung at fedoraproject.org
Wed Dec 23 21:12:59 UTC 2009


Author: myoung

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

Modified Files:
      Tag: private-myoung-dom0-branch
	.cvsignore drm-next-b390f944.patch drm-nouveau.patch 
	kernel.spec sources upstream xen.pvops.patch 
Added Files:
      Tag: private-myoung-dom0-branch
	drm-edid-9340d8cf.patch patch-2.6.31.9.bz2.sign 
Removed Files:
      Tag: private-myoung-dom0-branch
	crypto-via-padlock-fix-nano-aes.patch 
	drm-conservative-fallback-modes.patch drm-default-mode.patch 
	drm-edid-header-fixup.patch drm-edid-retry.patch 
	drm-i915-fix-sync-to-vbl-when-vga-is-off.patch 
	highmem-Fix-debug_kmap_atomic-to-also-handle-KM_IRQ_.patch 
	highmem-Fix-race-in-debug_kmap_atomic-which-could-ca.patch 
	highmem-fix-arm-powerpc-kmap_types.patch 
	ipv4-fix-null-ptr-deref-in-ip_fragment.patch 
	patch-2.6.31.6.bz2.sign 
Log Message:
Update pvops to latest patch and 2.6.31.9


drm-edid-9340d8cf.patch:
 drivers/gpu/drm/drm_edid.c  |  334 +++++++++++++++++++++++++++-----------------
 drivers/gpu/drm/drm_modes.c |   28 +++
 include/drm/drm_crtc.h      |    7 
 include/drm/drm_edid.h      |    9 +
 4 files changed, 249 insertions(+), 129 deletions(-)

--- NEW FILE drm-edid-9340d8cf.patch ---
>From 79766d79dbe27a7eb0543db95202318a6f1491d0 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax at redhat.com>
Date: Wed, 16 Dec 2009 15:12:41 -0500
Subject: [PATCH] drm/modes: Sync with Linus.

1bd049f Merge branch 'drm-core-next' into drm-linus
9340d8c drm/edid: Decode 3-byte CVT codes from EDID 1.4
2dbdc52 drm/edid: Add new detailed block types from EDID 1.4
07a5e63 drm/edid: Add DMT modes to the pool if the monitor is GTF-capable
7ac96a9 drm/modes: Add drm_mode_hsync()
9cf0097 drm/edid: Unify detailed block parsing between base and extension blocks
7064fef drm: work around EDIDs with bad htotal/vtotal values
862b89c drm/edid: Fix up partially corrupted headers
47ee4cc drm/edid: Retry EDID fetch up to four times
f985ded drm/modes: Limit fallback modes to 60Hz
---
 drivers/gpu/drm/drm_edid.c  |  334 +++++++++++++++++++++++++++----------------
 drivers/gpu/drm/drm_modes.c |   28 ++++-
 include/drm/drm_crtc.h      |    7 +-
 include/drm/drm_edid.h      |    8 +
 4 files changed, 249 insertions(+), 128 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 6ce18a2..4270ba6 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -123,18 +123,20 @@ static const u8 edid_header[] = {
  */
 static bool edid_is_valid(struct edid *edid)
 {
-	int i;
+	int i, score = 0;
 	u8 csum = 0;
 	u8 *raw_edid = (u8 *)edid;
 
-	if (memcmp(edid->header, edid_header, sizeof(edid_header)))
-		goto bad;
-	if (edid->version != 1) {
-		DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version);
+	for (i = 0; i < sizeof(edid_header); i++)
+		if (raw_edid[i] == edid_header[i])
+			score++;
+
+	if (score == 8) ;
+	else if (score >= 6) {
+		DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
+		memcpy(raw_edid, edid_header, sizeof(edid_header));
+	} else
 		goto bad;
-	}
-	if (edid->revision > 4)
-		DRM_DEBUG("EDID minor > 4, assuming backward compatibility\n");
 
 	for (i = 0; i < EDID_LENGTH; i++)
 		csum += raw_edid[i];
@@ -143,6 +145,14 @@ static bool edid_is_valid(struct edid *edid)
 		goto bad;
 	}
 
+	if (edid->version != 1) {
+		DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version);
+		goto bad;
+	}
+
+	if (edid->revision > 4)
+		DRM_DEBUG("EDID minor > 4, assuming backward compatibility\n");
+
 	return 1;
 
 bad:
@@ -481,16 +491,17 @@ static struct drm_display_mode drm_dmt_modes[] = {
 		   3048, 3536, 0, 1600, 1603, 1609, 1682, 0,
 		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
 };
+static const int drm_num_dmt_modes =
+	sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
 
 static struct drm_display_mode *drm_find_dmt(struct drm_device *dev,
 			int hsize, int vsize, int fresh)
 {
-	int i, count;
+	int i;
 	struct drm_display_mode *ptr, *mode;
 
-	count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
 	mode = NULL;
-	for (i = 0; i < count; i++) {
+	for (i = 0; i < drm_num_dmt_modes; i++) {
 		ptr = &drm_dmt_modes[i];
 		if (hsize == ptr->hdisplay &&
 			vsize == ptr->vdisplay &&
@@ -659,6 +670,12 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
 	if (mode->vsync_end > mode->vtotal)
 		mode->vtotal = mode->vsync_end + 1;
 
+	/* Some EDIDs have bogus h/vtotal values */
+	if (mode->hsync_end > mode->htotal)
+		mode->htotal = mode->hsync_end + 1;
+	if (mode->vsync_end > mode->vtotal)
+		mode->vtotal = mode->vsync_end + 1;
+
 	drm_mode_set_name(mode);
 
 	if (pt->misc & DRM_EDID_PT_INTERLACED)
@@ -825,8 +842,165 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
 	return modes;
 }
 
+/*
+ * XXX fix this for:
+ * - GTF secondary curve formula
+ * - EDID 1.4 range offsets
+ * - CVT extended bits
+ */
+static bool
+mode_in_range(struct drm_display_mode *mode, struct detailed_timing *timing)
+{
+	struct detailed_data_monitor_range *range;
+	int hsync, vrefresh;
+
+	range = &timing->data.other_data.data.range;
+
+	hsync = drm_mode_hsync(mode);
+	vrefresh = drm_mode_vrefresh(mode);
+
+	if (hsync < range->min_hfreq_khz || hsync > range->max_hfreq_khz)
+		return false;
+
+	if (vrefresh < range->min_vfreq || vrefresh > range->max_vfreq)
+		return false;
+
+	if (range->pixel_clock_mhz && range->pixel_clock_mhz != 0xff) {
+		/* be forgiving since it's in units of 10MHz */
+		int max_clock = range->pixel_clock_mhz * 10 + 9;
+		max_clock *= 1000;
+		if (mode->clock > max_clock)
+			return false;
+	}
+
+	return true;
+}
+
+/*
+ * XXX If drm_dmt_modes ever regrows the CVT-R modes (and it will) this will
+ * need to account for them.
+ */
+static int drm_gtf_modes_for_range(struct drm_connector *connector,
+				   struct detailed_timing *timing)
+{
+	int i, modes = 0;
+	struct drm_display_mode *newmode;
+	struct drm_device *dev = connector->dev;
+
+	for (i = 0; i < drm_num_dmt_modes; i++) {
+		if (mode_in_range(drm_dmt_modes + i, timing)) {
+			newmode = drm_mode_duplicate(dev, &drm_dmt_modes[i]);
+			if (newmode) {
+				drm_mode_probed_add(connector, newmode);
+				modes++;
+			}
+		}
+	}
+
+	return modes;
+}
+
+static int drm_cvt_modes(struct drm_connector *connector,
+			 struct detailed_timing *timing)
+{
+	int i, j, modes = 0;
+	struct drm_display_mode *newmode;
+	struct drm_device *dev = connector->dev;
+	struct cvt_timing *cvt;
+	const int rates[] = { 60, 85, 75, 60, 50 };
+
+	for (i = 0; i < 4; i++) {
+		int width, height;
+		cvt = &(timing->data.other_data.data.cvt[i]);
+
+		height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 8) + 1) * 2;
+		switch (cvt->code[1] & 0xc0) {
+		case 0x00:
+			width = height * 4 / 3;
+			break;
+		case 0x40:
+			width = height * 16 / 9;
+			break;
+		case 0x80:
+			width = height * 16 / 10;
+			break;
+		case 0xc0:
+			width = height * 15 / 9;
+			break;
+		}
+
+		for (j = 1; j < 5; j++) {
+			if (cvt->code[2] & (1 << j)) {
+				newmode = drm_cvt_mode(dev, width, height,
+						       rates[j], j == 0,
+						       false, false);
+				if (newmode) {
+					drm_mode_probed_add(connector, newmode);
+					modes++;
+				}
+			}
+		}
+	}
+
+	return modes;
+}
+
+static int add_detailed_modes(struct drm_connector *connector,
+			      struct detailed_timing *timing,
+			      struct edid *edid, u32 quirks, int preferred)
+{
+	int i, modes = 0;
+	struct detailed_non_pixel *data = &timing->data.other_data;
+	int timing_level = standard_timing_level(edid);
+	int gtf = (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF);
+	struct drm_display_mode *newmode;
+	struct drm_device *dev = connector->dev;
+
+	if (timing->pixel_clock) {
+		newmode = drm_mode_detailed(dev, edid, timing, quirks);
+		if (!newmode)
+			return 0;
+
+		if (preferred)
+			newmode->type |= DRM_MODE_TYPE_PREFERRED;
+
+		drm_mode_probed_add(connector, newmode);
+		return 1;
+	}
+
+	/* other timing types */
+	switch (data->type) {
+	case EDID_DETAIL_MONITOR_RANGE:
+		if (gtf)
+			modes += drm_gtf_modes_for_range(connector, timing);
+		break;
+	case EDID_DETAIL_STD_MODES:
+		/* Six modes per detailed section */
+		for (i = 0; i < 6; i++) {
+			struct std_timing *std;
+			struct drm_display_mode *newmode;
+
+			std = &data->data.timings[i];
+			newmode = drm_mode_std(dev, std, edid->revision,
+					       timing_level);
+			if (newmode) {
+				drm_mode_probed_add(connector, newmode);
+				modes++;
+			}
+		}
+		break;
+	case EDID_DETAIL_CVT_3BYTE:
+		modes += drm_cvt_modes(connector, timing);
+		break;
+	default:
+		break;
+	}
+
+	return modes;
+}
+
 /**
- * add_detailed_modes - get detailed mode info from EDID data
+ * add_detailed_info - get detailed mode info from EDID data
  * @connector: attached connector
  * @edid: EDID block to scan
  * @quirks: quirks to apply
@@ -837,67 +1011,24 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
 static int add_detailed_info(struct drm_connector *connector,
 			     struct edid *edid, u32 quirks)
 {
-	struct drm_device *dev = connector->dev;
-	int i, j, modes = 0;
-	int timing_level;
-
-	timing_level = standard_timing_level(edid);
+	int i, modes = 0;
 
 	for (i = 0; i < EDID_DETAILED_TIMINGS; i++) {
 		struct detailed_timing *timing = &edid->detailed_timings[i];
-		struct detailed_non_pixel *data = &timing->data.other_data;
-		struct drm_display_mode *newmode;
+		int preferred = (i == 0) && (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING);
 
-		/* X server check is version 1.1 or higher */
-		if (edid->version == 1 && edid->revision >= 1 &&
-		    !timing->pixel_clock) {
-			/* Other timing or info */
-			switch (data->type) {
-			case EDID_DETAIL_MONITOR_SERIAL:
-				break;
-			case EDID_DETAIL_MONITOR_STRING:
-				break;
-			case EDID_DETAIL_MONITOR_RANGE:
-				/* Get monitor range data */
-				break;
-			case EDID_DETAIL_MONITOR_NAME:
-				break;
-			case EDID_DETAIL_MONITOR_CPDATA:
-				break;
-			case EDID_DETAIL_STD_MODES:
-				for (j = 0; j < 6; i++) {
-					struct std_timing *std;
-					struct drm_display_mode *newmode;
-
-					std = &data->data.timings[j];
-					newmode = drm_mode_std(dev, std,
-							       edid->revision,
-							       timing_level);
-					if (newmode) {
-						drm_mode_probed_add(connector, newmode);
-						modes++;
-					}
-				}
-				break;
-			default:
-				break;
-			}
-		} else {
-			newmode = drm_mode_detailed(dev, edid, timing, quirks);
-			if (!newmode)
-				continue;
-
-			/* First detailed mode is preferred */
-			if (i == 0 && (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING))
-				newmode->type |= DRM_MODE_TYPE_PREFERRED;
-			drm_mode_probed_add(connector, newmode);
+		/* In 1.0, only timings are allowed */
+		if (!timing->pixel_clock && edid->version == 1 &&
+			edid->revision == 0)
+			continue;
 
-			modes++;
-		}
+		modes += add_detailed_modes(connector, timing, edid, quirks,
+					    preferred);
 	}
 
 	return modes;
 }
+
 /**
  * add_detailed_mode_eedid - get detailed mode info from addtional timing
  * 			EDID block
@@ -911,12 +1042,9 @@ static int add_detailed_info(struct drm_connector *connector,
 static int add_detailed_info_eedid(struct drm_connector *connector,
 			     struct edid *edid, u32 quirks)
 {
-	struct drm_device *dev = connector->dev;
-	int i, j, modes = 0;
+	int i, modes = 0;
 	char *edid_ext = NULL;
 	struct detailed_timing *timing;
-	struct detailed_non_pixel *data;
-	struct drm_display_mode *newmode;
 	int edid_ext_num;
 	int start_offset, end_offset;
 	int timing_level;
@@ -967,51 +1095,7 @@ static int add_detailed_info_eedid(struct drm_connector *connector,
 	for (i = start_offset; i < end_offset;
 			i += sizeof(struct detailed_timing)) {
 		timing = (struct detailed_timing *)(edid_ext + i);
-		data = &timing->data.other_data;
-		/* Detailed mode timing */
-		if (timing->pixel_clock) {
-			newmode = drm_mode_detailed(dev, edid, timing, quirks);
-			if (!newmode)
-				continue;
-
-			drm_mode_probed_add(connector, newmode);
-
-			modes++;
-			continue;
-		}
-
-		/* Other timing or info */
-		switch (data->type) {
-		case EDID_DETAIL_MONITOR_SERIAL:
-			break;
-		case EDID_DETAIL_MONITOR_STRING:
-			break;
-		case EDID_DETAIL_MONITOR_RANGE:
-			/* Get monitor range data */
-			break;
-		case EDID_DETAIL_MONITOR_NAME:
-			break;
-		case EDID_DETAIL_MONITOR_CPDATA:
-			break;
-		case EDID_DETAIL_STD_MODES:
-			/* Five modes per detailed section */
-			for (j = 0; j < 5; i++) {
-				struct std_timing *std;
-				struct drm_display_mode *newmode;
-
-				std = &data->data.timings[j];
-				newmode = drm_mode_std(dev, std,
-						       edid->revision,
-						       timing_level);
-				if (newmode) {
-					drm_mode_probed_add(connector, newmode);
-					modes++;
-				}
-			}
-			break;
-		default:
-			break;
-		}
+		modes += add_detailed_modes(connector, timing, edid, quirks, 0);
 	}
 
 	return modes;
@@ -1057,19 +1141,19 @@ static int drm_ddc_read_edid(struct drm_connector *connector,
 			     struct i2c_adapter *adapter,
 			     char *buf, int len)
 {
-	int ret;
+	int i;
 
-	ret = drm_do_probe_ddc_edid(adapter, buf, len);
-	if (ret != 0) {
-		goto end;
-	}
-	if (!edid_is_valid((struct edid *)buf)) {
-		dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n",
-			 drm_get_connector_name(connector));
-		ret = -1;
+	for (i = 0; i < 4; i++) {
+		if (drm_do_probe_ddc_edid(adapter, buf, len))
+			return -1;
+		if (edid_is_valid((struct edid *)buf))
+			return 0;
 	}
-end:
-	return ret;
+
+	/* repeated checksum failures; warn, but carry on */
+	dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n",
+		 drm_get_connector_name(connector));
+	return -1;
 }
 
 /**
@@ -1287,6 +1371,8 @@ int drm_add_modes_noedid(struct drm_connector *connector,
 					ptr->vdisplay > vdisplay)
 				continue;
 		}
+		if (drm_mode_vrefresh(ptr) > 61)
+			continue;
 		mode = drm_mode_duplicate(dev, ptr);
 		if (mode) {
 			drm_mode_probed_add(connector, mode);
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 51f6772..6d81a02 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -553,6 +553,32 @@ int drm_mode_height(struct drm_display_mode *mode)
 }
 EXPORT_SYMBOL(drm_mode_height);
 
+/** drm_mode_hsync - get the hsync of a mode
+ * @mode: mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Return @modes's hsync rate in kHz, rounded to the nearest int.
+ */
+int drm_mode_hsync(struct drm_display_mode *mode)
+{
+	unsigned int calc_val;
+
+	if (mode->hsync)
+		return mode->hsync;
+
+	if (mode->htotal < 0)
+		return 0;
+
+	calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */
+	calc_val += 500;				/* round to 1000Hz */
+	calc_val /= 1000;				/* truncate to kHz */
+
+	return calc_val;
+}
+EXPORT_SYMBOL(drm_mode_hsync);
+
 /**
  * drm_mode_vrefresh - get the vrefresh of a mode
  * @mode: mode
@@ -560,7 +586,7 @@ EXPORT_SYMBOL(drm_mode_height);
  * LOCKING:
  * None.
  *
- * Return @mode's vrefresh rate or calculate it if necessary.
+ * Return @mode's vrefresh rate in Hz or calculate it if necessary.
  *
  * FIXME: why is this needed?  shouldn't vrefresh be set already?
  *
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index b69347b..3a43ab8 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -123,7 +123,7 @@ struct drm_display_mode {
 	int type;
 
 	/* Proposed mode values */
-	int clock;
+	int clock;		/* in kHz */
 	int hdisplay;
 	int hsync_start;
 	int hsync_end;
@@ -164,8 +164,8 @@ struct drm_display_mode {
 	int *private;
 	int private_flags;
 
-	int vrefresh;
-	float hsync;
+	int vrefresh;		/* in Hz */
+	int hsync;		/* in kHz */
 };
 
 enum drm_connector_status {
@@ -667,6 +667,7 @@ extern void drm_mode_validate_size(struct drm_device *dev,
 extern void drm_mode_prune_invalid(struct drm_device *dev,
 				   struct list_head *mode_list, bool verbose);
 extern void drm_mode_sort(struct list_head *mode_list);
+extern int drm_mode_hsync(struct drm_display_mode *mode);
 extern int drm_mode_vrefresh(struct drm_display_mode *mode);
 extern void drm_mode_set_crtcinfo(struct drm_display_mode *p,
 				  int adjust_flags);
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 7d6c9a2..d33c3e0 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -106,6 +106,10 @@ struct detailed_data_color_point {
 	u8 wpindex2[3];
 } __attribute__((packed));
 
+struct cvt_timing {
+	u8 code[3];
+} __attribute__((packed));
+
 struct detailed_non_pixel {
 	u8 pad1;
 	u8 type; /* ff=serial, fe=string, fd=monitor range, fc=monitor name
@@ -117,9 +121,13 @@ struct detailed_non_pixel {
 		struct detailed_data_monitor_range range;
 		struct detailed_data_wpindex color;
 		struct std_timing timings[5];
+		struct cvt_timing cvt[4];
 	} data;
 } __attribute__((packed));
 
+#define EDID_DETAIL_EST_TIMINGS 0xf7
+#define EDID_DETAIL_CVT_3BYTE 0xf8
+#define EDID_DETAIL_COLOR_MGMT_DATA 0xf9
 #define EDID_DETAIL_STD_MODES 0xfa
 #define EDID_DETAIL_MONITOR_CPDATA 0xfb
 #define EDID_DETAIL_MONITOR_NAME 0xfc
-- 
1.6.5.2



--- NEW FILE patch-2.6.31.9.bz2.sign ---
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: See http://www.kernel.org/signature.html for info

iD8DBQBLLA7XyGugalF9Dw4RAsWbAKCIXZ1bJteyy0TSZAW1tG5ZcQz9xgCZAXRu
AvTHZFwVuh79gXhjYhsTB08=
=Yo18
-----END PGP SIGNATURE-----


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/.cvsignore,v
retrieving revision 1.1014.2.35
retrieving revision 1.1014.2.36
diff -u -p -r1.1014.2.35 -r1.1014.2.36
--- .cvsignore	12 Nov 2009 23:01:03 -0000	1.1014.2.35
+++ .cvsignore	23 Dec 2009 21:12:33 -0000	1.1014.2.36
@@ -5,4 +5,4 @@ kernel-2.6.*.config
 temp-*
 kernel-2.6.31
 linux-2.6.31.tar.bz2
-patch-2.6.31.6.bz2
+patch-2.6.31.9.bz2

drm-next-b390f944.patch:
 b/drivers/gpu/drm/Kconfig                         |   18 
 b/drivers/gpu/drm/Makefile                        |    8 
 b/drivers/gpu/drm/drm_bufs.c                      |    4 
 b/drivers/gpu/drm/drm_cache.c                     |   46 
 b/drivers/gpu/drm/drm_crtc.c                      |   78 
 b/drivers/gpu/drm/drm_crtc_helper.c               |  308 
 b/drivers/gpu/drm/drm_drv.c                       |    4 
 b/drivers/gpu/drm/drm_edid.c                      |  542 
 b/drivers/gpu/drm/drm_encoder_slave.c             |  116 
 b/drivers/gpu/drm/drm_fb_helper.c                 | 1030 
 b/drivers/gpu/drm/drm_gem.c                       |   13 
 b/drivers/gpu/drm/drm_mm.c                        |   30 
 b/drivers/gpu/drm/drm_modes.c                     |  434 
 b/drivers/gpu/drm/drm_proc.c                      |   17 
 b/drivers/gpu/drm/drm_sysfs.c                     |   28 
 b/drivers/gpu/drm/i915/Makefile                   |    2 
 b/drivers/gpu/drm/i915/i915_debugfs.c             |  445 
 b/drivers/gpu/drm/i915/i915_dma.c                 |  100 
 b/drivers/gpu/drm/i915/i915_drv.c                 |    9 
 b/drivers/gpu/drm/i915/i915_drv.h                 |   62 
 b/drivers/gpu/drm/i915/i915_gem.c                 |   14 
 b/drivers/gpu/drm/i915/i915_gem_tiling.c          |   65 
 b/drivers/gpu/drm/i915/i915_irq.c                 |   21 
 b/drivers/gpu/drm/i915/i915_reg.h                 |  139 
 b/drivers/gpu/drm/i915/i915_suspend.c             |    4 
 b/drivers/gpu/drm/i915/intel_bios.c               |    8 
 b/drivers/gpu/drm/i915/intel_crt.c                |   28 
 b/drivers/gpu/drm/i915/intel_display.c            |  608 
 b/drivers/gpu/drm/i915/intel_drv.h                |    9 
 b/drivers/gpu/drm/i915/intel_fb.c                 |  748 
 b/drivers/gpu/drm/i915/intel_i2c.c                |    8 
 b/drivers/gpu/drm/i915/intel_lvds.c               |   22 
 b/drivers/gpu/drm/i915/intel_sdvo.c               |  239 
 b/drivers/gpu/drm/i915/intel_tv.c                 |   30 
 b/drivers/gpu/drm/mga/mga_dma.c                   |    4 
 b/drivers/gpu/drm/mga/mga_drv.h                   |    1 
 b/drivers/gpu/drm/mga/mga_warp.c                  |  180 
 b/drivers/gpu/drm/r128/r128_cce.c                 |  116 
 b/drivers/gpu/drm/r128/r128_drv.h                 |    8 
 b/drivers/gpu/drm/r128/r128_state.c               |   36 
 b/drivers/gpu/drm/radeon/.gitignore               |    3 
 b/drivers/gpu/drm/radeon/Kconfig                  |    1 
 b/drivers/gpu/drm/radeon/Makefile                 |   43 
 b/drivers/gpu/drm/radeon/atom.c                   |    1 
 b/drivers/gpu/drm/radeon/atombios.h               |   13 
 b/drivers/gpu/drm/radeon/atombios_crtc.c          |  366 
 b/drivers/gpu/drm/radeon/avivod.h                 |   60 
 b/drivers/gpu/drm/radeon/mkregtable.c             |  720 
 b/drivers/gpu/drm/radeon/r100.c                   | 1768 +
 b/drivers/gpu/drm/radeon/r100_track.h             |  183 
 b/drivers/gpu/drm/radeon/r100d.h                  |  714 
 b/drivers/gpu/drm/radeon/r200.c                   |  454 
 b/drivers/gpu/drm/radeon/r300.c                   |  985 
 b/drivers/gpu/drm/radeon/r300d.h                  |  306 
 b/drivers/gpu/drm/radeon/r420.c                   |  305 
 b/drivers/gpu/drm/radeon/r420d.h                  |  249 
 b/drivers/gpu/drm/radeon/r500_reg.h               |   12 
 b/drivers/gpu/drm/radeon/r520.c                   |  286 
 b/drivers/gpu/drm/radeon/r520d.h                  |  187 
 b/drivers/gpu/drm/radeon/r600.c                   | 1847 +
 b/drivers/gpu/drm/radeon/r600_blit.c              |  858 
 b/drivers/gpu/drm/radeon/r600_blit_kms.c          |  805 
 b/drivers/gpu/drm/radeon/r600_blit_shaders.c      | 1072 +
 b/drivers/gpu/drm/radeon/r600_blit_shaders.h      |   14 
 b/drivers/gpu/drm/radeon/r600_cp.c                |  541 
 b/drivers/gpu/drm/radeon/r600_cs.c                |  783 
 b/drivers/gpu/drm/radeon/r600d.h                  |  667 
 b/drivers/gpu/drm/radeon/radeon.h                 |  454 
 b/drivers/gpu/drm/radeon/radeon_agp.c             |   12 
 b/drivers/gpu/drm/radeon/radeon_asic.h            |  386 
 b/drivers/gpu/drm/radeon/radeon_atombios.c        |  434 
 b/drivers/gpu/drm/radeon/radeon_benchmark.c       |    4 
 b/drivers/gpu/drm/radeon/radeon_bios.c            |   46 
 b/drivers/gpu/drm/radeon/radeon_clocks.c          |   28 
 b/drivers/gpu/drm/radeon/radeon_combios.c         |  717 
 b/drivers/gpu/drm/radeon/radeon_connectors.c      |  751 
 b/drivers/gpu/drm/radeon/radeon_cp.c              |  151 
 b/drivers/gpu/drm/radeon/radeon_cs.c              |  104 
 b/drivers/gpu/drm/radeon/radeon_cursor.c          |   10 
 b/drivers/gpu/drm/radeon/radeon_device.c          |  352 
 b/drivers/gpu/drm/radeon/radeon_display.c         |  193 
 b/drivers/gpu/drm/radeon/radeon_drv.c             |   28 
 b/drivers/gpu/drm/radeon/radeon_drv.h             |  216 
 b/drivers/gpu/drm/radeon/radeon_encoders.c        |  309 
 b/drivers/gpu/drm/radeon/radeon_family.h          |   97 
 b/drivers/gpu/drm/radeon/radeon_fb.c              |  700 
 b/drivers/gpu/drm/radeon/radeon_fence.c           |   49 
 b/drivers/gpu/drm/radeon/radeon_gart.c            |   29 
 b/drivers/gpu/drm/radeon/radeon_gem.c             |   10 
 b/drivers/gpu/drm/radeon/radeon_i2c.c             |  109 
 b/drivers/gpu/drm/radeon/radeon_ioc32.c           |   15 
 b/drivers/gpu/drm/radeon/radeon_irq.c             |   18 
 b/drivers/gpu/drm/radeon/radeon_irq_kms.c         |   16 
 b/drivers/gpu/drm/radeon/radeon_kms.c             |   74 
 b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c     |  152 
 b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c |  505 
 b/drivers/gpu/drm/radeon/radeon_legacy_tv.c       |  904 
 b/drivers/gpu/drm/radeon/radeon_mode.h            |  170 
 b/drivers/gpu/drm/radeon/radeon_object.c          |   28 
 b/drivers/gpu/drm/radeon/radeon_object.h          |    1 
 b/drivers/gpu/drm/radeon/radeon_pm.c              |   65 
 b/drivers/gpu/drm/radeon/radeon_reg.h             |  126 
 b/drivers/gpu/drm/radeon/radeon_ring.c            |  143 
 b/drivers/gpu/drm/radeon/radeon_state.c           |   23 
 b/drivers/gpu/drm/radeon/radeon_test.c            |    6 
 b/drivers/gpu/drm/radeon/radeon_ttm.c             |  101 
 b/drivers/gpu/drm/radeon/reg_srcs/r100            |  105 
 b/drivers/gpu/drm/radeon/reg_srcs/r200            |  184 
 b/drivers/gpu/drm/radeon/reg_srcs/r300            |  729 
 b/drivers/gpu/drm/radeon/reg_srcs/rn50            |   30 
 b/drivers/gpu/drm/radeon/reg_srcs/rs600           |  729 
 b/drivers/gpu/drm/radeon/reg_srcs/rv515           |  486 
 b/drivers/gpu/drm/radeon/rs100d.h                 |   40 
 b/drivers/gpu/drm/radeon/rs400.c                  |  331 
 b/drivers/gpu/drm/radeon/rs400d.h                 |  160 
 b/drivers/gpu/drm/radeon/rs600.c                  |  610 
 b/drivers/gpu/drm/radeon/rs600d.h                 |  470 
 b/drivers/gpu/drm/radeon/rs690.c                  |  359 
 b/drivers/gpu/drm/radeon/rs690d.h                 |  307 
 b/drivers/gpu/drm/radeon/rv200d.h                 |   36 
 b/drivers/gpu/drm/radeon/rv250d.h                 |  123 
 b/drivers/gpu/drm/radeon/rv350d.h                 |   52 
 b/drivers/gpu/drm/radeon/rv515.c                  |  882 
 b/drivers/gpu/drm/radeon/rv515d.h                 |  603 
 b/drivers/gpu/drm/radeon/rv770.c                  | 1063 -
 b/drivers/gpu/drm/radeon/rv770d.h                 |  346 
 b/drivers/gpu/drm/ttm/ttm_bo.c                    |  295 
 b/drivers/gpu/drm/ttm/ttm_bo_util.c               |    4 
 b/drivers/gpu/drm/ttm/ttm_global.c                |    6 
 b/drivers/gpu/drm/ttm/ttm_memory.c                |  508 
 b/drivers/gpu/drm/ttm/ttm_module.c                |   58 
 b/drivers/gpu/drm/ttm/ttm_tt.c                    |  105 
 b/drivers/video/fbmem.c                           |    2 
 b/firmware/Makefile                               |   16 
 b/firmware/WHENCE                                 |  121 
 b/firmware/matrox/g200_warp.H16                   |   28 
 b/firmware/matrox/g400_warp.H16                   |   44 
 b/firmware/r128/r128_cce.bin.ihex                 |  129 
 b/firmware/radeon/R100_cp.bin.ihex                |  130 
 b/firmware/radeon/R200_cp.bin.ihex                |  130 
 b/firmware/radeon/R300_cp.bin.ihex                |  130 
 b/firmware/radeon/R420_cp.bin.ihex                |  130 
 b/firmware/radeon/R520_cp.bin.ihex                |  130 
 b/firmware/radeon/R600_me.bin.ihex                | 1345 +
 b/firmware/radeon/R600_pfp.bin.ihex               |  145 
 b/firmware/radeon/RS600_cp.bin.ihex               |  130 
 b/firmware/radeon/RS690_cp.bin.ihex               |  130 
 b/firmware/radeon/RS780_me.bin.ihex               | 1345 +
 b/firmware/radeon/RS780_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV610_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV610_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV620_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV620_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV630_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV630_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV635_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV635_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV670_me.bin.ihex               | 1345 +
 b/firmware/radeon/RV670_pfp.bin.ihex              |  145 
 b/firmware/radeon/RV710_me.bin.ihex               |  341 
 b/firmware/radeon/RV710_pfp.bin.ihex              |  213 
 b/firmware/radeon/RV730_me.bin.ihex               |  341 
 b/firmware/radeon/RV730_pfp.bin.ihex              |  213 
 b/firmware/radeon/RV770_me.bin.ihex               |  341 
 b/firmware/radeon/RV770_pfp.bin.ihex              |  213 
 b/include/drm/drmP.h                              |   54 
 b/include/drm/drm_cache.h                         |   38 
 b/include/drm/drm_crtc.h                          |   28 
 b/include/drm/drm_crtc_helper.h                   |   10 
 b/include/drm/drm_encoder_slave.h                 |  162 
 b/include/drm/drm_fb_helper.h                     |  111 
 b/include/drm/drm_mm.h                            |    7 
 b/include/drm/drm_mode.h                          |   11 
 b/include/drm/drm_pciids.h                        |    4 
 b/include/drm/drm_sysfs.h                         |   12 
 b/include/drm/radeon_drm.h                        |   12 
 b/include/drm/ttm/ttm_bo_api.h                    |   13 
 b/include/drm/ttm/ttm_bo_driver.h                 |   94 
 b/include/drm/ttm/ttm_memory.h                    |   43 
 b/include/drm/ttm/ttm_module.h                    |    2 
 drivers/gpu/drm/i915/i915_gem_debugfs.c           |  396 
 drivers/gpu/drm/mga/mga_ucode.h                   |11645 ----------
 drivers/gpu/drm/radeon/r300.h                     |   36 
 drivers/gpu/drm/radeon/r600_microcode.h           |23297 ----------------------
 drivers/gpu/drm/radeon/radeon_microcode.h         | 1844 -
 drivers/gpu/drm/radeon/radeon_share.h             |   39 
 drivers/gpu/drm/radeon/rs690r.h                   |   99 
 drivers/gpu/drm/radeon/rs780.c                    |  102 
 drivers/gpu/drm/radeon/rv515r.h                   |  170 
 189 files changed, 42492 insertions(+), 44061 deletions(-)

Index: drm-next-b390f944.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/drm-next-b390f944.patch,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.1 -r1.1.2.2
--- drm-next-b390f944.patch	9 Dec 2009 21:44:00 -0000	1.1.2.1
+++ drm-next-b390f944.patch	23 Dec 2009 21:12:33 -0000	1.1.2.2
@@ -1,5 +1,5 @@
 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
-index 39b393d..e4d971c 100644
+index 012cf1f..bdcfedc 100644
 --- a/drivers/gpu/drm/Kconfig
 +++ b/drivers/gpu/drm/Kconfig
 @@ -18,6 +18,14 @@ menuconfig DRM
@@ -37,10 +37,10 @@ index 39b393d..e4d971c 100644
  	help
  	  Choose this option if you have an ATI Radeon graphics card.  There
  	  are both PCI and AGP versions.  You don't need to choose this to
-@@ -82,11 +92,10 @@ config DRM_I830
- config DRM_I915
+@@ -83,11 +93,10 @@ config DRM_I915
  	tristate "i915 driver"
  	depends on AGP_INTEL
+ 	select SHMEM
 +	select DRM_KMS_HELPER
  	select FB_CFB_FILLRECT
  	select FB_CFB_COPYAREA
@@ -50,7 +50,7 @@ index 39b393d..e4d971c 100644
  	# i915 depends on ACPI_VIDEO when ACPI is enabled
  	# but for select to work, need to select ACPI_VIDEO's dependencies, ick
  	select VIDEO_OUTPUT_CONTROL if ACPI
-@@ -116,6 +125,7 @@ endchoice
+@@ -117,6 +126,7 @@ endchoice
  config DRM_MGA
  	tristate "Matrox g200/g400"
  	depends on DRM
@@ -986,7 +986,7 @@ index b39d7bf..a75ca63 100644
  	DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
  	DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_rmmap_ioctl, DRM_AUTH),
 diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
-index 7f2728b..b54ba63 100644
+index 55fb98d..6ce18a2 100644
 --- a/drivers/gpu/drm/drm_edid.c
 +++ b/drivers/gpu/drm/drm_edid.c
 @@ -60,6 +60,12 @@
@@ -1383,29 +1383,7 @@ index 7f2728b..b54ba63 100644
  	mode = drm_mode_create(dev);
  	if (!mode)
  		return NULL;
-@@ -333,6 +653,21 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
- 	mode->vsync_end = mode->vsync_start + vsync_pulse_width;
- 	mode->vtotal = mode->vdisplay + vblank;
- 
-+	/* perform the basic check for the detailed timing */
-+	if (mode->hsync_end > mode->htotal ||
-+		mode->vsync_end > mode->vtotal) {
-+		drm_mode_destroy(dev, mode);
-+		DRM_DEBUG_KMS("Incorrect detailed timing. "
-+				"Sync is beyond the blank.\n");
-+		return NULL;
-+	}
-+
-+	/* Some EDIDs have bogus h/vtotal values */
-+	if (mode->hsync_end > mode->htotal)
-+		mode->htotal = mode->hsync_end + 1;
-+	if (mode->vsync_end > mode->vtotal)
-+		mode->vtotal = mode->vsync_end + 1;
-+
- 	drm_mode_set_name(mode);
- 
- 	if (pt->misc & DRM_EDID_PT_INTERLACED)
-@@ -451,6 +786,19 @@ static int add_established_modes(struct drm_connector *connector, struct edid *e
+@@ -457,6 +777,19 @@ static int add_established_modes(struct drm_connector *connector, struct edid *e
  
  	return modes;
  }
@@ -1425,7 +1403,7 @@ index 7f2728b..b54ba63 100644
  
  /**
   * add_standard_modes - get std. modes from EDID and add them
-@@ -463,6 +811,9 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
+@@ -469,6 +802,9 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
  {
  	struct drm_device *dev = connector->dev;
  	int i, modes = 0;
@@ -1435,7 +1413,7 @@ index 7f2728b..b54ba63 100644
  
  	for (i = 0; i < EDID_STD_TIMINGS; i++) {
  		struct std_timing *t = &edid->standard_timings[i];
-@@ -472,7 +823,8 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
+@@ -478,7 +814,8 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
  		if (t->hsize == 1 && t->vfreq_aspect == 1)
  			continue;
  
@@ -1445,7 +1423,7 @@ index 7f2728b..b54ba63 100644
  		if (newmode) {
  			drm_mode_probed_add(connector, newmode);
  			modes++;
-@@ -496,6 +848,9 @@ static int add_detailed_info(struct drm_connector *connector,
+@@ -502,6 +839,9 @@ static int add_detailed_info(struct drm_connector *connector,
  {
  	struct drm_device *dev = connector->dev;
  	int i, j, modes = 0;
@@ -1455,7 +1433,7 @@ index 7f2728b..b54ba63 100644
  
  	for (i = 0; i < EDID_DETAILED_TIMINGS; i++) {
  		struct detailed_timing *timing = &edid->detailed_timings[i];
-@@ -519,13 +874,14 @@ static int add_detailed_info(struct drm_connector *connector,
+@@ -525,13 +865,14 @@ static int add_detailed_info(struct drm_connector *connector,
  			case EDID_DETAIL_MONITOR_CPDATA:
  				break;
  			case EDID_DETAIL_STD_MODES:
@@ -1473,7 +1451,7 @@ index 7f2728b..b54ba63 100644
  					if (newmode) {
  						drm_mode_probed_add(connector, newmode);
  						modes++;
-@@ -551,6 +907,124 @@ static int add_detailed_info(struct drm_connector *connector,
+@@ -557,6 +898,124 @@ static int add_detailed_info(struct drm_connector *connector,
  
  	return modes;
  }
@@ -1598,7 +1576,7 @@ index 7f2728b..b54ba63 100644
  
  #define DDC_ADDR 0x50
  /**
-@@ -584,7 +1058,6 @@ int drm_do_probe_ddc_edid(struct i2c_adapter *adapter,
+@@ -590,7 +1049,6 @@ int drm_do_probe_ddc_edid(struct i2c_adapter *adapter,
  	if (i2c_transfer(adapter, msgs, 2) == 2)
  		return 0;
  
@@ -1606,7 +1584,7 @@ index 7f2728b..b54ba63 100644
  	return -1;
  }
  EXPORT_SYMBOL(drm_do_probe_ddc_edid);
-@@ -597,8 +1070,6 @@ static int drm_ddc_read_edid(struct drm_connector *connector,
+@@ -603,8 +1061,6 @@ static int drm_ddc_read_edid(struct drm_connector *connector,
  
  	ret = drm_do_probe_ddc_edid(adapter, buf, len);
  	if (ret != 0) {
@@ -1615,7 +1593,7 @@ index 7f2728b..b54ba63 100644
  		goto end;
  	}
  	if (!edid_is_valid((struct edid *)buf)) {
-@@ -610,7 +1081,6 @@ end:
+@@ -616,7 +1072,6 @@ end:
  	return ret;
  }
  
@@ -1623,7 +1601,7 @@ index 7f2728b..b54ba63 100644
  /**
   * drm_get_edid - get EDID data, if available
   * @connector: connector we're probing
-@@ -763,6 +1233,7 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
+@@ -769,6 +1224,7 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
  	num_modes += add_established_modes(connector, edid);
  	num_modes += add_standard_modes(connector, edid);
  	num_modes += add_detailed_info(connector, edid, quirks);
@@ -1631,7 +1609,7 @@ index 7f2728b..b54ba63 100644
  
  	if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
  		edid_fixup_preferred(connector, quirks);
-@@ -788,3 +1259,49 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
+@@ -794,3 +1250,49 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
  	return num_modes;
  }
  EXPORT_SYMBOL(drm_add_edid_modes);
@@ -4341,7 +4319,7 @@ index c078d99..e8cf18d 100644
  	.gem_init_object = i915_gem_init_object,
  	.gem_free_object = i915_gem_free_object,
 diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
-index 5b4f87e..77ed060 100644
+index 88b3eff..e5f20e4 100644
 --- a/drivers/gpu/drm/i915/i915_drv.h
 +++ b/drivers/gpu/drm/i915/i915_drv.h
 @@ -85,7 +85,6 @@ struct drm_i915_gem_phys_object {
@@ -4465,7 +4443,7 @@ index 5b4f87e..77ed060 100644
  extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
  
  #define IS_I830(dev) ((dev)->pci_device == 0x3577)
-@@ -903,6 +912,9 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
+@@ -905,6 +914,9 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
  /* dsparb controlled by hw only */
  #define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IGDNG(dev))
  
@@ -5095,10 +5073,10 @@ index e774a4a..200e398 100644
  	}
  
 diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
-index 7ebc84c..6c89f2f 100644
+index 9431a72..42c1709 100644
 --- a/drivers/gpu/drm/i915/i915_irq.c
 +++ b/drivers/gpu/drm/i915/i915_irq.c
-@@ -565,6 +565,27 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
+@@ -573,6 +573,27 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
  
  			I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
  			I915_READ(PORT_HOTPLUG_STAT);
@@ -5127,7 +5105,7 @@ index 7ebc84c..6c89f2f 100644
  
  		I915_WRITE(IIR, iir);
 diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
-index 106a1ae..268d272 100644
+index c017fa1..1cd645e 100644
 --- a/drivers/gpu/drm/i915/i915_reg.h
 +++ b/drivers/gpu/drm/i915/i915_reg.h
 @@ -55,7 +55,7 @@
@@ -5393,7 +5371,7 @@ index 5ae4c1a..212e227 100644
  
  static int intel_crt_mode_valid(struct drm_connector *connector,
 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 8b5af29..a865af5 100644
+index 318ba47..4c28f17 100644
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
 @@ -38,6 +38,7 @@
@@ -5639,7 +5617,7 @@ index 8b5af29..a865af5 100644
  }
  
  static void intel_crtc_prepare (struct drm_crtc *crtc)
-@@ -2079,6 +2138,18 @@ static int intel_get_fifo_size(struct drm_device *dev, int plane)
+@@ -2080,6 +2139,18 @@ static int intel_get_fifo_size(struct drm_device *dev, int plane)
  	return size;
  }
  
@@ -5658,7 +5636,7 @@ index 8b5af29..a865af5 100644
  static void i965_update_wm(struct drm_device *dev)
  {
  	struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -2130,7 +2201,8 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
+@@ -2131,7 +2202,8 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
  	cwm = 2;
  
  	/* Calc sr entries for one plane configs */
@@ -5668,7 +5646,7 @@ index 8b5af29..a865af5 100644
  		/* self-refresh has much higher latency */
  		const static int sr_latency_ns = 6000;
  
-@@ -2145,8 +2217,7 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
+@@ -2146,8 +2218,7 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
  		srwm = total_size - sr_entries;
  		if (srwm < 0)
  			srwm = 1;
@@ -5678,7 +5656,7 @@ index 8b5af29..a865af5 100644
  	}
  
  	DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",
-@@ -2220,9 +2291,6 @@ static void intel_update_watermarks(struct drm_device *dev)
+@@ -2221,9 +2292,6 @@ static void intel_update_watermarks(struct drm_device *dev)
  	unsigned long planea_clock = 0, planeb_clock = 0, sr_clock = 0;
  	int enabled = 0, pixel_size = 0;
  
@@ -5688,7 +5666,7 @@ index 8b5af29..a865af5 100644
  	/* Get the clock config from both planes */
  	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
  		intel_crtc = to_intel_crtc(crtc);
-@@ -2255,7 +2323,9 @@ static void intel_update_watermarks(struct drm_device *dev)
+@@ -2256,7 +2324,9 @@ static void intel_update_watermarks(struct drm_device *dev)
  	else if (IS_IGD(dev))
  		igd_disable_cxsr(dev);
  
@@ -5699,7 +5677,7 @@ index 8b5af29..a865af5 100644
  		i965_update_wm(dev);
  	else if (IS_I9XX(dev) || IS_MOBILE(dev))
  		i9xx_update_wm(dev, planea_clock, planeb_clock, sr_hdisplay,
-@@ -2289,9 +2359,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+@@ -2290,9 +2360,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
  	int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS;
  	int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC;
  	int refclk, num_outputs = 0;
@@ -5712,7 +5690,7 @@ index 8b5af29..a865af5 100644
  	bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
  	bool is_edp = false;
  	struct drm_mode_config *mode_config = &dev->mode_config;
-@@ -2374,6 +2444,14 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+@@ -2375,6 +2445,14 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
  		return -EINVAL;
  	}
  
@@ -5727,8 +5705,8 @@ index 8b5af29..a865af5 100644
  	/* SDVO TV has fixed PLL values depend on its clock range,
  	   this mirrors vbios setting. */
  	if (is_sdvo && is_tv) {
-@@ -2419,10 +2497,17 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
- 				  link_bw, &m_n);
+@@ -2482,10 +2560,17 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ 		}
  	}
  
 -	if (IS_IGD(dev))
@@ -5747,7 +5725,7 @@ index 8b5af29..a865af5 100644
  
  	if (!IS_IGDNG(dev))
  		dpll = DPLL_VGA_MODE_DIS;
-@@ -2451,6 +2536,8 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+@@ -2514,6 +2599,8 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
  			/* also FPA1 */
  			if (IS_IGDNG(dev))
  				dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
@@ -5756,7 +5734,7 @@ index 8b5af29..a865af5 100644
  		}
  		switch (clock.p2) {
  		case 5:
-@@ -2598,6 +2685,22 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+@@ -2661,6 +2748,22 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
  		udelay(150);
  	}
  
@@ -5779,7 +5757,7 @@ index 8b5af29..a865af5 100644
  	I915_WRITE(htot_reg, (adjusted_mode->crtc_hdisplay - 1) |
  		   ((adjusted_mode->crtc_htotal - 1) << 16));
  	I915_WRITE(hblank_reg, (adjusted_mode->crtc_hblank_start - 1) |
-@@ -2800,10 +2903,16 @@ static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
+@@ -2863,10 +2966,16 @@ static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
  	struct drm_device *dev = crtc->dev;
  	struct drm_i915_private *dev_priv = dev->dev_private;
  	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -5796,7 +5774,7 @@ index 8b5af29..a865af5 100644
  	if (x < 0) {
  		temp |= CURSOR_POS_SIGN << CURSOR_X_SHIFT;
  		x = -x;
-@@ -2834,6 +2943,16 @@ void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
+@@ -2897,6 +3006,16 @@ void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
  	intel_crtc->lut_b[regno] = blue >> 8;
  }
  
@@ -5813,7 +5791,7 @@ index 8b5af29..a865af5 100644
  static void intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
  				 u16 *blue, uint32_t size)
  {
-@@ -3101,12 +3220,319 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
+@@ -3164,12 +3283,319 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
  	return mode;
  }
  
@@ -6135,7 +6113,7 @@ index 8b5af29..a865af5 100644
  	drm_crtc_cleanup(crtc);
  	kfree(intel_crtc);
  }
-@@ -3118,6 +3544,7 @@ static const struct drm_crtc_helper_funcs intel_helper_funcs = {
+@@ -3181,6 +3607,7 @@ static const struct drm_crtc_helper_funcs intel_helper_funcs = {
  	.mode_set_base = intel_pipe_set_base,
  	.prepare = intel_crtc_prepare,
  	.commit = intel_crtc_commit,
@@ -6143,7 +6121,7 @@ index 8b5af29..a865af5 100644
  };
  
  static const struct drm_crtc_funcs intel_crtc_funcs = {
-@@ -3153,15 +3580,10 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
+@@ -3216,15 +3643,10 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
  	intel_crtc->dpms_mode = DRM_MODE_DPMS_OFF;
  	drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
  
@@ -6162,7 +6140,7 @@ index 8b5af29..a865af5 100644
  }
  
  int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
-@@ -3169,30 +3591,26 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
+@@ -3232,30 +3654,26 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
  {
  	drm_i915_private_t *dev_priv = dev->dev_private;
  	struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data;
@@ -6201,7 +6179,7 @@ index 8b5af29..a865af5 100644
  }
  
  struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
-@@ -3393,8 +3811,56 @@ static const struct drm_mode_config_funcs intel_mode_funcs = {
+@@ -3456,8 +3874,56 @@ static const struct drm_mode_config_funcs intel_mode_funcs = {
  	.fb_changed = intelfb_probe,
  };
  
@@ -6258,7 +6236,7 @@ index 8b5af29..a865af5 100644
  	int num_pipe;
  	int i;
  
-@@ -3429,15 +3895,47 @@ void intel_modeset_init(struct drm_device *dev)
+@@ -3492,15 +3958,47 @@ void intel_modeset_init(struct drm_device *dev)
  	DRM_DEBUG("%d display pipe%s available.\n",
  		  num_pipe, num_pipe > 1 ? "s" : "");
  
@@ -6341,7 +6319,7 @@ index 26a6227..dcfc53c 100644
  extern int intel_framebuffer_create(struct drm_device *dev,
  				    struct drm_mode_fb_cmd *mode_cmd,
 diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
-index 1d30802..2b0fe54 100644
+index 75a9b83..2b0fe54 100644
 --- a/drivers/gpu/drm/i915/intel_fb.c
 +++ b/drivers/gpu/drm/i915/intel_fb.c
 @@ -39,339 +39,36 @@
@@ -6426,7 +6404,7 @@ index 1d30802..2b0fe54 100644
 -	struct drm_framebuffer *fb = &intel_fb->base;
 -	int depth;
 -
--	if (var->pixclock == -1 || !var->pixclock)
+-	if (var->pixclock != 0)
 -		return -EINVAL;
 -
 -	/* Need to resize the fb object !!! */
@@ -6517,7 +6495,7 @@ index 1d30802..2b0fe54 100644
 -
 -	DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
 -
--	if (var->pixclock != -1) {
+-	if (var->pixclock != 0) {
 -
 -		DRM_ERROR("PIXEL CLOCK SET\n");
 -		return -EINVAL;
@@ -6941,7 +6919,7 @@ index 1d30802..2b0fe54 100644
 -	par->crtc_count = 1;
 -
 -	if (new_fb) {
--		info->var.pixclock = -1;
+-		info->var.pixclock = 0;
 -		if (register_framebuffer(info) < 0)
 -			return -EINVAL;
 -	} else
@@ -7095,7 +7073,7 @@ index 1d30802..2b0fe54 100644
 -	par->crtc_count = crtc_count;
 -
 -	if (new_fb) {
--		info->var.pixclock = -1;
+-		info->var.pixclock = 0;
 -		if (register_framebuffer(info) < 0)
 -			return -EINVAL;
 -	} else
@@ -64808,7 +64786,7 @@ index 0000000..797972e
 +};
 +#endif
 diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
-index ec383ed..cb2f16a 100644
+index f1d6d3d..fc5101a 100644
 --- a/drivers/gpu/drm/radeon/radeon_fb.c
 +++ b/drivers/gpu/drm/radeon/radeon_fb.c
 @@ -28,15 +28,7 @@
@@ -64910,7 +64888,7 @@ index ec383ed..cb2f16a 100644
 -	struct drm_framebuffer *fb = &rfb->base;
 -	int depth;
 -
--	if (var->pixclock == -1 || !var->pixclock) {
+-	if (var->pixclock != 0) {
 -		return -EINVAL;
 -	}
 -	/* Need to resize the fb object !!! */
@@ -65024,7 +65002,7 @@ index ec383ed..cb2f16a 100644
 -	int ret;
 -	int i;
 -
--	if (var->pixclock != -1) {
+-	if (var->pixclock != 0) {
 -		DRM_ERROR("PIXEL CLCOK SET\n");
 -		return -EINVAL;
 -	}
@@ -65457,7 +65435,7 @@ index ec383ed..cb2f16a 100644
  	fb->fbdev = info;
  	rfbdev->rfb = rfb;
  	rfbdev->rdev = rdev;
-@@ -726,148 +303,33 @@ out:
+@@ -726,148 +303,34 @@ out:
  	return ret;
  }
  
@@ -65567,7 +65545,7 @@ index ec383ed..cb2f16a 100644
 -	rfbdev->crtc_count = crtc_count;
 -
 -	if (new_fb) {
--		info->var.pixclock = -1;
+-		info->var.pixclock = 0;
 -		if (register_framebuffer(info) < 0)
 -			return -EINVAL;
 -	} else {
@@ -65584,7 +65562,7 @@ index ec383ed..cb2f16a 100644
 -	panic_mode = *modeset;
 -	atomic_notifier_chain_register(&panic_notifier_list, &paniced);
 -	printk(KERN_INFO "registered panic notifier\n");
--
+ 
  	return 0;
  }
  
@@ -65622,7 +65600,7 @@ index ec383ed..cb2f16a 100644
  
  int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
  {
-@@ -880,16 +342,17 @@ int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
+@@ -880,16 +343,17 @@ int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
  	}
  	info = fb->fbdev;
  	if (info) {
@@ -95950,7 +95928,7 @@ index ae304cc..1f90841 100644
  struct drm_mode_get_connector {
  
 diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h
-index 8535084..923361b 100644
+index 3f6e545..e6f3b12 100644
 --- a/include/drm/drm_pciids.h
 +++ b/include/drm/drm_pciids.h
 @@ -80,7 +80,7 @@

drm-nouveau.patch:
 drivers/gpu/drm/Kconfig                     |   56 
 drivers/gpu/drm/Makefile                    |    2 
 drivers/gpu/drm/i2c/Makefile                |    4 
 drivers/gpu/drm/i2c/ch7006_drv.c            |  536 
 drivers/gpu/drm/i2c/ch7006_mode.c           |  468 
 drivers/gpu/drm/i2c/ch7006_priv.h           |  344 
 drivers/gpu/drm/nouveau/Makefile            |   30 
 drivers/gpu/drm/nouveau/nouveau_acpi.c      |  125 
 drivers/gpu/drm/nouveau/nouveau_backlight.c |  155 
 drivers/gpu/drm/nouveau/nouveau_bios.c      | 6050 ++++++
 drivers/gpu/drm/nouveau/nouveau_bios.h      |  289 
 drivers/gpu/drm/nouveau/nouveau_bo.c        |  661 
 drivers/gpu/drm/nouveau/nouveau_calc.c      |  478 
 drivers/gpu/drm/nouveau/nouveau_channel.c   |  468 
 drivers/gpu/drm/nouveau/nouveau_connector.c |  812 
 drivers/gpu/drm/nouveau/nouveau_connector.h |   54 
 drivers/gpu/drm/nouveau/nouveau_crtc.h      |   95 
 drivers/gpu/drm/nouveau/nouveau_debugfs.c   |  155 
 drivers/gpu/drm/nouveau/nouveau_display.c   |  115 
 drivers/gpu/drm/nouveau/nouveau_dma.c       |  206 
 drivers/gpu/drm/nouveau/nouveau_dma.h       |  157 
 drivers/gpu/drm/nouveau/nouveau_drv.c       |  413 
 drivers/gpu/drm/nouveau/nouveau_drv.h       | 1270 +
 drivers/gpu/drm/nouveau/nouveau_encoder.h   |   66 
 drivers/gpu/drm/nouveau/nouveau_fb.h        |   47 
 drivers/gpu/drm/nouveau/nouveau_fbcon.c     |  382 
 drivers/gpu/drm/nouveau/nouveau_fbcon.h     |   47 
 drivers/gpu/drm/nouveau/nouveau_fence.c     |  262 
 drivers/gpu/drm/nouveau/nouveau_gem.c       |  976 +
 drivers/gpu/drm/nouveau/nouveau_hw.c        | 1080 +
 drivers/gpu/drm/nouveau/nouveau_hw.h        |  455 
 drivers/gpu/drm/nouveau/nouveau_i2c.c       |  257 
 drivers/gpu/drm/nouveau/nouveau_i2c.h       |   45 
 drivers/gpu/drm/nouveau/nouveau_ioc32.c     |   72 
 drivers/gpu/drm/nouveau/nouveau_irq.c       |  702 
 drivers/gpu/drm/nouveau/nouveau_mem.c       |  583 
 drivers/gpu/drm/nouveau/nouveau_notifier.c  |  196 
 drivers/gpu/drm/nouveau/nouveau_object.c    | 1294 +
 drivers/gpu/drm/nouveau/nouveau_reg.h       |  788 
 drivers/gpu/drm/nouveau/nouveau_sgdma.c     |  321 
 drivers/gpu/drm/nouveau/nouveau_state.c     |  919 
 drivers/gpu/drm/nouveau/nouveau_ttm.c       |  131 
 drivers/gpu/drm/nouveau/nv04_crtc.c         | 1002 +
 drivers/gpu/drm/nouveau/nv04_cursor.c       |   70 
 drivers/gpu/drm/nouveau/nv04_dac.c          |  528 
 drivers/gpu/drm/nouveau/nv04_dfp.c          |  621 
 drivers/gpu/drm/nouveau/nv04_display.c      |  293 
 drivers/gpu/drm/nouveau/nv04_fb.c           |   21 
 drivers/gpu/drm/nouveau/nv04_fbcon.c        |  316 
 drivers/gpu/drm/nouveau/nv04_fifo.c         |  271 
 drivers/gpu/drm/nouveau/nv04_graph.c        |  579 
 drivers/gpu/drm/nouveau/nv04_instmem.c      |  208 
 drivers/gpu/drm/nouveau/nv04_mc.c           |   20 
 drivers/gpu/drm/nouveau/nv04_timer.c        |   51 
 drivers/gpu/drm/nouveau/nv04_tv.c           |  305 
 drivers/gpu/drm/nouveau/nv10_fb.c           |   24 
 drivers/gpu/drm/nouveau/nv10_fifo.c         |  260 
 drivers/gpu/drm/nouveau/nv10_graph.c        |  892 
 drivers/gpu/drm/nouveau/nv17_gpio.c         |   92 
 drivers/gpu/drm/nouveau/nv17_tv.c           |  681 
 drivers/gpu/drm/nouveau/nv17_tv.h           |  156 
 drivers/gpu/drm/nouveau/nv17_tv_modes.c     |  583 
 drivers/gpu/drm/nouveau/nv20_graph.c        |  780 
 drivers/gpu/drm/nouveau/nv40_fb.c           |   62 
 drivers/gpu/drm/nouveau/nv40_fifo.c         |  314 
 drivers/gpu/drm/nouveau/nv40_graph.c        | 2915 +++
 drivers/gpu/drm/nouveau/nv40_mc.c           |   38 
 drivers/gpu/drm/nouveau/nv50_crtc.c         |  769 
 drivers/gpu/drm/nouveau/nv50_cursor.c       |  156 
 drivers/gpu/drm/nouveau/nv50_dac.c          |  304 
 drivers/gpu/drm/nouveau/nv50_display.c      | 1012 +
 drivers/gpu/drm/nouveau/nv50_display.h      |   46 
 drivers/gpu/drm/nouveau/nv50_evo.h          |  113 
 drivers/gpu/drm/nouveau/nv50_fbcon.c        |  273 
 drivers/gpu/drm/nouveau/nv50_fifo.c         |  494 
 drivers/gpu/drm/nouveau/nv50_graph.c        |  470 
 drivers/gpu/drm/nouveau/nv50_grctx.h        |26832 ++++++++++++++++++++++++++++
 drivers/gpu/drm/nouveau/nv50_instmem.c      |  509 
 drivers/gpu/drm/nouveau/nv50_mc.c           |   40 
 drivers/gpu/drm/nouveau/nv50_sor.c          |  269 
 drivers/gpu/drm/nouveau/nvreg.h             |  535 
 drivers/gpu/drm/ttm/ttm_bo.c                |    4 
 include/drm/Kbuild                          |    1 
 include/drm/i2c/ch7006.h                    |   86 
 include/drm/nouveau_drm.h                   |  220 
 85 files changed, 64781 insertions(+)

Index: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.8.6.25
retrieving revision 1.8.6.26
diff -u -p -r1.8.6.25 -r1.8.6.26
--- drm-nouveau.patch	9 Dec 2009 21:44:01 -0000	1.8.6.25
+++ drm-nouveau.patch	23 Dec 2009 21:12:34 -0000	1.8.6.26
@@ -84,10 +84,10 @@ index 0000000..6d2abaf
 +obj-$(CONFIG_DRM_I2C_CH7006) += ch7006.o
 diff --git a/drivers/gpu/drm/i2c/ch7006_drv.c b/drivers/gpu/drm/i2c/ch7006_drv.c
 new file mode 100644
-index 0000000..9422a74
+index 0000000..81681a0
 --- /dev/null
 +++ b/drivers/gpu/drm/i2c/ch7006_drv.c
-@@ -0,0 +1,531 @@
+@@ -0,0 +1,536 @@
 +/*
 + * Copyright (C) 2009 Francisco Jerez.
 + * All Rights Reserved.
@@ -498,6 +498,11 @@ index 0000000..9422a74
 +
 +	ch7006_info(client, "Detected version ID: %x\n", val);
 +
++	/* I don't know what this is for, but otherwise I get no
++	 * signal.
++	 */
++	ch7006_write(client, 0x3d, 0x0);
++
 +	return 0;
 +
 +fail:
@@ -621,10 +626,10 @@ index 0000000..9422a74
 +module_exit(ch7006_exit);
 diff --git a/drivers/gpu/drm/i2c/ch7006_mode.c b/drivers/gpu/drm/i2c/ch7006_mode.c
 new file mode 100644
-index 0000000..87f5445
+index 0000000..e447dfb
 --- /dev/null
 +++ b/drivers/gpu/drm/i2c/ch7006_mode.c
-@@ -0,0 +1,473 @@
+@@ -0,0 +1,468 @@
 +/*
 + * Copyright (C) 2009 Francisco Jerez.
 + * All Rights Reserved.
@@ -1054,11 +1059,6 @@ index 0000000..87f5445
 +	ch7006_load_reg(client, state, CH7006_SUBC_INC7);
 +	ch7006_load_reg(client, state, CH7006_PLL_CONTROL);
 +	ch7006_load_reg(client, state, CH7006_CALC_SUBC_INC0);
-+
-+	/* I don't know what this is for, but otherwise I get no
-+	 * signal.
-+	 */
-+	ch7006_write(client, 0x3d, 0x0);
 +}
 +
 +void ch7006_state_save(struct i2c_client *client,
@@ -8129,10 +8129,10 @@ index 0000000..1d5f10b
 +#endif
 diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
 new file mode 100644
-index 0000000..8d1383a
+index 0000000..f067fc3
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
-@@ -0,0 +1,663 @@
+@@ -0,0 +1,661 @@
 +/*
 + * Copyright 2007 Dave Airlied
 + * All Rights Reserved.
@@ -8572,11 +8572,8 @@ index 0000000..8d1383a
 +	int ret;
 +
 +	chan = nvbo->channel;
-+	if (!chan || nvbo->tile_flags || nvbo->no_vm) {
++	if (!chan || nvbo->tile_flags || nvbo->no_vm)
 +		chan = dev_priv->channel;
-+		if (!chan)
-+			return -EINVAL;
-+	}
 +
 +	src_offset = old_mem->mm_node->start << PAGE_SHIFT;
 +	dst_offset = new_mem->mm_node->start << PAGE_SHIFT;
@@ -8733,7 +8730,8 @@ index 0000000..8d1383a
 +			return ret;
 +	}
 +
-+	if (dev_priv->init_state != NOUVEAU_CARD_INIT_DONE)
++	if (dev_priv->init_state != NOUVEAU_CARD_INIT_DONE ||
++	    !dev_priv->channel)
 +		return ttm_bo_move_memcpy(bo, evict, no_wait, new_mem);
 +
 +	if (old_mem->mem_type == TTM_PL_SYSTEM && !bo->ttm) {
@@ -11392,7 +11390,7 @@ index 0000000..04e85d8
 +#endif
 diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.c b/drivers/gpu/drm/nouveau/nouveau_drv.c
 new file mode 100644
-index 0000000..d8de3f6
+index 0000000..e0e8e84
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_drv.c
 @@ -0,0 +1,413 @@
@@ -11675,7 +11673,7 @@ index 0000000..d8de3f6
 +
 +		for (i = 0; i < dev_priv->engine.fifo.channels; i++) {
 +			chan = dev_priv->fifos[i];
-+			if (!chan)
++			if (!chan || !chan->pushbuf_bo)
 +				continue;
 +
 +			for (j = 0; j < NOUVEAU_DMA_SKIPS; j++)
@@ -13212,10 +13210,10 @@ index 0000000..4a3f31a
 +#endif /* __NOUVEAU_FB_H__ */
 diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
 new file mode 100644
-index 0000000..36e8c5e
+index 0000000..d860bdc
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
-@@ -0,0 +1,380 @@
+@@ -0,0 +1,382 @@
 +/*
 + * Copyright © 2007 David Airlie
 + *
@@ -13276,7 +13274,7 @@ index 0000000..36e8c5e
 +	struct nouveau_channel *chan = dev_priv->channel;
 +	int ret, i;
 +
-+	if (!chan->accel_done ||
++	if (!chan || !chan->accel_done ||
 +	    info->state != FBINFO_STATE_RUNNING ||
 +	    info->flags & FBINFO_HWACCEL_DISABLED)
 +		return 0;
@@ -13536,14 +13534,16 @@ index 0000000..36e8c5e
 +	par->nouveau_fb = nouveau_fb;
 +	par->dev = dev;
 +
-+	switch (dev_priv->card_type) {
-+	case NV_50:
-+		nv50_fbcon_accel_init(info);
-+		break;
-+	default:
-+		nv04_fbcon_accel_init(info);
-+		break;
-+	};
++	if (dev_priv->channel) {
++		switch (dev_priv->card_type) {
++		case NV_50:
++			nv50_fbcon_accel_init(info);
++			break;
++		default:
++			nv04_fbcon_accel_init(info);
++			break;
++		};
++	}
 +
 +	nouveau_fbcon_zfill(dev);
 +
@@ -20760,10 +20760,10 @@ index 0000000..4c7f1e4
 +}
 diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
 new file mode 100644
-index 0000000..0de87b8
+index 0000000..27c4d48
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nouveau_state.c
-@@ -0,0 +1,865 @@
+@@ -0,0 +1,919 @@
 +/*
 + * Copyright 2005 Stephane Marchesin
 + * Copyright 2008 Stuart Bennett
@@ -20790,11 +20790,12 @@ index 0000000..0de87b8
 + */
 +
 +#include <linux/swab.h>
-+
 +#include "drmP.h"
 +#include "drm.h"
 +#include "drm_sarea.h"
 +#include "drm_crtc_helper.h"
++#include <linux/vgaarb.h>
++
 +#include "nouveau_drv.h"
 +#include "nouveau_drm.h"
 +#include "nv50_display.h"
@@ -21098,12 +21099,67 @@ index 0000000..0de87b8
 +	return 0;
 +}
 +
++static unsigned int
++nouveau_vga_set_decode(void *priv, bool state)
++{
++	if (state)
++		return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
++		       VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
++	else
++		return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
++}
++
++static int
++nouveau_card_init_channel(struct drm_device *dev)
++{
++	struct drm_nouveau_private *dev_priv = dev->dev_private;
++	struct nouveau_gpuobj *gpuobj;
++	int ret;
++
++	ret = nouveau_channel_alloc(dev, &dev_priv->channel,
++				    (struct drm_file *)-2,
++				    NvDmaFB, NvDmaTT);
++	if (ret)
++		return ret;
++
++	gpuobj = NULL;
++	ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY,
++				     0, nouveau_mem_fb_amount(dev),
++				     NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM,
++				     &gpuobj);
++	if (ret)
++		goto out_err;
++
++	ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaVRAM,
++				     gpuobj, NULL);
++	if (ret)
++		goto out_err;
++
++	gpuobj = NULL;
++	ret = nouveau_gpuobj_gart_dma_new(dev_priv->channel, 0,
++					  dev_priv->gart_info.aper_size,
++					  NV_DMA_ACCESS_RW, &gpuobj, NULL);
++	if (ret)
++		goto out_err;
++
++	ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaGART,
++				     gpuobj, NULL);
++	if (ret)
++		goto out_err;
++
++	return 0;
++out_err:
++	nouveau_gpuobj_del(dev, &gpuobj);
++	nouveau_channel_free(dev_priv->channel);
++	dev_priv->channel = NULL;
++	return ret;
++}
++
 +int
 +nouveau_card_init(struct drm_device *dev)
 +{
 +	struct drm_nouveau_private *dev_priv = dev->dev_private;
 +	struct nouveau_engine *engine;
-+	struct nouveau_gpuobj *gpuobj;
 +	int ret;
 +
 +	NV_DEBUG(dev, "prev state = %d\n", dev_priv->init_state);
@@ -21111,10 +21167,12 @@ index 0000000..0de87b8
 +	if (dev_priv->init_state == NOUVEAU_CARD_INIT_DONE)
 +		return 0;
 +
++	vga_client_register(dev->pdev, dev, NULL, nouveau_vga_set_decode);
++
 +	/* Initialise internal driver API hooks */
 +	ret = nouveau_init_engine_ptrs(dev);
 +	if (ret)
-+		return ret;
++		goto out;
 +	engine = &dev_priv->engine;
 +	dev_priv->init_state = NOUVEAU_CARD_INIT_FAILED;
 +
@@ -21122,12 +21180,12 @@ index 0000000..0de87b8
 +	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
 +		ret = nouveau_bios_init(dev);
 +		if (ret)
-+			return ret;
++			goto out;
 +	}
 +
 +	ret = nouveau_gpuobj_early_init(dev);
 +	if (ret)
-+		return ret;
++		goto out_bios;
 +
 +	/* Initialise instance memory, must happen before mem_init so we
 +	 * know exactly how much VRAM we're able to use for "normal"
@@ -21135,100 +21193,68 @@ index 0000000..0de87b8
 +	 */
 +	ret = engine->instmem.init(dev);
 +	if (ret)
-+		return ret;
++		goto out_gpuobj_early;
 +
 +	/* Setup the memory manager */
 +	ret = nouveau_mem_init(dev);
 +	if (ret)
-+		return ret;
++		goto out_instmem;
 +
 +	ret = nouveau_gpuobj_init(dev);
 +	if (ret)
-+		return ret;
++		goto out_mem;
 +
 +	/* PMC */
 +	ret = engine->mc.init(dev);
 +	if (ret)
-+		return ret;
++		goto out_gpuobj;
 +
 +	/* PTIMER */
 +	ret = engine->timer.init(dev);
 +	if (ret)
-+		return ret;
++		goto out_mc;
 +
 +	/* PFB */
 +	ret = engine->fb.init(dev);
 +	if (ret)
-+		return ret;
++		goto out_timer;
 +
 +	/* PGRAPH */
 +	ret = engine->graph.init(dev);
 +	if (ret)
-+		return ret;
++		goto out_fb;
 +
 +	/* PFIFO */
 +	ret = engine->fifo.init(dev);
 +	if (ret)
-+		return ret;
++		goto out_graph;
 +
 +	/* this call irq_preinstall, register irq handler and
 +	 * call irq_postinstall
 +	 */
 +	ret = drm_irq_install(dev);
 +	if (ret)
-+		return ret;
++		goto out_fifo;
 +
 +	ret = drm_vblank_init(dev, 0);
 +	if (ret)
-+		return ret;
++		goto out_irq;
 +
 +	/* what about PVIDEO/PCRTC/PRAMDAC etc? */
 +
-+	ret = nouveau_channel_alloc(dev, &dev_priv->channel,
-+				    (struct drm_file *)-2,
-+				    NvDmaFB, NvDmaTT);
-+	if (ret)
-+		return ret;
-+
-+	gpuobj = NULL;
-+	ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY,
-+				     0, nouveau_mem_fb_amount(dev),
-+				     NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM,
-+				     &gpuobj);
-+	if (ret)
-+		return ret;
-+
-+	ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaVRAM,
-+				     gpuobj, NULL);
-+	if (ret) {
-+		nouveau_gpuobj_del(dev, &gpuobj);
-+		return ret;
-+	}
-+
-+	gpuobj = NULL;
-+	ret = nouveau_gpuobj_gart_dma_new(dev_priv->channel, 0,
-+					  dev_priv->gart_info.aper_size,
-+					  NV_DMA_ACCESS_RW, &gpuobj, NULL);
-+	if (ret)
-+		return ret;
-+
-+	ret = nouveau_gpuobj_ref_add(dev, dev_priv->channel, NvDmaGART,
-+				     gpuobj, NULL);
-+	if (ret) {
-+		nouveau_gpuobj_del(dev, &gpuobj);
-+		return ret;
++	if (!engine->graph.accel_blocked) {
++		ret = nouveau_card_init_channel(dev);
++		if (ret)
++			goto out_irq;
 +	}
 +
 +	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
-+		if (dev_priv->card_type >= NV_50) {
++		if (dev_priv->card_type >= NV_50)
 +			ret = nv50_display_create(dev);
-+			if (ret)
-+				return ret;
-+		} else {
++		else
 +			ret = nv04_display_create(dev);
-+			if (ret)
-+				return ret;
-+		}
++		if (ret)
++			goto out_irq;
 +	}
 +
 +	ret = nouveau_backlight_init(dev);
@@ -21241,6 +21267,32 @@ index 0000000..0de87b8
 +		drm_helper_initial_config(dev);
 +
 +	return 0;
++
++out_irq:
++	drm_irq_uninstall(dev);
++out_fifo:
++	engine->fifo.takedown(dev);
++out_graph:
++	engine->graph.takedown(dev);
++out_fb:
++	engine->fb.takedown(dev);
++out_timer:
++	engine->timer.takedown(dev);
++out_mc:
++	engine->mc.takedown(dev);
++out_gpuobj:
++	nouveau_gpuobj_takedown(dev);
++out_mem:
++	nouveau_mem_close(dev);
++out_instmem:
++	engine->instmem.takedown(dev);
++out_gpuobj_early:
++	nouveau_gpuobj_late_takedown(dev);
++out_bios:
++	nouveau_bios_takedown(dev);
++out:
++	vga_client_register(dev->pdev, NULL, NULL, NULL);
++	return ret;
 +}
 +
 +static void nouveau_card_takedown(struct drm_device *dev)
@@ -21279,6 +21331,8 @@ index 0000000..0de87b8
 +		nouveau_gpuobj_late_takedown(dev);
 +		nouveau_bios_takedown(dev);
 +
++		vga_client_register(dev->pdev, NULL, NULL, NULL);
++
 +		dev_priv->init_state = NOUVEAU_CARD_INIT_DOWN;
 +	}
 +}
@@ -24938,7 +24992,7 @@ index 0000000..0c3cd53
 +
 diff --git a/drivers/gpu/drm/nouveau/nv04_graph.c b/drivers/gpu/drm/nouveau/nv04_graph.c
 new file mode 100644
-index 0000000..396ee92
+index 0000000..d561d77
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv04_graph.c
 @@ -0,0 +1,579 @@
@@ -25487,7 +25541,7 @@ index 0000000..396ee92
 +
 +	nv_wi32(dev, instance, tmp);
 +	nv_wr32(dev, NV04_PGRAPH_CTX_SWITCH1, tmp);
-+	nv_wr32(dev, NV04_PGRAPH_CTX_CACHE1 + subc, tmp);
++	nv_wr32(dev, NV04_PGRAPH_CTX_CACHE1 + (subc<<2), tmp);
 +	return 0;
 +}
 +
@@ -30035,10 +30089,10 @@ index 0000000..b4f19cc
 +}
 diff --git a/drivers/gpu/drm/nouveau/nv40_graph.c b/drivers/gpu/drm/nouveau/nv40_graph.c
 new file mode 100644
-index 0000000..76c6f21
+index 0000000..b946e43
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv40_graph.c
-@@ -0,0 +1,2240 @@
+@@ -0,0 +1,2915 @@
 +/*
 + * Copyright (C) 2007 Ben Skeggs.
 + * All Rights Reserved.
@@ -31480,6 +31534,655 @@ index 0000000..76c6f21
 +		nv_wo32(dev, ctx, i/4, 0x3f800000);
 +}
 +
++static void
++nv63_graph_context_init(struct drm_device *dev, struct nouveau_gpuobj *ctx)
++{
++	int i;
++
++	nv_wo32(dev, ctx, 0x00000/4, ctx->im_pramin->start);
++	nv_wo32(dev, ctx, 0x00020/4, 0x00000008);
++	nv_wo32(dev, ctx, 0x00024/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00174/4, 0x00040000);
++	nv_wo32(dev, ctx, 0x00184/4, 0x55555555);
++	nv_wo32(dev, ctx, 0x00188/4, 0x55555555);
++	nv_wo32(dev, ctx, 0x0018c/4, 0x55555555);
++	nv_wo32(dev, ctx, 0x00190/4, 0x55555555);
++	nv_wo32(dev, ctx, 0x001b4/4, 0x0000ffff);
++	nv_wo32(dev, ctx, 0x001b8/4, 0x0000ffff);
++	nv_wo32(dev, ctx, 0x001d8/4, 0x20010001);
++	nv_wo32(dev, ctx, 0x001dc/4, 0x0f73ef00);
++	nv_wo32(dev, ctx, 0x001e4/4, 0x02008821);
++	nv_wo32(dev, ctx, 0x00214/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00218/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x0021c/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00220/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00224/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00228/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x0022c/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00230/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00234/4, 0x00000040);
++	nv_wo32(dev, ctx, 0x00238/4, 0x00000040);
++	nv_wo32(dev, ctx, 0x0023c/4, 0x00000040);
++	nv_wo32(dev, ctx, 0x00244/4, 0x00000040);
++	nv_wo32(dev, ctx, 0x00390/4, 0x0b0b0b0c);
++	nv_wo32(dev, ctx, 0x003bc/4, 0x00001010);
++	nv_wo32(dev, ctx, 0x003c8/4, 0x00000111);
++	nv_wo32(dev, ctx, 0x003cc/4, 0x00080060);
++	nv_wo32(dev, ctx, 0x003e8/4, 0x00000080);
++	nv_wo32(dev, ctx, 0x003ec/4, 0xffff0000);
++	nv_wo32(dev, ctx, 0x003f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00404/4, 0x46400000);
++	nv_wo32(dev, ctx, 0x00414/4, 0xffff0000);
++	nv_wo32(dev, ctx, 0x00420/4, 0x0fff0000);
++	nv_wo32(dev, ctx, 0x00424/4, 0x0fff0000);
++	nv_wo32(dev, ctx, 0x0042c/4, 0x00011100);
++	nv_wo32(dev, ctx, 0x00448/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x0044c/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00450/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00454/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00458/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x0045c/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00460/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00464/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00468/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x0046c/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00470/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00474/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00478/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x0047c/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00480/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00484/4, 0x07ff0000);
++	nv_wo32(dev, ctx, 0x00490/4, 0x4b7fffff);
++	nv_wo32(dev, ctx, 0x004b8/4, 0x30201000);
++	nv_wo32(dev, ctx, 0x004bc/4, 0x70605040);
++	nv_wo32(dev, ctx, 0x004c0/4, 0xb8a89888);
++	nv_wo32(dev, ctx, 0x004c4/4, 0xf8e8d8c8);
++	nv_wo32(dev, ctx, 0x004d8/4, 0x40100000);
++	nv_wo32(dev, ctx, 0x004f4/4, 0x0000ffff);
++	nv_wo32(dev, ctx, 0x00528/4, 0x435185d6);
++	nv_wo32(dev, ctx, 0x0052c/4, 0x2155b699);
++	nv_wo32(dev, ctx, 0x00530/4, 0xfedcba98);
++	nv_wo32(dev, ctx, 0x00534/4, 0x00000098);
++	nv_wo32(dev, ctx, 0x00544/4, 0xffffffff);
++	nv_wo32(dev, ctx, 0x00548/4, 0x00ff7000);
++	nv_wo32(dev, ctx, 0x0054c/4, 0x0000ffff);
++	nv_wo32(dev, ctx, 0x0055c/4, 0x00ff0000);
++	nv_wo32(dev, ctx, 0x00598/4, 0x00ffff00);
++	nv_wo32(dev, ctx, 0x005dc/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005e0/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005e4/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005e8/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005ec/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005f0/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005f4/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005f8/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x005fc/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x00600/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x00604/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x00608/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x0060c/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x00610/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x00614/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x00618/4, 0x00018488);
++	nv_wo32(dev, ctx, 0x0061c/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00620/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00624/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00628/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x0062c/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00630/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00634/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00638/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x0063c/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00640/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00644/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00648/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x0064c/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00650/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00654/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x00658/4, 0x00028202);
++	nv_wo32(dev, ctx, 0x0069c/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006a0/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006a4/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006a8/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006ac/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006b0/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006b4/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006b8/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006bc/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006c0/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006c4/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006c8/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006cc/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006d0/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006d4/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006d8/4, 0x0000aae4);
++	nv_wo32(dev, ctx, 0x006dc/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006e0/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006e4/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006e8/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006ec/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006f0/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006f4/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006f8/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x006fc/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x00700/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x00704/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x00708/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x0070c/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x00710/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x00714/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x00718/4, 0x01012000);
++	nv_wo32(dev, ctx, 0x0071c/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00720/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00724/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00728/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x0072c/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00730/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00734/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00738/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x0073c/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00740/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00744/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00748/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x0074c/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00750/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00754/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00758/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x0079c/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007a0/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007a4/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007a8/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007ac/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007b0/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007b4/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007b8/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007bc/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007c0/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007c4/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007c8/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007cc/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007d0/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007d4/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x007d8/4, 0x00100008);
++	nv_wo32(dev, ctx, 0x0082c/4, 0x0001bc80);
++	nv_wo32(dev, ctx, 0x00830/4, 0x0001bc80);
++	nv_wo32(dev, ctx, 0x00834/4, 0x0001bc80);
++	nv_wo32(dev, ctx, 0x00838/4, 0x0001bc80);
++	nv_wo32(dev, ctx, 0x0083c/4, 0x00000202);
++	nv_wo32(dev, ctx, 0x00840/4, 0x00000202);
++	nv_wo32(dev, ctx, 0x00844/4, 0x00000202);
++	nv_wo32(dev, ctx, 0x00848/4, 0x00000202);
++	nv_wo32(dev, ctx, 0x0085c/4, 0x00000008);
++	nv_wo32(dev, ctx, 0x00860/4, 0x00000008);
++	nv_wo32(dev, ctx, 0x00864/4, 0x00000008);
++	nv_wo32(dev, ctx, 0x00868/4, 0x00000008);
++	nv_wo32(dev, ctx, 0x0087c/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00880/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00884/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x00888/4, 0x00080008);
++	nv_wo32(dev, ctx, 0x0089c/4, 0x00000002);
++	nv_wo32(dev, ctx, 0x008b0/4, 0x00000020);
++	nv_wo32(dev, ctx, 0x008b4/4, 0x030c30c3);
++	nv_wo32(dev, ctx, 0x008b8/4, 0x00011001);
++	nv_wo32(dev, ctx, 0x008c4/4, 0x3e020200);
++	nv_wo32(dev, ctx, 0x008c8/4, 0x00ffffff);
++	nv_wo32(dev, ctx, 0x008cc/4, 0x0c103f00);
++	nv_wo32(dev, ctx, 0x008d8/4, 0x00040000);
++	nv_wo32(dev, ctx, 0x00910/4, 0x00008100);
++	nv_wo32(dev, ctx, 0x0099c/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x009e0/4, 0x00001001);
++	nv_wo32(dev, ctx, 0x009e8/4, 0x00000003);
++	nv_wo32(dev, ctx, 0x009ec/4, 0x00888001);
++	nv_wo32(dev, ctx, 0x00a50/4, 0x00000005);
++	nv_wo32(dev, ctx, 0x00a5c/4, 0x0000ffff);
++	nv_wo32(dev, ctx, 0x00a78/4, 0x00005555);
++	nv_wo32(dev, ctx, 0x00a7c/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00a84/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x00f48/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f50/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f58/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f60/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f68/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f70/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f78/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f80/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f88/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f90/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00f98/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00fa0/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00fa8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00fb0/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00fb8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x00fc0/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x02d08/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02d20/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02d38/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02d50/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02d68/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02d80/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02d98/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02db0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02dc8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02de0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02df8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02e10/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02e28/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02e40/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02e58/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02e70/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02e88/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02ea0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02eb8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02ed0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02ee8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f00/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f18/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f30/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f48/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f60/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f78/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02f90/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02fa8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02fc0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02fd8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x02ff0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03008/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03020/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03038/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03050/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03068/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03080/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03098/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x030b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x030c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x030e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x030f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03110/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03128/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03140/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03158/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03170/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03188/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x031a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x031b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x031d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x031e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03200/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03218/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03230/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03248/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03260/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03278/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03290/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x032a8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x032c0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x032d8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x032f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03308/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03320/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03338/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03350/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03368/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03380/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03398/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x033b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x033c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x033e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x033f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03410/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03428/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03440/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03458/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03470/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03488/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x034a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x034b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x034d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x034e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03500/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03518/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03530/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03548/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03560/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03578/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03590/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x035a8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x035c0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x035d8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x035f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03608/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03620/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03638/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03650/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03668/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03680/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03698/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x036b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x036c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x036e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x036f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03710/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03728/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03740/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03758/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03770/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03788/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x037a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x037b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x037d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x037e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03800/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03818/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03830/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03848/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03860/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03878/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03890/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x038a8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x038c0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x038d8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x038f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03908/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03920/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03938/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03950/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03968/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03980/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03998/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x039b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x039c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x039e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x039f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03a10/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03a28/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03a40/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03a58/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03a70/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03a88/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03aa0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ab8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ad0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ae8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b00/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b18/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b30/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b48/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b60/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b78/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03b90/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ba8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03bc0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03bd8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03bf0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c08/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c20/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c38/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c50/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c68/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c80/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03c98/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03cb0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03cc8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ce0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03cf8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03d10/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03d28/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03d40/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03d58/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03d70/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03d88/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03da0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03db8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03dd0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03de8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e00/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e18/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e30/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e48/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e60/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e78/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03e90/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ea8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ec0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ed8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ef0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f08/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f20/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f38/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f50/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f68/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f80/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03f98/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03fb0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03fc8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03fe0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x03ff8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04010/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04028/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04040/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04058/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04070/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04088/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x040a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x040b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x040d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x040e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04100/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04118/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04130/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04148/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04160/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04178/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04190/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x041a8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x041c0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x041d8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x041f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04208/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04220/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04238/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04250/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04268/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04280/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04298/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x042b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x042c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x042e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x042f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04310/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04328/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04340/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04358/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04370/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04388/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x043a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x043b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x043d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x043e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04400/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04418/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04430/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04448/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04460/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04478/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04490/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x044a8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x044c0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x044d8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x044f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04508/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04520/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04538/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04550/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04568/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04580/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04598/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x045b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x045c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x045e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x045f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04610/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04628/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04640/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04658/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04670/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04688/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x046a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x046b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x046d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x046e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04700/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04718/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04730/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04748/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04760/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04778/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04790/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x047a8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x047c0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x047d8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x047f0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04808/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04820/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04838/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04850/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04868/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04880/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04898/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x048b0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x048c8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x048e0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x048f8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04910/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04928/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04940/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04958/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04970/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04988/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x049a0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x049b8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x049d0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x049e8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a00/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a18/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a30/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a48/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a60/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a78/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04a90/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04aa8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ac0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ad8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04af0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b08/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b20/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b38/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b50/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b68/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b80/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04b98/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04bb0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04bc8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04be0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04bf8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04c10/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04c28/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04c40/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04c58/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04c70/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04c88/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ca0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04cb8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04cd0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ce8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d00/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d18/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d30/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d48/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d60/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d78/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04d90/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04da8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04dc0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04dd8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04df0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e08/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e20/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e38/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e50/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e68/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e80/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04e98/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04eb0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ec8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ee0/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04ef8/4, 0x00000001);
++	nv_wo32(dev, ctx, 0x04f08/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f18/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f28/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f38/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f48/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f58/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f68/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f78/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f88/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04f98/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04fa8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04fb8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04fc8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04fd8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04fe8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x04ff8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05008/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05018/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05028/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05038/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05048/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05058/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05068/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05078/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05088/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05098/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x050a8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x050b8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x050c8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x050d8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x050e8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x050f8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05108/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05118/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05128/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05138/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05148/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05158/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05168/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05178/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05188/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05198/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x051a8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x051b8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x051c8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x051d8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x051e8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x051f8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05208/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05218/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05228/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05238/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05248/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05258/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05268/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05278/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05288/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x05298/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x052a8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x052b8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x052c8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x052d8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x052e8/4, 0x3f800000);
++	nv_wo32(dev, ctx, 0x052f8/4, 0x3f800000);
++}
++
 +struct nouveau_channel *
 +nv40_graph_channel(struct drm_device *dev)
 +{
@@ -31552,6 +32255,9 @@ index 0000000..76c6f21
 +	case 0x4e:
 +		ctx_init = nv4e_graph_context_init;
 +		break;
++	case 0x63:
++		ctx_init = nv63_graph_context_init;
++		break;
 +	default:
 +		ctx_init = nv40_graph_context_init;
 +		break;
@@ -32000,6 +32706,26 @@ index 0000000..76c6f21
 +	~0
 +};
 +
++static uint32_t nv63_ctxprog[] = {
++	0x00401164, 0x00401105, 0x00400565, 0x00400706, 0x00406068, 0x00500060,
++	0x00600007, 0x00500060, 0x00700000, 0x00910880, 0x00901ffe, 0x01940000,
++	0x00200020, 0x0060000b, 0x00500069, 0x0060000c, 0x00401268, 0x00700080,
++	0x00200008, 0x0060000a, 0x00104029, 0x001e8051, 0x001040c5, 0x00128100,
++	0x00128120, 0x0014c140, 0x00118158, 0x0011415f, 0x0010c1c4, 0x001041c9,
++	0x0010c1dc, 0x00150210, 0x0012c225, 0x00108238, 0x0010823e, 0x0010427e,
++	0x00200049, 0x00100280, 0x00110400, 0x00105401, 0x00104d10, 0x00500060,
++	0x00405de6, 0x00148653, 0x00104668, 0x0010c66d, 0x00120682, 0x0011068b,
++	0x00168691, 0x001046ae, 0x001046b0, 0x001206b4, 0x001046c4, 0x001146c6,
++	0x001646cc, 0x001046e5, 0x001206e6, 0x001246f0, 0x002000c0, 0x00100700,
++	0x0010c3d7, 0x001043e1, 0x00500060, 0x00104800, 0x00108901, 0x00104910,
++	0x00124920, 0x0017c940, 0x00140965, 0x00144a00, 0x00104a11, 0x00108a14,
++	0x00110b00, 0x00110b04, 0x00120b08, 0x00134b2c, 0x0010cd00, 0x0010cd04,
++	0x00104d08, 0x00104d80, 0x00104e00, 0x00104f06, 0x0012d600, 0x00105c00,
++	0x00300000, 0x00200080, 0x00405800, 0x00200084, 0x00800001, 0x00200332,
++	0x0060000a, 0x00201320, 0x00800029, 0x00400200, 0x00406005, 0x00600009,
++	0x00700005, 0x00700006, 0x0060000e, ~0
++};
++
 +/*
 + * G70		0x47
 + * G71		0x49
@@ -32059,6 +32785,9 @@ index 0000000..76c6f21
 +	case 0x4e:
 +		ctxprog = nv4e_ctxprog;
 +		break;
++	case 0x63:
++		ctxprog = nv63_ctxprog;
++		break;
 +	default:
 +		NV_ERROR(dev, "Context program for 0x%02x unavailable\n",
 +			 dev_priv->chipset);
@@ -33572,10 +34301,10 @@ index 0000000..fb5838e
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
 new file mode 100644
-index 0000000..dd4bff2
+index 0000000..281e65c
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_display.c
-@@ -0,0 +1,998 @@
+@@ -0,0 +1,1012 @@
 +/*
 + * Copyright (C) 2008 Maarten Maathuis.
 + * All Rights Reserved.
@@ -34197,11 +34926,8 @@ index 0000000..dd4bff2
 +	 */
 +	NV_DEBUG(dev, "0x610030: 0x%08x\n", unk30);
 +	head = ffs((unk30 >> 9) & 3) - 1;
-+	if (head < 0) {
-+		NV_ERROR(dev, "no active heads: 0x%08x\n",
-+						nv_rd32(dev, 0x610030));
++	if (head < 0)
 +		return -EINVAL;
-+	}
 +
 +	/* This assumes CRTCs are never bound to multiple encoders, which
 +	 * should be the case.
@@ -34271,9 +34997,21 @@ index 0000000..dd4bff2
 +			   int pxclk)
 +{
 +	struct drm_nouveau_private *dev_priv = dev->dev_private;
++	struct nouveau_connector *nv_connector = NULL;
++	struct drm_encoder *encoder;
 +	struct nvbios *bios = &dev_priv->VBIOS;
 +	uint32_t mc, script = 0, or;
 +
++	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++		struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
++
++		if (nv_encoder->dcb != dcbent)
++			continue;
++
++		nv_connector = nouveau_encoder_connector_get(nv_encoder);
++		break;
++	}
++
 +	or = ffs(dcbent->or) - 1;
 +	mc = nv50_display_mode_ctrl(dev, dcbent->type != OUTPUT_ANALOG, or);
 +	switch (dcbent->type) {
@@ -34292,6 +35030,11 @@ index 0000000..dd4bff2
 +			} else
 +			if (bios->fp.strapless_is_24bit & 1)
 +				script |= 0x0200;
++
++			if (nv_connector && nv_connector->edid &&
++			    (nv_connector->edid->revision >= 4) &&
++			    (nv_connector->edid->input & 0x70) >= 0x20)
++				script |= 0x0200;
 +		}
 +
 +		if (nouveau_uscript_lvds >= 0) {
@@ -35026,7 +35769,7 @@ index 0000000..6bcc6d3
 +
 diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c
 new file mode 100644
-index 0000000..77ae1aa
+index 0000000..b728228
 --- /dev/null
 +++ b/drivers/gpu/drm/nouveau/nv50_fifo.c
 @@ -0,0 +1,494 @@
@@ -35448,7 +36191,7 @@ index 0000000..77ae1aa
 +	NV_DEBUG(dev, "\n");
 +
 +	chid = pfifo->channel_id(dev);
-+	if (chid < 0 || chid >= dev_priv->engine.fifo.channels)
++	if (chid < 1 || chid >= dev_priv->engine.fifo.channels - 1)
 +		return 0;
 +
 +	chan = dev_priv->fifos[chid];


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1294.2.81
retrieving revision 1.1294.2.82
diff -u -p -r1.1294.2.81 -r1.1294.2.82
--- kernel.spec	9 Dec 2009 21:44:04 -0000	1.1294.2.81
+++ kernel.spec	23 Dec 2009 21:12:36 -0000	1.1294.2.82
@@ -41,7 +41,7 @@ Summary: The Linux kernel
 %if 0%{?released_kernel}
 
 # Do we have a -stable update to apply?
-%define stable_update 6
+%define stable_update 9
 # Is it a -stable RC?
 %define stable_rc 0
 # Set rpm version accordingly
@@ -715,21 +715,17 @@ Patch1586: linux-2.6-virtio_blk-add-supp
 # nouveau + drm fixes
 Patch1810: kms-offb-handoff.patch
 Patch1812: drm-next-b390f944.patch
-Patch1813: drm-radeon-pm.patch
-Patch1814: drm-nouveau.patch
-Patch1818: drm-i915-resume-force-mode.patch
+Patch1813: drm-edid-9340d8cf.patch
+
+Patch1820: drm-radeon-pm.patch
+Patch1821: drm-nouveau.patch
+Patch1822: drm-i915-resume-force-mode.patch
 # intel drm is all merged upstream
 Patch1824: drm-intel-next.patch
 Patch1825: drm-intel-pm.patch
 Patch1826: drm-intel-no-tv-hotplug.patch
-Patch1827: drm-i915-fix-tvmode-oops.patch
-Patch1831: drm-conservative-fallback-modes.patch
-Patch1832: drm-edid-retry.patch
-Patch1834: drm-edid-header-fixup.patch
-Patch1835: drm-default-mode.patch
-Patch1837: drm-i915-fix-sync-to-vbl-when-vga-is-off.patch
 Patch1839: drm-radeon-misc-fixes.patch
-Patch1840: drm-radeon-rv410-test-fix.patch
+#Patch1840: drm-radeon-rv410-test-fix.patch
 
 # vga arb
 Patch1900: linux-2.6-vga-arb.patch
@@ -796,8 +792,6 @@ Patch14101: improve-resource-counter-sca
 Patch14420: perf-events-fix-swevent-hrtimer-sampling.patch
 Patch14421: perf-events-dont-generate-events-for-the-idle-task.patch
 
-Patch14430: crypto-via-padlock-fix-nano-aes.patch
-
 # tg3 fixes (#527209)
 Patch14451: tg3-01-delay-mdio-bus-init-until-fw-finishes.patch
 Patch14452: tg3-02-fix-tso-test-against-wrong-flags-var.patch
@@ -806,18 +800,8 @@ Patch14454: tg3-04-prevent-tx-bd-corrupt
 Patch14455: tg3-05-assign-flags-to-fixes-in-start_xmit_dma_bug.patch
 Patch14456: tg3-06-fix-5906-transmit-hangs.patch
 
-Patch14460: highmem-Fix-debug_kmap_atomic-to-also-handle-KM_IRQ_.patch
-Patch14461: highmem-Fix-race-in-debug_kmap_atomic-which-could-ca.patch
-Patch14462: highmem-fix-arm-powerpc-kmap_types.patch
-
 Patch14463: dlm-fix-connection-close-handling.patch
 
-# rhbz#544144 [bbf31bf18d34caa87dd01f08bf713635593697f2]
-Patch14464: ipv4-fix-null-ptr-deref-in-ip_fragment.patch
-
-# rhbz#544471
-Patch14465: ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch
-
 Patch19997: xen.pvops.pre.patch
 Patch19998: xen.pvops.patch
 Patch19999: xen.pvops.post.patch
@@ -1439,12 +1423,9 @@ ApplyPatch linux-2.6-e1000-ich9.patch
 # Nouveau DRM + drm fixes
 ApplyPatch kms-offb-handoff.patch
 ApplyPatch drm-next-b390f944.patch
+ApplyPatch drm-edid-9340d8cf.patch
 ApplyPatch drm-radeon-misc-fixes.patch
-ApplyPatch drm-radeon-rv410-test-fix.patch
-ApplyPatch drm-conservative-fallback-modes.patch
-ApplyPatch drm-edid-retry.patch
-ApplyPatch drm-edid-header-fixup.patch
-ApplyPatch drm-default-mode.patch
+#ApplyPatch drm-radeon-rv410-test-fix.patch
 
 ApplyPatch drm-nouveau.patch
 # pm broken on my thinkpad t60p - airlied
@@ -1454,8 +1435,6 @@ ApplyOptionalPatch drm-intel-next.patch
 #this appears to be upstream - mjg59?
 #ApplyPatch drm-intel-pm.patch
 ApplyPatch drm-intel-no-tv-hotplug.patch
-ApplyPatch drm-i915-fix-tvmode-oops.patch
-ApplyPatch drm-i915-fix-sync-to-vbl-when-vga-is-off.patch
 #ApplyPatch drm-disable-r600-aspm.patch
 
 # VGA arb + drm
@@ -1498,9 +1477,6 @@ ApplyPatch improve-resource-counter-scal
 ApplyPatch perf-events-fix-swevent-hrtimer-sampling.patch
 ApplyPatch perf-events-dont-generate-events-for-the-idle-task.patch
 
-# Fix oops in padlock
-ApplyPatch crypto-via-padlock-fix-nano-aes.patch
-
 # tg3 fixes (#527209)
 ApplyPatch tg3-01-delay-mdio-bus-init-until-fw-finishes.patch
 ApplyPatch tg3-02-fix-tso-test-against-wrong-flags-var.patch
@@ -1518,18 +1494,8 @@ ApplyPatch sched-retune-scheduler-latenc
 # fix wakeup latency
 ApplyPatch sched-update-the-clock-of-runqueue-select-task-rq-selected.patch
 
-ApplyPatch highmem-Fix-debug_kmap_atomic-to-also-handle-KM_IRQ_.patch
-ApplyPatch highmem-Fix-race-in-debug_kmap_atomic-which-could-ca.patch
-ApplyPatch highmem-fix-arm-powerpc-kmap_types.patch
-
 ApplyPatch dlm-fix-connection-close-handling.patch
 
-# rhbz#544144
-ApplyPatch ipv4-fix-null-ptr-deref-in-ip_fragment.patch
-
-# rhbz#544471
-ApplyPatch ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch
-
 ApplyPatch xen.pvops.pre.patch
 ApplyPatch xen.pvops.patch
 ApplyPatch xen.pvops.post.patch
@@ -2182,6 +2148,44 @@ fi
 # and build.
 
 %changelog
+* Wed Dec 23 2009 Michael Young <m.a.young at durham.ac.uk>
+- update to latest pvops patch
+
+* Mon Dec 21 2009 Dave Airlie <airlied at redhat.com> 2.6.31.9-174
+- revert rv410 fix broke some things
+
+* Mon Dec 21 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.9-173
+- nouveau: fix dim panel issues on certain laptops (rh#547554)
+- nouveau: fix some issues when running without ctxprogs
+- nouveau: fix error handling in init paths
+- nouveau: add vga arbitration hooks
+- nouveau: fix nv04 sw methods
+
+* Fri Dec 18 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.9-172
+- stable update 2.6.31.9
+
+* Thu Dec 17 2009 Ben Skeggs <bskeggs at redhat.com> 2.6.31.8-171
+- drm-nouveau.patch: add support for GF7100 (NV63)
+
+* Wed Dec 16 2009 Adam Jackson <ajax at redhat.com>
+- drm-edid-9340d8cf.patch: Sync DRM EDID with Linus master.
+- drm-conservative-fallback-modes.patch, drm-edid-retry.patch,
+  drm-edid-header-fixup.patch, drm-default-mode.patch: Drop, merged into
+  the above.
+
+* Mon Dec 14 2009 Kyle McMartin <kyle at redhat.com> 2.6.31.8-169
+- 2.6.31.8
+
+* Thu Dec 10 2009 Kyle McMartin <kyle at redhat.com>
+- ipv4-fix-null-ptr-deref-in-ip_fragment.patch: upstream.
+- nuke highmem patches now in stable.
+- crypto-via-padlock-fix-nano-aes.patch: upstream.
+- fix up drm-next-$sha.patch
+
+* Wed Dec 09 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.31.6-167
+- Linux 2.6.31.7
+- NOTE: drm patch still needs fixing.
+
 * Wed Dec 09 2009 Michael Young <m.a.young at durham.ac.uk>
 - update to latest pvops patch
 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/sources,v
retrieving revision 1.976.2.36
retrieving revision 1.976.2.37
diff -u -p -r1.976.2.36 -r1.976.2.37
--- sources	12 Nov 2009 23:01:10 -0000	1.976.2.36
+++ sources	23 Dec 2009 21:12:37 -0000	1.976.2.37
@@ -1,2 +1,2 @@
 84c077a37684e4cbfa67b18154390d8a  linux-2.6.31.tar.bz2
-89802830db41e517cdf0954145f73337  patch-2.6.31.6.bz2
+819f1552906be755b53154fd570866eb  patch-2.6.31.9.bz2


Index: upstream
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/upstream,v
retrieving revision 1.888.2.35
retrieving revision 1.888.2.36
diff -u -p -r1.888.2.35 -r1.888.2.36
--- upstream	12 Nov 2009 23:01:10 -0000	1.888.2.35
+++ upstream	23 Dec 2009 21:12:37 -0000	1.888.2.36
@@ -1,2 +1,2 @@
 linux-2.6.31.tar.bz2
-patch-2.6.31.6.bz2
+patch-2.6.31.9.bz2

xen.pvops.patch:
 arch/x86/Kconfig                                     |   14 
 arch/x86/Makefile                                    |    2 
 arch/x86/include/asm/agp.h                           |   17 
 arch/x86/include/asm/e820.h                          |    2 
 arch/x86/include/asm/fixmap.h                        |   25 
 arch/x86/include/asm/hpet.h                          |    2 
 arch/x86/include/asm/i387.h                          |    1 
 arch/x86/include/asm/io.h                            |   15 
 arch/x86/include/asm/io_apic.h                       |    7 
 arch/x86/include/asm/microcode.h                     |    9 
 arch/x86/include/asm/mmu.h                           |    3 
 arch/x86/include/asm/paravirt.h                      |  720 --------
 arch/x86/include/asm/paravirt_types.h                |  724 ++++++++
 arch/x86/include/asm/pci.h                           |    9 
 arch/x86/include/asm/pci_x86.h                       |    2 
 arch/x86/include/asm/pgtable.h                       |    6 
 arch/x86/include/asm/processor.h                     |    4 
 arch/x86/include/asm/pvclock.h                       |    6 
 arch/x86/include/asm/syscalls.h                      |    8 
 arch/x86/include/asm/tlbflush.h                      |    6 
 arch/x86/include/asm/vgtod.h                         |   64 
 arch/x86/include/asm/vsyscall.h                      |   32 
 arch/x86/include/asm/xen/hypercall.h                 |   44 
 arch/x86/include/asm/xen/interface.h                 |    8 
 arch/x86/include/asm/xen/interface_32.h              |    5 
 arch/x86/include/asm/xen/interface_64.h              |   13 
 arch/x86/include/asm/xen/iommu.h                     |   12 
 arch/x86/include/asm/xen/page.h                      |   16 
 arch/x86/include/asm/xen/pci.h                       |   95 +
 arch/x86/include/asm/xen/swiotlb.h                   |   10 
 arch/x86/kernel/Makefile                             |    6 
 arch/x86/kernel/acpi/boot.c                          |   18 
 arch/x86/kernel/acpi/processor.c                     |   14 
 arch/x86/kernel/acpi/sleep.c                         |    2 
 arch/x86/kernel/apic/io_apic.c                       |   68 
 arch/x86/kernel/cpu/mtrr/Makefile                    |    1 
 arch/x86/kernel/cpu/mtrr/amd.c                       |    6 
 arch/x86/kernel/cpu/mtrr/centaur.c                   |    6 
 arch/x86/kernel/cpu/mtrr/cyrix.c                     |    6 
 arch/x86/kernel/cpu/mtrr/generic.c                   |   10 
 arch/x86/kernel/cpu/mtrr/main.c                      |   19 
 arch/x86/kernel/cpu/mtrr/mtrr.h                      |   11 
 arch/x86/kernel/cpu/mtrr/xen.c                       |  104 +
 arch/x86/kernel/e820.c                               |   30 
 arch/x86/kernel/hpet.c                               |    8 
 arch/x86/kernel/ioport.c                             |   40 
 arch/x86/kernel/kvmclock.c                           |    7 
 arch/x86/kernel/ldt.c                                |    3 
 arch/x86/kernel/microcode_core.c                     |    5 
 arch/x86/kernel/microcode_xen.c                      |  200 ++
 arch/x86/kernel/paravirt.c                           |    1 
 arch/x86/kernel/pci-dma.c                            |    6 
 arch/x86/kernel/pci-swiotlb.c                        |   25 
 arch/x86/kernel/process.c                            |   27 
 arch/x86/kernel/process_32.c                         |   27 
 arch/x86/kernel/process_64.c                         |   33 
 arch/x86/kernel/pvclock.c                            |  190 +-
 arch/x86/kernel/setup.c                              |    4 
 arch/x86/kernel/traps.c                              |   33 
 arch/x86/kernel/tsc.c                                |    4 
 arch/x86/kernel/vsyscall_64.c                        |   91 -
 arch/x86/mm/Makefile                                 |    7 
 arch/x86/mm/gup.c                                    |    5 
 arch/x86/mm/init_32.c                                |   42 
 arch/x86/mm/ioremap.c                                |   72 
 arch/x86/mm/pat.c                                    |    2 
 arch/x86/mm/pgtable.c                                |   18 
 arch/x86/mm/physaddr.c                               |   70 
 arch/x86/mm/physaddr.h                               |   10 
 arch/x86/mm/tlb.c                                    |   35 
 arch/x86/pci/Makefile                                |    1 
 arch/x86/pci/common.c                                |   18 
 arch/x86/pci/i386.c                                  |    3 
 arch/x86/pci/init.c                                  |    6 
 arch/x86/pci/xen.c                                   |   66 
 arch/x86/vdso/vclock_gettime.c                       |   46 
 arch/x86/vdso/vgetcpu.c                              |   17 
 arch/x86/xen/Kconfig                                 |   38 
 arch/x86/xen/Makefile                                |    5 
 arch/x86/xen/apic.c                                  |   57 
 arch/x86/xen/enlighten.c                             |  120 +
 arch/x86/xen/grant-table.c                           |   38 
 arch/x86/xen/mmu.c                                   |  493 +++++
 arch/x86/xen/pci-swiotlb.c                           |  999 +++++++++++
 arch/x86/xen/pci.c                                   |  231 ++
 arch/x86/xen/setup.c                                 |  115 +
 arch/x86/xen/smp.c                                   |   12 
 arch/x86/xen/suspend.c                               |   17 
 arch/x86/xen/time.c                                  |   68 
 arch/x86/xen/vga.c                                   |   67 
 arch/x86/xen/xen-asm_64.S                            |    4 
 arch/x86/xen/xen-ops.h                               |   29 
 block/blk-core.c                                     |    2 
 drivers/acpi/acpi_memhotplug.c                       |   19 
 drivers/acpi/acpica/hwsleep.c                        |   17 
 drivers/acpi/processor_core.c                        |  346 +++
 drivers/acpi/processor_idle.c                        |  102 +
 drivers/acpi/processor_perflib.c                     |  120 +
 drivers/acpi/sleep.c                                 |   19 
 drivers/block/Kconfig                                |    1 
 drivers/block/xen-blkfront.c                         |   14 
 drivers/char/agp/intel-agp.c                         |   17 
 drivers/char/hvc_xen.c                               |  120 +
 drivers/gpu/drm/drm_drv.c                            |    2 
 drivers/gpu/drm/drm_gem.c                            |    2 
 drivers/gpu/drm/drm_scatter.c                        |   67 
 drivers/gpu/drm/ttm/ttm_bo_vm.c                      |    2 
 drivers/input/Kconfig                                |    1 
 drivers/input/xen-kbdfront.c                         |    2 
 drivers/net/Kconfig                                  |  174 ++
 drivers/net/Makefile                                 |    2 
 drivers/net/imq.c                                    |  594 ++++++
 drivers/net/xen-netchannel2/Makefile                 |   25 
 drivers/net/xen-netchannel2/autobypass.c             |  316 +++
 drivers/net/xen-netchannel2/bypass.c                 |  823 +++++++++
 drivers/net/xen-netchannel2/bypassee.c               |  803 +++++++++
 drivers/net/xen-netchannel2/chan.c                   |  843 +++++++++
 drivers/net/xen-netchannel2/netback2.c               |  482 +++++
 drivers/net/xen-netchannel2/netchan2.c               |   32 
 drivers/net/xen-netchannel2/netchannel2_core.h       |  796 +++++++++
 drivers/net/xen-netchannel2/netchannel2_endpoint.h   |   63 
 drivers/net/xen-netchannel2/netchannel2_uspace.h     |   17 
 drivers/net/xen-netchannel2/netfront2.c              |  514 +++++
 drivers/net/xen-netchannel2/offload.c                |  181 ++
 drivers/net/xen-netchannel2/poll.c                   |   59 
 drivers/net/xen-netchannel2/receiver_map.c           |  787 +++++++++
 drivers/net/xen-netchannel2/recv_packet.c            |  333 +++
 drivers/net/xen-netchannel2/rscb.c                   |  435 +++++
 drivers/net/xen-netchannel2/tools/destroy_bypass.c   |   25 
 drivers/net/xen-netchannel2/tools/establish_bypass.c |   31 
 drivers/net/xen-netchannel2/util.c                   |  241 ++
 drivers/net/xen-netchannel2/xmit_packet.c            |  374 ++++
 drivers/net/xen-netfront.c                           |   10 
 drivers/pci/Kconfig                                  |    9 
 drivers/pci/Makefile                                 |    4 
 drivers/pci/bus.c                                    |    1 
 drivers/pci/msi.c                                    |    5 
 drivers/pci/setup-res.c                              |    1 
 drivers/pci/xen-iommu.c                              |  274 +++
 drivers/pci/xen-pcifront.c                           | 1158 +++++++++++++
 drivers/video/Kconfig                                |    1 
 drivers/video/broadsheetfb.c                         |    2 
 drivers/video/fb_defio.c                             |    4 
 drivers/video/hecubafb.c                             |    2 
 drivers/video/metronomefb.c                          |    2 
 drivers/video/xen-fbfront.c                          |    4 
 drivers/xen/Kconfig                                  |  125 +
 drivers/xen/Makefile                                 |   28 
 drivers/xen/acpi.c                                   |   23 
 drivers/xen/acpi_processor.c                         |  411 ++++
 drivers/xen/balloon.c                                |  325 ++-
 drivers/xen/biomerge.c                               |   14 
 drivers/xen/blkback/Makefile                         |    3 
 drivers/xen/blkback/blkback-pagemap.c                |  104 +
 drivers/xen/blkback/blkback-pagemap.h                |   20 
 drivers/xen/blkback/blkback.c                        |  673 +++++++
 drivers/xen/blkback/common.h                         |  143 +
 drivers/xen/blkback/interface.c                      |  186 ++
 drivers/xen/blkback/vbd.c                            |  118 +
 drivers/xen/blkback/xenbus.c                         |  541 ++++++
 drivers/xen/blktap/Makefile                          |    3 
 drivers/xen/blktap/blktap.h                          |  243 ++
 drivers/xen/blktap/control.c                         |  283 +++
 drivers/xen/blktap/device.c                          | 1140 +++++++++++++
 drivers/xen/blktap/request.c                         |  298 +++
 drivers/xen/blktap/ring.c                            |  615 +++++++
 drivers/xen/blktap/sysfs.c                           |  452 +++++
 drivers/xen/blktap/wait_queue.c                      |   40 
 drivers/xen/events.c                                 |  491 +++++
 drivers/xen/evtchn.c                                 |   82 
 drivers/xen/features.c                               |    2 
 drivers/xen/gntdev.c                                 |  625 +++++++
 drivers/xen/grant-table.c                            |  491 +++++
 drivers/xen/live_maps.c                              |   61 
 drivers/xen/manage.c                                 |   31 
 drivers/xen/mce.c                                    |  213 ++
 drivers/xen/netback/Makefile                         |    3 
 drivers/xen/netback/common.h                         |  223 ++
 drivers/xen/netback/interface.c                      |  401 ++++
 drivers/xen/netback/netback.c                        | 1650 +++++++++++++++++++
 drivers/xen/netback/xenbus.c                         |  470 +++++
 drivers/xen/pci.c                                    |  124 +
 drivers/xen/pciback/Makefile                         |   17 
 drivers/xen/pciback/conf_space.c                     |  435 +++++
 drivers/xen/pciback/conf_space.h                     |  126 +
 drivers/xen/pciback/conf_space_capability.c          |   66 
 drivers/xen/pciback/conf_space_capability.h          |   26 
 drivers/xen/pciback/conf_space_capability_msi.c      |   84 
 drivers/xen/pciback/conf_space_capability_pm.c       |  113 +
 drivers/xen/pciback/conf_space_capability_vpd.c      |   40 
 drivers/xen/pciback/conf_space_header.c              |  318 +++
 drivers/xen/pciback/conf_space_quirks.c              |  140 +
 drivers/xen/pciback/conf_space_quirks.h              |   35 
 drivers/xen/pciback/controller.c                     |  442 +++++
 drivers/xen/pciback/passthrough.c                    |  178 ++
 drivers/xen/pciback/pci_stub.c                       | 1285 ++++++++++++++
 drivers/xen/pciback/pciback.h                        |  133 +
 drivers/xen/pciback/pciback_ops.c                    |  130 +
 drivers/xen/pciback/slot.c                           |  191 ++
 drivers/xen/pciback/vpci.c                           |  244 ++
 drivers/xen/pciback/xenbus.c                         |  722 ++++++++
 drivers/xen/pcpu.c                                   |  420 ++++
 drivers/xen/xen_acpi_memhotplug.c                    |  209 ++
 drivers/xen/xenbus/Makefile                          |    5 
 drivers/xen/xenbus/xenbus_client.c                   |   15 
 drivers/xen/xenbus/xenbus_comms.c                    |    1 
 drivers/xen/xenbus/xenbus_probe.c                    |  384 +---
 drivers/xen/xenbus/xenbus_probe.h                    |   29 
 drivers/xen/xenbus/xenbus_probe_backend.c            |  298 +++
 drivers/xen/xenbus/xenbus_probe_frontend.c           |  292 +++
 drivers/xen/xenbus/xenbus_xs.c                       |  187 ++
 drivers/xen/xenfs/Makefile                           |    3 
 drivers/xen/xenfs/privcmd.c                          |  403 ++++
 drivers/xen/xenfs/super.c                            |   98 +
 drivers/xen/xenfs/xenfs.h                            |    3 
 drivers/xen/xenfs/xenstored.c                        |   67 
 include/acpi/acpi_drivers.h                          |   20 
 include/acpi/processor.h                             |   17 
 include/asm-generic/pci.h                            |    2 
 include/drm/drmP.h                                   |    2 
 include/linux/fb.h                                   |    1 
 include/linux/imq.h                                  |   13 
 include/linux/interrupt.h                            |    1 
 include/linux/mm.h                                   |   15 
 include/linux/netdevice.h                            |    1 
 include/linux/netfilter/xt_IMQ.h                     |    9 
 include/linux/netfilter_ipv4/ipt_IMQ.h               |   10 
 include/linux/netfilter_ipv6/ip6t_IMQ.h              |   10 
 include/linux/page-flags.h                           |   18 
 include/linux/sched.h                                |   15 
 include/linux/skbuff.h                               |   22 
 include/linux/swiotlb.h                              |    1 
 include/net/netfilter/nf_queue.h                     |   12 
 include/xen/Kbuild                                   |    1 
 include/xen/acpi.h                                   |   75 
 include/xen/balloon.h                                |    8 
 include/xen/blkif.h                                  |  123 +
 include/xen/events.h                                 |   32 
 include/xen/gntdev.h                                 |  119 +
 include/xen/grant_table.h                            |   80 
 include/xen/interface/grant_table.h                  |  195 ++
 include/xen/interface/io/netchannel2.h               |  342 +++
 include/xen/interface/io/pciif.h                     |  124 +
 include/xen/interface/io/ring.h                      |    3 
 include/xen/interface/io/uring.h                     |  426 ++++
 include/xen/interface/io/xenbus.h                    |    8 
 include/xen/interface/memory.h                       |   92 +
 include/xen/interface/physdev.h                      |   51 
 include/xen/interface/platform.h                     |  381 ++++
 include/xen/interface/vcpu.h                         |   41 
 include/xen/interface/xen-mca.h                      |  429 ++++
 include/xen/interface/xen.h                          |   45 
 include/xen/live_maps.h                              |  165 +
 include/xen/pcpu.h                                   |   30 
 include/xen/privcmd.h                                |   80 
 include/xen/swiotlb.h                                |  102 +
 include/xen/xen-ops.h                                |   11 
 include/xen/xenbus.h                                 |    4 
 kernel/irq/manage.c                                  |    3 
 kernel/sched.c                                       |   14 
 lib/swiotlb.c                                        |    5 
 mm/memory.c                                          |   42 
 mm/mmap.c                                            |   12 
 mm/page_alloc.c                                      |   14 
 net/core/dev.c                                       |   13 
 net/core/skbuff.c                                    |   96 +
 net/netfilter/Kconfig                                |   12 
 net/netfilter/Makefile                               |    1 
 net/netfilter/nf_queue.c                             |   52 
 net/netfilter/xt_IMQ.c                               |   73 
 270 files changed, 35294 insertions(+), 1850 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.1.2.51 -r 1.1.2.52 xen.pvops.patchIndex: xen.pvops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/Attic/xen.pvops.patch,v
retrieving revision 1.1.2.51
retrieving revision 1.1.2.52
diff -u -p -r1.1.2.51 -r1.1.2.52
--- xen.pvops.patch	9 Dec 2009 21:44:05 -0000	1.1.2.51
+++ xen.pvops.patch	23 Dec 2009 21:12:37 -0000	1.1.2.52
@@ -2317,10 +2317,10 @@ index 018a0a4..f334014 100644
  unsigned long arbitrary_virt_to_mfn(void *vaddr);
 diff --git a/arch/x86/include/asm/xen/pci.h b/arch/x86/include/asm/xen/pci.h
 new file mode 100644
-index 0000000..6c022c8
+index 0000000..2fc9176
 --- /dev/null
 +++ b/arch/x86/include/asm/xen/pci.h
-@@ -0,0 +1,58 @@
+@@ -0,0 +1,95 @@
 +#ifndef _ASM_X86_XEN_PCI_H
 +#define _ASM_X86_XEN_PCI_H
 +
@@ -2331,6 +2331,11 @@ index 0000000..6c022c8
 +			int type, int pirq_override);
 +int xen_destroy_irq(int irq);
 +void xen_teardown_msi_dev(struct pci_dev *dev);
++
++int xen_find_device_domain_owner(struct pci_dev *dev);
++int xen_register_device_domain_owner(struct pci_dev *dev, domid_t domain);
++int xen_unregister_device_domain_owner(struct pci_dev *dev);
++
 +#else
 +static inline int xen_register_gsi(u32 gsi, int triggering, int polarity)
 +{
@@ -2347,6 +2352,19 @@ index 0000000..6c022c8
 +{
 +	return -1;
 +}
++static inline int xen_find_device_domain_owner(struct pci_dev *dev)
++{
++	return -1;
++}
++static inline int xen_register_device_domain_owner(struct pci_dev *dev,
++						   domid_t domain)
++{
++ 	return -1;
++}
++static inline int xen_unregister_device_domain_owner(struct pci_dev *dev)
++{
++ 	return -1;
++}
 +static inline void xen_teardown_msi_dev(struct pci_dev *dev) { }
 +#endif
 +
@@ -2358,25 +2376,44 @@ index 0000000..6c022c8
 +	return -1;
 +}
 +#endif
-+#if defined(CONFIG_PCI_MSI) && defined(CONFIG_XEN_PCIDEV_FRONTEND)
-+/* Defined in drivers/pci/xen-pcifront.c */
-+int pci_frontend_enable_msi(struct pci_dev *dev, int **vectors);
-+void pci_frontend_disable_msi(struct pci_dev *dev);
-+int pci_frontend_enable_msix(struct pci_dev *dev,
-+			     int **vectors, int nvec);
-+void pci_frontend_disable_msix(struct pci_dev *dev);
-+#else
-+static inline int pci_frontend_enable_msi(struct pci_dev *dev, int **vectors)
++#if defined(CONFIG_PCI_MSI)
++
++/* The drivers/pci/xen-pcifront.c sets this structure to
++ * its own functions.
++ */
++struct xen_pci_frontend_ops {
++	int (*enable_msi)(struct pci_dev *dev, int **vectors);
++	void (*disable_msi)(struct pci_dev *dev);
++	int (*enable_msix)(struct pci_dev *dev, int **vectors, int nvec);
++	void (*disable_msix)(struct pci_dev *dev);
++};
++
++extern struct xen_pci_frontend_ops *xen_pci_frontend;
++	
++static inline int xen_pci_frontend_enable_msi(struct pci_dev *dev,
++					      int **vectors)
 +{
++	if (xen_pci_frontend && xen_pci_frontend->enable_msi)
++		return xen_pci_frontend->enable_msi(dev, vectors);
 +	return -1;
 +}
-+static inline void pci_frontend_disable_msi(struct pci_dev *dev) { }
-+static inline int pci_frontend_enable_msix(struct pci_dev *dev,
-+					   int **vectors, int nvec)
++static inline void xen_pci_frontend_disable_msi(struct pci_dev *dev)
++{
++	if (xen_pci_frontend && xen_pci_frontend->disable_msi)
++			xen_pci_frontend->disable_msi(dev);
++}
++static inline int xen_pci_frontend_enable_msix(struct pci_dev *dev,
++					       int **vectors, int nvec)
 +{
++	if (xen_pci_frontend && xen_pci_frontend->enable_msix)
++		return xen_pci_frontend->enable_msix(dev, vectors, nvec);
 +	return -1;
 +}
-+static inline void pci_frontend_disable_msix(struct pci_dev *dev) { }
++static inline void xen_pci_frontend_disable_msix(struct pci_dev *dev)
++{
++	if (xen_pci_frontend && xen_pci_frontend->disable_msix)
++			xen_pci_frontend->disable_msix(dev);
++}
 +#endif
 +#endif	/* _ASM_X86_XEN_PCI_H */
 diff --git a/arch/x86/include/asm/xen/swiotlb.h b/arch/x86/include/asm/xen/swiotlb.h
@@ -2483,7 +2520,7 @@ index 6b8ca3a..d47c54f 100644
  
  	set_fixmap_nocache(FIX_APIC_BASE, address);
 diff --git a/arch/x86/kernel/acpi/processor.c b/arch/x86/kernel/acpi/processor.c
-index d296f4a..05ef6a6 100644
+index d85d1b2..8c9526d 100644
 --- a/arch/x86/kernel/acpi/processor.c
 +++ b/arch/x86/kernel/acpi/processor.c
 @@ -11,6 +11,7 @@
@@ -2494,7 +2531,7 @@ index d296f4a..05ef6a6 100644
  
  static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
  {
-@@ -87,6 +88,19 @@ void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
+@@ -88,6 +89,19 @@ void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
  
  EXPORT_SYMBOL(arch_acpi_processor_init_pdc);
  
@@ -3400,7 +3437,7 @@ index 70ec9b9..cef3d70 100644
  
  	.start_context_switch = paravirt_nop,
 diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
-index 1a041bc..1101a9f 100644
+index 953667c..1aee23d 100644
 --- a/arch/x86/kernel/pci-dma.c
 +++ b/arch/x86/kernel/pci-dma.c
 @@ -10,6 +10,8 @@
@@ -3872,7 +3909,7 @@ index 03801f2..1b5d3e8 100644
 +
 +#endif	/* CONFIG_PARAVIRT_CLOCK_VSYSCALL */
 diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 63f32d2..86bef0f 100644
+index 860ed56..060cebe 100644
 --- a/arch/x86/kernel/setup.c
 +++ b/arch/x86/kernel/setup.c
 @@ -87,6 +87,7 @@
@@ -3883,7 +3920,7 @@ index 63f32d2..86bef0f 100644
  
  #include <asm/system.h>
  #include <asm/vsyscall.h>
-@@ -944,6 +945,9 @@ void __init setup_arch(char **cmdline_p)
+@@ -945,6 +946,9 @@ void __init setup_arch(char **cmdline_p)
  
  	initmem_init(0, max_pfn);
  
@@ -5240,7 +5277,7 @@ index 49ba9b5..77af9e9 100644
  	apply_to_page_range(&init_mm, (unsigned long)shared,
  			    PAGE_SIZE * nr_gframes, unmap_pte_fn, NULL);
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 4ceb285..5e48a6a 100644
+index 4ceb285..6838004 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
 @@ -50,7 +50,9 @@
@@ -5463,7 +5500,7 @@ index 4ceb285..5e48a6a 100644
  		xen_pgd_unpin(mm);
  
  	spin_unlock(&mm->page_table_lock);
-@@ -1285,6 +1404,13 @@ static void xen_flush_tlb_single(unsigned long addr)
+@@ -1285,12 +1404,19 @@ static void xen_flush_tlb_single(unsigned long addr)
  	preempt_enable();
  }
  
@@ -5477,6 +5514,13 @@ index 4ceb285..5e48a6a 100644
  static void xen_flush_tlb_others(const struct cpumask *cpus,
  				 struct mm_struct *mm, unsigned long va)
  {
+ 	struct {
+ 		struct mmuext_op op;
+-		DECLARE_BITMAP(mask, NR_CPUS);
++		DECLARE_BITMAP(mask, num_processors);
+ 	} *args;
+ 	struct multicall_space mcs;
+ 
 @@ -1414,6 +1540,13 @@ static int xen_pgd_alloc(struct mm_struct *mm)
  	return ret;
  }
@@ -5918,10 +5962,10 @@ index 4ceb285..5e48a6a 100644
  static struct dentry *d_mmu_debug;
 diff --git a/arch/x86/xen/pci-swiotlb.c b/arch/x86/xen/pci-swiotlb.c
 new file mode 100644
-index 0000000..ecdbfe2
+index 0000000..6195eb9
 --- /dev/null
 +++ b/arch/x86/xen/pci-swiotlb.c
-@@ -0,0 +1,997 @@
+@@ -0,0 +1,999 @@
 +/*
 + * Dynamic DMA mapping support.
[...1790 lines suppressed...]
  static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
 diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index 45b67d9..968c53c 100644
+index 4637dce..4aefeb3 100644
 --- a/include/drm/drmP.h
 +++ b/include/drm/drmP.h
-@@ -1360,7 +1360,7 @@ extern int drm_vma_info(struct seq_file *m, void *data);
+@@ -1361,7 +1361,7 @@ extern int drm_vma_info(struct seq_file *m, void *data);
  #endif
  
  				/* Scatter Gather Support (drm_scatter.h) */
@@ -37925,7 +38448,7 @@ index e2e5ce5..ca67e2b 100644
  {
  	int ret = test_bit(PG_uptodate, &(page)->flags);
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 0f1ea4a..8dabc37 100644
+index d3e910b..427a179 100644
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
 @@ -141,6 +141,21 @@ extern unsigned long nr_iowait(void);
@@ -37951,7 +38474,7 @@ index 0f1ea4a..8dabc37 100644
  
  struct seq_file;
 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index f2c69a2..e2884b4 100644
+index ff06fb2..0e000f2 100644
 --- a/include/linux/skbuff.h
 +++ b/include/linux/skbuff.h
 @@ -29,6 +29,9 @@
@@ -38007,7 +38530,7 @@ index f2c69a2..e2884b4 100644
  static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
  {
  	return (struct dst_entry *)skb->_skb_dst;
-@@ -1974,6 +1992,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
+@@ -1976,6 +1994,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
  	dst->nfct_reasm = src->nfct_reasm;
  	nf_conntrack_get_reasm(src->nfct_reasm);
  #endif
@@ -38068,10 +38591,10 @@ index 4e65c16..84ad8f0 100644
 +header-y += privcmd.h
 diff --git a/include/xen/acpi.h b/include/xen/acpi.h
 new file mode 100644
-index 0000000..8506688
+index 0000000..24f0bfb
 --- /dev/null
 +++ b/include/xen/acpi.h
-@@ -0,0 +1,79 @@
+@@ -0,0 +1,75 @@
 +#ifndef _XEN_ACPI_H
 +#define _XEN_ACPI_H
 +
@@ -38115,6 +38638,10 @@ index 0000000..8506688
 +#define HOTPLUG_TYPE_ADD	0
 +#define HOTPLUG_TYPE_REMOVE	1
 +
++#if defined(CONFIG_ACPI_HOTPLUG_MEMORY) || defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)
++int xen_hotadd_memory(struct acpi_memory_device *mem_device);
++#endif
++
 +#if defined(CONFIG_ACPI_PROCESSOR_XEN) || defined(CONFIG_ACPI_PROCESSOR_XEN_MODULE)
 +
 +struct processor_cntl_xen_ops {
@@ -38124,20 +38651,12 @@ index 0000000..8506688
 +	int (*hotplug)(struct acpi_processor *pr, int type);
 +};
 +
-+extern int processor_cntl_xen(void);
-+extern int processor_cntl_xen_pm(void);
-+extern int processor_cntl_xen_pmperf(void);
-+extern int processor_cntl_xen_pmthr(void);
 +extern int processor_cntl_xen_notify(struct acpi_processor *pr,
 +			int event, int type);
 +extern int processor_cntl_xen_power_cache(int cpu, int cx,
 +		struct acpi_power_register *reg);
 +#else
 +
-+static inline int processor_cntl_xen(void) { return 0; }
-+static inline int processor_cntl_xen_pm(void) { return 0; }
-+static inline int processor_cntl_xen_pmperf(void) { return 0; }
-+static inline int processor_cntl_xen_pmthr(void) { return 0; }
 +static inline int processor_cntl_xen_notify(struct acpi_processor *pr,
 +			int event, int type)
 +{
@@ -40005,10 +40524,10 @@ index cd69391..ac5de37 100644
   * hypercall since 0x00030202.
 diff --git a/include/xen/interface/platform.h b/include/xen/interface/platform.h
 new file mode 100644
-index 0000000..14df81d
+index 0000000..17ae622
 --- /dev/null
 +++ b/include/xen/interface/platform.h
-@@ -0,0 +1,363 @@
+@@ -0,0 +1,381 @@
 +/******************************************************************************
 + * platform.h
 + *
@@ -40348,6 +40867,22 @@ index 0000000..14df81d
 +typedef struct xenpf_cpu_ol xenpf_cpu_ol_t;
 +DEFINE_GUEST_HANDLE_STRUCT(xenpf_cpu_ol_t);
 +
++#define XENPF_cpu_hotadd    58
++struct xenpf_cpu_hotadd {
++	uint32_t apic_id;
++	uint32_t acpi_id;
++	uint32_t pxm;
++};
++
++
++#define XENPF_mem_hotadd    59
++struct xenpf_mem_hotadd {
++	uint64_t spfn;
++	uint64_t epfn;
++	uint32_t pxm;
++	uint32_t flags;
++};
++
 +struct xen_platform_op {
 +	uint32_t cmd;
 +	uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
@@ -40365,6 +40900,8 @@ index 0000000..14df81d
 +		struct xenpf_set_processor_pminfo set_pminfo;
 +		struct xenpf_pcpuinfo          pcpu_info;
 +		struct xenpf_cpu_ol            cpu_ol;
++		struct xenpf_cpu_hotadd        cpu_add;
++		struct xenpf_mem_hotadd        mem_add;
 +		uint8_t                        pad[128];
 +	} u;
 +};
@@ -41393,7 +41930,7 @@ index 0ec9ed8..07a11dc 100644
  		desc->status |= IRQ_SUSPENDED;
  	}
 diff --git a/kernel/sched.c b/kernel/sched.c
-index 1b59e26..3982e8e 100644
+index 81ede13..6318600 100644
 --- a/kernel/sched.c
 +++ b/kernel/sched.c
 @@ -1951,6 +1951,12 @@ task_hot(struct task_struct *p, u64 now, struct sched_domain *sd)
@@ -41578,7 +42115,7 @@ index cbb7cb3..8118015 100644
  	flush_cache_mm(mm);
  	tlb = tlb_gather_mmu(mm, 1);
 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index 0b3c6cb..49ec6c9 100644
+index 957b551..dedf237 100644
 --- a/mm/page_alloc.c
 +++ b/mm/page_alloc.c
 @@ -566,6 +566,13 @@ static void __free_pages_ok(struct page *page, unsigned int order)
@@ -41610,7 +42147,7 @@ index 0b3c6cb..49ec6c9 100644
  		page->mapping = NULL;
  	if (free_pages_check(page))
 diff --git a/net/core/dev.c b/net/core/dev.c
-index a2f575b..55321e4 100644
+index 4225097..26a86a6 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -96,6 +96,9 @@
@@ -41623,7 +42160,7 @@ index a2f575b..55321e4 100644
  #include <linux/proc_fs.h>
  #include <linux/seq_file.h>
  #include <linux/stat.h>
-@@ -1686,7 +1689,11 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
+@@ -1687,7 +1690,11 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
  	int rc;
  
  	if (likely(!skb->next)) {
@@ -41636,7 +42173,7 @@ index a2f575b..55321e4 100644
  			dev_queue_xmit_nit(skb, dev);
  
  		if (netif_needs_gso(dev, skb)) {
-@@ -1771,8 +1778,7 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
+@@ -1772,8 +1779,7 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
  }
  EXPORT_SYMBOL(skb_tx_hash);
  
@@ -41646,7 +42183,7 @@ index a2f575b..55321e4 100644
  {
  	const struct net_device_ops *ops = dev->netdev_ops;
  	u16 queue_index = 0;
-@@ -1785,6 +1791,7 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev,
+@@ -1786,6 +1792,7 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev,
  	skb_set_queue_mapping(skb, queue_index);
  	return netdev_get_tx_queue(dev, queue_index);
  }
@@ -41655,7 +42192,7 @@ index a2f575b..55321e4 100644
  /**
   *	dev_queue_xmit - transmit a buffer
 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index 9e0597d..98e73ff 100644
+index 79ae895..f1b6b41 100644
 --- a/net/core/skbuff.c
 +++ b/net/core/skbuff.c
 @@ -72,6 +72,9 @@
@@ -41775,7 +42312,7 @@ index 9e0597d..98e73ff 100644
  	new->local_df		= old->local_df;
  	new->pkt_type		= old->pkt_type;
  	new->ip_summed		= old->ip_summed;
-@@ -2778,6 +2867,13 @@ void __init skb_init(void)
+@@ -2779,6 +2868,13 @@ void __init skb_init(void)
  						0,
  						SLAB_HWCACHE_ALIGN|SLAB_PANIC,
  						NULL);


--- crypto-via-padlock-fix-nano-aes.patch DELETED ---


--- drm-conservative-fallback-modes.patch DELETED ---


--- drm-default-mode.patch DELETED ---


--- drm-edid-header-fixup.patch DELETED ---


--- drm-edid-retry.patch DELETED ---


--- drm-i915-fix-sync-to-vbl-when-vga-is-off.patch DELETED ---


--- highmem-Fix-debug_kmap_atomic-to-also-handle-KM_IRQ_.patch DELETED ---


--- highmem-Fix-race-in-debug_kmap_atomic-which-could-ca.patch DELETED ---


--- highmem-fix-arm-powerpc-kmap_types.patch DELETED ---


--- ipv4-fix-null-ptr-deref-in-ip_fragment.patch DELETED ---


--- patch-2.6.31.6.bz2.sign DELETED ---




More information about the fedora-extras-commits mailing list