hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
kernel/drivers/pci/controller/pcie-xilinx.c
....@@ -98,7 +98,6 @@
9898 * @reg_base: IO Mapped Register Base
9999 * @irq: Interrupt number
100100 * @msi_pages: MSI pages
101
- * @root_busno: Root Bus number
102101 * @dev: Device pointer
103102 * @msi_domain: MSI IRQ domain pointer
104103 * @leg_domain: Legacy IRQ domain pointer
....@@ -108,7 +107,6 @@
108107 void __iomem *reg_base;
109108 u32 irq;
110109 unsigned long msi_pages;
111
- u8 root_busno;
112110 struct device *dev;
113111 struct irq_domain *msi_domain;
114112 struct irq_domain *leg_domain;
....@@ -162,14 +160,13 @@
162160 struct xilinx_pcie_port *port = bus->sysdata;
163161
164162 /* 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)) {
166164 if (!xilinx_pcie_link_up(port))
167165 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 */
171168 return false;
172
-
169
+ }
173170 return true;
174171 }
175172
....@@ -582,14 +579,7 @@
582579 struct device *dev = port->dev;
583580 struct device_node *node = dev->of_node;
584581 struct resource regs;
585
- const char *type;
586582 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
- }
593583
594584 err = of_address_to_resource(node, 0, &regs);
595585 if (err) {
....@@ -623,11 +613,8 @@
623613 {
624614 struct device *dev = &pdev->dev;
625615 struct xilinx_pcie_port *port;
626
- struct pci_bus *bus, *child;
627616 struct pci_host_bridge *bridge;
628617 int err;
629
- resource_size_t iobase = 0;
630
- LIST_HEAD(res);
631618
632619 if (!dev->of_node)
633620 return -ENODEV;
....@@ -654,45 +641,14 @@
654641 return err;
655642 }
656643
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;
671644 bridge->sysdata = port;
672
- bridge->busnr = 0;
673645 bridge->ops = &xilinx_pcie_ops;
674
- bridge->map_irq = of_irq_parse_and_map_pci;
675
- bridge->swizzle_irq = pci_common_swizzle;
676646
677647 #ifdef CONFIG_PCI_MSI
678648 xilinx_pcie_msi_chip.dev = dev;
679649 bridge->msi = &xilinx_pcie_msi_chip;
680650 #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);
696652 }
697653
698654 static const struct of_device_id xilinx_pcie_of_match[] = {