| .. | .. |
|---|
| 21 | 21 | #include <linux/init.h> |
|---|
| 22 | 22 | #include <linux/of.h> |
|---|
| 23 | 23 | #include <linux/of_device.h> |
|---|
| 24 | +#include <linux/pgtable.h> |
|---|
| 24 | 25 | |
|---|
| 25 | 26 | #include <linux/uaccess.h> |
|---|
| 26 | | -#include <asm/pgtable.h> |
|---|
| 27 | 27 | #include <asm/irq.h> |
|---|
| 28 | 28 | #include <asm/prom.h> |
|---|
| 29 | 29 | #include <asm/apb.h> |
|---|
| .. | .. |
|---|
| 267 | 267 | struct dev_archdata *sd; |
|---|
| 268 | 268 | struct platform_device *op; |
|---|
| 269 | 269 | struct pci_dev *dev; |
|---|
| 270 | | - const char *type; |
|---|
| 271 | 270 | u32 class; |
|---|
| 272 | 271 | |
|---|
| 273 | 272 | dev = pci_alloc_dev(bus); |
|---|
| .. | .. |
|---|
| 283 | 282 | sd->stc = &pbm->stc; |
|---|
| 284 | 283 | sd->numa_node = pbm->numa_node; |
|---|
| 285 | 284 | |
|---|
| 286 | | - if (!strcmp(node->name, "ebus")) |
|---|
| 285 | + if (of_node_name_eq(node, "ebus")) |
|---|
| 287 | 286 | of_propagate_archdata(op); |
|---|
| 288 | | - |
|---|
| 289 | | - type = of_get_property(node, "device_type", NULL); |
|---|
| 290 | | - if (type == NULL) |
|---|
| 291 | | - type = ""; |
|---|
| 292 | 287 | |
|---|
| 293 | 288 | if (ofpci_verbose) |
|---|
| 294 | 289 | pci_info(bus," create device, devfn: %x, type: %s\n", |
|---|
| 295 | | - devfn, type); |
|---|
| 290 | + devfn, of_node_get_device_type(node)); |
|---|
| 296 | 291 | |
|---|
| 297 | 292 | dev->sysdata = node; |
|---|
| 298 | 293 | dev->dev.parent = bus->bridge; |
|---|
| .. | .. |
|---|
| 336 | 331 | dev->error_state = pci_channel_io_normal; |
|---|
| 337 | 332 | dev->dma_mask = 0xffffffff; |
|---|
| 338 | 333 | |
|---|
| 339 | | - if (!strcmp(node->name, "pci")) { |
|---|
| 334 | + if (of_node_name_eq(node, "pci")) { |
|---|
| 340 | 335 | /* a PCI-PCI bridge */ |
|---|
| 341 | 336 | dev->hdr_type = PCI_HEADER_TYPE_BRIDGE; |
|---|
| 342 | 337 | dev->rom_base_reg = PCI_ROM_ADDRESS1; |
|---|
| 343 | | - } else if (!strcmp(type, "cardbus")) { |
|---|
| 338 | + } else if (of_node_is_type(node, "cardbus")) { |
|---|
| 344 | 339 | dev->hdr_type = PCI_HEADER_TYPE_CARDBUS; |
|---|
| 345 | 340 | } else { |
|---|
| 346 | 341 | dev->hdr_type = PCI_HEADER_TYPE_NORMAL; |
|---|
| .. | .. |
|---|
| 431 | 426 | u64 size; |
|---|
| 432 | 427 | |
|---|
| 433 | 428 | if (ofpci_verbose) |
|---|
| 434 | | - pci_info(dev, "of_scan_pci_bridge(%s)\n", node->full_name); |
|---|
| 429 | + pci_info(dev, "of_scan_pci_bridge(%pOF)\n", node); |
|---|
| 435 | 430 | |
|---|
| 436 | 431 | /* parse bus-range property */ |
|---|
| 437 | 432 | busrange = of_get_property(node, "bus-range", &len); |
|---|
| 438 | 433 | if (busrange == NULL || len != 8) { |
|---|
| 439 | | - pci_info(dev, "Can't get bus-range for PCI-PCI bridge %s\n", |
|---|
| 440 | | - node->full_name); |
|---|
| 434 | + pci_info(dev, "Can't get bus-range for PCI-PCI bridge %pOF\n", |
|---|
| 435 | + node); |
|---|
| 441 | 436 | return; |
|---|
| 442 | 437 | } |
|---|
| 443 | 438 | |
|---|
| .. | .. |
|---|
| 455 | 450 | |
|---|
| 456 | 451 | bus = pci_add_new_bus(dev->bus, dev, busrange[0]); |
|---|
| 457 | 452 | if (!bus) { |
|---|
| 458 | | - pci_err(dev, "Failed to create pci bus for %s\n", |
|---|
| 459 | | - node->full_name); |
|---|
| 453 | + pci_err(dev, "Failed to create pci bus for %pOF\n", |
|---|
| 454 | + node); |
|---|
| 460 | 455 | return; |
|---|
| 461 | 456 | } |
|---|
| 462 | 457 | |
|---|
| .. | .. |
|---|
| 512 | 507 | res = bus->resource[0]; |
|---|
| 513 | 508 | if (res->flags) { |
|---|
| 514 | 509 | pci_err(dev, "ignoring extra I/O range" |
|---|
| 515 | | - " for bridge %s\n", node->full_name); |
|---|
| 510 | + " for bridge %pOF\n", node); |
|---|
| 516 | 511 | continue; |
|---|
| 517 | 512 | } |
|---|
| 518 | 513 | } else { |
|---|
| 519 | 514 | if (i >= PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES) { |
|---|
| 520 | 515 | pci_err(dev, "too many memory ranges" |
|---|
| 521 | | - " for bridge %s\n", node->full_name); |
|---|
| 516 | + " for bridge %pOF\n", node); |
|---|
| 522 | 517 | continue; |
|---|
| 523 | 518 | } |
|---|
| 524 | 519 | res = bus->resource[i]; |
|---|
| .. | .. |
|---|
| 554 | 549 | struct pci_dev *dev; |
|---|
| 555 | 550 | |
|---|
| 556 | 551 | if (ofpci_verbose) |
|---|
| 557 | | - pci_info(bus, "scan_bus[%s] bus no %d\n", |
|---|
| 558 | | - node->full_name, bus->number); |
|---|
| 552 | + pci_info(bus, "scan_bus[%pOF] bus no %d\n", |
|---|
| 553 | + node, bus->number); |
|---|
| 559 | 554 | |
|---|
| 560 | 555 | child = NULL; |
|---|
| 561 | 556 | prev_devfn = -1; |
|---|
| 562 | 557 | while ((child = of_get_next_child(node, child)) != NULL) { |
|---|
| 563 | 558 | if (ofpci_verbose) |
|---|
| 564 | | - pci_info(bus, " * %s\n", child->full_name); |
|---|
| 559 | + pci_info(bus, " * %pOF\n", child); |
|---|
| 565 | 560 | reg = of_get_property(child, "reg", ®len); |
|---|
| 566 | 561 | if (reg == NULL || reglen < 20) |
|---|
| 567 | 562 | continue; |
|---|
| .. | .. |
|---|
| 598 | 593 | pdev = to_pci_dev(dev); |
|---|
| 599 | 594 | dp = pdev->dev.of_node; |
|---|
| 600 | 595 | |
|---|
| 601 | | - return snprintf (buf, PAGE_SIZE, "%s\n", dp->full_name); |
|---|
| 596 | + return scnprintf(buf, PAGE_SIZE, "%pOF\n", dp); |
|---|
| 602 | 597 | } |
|---|
| 603 | 598 | |
|---|
| 604 | 599 | static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH, show_pciobppath_attr, NULL); |
|---|
| .. | .. |
|---|
| 698 | 693 | struct device_node *node = pbm->op->dev.of_node; |
|---|
| 699 | 694 | struct pci_bus *bus; |
|---|
| 700 | 695 | |
|---|
| 701 | | - printk("PCI: Scanning PBM %s\n", node->full_name); |
|---|
| 696 | + printk("PCI: Scanning PBM %pOF\n", node); |
|---|
| 702 | 697 | |
|---|
| 703 | 698 | pci_add_resource_offset(&resources, &pbm->io_space, |
|---|
| 704 | 699 | pbm->io_offset); |
|---|
| .. | .. |
|---|
| 714 | 709 | bus = pci_create_root_bus(parent, pbm->pci_first_busno, pbm->pci_ops, |
|---|
| 715 | 710 | pbm, &resources); |
|---|
| 716 | 711 | if (!bus) { |
|---|
| 717 | | - printk(KERN_ERR "Failed to create bus for %s\n", |
|---|
| 718 | | - node->full_name); |
|---|
| 712 | + printk(KERN_ERR "Failed to create bus for %pOF\n", node); |
|---|
| 719 | 713 | pci_free_resource_list(&resources); |
|---|
| 720 | 714 | return NULL; |
|---|
| 721 | 715 | } |
|---|
| .. | .. |
|---|
| 962 | 956 | } |
|---|
| 963 | 957 | #endif /* !(CONFIG_PCI_MSI) */ |
|---|
| 964 | 958 | |
|---|
| 965 | | -static void ali_sound_dma_hack(struct pci_dev *pdev, int set_bit) |
|---|
| 959 | +/* ALI sound chips generate 31-bits of DMA, a special register |
|---|
| 960 | + * determines what bit 31 is emitted as. |
|---|
| 961 | + */ |
|---|
| 962 | +int ali_sound_dma_hack(struct device *dev, u64 device_mask) |
|---|
| 966 | 963 | { |
|---|
| 964 | + struct iommu *iommu = dev->archdata.iommu; |
|---|
| 967 | 965 | struct pci_dev *ali_isa_bridge; |
|---|
| 968 | 966 | u8 val; |
|---|
| 969 | 967 | |
|---|
| 970 | | - /* ALI sound chips generate 31-bits of DMA, a special register |
|---|
| 971 | | - * determines what bit 31 is emitted as. |
|---|
| 972 | | - */ |
|---|
| 968 | + if (!dev_is_pci(dev)) |
|---|
| 969 | + return 0; |
|---|
| 970 | + |
|---|
| 971 | + if (to_pci_dev(dev)->vendor != PCI_VENDOR_ID_AL || |
|---|
| 972 | + to_pci_dev(dev)->device != PCI_DEVICE_ID_AL_M5451 || |
|---|
| 973 | + device_mask != 0x7fffffff) |
|---|
| 974 | + return 0; |
|---|
| 975 | + |
|---|
| 973 | 976 | ali_isa_bridge = pci_get_device(PCI_VENDOR_ID_AL, |
|---|
| 974 | 977 | PCI_DEVICE_ID_AL_M1533, |
|---|
| 975 | 978 | NULL); |
|---|
| 976 | 979 | |
|---|
| 977 | 980 | pci_read_config_byte(ali_isa_bridge, 0x7e, &val); |
|---|
| 978 | | - if (set_bit) |
|---|
| 981 | + if (iommu->dma_addr_mask & 0x80000000) |
|---|
| 979 | 982 | val |= 0x01; |
|---|
| 980 | 983 | else |
|---|
| 981 | 984 | val &= ~0x01; |
|---|
| 982 | 985 | pci_write_config_byte(ali_isa_bridge, 0x7e, val); |
|---|
| 983 | 986 | pci_dev_put(ali_isa_bridge); |
|---|
| 984 | | -} |
|---|
| 985 | | - |
|---|
| 986 | | -int pci64_dma_supported(struct pci_dev *pdev, u64 device_mask) |
|---|
| 987 | | -{ |
|---|
| 988 | | - u64 dma_addr_mask; |
|---|
| 989 | | - |
|---|
| 990 | | - if (pdev == NULL) { |
|---|
| 991 | | - dma_addr_mask = 0xffffffff; |
|---|
| 992 | | - } else { |
|---|
| 993 | | - struct iommu *iommu = pdev->dev.archdata.iommu; |
|---|
| 994 | | - |
|---|
| 995 | | - dma_addr_mask = iommu->dma_addr_mask; |
|---|
| 996 | | - |
|---|
| 997 | | - if (pdev->vendor == PCI_VENDOR_ID_AL && |
|---|
| 998 | | - pdev->device == PCI_DEVICE_ID_AL_M5451 && |
|---|
| 999 | | - device_mask == 0x7fffffff) { |
|---|
| 1000 | | - ali_sound_dma_hack(pdev, |
|---|
| 1001 | | - (dma_addr_mask & 0x80000000) != 0); |
|---|
| 1002 | | - return 1; |
|---|
| 1003 | | - } |
|---|
| 1004 | | - } |
|---|
| 1005 | | - |
|---|
| 1006 | | - if (device_mask >= (1UL << 32UL)) |
|---|
| 1007 | | - return 0; |
|---|
| 1008 | | - |
|---|
| 1009 | | - return (device_mask & dma_addr_mask) == dma_addr_mask; |
|---|
| 987 | + return 1; |
|---|
| 1010 | 988 | } |
|---|
| 1011 | 989 | |
|---|
| 1012 | 990 | void pci_resource_to_user(const struct pci_dev *pdev, int bar, |
|---|
| .. | .. |
|---|
| 1111 | 1089 | sp = prop->names; |
|---|
| 1112 | 1090 | |
|---|
| 1113 | 1091 | if (ofpci_verbose) |
|---|
| 1114 | | - pci_info(bus, "Making slots for [%s] mask[0x%02x]\n", |
|---|
| 1115 | | - node->full_name, mask); |
|---|
| 1092 | + pci_info(bus, "Making slots for [%pOF] mask[0x%02x]\n", |
|---|
| 1093 | + node, mask); |
|---|
| 1116 | 1094 | |
|---|
| 1117 | 1095 | i = 0; |
|---|
| 1118 | 1096 | while (mask) { |
|---|