2 * Promise TX2/TX4/TX2000/133 IDE driver
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
10 * linux/drivers/ide/pdc202xx.c Version 0.35 Mar. 30, 2002
11 * Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>
12 * Copyright (C) 2005-2006 MontaVista Software, Inc.
13 * Portions Copyright (C) 1999 Promise Technology, Inc.
14 * Author: Frank Tiernan (frankt@promise.com)
15 * Released under terms of General Public License
18 #include <linux/module.h>
19 #include <linux/types.h>
20 #include <linux/kernel.h>
21 #include <linux/delay.h>
22 #include <linux/timer.h>
24 #include <linux/ioport.h>
25 #include <linux/blkdev.h>
26 #include <linux/hdreg.h>
27 #include <linux/interrupt.h>
28 #include <linux/pci.h>
29 #include <linux/init.h>
30 #include <linux/ide.h>
35 #ifdef CONFIG_PPC_PMAC
37 #include <asm/pci-bridge.h>
40 #define PDC202_DEBUG_CABLE 0
45 #define DBG(fmt, args...) printk("%s: " fmt, __FUNCTION__, ## args)
47 #define DBG(fmt, args...)
50 static const char *pdc_quirk_drives[] = {
51 "QUANTUM FIREBALLlct08 08",
52 "QUANTUM FIREBALLP KA6.4",
53 "QUANTUM FIREBALLP KA9.1",
54 "QUANTUM FIREBALLP LM20.4",
55 "QUANTUM FIREBALLP KX13.6",
56 "QUANTUM FIREBALLP KX20.5",
57 "QUANTUM FIREBALLP KX27.3",
58 "QUANTUM FIREBALLP LM20.5",
62 static u8 max_dma_rate(struct pci_dev *pdev)
66 switch(pdev->device) {
67 case PCI_DEVICE_ID_PROMISE_20277:
68 case PCI_DEVICE_ID_PROMISE_20276:
69 case PCI_DEVICE_ID_PROMISE_20275:
70 case PCI_DEVICE_ID_PROMISE_20271:
71 case PCI_DEVICE_ID_PROMISE_20269:
74 case PCI_DEVICE_ID_PROMISE_20270:
75 case PCI_DEVICE_ID_PROMISE_20268:
85 static u8 pdcnew_ratemask(ide_drive_t *drive)
87 u8 mode = max_dma_rate(HWIF(drive)->pci_dev);
89 if (!eighty_ninty_three(drive))
90 mode = min_t(u8, mode, 1);
95 static int check_in_drive_lists(ide_drive_t *drive, const char **list)
97 struct hd_driveid *id = drive->id;
99 if (pdc_quirk_drives == list) {
101 if (strstr(id->model, *list++)) {
107 if (!strcmp(*list++,id->model)) {
116 * get_indexed_reg - Get indexed register
117 * @hwif: for the port address
118 * @index: index of the indexed register
120 static u8 get_indexed_reg(ide_hwif_t *hwif, u8 index)
124 hwif->OUTB(index, hwif->dma_vendor1);
125 value = hwif->INB(hwif->dma_vendor3);
127 DBG("index[%02X] value[%02X]\n", index, value);
132 * set_indexed_reg - Set indexed register
133 * @hwif: for the port address
134 * @index: index of the indexed register
136 static void set_indexed_reg(ide_hwif_t *hwif, u8 index, u8 value)
138 hwif->OUTB(index, hwif->dma_vendor1);
139 hwif->OUTB(value, hwif->dma_vendor3);
140 DBG("index[%02X] value[%02X]\n", index, value);
144 * ATA Timing Tables based on 133 MHz PLL output clock.
146 * If the PLL outputs 100 MHz clock, the ASIC hardware will set
147 * the timing registers automatically when "set features" command is
148 * issued to the device. However, if the PLL output clock is 133 MHz,
149 * the following tables must be used.
151 static struct pio_timing {
152 u8 reg0c, reg0d, reg13;
154 { 0xfb, 0x2b, 0xac }, /* PIO mode 0, IORDY off, Prefetch off */
155 { 0x46, 0x29, 0xa4 }, /* PIO mode 1, IORDY off, Prefetch off */
156 { 0x23, 0x26, 0x64 }, /* PIO mode 2, IORDY off, Prefetch off */
157 { 0x27, 0x0d, 0x35 }, /* PIO mode 3, IORDY on, Prefetch off */
158 { 0x23, 0x09, 0x25 }, /* PIO mode 4, IORDY on, Prefetch off */
161 static struct mwdma_timing {
163 } mwdma_timings [] = {
164 { 0xdf, 0x5f }, /* MWDMA mode 0 */
165 { 0x6b, 0x27 }, /* MWDMA mode 1 */
166 { 0x69, 0x25 }, /* MWDMA mode 2 */
169 static struct udma_timing {
170 u8 reg10, reg11, reg12;
171 } udma_timings [] = {
172 { 0x4a, 0x0f, 0xd5 }, /* UDMA mode 0 */
173 { 0x3a, 0x0a, 0xd0 }, /* UDMA mode 1 */
174 { 0x2a, 0x07, 0xcd }, /* UDMA mode 2 */
175 { 0x1a, 0x05, 0xcd }, /* UDMA mode 3 */
176 { 0x1a, 0x03, 0xcd }, /* UDMA mode 4 */
177 { 0x1a, 0x02, 0xcb }, /* UDMA mode 5 */
178 { 0x1a, 0x01, 0xcb }, /* UDMA mode 6 */
181 static int pdcnew_tune_chipset(ide_drive_t *drive, u8 speed)
183 ide_hwif_t *hwif = HWIF(drive);
184 u8 adj = (drive->dn & 1) ? 0x08 : 0x00;
187 speed = ide_rate_filter(pdcnew_ratemask(drive), speed);
190 * Issue SETFEATURES_XFER to the drive first. PDC202xx hardware will
191 * automatically set the timing registers based on 100 MHz PLL output.
193 err = ide_config_drive_speed(drive, speed);
196 * As we set up the PLL to output 133 MHz for UltraDMA/133 capable
197 * chips, we must override the default register settings...
199 if (max_dma_rate(hwif->pci_dev) == 4) {
200 u8 mode = speed & 0x07;
210 set_indexed_reg(hwif, 0x10 + adj,
211 udma_timings[mode].reg10);
212 set_indexed_reg(hwif, 0x11 + adj,
213 udma_timings[mode].reg11);
214 set_indexed_reg(hwif, 0x12 + adj,
215 udma_timings[mode].reg12);
221 set_indexed_reg(hwif, 0x0e + adj,
222 mwdma_timings[mode].reg0e);
223 set_indexed_reg(hwif, 0x0f + adj,
224 mwdma_timings[mode].reg0f);
231 set_indexed_reg(hwif, 0x0c + adj,
232 pio_timings[mode].reg0c);
233 set_indexed_reg(hwif, 0x0d + adj,
234 pio_timings[mode].reg0d);
235 set_indexed_reg(hwif, 0x13 + adj,
236 pio_timings[mode].reg13);
239 printk(KERN_ERR "pdc202xx_new: "
240 "Unknown speed %d ignored\n", speed);
242 } else if (speed == XFER_UDMA_2) {
243 /* Set tHOLD bit to 0 if using UDMA mode 2 */
244 u8 tmp = get_indexed_reg(hwif, 0x10 + adj);
246 set_indexed_reg(hwif, 0x10 + adj, tmp & 0x7f);
253 * 960, 480, 390, 300, 240, 180, 120, 90, 60
254 * 180, 150, 120, 90, 60
256 * 180, 120, 90, 90, 90, 60, 30
257 * 11, 5, 4, 3, 2, 1, 0
259 static void pdcnew_tune_drive(ide_drive_t *drive, u8 pio)
261 pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
262 (void)pdcnew_tune_chipset(drive, XFER_PIO_0 + pio);
265 static u8 pdcnew_cable_detect(ide_hwif_t *hwif)
267 return get_indexed_reg(hwif, 0x0b) & 0x04;
270 static int config_chipset_for_dma(ide_drive_t *drive)
272 struct hd_driveid *id = drive->id;
273 ide_hwif_t *hwif = HWIF(drive);
274 u8 ultra_66 = (id->dma_ultra & 0x0078) ? 1 : 0;
275 u8 cable = pdcnew_cable_detect(hwif);
278 if (ultra_66 && cable) {
279 printk(KERN_WARNING "Warning: %s channel "
280 "requires an 80-pin cable for operation.\n",
281 hwif->channel ? "Secondary" : "Primary");
282 printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name);
285 if (drive->media != ide_disk)
288 if (id->capability & 4) {
290 * Set IORDY_EN & PREFETCH_EN (this seems to have
291 * NO real effect since this register is reloaded
292 * by hardware when the transfer mode is selected)
294 u8 tmp, adj = (drive->dn & 1) ? 0x08 : 0x00;
296 tmp = get_indexed_reg(hwif, 0x13 + adj);
297 set_indexed_reg(hwif, 0x13 + adj, tmp | 0x03);
300 speed = ide_dma_speed(drive, pdcnew_ratemask(drive));
305 (void) hwif->speedproc(drive, speed);
306 return ide_dma_enable(drive);
309 static int pdcnew_config_drive_xfer_rate(ide_drive_t *drive)
311 ide_hwif_t *hwif = HWIF(drive);
312 struct hd_driveid *id = drive->id;
314 drive->init_speed = 0;
316 if (id && (id->capability & 1) && drive->autodma) {
318 if (ide_use_dma(drive)) {
319 if (config_chipset_for_dma(drive))
320 return hwif->ide_dma_on(drive);
325 } else if ((id->capability & 8) || (id->field_valid & 2)) {
327 hwif->tuneproc(drive, 255);
328 return hwif->ide_dma_off_quietly(drive);
330 /* IORDY not supported */
334 static int pdcnew_quirkproc(ide_drive_t *drive)
336 return check_in_drive_lists(drive, pdc_quirk_drives);
339 static int pdcnew_ide_dma_lostirq(ide_drive_t *drive)
341 if (HWIF(drive)->resetproc != NULL)
342 HWIF(drive)->resetproc(drive);
343 return __ide_dma_lostirq(drive);
346 static int pdcnew_ide_dma_timeout(ide_drive_t *drive)
348 if (HWIF(drive)->resetproc != NULL)
349 HWIF(drive)->resetproc(drive);
350 return __ide_dma_timeout(drive);
353 static void pdcnew_reset(ide_drive_t *drive)
356 * Deleted this because it is redundant from the caller.
358 printk(KERN_WARNING "pdc202xx_new: %s channel reset.\n",
359 HWIF(drive)->channel ? "Secondary" : "Primary");
363 * read_counter - Read the byte count registers
364 * @dma_base: for the port address
366 static long __devinit read_counter(u32 dma_base)
368 u32 pri_dma_base = dma_base, sec_dma_base = dma_base + 0x08;
369 u8 cnt0, cnt1, cnt2, cnt3;
370 long count = 0, last;
376 /* Read the current count */
377 outb(0x20, pri_dma_base + 0x01);
378 cnt0 = inb(pri_dma_base + 0x03);
379 outb(0x21, pri_dma_base + 0x01);
380 cnt1 = inb(pri_dma_base + 0x03);
381 outb(0x20, sec_dma_base + 0x01);
382 cnt2 = inb(sec_dma_base + 0x03);
383 outb(0x21, sec_dma_base + 0x01);
384 cnt3 = inb(sec_dma_base + 0x03);
386 count = (cnt3 << 23) | (cnt2 << 15) | (cnt1 << 8) | cnt0;
389 * The 30-bit decrementing counter is read in 4 pieces.
390 * Incorrect value may be read when the most significant bytes
393 } while (retry-- && (((last ^ count) & 0x3fff8000) || last < count));
395 DBG("cnt0[%02X] cnt1[%02X] cnt2[%02X] cnt3[%02X]\n",
396 cnt0, cnt1, cnt2, cnt3);
402 * detect_pll_input_clock - Detect the PLL input clock in Hz.
403 * @dma_base: for the port address
404 * E.g. 16949000 on 33 MHz PCI bus, i.e. half of the PCI clock.
406 static long __devinit detect_pll_input_clock(unsigned long dma_base)
408 long start_count, end_count;
412 start_count = read_counter(dma_base);
414 /* Start the test mode */
415 outb(0x01, dma_base + 0x01);
416 scr1 = inb(dma_base + 0x03);
417 DBG("scr1[%02X]\n", scr1);
418 outb(scr1 | 0x40, dma_base + 0x03);
420 /* Let the counter run for 10 ms. */
423 end_count = read_counter(dma_base);
425 /* Stop the test mode */
426 outb(0x01, dma_base + 0x01);
427 scr1 = inb(dma_base + 0x03);
428 DBG("scr1[%02X]\n", scr1);
429 outb(scr1 & ~0x40, dma_base + 0x03);
432 * Calculate the input clock in Hz
433 * (the clock counter is 30 bit wide and counts down)
435 pll_input = ((start_count - end_count) & 0x3ffffff) * 100;
437 DBG("start[%ld] end[%ld]\n", start_count, end_count);
442 #ifdef CONFIG_PPC_PMAC
443 static void __devinit apple_kiwi_init(struct pci_dev *pdev)
445 struct device_node *np = pci_device_to_OF_node(pdev);
446 unsigned int class_rev = 0;
449 if (np == NULL || !device_is_compatible(np, "kiwi-root"))
452 pci_read_config_dword(pdev, PCI_CLASS_REVISION, &class_rev);
455 if (class_rev >= 0x03) {
456 /* Setup chip magic config stuff (from darwin) */
457 pci_read_config_byte (pdev, 0x40, &conf);
458 pci_write_config_byte(pdev, 0x40, (conf | 0x01));
461 #endif /* CONFIG_PPC_PMAC */
463 static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const char *name)
465 unsigned long dma_base = pci_resource_start(dev, 4);
466 unsigned long sec_dma_base = dma_base + 0x08;
467 long pll_input, pll_output, ratio;
469 u8 pll_ctl0, pll_ctl1;
471 if (dev->resource[PCI_ROM_RESOURCE].start) {
472 pci_write_config_dword(dev, PCI_ROM_ADDRESS,
473 dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);
474 printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name,
475 (unsigned long)dev->resource[PCI_ROM_RESOURCE].start);
478 #ifdef CONFIG_PPC_PMAC
479 apple_kiwi_init(dev);
482 /* Calculate the required PLL output frequency */
483 switch(max_dma_rate(dev)) {
484 case 4: /* it's 133 MHz for Ultra133 chips */
485 pll_output = 133333333;
487 case 3: /* and 100 MHz for Ultra100 chips */
489 pll_output = 100000000;
494 * Detect PLL input clock.
495 * On some systems, where PCI bus is running at non-standard clock rate
496 * (e.g. 25 or 40 MHz), we have to adjust the cycle time.
497 * PDC20268 and newer chips employ PLL circuit to help correct timing
500 pll_input = detect_pll_input_clock(dma_base);
501 printk("%s: PLL input clock is %ld kHz\n", name, pll_input / 1000);
504 if (unlikely(pll_input < 5000000L || pll_input > 70000000L)) {
505 printk(KERN_ERR "%s: Bad PLL input clock %ld Hz, giving up!\n",
511 DBG("pll_output is %ld Hz\n", pll_output);
513 /* Show the current clock value of PLL control register
514 * (maybe already configured by the BIOS)
516 outb(0x02, sec_dma_base + 0x01);
517 pll_ctl0 = inb(sec_dma_base + 0x03);
518 outb(0x03, sec_dma_base + 0x01);
519 pll_ctl1 = inb(sec_dma_base + 0x03);
521 DBG("pll_ctl[%02X][%02X]\n", pll_ctl0, pll_ctl1);
525 * Calculate the ratio of F, R and NO
526 * POUT = (F + 2) / (( R + 2) * NO)
528 ratio = pll_output / (pll_input / 1000);
529 if (ratio < 8600L) { /* 8.6x */
530 /* Using NO = 0x01, R = 0x0d */
532 } else if (ratio < 12900L) { /* 12.9x */
533 /* Using NO = 0x01, R = 0x08 */
535 } else if (ratio < 16100L) { /* 16.1x */
536 /* Using NO = 0x01, R = 0x06 */
538 } else if (ratio < 64000L) { /* 64x */
542 printk(KERN_ERR "%s: Bad ratio %ld, giving up!\n", name, ratio);
546 f = (ratio * (r + 2)) / 1000 - 2;
548 DBG("F[%d] R[%d] ratio*1000[%ld]\n", f, r, ratio);
550 if (unlikely(f < 0 || f > 127)) {
552 printk(KERN_ERR "%s: F[%d] invalid!\n", name, f);
559 DBG("Writing pll_ctl[%02X][%02X]\n", pll_ctl0, pll_ctl1);
561 outb(0x02, sec_dma_base + 0x01);
562 outb(pll_ctl0, sec_dma_base + 0x03);
563 outb(0x03, sec_dma_base + 0x01);
564 outb(pll_ctl1, sec_dma_base + 0x03);
566 /* Wait the PLL circuit to be stable */
571 * Show the current clock value of PLL control register
573 outb(0x02, sec_dma_base + 0x01);
574 pll_ctl0 = inb(sec_dma_base + 0x03);
575 outb(0x03, sec_dma_base + 0x01);
576 pll_ctl1 = inb(sec_dma_base + 0x03);
578 DBG("pll_ctl[%02X][%02X]\n", pll_ctl0, pll_ctl1);
585 static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
589 hwif->tuneproc = &pdcnew_tune_drive;
590 hwif->quirkproc = &pdcnew_quirkproc;
591 hwif->speedproc = &pdcnew_tune_chipset;
592 hwif->resetproc = &pdcnew_reset;
594 hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
596 hwif->ultra_mask = 0x7f;
597 hwif->mwdma_mask = 0x07;
599 hwif->err_stops_fifo = 1;
601 hwif->ide_dma_check = &pdcnew_config_drive_xfer_rate;
602 hwif->ide_dma_lostirq = &pdcnew_ide_dma_lostirq;
603 hwif->ide_dma_timeout = &pdcnew_ide_dma_timeout;
605 if (!hwif->udma_four)
606 hwif->udma_four = pdcnew_cable_detect(hwif) ? 0 : 1;
610 hwif->drives[0].autodma = hwif->drives[1].autodma = hwif->autodma;
612 #if PDC202_DEBUG_CABLE
613 printk(KERN_DEBUG "%s: %s-pin cable\n",
614 hwif->name, hwif->udma_four ? "80" : "40");
615 #endif /* PDC202_DEBUG_CABLE */
618 static int __devinit init_setup_pdcnew(struct pci_dev *dev, ide_pci_device_t *d)
620 return ide_setup_pci_device(dev, d);
623 static int __devinit init_setup_pdc20270(struct pci_dev *dev,
626 struct pci_dev *findev = NULL;
629 if ((dev->bus->self &&
630 dev->bus->self->vendor == PCI_VENDOR_ID_DEC) &&
631 (dev->bus->self->device == PCI_DEVICE_ID_DEC_21150)) {
632 if (PCI_SLOT(dev->devfn) & 2)
635 while ((findev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, findev)) != NULL) {
636 if ((findev->vendor == dev->vendor) &&
637 (findev->device == dev->device) &&
638 (PCI_SLOT(findev->devfn) & 2)) {
639 if (findev->irq != dev->irq) {
640 findev->irq = dev->irq;
642 ret = ide_setup_pci_devices(dev, findev, d);
648 return ide_setup_pci_device(dev, d);
651 static int __devinit init_setup_pdc20276(struct pci_dev *dev,
654 if ((dev->bus->self) &&
655 (dev->bus->self->vendor == PCI_VENDOR_ID_INTEL) &&
656 ((dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960) ||
657 (dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960RM))) {
658 printk(KERN_INFO "ide: Skipping Promise PDC20276 "
659 "attached to I2O RAID controller.\n");
662 return ide_setup_pci_device(dev, d);
665 static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
668 .init_setup = init_setup_pdcnew,
669 .init_chipset = init_chipset_pdcnew,
670 .init_hwif = init_hwif_pdc202new,
673 .bootable = OFF_BOARD,
676 .init_setup = init_setup_pdcnew,
677 .init_chipset = init_chipset_pdcnew,
678 .init_hwif = init_hwif_pdc202new,
681 .bootable = OFF_BOARD,
684 .init_setup = init_setup_pdc20270,
685 .init_chipset = init_chipset_pdcnew,
686 .init_hwif = init_hwif_pdc202new,
689 .bootable = OFF_BOARD,
692 .init_setup = init_setup_pdcnew,
693 .init_chipset = init_chipset_pdcnew,
694 .init_hwif = init_hwif_pdc202new,
697 .bootable = OFF_BOARD,
700 .init_setup = init_setup_pdcnew,
701 .init_chipset = init_chipset_pdcnew,
702 .init_hwif = init_hwif_pdc202new,
705 .bootable = OFF_BOARD,
708 .init_setup = init_setup_pdc20276,
709 .init_chipset = init_chipset_pdcnew,
710 .init_hwif = init_hwif_pdc202new,
713 .bootable = OFF_BOARD,
716 .init_setup = init_setup_pdcnew,
717 .init_chipset = init_chipset_pdcnew,
718 .init_hwif = init_hwif_pdc202new,
721 .bootable = OFF_BOARD,
726 * pdc202new_init_one - called when a pdc202xx is found
727 * @dev: the pdc202new device
728 * @id: the matching pci id
730 * Called when the PCI registration layer (or the IDE initialization)
731 * finds a device matching our IDE device tables.
734 static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_device_id *id)
736 ide_pci_device_t *d = &pdcnew_chipsets[id->driver_data];
738 return d->init_setup(dev, d);
741 static struct pci_device_id pdc202new_pci_tbl[] = {
742 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
743 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20269, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
744 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20270, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
745 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20271, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
746 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20275, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
747 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20276, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5},
748 { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20277, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6},
751 MODULE_DEVICE_TABLE(pci, pdc202new_pci_tbl);
753 static struct pci_driver driver = {
754 .name = "Promise_IDE",
755 .id_table = pdc202new_pci_tbl,
756 .probe = pdc202new_init_one,
759 static int pdc202new_ide_init(void)
761 return ide_pci_register_driver(&driver);
764 module_init(pdc202new_ide_init);
766 MODULE_AUTHOR("Andre Hedrick, Frank Tiernan");
767 MODULE_DESCRIPTION("PCI driver module for Promise PDC20268 and higher");
768 MODULE_LICENSE("GPL");