http://www.nvnews.net/vbulletin/showthread.php?p=597243#post597243
Si la desactivación de ACPI soluciona el problema de arranque pero necesita que dicha función esté activa durante la ejecución, consulte otros temas de esta lista en los que se explican los problemas conocidos y las soluciones disponibles en relación con ACPI.
El parche modifica la función mp_parse_prt() de arch/x86_64/kernel/mpparse.c. Puede corregir el archivo a mano inhabilitando la línea:
irq = entry->link.index;
que precede al comentario:
/* Dont set up the ACPI SCI because it's already up */
Si, al seguir el proceso de arranque del kernel (visible mediante dmesg), aparecen mensajes de este tipo:
..MP-BIOS bug: 8254 timer not connected to IOAPIC
...trying to set up timer (IRQ0) through the 8259A . failed.
...trying to set up timer as Virtual Wire IRQ... failed.
...trying to set up timer as ExtINT IRQ... works.
Significa que existe una entrada incorrecta en la tabla de ACPI. En los kernels 2.6, esto se soluciona especificando la opción 'acpi_skip_timer_override' en la línea de arranque. Otra posible solución es desactivar ACPI en la BIOS o mediante la opción de arranque 'acpi=off'.
El error provoca daños en la memoria al detectar cualquier bus PCI con una numeración superior a 32 y, por tanto, deja inutilizable el sistema en fases muy tempranas del proceso de instalación o arranque. En algunos sistemas, el problema se corrige dejando activada la función ACPI durante el arranque.
Por el momento no existe ninguna solución disponible para el problema, pero se ha aceptado un parche para el kernel que esperamos se incluya en futuras versiones de las distribuciones.
Red Hat Enterprise Linux, actualizaciones 2 y 3
32 bits:
ftp://download.nvidia.com/linux/nforce/installdriverdisk/rhel3/ia32/nvdriverdisk.tar.gz
64 bits:
ftp://download.nvidia.com/linux/nforce/installdriverdisk/rhel3/x86_64/nvdriverdisk.tar.gz
SuSE Linux Enterprise Server versión 8, con Service Pack 3
32 bits:
ftp://download.nvidia.com/linux/nforce/installdriverdisk/sles8/ia32/nvdriverdisk.suse.tgz
Para corregir el controlador, es preciso modificar dos de sus tablas en drivers/ide/pci/amd74xx.c. La primera tabla es una matriz del struct amd_ide_chip denominada amd_ide_chips. Cada entrada tiene el formato siguiente:
{ PCI_DEVICE_ID_XXXXXXXXXXX, 0xXX, AMD_UDMA_100 },
Si alguno de los siguientes ID de dispositivo no está en esa tabla:
PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2
significa que el controlador amd74xx.c no admite las controladoras IDE y SATA de
nForce3/4. Para añadir el soporte, haga estos cambios:
Paso 1: defina las macros de ID de dispositivo de PCI.
Agregue las líneas siguientes inmediatamente antes de la tabla amd_ide_chips.
#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 #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e
Paso 2: añada estas entradas al final de la tabla amd_ide_chips (pero antes de la entrada de finalización "{ 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 }, { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, 0x50, AMD_UDMA_133}, { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA, 0x50, AMD_UDMA_133}, { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, 0x50, AMD_UDMA_133 }, { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, 0x50, AMD_UDMA_133}, { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, 0x50, AMD_UDMA_133}, { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, 0x50, AMD_UDMA_133 },
Paso 3: añada estas entradas a la tabla amd74xx_pci_tbl (antes de la entrada de finalización "{ 0, },").
Hay una matriz del struct pci_device_id denominada amd74xx_pci_tbl. Las entradas deben añadirse aquí para el soporte de nForce3/nForce4.
{ 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 }, { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13 }, { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 }, { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 }, { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 }, { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 }, { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 },
El número que hay al final de cada entrada (del 9 al 18) hace referencia a las entradas correspondientes (la numeración empieza desde 0) de la tabla amd_ide_chips. Por ejemplo, si contamos las entradas en la tabla amd_ide_chips, la 9ª entrada (empezando desde 0) debería coincidir con la cadena PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE. Si no coincide, será necesario ajustar la numeración de las entradas en la tabla amd74xx_pci_tbl según corresponda.
Paso 4: vuelva a compilar el kernel.