.. | .. |
---|
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) { |
---|