diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-29 17:03:42 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-29 17:03:42 -0400 |
| commit | 6e98ee75c3ab99db48ecc0615c2246dc193111a9 (patch) | |
| tree | afdad9dc968ebef3787e7dc16a41290a525f18f5 /arch/sparc64/kernel/pci.c | |
| parent | 486b4ce13221aa6cd0cbc9fff6993f444d8a52b5 (diff) | |
| parent | 7db35f31cbb8ca1dbaba03d74b7db79ace084358 (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
[SPARC64]: Fill holes in hypervisor APIs and fix KTSB registry.
[SPARC64]: Fix two bugs wrt. kernel 4MB TSB.
[SPARC]: Mark as emulating cmpxchg, add appropriate depends for DRM.
[SPARC]: Emulate cmpxchg like parisc
[SPARC64]: Fix _PAGE_EXEC_4U check in sun4u I-TLB miss handler.
[SPARC]: Linux always started with 9600 8N1
[SPARC64]: arch/sparc64/time.c doesn't compile on Ultra 1 (no PCI)
[SPARC64]: Eliminate NR_CPUS limitations.
[SPARC64]: Use machine description and OBP properly for cpu probing.
[SPARC64]: Negotiate hypervisor API for PCI services.
[SPARC64]: Report proper system soft state to the hypervisor.
[SPARC64]: Fix typo in sun4v_hvapi_register error handling.
[SCSI] ESP: Kill SCSI_ESP_CORE and link directly just like jazz_esp
[SCSI] jazz_esp: Converted to use esp_core.
[SPARC64]: PCI device scan is way too verbose by default.
[SERIAL] sunzilog: section mismatch fix
[SPARC32]: Removes mismatch section warnigs in sparc time.c file
[SPARC64]: Don't be picky about virtual-dma values on sun4v.
[SPARC64]: Kill unused DIE_PAGE_FAULT enum value.
[SCSI] pluto: Use wait_for_completion_timeout.
Diffstat (limited to 'arch/sparc64/kernel/pci.c')
| -rw-r--r-- | arch/sparc64/kernel/pci.c | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index d4c077dc5e85..38a32bc95d22 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c | |||
| @@ -306,6 +306,20 @@ static void __init pci_controller_probe(void) | |||
| 306 | pci_controller_scan(pci_controller_init); | 306 | pci_controller_scan(pci_controller_init); |
| 307 | } | 307 | } |
| 308 | 308 | ||
| 309 | static int ofpci_verbose; | ||
| 310 | |||
| 311 | static int __init ofpci_debug(char *str) | ||
| 312 | { | ||
| 313 | int val = 0; | ||
| 314 | |||
| 315 | get_option(&str, &val); | ||
| 316 | if (val) | ||
| 317 | ofpci_verbose = 1; | ||
| 318 | return 1; | ||
| 319 | } | ||
| 320 | |||
| 321 | __setup("ofpci_debug=", ofpci_debug); | ||
| 322 | |||
| 309 | static unsigned long pci_parse_of_flags(u32 addr0) | 323 | static unsigned long pci_parse_of_flags(u32 addr0) |
| 310 | { | 324 | { |
| 311 | unsigned long flags = 0; | 325 | unsigned long flags = 0; |
| @@ -337,7 +351,9 @@ static void pci_parse_of_addrs(struct of_device *op, | |||
| 337 | addrs = of_get_property(node, "assigned-addresses", &proplen); | 351 | addrs = of_get_property(node, "assigned-addresses", &proplen); |
| 338 | if (!addrs) | 352 | if (!addrs) |
| 339 | return; | 353 | return; |
| 340 | printk(" parse addresses (%d bytes) @ %p\n", proplen, addrs); | 354 | if (ofpci_verbose) |
| 355 | printk(" parse addresses (%d bytes) @ %p\n", | ||
| 356 | proplen, addrs); | ||
| 341 | op_res = &op->resource[0]; | 357 | op_res = &op->resource[0]; |
| 342 | for (; proplen >= 20; proplen -= 20, addrs += 5, op_res++) { | 358 | for (; proplen >= 20; proplen -= 20, addrs += 5, op_res++) { |
| 343 | struct resource *res; | 359 | struct resource *res; |
| @@ -348,8 +364,9 @@ static void pci_parse_of_addrs(struct of_device *op, | |||
| 348 | if (!flags) | 364 | if (!flags) |
| 349 | continue; | 365 | continue; |
| 350 | i = addrs[0] & 0xff; | 366 | i = addrs[0] & 0xff; |
| 351 | printk(" start: %lx, end: %lx, i: %x\n", | 367 | if (ofpci_verbose) |
| 352 | op_res->start, op_res->end, i); | 368 | printk(" start: %lx, end: %lx, i: %x\n", |
| 369 | op_res->start, op_res->end, i); | ||
| 353 | 370 | ||
| 354 | if (PCI_BASE_ADDRESS_0 <= i && i <= PCI_BASE_ADDRESS_5) { | 371 | if (PCI_BASE_ADDRESS_0 <= i && i <= PCI_BASE_ADDRESS_5) { |
| 355 | res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; | 372 | res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; |
| @@ -393,8 +410,9 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 393 | if (type == NULL) | 410 | if (type == NULL) |
| 394 | type = ""; | 411 | type = ""; |
| 395 | 412 | ||
| 396 | printk(" create device, devfn: %x, type: %s hostcontroller(%d)\n", | 413 | if (ofpci_verbose) |
| 397 | devfn, type, host_controller); | 414 | printk(" create device, devfn: %x, type: %s\n", |
| 415 | devfn, type); | ||
| 398 | 416 | ||
| 399 | dev->bus = bus; | 417 | dev->bus = bus; |
| 400 | dev->sysdata = node; | 418 | dev->sysdata = node; |
| @@ -434,8 +452,9 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 434 | sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(bus), | 452 | sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(bus), |
| 435 | dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn)); | 453 | dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn)); |
| 436 | } | 454 | } |
| 437 | printk(" class: 0x%x device name: %s\n", | 455 | if (ofpci_verbose) |
| 438 | dev->class, pci_name(dev)); | 456 | printk(" class: 0x%x device name: %s\n", |
| 457 | dev->class, pci_name(dev)); | ||
| 439 | 458 | ||
| 440 | /* I have seen IDE devices which will not respond to | 459 | /* I have seen IDE devices which will not respond to |
| 441 | * the bmdma simplex check reads if bus mastering is | 460 | * the bmdma simplex check reads if bus mastering is |
| @@ -469,7 +488,8 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm, | |||
| 469 | } | 488 | } |
| 470 | pci_parse_of_addrs(sd->op, node, dev); | 489 | pci_parse_of_addrs(sd->op, node, dev); |
| 471 | 490 | ||
| 472 | printk(" adding to system ...\n"); | 491 | if (ofpci_verbose) |
| 492 | printk(" adding to system ...\n"); | ||
| 473 | 493 | ||
| 474 | pci_device_add(dev, bus); | 494 | pci_device_add(dev, bus); |
| 475 | 495 | ||
| @@ -547,7 +567,8 @@ static void __devinit of_scan_pci_bridge(struct pci_pbm_info *pbm, | |||
| 547 | unsigned int flags; | 567 | unsigned int flags; |
| 548 | u64 size; | 568 | u64 size; |
| 549 | 569 | ||
| 550 | printk("of_scan_pci_bridge(%s)\n", node->full_name); | 570 | if (ofpci_verbose) |
| 571 | printk("of_scan_pci_bridge(%s)\n", node->full_name); | ||
| 551 | 572 | ||
| 552 | /* parse bus-range property */ | 573 | /* parse bus-range property */ |
| 553 | busrange = of_get_property(node, "bus-range", &len); | 574 | busrange = of_get_property(node, "bus-range", &len); |
| @@ -632,7 +653,8 @@ static void __devinit of_scan_pci_bridge(struct pci_pbm_info *pbm, | |||
| 632 | simba_cont: | 653 | simba_cont: |
| 633 | sprintf(bus->name, "PCI Bus %04x:%02x", pci_domain_nr(bus), | 654 | sprintf(bus->name, "PCI Bus %04x:%02x", pci_domain_nr(bus), |
| 634 | bus->number); | 655 | bus->number); |
| 635 | printk(" bus name: %s\n", bus->name); | 656 | if (ofpci_verbose) |
| 657 | printk(" bus name: %s\n", bus->name); | ||
| 636 | 658 | ||
| 637 | pci_of_scan_bus(pbm, node, bus); | 659 | pci_of_scan_bus(pbm, node, bus); |
| 638 | } | 660 | } |
| @@ -646,12 +668,14 @@ static void __devinit pci_of_scan_bus(struct pci_pbm_info *pbm, | |||
| 646 | int reglen, devfn; | 668 | int reglen, devfn; |
| 647 | struct pci_dev *dev; | 669 | struct pci_dev *dev; |
| 648 | 670 | ||
| 649 | printk("PCI: scan_bus[%s] bus no %d\n", | 671 | if (ofpci_verbose) |
| 650 | node->full_name, bus->number); | 672 | printk("PCI: scan_bus[%s] bus no %d\n", |
| 673 | node->full_name, bus->number); | ||
| 651 | 674 | ||
| 652 | child = NULL; | 675 | child = NULL; |
| 653 | while ((child = of_get_next_child(node, child)) != NULL) { | 676 | while ((child = of_get_next_child(node, child)) != NULL) { |
| 654 | printk(" * %s\n", child->full_name); | 677 | if (ofpci_verbose) |
| 678 | printk(" * %s\n", child->full_name); | ||
| 655 | reg = of_get_property(child, "reg", ®len); | 679 | reg = of_get_property(child, "reg", ®len); |
| 656 | if (reg == NULL || reglen < 20) | 680 | if (reg == NULL || reglen < 20) |
| 657 | continue; | 681 | continue; |
| @@ -661,7 +685,9 @@ static void __devinit pci_of_scan_bus(struct pci_pbm_info *pbm, | |||
| 661 | dev = of_create_pci_dev(pbm, child, bus, devfn, 0); | 685 | dev = of_create_pci_dev(pbm, child, bus, devfn, 0); |
| 662 | if (!dev) | 686 | if (!dev) |
| 663 | continue; | 687 | continue; |
| 664 | printk("PCI: dev header type: %x\n", dev->hdr_type); | 688 | if (ofpci_verbose) |
| 689 | printk("PCI: dev header type: %x\n", | ||
| 690 | dev->hdr_type); | ||
| 665 | 691 | ||
| 666 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || | 692 | if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || |
| 667 | dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) | 693 | dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) |
