]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
pci: Move pci_hose_phys_to_bus() to pci_common.c
authorBin Meng <bmeng.cn@gmail.com>
Thu, 7 May 2015 13:34:07 +0000 (21:34 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Tue, 8 Sep 2015 20:48:14 +0000 (22:48 +0200)
pci_hose_phys_to_bus() is needed by several drivers. Move it to
pci_common.c to avoid a broken build when CONFIG_DM_PCI is on.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
drivers/pci/pci.c
drivers/pci/pci_common.c

index 5b6c6bc34eb54c45c04c8a228891fdfd07112e9a..157491c52da04b4ba53371a5331fae579caeabcb 100644 (file)
@@ -186,72 +186,6 @@ pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
        return -1;
 }
 
-/*
- *
- */
-
-int __pci_hose_phys_to_bus(struct pci_controller *hose,
-                               phys_addr_t phys_addr,
-                               unsigned long flags,
-                               unsigned long skip_mask,
-                               pci_addr_t *ba)
-{
-       struct pci_region *res;
-       pci_addr_t bus_addr;
-       int i;
-
-       for (i = 0; i < hose->region_count; i++) {
-               res = &hose->regions[i];
-
-               if (((res->flags ^ flags) & PCI_REGION_TYPE) != 0)
-                       continue;
-
-               if (res->flags & skip_mask)
-                       continue;
-
-               bus_addr = phys_addr - res->phys_start + res->bus_start;
-
-               if (bus_addr >= res->bus_start &&
-                       bus_addr < res->bus_start + res->size) {
-                       *ba = bus_addr;
-                       return 0;
-               }
-       }
-
-       return 1;
-}
-
-pci_addr_t pci_hose_phys_to_bus (struct pci_controller *hose,
-                                   phys_addr_t phys_addr,
-                                   unsigned long flags)
-{
-       pci_addr_t bus_addr = 0;
-       int ret;
-
-       if (!hose) {
-               puts("pci_hose_phys_to_bus: invalid hose\n");
-               return bus_addr;
-       }
-
-       /*
-        * if PCI_REGION_MEM is set we do a two pass search with preference
-        * on matches that don't have PCI_REGION_SYS_MEMORY set
-        */
-       if ((flags & PCI_REGION_MEM) == PCI_REGION_MEM) {
-               ret = __pci_hose_phys_to_bus(hose, phys_addr,
-                               flags, PCI_REGION_SYS_MEMORY, &bus_addr);
-               if (!ret)
-                       return bus_addr;
-       }
-
-       ret = __pci_hose_phys_to_bus(hose, phys_addr, flags, 0, &bus_addr);
-
-       if (ret)
-               puts("pci_hose_phys_to_bus: invalid physical address\n");
-
-       return bus_addr;
-}
-
 int pci_hose_config_device(struct pci_controller *hose,
                           pci_dev_t dev,
                           unsigned long io,
index 24c66bbef2f62222863cc853e02fc5fc140fd8f9..b9ff23f35bc8627650994c0e573adbe9c63eff14 100644 (file)
@@ -182,10 +182,10 @@ u32 pci_read_bar32(struct pci_controller *hose, pci_dev_t dev, int barnum)
 }
 
 int __pci_hose_bus_to_phys(struct pci_controller *hose,
-                               pci_addr_t bus_addr,
-                               unsigned long flags,
-                               unsigned long skip_mask,
-                               phys_addr_t *pa)
+                          pci_addr_t bus_addr,
+                          unsigned long flags,
+                          unsigned long skip_mask,
+                          phys_addr_t *pa)
 {
        struct pci_region *res;
        int i;
@@ -240,6 +240,68 @@ phys_addr_t pci_hose_bus_to_phys(struct pci_controller *hose,
        return phys_addr;
 }
 
+int __pci_hose_phys_to_bus(struct pci_controller *hose,
+                          phys_addr_t phys_addr,
+                          unsigned long flags,
+                          unsigned long skip_mask,
+                          pci_addr_t *ba)
+{
+       struct pci_region *res;
+       pci_addr_t bus_addr;
+       int i;
+
+       for (i = 0; i < hose->region_count; i++) {
+               res = &hose->regions[i];
+
+               if (((res->flags ^ flags) & PCI_REGION_TYPE) != 0)
+                       continue;
+
+               if (res->flags & skip_mask)
+                       continue;
+
+               bus_addr = phys_addr - res->phys_start + res->bus_start;
+
+               if (bus_addr >= res->bus_start &&
+                   bus_addr < res->bus_start + res->size) {
+                       *ba = bus_addr;
+                       return 0;
+               }
+       }
+
+       return 1;
+}
+
+pci_addr_t pci_hose_phys_to_bus(struct pci_controller *hose,
+                               phys_addr_t phys_addr,
+                               unsigned long flags)
+{
+       pci_addr_t bus_addr = 0;
+       int ret;
+
+       if (!hose) {
+               puts("pci_hose_phys_to_bus: invalid hose\n");
+               return bus_addr;
+       }
+
+       /*
+        * if PCI_REGION_MEM is set we do a two pass search with preference
+        * on matches that don't have PCI_REGION_SYS_MEMORY set
+        */
+       if ((flags & PCI_REGION_MEM) == PCI_REGION_MEM) {
+               ret = __pci_hose_phys_to_bus(hose, phys_addr,
+                               flags, PCI_REGION_SYS_MEMORY, &bus_addr);
+               if (!ret)
+                       return bus_addr;
+       }
+
+       ret = __pci_hose_phys_to_bus(hose, phys_addr, flags, 0, &bus_addr);
+
+       if (ret)
+               puts("pci_hose_phys_to_bus: invalid physical address\n");
+
+       return bus_addr;
+}
+
 pci_dev_t pci_find_device(unsigned int vendor, unsigned int device, int index)
 {
        struct pci_device_id ids[2] = { {}, {0, 0} };