diff options
Diffstat (limited to 'drivers/ide/sis5513.c')
-rw-r--r-- | drivers/ide/sis5513.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/ide/sis5513.c b/drivers/ide/sis5513.c index 571cae563..8292d659c 100644 --- a/drivers/ide/sis5513.c +++ b/drivers/ide/sis5513.c @@ -48,6 +48,7 @@ static const struct { { "SiS540", PCI_DEVICE_ID_SI_540, SIS5513_FLAG_ATA_66, }, { "SiS620", PCI_DEVICE_ID_SI_620, SIS5513_FLAG_ATA_66|SIS5513_FLAG_LATENCY, }, { "SiS630", PCI_DEVICE_ID_SI_630, SIS5513_FLAG_ATA_66|SIS5513_FLAG_LATENCY, }, + { "SiS730", PCI_DEVICE_ID_SI_730, SIS5513_FLAG_ATA_66|SIS5513_FLAG_LATENCY, }, { "SiS5591", PCI_DEVICE_ID_SI_5591, SIS5513_FLAG_ATA_33, }, { "SiS5597", PCI_DEVICE_ID_SI_5597, SIS5513_FLAG_ATA_33, }, { "SiS5600", PCI_DEVICE_ID_SI_5600, SIS5513_FLAG_ATA_33, }, @@ -337,6 +338,7 @@ static int sis5513_tune_chipset (ide_drive_t *drive, byte speed) case PCI_DEVICE_ID_SI_540: case PCI_DEVICE_ID_SI_620: case PCI_DEVICE_ID_SI_630: + case PCI_DEVICE_ID_SI_730: unmask = 0xF0; four_two = 0x01; break; @@ -370,7 +372,7 @@ static int sis5513_tune_chipset (ide_drive_t *drive, byte speed) switch(speed) { #ifdef CONFIG_BLK_DEV_IDEDMA - case XFER_UDMA_5: /* can not do ultra mode 5 yet */ + case XFER_UDMA_5: mask = 0x80; break; case XFER_UDMA_4: mask = 0x90; break; case XFER_UDMA_3: mask = 0xA0; break; case XFER_UDMA_2: mask = (four_two) ? 0xB0 : 0xA0; break; @@ -417,20 +419,26 @@ static int config_chipset_for_dma (ide_drive_t *drive, byte ultra) byte unit = (drive->select.b.unit & 0x01); byte udma_66 = eighty_ninty_three(drive); + byte ultra_100 = 0; if (host_dev) { switch(host_dev->device) { + case PCI_DEVICE_ID_SI_730: + ultra_100 = 1; case PCI_DEVICE_ID_SI_530: case PCI_DEVICE_ID_SI_540: case PCI_DEVICE_ID_SI_620: case PCI_DEVICE_ID_SI_630: - four_two = 0x01; break; + four_two = 0x01; + break; default: four_two = 0x00; break; } } - if ((id->dma_ultra & 0x0010) && (ultra) && (udma_66) && (four_two)) + if ((id->dma_ultra & 0x0020) && (ultra) && (udma_66) && (four_two) && (ultra_100)) + speed = XFER_UDMA_5; + else if ((id->dma_ultra & 0x0010) && (ultra) && (udma_66) && (four_two)) speed = XFER_UDMA_4; else if ((id->dma_ultra & 0x0008) && (ultra) && (udma_66) && (four_two)) speed = XFER_UDMA_3; @@ -590,6 +598,7 @@ unsigned int __init ata66_sis5513 (ide_hwif_t *hwif) case PCI_DEVICE_ID_SI_540: case PCI_DEVICE_ID_SI_620: case PCI_DEVICE_ID_SI_630: + case PCI_DEVICE_ID_SI_730: ata66 = (reg48h & mask) ? 0 : 1; default: break; @@ -616,6 +625,7 @@ void __init ide_init_sis5513 (ide_hwif_t *hwif) case PCI_DEVICE_ID_SI_540: case PCI_DEVICE_ID_SI_620: case PCI_DEVICE_ID_SI_630: + case PCI_DEVICE_ID_SI_730: case PCI_DEVICE_ID_SI_5600: case PCI_DEVICE_ID_SI_5597: case PCI_DEVICE_ID_SI_5591: |