]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - drivers/ata/pata_legacy.c
UBUNTU: Ubuntu-5.4.0-117.132
[mirror_ubuntu-focal-kernel.git] / drivers / ata / pata_legacy.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * pata-legacy.c - Legacy port PATA/SATA controller driver.
4 * Copyright 2005/2006 Red Hat, all rights reserved.
5 *
6 * An ATA driver for the legacy ATA ports.
7 *
8 * Data Sources:
9 * Opti 82C465/82C611 support: Data sheets at opti-inc.com
10 * HT6560 series:
11 * Promise 20230/20620:
12 * http://www.ryston.cz/petr/vlb/pdc20230b.html
13 * http://www.ryston.cz/petr/vlb/pdc20230c.html
14 * http://www.ryston.cz/petr/vlb/pdc20630.html
15 * QDI65x0:
16 * http://www.ryston.cz/petr/vlb/qd6500.html
17 * http://www.ryston.cz/petr/vlb/qd6580.html
18 *
19 * QDI65x0 probe code based on drivers/ide/legacy/qd65xx.c
20 * Rewritten from the work of Colten Edwards <pje120@cs.usask.ca> by
21 * Samuel Thibault <samuel.thibault@ens-lyon.org>
22 *
23 * Unsupported but docs exist:
24 * Appian/Adaptec AIC25VL01/Cirrus Logic PD7220
25 *
26 * This driver handles legacy (that is "ISA/VLB side") IDE ports found
27 * on PC class systems. There are three hybrid devices that are exceptions
28 * The Cyrix 5510/5520 where a pre SFF ATA device is on the bridge and
29 * the MPIIX where the tuning is PCI side but the IDE is "ISA side".
30 *
31 * Specific support is included for the ht6560a/ht6560b/opti82c611a/
32 * opti82c465mv/promise 20230c/20630/qdi65x0/winbond83759A
33 *
34 * Support for the Winbond 83759A when operating in advanced mode.
35 * Multichip mode is not currently supported.
36 *
37 * Use the autospeed and pio_mask options with:
38 * Appian ADI/2 aka CLPD7220 or AIC25VL01.
39 * Use the jumpers, autospeed and set pio_mask to the mode on the jumpers with
40 * Goldstar GM82C711, PIC-1288A-125, UMC 82C871F, Winbond W83759,
41 * Winbond W83759A, Promise PDC20230-B
42 *
43 * For now use autospeed and pio_mask as above with the W83759A. This may
44 * change.
45 */
46
47 #include <linux/async.h>
48 #include <linux/kernel.h>
49 #include <linux/module.h>
50 #include <linux/pci.h>
51 #include <linux/init.h>
52 #include <linux/blkdev.h>
53 #include <linux/delay.h>
54 #include <scsi/scsi_host.h>
55 #include <linux/ata.h>
56 #include <linux/libata.h>
57 #include <linux/platform_device.h>
58
59 #define DRV_NAME "pata_legacy"
60 #define DRV_VERSION "0.6.5"
61
62 #define NR_HOST 6
63
64 static int all;
65 module_param(all, int, 0444);
66 MODULE_PARM_DESC(all, "Grab all legacy port devices, even if PCI(0=off, 1=on)");
67
68 enum controller {
69 BIOS = 0,
70 SNOOP = 1,
71 PDC20230 = 2,
72 HT6560A = 3,
73 HT6560B = 4,
74 OPTI611A = 5,
75 OPTI46X = 6,
76 QDI6500 = 7,
77 QDI6580 = 8,
78 QDI6580DP = 9, /* Dual channel mode is different */
79 W83759A = 10,
80
81 UNKNOWN = -1
82 };
83
84 struct legacy_data {
85 unsigned long timing;
86 u8 clock[2];
87 u8 last;
88 int fast;
89 enum controller type;
90 struct platform_device *platform_dev;
91 };
92
93 struct legacy_probe {
94 unsigned char *name;
95 unsigned long port;
96 unsigned int irq;
97 unsigned int slot;
98 enum controller type;
99 unsigned long private;
100 };
101
102 struct legacy_controller {
103 const char *name;
104 struct ata_port_operations *ops;
105 unsigned int pio_mask;
106 unsigned int flags;
107 unsigned int pflags;
108 int (*setup)(struct platform_device *, struct legacy_probe *probe,
109 struct legacy_data *data);
110 };
111
112 static int legacy_port[NR_HOST] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 };
113
114 static struct legacy_probe probe_list[NR_HOST];
115 static struct legacy_data legacy_data[NR_HOST];
116 static struct ata_host *legacy_host[NR_HOST];
117 static int nr_legacy_host;
118
119
120 static int probe_all; /* Set to check all ISA port ranges */
121 static int ht6560a; /* HT 6560A on primary 1, second 2, both 3 */
122 static int ht6560b; /* HT 6560A on primary 1, second 2, both 3 */
123 static int opti82c611a; /* Opti82c611A on primary 1, sec 2, both 3 */
124 static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
125 static int autospeed; /* Chip present which snoops speed changes */
126 static int pio_mask = ATA_PIO4; /* PIO range for autospeed devices */
127 static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
128
129 /* Set to probe QDI controllers */
130 #ifdef CONFIG_PATA_QDI_MODULE
131 static int qdi = 1;
132 #else
133 static int qdi;
134 #endif
135
136 #ifdef CONFIG_PATA_WINBOND_VLB_MODULE
137 static int winbond = 1; /* Set to probe Winbond controllers,
138 give I/O port if non standard */
139 #else
140 static int winbond; /* Set to probe Winbond controllers,
141 give I/O port if non standard */
142 #endif
143
144 /**
145 * legacy_probe_add - Add interface to probe list
146 * @port: Controller port
147 * @irq: IRQ number
148 * @type: Controller type
149 * @private: Controller specific info
150 *
151 * Add an entry into the probe list for ATA controllers. This is used
152 * to add the default ISA slots and then to build up the table
153 * further according to other ISA/VLB/Weird device scans
154 *
155 * An I/O port list is used to keep ordering stable and sane, as we
156 * don't have any good way to talk about ordering otherwise
157 */
158
159 static int legacy_probe_add(unsigned long port, unsigned int irq,
160 enum controller type, unsigned long private)
161 {
162 struct legacy_probe *lp = &probe_list[0];
163 int i;
164 struct legacy_probe *free = NULL;
165
166 for (i = 0; i < NR_HOST; i++) {
167 if (lp->port == 0 && free == NULL)
168 free = lp;
169 /* Matching port, or the correct slot for ordering */
170 if (lp->port == port || legacy_port[i] == port) {
171 free = lp;
172 break;
173 }
174 lp++;
175 }
176 if (free == NULL) {
177 printk(KERN_ERR "pata_legacy: Too many interfaces.\n");
178 return -1;
179 }
180 /* Fill in the entry for later probing */
181 free->port = port;
182 free->irq = irq;
183 free->type = type;
184 free->private = private;
185 return 0;
186 }
187
188
189 /**
190 * legacy_set_mode - mode setting
191 * @link: IDE link
192 * @unused: Device that failed when error is returned
193 *
194 * Use a non standard set_mode function. We don't want to be tuned.
195 *
196 * The BIOS configured everything. Our job is not to fiddle. Just use
197 * whatever PIO the hardware is using and leave it at that. When we
198 * get some kind of nice user driven API for control then we can
199 * expand on this as per hdparm in the base kernel.
200 */
201
202 static int legacy_set_mode(struct ata_link *link, struct ata_device **unused)
203 {
204 struct ata_device *dev;
205
206 ata_for_each_dev(dev, link, ENABLED) {
207 ata_dev_info(dev, "configured for PIO\n");
208 dev->pio_mode = XFER_PIO_0;
209 dev->xfer_mode = XFER_PIO_0;
210 dev->xfer_shift = ATA_SHIFT_PIO;
211 dev->flags |= ATA_DFLAG_PIO;
212 }
213 return 0;
214 }
215
216 static struct scsi_host_template legacy_sht = {
217 ATA_PIO_SHT(DRV_NAME),
218 };
219
220 static const struct ata_port_operations legacy_base_port_ops = {
221 .inherits = &ata_sff_port_ops,
222 .cable_detect = ata_cable_40wire,
223 };
224
225 /*
226 * These ops are used if the user indicates the hardware
227 * snoops the commands to decide on the mode and handles the
228 * mode selection "magically" itself. Several legacy controllers
229 * do this. The mode range can be set if it is not 0x1F by setting
230 * pio_mask as well.
231 */
232
233 static struct ata_port_operations simple_port_ops = {
234 .inherits = &legacy_base_port_ops,
235 .sff_data_xfer = ata_sff_data_xfer32,
236 };
237
238 static struct ata_port_operations legacy_port_ops = {
239 .inherits = &legacy_base_port_ops,
240 .sff_data_xfer = ata_sff_data_xfer32,
241 .set_mode = legacy_set_mode,
242 };
243
244 /*
245 * Promise 20230C and 20620 support
246 *
247 * This controller supports PIO0 to PIO2. We set PIO timings
248 * conservatively to allow for 50MHz Vesa Local Bus. The 20620 DMA
249 * support is weird being DMA to controller and PIO'd to the host
250 * and not supported.
251 */
252
253 static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev)
254 {
255 int tries = 5;
256 int pio = adev->pio_mode - XFER_PIO_0;
257 u8 rt;
258 unsigned long flags;
259
260 /* Safe as UP only. Force I/Os to occur together */
261
262 local_irq_save(flags);
263
264 /* Unlock the control interface */
265 do {
266 inb(0x1F5);
267 outb(inb(0x1F2) | 0x80, 0x1F2);
268 inb(0x1F2);
269 inb(0x3F6);
270 inb(0x3F6);
271 inb(0x1F2);
272 inb(0x1F2);
273 }
274 while ((inb(0x1F2) & 0x80) && --tries);
275
276 local_irq_restore(flags);
277
278 outb(inb(0x1F4) & 0x07, 0x1F4);
279
280 rt = inb(0x1F3);
281 rt &= 0x07 << (3 * adev->devno);
282 if (pio)
283 rt |= (1 + 3 * pio) << (3 * adev->devno);
284
285 udelay(100);
286 outb(inb(0x1F2) | 0x01, 0x1F2);
287 udelay(100);
288 inb(0x1F5);
289
290 }
291
292 static unsigned int pdc_data_xfer_vlb(struct ata_queued_cmd *qc,
293 unsigned char *buf, unsigned int buflen, int rw)
294 {
295 struct ata_device *dev = qc->dev;
296 struct ata_port *ap = dev->link->ap;
297 int slop = buflen & 3;
298
299 /* 32bit I/O capable *and* we need to write a whole number of dwords */
300 if (ata_id_has_dword_io(dev->id) && (slop == 0 || slop == 3)
301 && (ap->pflags & ATA_PFLAG_PIO32)) {
302 unsigned long flags;
303
304 local_irq_save(flags);
305
306 /* Perform the 32bit I/O synchronization sequence */
307 ioread8(ap->ioaddr.nsect_addr);
308 ioread8(ap->ioaddr.nsect_addr);
309 ioread8(ap->ioaddr.nsect_addr);
310
311 /* Now the data */
312 if (rw == READ)
313 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
314 else
315 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
316
317 if (unlikely(slop)) {
318 __le32 pad = 0;
319
320 if (rw == READ) {
321 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
322 memcpy(buf + buflen - slop, &pad, slop);
323 } else {
324 memcpy(&pad, buf + buflen - slop, slop);
325 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
326 }
327 buflen += 4 - slop;
328 }
329 local_irq_restore(flags);
330 } else
331 buflen = ata_sff_data_xfer32(qc, buf, buflen, rw);
332
333 return buflen;
334 }
335
336 static struct ata_port_operations pdc20230_port_ops = {
337 .inherits = &legacy_base_port_ops,
338 .set_piomode = pdc20230_set_piomode,
339 .sff_data_xfer = pdc_data_xfer_vlb,
340 };
341
342 /*
343 * Holtek 6560A support
344 *
345 * This controller supports PIO0 to PIO2 (no IORDY even though higher
346 * timings can be loaded).
347 */
348
349 static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
350 {
351 u8 active, recover;
352 struct ata_timing t;
353
354 /* Get the timing data in cycles. For now play safe at 50Mhz */
355 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
356
357 active = clamp_val(t.active, 2, 15);
358 recover = clamp_val(t.recover, 4, 15);
359
360 inb(0x3E6);
361 inb(0x3E6);
362 inb(0x3E6);
363 inb(0x3E6);
364
365 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
366 ioread8(ap->ioaddr.status_addr);
367 }
368
369 static struct ata_port_operations ht6560a_port_ops = {
370 .inherits = &legacy_base_port_ops,
371 .set_piomode = ht6560a_set_piomode,
372 };
373
374 /*
375 * Holtek 6560B support
376 *
377 * This controller supports PIO0 to PIO4. We honour the BIOS/jumper FIFO
378 * setting unless we see an ATAPI device in which case we force it off.
379 *
380 * FIXME: need to implement 2nd channel support.
381 */
382
383 static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
384 {
385 u8 active, recover;
386 struct ata_timing t;
387
388 /* Get the timing data in cycles. For now play safe at 50Mhz */
389 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
390
391 active = clamp_val(t.active, 2, 15);
392 recover = clamp_val(t.recover, 2, 16) & 0x0F;
393
394 inb(0x3E6);
395 inb(0x3E6);
396 inb(0x3E6);
397 inb(0x3E6);
398
399 iowrite8(recover << 4 | active, ap->ioaddr.device_addr);
400
401 if (adev->class != ATA_DEV_ATA) {
402 u8 rconf = inb(0x3E6);
403 if (rconf & 0x24) {
404 rconf &= ~0x24;
405 outb(rconf, 0x3E6);
406 }
407 }
408 ioread8(ap->ioaddr.status_addr);
409 }
410
411 static struct ata_port_operations ht6560b_port_ops = {
412 .inherits = &legacy_base_port_ops,
413 .set_piomode = ht6560b_set_piomode,
414 };
415
416 /*
417 * Opti core chipset helpers
418 */
419
420 /**
421 * opti_syscfg - read OPTI chipset configuration
422 * @reg: Configuration register to read
423 *
424 * Returns the value of an OPTI system board configuration register.
425 */
426
427 static u8 opti_syscfg(u8 reg)
428 {
429 unsigned long flags;
430 u8 r;
431
432 /* Uniprocessor chipset and must force cycles adjancent */
433 local_irq_save(flags);
434 outb(reg, 0x22);
435 r = inb(0x24);
436 local_irq_restore(flags);
437 return r;
438 }
439
440 /*
441 * Opti 82C611A
442 *
443 * This controller supports PIO0 to PIO3.
444 */
445
446 static void opti82c611a_set_piomode(struct ata_port *ap,
447 struct ata_device *adev)
448 {
449 u8 active, recover, setup;
450 struct ata_timing t;
451 struct ata_device *pair = ata_dev_pair(adev);
452 int clock;
453 int khz[4] = { 50000, 40000, 33000, 25000 };
454 u8 rc;
455
456 /* Enter configuration mode */
457 ioread16(ap->ioaddr.error_addr);
458 ioread16(ap->ioaddr.error_addr);
459 iowrite8(3, ap->ioaddr.nsect_addr);
460
461 /* Read VLB clock strapping */
462 clock = 1000000000 / khz[ioread8(ap->ioaddr.lbah_addr) & 0x03];
463
464 /* Get the timing data in cycles */
465 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
466
467 /* Setup timing is shared */
468 if (pair) {
469 struct ata_timing tp;
470 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
471
472 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
473 }
474
475 active = clamp_val(t.active, 2, 17) - 2;
476 recover = clamp_val(t.recover, 1, 16) - 1;
477 setup = clamp_val(t.setup, 1, 4) - 1;
478
479 /* Select the right timing bank for write timing */
480 rc = ioread8(ap->ioaddr.lbal_addr);
481 rc &= 0x7F;
482 rc |= (adev->devno << 7);
483 iowrite8(rc, ap->ioaddr.lbal_addr);
484
485 /* Write the timings */
486 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
487
488 /* Select the right bank for read timings, also
489 load the shared timings for address */
490 rc = ioread8(ap->ioaddr.device_addr);
491 rc &= 0xC0;
492 rc |= adev->devno; /* Index select */
493 rc |= (setup << 4) | 0x04;
494 iowrite8(rc, ap->ioaddr.device_addr);
495
496 /* Load the read timings */
497 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
498
499 /* Ensure the timing register mode is right */
500 rc = ioread8(ap->ioaddr.lbal_addr);
501 rc &= 0x73;
502 rc |= 0x84;
503 iowrite8(rc, ap->ioaddr.lbal_addr);
504
505 /* Exit command mode */
506 iowrite8(0x83, ap->ioaddr.nsect_addr);
507 }
508
509
510 static struct ata_port_operations opti82c611a_port_ops = {
511 .inherits = &legacy_base_port_ops,
512 .set_piomode = opti82c611a_set_piomode,
513 };
514
515 /*
516 * Opti 82C465MV
517 *
518 * This controller supports PIO0 to PIO3. Unlike the 611A the MVB
519 * version is dual channel but doesn't have a lot of unique registers.
520 */
521
522 static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
523 {
524 u8 active, recover, setup;
525 struct ata_timing t;
526 struct ata_device *pair = ata_dev_pair(adev);
527 int clock;
528 int khz[4] = { 50000, 40000, 33000, 25000 };
529 u8 rc;
530 u8 sysclk;
531
532 /* Get the clock */
533 sysclk = (opti_syscfg(0xAC) & 0xC0) >> 6; /* BIOS set */
534
535 /* Enter configuration mode */
536 ioread16(ap->ioaddr.error_addr);
537 ioread16(ap->ioaddr.error_addr);
538 iowrite8(3, ap->ioaddr.nsect_addr);
539
540 /* Read VLB clock strapping */
541 clock = 1000000000 / khz[sysclk];
542
543 /* Get the timing data in cycles */
544 ata_timing_compute(adev, adev->pio_mode, &t, clock, 1000);
545
546 /* Setup timing is shared */
547 if (pair) {
548 struct ata_timing tp;
549 ata_timing_compute(pair, pair->pio_mode, &tp, clock, 1000);
550
551 ata_timing_merge(&t, &tp, &t, ATA_TIMING_SETUP);
552 }
553
554 active = clamp_val(t.active, 2, 17) - 2;
555 recover = clamp_val(t.recover, 1, 16) - 1;
556 setup = clamp_val(t.setup, 1, 4) - 1;
557
558 /* Select the right timing bank for write timing */
559 rc = ioread8(ap->ioaddr.lbal_addr);
560 rc &= 0x7F;
561 rc |= (adev->devno << 7);
562 iowrite8(rc, ap->ioaddr.lbal_addr);
563
564 /* Write the timings */
565 iowrite8(active << 4 | recover, ap->ioaddr.error_addr);
566
567 /* Select the right bank for read timings, also
568 load the shared timings for address */
569 rc = ioread8(ap->ioaddr.device_addr);
570 rc &= 0xC0;
571 rc |= adev->devno; /* Index select */
572 rc |= (setup << 4) | 0x04;
573 iowrite8(rc, ap->ioaddr.device_addr);
574
575 /* Load the read timings */
576 iowrite8(active << 4 | recover, ap->ioaddr.data_addr);
577
578 /* Ensure the timing register mode is right */
579 rc = ioread8(ap->ioaddr.lbal_addr);
580 rc &= 0x73;
581 rc |= 0x84;
582 iowrite8(rc, ap->ioaddr.lbal_addr);
583
584 /* Exit command mode */
585 iowrite8(0x83, ap->ioaddr.nsect_addr);
586
587 /* We need to know this for quad device on the MVB */
588 ap->host->private_data = ap;
589 }
590
591 /**
592 * opt82c465mv_qc_issue - command issue
593 * @qc: command pending
594 *
595 * Called when the libata layer is about to issue a command. We wrap
596 * this interface so that we can load the correct ATA timings. The
597 * MVB has a single set of timing registers and these are shared
598 * across channels. As there are two registers we really ought to
599 * track the last two used values as a sort of register window. For
600 * now we just reload on a channel switch. On the single channel
601 * setup this condition never fires so we do nothing extra.
602 *
603 * FIXME: dual channel needs ->serialize support
604 */
605
606 static unsigned int opti82c46x_qc_issue(struct ata_queued_cmd *qc)
607 {
608 struct ata_port *ap = qc->ap;
609 struct ata_device *adev = qc->dev;
610
611 /* If timings are set and for the wrong channel (2nd test is
612 due to a libata shortcoming and will eventually go I hope) */
613 if (ap->host->private_data != ap->host
614 && ap->host->private_data != NULL)
615 opti82c46x_set_piomode(ap, adev);
616
617 return ata_sff_qc_issue(qc);
618 }
619
620 static struct ata_port_operations opti82c46x_port_ops = {
621 .inherits = &legacy_base_port_ops,
622 .set_piomode = opti82c46x_set_piomode,
623 .qc_issue = opti82c46x_qc_issue,
624 };
625
626 /**
627 * qdi65x0_set_piomode - PIO setup for QDI65x0
628 * @ap: Port
629 * @adev: Device
630 *
631 * In single channel mode the 6580 has one clock per device and we can
632 * avoid the requirement to clock switch. We also have to load the timing
633 * into the right clock according to whether we are master or slave.
634 *
635 * In dual channel mode the 6580 has one clock per channel and we have
636 * to software clockswitch in qc_issue.
637 */
638
639 static void qdi65x0_set_piomode(struct ata_port *ap, struct ata_device *adev)
640 {
641 struct ata_timing t;
642 struct legacy_data *ld_qdi = ap->host->private_data;
643 int active, recovery;
644 u8 timing;
645
646 /* Get the timing data in cycles */
647 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
648
649 if (ld_qdi->fast) {
650 active = 8 - clamp_val(t.active, 1, 8);
651 recovery = 18 - clamp_val(t.recover, 3, 18);
652 } else {
653 active = 9 - clamp_val(t.active, 2, 9);
654 recovery = 15 - clamp_val(t.recover, 0, 15);
655 }
656 timing = (recovery << 4) | active | 0x08;
657 ld_qdi->clock[adev->devno] = timing;
658
659 if (ld_qdi->type == QDI6580)
660 outb(timing, ld_qdi->timing + 2 * adev->devno);
661 else
662 outb(timing, ld_qdi->timing + 2 * ap->port_no);
663
664 /* Clear the FIFO */
665 if (ld_qdi->type != QDI6500 && adev->class != ATA_DEV_ATA)
666 outb(0x5F, (ld_qdi->timing & 0xFFF0) + 3);
667 }
668
669 /**
670 * qdi_qc_issue - command issue
671 * @qc: command pending
672 *
673 * Called when the libata layer is about to issue a command. We wrap
674 * this interface so that we can load the correct ATA timings.
675 */
676
677 static unsigned int qdi_qc_issue(struct ata_queued_cmd *qc)
678 {
679 struct ata_port *ap = qc->ap;
680 struct ata_device *adev = qc->dev;
681 struct legacy_data *ld_qdi = ap->host->private_data;
682
683 if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
684 if (adev->pio_mode) {
685 ld_qdi->last = ld_qdi->clock[adev->devno];
686 outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
687 2 * ap->port_no);
688 }
689 }
690 return ata_sff_qc_issue(qc);
691 }
692
693 static unsigned int vlb32_data_xfer(struct ata_queued_cmd *qc,
694 unsigned char *buf,
695 unsigned int buflen, int rw)
696 {
697 struct ata_device *adev = qc->dev;
698 struct ata_port *ap = adev->link->ap;
699 int slop = buflen & 3;
700
701 if (ata_id_has_dword_io(adev->id) && (slop == 0 || slop == 3)
702 && (ap->pflags & ATA_PFLAG_PIO32)) {
703 if (rw == WRITE)
704 iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
705 else
706 ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2);
707
708 if (unlikely(slop)) {
709 __le32 pad = 0;
710
711 if (rw == WRITE) {
712 memcpy(&pad, buf + buflen - slop, slop);
713 iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr);
714 } else {
715 pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr));
716 memcpy(buf + buflen - slop, &pad, slop);
717 }
718 }
719 return (buflen + 3) & ~3;
720 } else
721 return ata_sff_data_xfer(qc, buf, buflen, rw);
722 }
723
724 static int qdi_port(struct platform_device *dev,
725 struct legacy_probe *lp, struct legacy_data *ld)
726 {
727 if (devm_request_region(&dev->dev, lp->private, 4, "qdi") == NULL)
728 return -EBUSY;
729 ld->timing = lp->private;
730 return 0;
731 }
732
733 static struct ata_port_operations qdi6500_port_ops = {
734 .inherits = &legacy_base_port_ops,
735 .set_piomode = qdi65x0_set_piomode,
736 .qc_issue = qdi_qc_issue,
737 .sff_data_xfer = vlb32_data_xfer,
738 };
739
740 static struct ata_port_operations qdi6580_port_ops = {
741 .inherits = &legacy_base_port_ops,
742 .set_piomode = qdi65x0_set_piomode,
743 .sff_data_xfer = vlb32_data_xfer,
744 };
745
746 static struct ata_port_operations qdi6580dp_port_ops = {
747 .inherits = &legacy_base_port_ops,
748 .set_piomode = qdi65x0_set_piomode,
749 .qc_issue = qdi_qc_issue,
750 .sff_data_xfer = vlb32_data_xfer,
751 };
752
753 static DEFINE_SPINLOCK(winbond_lock);
754
755 static void winbond_writecfg(unsigned long port, u8 reg, u8 val)
756 {
757 unsigned long flags;
758 spin_lock_irqsave(&winbond_lock, flags);
759 outb(reg, port + 0x01);
760 outb(val, port + 0x02);
761 spin_unlock_irqrestore(&winbond_lock, flags);
762 }
763
764 static u8 winbond_readcfg(unsigned long port, u8 reg)
765 {
766 u8 val;
767
768 unsigned long flags;
769 spin_lock_irqsave(&winbond_lock, flags);
770 outb(reg, port + 0x01);
771 val = inb(port + 0x02);
772 spin_unlock_irqrestore(&winbond_lock, flags);
773
774 return val;
775 }
776
777 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
778 {
779 struct ata_timing t;
780 struct legacy_data *ld_winbond = ap->host->private_data;
781 int active, recovery;
782 u8 reg;
783 int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
784
785 reg = winbond_readcfg(ld_winbond->timing, 0x81);
786
787 /* Get the timing data in cycles */
788 if (reg & 0x40) /* Fast VLB bus, assume 50MHz */
789 ata_timing_compute(adev, adev->pio_mode, &t, 20000, 1000);
790 else
791 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
792
793 active = (clamp_val(t.active, 3, 17) - 1) & 0x0F;
794 recovery = (clamp_val(t.recover, 1, 15) + 1) & 0x0F;
795 timing = (active << 4) | recovery;
796 winbond_writecfg(ld_winbond->timing, timing, reg);
797
798 /* Load the setup timing */
799
800 reg = 0x35;
801 if (adev->class != ATA_DEV_ATA)
802 reg |= 0x08; /* FIFO off */
803 if (!ata_pio_need_iordy(adev))
804 reg |= 0x02; /* IORDY off */
805 reg |= (clamp_val(t.setup, 0, 3) << 6);
806 winbond_writecfg(ld_winbond->timing, timing + 1, reg);
807 }
808
809 static int winbond_port(struct platform_device *dev,
810 struct legacy_probe *lp, struct legacy_data *ld)
811 {
812 if (devm_request_region(&dev->dev, lp->private, 4, "winbond") == NULL)
813 return -EBUSY;
814 ld->timing = lp->private;
815 return 0;
816 }
817
818 static struct ata_port_operations winbond_port_ops = {
819 .inherits = &legacy_base_port_ops,
820 .set_piomode = winbond_set_piomode,
821 .sff_data_xfer = vlb32_data_xfer,
822 };
823
824 static struct legacy_controller controllers[] = {
825 {"BIOS", &legacy_port_ops, ATA_PIO4,
826 ATA_FLAG_NO_IORDY, 0, NULL },
827 {"Snooping", &simple_port_ops, ATA_PIO4,
828 0, 0, NULL },
829 {"PDC20230", &pdc20230_port_ops, ATA_PIO2,
830 ATA_FLAG_NO_IORDY,
831 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, NULL },
832 {"HT6560A", &ht6560a_port_ops, ATA_PIO2,
833 ATA_FLAG_NO_IORDY, 0, NULL },
834 {"HT6560B", &ht6560b_port_ops, ATA_PIO4,
835 ATA_FLAG_NO_IORDY, 0, NULL },
836 {"OPTI82C611A", &opti82c611a_port_ops, ATA_PIO3,
837 0, 0, NULL },
838 {"OPTI82C46X", &opti82c46x_port_ops, ATA_PIO3,
839 0, 0, NULL },
840 {"QDI6500", &qdi6500_port_ops, ATA_PIO2,
841 ATA_FLAG_NO_IORDY,
842 ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
843 {"QDI6580", &qdi6580_port_ops, ATA_PIO4,
844 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
845 {"QDI6580DP", &qdi6580dp_port_ops, ATA_PIO4,
846 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE, qdi_port },
847 {"W83759A", &winbond_port_ops, ATA_PIO4,
848 0, ATA_PFLAG_PIO32 | ATA_PFLAG_PIO32CHANGE,
849 winbond_port }
850 };
851
852 /**
853 * probe_chip_type - Discover controller
854 * @probe: Probe entry to check
855 *
856 * Probe an ATA port and identify the type of controller. We don't
857 * check if the controller appears to be driveless at this point.
858 */
859
860 static __init int probe_chip_type(struct legacy_probe *probe)
861 {
862 int mask = 1 << probe->slot;
863
864 if (winbond && (probe->port == 0x1F0 || probe->port == 0x170)) {
865 u8 reg = winbond_readcfg(winbond, 0x81);
866 reg |= 0x80; /* jumpered mode off */
867 winbond_writecfg(winbond, 0x81, reg);
868 reg = winbond_readcfg(winbond, 0x83);
869 reg |= 0xF0; /* local control */
870 winbond_writecfg(winbond, 0x83, reg);
871 reg = winbond_readcfg(winbond, 0x85);
872 reg |= 0xF0; /* programmable timing */
873 winbond_writecfg(winbond, 0x85, reg);
874
875 reg = winbond_readcfg(winbond, 0x81);
876
877 if (reg & mask)
878 return W83759A;
879 }
880 if (probe->port == 0x1F0) {
881 unsigned long flags;
882 local_irq_save(flags);
883 /* Probes */
884 outb(inb(0x1F2) | 0x80, 0x1F2);
885 inb(0x1F5);
886 inb(0x1F2);
887 inb(0x3F6);
888 inb(0x3F6);
889 inb(0x1F2);
890 inb(0x1F2);
891
892 if ((inb(0x1F2) & 0x80) == 0) {
893 /* PDC20230c or 20630 ? */
894 printk(KERN_INFO "PDC20230-C/20630 VLB ATA controller"
895 " detected.\n");
896 udelay(100);
897 inb(0x1F5);
898 local_irq_restore(flags);
899 return PDC20230;
900 } else {
901 outb(0x55, 0x1F2);
902 inb(0x1F2);
903 inb(0x1F2);
904 if (inb(0x1F2) == 0x00)
905 printk(KERN_INFO "PDC20230-B VLB ATA "
906 "controller detected.\n");
907 local_irq_restore(flags);
908 return BIOS;
909 }
910 }
911
912 if (ht6560a & mask)
913 return HT6560A;
914 if (ht6560b & mask)
915 return HT6560B;
916 if (opti82c611a & mask)
917 return OPTI611A;
918 if (opti82c46x & mask)
919 return OPTI46X;
920 if (autospeed & mask)
921 return SNOOP;
922 return BIOS;
923 }
924
925
926 /**
927 * legacy_init_one - attach a legacy interface
928 * @pl: probe record
929 *
930 * Register an ISA bus IDE interface. Such interfaces are PIO and we
931 * assume do not support IRQ sharing.
932 */
933
934 static __init int legacy_init_one(struct legacy_probe *probe)
935 {
936 struct legacy_controller *controller = &controllers[probe->type];
937 int pio_modes = controller->pio_mask;
938 unsigned long io = probe->port;
939 u32 mask = (1 << probe->slot);
940 struct ata_port_operations *ops = controller->ops;
941 struct legacy_data *ld = &legacy_data[probe->slot];
942 struct ata_host *host = NULL;
943 struct ata_port *ap;
944 struct platform_device *pdev;
945 struct ata_device *dev;
946 void __iomem *io_addr, *ctrl_addr;
947 u32 iordy = (iordy_mask & mask) ? 0: ATA_FLAG_NO_IORDY;
948 int ret;
949
950 iordy |= controller->flags;
951
952 pdev = platform_device_register_simple(DRV_NAME, probe->slot, NULL, 0);
953 if (IS_ERR(pdev))
954 return PTR_ERR(pdev);
955
956 ret = -EBUSY;
957 if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
958 devm_request_region(&pdev->dev, io + 0x0206, 1,
959 "pata_legacy") == NULL)
960 goto fail;
961
962 ret = -ENOMEM;
963 io_addr = devm_ioport_map(&pdev->dev, io, 8);
964 ctrl_addr = devm_ioport_map(&pdev->dev, io + 0x0206, 1);
965 if (!io_addr || !ctrl_addr)
966 goto fail;
967 ld->type = probe->type;
968 if (controller->setup)
969 if (controller->setup(pdev, probe, ld) < 0)
970 goto fail;
971 host = ata_host_alloc(&pdev->dev, 1);
972 if (!host)
973 goto fail;
974 ap = host->ports[0];
975
976 ap->ops = ops;
977 ap->pio_mask = pio_modes;
978 ap->flags |= ATA_FLAG_SLAVE_POSS | iordy;
979 ap->pflags |= controller->pflags;
980 ap->ioaddr.cmd_addr = io_addr;
981 ap->ioaddr.altstatus_addr = ctrl_addr;
982 ap->ioaddr.ctl_addr = ctrl_addr;
983 ata_sff_std_ports(&ap->ioaddr);
984 ap->host->private_data = ld;
985
986 ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
987
988 ret = ata_host_activate(host, probe->irq, ata_sff_interrupt, 0,
989 &legacy_sht);
990 if (ret)
991 goto fail;
992 async_synchronize_full();
993 ld->platform_dev = pdev;
994
995 /* Nothing found means we drop the port as its probably not there */
996
997 ret = -ENODEV;
998 ata_for_each_dev(dev, &ap->link, ALL) {
999 if (!ata_dev_absent(dev)) {
1000 legacy_host[probe->slot] = host;
1001 ld->platform_dev = pdev;
1002 return 0;
1003 }
1004 }
1005 ata_host_detach(host);
1006 fail:
1007 platform_device_unregister(pdev);
1008 return ret;
1009 }
1010
1011 /**
1012 * legacy_check_special_cases - ATA special cases
1013 * @p: PCI device to check
1014 * @master: set this if we find an ATA master
1015 * @master: set this if we find an ATA secondary
1016 *
1017 * A small number of vendors implemented early PCI ATA interfaces
1018 * on bridge logic without the ATA interface being PCI visible.
1019 * Where we have a matching PCI driver we must skip the relevant
1020 * device here. If we don't know about it then the legacy driver
1021 * is the right driver anyway.
1022 */
1023
1024 static void __init legacy_check_special_cases(struct pci_dev *p, int *primary,
1025 int *secondary)
1026 {
1027 /* Cyrix CS5510 pre SFF MWDMA ATA on the bridge */
1028 if (p->vendor == 0x1078 && p->device == 0x0000) {
1029 *primary = *secondary = 1;
1030 return;
1031 }
1032 /* Cyrix CS5520 pre SFF MWDMA ATA on the bridge */
1033 if (p->vendor == 0x1078 && p->device == 0x0002) {
1034 *primary = *secondary = 1;
1035 return;
1036 }
1037 /* Intel MPIIX - PIO ATA on non PCI side of bridge */
1038 if (p->vendor == 0x8086 && p->device == 0x1234) {
1039 u16 r;
1040 pci_read_config_word(p, 0x6C, &r);
1041 if (r & 0x8000) {
1042 /* ATA port enabled */
1043 if (r & 0x4000)
1044 *secondary = 1;
1045 else
1046 *primary = 1;
1047 }
1048 return;
1049 }
1050 }
1051
1052 static __init void probe_opti_vlb(void)
1053 {
1054 /* If an OPTI 82C46X is present find out where the channels are */
1055 static const char *optis[4] = {
1056 "3/463MV", "5MV",
1057 "5MVA", "5MVB"
1058 };
1059 u8 chans = 1;
1060 u8 ctrl = (opti_syscfg(0x30) & 0xC0) >> 6;
1061
1062 opti82c46x = 3; /* Assume master and slave first */
1063 printk(KERN_INFO DRV_NAME ": Opti 82C46%s chipset support.\n",
1064 optis[ctrl]);
1065 if (ctrl == 3)
1066 chans = (opti_syscfg(0x3F) & 0x20) ? 2 : 1;
1067 ctrl = opti_syscfg(0xAC);
1068 /* Check enabled and this port is the 465MV port. On the
1069 MVB we may have two channels */
1070 if (ctrl & 8) {
1071 if (chans == 2) {
1072 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1073 legacy_probe_add(0x170, 15, OPTI46X, 0);
1074 }
1075 if (ctrl & 4)
1076 legacy_probe_add(0x170, 15, OPTI46X, 0);
1077 else
1078 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1079 } else
1080 legacy_probe_add(0x1F0, 14, OPTI46X, 0);
1081 }
1082
1083 static __init void qdi65_identify_port(u8 r, u8 res, unsigned long port)
1084 {
1085 static const unsigned long ide_port[2] = { 0x170, 0x1F0 };
1086 /* Check card type */
1087 if ((r & 0xF0) == 0xC0) {
1088 /* QD6500: single channel */
1089 if (r & 8)
1090 /* Disabled ? */
1091 return;
1092 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1093 QDI6500, port);
1094 }
1095 if (((r & 0xF0) == 0xA0) || (r & 0xF0) == 0x50) {
1096 /* QD6580: dual channel */
1097 if (!request_region(port + 2 , 2, "pata_qdi")) {
1098 release_region(port, 2);
1099 return;
1100 }
1101 res = inb(port + 3);
1102 /* Single channel mode ? */
1103 if (res & 1)
1104 legacy_probe_add(ide_port[r & 0x01], 14 + (r & 0x01),
1105 QDI6580, port);
1106 else { /* Dual channel mode */
1107 legacy_probe_add(0x1F0, 14, QDI6580DP, port);
1108 /* port + 0x02, r & 0x04 */
1109 legacy_probe_add(0x170, 15, QDI6580DP, port + 2);
1110 }
1111 release_region(port + 2, 2);
1112 }
1113 }
1114
1115 static __init void probe_qdi_vlb(void)
1116 {
1117 unsigned long flags;
1118 static const unsigned long qd_port[2] = { 0x30, 0xB0 };
1119 int i;
1120
1121 /*
1122 * Check each possible QD65xx base address
1123 */
1124
1125 for (i = 0; i < 2; i++) {
1126 unsigned long port = qd_port[i];
1127 u8 r, res;
1128
1129
1130 if (request_region(port, 2, "pata_qdi")) {
1131 /* Check for a card */
1132 local_irq_save(flags);
1133 /* I have no h/w that needs this delay but it
1134 is present in the historic code */
1135 r = inb(port);
1136 udelay(1);
1137 outb(0x19, port);
1138 udelay(1);
1139 res = inb(port);
1140 udelay(1);
1141 outb(r, port);
1142 udelay(1);
1143 local_irq_restore(flags);
1144
1145 /* Fail */
1146 if (res == 0x19) {
1147 release_region(port, 2);
1148 continue;
1149 }
1150 /* Passes the presence test */
1151 r = inb(port + 1);
1152 udelay(1);
1153 /* Check port agrees with port set */
1154 if ((r & 2) >> 1 == i)
1155 qdi65_identify_port(r, res, port);
1156 release_region(port, 2);
1157 }
1158 }
1159 }
1160
1161 /**
1162 * legacy_init - attach legacy interfaces
1163 *
1164 * Attach legacy IDE interfaces by scanning the usual IRQ/port suspects.
1165 * Right now we do not scan the ide0 and ide1 address but should do so
1166 * for non PCI systems or systems with no PCI IDE legacy mode devices.
1167 * If you fix that note there are special cases to consider like VLB
1168 * drivers and CS5510/20.
1169 */
1170
1171 static __init int legacy_init(void)
1172 {
1173 int i;
1174 int ct = 0;
1175 int primary = 0;
1176 int secondary = 0;
1177 int pci_present = 0;
1178 struct legacy_probe *pl = &probe_list[0];
1179 int slot = 0;
1180
1181 struct pci_dev *p = NULL;
1182
1183 for_each_pci_dev(p) {
1184 int r;
1185 /* Check for any overlap of the system ATA mappings. Native
1186 mode controllers stuck on these addresses or some devices
1187 in 'raid' mode won't be found by the storage class test */
1188 for (r = 0; r < 6; r++) {
1189 if (pci_resource_start(p, r) == 0x1f0)
1190 primary = 1;
1191 if (pci_resource_start(p, r) == 0x170)
1192 secondary = 1;
1193 }
1194 /* Check for special cases */
1195 legacy_check_special_cases(p, &primary, &secondary);
1196
1197 /* If PCI bus is present then don't probe for tertiary
1198 legacy ports */
1199 pci_present = 1;
1200 }
1201
1202 if (winbond == 1)
1203 winbond = 0x130; /* Default port, alt is 1B0 */
1204
1205 if (primary == 0 || all)
1206 legacy_probe_add(0x1F0, 14, UNKNOWN, 0);
1207 if (secondary == 0 || all)
1208 legacy_probe_add(0x170, 15, UNKNOWN, 0);
1209
1210 if (probe_all || !pci_present) {
1211 /* ISA/VLB extra ports */
1212 legacy_probe_add(0x1E8, 11, UNKNOWN, 0);
1213 legacy_probe_add(0x168, 10, UNKNOWN, 0);
1214 legacy_probe_add(0x1E0, 8, UNKNOWN, 0);
1215 legacy_probe_add(0x160, 12, UNKNOWN, 0);
1216 }
1217
1218 if (opti82c46x)
1219 probe_opti_vlb();
1220 if (qdi)
1221 probe_qdi_vlb();
1222
1223 for (i = 0; i < NR_HOST; i++, pl++) {
1224 if (pl->port == 0)
1225 continue;
1226 if (pl->type == UNKNOWN)
1227 pl->type = probe_chip_type(pl);
1228 pl->slot = slot++;
1229 if (legacy_init_one(pl) == 0)
1230 ct++;
1231 }
1232 if (ct != 0)
1233 return 0;
1234 return -ENODEV;
1235 }
1236
1237 static __exit void legacy_exit(void)
1238 {
1239 int i;
1240
1241 for (i = 0; i < nr_legacy_host; i++) {
1242 struct legacy_data *ld = &legacy_data[i];
1243 ata_host_detach(legacy_host[i]);
1244 platform_device_unregister(ld->platform_dev);
1245 }
1246 }
1247
1248 MODULE_AUTHOR("Alan Cox");
1249 MODULE_DESCRIPTION("low-level driver for legacy ATA");
1250 MODULE_LICENSE("GPL");
1251 MODULE_VERSION(DRV_VERSION);
1252 MODULE_ALIAS("pata_qdi");
1253 MODULE_ALIAS("pata_winbond");
1254
1255 module_param(probe_all, int, 0);
1256 module_param(autospeed, int, 0);
1257 module_param(ht6560a, int, 0);
1258 module_param(ht6560b, int, 0);
1259 module_param(opti82c611a, int, 0);
1260 module_param(opti82c46x, int, 0);
1261 module_param(qdi, int, 0);
1262 module_param(winbond, int, 0);
1263 module_param(pio_mask, int, 0);
1264 module_param(iordy_mask, int, 0);
1265
1266 module_init(legacy_init);
1267 module_exit(legacy_exit);