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
This commit is contained in:
parent
30f5b3138d
commit
50bd00fe1f
@ -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 status_t exec_type1_script(uint8* rom, uint16 adress, int16* size, uint16 ram_tab);
|
||||||
static void log_pll(uint32 reg);
|
static void log_pll(uint32 reg);
|
||||||
static void setup_ram_config(uint8* rom, uint16 ram_tab);
|
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 */
|
/* Parse the BIOS PINS structure if there */
|
||||||
status_t parse_pins ()
|
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! */
|
/* now enable ROM shadow or the card will remain shut-off! */
|
||||||
NV_REG32(0x00001800 + NVCFG_ROMSHADOW) |= 0x00000001;
|
NV_REG32(0x00001800 + NVCFG_ROMSHADOW) |= 0x00000001;
|
||||||
|
|
||||||
|
//temporary: should be called from setmode probably..
|
||||||
|
nv_crtc_setup_fifo();
|
||||||
}
|
}
|
||||||
else
|
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
|
/* 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)
|
static status_t exec_type1_script(uint8* rom, uint16 adress, int16* size, uint16 ram_tab)
|
||||||
{
|
{
|
||||||
status_t result = B_OK;
|
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. */
|
* set to 128bits width while we should be set to 64bits width, so correct. */
|
||||||
if (((uint32 *)si->framebuffer)[3] != data)
|
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;
|
NV_REG32(NV32_NV4STRAPINFO) &= ~0x00000004;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(8,("INFO: ---RAM width tested: access is OK.\n"));
|
||||||
|
}
|
||||||
|
|
||||||
//fixme?: do RAM size test
|
//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 */
|
/* fake_pins presumes the card was coldstarted by it's BIOS */
|
||||||
void fake_pins(void)
|
void fake_pins(void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user