Add support for Ultra/100 on intel ICH2; from Tomokazu HARADA in kern/11747.
This commit is contained in:
parent
2a63f0a46c
commit
5c800a0dab
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pciide.c,v 1.101 2001/01/05 15:20:53 bouyer Exp $ */
|
||||
/* $NetBSD: pciide.c,v 1.102 2001/01/05 15:29:39 bouyer Exp $ */
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1343,9 +1343,11 @@ piix_chip_map(sc, pa)
|
|||
sc->sc_wdcdev.DMA_cap = 2;
|
||||
switch(sc->sc_pp->ide_product) {
|
||||
case PCI_PRODUCT_INTEL_82801AA_IDE:
|
||||
case PCI_PRODUCT_INTEL_82801BA_IDE:
|
||||
sc->sc_wdcdev.UDMA_cap = 4;
|
||||
break;
|
||||
case PCI_PRODUCT_INTEL_82801BA_IDE:
|
||||
sc->sc_wdcdev.UDMA_cap = 5;
|
||||
break;
|
||||
default:
|
||||
sc->sc_wdcdev.UDMA_cap = 2;
|
||||
}
|
||||
|
@ -1369,7 +1371,8 @@ piix_chip_map(sc, pa)
|
|||
DEBUG_PROBE);
|
||||
}
|
||||
if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AA_IDE ||
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AB_IDE) {
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AB_IDE ||
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801BA_IDE) {
|
||||
WDCDEBUG_PRINT((", IDE_CONTROL 0x%x",
|
||||
pci_conf_read(sc->sc_pc, sc->sc_tag, PIIX_CONFIG)),
|
||||
DEBUG_PROBE);
|
||||
|
@ -1419,7 +1422,8 @@ piix_chip_map(sc, pa)
|
|||
DEBUG_PROBE);
|
||||
}
|
||||
if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AA_IDE ||
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AB_IDE) {
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AB_IDE
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801BA_IDE) {
|
||||
WDCDEBUG_PRINT((", IDE_CONTROL 0x%x",
|
||||
pci_conf_read(sc->sc_pc, sc->sc_tag, PIIX_CONFIG)),
|
||||
DEBUG_PROBE);
|
||||
|
@ -1578,9 +1582,28 @@ piix3_4_setup_channel(chp)
|
|||
goto pio;
|
||||
|
||||
if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AA_IDE ||
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AB_IDE) {
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AB_IDE ||
|
||||
sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801BA_IDE) {
|
||||
ideconf |= PIIX_CONFIG_PINGPONG;
|
||||
}
|
||||
if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801BA_IDE) {
|
||||
/* setup Ultra/100 */
|
||||
if (drvp->UDMA_mode > 2 &&
|
||||
(ideconf & PIIX_CONFIG_CR(channel, drive)) == 0)
|
||||
drvp->UDMA_mode = 2;
|
||||
if (drvp->UDMA_mode > 4) {
|
||||
ideconf |= PIIX_CONFIG_UDMA100(channel, drive);
|
||||
} else {
|
||||
ideconf &= ~PIIX_CONFIG_UDMA100(channel, drive);
|
||||
if (drvp->UDMA_mode > 2) {
|
||||
ideconf |= PIIX_CONFIG_UDMA66(channel,
|
||||
drive);
|
||||
} else {
|
||||
ideconf &= ~PIIX_CONFIG_UDMA66(channel,
|
||||
drive);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sc->sc_pp->ide_product == PCI_PRODUCT_INTEL_82801AA_IDE) {
|
||||
/* setup Ultra/66 */
|
||||
if (drvp->UDMA_mode > 2 &&
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pciide_piix_reg.h,v 1.4 2000/05/15 08:46:01 bouyer Exp $ */
|
||||
/* $NetBSD: pciide_piix_reg.h,v 1.5 2001/01/05 15:29:40 bouyer Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Manuel Bouyer.
|
||||
|
@ -99,13 +99,15 @@
|
|||
(((x) << ((channel * 8) + (drive * 4))) << PIIX_UDMATIM_SHIFT)
|
||||
|
||||
/*
|
||||
* IDE config register (ICH/ICH0 only)
|
||||
* IDE config register (ICH/ICH0/ICH2 only)
|
||||
*/
|
||||
#define PIIX_CONFIG 0x54
|
||||
#define PIIX_CONFIG_PINGPONG 0x0400
|
||||
/* The following are only for the 82801AA (ICH) */
|
||||
/* The following are only for the 82801AA (ICH) and 82801BA (ICH2) */
|
||||
#define PIIX_CONFIG_CR(channel, drive) (0x0010 << ((channel) * 2 + (drive)))
|
||||
#define PIIX_CONFIG_UDMA66(channel, drive) (0x0001 << ((channel) * 2 + (drive)))
|
||||
/* The following are only for the 82801BA (ICH2) */
|
||||
#define PIIX_CONFIG_UDMA100(channel, drive) (0x1000 << ((channel) * 2 + (drive)))
|
||||
|
||||
/*
|
||||
* these tables define the differents values to upload to the
|
||||
|
@ -116,4 +118,4 @@ static int8_t piix_isp_pio[] = {0x00, 0x00, 0x01, 0x02, 0x02};
|
|||
static int8_t piix_rtc_pio[] = {0x00, 0x00, 0x00, 0x01, 0x03};
|
||||
static int8_t piix_isp_dma[] = {0x00, 0x02, 0x02};
|
||||
static int8_t piix_rtc_dma[] = {0x00, 0x02, 0x03};
|
||||
static int8_t piix4_sct_udma[] = {0x00, 0x01, 0x02, 0x01, 0x02};
|
||||
static int8_t piix4_sct_udma[] = {0x00, 0x01, 0x02, 0x01, 0x02, 0x01};
|
||||
|
|
Loading…
Reference in New Issue