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