1 /* 2 * linux/arch/arm/kernel/bios32.c 3 * 4 * PCI bios-type initialisation for PCI machines 5 * 6 * Bits taken from various places. 7 */ 8 #include <linux/export.h> 9 #include <linux/kernel.h> 10 #include <linux/pci.h> 11 #include <linux/slab.h> 12 #include <linux/init.h> 13 #include <linux/io.h> 14 15 #include <asm/mach-types.h> 16 #include <asm/mach/map.h> 17 #include <asm/mach/pci.h> 18 19 static int debug_pci; 20 21 #ifdef CONFIG_PCI_MSI 22 struct msi_controller *pcibios_msi_controller(struct pci_dev *dev) 23 { 24 struct pci_sys_data *sysdata = dev->bus->sysdata; 25 26 return sysdata->msi_ctrl; 27 } 28 #endif 29 30 /* 31 * We can't use pci_get_device() here since we are 32 * called from interrupt context. 33 */ 34 static void pcibios_bus_report_status(struct pci_bus *bus, u_int status_mask, int warn) 35 { 36 struct pci_dev *dev; 37 38 list_for_each_entry(dev, &bus->devices, bus_list) { 39 u16 status; 40 41 /* 42 * ignore host bridge - we handle 43 * that separately 44 */ 45 if (dev->bus->number == 0 && dev->devfn == 0) 46 continue; 47 48 pci_read_config_word(dev, PCI_STATUS, &status); 49 if (status == 0xffff) 50 continue; 51 52 if ((status & status_mask) == 0) 53 continue; 54 55 /* clear the status errors */ 56 pci_write_config_word(dev, PCI_STATUS, status & status_mask); 57 58 if (warn) 59 printk("(%s: %04X) ", pci_name(dev), status); 60 } 61 62 list_for_each_entry(dev, &bus->devices, bus_list) 63 if (dev->subordinate) 64 pcibios_bus_report_status(dev->subordinate, status_mask, warn); 65 } 66 67 void pcibios_report_status(u_int status_mask, int warn) 68 { 69 struct pci_bus *bus; 70 71 list_for_each_entry(bus, &pci_root_buses, node) 72 pcibios_bus_report_status(bus, status_mask, warn); 73 } 74 75 /* 76 * We don't use this to fix the device, but initialisation of it. 77 * It's not the correct use for this, but it works. 78 * Note that the arbiter/ISA bridge appears to be buggy, specifically in 79 * the following area: 80 * 1. park on CPU 81 * 2. ISA bridge ping-pong 82 * 3. ISA bridge master handling of target RETRY 83 * 84 * Bug 3 is responsible for the sound DMA grinding to a halt. We now 85 * live with bug 2. 86 */ 87 static void pci_fixup_83c553(struct pci_dev *dev) 88 { 89 /* 90 * Set memory region to start at address 0, and enable IO 91 */ 92 pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_SPACE_MEMORY); 93 pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_IO); 94 95 dev->resource[0].end -= dev->resource[0].start; 96 dev->resource[0].start = 0; 97 98 /* 99 * All memory requests from ISA to be channelled to PCI 100 */ 101 pci_write_config_byte(dev, 0x48, 0xff); 102 103 /* 104 * Enable ping-pong on bus master to ISA bridge transactions. 105 * This improves the sound DMA substantially. The fixed 106 * priority arbiter also helps (see below). 107 */ 108 pci_write_config_byte(dev, 0x42, 0x01); 109 110 /* 111 * Enable PCI retry 112 */ 113 pci_write_config_byte(dev, 0x40, 0x22); 114 115 /* 116 * We used to set the arbiter to "park on last master" (bit 117 * 1 set), but unfortunately the CyberPro does not park the 118 * bus. We must therefore park on CPU. Unfortunately, this 119 * may trigger yet another bug in the 553. 120 */ 121 pci_write_config_byte(dev, 0x83, 0x02); 122 123 /* 124 * Make the ISA DMA request lowest priority, and disable 125 * rotating priorities completely. 126 */ 127 pci_write_config_byte(dev, 0x80, 0x11); 128 pci_write_config_byte(dev, 0x81, 0x00); 129 130 /* 131 * Route INTA input to IRQ 11, and set IRQ11 to be level 132 * sensitive. 133 */ 134 pci_write_config_word(dev, 0x44, 0xb000); 135 outb(0x08, 0x4d1); 136 } 137 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_83C553, pci_fixup_83c553); 138 139 static void pci_fixup_unassign(struct pci_dev *dev) 140 { 141 dev->resource[0].end -= dev->resource[0].start; 142 dev->resource[0].start = 0; 143 } 144 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C940F, pci_fixup_unassign); 145 146 /* 147 * Prevent the PCI layer from seeing the resources allocated to this device 148 * if it is the host bridge by marking it as such. These resources are of 149 * no consequence to the PCI layer (they are handled elsewhere). 150 */ 151 static void pci_fixup_dec21285(struct pci_dev *dev) 152 { 153 int i; 154 155 if (dev->devfn == 0) { 156 dev->class &= 0xff; 157 dev->class |= PCI_CLASS_BRIDGE_HOST << 8; 158 for (i = 0; i < PCI_NUM_RESOURCES; i++) { 159 dev->resource[i].start = 0; 160 dev->resource[i].end = 0; 161 dev->resource[i].flags = 0; 162 } 163 } 164 } 165 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21285, pci_fixup_dec21285); 166 167 /* 168 * PCI IDE controllers use non-standard I/O port decoding, respect it. 169 */ 170 static void pci_fixup_ide_bases(struct pci_dev *dev) 171 { 172 struct resource *r; 173 int i; 174 175 if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE) 176 return; 177 178 for (i = 0; i < PCI_NUM_RESOURCES; i++) { 179 r = dev->resource + i; 180 if ((r->start & ~0x80) == 0x374) { 181 r->start |= 2; 182 r->end = r->start; 183 } 184 } 185 } 186 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases); 187 188 /* 189 * Put the DEC21142 to sleep 190 */ 191 static void pci_fixup_dec21142(struct pci_dev *dev) 192 { 193 pci_write_config_dword(dev, 0x40, 0x80000000); 194 } 195 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, pci_fixup_dec21142); 196 197 /* 198 * The CY82C693 needs some rather major fixups to ensure that it does 199 * the right thing. Idea from the Alpha people, with a few additions. 200 * 201 * We ensure that the IDE base registers are set to 1f0/3f4 for the 202 * primary bus, and 170/374 for the secondary bus. Also, hide them 203 * from the PCI subsystem view as well so we won't try to perform 204 * our own auto-configuration on them. 205 * 206 * In addition, we ensure that the PCI IDE interrupts are routed to 207 * IRQ 14 and IRQ 15 respectively. 208 * 209 * The above gets us to a point where the IDE on this device is 210 * functional. However, The CY82C693U _does not work_ in bus 211 * master mode without locking the PCI bus solid. 212 */ 213 static void pci_fixup_cy82c693(struct pci_dev *dev) 214 { 215 if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE) { 216 u32 base0, base1; 217 218 if (dev->class & 0x80) { /* primary */ 219 base0 = 0x1f0; 220 base1 = 0x3f4; 221 } else { /* secondary */ 222 base0 = 0x170; 223 base1 = 0x374; 224 } 225 226 pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 227 base0 | PCI_BASE_ADDRESS_SPACE_IO); 228 pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, 229 base1 | PCI_BASE_ADDRESS_SPACE_IO); 230 231 dev->resource[0].start = 0; 232 dev->resource[0].end = 0; 233 dev->resource[0].flags = 0; 234 235 dev->resource[1].start = 0; 236 dev->resource[1].end = 0; 237 dev->resource[1].flags = 0; 238 } else if (PCI_FUNC(dev->devfn) == 0) { 239 /* 240 * Setup IDE IRQ routing. 241 */ 242 pci_write_config_byte(dev, 0x4b, 14); 243 pci_write_config_byte(dev, 0x4c, 15); 244 245 /* 246 * Disable FREQACK handshake, enable USB. 247 */ 248 pci_write_config_byte(dev, 0x4d, 0x41); 249 250 /* 251 * Enable PCI retry, and PCI post-write buffer. 252 */ 253 pci_write_config_byte(dev, 0x44, 0x17); 254 255 /* 256 * Enable ISA master and DMA post write buffering. 257 */ 258 pci_write_config_byte(dev, 0x45, 0x03); 259 } 260 } 261 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693, pci_fixup_cy82c693); 262 263 static void pci_fixup_it8152(struct pci_dev *dev) 264 { 265 int i; 266 /* fixup for ITE 8152 devices */ 267 /* FIXME: add defines for class 0x68000 and 0x80103 */ 268 if ((dev->class >> 8) == PCI_CLASS_BRIDGE_HOST || 269 dev->class == 0x68000 || 270 dev->class == 0x80103) { 271 for (i = 0; i < PCI_NUM_RESOURCES; i++) { 272 dev->resource[i].start = 0; 273 dev->resource[i].end = 0; 274 dev->resource[i].flags = 0; 275 } 276 } 277 } 278 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8152, pci_fixup_it8152); 279 280 /* 281 * If the bus contains any of these devices, then we must not turn on 282 * parity checking of any kind. Currently this is CyberPro 20x0 only. 283 */ 284 static inline int pdev_bad_for_parity(struct pci_dev *dev) 285 { 286 return ((dev->vendor == PCI_VENDOR_ID_INTERG && 287 (dev->device == PCI_DEVICE_ID_INTERG_2000 || 288 dev->device == PCI_DEVICE_ID_INTERG_2010)) || 289 (dev->vendor == PCI_VENDOR_ID_ITE && 290 dev->device == PCI_DEVICE_ID_ITE_8152)); 291 292 } 293 294 /* 295 * pcibios_fixup_bus - Called after each bus is probed, 296 * but before its children are examined. 297 */ 298 void pcibios_fixup_bus(struct pci_bus *bus) 299 { 300 struct pci_dev *dev; 301 u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK; 302 303 /* 304 * Walk the devices on this bus, working out what we can 305 * and can't support. 306 */ 307 list_for_each_entry(dev, &bus->devices, bus_list) { 308 u16 status; 309 310 pci_read_config_word(dev, PCI_STATUS, &status); 311 312 /* 313 * If any device on this bus does not support fast back 314 * to back transfers, then the bus as a whole is not able 315 * to support them. Having fast back to back transfers 316 * on saves us one PCI cycle per transaction. 317 */ 318 if (!(status & PCI_STATUS_FAST_BACK)) 319 features &= ~PCI_COMMAND_FAST_BACK; 320 321 if (pdev_bad_for_parity(dev)) 322 features &= ~(PCI_COMMAND_SERR | PCI_COMMAND_PARITY); 323 324 switch (dev->class >> 8) { 325 case PCI_CLASS_BRIDGE_PCI: 326 pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &status); 327 status |= PCI_BRIDGE_CTL_PARITY|PCI_BRIDGE_CTL_MASTER_ABORT; 328 status &= ~(PCI_BRIDGE_CTL_BUS_RESET|PCI_BRIDGE_CTL_FAST_BACK); 329 pci_write_config_word(dev, PCI_BRIDGE_CONTROL, status); 330 break; 331 332 case PCI_CLASS_BRIDGE_CARDBUS: 333 pci_read_config_word(dev, PCI_CB_BRIDGE_CONTROL, &status); 334 status |= PCI_CB_BRIDGE_CTL_PARITY|PCI_CB_BRIDGE_CTL_MASTER_ABORT; 335 pci_write_config_word(dev, PCI_CB_BRIDGE_CONTROL, status); 336 break; 337 } 338 } 339 340 /* 341 * Now walk the devices again, this time setting them up. 342 */ 343 list_for_each_entry(dev, &bus->devices, bus_list) { 344 u16 cmd; 345 346 pci_read_config_word(dev, PCI_COMMAND, &cmd); 347 cmd |= features; 348 pci_write_config_word(dev, PCI_COMMAND, cmd); 349 350 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 351 L1_CACHE_BYTES >> 2); 352 } 353 354 /* 355 * Propagate the flags to the PCI bridge. 356 */ 357 if (bus->self && bus->self->hdr_type == PCI_HEADER_TYPE_BRIDGE) { 358 if (features & PCI_COMMAND_FAST_BACK) 359 bus->bridge_ctl |= PCI_BRIDGE_CTL_FAST_BACK; 360 if (features & PCI_COMMAND_PARITY) 361 bus->bridge_ctl |= PCI_BRIDGE_CTL_PARITY; 362 } 363 364 /* 365 * Report what we did for this bus 366 */ 367 printk(KERN_INFO "PCI: bus%d: Fast back to back transfers %sabled\n", 368 bus->number, (features & PCI_COMMAND_FAST_BACK) ? "en" : "dis"); 369 } 370 EXPORT_SYMBOL(pcibios_fixup_bus); 371 372 void pcibios_add_bus(struct pci_bus *bus) 373 { 374 struct pci_sys_data *sys = bus->sysdata; 375 if (sys->add_bus) 376 sys->add_bus(bus); 377 } 378 379 void pcibios_remove_bus(struct pci_bus *bus) 380 { 381 struct pci_sys_data *sys = bus->sysdata; 382 if (sys->remove_bus) 383 sys->remove_bus(bus); 384 } 385 386 /* 387 * Swizzle the device pin each time we cross a bridge. If a platform does 388 * not provide a swizzle function, we perform the standard PCI swizzling. 389 * 390 * The default swizzling walks up the bus tree one level at a time, applying 391 * the standard swizzle function at each step, stopping when it finds the PCI 392 * root bus. This will return the slot number of the bridge device on the 393 * root bus and the interrupt pin on that device which should correspond 394 * with the downstream device interrupt. 395 * 396 * Platforms may override this, in which case the slot and pin returned 397 * depend entirely on the platform code. However, please note that the 398 * PCI standard swizzle is implemented on plug-in cards and Cardbus based 399 * PCI extenders, so it can not be ignored. 400 */ 401 static u8 pcibios_swizzle(struct pci_dev *dev, u8 *pin) 402 { 403 struct pci_sys_data *sys = dev->sysdata; 404 int slot, oldpin = *pin; 405 406 if (sys->swizzle) 407 slot = sys->swizzle(dev, pin); 408 else 409 slot = pci_common_swizzle(dev, pin); 410 411 if (debug_pci) 412 printk("PCI: %s swizzling pin %d => pin %d slot %d\n", 413 pci_name(dev), oldpin, *pin, slot); 414 415 return slot; 416 } 417 418 /* 419 * Map a slot/pin to an IRQ. 420 */ 421 static int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 422 { 423 struct pci_sys_data *sys = dev->sysdata; 424 int irq = -1; 425 426 if (sys->map_irq) 427 irq = sys->map_irq(dev, slot, pin); 428 429 if (debug_pci) 430 printk("PCI: %s mapping slot %d pin %d => irq %d\n", 431 pci_name(dev), slot, pin, irq); 432 433 return irq; 434 } 435 436 static int pcibios_init_resources(int busnr, struct pci_sys_data *sys) 437 { 438 int ret; 439 struct pci_host_bridge_window *window; 440 441 if (list_empty(&sys->resources)) { 442 pci_add_resource_offset(&sys->resources, 443 &iomem_resource, sys->mem_offset); 444 } 445 446 list_for_each_entry(window, &sys->resources, list) { 447 if (resource_type(window->res) == IORESOURCE_IO) 448 return 0; 449 } 450 451 sys->io_res.start = (busnr * SZ_64K) ? : pcibios_min_io; 452 sys->io_res.end = (busnr + 1) * SZ_64K - 1; 453 sys->io_res.flags = IORESOURCE_IO; 454 sys->io_res.name = sys->io_res_name; 455 sprintf(sys->io_res_name, "PCI%d I/O", busnr); 456 457 ret = request_resource(&ioport_resource, &sys->io_res); 458 if (ret) { 459 pr_err("PCI: unable to allocate I/O port region (%d)\n", ret); 460 return ret; 461 } 462 pci_add_resource_offset(&sys->resources, &sys->io_res, 463 sys->io_offset); 464 465 return 0; 466 } 467 468 static void pcibios_init_hw(struct device *parent, struct hw_pci *hw, 469 struct list_head *head) 470 { 471 struct pci_sys_data *sys = NULL; 472 int ret; 473 int nr, busnr; 474 475 for (nr = busnr = 0; nr < hw->nr_controllers; nr++) { 476 sys = kzalloc(sizeof(struct pci_sys_data), GFP_KERNEL); 477 if (!sys) 478 panic("PCI: unable to allocate sys data!"); 479 480 #ifdef CONFIG_PCI_DOMAINS 481 sys->domain = hw->domain; 482 #endif 483 #ifdef CONFIG_PCI_MSI 484 sys->msi_ctrl = hw->msi_ctrl; 485 #endif 486 sys->busnr = busnr; 487 sys->swizzle = hw->swizzle; 488 sys->map_irq = hw->map_irq; 489 sys->align_resource = hw->align_resource; 490 sys->add_bus = hw->add_bus; 491 sys->remove_bus = hw->remove_bus; 492 INIT_LIST_HEAD(&sys->resources); 493 494 if (hw->private_data) 495 sys->private_data = hw->private_data[nr]; 496 497 ret = hw->setup(nr, sys); 498 499 if (ret > 0) { 500 ret = pcibios_init_resources(nr, sys); 501 if (ret) { 502 kfree(sys); 503 break; 504 } 505 506 if (hw->scan) 507 sys->bus = hw->scan(nr, sys); 508 else 509 sys->bus = pci_scan_root_bus(parent, sys->busnr, 510 hw->ops, sys, &sys->resources); 511 512 if (!sys->bus) 513 panic("PCI: unable to scan bus!"); 514 515 busnr = sys->bus->busn_res.end + 1; 516 517 list_add(&sys->node, head); 518 } else { 519 kfree(sys); 520 if (ret < 0) 521 break; 522 } 523 } 524 } 525 526 void pci_common_init_dev(struct device *parent, struct hw_pci *hw) 527 { 528 struct pci_sys_data *sys; 529 LIST_HEAD(head); 530 531 pci_add_flags(PCI_REASSIGN_ALL_RSRC); 532 if (hw->preinit) 533 hw->preinit(); 534 pcibios_init_hw(parent, hw, &head); 535 if (hw->postinit) 536 hw->postinit(); 537 538 pci_fixup_irqs(pcibios_swizzle, pcibios_map_irq); 539 540 list_for_each_entry(sys, &head, node) { 541 struct pci_bus *bus = sys->bus; 542 543 if (!pci_has_flag(PCI_PROBE_ONLY)) { 544 /* 545 * Size the bridge windows. 546 */ 547 pci_bus_size_bridges(bus); 548 549 /* 550 * Assign resources. 551 */ 552 pci_bus_assign_resources(bus); 553 } 554 555 /* 556 * Tell drivers about devices found. 557 */ 558 pci_bus_add_devices(bus); 559 } 560 561 list_for_each_entry(sys, &head, node) { 562 struct pci_bus *bus = sys->bus; 563 564 /* Configure PCI Express settings */ 565 if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { 566 struct pci_bus *child; 567 568 list_for_each_entry(child, &bus->children, node) 569 pcie_bus_configure_settings(child); 570 } 571 } 572 } 573 574 #ifndef CONFIG_PCI_HOST_ITE8152 575 void pcibios_set_master(struct pci_dev *dev) 576 { 577 /* No special bus mastering setup handling */ 578 } 579 #endif 580 581 char * __init pcibios_setup(char *str) 582 { 583 if (!strcmp(str, "debug")) { 584 debug_pci = 1; 585 return NULL; 586 } else if (!strcmp(str, "firmware")) { 587 pci_add_flags(PCI_PROBE_ONLY); 588 return NULL; 589 } 590 return str; 591 } 592 593 /* 594 * From arch/i386/kernel/pci-i386.c: 595 * 596 * We need to avoid collisions with `mirrored' VGA ports 597 * and other strange ISA hardware, so we always want the 598 * addresses to be allocated in the 0x000-0x0ff region 599 * modulo 0x400. 600 * 601 * Why? Because some silly external IO cards only decode 602 * the low 10 bits of the IO address. The 0x00-0xff region 603 * is reserved for motherboard devices that decode all 16 604 * bits, so it's ok to allocate at, say, 0x2800-0x28ff, 605 * but we want to try to avoid allocating at 0x2900-0x2bff 606 * which might be mirrored at 0x0100-0x03ff.. 607 */ 608 resource_size_t pcibios_align_resource(void *data, const struct resource *res, 609 resource_size_t size, resource_size_t align) 610 { 611 struct pci_dev *dev = data; 612 struct pci_sys_data *sys = dev->sysdata; 613 resource_size_t start = res->start; 614 615 if (res->flags & IORESOURCE_IO && start & 0x300) 616 start = (start + 0x3ff) & ~0x3ff; 617 618 start = (start + align - 1) & ~(align - 1); 619 620 if (sys->align_resource) 621 return sys->align_resource(dev, res, start, size, align); 622 623 return start; 624 } 625 626 /** 627 * pcibios_enable_device - Enable I/O and memory. 628 * @dev: PCI device to be enabled 629 */ 630 int pcibios_enable_device(struct pci_dev *dev, int mask) 631 { 632 if (pci_has_flag(PCI_PROBE_ONLY)) 633 return 0; 634 635 return pci_enable_resources(dev, mask); 636 } 637 638 int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, 639 enum pci_mmap_state mmap_state, int write_combine) 640 { 641 struct pci_sys_data *root = dev->sysdata; 642 unsigned long phys; 643 644 if (mmap_state == pci_mmap_io) { 645 return -EINVAL; 646 } else { 647 phys = vma->vm_pgoff + (root->mem_offset >> PAGE_SHIFT); 648 } 649 650 /* 651 * Mark this as IO 652 */ 653 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 654 655 if (remap_pfn_range(vma, vma->vm_start, phys, 656 vma->vm_end - vma->vm_start, 657 vma->vm_page_prot)) 658 return -EAGAIN; 659 660 return 0; 661 } 662 663 void __init pci_map_io_early(unsigned long pfn) 664 { 665 struct map_desc pci_io_desc = { 666 .virtual = PCI_IO_VIRT_BASE, 667 .type = MT_DEVICE, 668 .length = SZ_64K, 669 }; 670 671 pci_io_desc.pfn = pfn; 672 iotable_init(&pci_io_desc, 1); 673 } 674