From 50bd00fe1f50b85ec63ed20f3e68e0b14ef8174b Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Sat, 4 Sep 2004 09:30:24 +0000 Subject: [PATCH] added fixed CRTC FIFO watermark setup (in a temporary fashion). This should solve the 'bandwidth trouble' (memory fetch errors, noise on screen) on coldstarted cards. Tested and found OK on TNT2-M64. Coldstart is now just perfect there! git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8837 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../accelerants/nvidia/engine/nv_info.c | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/engine/nv_info.c b/src/add-ons/accelerants/nvidia/engine/nv_info.c index 99b8ebce88..26d6a0f438 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_info.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_info.c @@ -24,6 +24,7 @@ static status_t coldstart_card(uint8* rom, uint16 init1, uint16 init2, uint16 in static status_t exec_type1_script(uint8* rom, uint16 adress, int16* size, uint16 ram_tab); static void log_pll(uint32 reg); static void setup_ram_config(uint8* rom, uint16 ram_tab); +static status_t nv_crtc_setup_fifo(void); /* Parse the BIOS PINS structure if there */ status_t parse_pins () @@ -222,6 +223,9 @@ static status_t coldstart_card(uint8* rom, uint16 init1, uint16 init2, uint16 in /* now enable ROM shadow or the card will remain shut-off! */ NV_REG32(0x00001800 + NVCFG_ROMSHADOW) |= 0x00000001; + + //temporary: should be called from setmode probably.. + nv_crtc_setup_fifo(); } else { @@ -237,7 +241,7 @@ static status_t coldstart_card(uint8* rom, uint16 init1, uint16 init2, uint16 in } /* This routine is complete for pre-NV10. It's tested on a Elsa Erazor III with TNT2 - * (NV05), which coldstarts perfectly. */ + * (NV05) and on a no-name TNT2-M64. Both cards coldstart perfectly. */ static status_t exec_type1_script(uint8* rom, uint16 adress, int16* size, uint16 ram_tab) { status_t result = B_OK; @@ -786,13 +790,33 @@ static void setup_ram_config(uint8* rom, uint16 ram_tab) * set to 128bits width while we should be set to 64bits width, so correct. */ if (((uint32 *)si->framebuffer)[3] != data) { - LOG(8,("INFO: ---RAM width tested: width is 64bits, correcting settings\n")); + LOG(8,("INFO: ---RAM width tested: width is 64bits, correcting settings.\n")); NV_REG32(NV32_NV4STRAPINFO) &= ~0x00000004; } + else + { + LOG(8,("INFO: ---RAM width tested: access is OK.\n")); + } //fixme?: do RAM size test } +//fixme: move to crtc sourcefile, also setup for crtc2(?) +static status_t nv_crtc_setup_fifo() +{ + /* enable access to primary head */ + set_crtc_owner(0); + + //fixme: setup according to colordepth and RAM bus width... + /* set CRTC FIFO burst size to 256 */ + CRTCW(FIFO, 0x03); + + /* set CRTC FIFO low watermark to 32 */ + CRTCW(FIFO_LWM, 0x20); + + return B_OK; +} + /* fake_pins presumes the card was coldstarted by it's BIOS */ void fake_pins(void) {