From fa0fea5f257dd13ff593302a88562b7e24814c86 Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Sun, 17 May 2009 20:37:20 +0000 Subject: [PATCH] fixed acceleration engine crashes on at least G72 cards by powering up a new part of the engine. This fixes acc on Geforce 7300/7400/7500 cards, and closes tickets #927, #1535 and #3482. In order to test this you need to go back to Haiku R30277 at least since app_server nolonger uses acceleration. Acceleration code was synced to Xfree86 4.8.0. and no chances were found. Bumped version to 0.90, updated docs. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30783 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/accelerants/nvidia/engine/nv_acc.c | 6 +++--- src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c | 6 +++--- src/add-ons/accelerants/nvidia/engine/nv_general.c | 13 +++++++------ .../kernel/drivers/graphics/nvidia/UPDATE.html | 3 ++- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/engine/nv_acc.c b/src/add-ons/accelerants/nvidia/engine/nv_acc.c index 8d6a641a67..9f6fde0ba2 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_acc.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_acc.c @@ -1,6 +1,6 @@ /* NV Acceleration functions */ /* Author: - Rudolf Cornelissen 8/2003-5/2005. + Rudolf Cornelissen 8/2003-5/2009. This code was possible thanks to: - the Linux XFree86 NV driver, @@ -85,9 +85,9 @@ status_t nv_acc_init() uint16 cnt; /* a hanging engine only recovers from a complete power-down/power-up cycle */ - NV_REG32(NV32_PWRUPCTRL) = 0x13110011; + NV_REG32(NV32_PWRUPCTRL) = 0xffff00ff; snooze(1000); - NV_REG32(NV32_PWRUPCTRL) = 0x13111111; + NV_REG32(NV32_PWRUPCTRL) = 0xffffffff; /* setup PTIMER: */ //fixme? how about NV28 setup as just after coldstarting? (see nv_info.c) diff --git a/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c b/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c index cefdf2023b..6a6ec90b13 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c @@ -1,7 +1,7 @@ /* NV Acceleration functions */ /* Author: - Rudolf Cornelissen 8/2003-9/2007. + Rudolf Cornelissen 8/2003-5/2009. This code was possible thanks to: - the Linux XFree86 NV driver, @@ -80,9 +80,9 @@ status_t nv_acc_init_dma() err = 0; /* a hanging engine only recovers from a complete power-down/power-up cycle */ - NV_REG32(NV32_PWRUPCTRL) = 0x13110011; + NV_REG32(NV32_PWRUPCTRL) = 0xffff00ff; snooze(1000); - NV_REG32(NV32_PWRUPCTRL) = 0x13111111; + NV_REG32(NV32_PWRUPCTRL) = 0xffffffff; /* don't try this on NV20 and later.. */ /* note: diff --git a/src/add-ons/accelerants/nvidia/engine/nv_general.c b/src/add-ons/accelerants/nvidia/engine/nv_general.c index 7e9da84278..88fd7d9e13 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_general.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_general.c @@ -1,7 +1,7 @@ /* Authors: Mark Watson 12/1999, Apsed, - Rudolf Cornelissen 10/2002-6/2008 + Rudolf Cornelissen 10/2002-5/2009 tst.. */ @@ -92,7 +92,7 @@ status_t nv_general_powerup() { status_t status; - LOG(1,("POWERUP: Haiku nVidia Accelerant 0.89 running.\n")); + LOG(1,("POWERUP: Haiku nVidia Accelerant 0.90 running.\n")); /* log VBLANK INT usability status */ if (si->ps.int_assigned) @@ -1654,17 +1654,18 @@ status_t nv_general_head_select(bool cross) static void unlock_card(void) { - /* power-up all nvidia hardware function blocks */ + /* make sure to power-up all nvidia hardware function blocks */ /* bit 28: OVERLAY ENGINE (BES), * bit 25: CRTC2, (> NV04A) * bit 24: CRTC1, * bit 20: framebuffer, * bit 16: PPMI, + * bit 13: some part of at least the G72 acceleration engine, * bit 12: PGRAPH, * bit 8: PFIFO, * bit 4: PMEDIA, * bit 0: TVOUT. (> NV04A) */ - NV_REG32(NV32_PWRUPCTRL) = 0x13111111; + NV_REG32(NV32_PWRUPCTRL) = 0xffffffff; /* select colormode CRTC registers base adresses */ NV_REG8(NV8_MISCW) = 0xcb; @@ -1689,9 +1690,9 @@ static void unlock_card(void) static status_t nv_general_bios_to_powergraphics() { /* let acc engine make power off/power on cycle to start 'fresh' */ - NV_REG32(NV32_PWRUPCTRL) = 0x13110011; + NV_REG32(NV32_PWRUPCTRL) = 0xffff00ff; snooze(1000); - NV_REG32(NV32_PWRUPCTRL) = 0x13111111; + NV_REG32(NV32_PWRUPCTRL) = 0xffffffff; unlock_card(); diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html index 806e744213..9457446488 100644 --- a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html +++ b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html @@ -4,7 +4,7 @@

Changes done for each driverversion:

-

head (SVN 0.89, Rudolf)

+

head (SVN 0.90, Rudolf)

nv_driver 0.80 (Rudolf)