fixed PLL selection trouble on GF6xxx and 7xxx cards with a little help from the nouveau project and a lot of testing. Now dualhead should work on most of these cards, and now you should nolonger be presented with a 'out of range' message on your DVI connected screen if the boot splash screen is at a lower-than-native resolution for your screen. This hopefully fixes bugs #1557, #2780, #2948 and #4321. Bumped version to 1.00. Yes. +alphabranch.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32946 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rudolf Cornelissen 2009-09-05 16:02:20 +00:00
parent 36204b6dd4
commit faed7a30d4
5 changed files with 46 additions and 24 deletions

View File

@ -1,6 +1,6 @@
/* program the DAC */
/* Author:
Rudolf Cornelissen 12/2003-7/2009
Rudolf Cornelissen 12/2003-9/2009
*/
#define MODULE_BIT 0x00010000
@ -200,6 +200,20 @@ status_t nv_dac_set_pix_pll(display_mode target)
/* Give the PIXPLL frequency some time to lock... (there's no indication bit available) */
snooze(1000);
/* enable programmable PLLs */
/* (confirmed PLLSEL to be a write-only register on NV04 and NV11!) */
/* note:
* setup PLL assignment _after_ programming PLL */
if (si->ps.secondary_head) {
if (si->ps.card_arch < NV40A)
DACW(PLLSEL, 0x30000f00);
else
DACW(PLLSEL, 0x30000f04);
} else {
DACW(PLLSEL, 0x10000700);
}
LOG(2,("DAC: PIX PLL frequency should be locked now...\n"));
return B_OK;

View File

@ -1,6 +1,6 @@
/* program the secondary DAC */
/* Author:
Rudolf Cornelissen 12/2003-7/2009
Rudolf Cornelissen 12/2003-9/2009
*/
#define MODULE_BIT 0x00001000
@ -203,6 +203,20 @@ status_t nv_dac2_set_pix_pll(display_mode target)
/* Give the PIXPLL frequency some time to lock... (there's no indication bit available) */
snooze(1000);
/* enable programmable PLLs */
/* (confirmed PLLSEL to be a write-only register on NV04 and NV11!) */
/* note:
* setup PLL assignment _after_ programming PLL */
if (si->ps.secondary_head) {
if (si->ps.card_arch < NV40A)
DACW(PLLSEL, 0x30000f00);
else
DACW(PLLSEL, 0x30000f04);
} else {
DACW(PLLSEL, 0x10000700);
}
LOG(2,("DAC2: PIX PLL frequency should be locked now...\n"));
return B_OK;

View File

