hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/pci/controller/pcie-xilinx-nwl.c
....@@ -167,7 +167,6 @@
167167 int irq_misc;
168168 u32 ecam_value;
169169 u8 last_busno;
170
- u8 root_busno;
171170 struct nwl_msi msi;
172171 struct irq_domain *legacy_irq_domain;
173172 struct clk *clk;
....@@ -219,13 +218,11 @@
219218 struct nwl_pcie *pcie = bus->sysdata;
220219
221220 /* Check link before accessing downstream ports */
222
- if (bus->number != pcie->root_busno) {
221
+ if (!pci_is_root_bus(bus)) {
223222 if (!nwl_pcie_link_up(pcie))
224223 return false;
225
- }
226
-
227
- /* Only one device down on each root port */
228
- if (bus->number == pcie->root_busno && devfn > 0)
224
+ } else if (devfn > 0)
225
+ /* Only one device down on each root port */
229226 return false;
230227
231228 return true;
....@@ -440,11 +437,10 @@
440437 #ifdef CONFIG_PCI_MSI
441438 static struct irq_chip nwl_msi_irq_chip = {
442439 .name = "nwl_pcie:msi",
443
- .irq_enable = unmask_msi_irq,
444
- .irq_disable = mask_msi_irq,
445
- .irq_mask = mask_msi_irq,
446
- .irq_unmask = unmask_msi_irq,
447
-
440
+ .irq_enable = pci_msi_unmask_irq,
441
+ .irq_disable = pci_msi_mask_irq,
442
+ .irq_mask = pci_msi_mask_irq,
443
+ .irq_unmask = pci_msi_unmask_irq,
448444 };
449445
450446 static struct msi_domain_info nwl_msi_domain_info = {
....@@ -589,7 +585,6 @@
589585 /* Get msi_1 IRQ number */
590586 msi->irq_msi1 = platform_get_irq_byname(pdev, "msi1");
591587 if (msi->irq_msi1 < 0) {
592
- dev_err(dev, "failed to get IRQ#%d\n", msi->irq_msi1);
593588 ret = -EINVAL;
594589 goto err;
595590 }
....@@ -600,7 +595,6 @@
600595 /* Get msi_0 IRQ number */
601596 msi->irq_msi0 = platform_get_irq_byname(pdev, "msi0");
602597 if (msi->irq_msi0 < 0) {
603
- dev_err(dev, "failed to get IRQ#%d\n", msi->irq_msi0);
604598 ret = -EINVAL;
605599 goto err;
606600 }
....@@ -731,11 +725,8 @@
731725
732726 /* Get misc IRQ number */
733727 pcie->irq_misc = platform_get_irq_byname(pdev, "misc");
734
- if (pcie->irq_misc < 0) {
735
- dev_err(dev, "failed to get misc IRQ %d\n",
736
- pcie->irq_misc);
728
+ if (pcie->irq_misc < 0)
737729 return -EINVAL;
738
- }
739730
740731 err = devm_request_irq(dev, pcie->irq_misc,
741732 nwl_pcie_misc_handler, IRQF_SHARED,
....@@ -778,16 +769,7 @@
778769 struct platform_device *pdev)
779770 {
780771 struct device *dev = pcie->dev;
781
- struct device_node *node = dev->of_node;
782772 struct resource *res;
783
- const char *type;
784
-
785
- /* Check for device type */
786
- type = of_get_property(node, "device_type", NULL);
787
- if (!type || strcmp(type, "pci")) {
788
- dev_err(dev, "invalid \"device_type\" %s\n", type);
789
- return -EINVAL;
790
- }
791773
792774 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "breg");
793775 pcie->breg_base = devm_ioremap_resource(dev, res);
....@@ -809,10 +791,8 @@
809791
810792 /* Get intx IRQ number */
811793 pcie->irq_intx = platform_get_irq_byname(pdev, "intx");
812
- if (pcie->irq_intx < 0) {
813
- dev_err(dev, "failed to get intx IRQ %d\n", pcie->irq_intx);
794
+ if (pcie->irq_intx < 0)
814795 return pcie->irq_intx;
815
- }
816796
817797 irq_set_chained_handler_and_data(pcie->irq_intx,
818798 nwl_pcie_leg_handler, pcie);
....@@ -829,12 +809,8 @@
829809 {
830810 struct device *dev = &pdev->dev;
831811 struct nwl_pcie *pcie;
832
- struct pci_bus *bus;
833
- struct pci_bus *child;
834812 struct pci_host_bridge *bridge;
835813 int err;
836
- resource_size_t iobase = 0;
837
- LIST_HEAD(res);
838814
839815 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
840816 if (!bridge)
....@@ -867,54 +843,24 @@
867843 return err;
868844 }
869845
870
- err = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &res,
871
- &iobase);
872
- if (err) {
873
- dev_err(dev, "Getting bridge resources failed\n");
874
- return err;
875
- }
876
-
877
- err = devm_request_pci_bus_resources(dev, &res);
878
- if (err)
879
- goto error;
880
-
881846 err = nwl_pcie_init_irq_domain(pcie);
882847 if (err) {
883848 dev_err(dev, "Failed creating IRQ Domain\n");
884
- goto error;
849
+ return err;
885850 }
886851
887
- list_splice_init(&res, &bridge->windows);
888
- bridge->dev.parent = dev;
889852 bridge->sysdata = pcie;
890
- bridge->busnr = pcie->root_busno;
891853 bridge->ops = &nwl_pcie_ops;
892
- bridge->map_irq = of_irq_parse_and_map_pci;
893
- bridge->swizzle_irq = pci_common_swizzle;
894854
895855 if (IS_ENABLED(CONFIG_PCI_MSI)) {
896856 err = nwl_pcie_enable_msi(pcie);
897857 if (err < 0) {
898858 dev_err(dev, "failed to enable MSI support: %d\n", err);
899
- goto error;
859
+ return err;
900860 }
901861 }
902862
903
- err = pci_scan_root_bus_bridge(bridge);
904
- if (err)
905
- goto error;
906
-
907
- bus = bridge->bus;
908
-
909
- pci_assign_unassigned_bus_resources(bus);
910
- list_for_each_entry(child, &bus->children, node)
911
- pcie_bus_configure_settings(child);
912
- pci_bus_add_devices(bus);
913
- return 0;
914
-
915
-error:
916
- pci_free_resource_list(&res);
917
- return err;
863
+ return pci_host_probe(bridge);
918864 }
919865
920866 static struct platform_driver nwl_pcie_driver = {