2 * pata-legacy.c - Legacy port PATA/SATA controller driver.
3 * Copyright 2005/2006 Red Hat, all rights reserved.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; see the file COPYING. If not, write to
17 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19 * An ATA driver for the legacy ATA ports.
22 * Opti 82C465/82C611 support: Data sheets at opti-inc.com
24 * Promise 20230/20620:
25 * http://www.ryston.cz/petr/vlb/pdc20230b.html
26 * http://www.ryston.cz/petr/vlb/pdc20230c.html
27 * http://www.ryston.cz/petr/vlb/pdc20630.html
29 * Unsupported but docs exist:
30 * Appian/Adaptec AIC25VL01/Cirrus Logic PD7220
32 * This driver handles legacy (that is "ISA/VLB side") IDE ports found
33 * on PC class systems. There are three hybrid devices that are exceptions
34 * The Cyrix 5510/5520 where a pre SFF ATA device is on the bridge and
35 * the MPIIX where the tuning is PCI side but the IDE is "ISA side".
37 * Specific support is included for the ht6560a/ht6560b/opti82c611a/
38 * opti82c465mv/promise 20230c/20630/winbond83759A
40 * Use the autospeed and pio_mask options with:
41 * Appian ADI/2 aka CLPD7220 or AIC25VL01.
42 * Use the jumpers, autospeed and set pio_mask to the mode on the jumpers with
43 * Goldstar GM82C711, PIC-1288A-125, UMC 82C871F, Winbond W83759,
44 * Winbond W83759A, Promise PDC20230-B
46 * For now use autospeed and pio_mask as above with the W83759A. This may
51 #include <linux/async.h>
52 #include <linux/kernel.h>
53 #include <linux/module.h>
54 #include <linux/pci.h>
55 #include <linux/init.h>
56 #include <linux/blkdev.h>
57 #include <linux/delay.h>
58 #include <scsi/scsi_host.h>
59 #include <linux/ata.h>
60 #include <linux/libata.h>
61 #include <linux/platform_device.h>
63 #define DRV_NAME "pata_legacy"
64 #define DRV_VERSION "0.6.5"
69 module_param(all, int, 0444);
70 MODULE_PARM_DESC(all, "Grab all legacy port devices, even if PCI(0=off, 1=on)");
77 struct platform_device *platform_dev;
91 QDI6580DP = 9, /* Dual channel mode is different */
103 enum controller type;
104 unsigned long private;
107 struct legacy_controller {
109 struct ata_port_operations *ops;
110 unsigned int pio_mask;
113 int (*setup)(struct platform_device *, struct legacy_probe *probe,
114 struct legacy_data *data);
117 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
119 static struct legacy_probe probe_list[NR_HOST];
120 static struct legacy_data legacy_data[NR_HOST];
121 static struct ata_host *legacy_host[NR_HOST];
122 static int nr_legacy_host;
125 static int probe_all; /* Set to check all ISA port ranges */
126 static int ht6560a; /* HT 6560A on primary 1, second 2, both 3 */
127 static int ht6560b; /* HT 6560A on primary 1, second 2, both 3 */
128 static int opti82c611a; /* Opti82c611A on primary 1, sec 2, both 3 */
129 static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
130 static int qdi; /* Set to probe QDI controllers */
131 static int winbond; /* Set to probe Winbond controllers,
132 give I/O port if non standard */
133 static int autospeed; /* Chip present which snoops speed changes */
134 static int pio_mask = ATA_PIO4; /* PIO range for autospeed devices */
135 static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
138 * legacy_probe_add - Add interface to probe list
139 * @port: Controller port
141 * @type: Controller type
142 * @private: Controller specific info
144 * Add an entry into the probe list for ATA controllers. This is used
145 * to add the default ISA slots and then to build up the table
146 * further according to other ISA/VLB/Weird device scans
148 * An I/O port list is used to keep ordering stable and sane, as we
149 * don't have any good way to talk about ordering otherwise
152 static int legacy_probe_add(unsigned long port, unsigned int irq,
153 enum controller type, unsigned long private)
155 struct legacy_probe *lp = &probe_list[0];
157 struct legacy_probe *free = NULL;
159 for (i = 0; i < NR_HOST; i++) {
160 if (lp->port == 0 && free == NULL)
162 /* Matching port, or the correct slot for ordering */
163 if (lp->port == port || legacy_port[i] == port) {
170 printk(KERN_ERR "pata_legacy: Too many interfaces.\n");
173 /* Fill in the entry for later probing */
177 free->private = private;
183 * legacy_set_mode - mode setting
185 * @unused: Device that failed when error is returned
187 * Use a non standard set_mode function. We don't want to be tuned.
189 * The BIOS configured everything. Our job is not to fiddle. Just use
190 * whatever PIO the hardware is using and leave it at that. When we
191 * get some kind of nice user driven API for control then we can
192 * expand on this as per hdparm in the base kernel.
195 static int legacy_set_mode(struct ata_link *link, struct ata_device **unused)
197 struct ata_device *dev;
199 ata_for_each_dev(dev, link, ENABLED) {
200 ata_dev_printk(dev, KERN_INFO, "configured for PIO\n");
201 dev->pio_mode = XFER_PIO_0;
202 dev->xfer_mode = XFER_PIO_0;
203 dev->xfer_shift = ATA_SHIFT_PIO;
204 dev->flags |= ATA_DFLAG_PIO;
209 static struct scsi_host_template legacy_sht = {
210 ATA_PIO_SHT(DRV_NAME),
213 static const struct ata_port_operations legacy_base_port_ops = {
214 .inherits = &ata_sff_port_ops,
215 .cable_detect = ata_cable_40wire,
219 * These ops are used if the user indicates the hardware
220 * snoops the commands to decide on the mode and handles the
221 * mode selection "magically" itself. Several legacy controllers
222 * do this. The mode range can be set if it is not 0x1F by setting
226 static struct ata_port_operations simple_port_ops = {
227 .inherits = &legacy_base_port_ops,
228 .sff_data_xfer = ata_sff_data_xfer_noirq,
231 static struct ata_port_operations legacy_port_ops = {
232 .inherits = &legacy_base_port_ops,
233 .sff_data_xfer = ata_sff_data_xfer_noirq,
234 .set_mode = legacy_set_mode,
238 * Promise 20230C and 20620 support
240 * This controller supports PIO0 to PIO2. We set PIO timings
241 * conservatively to allow for 50MHz Vesa Local Bus. The 20620 DMA
242 * support is weird being DMA to controller and PIO'd to the host
246 static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
249 int pio = adev->pio_mode - XFER_PIO_0;
253 /* Safe as UP only. Force I/Os to occur together */
255 local_irq_save(flags);
257 /* Unlock the control interface */
260 outb(inb(0x1F2) | 0x80, 0x1F2);
267 while ((inb(0x1F2) & 0x80) && --tries);
269 local_irq_restore(flags);
271 outb(inb(0x1F4) & 0x07, 0x1F4);
274 rt &= 0x07 << (3 * adev->devno);
276 rt |= (1 + 3 * pio) << (3 * adev->devno);
279 outb(inb(0x1F2) | 0x01, 0x1F2);
285 static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
286 unsigned char *buf, unsigned int buflen, int rw)
288 int slop = buflen & 3;
289 struct ata_port *ap = dev->link->ap;
291 /* 32bit I/O capable *and* we need to write a whole number of dwords */
292 if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)
293 && (ap->pflags & ATA_PFLAG_PIO32)) {
296 local_irq_save(flags);
298 /* Perform the 32bit I/O synchronization sequence */
299 ioread8(ap->ioaddr.nsect_addr);
300 ioread8(ap->ioaddr.nsect_addr);
301 ioread8(ap->ioaddr.nsect_addr);
305 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
307 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
309 if (unlikely(slop)) {
312 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
313 memcpy(buf + buflen - slop, &pad, slop);
315 memcpy(&pad, buf + buflen - slop, slop);
316 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
320 local_irq_restore(flags);
322 buflen = ata_sff_data_xfer_noirq(dev, buf, buflen, rw);
327 static struct ata_port_operations pdc20230_port_ops = {
328 .inherits = &legacy_base_port_ops,
329 .set_piomode = pdc20230_set_piomode,
330 .sff_data_xfer = pdc_data_xfer_vlb,
334 * Holtek 6560A support
336 * This controller supports PIO0 to PIO2 (no IORDY even though higher
337 * timings can be loaded).
340 static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
345 /* Get the timing data in cycles. For now play safe at 50Mhz */
346 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
348 active = clamp_val(t.active, 2, 15);
349 recover = clamp_val(t.recover, 4, 15);
356 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
357 ioread8(ap->ioaddr.status_addr);
360 static struct ata_port_operations ht6560a_port_ops = {
361 .inherits = &legacy_base_port_ops,
362 .set_piomode = ht6560a_set_piomode,
366 * Holtek 6560B support
368 * This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO
369 * setting unless we see an ATAPI device in which case we force it off.
371 * FIXME: need to implement 2nd channel support.
374 static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
379 /* Get the timing data in cycles. For now play safe at 50Mhz */
380 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
382 active = clamp_val(t.active, 2, 15);
383 recover = clamp_val(t.recover, 2, 16);
391 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
393 if (adev->class != ATA_DEV_ATA) {
394 u8 rconf = inb(0x3E6);
400 ioread8(ap->ioaddr.status_addr);
403 static struct ata_port_operations ht6560b_port_ops = {
404 .inherits = &legacy_base_port_ops,
405 .set_piomode = ht6560b_set_piomode,
409 * Opti core chipset helpers
413 * opti_syscfg - read OPTI chipset configuration
414 * @reg: Configuration register to read
416 * Returns the value of an OPTI system board configuration register.
419 static u8 opti_syscfg(u8 reg)
424 /* Uniprocessor chipset and must force cycles adjancent */
425 local_irq_save(flags);
428 local_irq_restore(flags);
435 * This controller supports PIO0 to PIO3.
438 static void opti82c611a_set_piomode(struct ata_port *ap,
439 struct ata_device *adev)
441 u8 active, recover, setup;
443 struct ata_device *pair = ata_dev_pair(adev);
445 int khz[4] = { 50000, 40000, 33000, 25000 };
448 /* Enter configuration mode */
449 ioread16(ap->ioaddr.error_addr);
450 ioread16(ap->ioaddr.error_addr);
451 iowrite8(3, ap->ioaddr.nsect_addr);
453 /* Read VLB clock strapping */
454 clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
456 /* Get the timing data in cycles */
457 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
459 /* Setup timing is shared */
461 struct ata_timing tp;
462 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
464 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
467 active = clamp_val(t.active, 2, 17) - 2;
468 recover = clamp_val(t.recover, 1, 16) - 1;
469 setup = clamp_val(t.setup, 1, 4) - 1;
471 /* Select the right timing bank for write timing */
472 rc = ioread8(ap->ioaddr.lbal_addr);
474 rc |= (adev->devno << 7);
475 iowrite8(rc, ap->ioaddr.lbal_addr);
477 /* Write the timings */
478 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
480 /* Select the right bank for read timings, also
481 load the shared timings for address */
482 rc = ioread8(ap->ioaddr.device_addr);
484 rc |= adev->devno; /* Index select */
485 rc |= (setup << 4) | 0x04;
486 iowrite8(rc, ap->ioaddr.device_addr);
488 /* Load the read timings */
489 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
491 /* Ensure the timing register mode is right */
492 rc = ioread8(ap->ioaddr.lbal_addr);
495 iowrite8(rc, ap->ioaddr.lbal_addr);
497 /* Exit command mode */
498 iowrite8(0x83, ap->ioaddr.nsect_addr);
502 static struct ata_port_operations opti82c611a_port_ops = {
503 .inherits = &legacy_base_port_ops,
504 .set_piomode = opti82c611a_set_piomode,
510 * This controller supports PIO0 to PIO3. Unlike the 611A the MVB
511 * version is dual channel but doesn't have a lot of unique registers.
514 static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
516 u8 active, recover, setup;
518 struct ata_device *pair = ata_dev_pair(adev);
520 int khz[4] = { 50000, 40000, 33000, 25000 };
525 sysclk = opti_syscfg(0xAC) & 0xC0; /* BIOS set */
527 /* Enter configuration mode */
528 ioread16(ap->ioaddr.error_addr);
529 ioread16(ap->ioaddr.error_addr);
530 iowrite8(3, ap->ioaddr.nsect_addr);
532 /* Read VLB clock strapping */
533 clock = 1000000000 / khz[sysclk];
535 /* Get the timing data in cycles */
536 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
538 /* Setup timing is shared */
540 struct ata_timing tp;
541 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
543 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
546 active = clamp_val(t.active, 2, 17) - 2;
547 recover = clamp_val(t.recover, 1, 16) - 1;
548 setup = clamp_val(t.setup, 1, 4) - 1;
550 /* Select the right timing bank for write timing */
551 rc = ioread8(ap->ioaddr.lbal_addr);
553 rc |= (adev->devno << 7);
554 iowrite8(rc, ap->ioaddr.lbal_addr);
556 /* Write the timings */
557 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
559 /* Select the right bank for read timings, also
560 load the shared timings for address */
561 rc = ioread8(ap->ioaddr.device_addr);
563 rc |= adev->devno; /* Index select */
564 rc |= (setup << 4) | 0x04;
565 iowrite8(rc, ap->ioaddr.device_addr);
567 /* Load the read timings */
568 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
570 /* Ensure the timing register mode is right */
571 rc = ioread8(ap->ioaddr.lbal_addr);
574 iowrite8(rc, ap->ioaddr.lbal_addr);
576 /* Exit command mode */
577 iowrite8(0x83, ap->ioaddr.nsect_addr);
579 /* We need to know this for quad device on the MVB */
580 ap->host->private_data = ap;
584 * opt82c465mv_qc_issue - command issue
585 * @qc: command pending
587 * Called when the libata layer is about to issue a command. We wrap
588 * this interface so that we can load the correct ATA timings. The
589 * MVB has a single set of timing registers and these are shared
590 * across channels. As there are two registers we really ought to
591 * track the last two used values as a sort of register window. For
592 * now we just reload on a channel switch. On the single channel
593 * setup this condition never fires so we do nothing extra.
595 * FIXME: dual channel needs ->serialize support
598 static unsigned int opti82c46x_qc_issue(struct ata_queued_cmd *qc)
600 struct ata_port *ap = qc->ap;
601 struct ata_device *adev = qc->dev;
603 /* If timings are set and for the wrong channel (2nd test is
604 due to a libata shortcoming and will eventually go I hope) */
605 if (ap->host->private_data != ap->host
606 && ap->host->private_data != NULL)
607 opti82c46x_set_piomode(ap, adev);
609 return ata_sff_qc_issue(qc);
612 static struct ata_port_operations opti82c46x_port_ops = {
613 .inherits = &legacy_base_port_ops,
614 .set_piomode = opti82c46x_set_piomode,
615 .qc_issue = opti82c46x_qc_issue,
618 static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
621 struct legacy_data *ld_qdi = ap->host->private_data;
622 int active, recovery;
625 /* Get the timing data in cycles */
626 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
629 active = 8 - clamp_val(t.active, 1, 8);
630 recovery = 18 - clamp_val(t.recover, 3, 18);
632 active = 9 - clamp_val(t.active, 2, 9);
633 recovery = 15 - clamp_val(t.recover, 0, 15);
635 timing = (recovery << 4) | active | 0x08;
637 ld_qdi->clock[adev->devno] = timing;
639 outb(timing, ld_qdi->timing);
643 * qdi6580dp_set_piomode - PIO setup for dual channel
647 * In dual channel mode the 6580 has one clock per channel and we have
648 * to software clockswitch in qc_issue.
651 static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
654 struct legacy_data *ld_qdi = ap->host->private_data;
655 int active, recovery;
658 /* Get the timing data in cycles */
659 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
662 active = 8 - clamp_val(t.active, 1, 8);
663 recovery = 18 - clamp_val(t.recover, 3, 18);
665 active = 9 - clamp_val(t.active, 2, 9);
666 recovery = 15 - clamp_val(t.recover, 0, 15);
668 timing = (recovery << 4) | active | 0x08;
670 ld_qdi->clock[adev->devno] = timing;
672 outb(timing, ld_qdi->timing + 2 * ap->port_no);
674 if (adev->class != ATA_DEV_ATA)
675 outb(0x5F, ld_qdi->timing + 3);
679 * qdi6580_set_piomode - PIO setup for single channel
683 * In single channel mode the 6580 has one clock per device and we can
684 * avoid the requirement to clock switch. We also have to load the timing
685 * into the right clock according to whether we are master or slave.
688 static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
691 struct legacy_data *ld_qdi = ap->host->private_data;
692 int active, recovery;
695 /* Get the timing data in cycles */
696 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
699 active = 8 - clamp_val(t.active, 1, 8);
700 recovery = 18 - clamp_val(t.recover, 3, 18);
702 active = 9 - clamp_val(t.active, 2, 9);
703 recovery = 15 - clamp_val(t.recover, 0, 15);
705 timing = (recovery << 4) | active | 0x08;
706 ld_qdi->clock[adev->devno] = timing;
707 outb(timing, ld_qdi->timing + 2 * adev->devno);
709 if (adev->class != ATA_DEV_ATA)
710 outb(0x5F, ld_qdi->timing + 3);
714 * qdi_qc_issue - command issue
715 * @qc: command pending
717 * Called when the libata layer is about to issue a command. We wrap
718 * this interface so that we can load the correct ATA timings.
721 static unsigned int qdi_qc_issue(struct ata_queued_cmd *qc)
723 struct ata_port *ap = qc->ap;
724 struct ata_device *adev = qc->dev;
725 struct legacy_data *ld_qdi = ap->host->private_data;
727 if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
728 if (adev->pio_mode) {
729 ld_qdi->last = ld_qdi->clock[adev->devno];
730 outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
734 return ata_sff_qc_issue(qc);
737 static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
738 unsigned int buflen, int rw)
740 struct ata_port *ap = adev->link->ap;
741 int slop = buflen & 3;
743 if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)
744 && (ap->pflags & ATA_PFLAG_PIO32)) {
746 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
748 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
750 if (unlikely(slop)) {
753 memcpy(&pad, buf + buflen - slop, slop);
754 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
756 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
757 memcpy(buf + buflen - slop, &pad, slop);
760 return (buflen + 3) & ~3;
762 return ata_sff_data_xfer(adev, buf, buflen, rw);
765 static int qdi_port(struct platform_device *dev,
766 struct legacy_probe *lp, struct legacy_data *ld)
768 if (devm_request_region(&dev->dev, lp->private, 4, "qdi") == NULL)
770 ld->timing = lp->private;
774 static struct ata_port_operations qdi6500_port_ops = {
775 .inherits = &legacy_base_port_ops,
776 .set_piomode = qdi6500_set_piomode,
777 .qc_issue = qdi_qc_issue,
778 .sff_data_xfer = vlb32_data_xfer,
781 static struct ata_port_operations qdi6580_port_ops = {
782 .inherits = &legacy_base_port_ops,
783 .set_piomode = qdi6580_set_piomode,
784 .sff_data_xfer = vlb32_data_xfer,
787 static struct ata_port_operations qdi6580dp_port_ops = {
788 .inherits = &legacy_base_port_ops,
789 .set_piomode = qdi6580dp_set_piomode,
790 .sff_data_xfer = vlb32_data_xfer,
793 static DEFINE_SPINLOCK(winbond_lock);
795 static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
798 spin_lock_irqsave(&winbond_lock, flags);
799 outb(reg, port + 0x01);
800 outb(val, port + 0x02);
801 spin_unlock_irqrestore(&winbond_lock, flags);
804 static u8 winbond_readcfg(unsigned long port, u8 reg)
809 spin_lock_irqsave(&winbond_lock, flags);
810 outb(reg, port + 0x01);
811 val = inb(port + 0x02);
812 spin_unlock_irqrestore(&winbond_lock, flags);
817 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
820 struct legacy_data *ld_winbond = ap->host->private_data;
821 int active, recovery;
823 int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
825 reg = winbond_readcfg(ld_winbond->timing, 0x81);
827 /* Get the timing data in cycles */
828 if (reg & 0x40) /* Fast VLB bus, assume 50MHz */
829 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
831 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
833 active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
834 recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
835 timing = (active << 4) | recovery;
836 winbond_writecfg(ld_winbond->timing, timing, reg);
838 /* Load the setup timing */
841 if (adev->class != ATA_DEV_ATA)
842 reg |= 0x08; /* FIFO off */
843 if (!ata_pio_need_iordy(adev))
844 reg |= 0x02; /* IORDY off */
845 reg |= (clamp_val(t.setup, 0, 3) << 6);
846 winbond_writecfg(ld_winbond->timing, timing + 1, reg);
849 static int winbond_port(struct platform_device *dev,
850 struct legacy_probe *lp, struct legacy_data *ld)
852 if (devm_request_region(&dev->dev, lp->private, 4, "winbond") == NULL)
854 ld->timing = lp->private;
858 static struct ata_port_operations winbond_port_ops = {
859 .inherits = &legacy_base_port_ops,
860 .set_piomode = winbond_set_piomode,
861 .sff_data_xfer = vlb32_data_xfer,
864 static struct legacy_controller controllers[] = {
865 {"BIOS", &legacy_port_ops, 0x1F,
866 ATA_FLAG_NO_IORDY, 0, NULL },
867 {"Snooping", &simple_port_ops, 0x1F,
869 {"PDC20230", &pdc20230_port_ops, 0x7,
871 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, NULL },
872 {"HT6560A", &ht6560a_port_ops, 0x07,
873 ATA_FLAG_NO_IORDY, 0, NULL },
874 {"HT6560B", &ht6560b_port_ops, 0x1F,
875 ATA_FLAG_NO_IORDY, 0, NULL },
876 {"OPTI82C611A", &opti82c611a_port_ops, 0x0F,
878 {"OPTI82C46X", &opti82c46x_port_ops, 0x0F,
880 {"QDI6500", &qdi6500_port_ops, 0x07,
882 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
883 {"QDI6580", &qdi6580_port_ops, 0x1F,
884 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
885 {"QDI6580DP", &qdi6580dp_port_ops, 0x1F,
886 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
887 {"W83759A", &winbond_port_ops, 0x1F,
888 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,
893 * probe_chip_type - Discover controller
894 * @probe: Probe entry to check
896 * Probe an ATA port and identify the type of controller. We don't
897 * check if the controller appears to be driveless at this point.
900 static __init int probe_chip_type(struct legacy_probe *probe)
902 int mask = 1 << probe->slot;
904 if (winbond && (probe->port == 0x1F0 || probe->port == 0x170)) {
905 u8 reg = winbond_readcfg(winbond, 0x81);
906 reg |= 0x80; /* jumpered mode off */
907 winbond_writecfg(winbond, 0x81, reg);
908 reg = winbond_readcfg(winbond, 0x83);
909 reg |= 0xF0; /* local control */
910 winbond_writecfg(winbond, 0x83, reg);
911 reg = winbond_readcfg(winbond, 0x85);
912 reg |= 0xF0; /* programmable timing */
913 winbond_writecfg(winbond, 0x85, reg);
915 reg = winbond_readcfg(winbond, 0x81);
920 if (probe->port == 0x1F0) {
922 local_irq_save(flags);
924 outb(inb(0x1F2) | 0x80, 0x1F2);
932 if ((inb(0x1F2) & 0x80) == 0) {
933 /* PDC20230c or 20630 ? */
934 printk(KERN_INFO "PDC20230-C/20630 VLB ATA controller"
938 local_irq_restore(flags);
944 if (inb(0x1F2) == 0x00)
945 printk(KERN_INFO "PDC20230-B VLB ATA "
946 "controller detected.\n");
947 local_irq_restore(flags);
950 local_irq_restore(flags);
957 if (opti82c611a & mask)
959 if (opti82c46x & mask)
961 if (autospeed & mask)
968 * legacy_init_one - attach a legacy interface
971 * Register an ISA bus IDE interface. Such interfaces are PIO and we
972 * assume do not support IRQ sharing.
975 static __init int legacy_init_one(struct legacy_probe *probe)
977 struct legacy_controller *controller = &controllers[probe->type];
978 int pio_modes = controller->pio_mask;
979 unsigned long io = probe->port;
980 u32 mask = (1 << probe->slot);
981 struct ata_port_operations *ops = controller->ops;
982 struct legacy_data *ld = &legacy_data[probe->slot];
983 struct ata_host *host = NULL;
985 struct platform_device *pdev;
986 struct ata_device *dev;
987 void __iomem *io_addr, *ctrl_addr;
988 u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
991 iordy |= controller->flags;
993 pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
995 return PTR_ERR(pdev);
998 if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
999 devm_request_region(&pdev->dev, io + 0x0206, 1,
1000 "pata_legacy") == NULL)
1004 io_addr = devm_ioport_map(&pdev->dev, io, 8);
1005 ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
1006 if (!io_addr || !ctrl_addr)
1008 if (controller->setup)
1009 if (controller->setup(pdev, probe, ld) < 0)
1011 host = ata_host_alloc(&pdev->dev, 1);
1014 ap = host->ports[0];
1017 ap->pio_mask = pio_modes;
1018 ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
1019 ap->pflags |= controller->pflags;
1020 ap->ioaddr.cmd_addr = io_addr;
1021 ap->ioaddr.altstatus_addr = ctrl_addr;
1022 ap->ioaddr.ctl_addr = ctrl_addr;
1023 ata_sff_std_ports(&ap->ioaddr);
1024 ap->host->private_data = ld;
1026 ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
1028 ret = ata_host_activate(host, probe->irq, ata_sff_interrupt, 0,
1032 async_synchronize_full();
1033 ld->platform_dev = pdev;
1035 /* Nothing found means we drop the port as its probably not there */
1038 ata_for_each_dev(dev, &ap->link, ALL) {
1039 if (!ata_dev_absent(dev)) {
1040 legacy_host[probe->slot] = host;
1041 ld->platform_dev = pdev;
1045 ata_host_detach(host);
1047 platform_device_unregister(pdev);
1052 * legacy_check_special_cases - ATA special cases
1053 * @p: PCI device to check
1054 * @master: set this if we find an ATA master
1055 * @master: set this if we find an ATA secondary
1057 * A small number of vendors implemented early PCI ATA interfaces
1058 * on bridge logic without the ATA interface being PCI visible.
1059 * Where we have a matching PCI driver we must skip the relevant
1060 * device here. If we don't know about it then the legacy driver
1061 * is the right driver anyway.
1064 static void __init legacy_check_special_cases(struct pci_dev *p, int *primary,
1067 /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1068 if (p->vendor == 0x1078 && p->device == 0x0000) {
1069 *primary = *secondary = 1;
1072 /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1073 if (p->vendor == 0x1078 && p->device == 0x0002) {
1074 *primary = *secondary = 1;
1077 /* Intel MPIIX - PIO ATA on non PCI side of bridge */
1078 if (p->vendor == 0x8086 && p->device == 0x1234) {
1080 pci_read_config_word(p, 0x6C, &r);
1082 /* ATA port enabled */
1092 static __init void probe_opti_vlb(void)
1094 /* If an OPTI 82C46X is present find out where the channels are */
1095 static const char *optis[4] = {
1100 u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1102 opti82c46x = 3; /* Assume master and slave first */
1103 printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1106 chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1107 ctrl = opti_syscfg(0xAC);
1108 /* Check enabled and this port is the 465MV port. On the
1109 MVB we may have two channels */
1112 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1113 legacy_probe_add(0x170, 15, OPTI46X, 0);
1116 legacy_probe_add(0x170, 15, OPTI46X, 0);
1118 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1120 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1123 static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1125 static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1126 /* Check card type */
1127 if ((r & 0xF0) == 0xC0) {
1128 /* QD6500: single channel */
1132 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1135 if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1136 /* QD6580: dual channel */
1137 if (!request_region(port + 2 , 2, "pata_qdi")) {
1138 release_region(port, 2);
1141 res = inb(port + 3);
1142 /* Single channel mode ? */
1144 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1146 else { /* Dual channel mode */
1147 legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1148 /* port + 0x02, r & 0x04 */
1149 legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1151 release_region(port + 2, 2);
1155 static __init void probe_qdi_vlb(void)
1157 unsigned long flags;
1158 static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1162 * Check each possible QD65xx base address
1165 for (i = 0; i < 2; i++) {
1166 unsigned long port = qd_port[i];
1170 if (request_region(port, 2, "pata_qdi")) {
1171 /* Check for a card */
1172 local_irq_save(flags);
1173 /* I have no h/w that needs this delay but it
1174 is present in the historic code */
1183 local_irq_restore(flags);
1187 release_region(port, 2);
1190 /* Passes the presence test */
1193 /* Check port agrees with port set */
1194 if ((r & 2) >> 1 == i)
1195 qdi65_identify_port(r, res, port);
1196 release_region(port, 2);
1202 * legacy_init - attach legacy interfaces
1204 * Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1205 * Right now we do not scan the ide0 and ide1 address but should do so
1206 * for non PCI systems or systems with no PCI IDE legacy mode devices.
1207 * If you fix that note there are special cases to consider like VLB
1208 * drivers and CS5510/20.
1211 static __init int legacy_init(void)
1217 int pci_present = 0;
1218 struct legacy_probe *pl = &probe_list[0];
1221 struct pci_dev *p = NULL;
1223 for_each_pci_dev(p) {
1225 /* Check for any overlap of the system ATA mappings. Native
1226 mode controllers stuck on these addresses or some devices
1227 in 'raid' mode won't be found by the storage class test */
1228 for (r = 0; r < 6; r++) {
1229 if (pci_resource_start(p, r) == 0x1f0)
1231 if (pci_resource_start(p, r) == 0x170)
1234 /* Check for special cases */
1235 legacy_check_special_cases(p, &primary, &secondary);
1237 /* If PCI bus is present then don't probe for tertiary
1243 winbond = 0x130; /* Default port, alt is 1B0 */
1245 if (primary == 0 || all)
1246 legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1247 if (secondary == 0 || all)
1248 legacy_probe_add(0x170, 15, UNKNOWN, 0);
1250 if (probe_all || !pci_present) {
1251 /* ISA/VLB extra ports */
1252 legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1253 legacy_probe_add(0x168, 10, UNKNOWN, 0);
1254 legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1255 legacy_probe_add(0x160, 12, UNKNOWN, 0);
1263 for (i = 0; i < NR_HOST; i++, pl++) {
1266 if (pl->type == UNKNOWN)
1267 pl->type = probe_chip_type(pl);
1269 if (legacy_init_one(pl) == 0)
1277 static __exit void legacy_exit(void)
1281 for (i = 0; i < nr_legacy_host; i++) {
1282 struct legacy_data *ld = &legacy_data[i];
1283 ata_host_detach(legacy_host[i]);
1284 platform_device_unregister(ld->platform_dev);
1288 MODULE_AUTHOR("Alan Cox");
1289 MODULE_DESCRIPTION("low-level driver for legacy ATA");
1290 MODULE_LICENSE("GPL");
1291 MODULE_VERSION(DRV_VERSION);
1293 module_param(probe_all, int, 0);
1294 module_param(autospeed, int, 0);
1295 module_param(ht6560a, int, 0);
1296 module_param(ht6560b, int, 0);
1297 module_param(opti82c611a, int, 0);
1298 module_param(opti82c46x, int, 0);
1299 module_param(qdi, int, 0);
1300 module_param(pio_mask, int, 0);
1301 module_param(iordy_mask, int, 0);
1303 module_init(legacy_init);
1304 module_exit(legacy_exit);