@ -1,7 +1,7 @@
/* Authors:
Mark Watson 12/1999,
Apsed,
Rudolf Cornelissen 10/2002-8/2009
Rudolf Cornelissen 10/2002-9/2009
tst..
*/
@ -92,7 +92,7 @@ status_t nv_general_powerup()
{
status_t status;
LOG(1,("POWERUP: Haiku nVidia Accelerant 0.99 running.\n"));
LOG(1,("POWERUP: Haiku nVidia Accelerant 1.00 running.\n"));
/* log VBLANK INT usability status */
if (si->ps.int_assigned)
@ -1789,13 +1789,6 @@ static status_t nv_general_bios_to_powergraphics()
DACW(GENCTRL, 0x00100100);
if (si->ps.secondary_head) DAC2W(GENCTRL, 0x00100100);
/* enable programmable PLLs */
/* (confirmed PLLSEL to be a write-only register on NV04 and NV11!) */
if (si->ps.secondary_head)
DACW(PLLSEL, 0x30000f00);
else
DACW(PLLSEL, 0x10000700);
/* turn on DAC and make sure detection testsignal routing is disabled
* (b16 = disable DAC,
* b12 = enable testsignal output */

View File

@ -41,7 +41,7 @@ Geforce 8xxx and later series cards (NV50, G80, also known as GPGPU, general pur
<li>B_YCbCr422 hardware overlay support on both TNT and GeForce series cards, <strong>except</strong> for GeForce 6xxx and 7xxx series (GeForce 6800 works though). Overlay output 'follows head' in dualhead stretch/switch modes;
<li>Dualhead support on GeForce dualhead cards (use 'Dualhead Setup' from BeBits for now);
<li>DVI and laptop panel support;
<li>Widescreen mode support (<strong>all</strong> screens must be widescreen type <strong>and</strong> they must all be digitally connected);
<li>Widescreen mode support (<strong>all</strong> screens must be widescreen type;
<li>Basic AGP mode support on AGP cards, using the new (seperate) Haiku AGP busmanager;
<li>Basic ('legacy') PCIe support;
<li>Coldstart support for analog connected screens on most cards except TNT1, GeForce 6xxx and 7xxx series;
@ -54,20 +54,20 @@ Geforce 8xxx and later series cards (NV50, G80, also known as GPGPU, general pur
<li>If the driver seems to create 'random' trouble make sure you have a fully functional VGA BIOS, or system BIOS for embedded cards (check for updates on the manufacturor's site). Make sure you mail me if you still have trouble but also if this version fixed that!
<li>If on a laptop the internal panel doesn't work when you connect an external monitor, make sure you set 'output device selection' to 'internal' (instead of 'auto') in the system BIOS if it has such an option. If you have this symptom on a normal card, or on a laptop without that BIOS option then you are probably out of luck for dualhead support;
<li><strong>NV40 architecture cards:</strong> (GeForce 6xxx, but 6800 AGP seems to be OK)<br>
Secondary analog monitor load detection doesn't work and we can't control very well to which connector the card's output gets routed (lack of specs). This means you might have to experiment a bit with the way you connect your monitor to the card. A single analog or DVI screen should work OK, and two analog screens should be OK as well.
We can't control very well to which connector the card's output gets routed (lack of specs). This means you might have to experiment a bit with the way you connect your monitor to the card.
</ul>
<br>
<hr>
<h2>Installation:</h2>
If you encounter bugs, please checkout the driver's <a href="http://web.inter.nl.net/users/be-hold/BeOS/NVdriver/index.html">website</a> to see if it's already on the todo list. You can also checkout the <a href="UPDATE.html">UPDATE</a> file included with this driver to see if it should have been fixed. If you think it's prudent, or if you are unsure, then please fill out the <a href="http://web.inter.nl.net/users/be-hold/BeOS/NVdriver/bugreport.html">bugreport form</a> on the site or send me an <a href="mailto:info.be-hold@inter.nl.net">Email</a>. Make sure you are as precise as possible because that will make things easier to trackdown and fix...<br>
If you encounter bugs, please see if a matching bug report already exists at <a href="http://dev.haiku-os.org">the Haiku website</a>. If not, or if you are unsure, file a new one. Make sure you are as precise as possible because that will make things easier to trackdown and fix...<br>
<br>
<br>
OK, now that's all said let's get to it ;-)<br>
<br>
In contrary to what I have said before you don't need to de-install official Be drivers for this driver to work correctly. This driver will install in the user part of the BeOS, so not in the system part where the official drivers are.<br>
BeOS first checks (during boot) if there are 'user-addons' that should be loaded for a device. If not, it loads it's own drivers (if any). You can select which driver should be loaded by hitting the spacebar as soon as the BeOS 'icons' screen appears. If you select <strong>disable user addons</strong> the system will load it's own drivers. If you don't do anything, the system will load the Haiku Nvidia TNT/GeForce graphics driver.<br>
You don't need to de-install official drivers for this driver to work correctly. This driver will install in the user part of Haiku, so not in the system part where the official drivers are.<br>
Haiku first checks (during boot) if there are 'user-addons' that should be loaded for a device. If not, it loads it's own drivers (if any). You can select which driver should be loaded by hitting the spacebar just before the Haiku 'icons' splash screen appears. If you select <strong>disable user addons</strong> the system will load it's own drivers. If you don't do anything, the system will load the Haiku Nvidia TNT/GeForce graphics driver.<br>
<br>
<strong>Note:</strong> This might turn out to be handy if you run into trouble upon testing the driver, or if you are 'tweaking' the nv.settings file...<br>
<strong>Note:</strong> This might turn out to be handy if you run into trouble upon testing the driver, or if you are 'tweaking' the nvidia.settings file...<br>
<br><br>
<strong>actual INSTALLATION:</strong><br>
<br>
@ -83,10 +83,10 @@ Unzip the zip file that contains the driver to the root folder. Now reboot and y
<br>
Currently there's no uninstall script included. Just do it manually:<br>
<br>
Delete the <strong>nv.accelerant</strong> file in <strong>home/config/add-ons/accelerants/</strong><br>
Delete the <strong>nv.driver</strong> file in <strong>home/config/add-ons/kernel/drivers/bin/</strong><br>
Delete the <strong>nv.settings</strong> file in <strong>home/config/settings/kernel/drivers/</strong><br>
Delete the <strong>nv.driver shortcut</strong> in <strong>home/config/add-ons/kernel/drivers/dev/graphics/</strong> which pointed to the file <strong>nv.driver</strong>.<br>
Delete the <strong>nvidia.accelerant</strong> file in <strong>home/config/add-ons/accelerants/</strong><br>
Delete the <strong>nvidia.driver</strong> file in <strong>home/config/add-ons/kernel/drivers/bin/</strong><br>
Delete the <strong>nvidia.settings</strong> file in <strong>home/config/settings/kernel/drivers/</strong><br>
Delete the <strong>nvidia.driver shortcut</strong> in <strong>home/config/add-ons/kernel/drivers/dev/graphics/</strong> which pointed to the file <strong>nvidia.driver</strong>.<br>
<br>
You have to reboot in order to apply the original configuration.<br>
<br>
@ -254,6 +254,6 @@ The acceleration engine is disabled.
<hr>
<br>
Rudolf Cornelissen.<br>
<p>(Page last updated on August 23, 2009)</p>
<p>(Page last updated on September 5, 2009)</p>
</body>
</html>

View File

@ -4,7 +4,7 @@
</head>
<body>
<p><h2>Changes done for each driverversion:</h2></p>
<p><h1>head (SVN 0.98, Rudolf)</h1></p>
<p><h1>head (SVN 1.00, Rudolf)</h1></p>
<ul>
<li>Fixed driver assuming enabling AGP mode succeeded on some occasions if it did not block it itself. Blocking AGP mode completely via the AGP busmanager (option 'block_agp') resulted in a crashing acceleration engine because it was setup for AGP transfers instead of using PCI transfers. Error was solved with help from user kraton.
<li>Fixed shared_info struct problem occuring when 3D 'accelerant' is used (tested Alpha 4.1): the TVencoder type definition list apparantly gets some memory assigned these days when done inside the definition of shared_info. Moved encoder list outside the shared_info definition.
@ -25,7 +25,8 @@
<li>Corrected/Added detection of third I2C bus on cards that support it. The old detection method for a third and (non-existing) fourth bus was faulty. The driver uses I2C channels for monitor DDC/EDID and TVencoder communications.
<li>DDC/EDID fetching now also works on GCC4 binaries due to a fixed fault in the accelerants/common code (which is used for that function);
<li>Added support for Haiku specific driverhook GET_PREFERRED_DISPLAY_MODE. Laptops should now also startup in native mode automatically at first system boot;
<li>Rewrote framebuffer memory detection. Accelerant now only uses the amount of RAM mapped by the kerneldriver as maximum. This fixes black screen at app_server startup on a number of GF6xxx and GF7xxx cards.
<li>Rewrote framebuffer memory detection. Accelerant now only uses the amount of RAM mapped by the kerneldriver as maximum. This fixes black screen at app_server startup on a number of GF6xxx and GF7xxx cards;
<li>Finally(!) fixed PLL selection trouble on NV40 architecture (Geforce 6xxx and 7xxx) cards. Now dualhead should (almost) always work OK, and now low-res bootscreens should nolonger result in 'frequency out of range' messages on DVI connected screens.
</ul>
<p><h1>nv_driver 0.80 (Rudolf)</h1></p>
<ul>