diff options
author | Zhao Qiang <B45475@freescale.com> | 2013-10-12 13:46:33 +0800 |
---|---|---|
committer | York Sun <yorksun@freescale.com> | 2013-10-16 16:15:17 -0700 |
commit | 287df01e6aef0464c5e5bcbd7e87aa4ff1f24f5a (patch) | |
tree | 638da6ca13c77d494a81603d18ea9c1f7feddc25 /include | |
parent | 787964b8118b47a50bda796a315068639977c884 (diff) | |
download | u-boot-imx-287df01e6aef0464c5e5bcbd7e87aa4ff1f24f5a.zip u-boot-imx-287df01e6aef0464c5e5bcbd7e87aa4ff1f24f5a.tar.gz u-boot-imx-287df01e6aef0464c5e5bcbd7e87aa4ff1f24f5a.tar.bz2 |
PCIe:change the method to get the address of a requested capability in configuration space.
Previously, the address of a requested capability is define like that
"#define PCI_DCR 0x78"
But, the addresses of capabilities is different with regard to PCIe revs.
So this method is not flexible.
Now a function to get the address of a requested capability is added and used.
It can get the address dynamically by capability ID.
The step of this function:
1. Read Status register in PCIe configuration space to confirm that
Capabilities List is valid.
2. Find the address of Capabilities Pointer Register.
3. Find the address of requested capability from the first capability.
Signed-off-by: Zhao Qiang <B45475@freescale.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/pci.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/pci.h b/include/pci.h index 911ba89..d462479 100644 --- a/include/pci.h +++ b/include/pci.h @@ -410,6 +410,9 @@ #define PCI_MAX_PCI_DEVICES 32 #define PCI_MAX_PCI_FUNCTIONS 8 +#define PCI_FIND_CAP_TTL 0x48 +#define CAP_START_POS 0x40 + /* Include the ID list */ #include <pci_ids.h> @@ -647,6 +650,13 @@ extern int pci_hose_config_device(struct pci_controller *hose, pci_addr_t mem, unsigned long command); +extern int pci_hose_find_capability(struct pci_controller *hose, pci_dev_t dev, + int cap); +extern int pci_hose_find_cap_start(struct pci_controller *hose, pci_dev_t dev, + u8 hdr_type); +extern int pci_find_cap(struct pci_controller *hose, pci_dev_t dev, int pos, + int cap); + const char * pci_class_str(u8 class); int pci_last_busno(void); |