Lines Matching +full:disable +full:- +full:report +full:- +full:mask
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.
203 * hpt37x_find_mode - reset the hpt37x bus
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
282 static unsigned long hpt370_filter(struct ata_device *adev, unsigned long mask) in hpt370_filter() argument
284 if (adev->class == ATA_DEV_ATA) { in hpt370_filter()
286 mask &= ~ATA_MASK_UDMA; in hpt370_filter()
288 mask &= ~(0xE0 << ATA_SHIFT_UDMA); in hpt370_filter()
290 return mask; in hpt370_filter()
294 * hpt370a_filter - mode selection filter
300 static unsigned long hpt370a_filter(struct ata_device *adev, unsigned long mask) in hpt370a_filter() argument
302 if (adev->class == ATA_DEV_ATA) { in hpt370a_filter()
304 mask &= ~(0xE0 << ATA_SHIFT_UDMA); in hpt370a_filter()
306 return mask; in hpt370a_filter()
310 * hpt372_filter - mode selection filter
312 * @mask: mode mask
317 static unsigned long hpt372_filter(struct ata_device *adev, unsigned long mask) in hpt372_filter() argument
319 if (ata_id_is_sata(adev->id)) in hpt372_filter()
320 mask &= ~((0xE << ATA_SHIFT_UDMA) | ATA_MASK_MWDMA); in hpt372_filter()
322 return mask; 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()
411 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt370_set_mode()
413 u32 reg, timing, mask; 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()
425 /* Determine timing mask and find matching mode entry */ in hpt370_set_mode()
427 mask = 0xcfc3ffff; in hpt370_set_mode()
429 mask = 0x31c001ff; in hpt370_set_mode()
431 mask = 0x303c0000; in hpt370_set_mode()
436 reg = (reg & ~mask) | (timing & mask); in hpt370_set_mode()
440 * hpt370_set_piomode - PIO 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()
505 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in hpt372_set_mode()
507 u32 reg, timing, mask; 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()
518 /* Determine timing mask and find matching mode entry */ in hpt372_set_mode()
520 mask = 0xcfc3ffff; in hpt372_set_mode()
522 mask = 0x31c001ff; in hpt372_set_mode()
524 mask = 0x303c0000; in hpt372_set_mode()
529 reg = (reg & ~mask) | (timing & mask); in hpt372_set_mode()
534 * hpt372_set_piomode - PIO 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()
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
728 * here. Firstly the chip may report 366 and be one of several variants.
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()
865 pr_err("Unknown HPT366 subtype, please report (%d)\n", 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()
923 * So, we manually disable the non-existing channel here in hpt37x_init_one()
926 if (dev->device == PCI_DEVICE_ID_TTI_HPT371) { in hpt37x_init_one()
936 * to prevent drives having problems with 40-pin cables. Needed in hpt37x_init_one()
937 * for some drives such as IBM-DTLA which will not enter ready in hpt37x_init_one()
959 return -ENODEV; in hpt37x_init_one()
985 clock_slot = hpt37x_clock_slot(freq, chip_table->base); in hpt37x_init_one()
986 if (chip_table->clocks[clock_slot] == NULL || prefer_dpll) { in hpt37x_init_one()
997 dpll = (ppi[0]->udma_mask & 0xC0) ? 3 : 2; in hpt37x_init_one()
1017 f_low -= adjust >> 1; in hpt37x_init_one()
1025 return -ENODEV; in hpt37x_init_one()
1035 private_data = (void *)chip_table->clocks[clock_slot]; in hpt37x_init_one()
1048 chip_table->name, MHz[clock_slot]); in hpt37x_init_one()
1075 MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");