Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.16-rc1 767 lines 22 kB view raw
1/* 2 * ata_piix.c - Intel PATA/SATA controllers 3 * 4 * Maintained by: Jeff Garzik <jgarzik@pobox.com> 5 * Please ALWAYS copy linux-ide@vger.kernel.org 6 * on emails. 7 * 8 * 9 * Copyright 2003-2005 Red Hat Inc 10 * Copyright 2003-2005 Jeff Garzik 11 * 12 * 13 * Copyright header from piix.c: 14 * 15 * Copyright (C) 1998-1999 Andrzej Krzysztofowicz, Author and Maintainer 16 * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org> 17 * Copyright (C) 2003 Red Hat Inc <alan@redhat.com> 18 * 19 * 20 * This program is free software; you can redistribute it and/or modify 21 * it under the terms of the GNU General Public License as published by 22 * the Free Software Foundation; either version 2, or (at your option) 23 * any later version. 24 * 25 * This program is distributed in the hope that it will be useful, 26 * but WITHOUT ANY WARRANTY; without even the implied warranty of 27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28 * GNU General Public License for more details. 29 * 30 * You should have received a copy of the GNU General Public License 31 * along with this program; see the file COPYING. If not, write to 32 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 33 * 34 * 35 * libata documentation is available via 'make {ps|pdf}docs', 36 * as Documentation/DocBook/libata.* 37 * 38 * Hardware documentation available at http://developer.intel.com/ 39 * 40 * Documentation 41 * Publically available from Intel web site. Errata documentation 42 * is also publically available. As an aide to anyone hacking on this 43 * driver the list of errata that are relevant is below.going back to 44 * PIIX4. Older device documentation is now a bit tricky to find. 45 * 46 * The chipsets all follow very much the same design. The orginal Triton 47 * series chipsets do _not_ support independant device timings, but this 48 * is fixed in Triton II. With the odd mobile exception the chips then 49 * change little except in gaining more modes until SATA arrives. This 50 * driver supports only the chips with independant timing (that is those 51 * with SITRE and the 0x44 timing register). See pata_oldpiix and pata_mpiix 52 * for the early chip drivers. 53 * 54 * Errata of note: 55 * 56 * Unfixable 57 * PIIX4 errata #9 - Only on ultra obscure hw 58 * ICH3 errata #13 - Not observed to affect real hw 59 * by Intel 60 * 61 * Things we must deal with 62 * PIIX4 errata #10 - BM IDE hang with non UDMA 63 * (must stop/start dma to recover) 64 * 440MX errata #15 - As PIIX4 errata #10 65 * PIIX4 errata #15 - Must not read control registers 66 * during a PIO transfer 67 * 440MX errata #13 - As PIIX4 errata #15 68 * ICH2 errata #21 - DMA mode 0 doesn't work right 69 * ICH0/1 errata #55 - As ICH2 errata #21 70 * ICH2 spec c #9 - Extra operations needed to handle 71 * drive hotswap [NOT YET SUPPORTED] 72 * ICH2 spec c #20 - IDE PRD must not cross a 64K boundary 73 * and must be dword aligned 74 * ICH2 spec c #24 - UDMA mode 4,5 t85/86 should be 6ns not 3.3 75 * 76 * Should have been BIOS fixed: 77 * 450NX: errata #19 - DMA hangs on old 450NX 78 * 450NX: errata #20 - DMA hangs on old 450NX 79 * 450NX: errata #25 - Corruption with DMA on old 450NX 80 * ICH3 errata #15 - IDE deadlock under high load 81 * (BIOS must set dev 31 fn 0 bit 23) 82 * ICH3 errata #18 - Don't use native mode 83 */ 84 85#include <linux/kernel.h> 86#include <linux/module.h> 87#include <linux/pci.h> 88#include <linux/init.h> 89#include <linux/blkdev.h> 90#include <linux/delay.h> 91#include <linux/device.h> 92#include <scsi/scsi_host.h> 93#include <linux/libata.h> 94 95#define DRV_NAME "ata_piix" 96#define DRV_VERSION "1.05" 97 98enum { 99 PIIX_IOCFG = 0x54, /* IDE I/O configuration register */ 100 ICH5_PMR = 0x90, /* port mapping register */ 101 ICH5_PCS = 0x92, /* port control and status */ 102 PIIX_SCC = 0x0A, /* sub-class code register */ 103 104 PIIX_FLAG_AHCI = (1 << 28), /* AHCI possible */ 105 PIIX_FLAG_CHECKINTR = (1 << 29), /* make sure PCI INTx enabled */ 106 PIIX_FLAG_COMBINED = (1 << 30), /* combined mode possible */ 107 108 /* combined mode. if set, PATA is channel 0. 109 * if clear, PATA is channel 1. 110 */ 111 PIIX_COMB_PATA_P0 = (1 << 1), 112 PIIX_COMB = (1 << 2), /* combined mode enabled? */ 113 114 PIIX_PORT_ENABLED = (1 << 0), 115 PIIX_PORT_PRESENT = (1 << 4), 116 117 PIIX_80C_PRI = (1 << 5) | (1 << 4), 118 PIIX_80C_SEC = (1 << 7) | (1 << 6), 119 120 ich5_pata = 0, 121 ich5_sata = 1, 122 piix4_pata = 2, 123 ich6_sata = 3, 124 ich6_sata_ahci = 4, 125 126 PIIX_AHCI_DEVICE = 6, 127}; 128 129static int piix_init_one (struct pci_dev *pdev, 130 const struct pci_device_id *ent); 131 132static void piix_pata_phy_reset(struct ata_port *ap); 133static void piix_sata_phy_reset(struct ata_port *ap); 134static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev); 135static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev); 136 137static unsigned int in_module_init = 1; 138 139static const struct pci_device_id piix_pci_tbl[] = { 140#ifdef ATA_ENABLE_PATA 141 { 0x8086, 0x7111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, piix4_pata }, 142 { 0x8086, 0x24db, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata }, 143 { 0x8086, 0x25a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_pata }, 144#endif 145 146 /* NOTE: The following PCI ids must be kept in sync with the 147 * list in drivers/pci/quirks.c. 148 */ 149 150 { 0x8086, 0x24d1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, 151 { 0x8086, 0x24df, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, 152 { 0x8086, 0x25a3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, 153 { 0x8086, 0x25b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, 154 { 0x8086, 0x2651, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata }, 155 { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 156 { 0x8086, 0x2653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 157 { 0x8086, 0x27c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 158 { 0x8086, 0x27c4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 159 { 0x8086, 0x2680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_ahci }, 160 161 { } /* terminate list */ 162}; 163 164static struct pci_driver piix_pci_driver = { 165 .name = DRV_NAME, 166 .id_table = piix_pci_tbl, 167 .probe = piix_init_one, 168 .remove = ata_pci_remove_one, 169 .suspend = ata_pci_device_suspend, 170 .resume = ata_pci_device_resume, 171}; 172 173static struct scsi_host_template piix_sht = { 174 .module = THIS_MODULE, 175 .name = DRV_NAME, 176 .ioctl = ata_scsi_ioctl, 177 .queuecommand = ata_scsi_queuecmd, 178 .eh_strategy_handler = ata_scsi_error, 179 .can_queue = ATA_DEF_QUEUE, 180 .this_id = ATA_SHT_THIS_ID, 181 .sg_tablesize = LIBATA_MAX_PRD, 182 .max_sectors = ATA_MAX_SECTORS, 183 .cmd_per_lun = ATA_SHT_CMD_PER_LUN, 184 .emulated = ATA_SHT_EMULATED, 185 .use_clustering = ATA_SHT_USE_CLUSTERING, 186 .proc_name = DRV_NAME, 187 .dma_boundary = ATA_DMA_BOUNDARY, 188 .slave_configure = ata_scsi_slave_config, 189 .bios_param = ata_std_bios_param, 190 .resume = ata_scsi_device_resume, 191 .suspend = ata_scsi_device_suspend, 192}; 193 194static const struct ata_port_operations piix_pata_ops = { 195 .port_disable = ata_port_disable, 196 .set_piomode = piix_set_piomode, 197 .set_dmamode = piix_set_dmamode, 198 199 .tf_load = ata_tf_load, 200 .tf_read = ata_tf_read, 201 .check_status = ata_check_status, 202 .exec_command = ata_exec_command, 203 .dev_select = ata_std_dev_select, 204 205 .phy_reset = piix_pata_phy_reset, 206 207 .bmdma_setup = ata_bmdma_setup, 208 .bmdma_start = ata_bmdma_start, 209 .bmdma_stop = ata_bmdma_stop, 210 .bmdma_status = ata_bmdma_status, 211 .qc_prep = ata_qc_prep, 212 .qc_issue = ata_qc_issue_prot, 213 214 .eng_timeout = ata_eng_timeout, 215 216 .irq_handler = ata_interrupt, 217 .irq_clear = ata_bmdma_irq_clear, 218 219 .port_start = ata_port_start, 220 .port_stop = ata_port_stop, 221 .host_stop = ata_host_stop, 222}; 223 224static const struct ata_port_operations piix_sata_ops = { 225 .port_disable = ata_port_disable, 226 227 .tf_load = ata_tf_load, 228 .tf_read = ata_tf_read, 229 .check_status = ata_check_status, 230 .exec_command = ata_exec_command, 231 .dev_select = ata_std_dev_select, 232 233 .phy_reset = piix_sata_phy_reset, 234 235 .bmdma_setup = ata_bmdma_setup, 236 .bmdma_start = ata_bmdma_start, 237 .bmdma_stop = ata_bmdma_stop, 238 .bmdma_status = ata_bmdma_status, 239 .qc_prep = ata_qc_prep, 240 .qc_issue = ata_qc_issue_prot, 241 242 .eng_timeout = ata_eng_timeout, 243 244 .irq_handler = ata_interrupt, 245 .irq_clear = ata_bmdma_irq_clear, 246 247 .port_start = ata_port_start, 248 .port_stop = ata_port_stop, 249 .host_stop = ata_host_stop, 250}; 251 252static struct ata_port_info piix_port_info[] = { 253 /* ich5_pata */ 254 { 255 .sht = &piix_sht, 256 .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST | 257 PIIX_FLAG_CHECKINTR, 258 .pio_mask = 0x1f, /* pio0-4 */ 259#if 0 260 .mwdma_mask = 0x06, /* mwdma1-2 */ 261#else 262 .mwdma_mask = 0x00, /* mwdma broken */ 263#endif 264 .udma_mask = 0x3f, /* udma0-5 */ 265 .port_ops = &piix_pata_ops, 266 }, 267 268 /* ich5_sata */ 269 { 270 .sht = &piix_sht, 271 .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST | 272 PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR, 273 .pio_mask = 0x1f, /* pio0-4 */ 274 .mwdma_mask = 0x07, /* mwdma0-2 */ 275 .udma_mask = 0x7f, /* udma0-6 */ 276 .port_ops = &piix_sata_ops, 277 }, 278 279 /* piix4_pata */ 280 { 281 .sht = &piix_sht, 282 .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST, 283 .pio_mask = 0x1f, /* pio0-4 */ 284#if 0 285 .mwdma_mask = 0x06, /* mwdma1-2 */ 286#else 287 .mwdma_mask = 0x00, /* mwdma broken */ 288#endif 289 .udma_mask = ATA_UDMA_MASK_40C, 290 .port_ops = &piix_pata_ops, 291 }, 292 293 /* ich6_sata */ 294 { 295 .sht = &piix_sht, 296 .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST | 297 PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR | 298 ATA_FLAG_SLAVE_POSS, 299 .pio_mask = 0x1f, /* pio0-4 */ 300 .mwdma_mask = 0x07, /* mwdma0-2 */ 301 .udma_mask = 0x7f, /* udma0-6 */ 302 .port_ops = &piix_sata_ops, 303 }, 304 305 /* ich6_sata_ahci */ 306 { 307 .sht = &piix_sht, 308 .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST | 309 PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR | 310 ATA_FLAG_SLAVE_POSS | PIIX_FLAG_AHCI, 311 .pio_mask = 0x1f, /* pio0-4 */ 312 .mwdma_mask = 0x07, /* mwdma0-2 */ 313 .udma_mask = 0x7f, /* udma0-6 */ 314 .port_ops = &piix_sata_ops, 315 }, 316}; 317 318static struct pci_bits piix_enable_bits[] = { 319 { 0x41U, 1U, 0x80UL, 0x80UL }, /* port 0 */ 320 { 0x43U, 1U, 0x80UL, 0x80UL }, /* port 1 */ 321}; 322 323MODULE_AUTHOR("Andre Hedrick, Alan Cox, Andrzej Krzysztofowicz, Jeff Garzik"); 324MODULE_DESCRIPTION("SCSI low-level driver for Intel PIIX/ICH ATA controllers"); 325MODULE_LICENSE("GPL"); 326MODULE_DEVICE_TABLE(pci, piix_pci_tbl); 327MODULE_VERSION(DRV_VERSION); 328 329/** 330 * piix_pata_cbl_detect - Probe host controller cable detect info 331 * @ap: Port for which cable detect info is desired 332 * 333 * Read 80c cable indicator from ATA PCI device's PCI config 334 * register. This register is normally set by firmware (BIOS). 335 * 336 * LOCKING: 337 * None (inherited from caller). 338 */ 339static void piix_pata_cbl_detect(struct ata_port *ap) 340{ 341 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev); 342 u8 tmp, mask; 343 344 /* no 80c support in host controller? */ 345 if ((ap->udma_mask & ~ATA_UDMA_MASK_40C) == 0) 346 goto cbl40; 347 348 /* check BIOS cable detect results */ 349 mask = ap->hard_port_no == 0 ? PIIX_80C_PRI : PIIX_80C_SEC; 350 pci_read_config_byte(pdev, PIIX_IOCFG, &tmp); 351 if ((tmp & mask) == 0) 352 goto cbl40; 353 354 ap->cbl = ATA_CBL_PATA80; 355 return; 356 357cbl40: 358 ap->cbl = ATA_CBL_PATA40; 359 ap->udma_mask &= ATA_UDMA_MASK_40C; 360} 361 362/** 363 * piix_pata_phy_reset - Probe specified port on PATA host controller 364 * @ap: Port to probe 365 * 366 * Probe PATA phy. 367 * 368 * LOCKING: 369 * None (inherited from caller). 370 */ 371 372static void piix_pata_phy_reset(struct ata_port *ap) 373{ 374 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev); 375 376 if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->hard_port_no])) { 377 ata_port_disable(ap); 378 printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id); 379 return; 380 } 381 382 piix_pata_cbl_detect(ap); 383 384 ata_port_probe(ap); 385 386 ata_bus_reset(ap); 387} 388 389/** 390 * piix_sata_probe - Probe PCI device for present SATA devices 391 * @ap: Port associated with the PCI device we wish to probe 392 * 393 * Reads SATA PCI device's PCI config register Port Configuration 394 * and Status (PCS) to determine port and device availability. 395 * 396 * LOCKING: 397 * None (inherited from caller). 398 * 399 * RETURNS: 400 * Non-zero if port is enabled, it may or may not have a device 401 * attached in that case (PRESENT bit would only be set if BIOS probe 402 * was done). Zero is returned if port is disabled. 403 */ 404static int piix_sata_probe (struct ata_port *ap) 405{ 406 struct pci_dev *pdev = to_pci_dev(ap->host_set->dev); 407 int combined = (ap->flags & ATA_FLAG_SLAVE_POSS); 408 int orig_mask, mask, i; 409 u8 pcs; 410 411 mask = (PIIX_PORT_PRESENT << ap->hard_port_no) | 412 (PIIX_PORT_ENABLED << ap->hard_port_no); 413 414 pci_read_config_byte(pdev, ICH5_PCS, &pcs); 415 orig_mask = (int) pcs & 0xff; 416 417 /* TODO: this is vaguely wrong for ICH6 combined mode, 418 * where only two of the four SATA ports are mapped 419 * onto a single ATA channel. It is also vaguely inaccurate 420 * for ICH5, which has only two ports. However, this is ok, 421 * as further device presence detection code will handle 422 * any false positives produced here. 423 */ 424 425 for (i = 0; i < 4; i++) { 426 mask = (PIIX_PORT_ENABLED << i); 427 428 if ((orig_mask & mask) == mask) 429 if (combined || (i == ap->hard_port_no)) 430 return 1; 431 } 432 433 return 0; 434} 435 436/** 437 * piix_sata_phy_reset - Probe specified port on SATA host controller 438 * @ap: Port to probe 439 * 440 * Probe SATA phy. 441 * 442 * LOCKING: 443 * None (inherited from caller). 444 */ 445 446static void piix_sata_phy_reset(struct ata_port *ap) 447{ 448 if (!piix_sata_probe(ap)) { 449 ata_port_disable(ap); 450 printk(KERN_INFO "ata%u: SATA port has no device.\n", ap->id); 451 return; 452 } 453 454 ap->cbl = ATA_CBL_SATA; 455 456 ata_port_probe(ap); 457 458 ata_bus_reset(ap); 459} 460 461/** 462 * piix_set_piomode - Initialize host controller PATA PIO timings 463 * @ap: Port whose timings we are configuring 464 * @adev: um 465 * 466 * Set PIO mode for device, in host controller PCI config space. 467 * 468 * LOCKING: 469 * None (inherited from caller). 470 */ 471 472static void piix_set_piomode (struct ata_port *ap, struct ata_device *adev) 473{ 474 unsigned int pio = adev->pio_mode - XFER_PIO_0; 475 struct pci_dev *dev = to_pci_dev(ap->host_set->dev); 476 unsigned int is_slave = (adev->devno != 0); 477 unsigned int master_port= ap->hard_port_no ? 0x42 : 0x40; 478 unsigned int slave_port = 0x44; 479 u16 master_data; 480 u8 slave_data; 481 482 static const /* ISP RTC */ 483 u8 timings[][2] = { { 0, 0 }, 484 { 0, 0 }, 485 { 1, 0 }, 486 { 2, 1 }, 487 { 2, 3 }, }; 488 489 pci_read_config_word(dev, master_port, &master_data); 490 if (is_slave) { 491 master_data |= 0x4000; 492 /* enable PPE, IE and TIME */ 493 master_data |= 0x0070; 494 pci_read_config_byte(dev, slave_port, &slave_data); 495 slave_data &= (ap->hard_port_no ? 0x0f : 0xf0); 496 slave_data |= 497 (timings[pio][0] << 2) | 498 (timings[pio][1] << (ap->hard_port_no ? 4 : 0)); 499 } else { 500 master_data &= 0xccf8; 501 /* enable PPE, IE and TIME */ 502 master_data |= 0x0007; 503 master_data |= 504 (timings[pio][0] << 12) | 505 (timings[pio][1] << 8); 506 } 507 pci_write_config_word(dev, master_port, master_data); 508 if (is_slave) 509 pci_write_config_byte(dev, slave_port, slave_data); 510} 511 512/** 513 * piix_set_dmamode - Initialize host controller PATA PIO timings 514 * @ap: Port whose timings we are configuring 515 * @adev: um 516 * @udma: udma mode, 0 - 6 517 * 518 * Set UDMA mode for device, in host controller PCI config space. 519 * 520 * LOCKING: 521 * None (inherited from caller). 522 */ 523 524static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev) 525{ 526 unsigned int udma = adev->dma_mode; /* FIXME: MWDMA too */ 527 struct pci_dev *dev = to_pci_dev(ap->host_set->dev); 528 u8 maslave = ap->hard_port_no ? 0x42 : 0x40; 529 u8 speed = udma; 530 unsigned int drive_dn = (ap->hard_port_no ? 2 : 0) + adev->devno; 531 int a_speed = 3 << (drive_dn * 4); 532 int u_flag = 1 << drive_dn; 533 int v_flag = 0x01 << drive_dn; 534 int w_flag = 0x10 << drive_dn; 535 int u_speed = 0; 536 int sitre; 537 u16 reg4042, reg4a; 538 u8 reg48, reg54, reg55; 539 540 pci_read_config_word(dev, maslave, &reg4042); 541 DPRINTK("reg4042 = 0x%04x\n", reg4042); 542 sitre = (reg4042 & 0x4000) ? 1 : 0; 543 pci_read_config_byte(dev, 0x48, &reg48); 544 pci_read_config_word(dev, 0x4a, &reg4a); 545 pci_read_config_byte(dev, 0x54, &reg54); 546 pci_read_config_byte(dev, 0x55, &reg55); 547 548 switch(speed) { 549 case XFER_UDMA_4: 550 case XFER_UDMA_2: u_speed = 2 << (drive_dn * 4); break; 551 case XFER_UDMA_6: 552 case XFER_UDMA_5: 553 case XFER_UDMA_3: 554 case XFER_UDMA_1: u_speed = 1 << (drive_dn * 4); break; 555 case XFER_UDMA_0: u_speed = 0 << (drive_dn * 4); break; 556 case XFER_MW_DMA_2: 557 case XFER_MW_DMA_1: break; 558 default: 559 BUG(); 560 return; 561 } 562 563 if (speed >= XFER_UDMA_0) { 564 if (!(reg48 & u_flag)) 565 pci_write_config_byte(dev, 0x48, reg48 | u_flag); 566 if (speed == XFER_UDMA_5) { 567 pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag); 568 } else { 569 pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); 570 } 571 if ((reg4a & a_speed) != u_speed) 572 pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed); 573 if (speed > XFER_UDMA_2) { 574 if (!(reg54 & v_flag)) 575 pci_write_config_byte(dev, 0x54, reg54 | v_flag); 576 } else 577 pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); 578 } else { 579 if (reg48 & u_flag) 580 pci_write_config_byte(dev, 0x48, reg48 & ~u_flag); 581 if (reg4a & a_speed) 582 pci_write_config_word(dev, 0x4a, reg4a & ~a_speed); 583 if (reg54 & v_flag) 584 pci_write_config_byte(dev, 0x54, reg54 & ~v_flag); 585 if (reg55 & w_flag) 586 pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); 587 } 588} 589 590#define AHCI_PCI_BAR 5 591#define AHCI_GLOBAL_CTL 0x04 592#define AHCI_ENABLE (1 << 31) 593static int piix_disable_ahci(struct pci_dev *pdev) 594{ 595 void __iomem *mmio; 596 u32 tmp; 597 int rc = 0; 598 599 /* BUG: pci_enable_device has not yet been called. This 600 * works because this device is usually set up by BIOS. 601 */ 602 603 if (!pci_resource_start(pdev, AHCI_PCI_BAR) || 604 !pci_resource_len(pdev, AHCI_PCI_BAR)) 605 return 0; 606 607 mmio = pci_iomap(pdev, AHCI_PCI_BAR, 64); 608 if (!mmio) 609 return -ENOMEM; 610 611 tmp = readl(mmio + AHCI_GLOBAL_CTL); 612 if (tmp & AHCI_ENABLE) { 613 tmp &= ~AHCI_ENABLE; 614 writel(tmp, mmio + AHCI_GLOBAL_CTL); 615 616 tmp = readl(mmio + AHCI_GLOBAL_CTL); 617 if (tmp & AHCI_ENABLE) 618 rc = -EIO; 619 } 620 621 pci_iounmap(pdev, mmio); 622 return rc; 623} 624 625/** 626 * piix_check_450nx_errata - Check for problem 450NX setup 627 * 628 * Check for the present of 450NX errata #19 and errata #25. If 629 * they are found return an error code so we can turn off DMA 630 */ 631 632static int __devinit piix_check_450nx_errata(struct pci_dev *ata_dev) 633{ 634 struct pci_dev *pdev = NULL; 635 u16 cfg; 636 u8 rev; 637 int no_piix_dma = 0; 638 639 while((pdev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, pdev)) != NULL) 640 { 641 /* Look for 450NX PXB. Check for problem configurations 642 A PCI quirk checks bit 6 already */ 643 pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); 644 pci_read_config_word(pdev, 0x41, &cfg); 645 /* Only on the original revision: IDE DMA can hang */ 646 if(rev == 0x00) 647 no_piix_dma = 1; 648 /* On all revisions below 5 PXB bus lock must be disabled for IDE */ 649 else if(cfg & (1<<14) && rev < 5) 650 no_piix_dma = 2; 651 } 652 if(no_piix_dma) 653 dev_printk(KERN_WARNING, &ata_dev->dev, "450NX errata present, disabling IDE DMA.\n"); 654 if(no_piix_dma == 2) 655 dev_printk(KERN_WARNING, &ata_dev->dev, "A BIOS update may resolve this.\n"); 656 return no_piix_dma; 657} 658 659/** 660 * piix_init_one - Register PIIX ATA PCI device with kernel services 661 * @pdev: PCI device to register 662 * @ent: Entry in piix_pci_tbl matching with @pdev 663 * 664 * Called from kernel PCI layer. We probe for combined mode (sigh), 665 * and then hand over control to libata, for it to do the rest. 666 * 667 * LOCKING: 668 * Inherited from PCI layer (may sleep). 669 * 670 * RETURNS: 671 * Zero on success, or -ERRNO value. 672 */ 673 674static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 675{ 676 static int printed_version; 677 struct ata_port_info *port_info[2]; 678 unsigned int combined = 0; 679 unsigned int pata_chan = 0, sata_chan = 0; 680 681 if (!printed_version++) 682 dev_printk(KERN_DEBUG, &pdev->dev, 683 "version " DRV_VERSION "\n"); 684 685 /* no hotplugging support (FIXME) */ 686 if (!in_module_init) 687 return -ENODEV; 688 689 port_info[0] = &piix_port_info[ent->driver_data]; 690 port_info[1] = &piix_port_info[ent->driver_data]; 691 692 if (port_info[0]->host_flags & PIIX_FLAG_AHCI) { 693 u8 tmp; 694 pci_read_config_byte(pdev, PIIX_SCC, &tmp); 695 if (tmp == PIIX_AHCI_DEVICE) { 696 int rc = piix_disable_ahci(pdev); 697 if (rc) 698 return rc; 699 } 700 } 701 702 if (port_info[0]->host_flags & PIIX_FLAG_COMBINED) { 703 u8 tmp; 704 pci_read_config_byte(pdev, ICH5_PMR, &tmp); 705 706 if (tmp & PIIX_COMB) { 707 combined = 1; 708 if (tmp & PIIX_COMB_PATA_P0) 709 sata_chan = 1; 710 else 711 pata_chan = 1; 712 } 713 } 714 715 /* On ICH5, some BIOSen disable the interrupt using the 716 * PCI_COMMAND_INTX_DISABLE bit added in PCI 2.3. 717 * On ICH6, this bit has the same effect, but only when 718 * MSI is disabled (and it is disabled, as we don't use 719 * message-signalled interrupts currently). 720 */ 721 if (port_info[0]->host_flags & PIIX_FLAG_CHECKINTR) 722 pci_intx(pdev, 1); 723 724 if (combined) { 725 port_info[sata_chan] = &piix_port_info[ent->driver_data]; 726 port_info[sata_chan]->host_flags |= ATA_FLAG_SLAVE_POSS; 727 port_info[pata_chan] = &piix_port_info[ich5_pata]; 728 729 dev_printk(KERN_WARNING, &pdev->dev, 730 "combined mode detected (p=%u, s=%u)\n", 731 pata_chan, sata_chan); 732 } 733 if (piix_check_450nx_errata(pdev)) { 734 /* This writes into the master table but it does not 735 really matter for this errata as we will apply it to 736 all the PIIX devices on the board */ 737 port_info[0]->mwdma_mask = 0; 738 port_info[0]->udma_mask = 0; 739 port_info[1]->mwdma_mask = 0; 740 port_info[1]->udma_mask = 0; 741 } 742 return ata_pci_init_one(pdev, port_info, 2); 743} 744 745static int __init piix_init(void) 746{ 747 int rc; 748 749 DPRINTK("pci_module_init\n"); 750 rc = pci_module_init(&piix_pci_driver); 751 if (rc) 752 return rc; 753 754 in_module_init = 0; 755 756 DPRINTK("done\n"); 757 return 0; 758} 759 760static void __exit piix_exit(void) 761{ 762 pci_unregister_driver(&piix_pci_driver); 763} 764 765module_init(piix_init); 766module_exit(piix_exit); 767