.. | .. |
---|
98 | 98 | * @reg_base: IO Mapped Register Base |
---|
99 | 99 | * @irq: Interrupt number |
---|
100 | 100 | * @msi_pages: MSI pages |
---|
101 | | - * @root_busno: Root Bus number |
---|
102 | 101 | * @dev: Device pointer |
---|
103 | 102 | * @msi_domain: MSI IRQ domain pointer |
---|
104 | 103 | * @leg_domain: Legacy IRQ domain pointer |
---|
.. | .. |
---|
108 | 107 | void __iomem *reg_base; |
---|
109 | 108 | u32 irq; |
---|
110 | 109 | unsigned long msi_pages; |
---|
111 | | - u8 root_busno; |
---|
112 | 110 | struct device *dev; |
---|
113 | 111 | struct irq_domain *msi_domain; |
---|
114 | 112 | struct irq_domain *leg_domain; |
---|
.. | .. |
---|
162 | 160 | struct xilinx_pcie_port *port = bus->sysdata; |
---|
163 | 161 | |
---|
164 | 162 | /* Check if link is up when trying to access downstream ports */ |
---|
165 | | - if (bus->number != port->root_busno) |
---|
| 163 | + if (!pci_is_root_bus(bus)) { |
---|
166 | 164 | if (!xilinx_pcie_link_up(port)) |
---|
167 | 165 | return false; |
---|
168 | | - |
---|
169 | | - /* Only one device down on each root port */ |
---|
170 | | - if (bus->number == port->root_busno && devfn > 0) |
---|
| 166 | + } else if (devfn > 0) { |
---|
| 167 | + /* Only one device down on each root port */ |
---|
171 | 168 | return false; |
---|
172 | | - |
---|
| 169 | + } |
---|
173 | 170 | return true; |
---|
174 | 171 | } |
---|
175 | 172 | |
---|
.. | .. |
---|
582 | 579 | struct device *dev = port->dev; |
---|
583 | 580 | struct device_node *node = dev->of_node; |
---|
584 | 581 | struct resource regs; |
---|
585 | | - const char *type; |
---|
586 | 582 | int err; |
---|
587 | | - |
---|
588 | | - type = of_get_property(node, "device_type", NULL); |
---|
589 | | - if (!type || strcmp(type, "pci")) { |
---|
590 | | - dev_err(dev, "invalid \"device_type\" %s\n", type); |
---|
591 | | - return -EINVAL; |
---|
592 | | - } |
---|
593 | 583 | |
---|
594 | 584 | err = of_address_to_resource(node, 0, ®s); |
---|
595 | 585 | if (err) { |
---|
.. | .. |
---|
623 | 613 | { |
---|
624 | 614 | struct device *dev = &pdev->dev; |
---|
625 | 615 | struct xilinx_pcie_port *port; |
---|
626 | | - struct pci_bus *bus, *child; |
---|
627 | 616 | struct pci_host_bridge *bridge; |
---|
628 | 617 | int err; |
---|
629 | | - resource_size_t iobase = 0; |
---|
630 | | - LIST_HEAD(res); |
---|
631 | 618 | |
---|
632 | 619 | if (!dev->of_node) |
---|
633 | 620 | return -ENODEV; |
---|
.. | .. |
---|
654 | 641 | return err; |
---|
655 | 642 | } |
---|
656 | 643 | |
---|
657 | | - err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &res, |
---|
658 | | - &iobase); |
---|
659 | | - if (err) { |
---|
660 | | - dev_err(dev, "Getting bridge resources failed\n"); |
---|
661 | | - return err; |
---|
662 | | - } |
---|
663 | | - |
---|
664 | | - err = devm_request_pci_bus_resources(dev, &res); |
---|
665 | | - if (err) |
---|
666 | | - goto error; |
---|
667 | | - |
---|
668 | | - |
---|
669 | | - list_splice_init(&res, &bridge->windows); |
---|
670 | | - bridge->dev.parent = dev; |
---|
671 | 644 | bridge->sysdata = port; |
---|
672 | | - bridge->busnr = 0; |
---|
673 | 645 | bridge->ops = &xilinx_pcie_ops; |
---|
674 | | - bridge->map_irq = of_irq_parse_and_map_pci; |
---|
675 | | - bridge->swizzle_irq = pci_common_swizzle; |
---|
676 | 646 | |
---|
677 | 647 | #ifdef CONFIG_PCI_MSI |
---|
678 | 648 | xilinx_pcie_msi_chip.dev = dev; |
---|
679 | 649 | bridge->msi = &xilinx_pcie_msi_chip; |
---|
680 | 650 | #endif |
---|
681 | | - err = pci_scan_root_bus_bridge(bridge); |
---|
682 | | - if (err < 0) |
---|
683 | | - goto error; |
---|
684 | | - |
---|
685 | | - bus = bridge->bus; |
---|
686 | | - |
---|
687 | | - pci_assign_unassigned_bus_resources(bus); |
---|
688 | | - list_for_each_entry(child, &bus->children, node) |
---|
689 | | - pcie_bus_configure_settings(child); |
---|
690 | | - pci_bus_add_devices(bus); |
---|
691 | | - return 0; |
---|
692 | | - |
---|
693 | | -error: |
---|
694 | | - pci_free_resource_list(&res); |
---|
695 | | - return err; |
---|
| 651 | + return pci_host_probe(bridge); |
---|
696 | 652 | } |
---|
697 | 653 | |
---|
698 | 654 | static const struct of_device_id xilinx_pcie_of_match[] = { |
---|