mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 22:51:37 +00:00
pci: Move pci_hose_phys_to_bus() to pci_common.c
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>
This commit is contained in:
parent
d8abb46b37
commit
238fe16c40
2 changed files with 66 additions and 70 deletions
|
@ -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,
|
||||
|
|
|
@ -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} };
|
||||
|
|
Loading…
Add table
Reference in a new issue