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