mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 14:41:31 +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;
|
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,
|
int pci_hose_config_device(struct pci_controller *hose,
|
||||||
pci_dev_t dev,
|
pci_dev_t dev,
|
||||||
unsigned long io,
|
unsigned long io,
|
||||||
|
|
|
@ -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,
|
int __pci_hose_bus_to_phys(struct pci_controller *hose,
|
||||||
pci_addr_t bus_addr,
|
pci_addr_t bus_addr,
|
||||||
unsigned long flags,
|
unsigned long flags,
|
||||||
unsigned long skip_mask,
|
unsigned long skip_mask,
|
||||||
phys_addr_t *pa)
|
phys_addr_t *pa)
|
||||||
{
|
{
|
||||||
struct pci_region *res;
|
struct pci_region *res;
|
||||||
int i;
|
int i;
|
||||||
|
@ -240,6 +240,68 @@ phys_addr_t pci_hose_bus_to_phys(struct pci_controller *hose,
|
||||||
return phys_addr;
|
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)
|
pci_dev_t pci_find_device(unsigned int vendor, unsigned int device, int index)
|
||||||
{
|
{
|
||||||
struct pci_device_id ids[2] = { {}, {0, 0} };
|
struct pci_device_id ids[2] = { {}, {0, 0} };
|
||||||
|
|
Loading…
Add table
Reference in a new issue