Date: Saturday, November 21, 2009 @ 12:41:14 Author: andyrtr Revision: 59244
upgpkg: nouveau-drm 0.0.15_20091120-1 new snapshot 20091120, tv detection fixes are now upstream Modified: nouveau-drm/trunk/PKGBUILD Deleted: nouveau-drm/trunk/fix_resolution_detection.patch nouveau-drm/trunk/tvdac_load_detection.patch --------------------------------+ PKGBUILD | 14 +--- fix_resolution_detection.patch | 80 ------------------------- tvdac_load_detection.patch | 121 --------------------------------------- 3 files changed, 5 insertions(+), 210 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2009-11-21 16:56:39 UTC (rev 59243) +++ PKGBUILD 2009-11-21 17:41:14 UTC (rev 59244) @@ -3,7 +3,7 @@ # Contributor: buddabrod <buddab...@gmail.com> pkgname=nouveau-drm -_snapdate=20091111 +_snapdate=20091120 pkgver=0.0.15_${_snapdate} # see master/drivers/gpu/drm/nouveau/nouveau_drv.h for version _kernver='2.6.31-ARCH' pkgrel=1 @@ -16,18 +16,14 @@ license=('GPL') #options=('force') source=(ftp://ftp.archlinux.org/other/$pkgname/master-${_snapdate}.tar.gz - #http://people.freedesktop.org/~pq/nouveau-drm/master.tar.gz + # http://people.freedesktop.org/~pq/nouveau-drm/master.tar.gz # get the Makefile from http://cgit.freedesktop.org/nouveau/linux-2.6/plain/nouveau/Makefile?h=master-compat - Makefile - tvdac_load_detection.patch) -md5sums=('bbd406c6b8d93defbe17d4f4b477b500' - 'b619729a9374b7172fc1a7ce59f7f3ad' - 'bf0f9dcbcecd42f8e8f10b6ee786fb99') + Makefile) +md5sums=('4dda39e216216b55e78e7a4586c137c8' + 'b619729a9374b7172fc1a7ce59f7f3ad') build() { cd ${srcdir}/master - # try to fix http://bbs.archlinux.org/viewtopic.php?id=82363 - patch -Np1 -i ${srcdir}/tvdac_load_detection.patch || return 1 mkdir nouveau cp $srcdir/Makefile ${srcdir}/master/nouveau/ Deleted: fix_resolution_detection.patch =================================================================== --- fix_resolution_detection.patch 2009-11-21 16:56:39 UTC (rev 59243) +++ fix_resolution_detection.patch 2009-11-21 17:41:14 UTC (rev 59244) @@ -1,80 +0,0 @@ -diff --git a/drivers/gpu/drm/nouveau/nv04_dac.c b/drivers/gpu/drm/nouveau/nv04_dac.c -index 587b6f5..3aedd20 100644 ---- a/drivers/gpu/drm/nouveau/nv04_dac.c -+++ b/drivers/gpu/drm/nouveau/nv04_dac.c -@@ -236,29 +236,42 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - testval = dev_priv->vbios->dactestval; - } - -+ nv_wr32(dev, 0x60081c, 0x22255256); /*216780.520000 write32 #1 NV_PCRTC[0].CRTC_081C <- 0x22255256*/ -+ nv_wr32(dev, 0x60281c, 0x22255256); /*216781.520033 write32 #1 NV_PCRTC[1].CRTC_081C <- 0x22255256*/ -+ nv_wr32(dev, 0x1084, 0x205749); /*216786.521228 write32 #1 NV_PBUS+0x84 <- 0x00205749*/ -+ nv_wr32(dev, 0x1588, 0x88802015); /*216796.521681 write32 #1 NV_PBUS+0x588 <- 0x88802015*/ -+ nv_wr32(dev, 0x682608, 0x20100000); /*216798.521747 write32 #1 NV11_PRAMDAC.TEST_CONTROL_OR_2_3 <- 0x20100000*/ -+ nv_wr32(dev, 0x68252c, 0x111); -+ msleep(10); -+ - saved_rtest_ctrl = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); - NVWriteRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset, - saved_rtest_ctrl & ~NV_PRAMDAC_TEST_CONTROL_PWRDWN_DAC_OFF); - - saved_powerctrl_2 = nvReadMC(dev, NV_PBUS_POWERCTRL_2); - -- nvWriteMC(dev, NV_PBUS_POWERCTRL_2, saved_powerctrl_2 & 0xd7ffffff); -+ nvWriteMC(dev, NV_PBUS_POWERCTRL_2, saved_powerctrl_2 /*& 0xd7ffffff */); - if (regoffset == 0x68) { - saved_powerctrl_4 = nvReadMC(dev, NV_PBUS_POWERCTRL_4); -+#if 0 - nvWriteMC(dev, NV_PBUS_POWERCTRL_4, saved_powerctrl_4 & 0xffffffcf); -+#endif - } - - if (dev_priv->chipset >= 0x34) { - saved_gpio_ext = NVReadCRTC(dev, 0, NV_PCRTC_GPIO_EXT); - -+#if 0 - NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, (saved_gpio_ext & ~(3 << 20)) | - (dcb->type == OUTPUT_TV ? (1 << 20) : 0)); -+#endif - } - -- msleep(4); -+ msleep(10); - - saved_routput = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset); -- head = (saved_routput & 0x100) >> 8; -+ /* head = (saved_routput & 0x100) >> 8; */ -+ head = 1; - #if 0 - /* if there's a spare crtc, using it will minimise flicker for the case - * where the in-use crtc is in use by an off-chip tmds encoder */ -@@ -267,13 +280,14 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - #endif - /* nv driver and nv31 use 0xfffffeee, nv34 and 6600 use 0xfffffece */ - routput = (saved_routput & 0xfffffece) | head << 8; -- -+#if 0 - if (nv_arch(dev) >= NV_40) { - if (dcb->type == OUTPUT_TV) - routput |= 1 << 20; - else - routput &= ~(1 << 20); - } -+#endif - - NVWriteRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset, routput); - msleep(1); -@@ -286,10 +300,12 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - temp = NVReadRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL); - NVWriteRAMDAC(dev, head, NV_PRAMDAC_TEST_CONTROL, - temp | NV_PRAMDAC_TEST_CONTROL_TP_INS_EN_ASSERTED); -- msleep(5); -+ msleep(10); - - temp = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); - -+ printk("NV_PRAMDAC_TEST_CONTROL + %x: %x\n", regoffset, temp); -+ - if (dcb->type == OUTPUT_TV) - present = (nv17_tv_detect(encoder, connector, (temp >> 28) & 0xe) - == connector_status_connected); Deleted: tvdac_load_detection.patch =================================================================== --- tvdac_load_detection.patch 2009-11-21 16:56:39 UTC (rev 59243) +++ tvdac_load_detection.patch 2009-11-21 17:41:14 UTC (rev 59244) @@ -1,121 +0,0 @@ -diff --git a/drivers/gpu/drm/nouveau/nv04_dac.c b/drivers/gpu/drm/nouveau/nv04_dac.c -index 587b6f5..80a1636 100644 ---- a/drivers/gpu/drm/nouveau/nv04_dac.c -+++ b/drivers/gpu/drm/nouveau/nv04_dac.c -@@ -220,7 +220,8 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - struct dcb_entry *dcb = nouveau_encoder(encoder)->dcb; - uint32_t testval, regoffset = nv04_dac_output_offset(encoder); - uint32_t saved_powerctrl_2 = 0, saved_powerctrl_4 = 0, saved_routput, -- saved_rtest_ctrl, temp, saved_gpio_ext = 0, routput; -+ saved_rtest_ctrl, temp, saved_gpio_ext = 0, saved_pcrtc_850 = 0, -+ routput; - int head, present = 0; - - #define RGB_TEST_DATA(r, g, b) (r << 0 | g << 10 | b << 20) -@@ -248,11 +249,31 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - nvWriteMC(dev, NV_PBUS_POWERCTRL_4, saved_powerctrl_4 & 0xffffffcf); - } - -- if (dev_priv->chipset >= 0x34) { -+ if (nv_arch(dev) >= NV_30) { - saved_gpio_ext = NVReadCRTC(dev, 0, NV_PCRTC_GPIO_EXT); -+ printk("PCRTC[0]+GPIO_EXT: %x\n", saved_gpio_ext); -+ } -+ -+ if (nv_arch(dev) >= NV_40) { -+ saved_pcrtc_850 = NVReadCRTC(dev, 0, NV_PCRTC_850); -+ printk("PCRTC[0]+850: %x\n", saved_pcrtc_850); -+ -+ } - -- NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, (saved_gpio_ext & ~(3 << 20)) | -+ if ((dev_priv->chipset >= 0x34 && dev_priv->chipset < 0x44) || -+ (nv_arch(dev) == NV_30 && !dev_priv->VBIOS.is_mobile)) { -+ NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, -+ (saved_gpio_ext & ~(3 << 20)) | - (dcb->type == OUTPUT_TV ? (1 << 20) : 0)); -+ -+ } else if (dev_priv->chipset >= 0x44) { -+ NVWriteCRTC(dev, 0, NV_PCRTC_850, -+ (saved_pcrtc_850 & ~0xf0) | -+ (dcb->type == OUTPUT_TV ? 0x50 : 0x00)); -+ -+ NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, -+ (saved_gpio_ext & ~0xf0) | -+ (dcb->type == OUTPUT_TV ? 0x50 : 0x00)); - } - - msleep(4); -@@ -268,7 +289,7 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - /* nv driver and nv31 use 0xfffffeee, nv34 and 6600 use 0xfffffece */ - routput = (saved_routput & 0xfffffece) | head << 8; - -- if (nv_arch(dev) >= NV_40) { -+ if (dev_priv->chipset >= 0x4b) { - if (dcb->type == OUTPUT_TV) - routput |= 1 << 20; - else -@@ -289,6 +310,7 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - msleep(5); - - temp = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset); -+ printk("NV_PRAMDAC_TEST_CONTROL + %x: %x\n", regoffset, temp); - - if (dcb->type == OUTPUT_TV) - present = (nv17_tv_detect(encoder, connector, (temp >> 28) & 0xe) -@@ -308,8 +330,11 @@ enum drm_connector_status nv17_dac_detect(struct drm_encoder *encoder, - nvWriteMC(dev, NV_PBUS_POWERCTRL_4, saved_powerctrl_4); - nvWriteMC(dev, NV_PBUS_POWERCTRL_2, saved_powerctrl_2); - -- if (dev_priv->chipset >= 0x34) -- NVWriteRAMDAC(dev, 0, NV_PCRTC_GPIO_EXT, saved_gpio_ext); -+ if (nv_arch(dev) >= NV_30) -+ NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, saved_gpio_ext); -+ -+ if (nv_arch(dev) >= NV_40) -+ NVWriteCRTC(dev, 0, NV_PCRTC_850, saved_pcrtc_850); - - if (present) { - NV_INFO(dev, "Load detected on output %c\n", '@' + ffs(dcb->or)); -diff --git a/drivers/gpu/drm/nouveau/nv17_tv.c b/drivers/gpu/drm/nouveau/nv17_tv.c -index 34f95c7..0c125e1 100644 ---- a/drivers/gpu/drm/nouveau/nv17_tv.c -+++ b/drivers/gpu/drm/nouveau/nv17_tv.c -@@ -237,14 +237,20 @@ static void nv17_tv_dpms(struct drm_encoder *encoder, int mode) - - nv_load_ptv(dev, regs, 200); - -- if (dev_priv->chipset >= 0x34) { -- uint32_t *gpio_ext = &dev_priv->mode_reg.crtc_reg[0].gpio_ext; -- -- *gpio_ext &= ~(3 << 20); -- if (mode == DRM_MODE_DPMS_ON) -- *gpio_ext |= 1 << 20; -- -- NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, *gpio_ext); -+ if ((dev_priv->chipset >= 0x34 && dev_priv->chipset < 0x44) || -+ (nv_arch(dev) == NV_30 && !dev_priv->VBIOS.is_mobile)) { -+ NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, -+ (dev_priv->mode_reg.crtc_reg[0].gpio_ext & ~(3 << 20)) | -+ (mode == DRM_MODE_DPMS_ON ? (1 << 20) : 0)); -+ -+ } else if (dev_priv->chipset >= 0x44) { -+ NVWriteCRTC(dev, 0, NV_PCRTC_850, -+ (NVReadCRTC(dev, 0, NV_PCRTC_850) & ~0xf0) | -+ (mode == DRM_MODE_DPMS_ON ? 0x50 : 0x00)); -+ -+ NVWriteCRTC(dev, 0, NV_PCRTC_GPIO_EXT, -+ (dev_priv->mode_reg.crtc_reg[0].gpio_ext & ~0xf0) | -+ (mode == DRM_MODE_DPMS_ON ? 0x50 : 0x00)); - } - - nv04_dac_update_dacclk(encoder, mode == DRM_MODE_DPMS_ON); -@@ -299,7 +305,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder) - /* Set the DACCLK register */ - dacclk = (NVReadRAMDAC(dev, 0, dacclk_off) & ~0x30) | 0x1; - -- if (nv_arch(dev) == NV_40) -+ if (dev_priv->chipset >= 0x4b) - dacclk |= 1 << 20; - - if (tv_norm->kind == CTV_ENC_MODE) {