According to FreeBSD and other references, the cs5530 IDE controller,

while capable of UDMA mode 2, is swamped if you actually go that
fast, which is not good for the other functions on this multifunction
southbridge chip, so limit UDMA to mode 1.
This commit is contained in:
fair 2005-06-25 05:04:01 +00:00
parent f3574e6c00
commit 1adffc6d99
1 changed files with 10 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: geodeide.c,v 1.8 2005/02/27 00:27:32 perry Exp $ */
/* $NetBSD: geodeide.c,v 1.9 2005/06/25 05:04:01 fair Exp $ */
/*
* Copyright (c) 2004 Manuel Bouyer.
@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: geodeide.c,v 1.8 2005/02/27 00:27:32 perry Exp $");
__KERNEL_RCSID(0, "$NetBSD: geodeide.c,v 1.9 2005/06/25 05:04:01 fair Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -124,6 +124,14 @@ geodeide_chip_map(struct pciide_softc *sc, struct pci_attach_args *pa)
sc->sc_wdcdev.sc_atac.atac_pio_cap = 4;
sc->sc_wdcdev.sc_atac.atac_dma_cap = 2;
sc->sc_wdcdev.sc_atac.atac_udma_cap = 2;
/*
* The 5530 is utterly swamped by UDMA mode 2, so limit to mode 1
* so that the chip is able to perform the other functions it has
* while IDE UDMA is going on.
*/
if (sc->sc_pp->ide_product == PCI_PRODUCT_CYRIX_CX5530_IDE) {
sc->sc_wdcdev.sc_atac.atac_udma_cap = 1;
}
sc->sc_wdcdev.sc_atac.atac_set_modes = geodeide_setup_channel;
sc->sc_wdcdev.sc_atac.atac_channels = sc->wdc_chanarray;
sc->sc_wdcdev.sc_atac.atac_nchannels = PCIIDE_NUM_CHANNELS;