[U-Boot] [PATCH 14/33] pci: Add functions to read and write a BAR address
Simon Glass
sjg at chromium.org
Wed Nov 12 01:18:02 CET 2014
Some PCI functions cannot be auto-configured. Add a function to set up a
fixed BAR which can be used in these situations. Also add a function to read
the current address of a BAR.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
drivers/pci/pci.c | 24 +++++++++++++++++++++---
include/pci.h | 23 +++++++++++++++++++++++
2 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 60c333e..e879d1e 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -363,9 +363,27 @@ phys_addr_t pci_hose_bus_to_phys(struct pci_controller* hose,
return phys_addr;
}
-/*
- *
- */
+void pci_config_fixed(struct pci_controller *hose, pci_dev_t dev, int barnum,
+ u32 addr)
+{
+ int bar;
+
+ bar = PCI_BASE_ADDRESS_0 + barnum * 4;
+ pci_hose_write_config_dword(hose, dev, bar, addr);
+}
+
+u32 pci_read_bar(struct pci_controller *hose, pci_dev_t dev, int barnum)
+{
+ u32 addr;
+ int bar;
+
+ bar = PCI_BASE_ADDRESS_0 + barnum * 4;
+ pci_hose_read_config_dword(hose, dev, bar, &addr);
+ if (addr & PCI_BASE_ADDRESS_SPACE_IO)
+ return addr & PCI_BASE_ADDRESS_IO_MASK;
+ else
+ return addr & PCI_BASE_ADDRESS_MEM_MASK;
+}
int pci_hose_config_device(struct pci_controller *hose,
pci_dev_t dev,
diff --git a/include/pci.h b/include/pci.h
index 2ff7365..05c67bc 100644
--- a/include/pci.h
+++ b/include/pci.h
@@ -677,5 +677,28 @@ extern void pci_mpc824x_init (struct pci_controller *hose);
extern void pci_mpc85xx_init (struct pci_controller *hose);
#endif
+/**
+ * pci_config_fixed() - Write the address of a BAR including control bits
+ *
+ * This writes a raw address (with control bits) to a bar
+ *
+ * @hose: PCI hose to use
+ * @dev: PCI device to update
+ * @barnum: BAR number (0-5)
+ * @addr: BAR address with controll bits
+ */
+void pci_config_fixed(struct pci_controller *hose, pci_dev_t dev, int barnum,
+ u32 addr);
+
+/**
+ * pci_read_bar() - read the address of a bar
+ *
+ * @hose: PCI hose to use
+ * @dev: PCI device to inspect
+ * @barnum: BAR number (0-5)
+ * @return address of the bar, masking out any control bits
+ * */
+u32 pci_read_bar(struct pci_controller *hose, pci_dev_t dev, int barnum);
+
#endif /* __ASSEMBLY__ */
#endif /* _PCI_H */
--
2.1.0.rc2.206.gedb03e5
More information about the U-Boot
mailing list