From fa42e59564cb8917f3628570af5283c3f3bad838 Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Mon, 31 Aug 2009 08:55:02 +0000 Subject: [PATCH] rewrote memory size detection. This should fix black screen at app_server startup on a number of GF7xxx cards (humdinger's for instance). updated docs, bumped version to 0.98. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32845 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../accelerants/nvidia/engine/nv_general.c | 2 +- .../accelerants/nvidia/engine/nv_info.c | 40 ++++--------------- .../drivers/graphics/nvidia/UPDATE.html | 5 ++- .../kernel/drivers/graphics/nvidia/driver.c | 29 +++++++++----- 4 files changed, 31 insertions(+), 45 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/engine/nv_general.c b/src/add-ons/accelerants/nvidia/engine/nv_general.c index c967440680..814e00c404 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_general.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_general.c @@ -92,7 +92,7 @@ status_t nv_general_powerup() { status_t status; - LOG(1,("POWERUP: Haiku nVidia Accelerant 0.97 running.\n")); + LOG(1,("POWERUP: Haiku nVidia Accelerant 0.98 running.\n")); /* log VBLANK INT usability status */ if (si->ps.int_assigned) diff --git a/src/add-ons/accelerants/nvidia/engine/nv_info.c b/src/add-ons/accelerants/nvidia/engine/nv_info.c index ce76e45c1a..1431a46bd4 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_info.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_info.c @@ -3233,6 +3233,7 @@ static void getRAMsize_arch_nv10_20_30_40(void) { uint32 dev_manID = CFGR(DEVID); uint32 strapinfo = NV_REG32(NV32_NV10STRAPINFO); + uint32 mem_size; switch (dev_manID) { @@ -3243,44 +3244,19 @@ static void getRAMsize_arch_nv10_20_30_40(void) LOG(8,("INFO: nVidia GPU with UMA detected\n")); break; default: + LOG(8,("INFO: kerneldriver mapped %3.3fMb framebuffer memory\n", + (si->ps.memory_size / (1024.0 * 1024.0)))); LOG(8,("INFO: (Memory detection) Strapinfo value is: $%08x\n", strapinfo)); - switch ((strapinfo & 0x3ff00000) >> 20) - { - case 2: - si->ps.memory_size = 2 * 1024 * 1024; - break; - case 4: - si->ps.memory_size = 4 * 1024 * 1024; - break; - case 8: - si->ps.memory_size = 8 * 1024 * 1024; - break; - case 16: - si->ps.memory_size = 16 * 1024 * 1024; - break; - case 32: - si->ps.memory_size = 32 * 1024 * 1024; - break; - case 64: - si->ps.memory_size = 64 * 1024 * 1024; - break; - case 128: - si->ps.memory_size = 128 * 1024 * 1024; - break; - case 256: - si->ps.memory_size = 256 * 1024 * 1024; - break; - case 512: - si->ps.memory_size = 512 * 1024 * 1024; - break; - default: - si->ps.memory_size = 16 * 1024 * 1024; + mem_size = (strapinfo & 0x3ff00000); + if (!mem_size) { + mem_size = 16 * 1024 * 1024; LOG(8,("INFO: NV10/20/30 architecture chip with unknown RAM amount detected;\n")); LOG(8,("INFO: Setting 16Mb\n")); - break; } + /* don't attempt to adress memory not mapped by the kerneldriver */ + if (si->ps.memory_size > mem_size) si->ps.memory_size = mem_size; } } diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html index a37f0b9c5a..19d65c65bf 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.97, Rudolf)

+

head (SVN 0.98, Rudolf)

nv_driver 0.80 (Rudolf)