summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJohn Schmoller <jschmoller@xes-inc.com>2010-10-22 00:20:23 -0500
committerKumar Gala <galak@kernel.crashing.org>2010-10-22 02:17:12 -0500
commit96d6160324c49c81df10b6b4c75d2470cb30dce4 (patch)
tree8f39289d4721ce30ad091c21cadee229ed3a5954 /drivers
parent9660c5de74aae900077c3769d7d18b39a124d9d5 (diff)
downloadu-boot-imx-96d6160324c49c81df10b6b4c75d2470cb30dce4.zip
u-boot-imx-96d6160324c49c81df10b6b4c75d2470cb30dce4.tar.gz
u-boot-imx-96d6160324c49c81df10b6b4c75d2470cb30dce4.tar.bz2
pci: Add ability to re-enumerate PCI buses
Add a new 'pci enum' command which re-enumerates the PCI buses. This command is enabled via the CONFIG_CMD_PCI_ENUM define and can be useful in boards with FPGAs connected via PCI/PCIe, boards that support PCI hot-plugging, or during PCI debug. Also enable the 'pci enum' command for X-ES's Freescale-based boards. Signed-off-by: John Schmoller <jschmoller@xes-inc.com> Signed-off-by: Peter Tyser <ptyser@xes-inc.com> Acked-by: Kumar Gala <galak@kernel.crashing.org> Acked-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/pci/fsl_pci_init.c3
-rw-r--r--drivers/pci/pci.c4
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c
index 001e6eb..1f02103 100644
--- a/drivers/pci/fsl_pci_init.c
+++ b/drivers/pci/fsl_pci_init.c
@@ -91,6 +91,9 @@ int fsl_setup_hose(struct pci_controller *hose, unsigned long addr)
{
volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) addr;
+ /* Reset hose to make sure its in a clean state */
+ memset(hose, 0, sizeof(struct pci_controller));
+
pci_setup_indirect(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data);
return fsl_is_pci_agent(hose);
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index cd64a87..848746f 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -139,7 +139,7 @@ void *pci_map_bar(pci_dev_t pdev, int bar, int flags)
*
*/
-static struct pci_controller* hose_head = NULL;
+static struct pci_controller* hose_head;
void pci_register_hose(struct pci_controller* hose)
{
@@ -640,6 +640,8 @@ void pci_init(void)
}
#endif /* CONFIG_PCI_BOOTDELAY */
+ hose_head = NULL;
+
/* now call board specific pci_init()... */
pci_init_board();
}