hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/arch/sparc/kernel/pci.c
....@@ -21,9 +21,9 @@
2121 #include <linux/init.h>
2222 #include <linux/of.h>
2323 #include <linux/of_device.h>
24
+#include <linux/pgtable.h>
2425
2526 #include <linux/uaccess.h>
26
-#include <asm/pgtable.h>
2727 #include <asm/irq.h>
2828 #include <asm/prom.h>
2929 #include <asm/apb.h>
....@@ -267,7 +267,6 @@
267267 struct dev_archdata *sd;
268268 struct platform_device *op;
269269 struct pci_dev *dev;
270
- const char *type;
271270 u32 class;
272271
273272 dev = pci_alloc_dev(bus);
....@@ -283,16 +282,12 @@
283282 sd->stc = &pbm->stc;
284283 sd->numa_node = pbm->numa_node;
285284
286
- if (!strcmp(node->name, "ebus"))
285
+ if (of_node_name_eq(node, "ebus"))
287286 of_propagate_archdata(op);
288
-
289
- type = of_get_property(node, "device_type", NULL);
290
- if (type == NULL)
291
- type = "";
292287
293288 if (ofpci_verbose)
294289 pci_info(bus," create device, devfn: %x, type: %s\n",
295
- devfn, type);
290
+ devfn, of_node_get_device_type(node));
296291
297292 dev->sysdata = node;
298293 dev->dev.parent = bus->bridge;
....@@ -336,11 +331,11 @@
336331 dev->error_state = pci_channel_io_normal;
337332 dev->dma_mask = 0xffffffff;
338333
339
- if (!strcmp(node->name, "pci")) {
334
+ if (of_node_name_eq(node, "pci")) {
340335 /* a PCI-PCI bridge */
341336 dev->hdr_type = PCI_HEADER_TYPE_BRIDGE;
342337 dev->rom_base_reg = PCI_ROM_ADDRESS1;
343
- } else if (!strcmp(type, "cardbus")) {
338
+ } else if (of_node_is_type(node, "cardbus")) {
344339 dev->hdr_type = PCI_HEADER_TYPE_CARDBUS;
345340 } else {
346341 dev->hdr_type = PCI_HEADER_TYPE_NORMAL;
....@@ -431,13 +426,13 @@
431426 u64 size;
432427
433428 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);
435430
436431 /* parse bus-range property */
437432 busrange = of_get_property(node, "bus-range", &len);
438433 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);
441436 return;
442437 }
443438
....@@ -455,8 +450,8 @@
455450
456451 bus = pci_add_new_bus(dev->bus, dev, busrange[0]);
457452 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);
460455 return;
461456 }
462457
....@@ -512,13 +507,13 @@
512507 res = bus->resource[0];
513508 if (res->flags) {
514509 pci_err(dev, "ignoring extra I/O range"
515
- " for bridge %s\n", node->full_name);
510
+ " for bridge %pOF\n", node);
516511 continue;
517512 }
518513 } else {
519514 if (i >= PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES) {
520515 pci_err(dev, "too many memory ranges"
521
- " for bridge %s\n", node->full_name);
516
+ " for bridge %pOF\n", node);
522517 continue;
523518 }
524519 res = bus->resource[i];
....@@ -554,14 +549,14 @@
554549 struct pci_dev *dev;
555550
556551 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);
559554
560555 child = NULL;
561556 prev_devfn = -1;
562557 while ((child = of_get_next_child(node, child)) != NULL) {
563558 if (ofpci_verbose)
564
- pci_info(bus, " * %s\n", child->full_name);
559
+ pci_info(bus, " * %pOF\n", child);
565560 reg = of_get_property(child, "reg", &reglen);
566561 if (reg == NULL || reglen < 20)
567562 continue;
....@@ -598,7 +593,7 @@
598593 pdev = to_pci_dev(dev);
599594 dp = pdev->dev.of_node;
600595
601
- return snprintf (buf, PAGE_SIZE, "%s\n", dp->full_name);
596
+ return scnprintf(buf, PAGE_SIZE, "%pOF\n", dp);
602597 }
603598
604599 static DEVICE_ATTR(obppath, S_IRUSR | S_IRGRP | S_IROTH, show_pciobppath_attr, NULL);
....@@ -698,7 +693,7 @@
698693 struct device_node *node = pbm->op->dev.of_node;
699694 struct pci_bus *bus;
700695
701
- printk("PCI: Scanning PBM %s\n", node->full_name);
696
+ printk("PCI: Scanning PBM %pOF\n", node);
702697
703698 pci_add_resource_offset(&resources, &pbm->io_space,
704699 pbm->io_offset);
....@@ -714,8 +709,7 @@
714709 bus = pci_create_root_bus(parent, pbm->pci_first_busno, pbm->pci_ops,
715710 pbm, &resources);
716711 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);
719713 pci_free_resource_list(&resources);
720714 return NULL;
721715 }
....@@ -962,51 +956,35 @@
962956 }
963957 #endif /* !(CONFIG_PCI_MSI) */
964958
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)
966963 {
964
+ struct iommu *iommu = dev->archdata.iommu;
967965 struct pci_dev *ali_isa_bridge;
968966 u8 val;
969967
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
+
973976 ali_isa_bridge = pci_get_device(PCI_VENDOR_ID_AL,
974977 PCI_DEVICE_ID_AL_M1533,
975978 NULL);
976979
977980 pci_read_config_byte(ali_isa_bridge, 0x7e, &val);
978
- if (set_bit)
981
+ if (iommu->dma_addr_mask & 0x80000000)
979982 val |= 0x01;
980983 else
981984 val &= ~0x01;
982985 pci_write_config_byte(ali_isa_bridge, 0x7e, val);
983986 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;
1010988 }
1011989
1012990 void pci_resource_to_user(const struct pci_dev *pdev, int bar,
....@@ -1111,8 +1089,8 @@
11111089 sp = prop->names;
11121090
11131091 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);
11161094
11171095 i = 0;
11181096 while (mask) {