mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
drivers/pci: Create pci_map_bar function
It is no longer always true that the pci bus address can be used as the virtual address for pci accesses. pci_map_bar() is created to return the virtual address for a pci region. Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
This commit is contained in:

committed by
Wolfgang Denk

parent
2ecca34017
commit
6e61fae4d3
@ -116,6 +116,25 @@ PCI_READ_VIA_DWORD_OP(word, u16 *, 0x02)
|
||||
PCI_WRITE_VIA_DWORD_OP(byte, u8, 0x03, 0x000000ff)
|
||||
PCI_WRITE_VIA_DWORD_OP(word, u16, 0x02, 0x0000ffff)
|
||||
|
||||
/* Get a virtual address associated with a BAR region */
|
||||
void *pci_map_bar(pci_dev_t pdev, int bar, int flags)
|
||||
{
|
||||
pci_addr_t pci_bus_addr;
|
||||
u32 bar_response;
|
||||
|
||||
/* read BAR address */
|
||||
pci_read_config_dword(pdev, bar, &bar_response);
|
||||
pci_bus_addr = (pci_addr_t)(bar_response & ~0xf);
|
||||
|
||||
/*
|
||||
* Pass "0" as the length argument to pci_bus_to_virt. The arg
|
||||
* isn't actualy used on any platform because u-boot assumes a static
|
||||
* linear mapping. In the future, this could read the BAR size
|
||||
* and pass that as the size if needed.
|
||||
*/
|
||||
return pci_bus_to_virt(pdev, pci_bus_addr, flags, 0, MAP_NOCACHE);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
Reference in New Issue
Block a user