Known Problems

(Note this procedure is not required for SuSE 9.1 2.6.4-52 or earlier)

          1) install SuSE 9.1 kernel sources and compiler
2) The installer requires <source tree>/scripts/basic/fixdep to exist. If it is missing the driver build will fail. You can build it
using something like:
% cd /usr/src/<kernel>
% make xconfig
select "file->save" to save .config
% make scripts
3) Use installer kernel source option to point to kernel sources location
% sh NFORCE-Linux-<arch>-1.0-0283-pkg1.run --kernel-source-path=/lib/modules/<kernel#>/source
4) modify /etc/modprobe.conf file for nvsound and nvnet drivers as per the "Configuration" section of the release
notes. (e.g, add "alias snd-card-0 nvsound" and "alias eth0 nvnet")
5) reboot

          The audio driver will hang on load when used on an nForce 2 platform with 2.6 kernel and APIC enabled. This will
be fixed with the next driver update. There are two possible workarounds.

1) use the bootline option "noapic" or disable APIC in the BIOS
2) revert back to the intel8x0 driver

There are bugs in 2.4.x kernel ACPI support that may affect install and/or OS boot. If your having problems
one of the first trouble shooting tactics should be to disable ACPI. This can be done from the bootline using
"acpi=off" boot line option or by modifying the BIOS settings.
Some older distributions will not have nForce 3 IDE/SATA device IDs. This will have the following consequence:

1) IDE class driver will not be able to use DMA. This will adversely affect IDE performance. This can be worked around by
patching the driver with appropriate device IDs.
2) SATA controllers will not be available for OS installation. This means PATA drive is required for OS install. After OS
installation SATA support can be added by patching the driver with the appropriate device IDs.

To patch the driver two tables in the drivers/ide/pci/amd74xx.c driver need modification:

The first table is an array of struct amd_ide_chip called amd_ide_chips.  Each entry is of the
following form:
    { PCI_DEVICE_ID_XXXXXXXXXXX, 0xXX, AMD_UDMA_100 },

If any of the following device IDs are missing from that table:

PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE
PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA
PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2

then the amd74xx.c driver does not support the nForce 3 IDE and SATA
controllers.  To add support:

Step 1: Define PCI device ID macros.

Immediately before the amd_ide_chips table, add the following lines:

#define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE   0x00d5
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE  0x00e5
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3
#define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2  0x00ee

Step 2: Add entries to the end of the amd_ide_chips table (but before the
        terminating entry "{ 0 },").

    { PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE,    0x50, AMD_UDMA_133 },
    { PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE,    0x50, AMD_UDMA_133 },
    { PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA,    0x50, AMD_UDMA_133 },
    { PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2,    0x50, AMD_UDMA_133 },

Step 3: Add entries to the amd74xx_pci_tbl (but before the terminating entry
        "{ 0, },").

There is an array of struct pci_device_id called amd74xx_pci_tbl.  Entries
need to be added here for CK804/MCP04 support.

    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
    { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },

The number at the end of each entry (9 through 12) refers to the the corresponding entries (numbering starts with 0) in the
amd_ide_chips table.  For example, counting down in the amd_ide_chips table, the 9th entry (starting the count
with 0) should correspond with the PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE entry. If it doesn't correspond,
the numbers in the entries of amd74xx_pci_tbl will need to be adjusted accordingly.

Step 4: Rebuild the kernel.

The workaround is to do the following:

1) Extract the .run file (without installing anything) with the -x option, like so:

% ./NFORCE-Linux-x86-1.0-0283-pkg1.run -x

2) This creates a tree called NFORCE-Linux-x86-1.0-0283-pkg1.  "cd" into NFORCE-Linux-x86-1.0-0283-pkg1/nvnet.

3) Edit the file nvenet.c:

At line 1720, change the line from "spin_lock(lock);" to "spin_lock((spinlock_t*)lock);".

At line 1732, change the line from "spin_unlock(lock);" to "spin_unlock((spinlock_t*)lock);".

4) Do a "make", followed by "make install".  That should build and install the nvnet driver.