Asegurar soporte DMA, UDMA-5 y ATA100 en las placas con el chipset VIA-VT82Cxxx


Las placas madres con el chipset via-VT82cxxx, por ejemplo la vt82c686b soportan UDMA5 y velocidad del bus IDE a 66 o 100 MHz, pero estas opciones no se habilitan por defecto. Explico como configurar el kernel y que argumentos agregar al kernel (en el lilo.conf) y hacer que vuestro disco alcance velocidades de transferencia superiores a los 28 MB/segundo.

Mucha gente tiene problemas para habilitar el DMA-5 para los discos IDE en las placas VIA, ello se debe a que hay que seleccionar determinadas opciones a la hora de compilar el kernel. Básicamente, hay que llevar a cabo tres tareas:

  • Habilitar DMA en el kernel.
  • Agregar soporte del VIA82CXXX en el kernel.
  • Indicarle al kernel en los argumentos que debe ponerse en modo ATA66

Configuración del kernel
Asegurarse que en la configuración estén habilitadas las siguientes opciones cuando se ejecuta el make config o make menuconfig. El resultado de esa ejecución se almacena en el fichero .config en el directorio donde estén los fuentes (normalmente /usr/src/linux), por lo que podéis verificar o modificar directamente en ese fichero antes de hacer el make bzImage.

CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y

CONFIG_BLK_DEV_VIA82CXXX=y
CONFIG_IDEDMA_AUTO=y
CONFIG_IDEDMA_IVB=y
CONFIG_BLK_DEV_IDE_MODES=y

Párámetros a enviar al kernel
Una vez configurado el kernel, hay que indicar que al arranque ponga en ide en modo ATA66 (seleccionará ATA100 si está disponible). Para ello hay que pasar los siguientes argumentos al kernel:

ide0=ata66 ide0=autotune ide1=autotune
hda=autotune hdb=autotune
hdc=autotune hdd=autotune

Las líneas con autotune son para que el kernel seleccione los mejores parámetrros para el dispositivo.

Si usáis el lilo para arrancar el Linux, basta con que pongáis la siguiente línea en el lilo.conf:

append=”ide0=ata66 ide0=autotune ide1=autotune hda=autotune hdb=autotune hdc=autotune hdd=autotune”

Ahora instala el kernel, ejecuta el lilo y reinicia.

Prueba que esté funcionando

Una vez que haya arrancado, vamos a verificar el resultado,
deberás ver los siguientes en el dmesg:

mnm:~# dmesg
Linux version 2.4.2 (root@mnm)
(gcc version 2.95.3 20010125 (prerelease))
#7 Thu Feb 22 13:48:06 CET 2001
BIOS-provided physical RAM map:
….
Kernel command line: auto BOOT_IMAGE=2.4.2 ro root=302
ide0=ata66 ide0=autotune ide1=autotune hda=autotune
hdb=autotune hdc=autotune hdd=autotune
ide_setup: ide0=ata66
ide_setup: ide0=autotune
ide_setup: ide1=autotune
ide_setup: hda=autotune
ide_setup: hdb=autotune
ide_setup: hdc=autotune
ide_setup: hdd=autotune
Initializing CPU#0
Detected 797.996 MHz processor.

Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
VP_IDE: IDE controller on PCI bus 00 dev 39
VP_IDE: chipset revision 6
VP_IDE: not 100% native mode: will probe irqs later
VP_IDE: VIA vt82c686b (rev 41) IDE UDMA100 controller on pci00:07.1
VP_IDE: ATA-66/100 forced bit set (WARNING)!!
ide0: BM-DMA at 0xc000-0xc007, BIOS settings: hda:DMA, hdb:DMA
ide1: BM-DMA at 0xc008-0xc00f, BIOS settings: hdc:pio, hdd:DMA
hda: ST330621A, ATA DISK drive
hdb: ST330621A, ATA DISK drive
hdd: _NEC DV-5700A, ATAPI CD/DVD-ROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: 58633344 sectors (30020 MB) w/512KiB Cache, CHS=3649/255/63, UDMA(100)
hdb: 58633344 sectors (30020 MB) w/512KiB Cache, CHS=3649/255/63, UDMA(100)
hdd: ATAPI 40X DVD-ROM drive, 256kB Cache, UDMA(33)

Para verificar los parámetros de los discos, usamos el hdparm. Deberéis obtener resultados similares a los siguientes (para un PIII a 800 MHz):

##########
mnm:~# hdparm /dev/hda

/dev/hda:
multcount = 0 (off)
I/O support = 1 (32-bit)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 3649/255/63, sectors = 58633281, start = 0

###########
mnm:~# hdparm -i /dev/hda

/dev/hda:

Model=ST330621A, FwRev=3.35, SerialNo=5EE01W9E
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=58633344
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5

Si queréis verificar la velocidad de transferencia del disco:

mnm:~# hdparm -t /dev/hda

/dev/hda:
Timing buffered disk reads: 64 MB in 2.15 seconds = 29.77 MB/sec

Veréis que vuela ;-), el mismo disco sin el soporte UDMA5 me daba 9 MB/sec, y sin DMA me daba ¡¡¡1.6 MB/sec!!!!

Suerte…

–ricardo

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=551 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.