Lines Matching +full:fast +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-only
9 * Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
12 * Portions Copyright (C) 2005-2010 MontaVista Software, Inc.
59 * 30 PIO_MST enable. If set, the chip is in bus master mode during
203 * hpt37x_find_mode - reset the hpt37x bus
205 * @speed: transfer mode
213 struct hpt_clock *clocks = ap->host->private_data; in hpt37x_find_mode()
215 while (clocks->xfer_speed) { in hpt37x_find_mode()
216 if (clocks->xfer_speed == speed) in hpt37x_find_mode()
217 return clocks->timing; in hpt37x_find_mode()
230 ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num)); in hpt_dma_blacklisted()
232 i = match_string(list, -1, model_num); in hpt_dma_blacklisted()
257 "IBM-DTLA-307075",
258 "IBM-DTLA-307060",
259 "IBM-DTLA-307045",
260 "IBM-DTLA-307030",
261 "IBM-DTLA-307020",
262 "IBM-DTLA-307015",
263 "IBM-DTLA-305040",
264 "IBM-DTLA-305030",
265 "IBM-DTLA-305020",
266 "IC35L010AVER07-0",
267 "IC35L020AVER07-0",
268 "IC35L030AVER07-0",
269 "IC35L040AVER07-0",
270 "IC35L060AVER07-0",
276 * hpt370_filter - mode selection filter
284 if (adev->class == ATA_DEV_ATA) { in hpt370_filter()
294 * hpt370a_filter - mode selection filter
302 if (adev->class == ATA_DEV_ATA) { in hpt370a_filter()
310 * hpt372_filter - mode selection filter
312 * @mask: mode mask
319 if (ata_id_is_sata(adev->id)) in hpt372_filter()
326 * hpt37x_cable_detect - Detect the cable type
334 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt37x_cable_detect()
347 if (ata66 & (2 >> ap->port_no)) in hpt37x_cable_detect()
354 * hpt374_fn1_cable_detect - Detect the cable type
362 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt374_fn1_cable_detect()
363 unsigned int mcrbase = 0x50 + 4 * ap->port_no; in hpt374_fn1_cable_detect()
375 if (ata66 & (2 >> ap->port_no)) in hpt374_fn1_cable_detect()
382 * hpt37x_pre_reset - reset the hpt37x bus
391 struct ata_port *ap = link->ap; in hpt37x_pre_reset()
392 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt37x_pre_reset()
398 if (!pci_test_config_bits(pdev, &hpt37x_enable_bits[ap->port_no])) in hpt37x_pre_reset()
399 return -ENOENT; in hpt37x_pre_reset()
402 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); in hpt37x_pre_reset()
409 u8 mode) in hpt370_set_mode() argument
411 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt370_set_mode()
414 u8 fast; in hpt370_set_mode() local
416 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); in hpt370_set_mode()
417 addr2 = 0x51 + 4 * ap->port_no; in hpt370_set_mode()
419 /* Fast interrupt prediction disable, hold off interrupt disable */ in hpt370_set_mode()
420 pci_read_config_byte(pdev, addr2, &fast); in hpt370_set_mode()
421 fast &= ~0x02; in hpt370_set_mode()
422 fast |= 0x01; in hpt370_set_mode()
423 pci_write_config_byte(pdev, addr2, fast); in hpt370_set_mode()
425 /* Determine timing mask and find matching mode entry */ in hpt370_set_mode()
426 if (mode < XFER_MW_DMA_0) in hpt370_set_mode()
428 else if (mode < XFER_UDMA_0) in hpt370_set_mode()
433 timing = hpt37x_find_mode(ap, mode); in hpt370_set_mode()
440 * hpt370_set_piomode - PIO setup
444 * Perform PIO mode setup.
449 hpt370_set_mode(ap, adev, adev->pio_mode); in hpt370_set_piomode()
453 * hpt370_set_dmamode - DMA timing setup
462 hpt370_set_mode(ap, adev, adev->dma_mode); in hpt370_set_dmamode()
466 * hpt370_bmdma_end - DMA engine stop
474 struct ata_port *ap = qc->ap; in hpt370_bmdma_stop()
475 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt370_bmdma_stop()
476 void __iomem *bmdma = ap->ioaddr.bmdma_addr; in hpt370_bmdma_stop()
486 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); in hpt370_bmdma_stop()
496 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); in hpt370_bmdma_stop()
503 u8 mode) in hpt372_set_mode() argument
505 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt372_set_mode()
508 u8 fast; in hpt372_set_mode() local
510 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); in hpt372_set_mode()
511 addr2 = 0x51 + 4 * ap->port_no; in hpt372_set_mode()
513 /* Fast interrupt prediction disable, hold off interrupt disable */ in hpt372_set_mode()
514 pci_read_config_byte(pdev, addr2, &fast); in hpt372_set_mode()
515 fast &= ~0x07; in hpt372_set_mode()
516 pci_write_config_byte(pdev, addr2, fast); in hpt372_set_mode()
518 /* Determine timing mask and find matching mode entry */ in hpt372_set_mode()
519 if (mode < XFER_MW_DMA_0) in hpt372_set_mode()
521 else if (mode < XFER_UDMA_0) in hpt372_set_mode()
526 timing = hpt37x_find_mode(ap, mode); in hpt372_set_mode()
534 * hpt372_set_piomode - PIO setup
538 * Perform PIO mode setup.
543 hpt372_set_mode(ap, adev, adev->pio_mode); in hpt372_set_piomode()
547 * hpt372_set_dmamode - DMA timing setup
556 hpt372_set_mode(ap, adev, adev->dma_mode); in hpt372_set_dmamode()
560 * hpt37x_bmdma_end - DMA engine stop
568 struct ata_port *ap = qc->ap; in hpt37x_bmdma_stop()
569 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt37x_bmdma_stop()
570 int mscreg = 0x50 + 4 * ap->port_no; in hpt37x_bmdma_stop()
575 if (bwsr_stat & (1 << ap->port_no)) in hpt37x_bmdma_stop()
612 * mode setting functionality.
627 * Configuration for HPT372. Mode setting works like 371 and 302
628 * but we have a mode filter.
637 * Configuration for HPT374. Mode setting and filtering works like 372
647 * hpt37x_clock_slot - Turn timing to PC clock entry
668 * hpt37x_calibrate_dpll - Calibrate the DPLL loop
707 if (PCI_FUNC(pdev->devfn) & 1) { in hpt374_read_freq()
710 pdev_0 = pci_get_slot(pdev->bus, pdev->devfn - 1); in hpt374_read_freq()
723 * hpt37x_init_one - Initialise an HPT37X/302
756 /* HPT370 - UDMA100 */ in hpt37x_init_one()
764 /* HPT370A - UDMA100 */ in hpt37x_init_one()
772 /* HPT370 - UDMA66 */ in hpt37x_init_one()
780 /* HPT370A - UDMA66 */ in hpt37x_init_one()
788 /* HPT372 - UDMA133 */ in hpt37x_init_one()
796 /* HPT371, 302 - UDMA133 */ in hpt37x_init_one()
804 /* HPT374 - UDMA100, function 1 uses different cable_detect method */ in hpt37x_init_one()
823 u8 rev = dev->revision; in hpt37x_init_one()
839 switch (dev->device) { in hpt37x_init_one()
844 return -ENODEV; in hpt37x_init_one()
847 return -ENODEV; in hpt37x_init_one()
867 return -ENODEV; in hpt37x_init_one()
873 return -ENODEV; in hpt37x_init_one()
880 return -ENODEV; in hpt37x_init_one()
887 return -ENODEV; in hpt37x_init_one()
900 if (!(PCI_FUNC(dev->devfn) & 1)) in hpt37x_init_one()
906 pr_err("PCI table is bogus, please report (%d)\n", dev->device); in hpt37x_init_one()
907 return -ENODEV; in hpt37x_init_one()
922 * to prevent drives having problems with 40-pin cables. Needed in hpt37x_init_one()
923 * for some drives such as IBM-DTLA which will not enter ready in hpt37x_init_one()
945 return -ENODEV; in hpt37x_init_one()
971 clock_slot = hpt37x_clock_slot(freq, chip_table->base); in hpt37x_init_one()
972 if (chip_table->clocks[clock_slot] == NULL || prefer_dpll) { in hpt37x_init_one()
974 * We need to try PLL mode instead in hpt37x_init_one()
983 dpll = (ppi[0]->udma_mask & 0xC0) ? 3 : 2; in hpt37x_init_one()
1003 f_low -= adjust >> 1; in hpt37x_init_one()
1011 return -ENODEV; in hpt37x_init_one()
1021 private_data = (void *)chip_table->clocks[clock_slot]; in hpt37x_init_one()
1034 chip_table->name, MHz[clock_slot]); in hpt37x_init_one()
1061 MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");