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
278 * @mask: mode mask
285 if (adev->class == ATA_DEV_ATA) { in hpt370_filter()
295 * hpt370a_filter - mode selection filter
297 * @mask: mode mask
304 if (adev->class == ATA_DEV_ATA) { in hpt370a_filter()
312 * hpt372_filter - mode selection filter
314 * @mask: mode mask
321 if (ata_id_is_sata(adev->id)) in hpt372_filter()
328 * hpt37x_cable_detect - Detect the cable type
336 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt37x_cable_detect()
349 if (ata66 & (2 >> ap->port_no)) in hpt37x_cable_detect()
356 * hpt374_fn1_cable_detect - Detect the cable type
364 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt374_fn1_cable_detect()
365 unsigned int mcrbase = 0x50 + 4 * ap->port_no; in hpt374_fn1_cable_detect()
377 if (ata66 & (2 >> ap->port_no)) in hpt374_fn1_cable_detect()
384 * hpt37x_pre_reset - reset the hpt37x bus
393 struct ata_port *ap = link->ap; in hpt37x_pre_reset()
394 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt37x_pre_reset()
400 if (!pci_test_config_bits(pdev, &hpt37x_enable_bits[ap->port_no])) in hpt37x_pre_reset()
401 return -ENOENT; in hpt37x_pre_reset()
404 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); in hpt37x_pre_reset()
411 u8 mode) in hpt370_set_mode() argument
413 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt370_set_mode()
416 u8 fast; in hpt370_set_mode() local
418 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); in hpt370_set_mode()
419 addr2 = 0x51 + 4 * ap->port_no; in hpt370_set_mode()
421 /* Fast interrupt prediction disable, hold off interrupt disable */ in hpt370_set_mode()
422 pci_read_config_byte(pdev, addr2, &fast); in hpt370_set_mode()
423 fast &= ~0x02; in hpt370_set_mode()
424 fast |= 0x01; in hpt370_set_mode()
425 pci_write_config_byte(pdev, addr2, fast); in hpt370_set_mode()
427 /* Determine timing mask and find matching mode entry */ in hpt370_set_mode()
428 if (mode < XFER_MW_DMA_0) in hpt370_set_mode()
430 else if (mode < XFER_UDMA_0) in hpt370_set_mode()
435 timing = hpt37x_find_mode(ap, mode); in hpt370_set_mode()
442 * hpt370_set_piomode - PIO setup
446 * Perform PIO mode setup.
451 hpt370_set_mode(ap, adev, adev->pio_mode); in hpt370_set_piomode()
455 * hpt370_set_dmamode - DMA timing setup
464 hpt370_set_mode(ap, adev, adev->dma_mode); in hpt370_set_dmamode()
468 * hpt370_bmdma_stop - DMA engine stop
476 struct ata_port *ap = qc->ap; in hpt370_bmdma_stop()
477 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt370_bmdma_stop()
478 void __iomem *bmdma = ap->ioaddr.bmdma_addr; in hpt370_bmdma_stop()
488 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); in hpt370_bmdma_stop()
498 pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37); in hpt370_bmdma_stop()
505 u8 mode) in hpt372_set_mode() argument
507 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt372_set_mode()
510 u8 fast; in hpt372_set_mode() local
512 addr1 = 0x40 + 4 * (adev->devno + 2 * ap->port_no); in hpt372_set_mode()
513 addr2 = 0x51 + 4 * ap->port_no; in hpt372_set_mode()
515 /* Fast interrupt prediction disable, hold off interrupt disable */ in hpt372_set_mode()
516 pci_read_config_byte(pdev, addr2, &fast); in hpt372_set_mode()
517 fast &= ~0x07; in hpt372_set_mode()
518 pci_write_config_byte(pdev, addr2, fast); in hpt372_set_mode()
520 /* Determine timing mask and find matching mode entry */ in hpt372_set_mode()
521 if (mode < XFER_MW_DMA_0) in hpt372_set_mode()
523 else if (mode < XFER_UDMA_0) in hpt372_set_mode()
528 timing = hpt37x_find_mode(ap, mode); in hpt372_set_mode()
536 * hpt372_set_piomode - PIO setup
540 * Perform PIO mode setup.
545 hpt372_set_mode(ap, adev, adev->pio_mode); in hpt372_set_piomode()
549 * hpt372_set_dmamode - DMA timing setup
558 hpt372_set_mode(ap, adev, adev->dma_mode); in hpt372_set_dmamode()
562 * hpt37x_bmdma_stop - DMA engine stop
570 struct ata_port *ap = qc->ap; in hpt37x_bmdma_stop()
571 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt37x_bmdma_stop()
572 int mscreg = 0x50 + 4 * ap->port_no; in hpt37x_bmdma_stop()
577 if (bwsr_stat & (1 << ap->port_no)) in hpt37x_bmdma_stop()
614 * mode setting functionality.
629 * Configuration for HPT372. Mode setting works like 371 and 302
630 * but we have a mode filter.
639 * Configuration for HPT374. Mode setting and filtering works like 372
649 * hpt37x_clock_slot - Turn timing to PC clock entry
670 * hpt37x_calibrate_dpll - Calibrate the DPLL loop
709 if (PCI_FUNC(pdev->devfn) & 1) { in hpt374_read_freq()
712 pdev_0 = pci_get_slot(pdev->bus, pdev->devfn - 1); in hpt374_read_freq()
725 * hpt37x_init_one - Initialise an HPT37X/302
758 /* HPT370 - UDMA100 */ in hpt37x_init_one()
766 /* HPT370A - UDMA100 */ in hpt37x_init_one()
774 /* HPT370 - UDMA66 */ in hpt37x_init_one()
782 /* HPT370A - UDMA66 */ in hpt37x_init_one()
790 /* HPT372 - UDMA133 */ in hpt37x_init_one()
798 /* HPT371, 302 - UDMA133 */ in hpt37x_init_one()
806 /* HPT374 - UDMA100, function 1 uses different cable_detect method */ in hpt37x_init_one()
825 u8 rev = dev->revision; in hpt37x_init_one()
841 switch (dev->device) { in hpt37x_init_one()
846 return -ENODEV; in hpt37x_init_one()
849 return -ENODEV; in hpt37x_init_one()
869 return -ENODEV; in hpt37x_init_one()
875 return -ENODEV; in hpt37x_init_one()
882 return -ENODEV; in hpt37x_init_one()
889 return -ENODEV; in hpt37x_init_one()
902 if (!(PCI_FUNC(dev->devfn) & 1)) in hpt37x_init_one()
908 pr_err("PCI table is bogus, please report (%d)\n", dev->device); in hpt37x_init_one()
909 return -ENODEV; in hpt37x_init_one()
924 * to prevent drives having problems with 40-pin cables. Needed in hpt37x_init_one()
925 * for some drives such as IBM-DTLA which will not enter ready in hpt37x_init_one()
947 return -ENODEV; in hpt37x_init_one()
973 clock_slot = hpt37x_clock_slot(freq, chip_table->base); in hpt37x_init_one()
974 if (chip_table->clocks[clock_slot] == NULL || prefer_dpll) { in hpt37x_init_one()
976 * We need to try PLL mode instead in hpt37x_init_one()
985 dpll = (ppi[0]->udma_mask & 0xC0) ? 3 : 2; in hpt37x_init_one()
1005 f_low -= adjust >> 1; in hpt37x_init_one()
1013 return -ENODEV; in hpt37x_init_one()
1023 private_data = (void *)chip_table->clocks[clock_slot]; in hpt37x_init_one()
1036 chip_table->name, MHz[clock_slot]); in hpt37x_init_one()
1063 MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");