rpms/kernel/F-12 drm-nouveau.patch, 1.72, 1.73 kernel.spec, 1.1958, 1.1959
Ben Skeggs
bskeggs at fedoraproject.org
Mon Dec 21 04:26:27 UTC 2009
Author: bskeggs
Update of /cvs/pkgs/rpms/kernel/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv2630
Modified Files:
drm-nouveau.patch kernel.spec
Log Message:
* 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
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/F-12/drm-nouveau.patch,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -p -r1.72 -r1.73
--- drm-nouveau.patch 17 Dec 2009 03:03:24 -0000 1.72
+++ drm-nouveau.patch 21 Dec 2009 04:26:25 -0000 1.73
@@ -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;
+}
+
@@ -34247,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.
@@ -34872,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.
@@ -34946,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) {
@@ -34967,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) {
@@ -35701,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 @@
@@ -36123,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/F-12/kernel.spec,v
retrieving revision 1.1958
retrieving revision 1.1959
diff -u -p -r1.1958 -r1.1959
--- kernel.spec 19 Dec 2009 03:06:00 -0000 1.1958
+++ kernel.spec 21 Dec 2009 04:26:26 -0000 1.1959
@@ -2139,6 +2139,13 @@ fi
# and build.
%changelog
+* 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
More information about the fedora-extras-commits
mailing list