diff options
| author | John Schmoller <jschmoller@xes-inc.com> | 2010-10-22 00:20:23 -0500 | 
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2010-10-22 02:17:12 -0500 | 
| commit | 96d6160324c49c81df10b6b4c75d2470cb30dce4 (patch) | |
| tree | 8f39289d4721ce30ad091c21cadee229ed3a5954 | |
| parent | 9660c5de74aae900077c3769d7d18b39a124d9d5 (diff) | |
| download | olio-uboot-2014.01-96d6160324c49c81df10b6b4c75d2470cb30dce4.tar.xz olio-uboot-2014.01-96d6160324c49c81df10b6b4c75d2470cb30dce4.zip | |
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>
| -rw-r--r-- | common/cmd_pci.c | 13 | ||||
| -rw-r--r-- | drivers/pci/fsl_pci_init.c | 3 | ||||
| -rw-r--r-- | drivers/pci/pci.c | 4 | ||||
| -rw-r--r-- | include/configs/XPEDITE5170.h | 1 | ||||
| -rw-r--r-- | include/configs/XPEDITE5200.h | 1 | ||||
| -rw-r--r-- | include/configs/XPEDITE5370.h | 1 | 
6 files changed, 22 insertions, 1 deletions
| diff --git a/common/cmd_pci.c b/common/cmd_pci.c index 4bde05991..ccf5adaaa 100644 --- a/common/cmd_pci.c +++ b/common/cmd_pci.c @@ -497,6 +497,10 @@ int do_pci (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		if ((bdf = get_pci_dev(argv[2])) == -1)  			return 1;  		break; +#ifdef CONFIG_CMD_PCI_ENUM +	case 'e': +		break; +#endif  	default:		/* scan bus */  		value = 1; /* short listing */  		bdf = 0;   /* bus number  */ @@ -518,6 +522,11 @@ int do_pci (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  		return 0;  	case 'd':		/* display */  		return pci_cfg_display(bdf, addr, size, value); +#ifdef CONFIG_CMD_PCI_ENUM +	case 'e': +		pci_init(); +		return 0; +#endif  	case 'n':		/* next */  		if (argc < 4)  			goto usage; @@ -545,6 +554,10 @@ U_BOOT_CMD(  	"list and access PCI Configuration Space",  	"[bus] [long]\n"  	"    - short or long list of PCI devices on bus 'bus'\n" +#ifdef CONFIG_CMD_PCI_ENUM +	"pci enum\n" +	"    - re-enumerate PCI buses\n" +#endif  	"pci header b.d.f\n"  	"    - show header of PCI device 'bus.device.function'\n"  	"pci display[.b, .w, .l] b.d.f [address] [# of objects]\n" diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c index 001e6eb90..1f021036e 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 cd64a87fc..848746f1e 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();  } diff --git a/include/configs/XPEDITE5170.h b/include/configs/XPEDITE5170.h index 9ff28a291..ab6d4b4ec 100644 --- a/include/configs/XPEDITE5170.h +++ b/include/configs/XPEDITE5170.h @@ -545,6 +545,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);  #define CONFIG_CMD_PCA953X  #define CONFIG_CMD_PCA953X_INFO  #define CONFIG_CMD_PCI +#define CONFIG_CMD_PCI_ENUM  #define CONFIG_CMD_PING  #define CONFIG_CMD_REGINFO  #define CONFIG_CMD_SNTP diff --git a/include/configs/XPEDITE5200.h b/include/configs/XPEDITE5200.h index db03777a7..00cd51628 100644 --- a/include/configs/XPEDITE5200.h +++ b/include/configs/XPEDITE5200.h @@ -339,6 +339,7 @@  #define CONFIG_CMD_PCA953X  #define CONFIG_CMD_PCA953X_INFO  #define CONFIG_CMD_PCI +#define CONFIG_CMD_PCI_ENUM  #define CONFIG_CMD_PING  #define CONFIG_CMD_SNTP  #define CONFIG_CMD_REGINFO diff --git a/include/configs/XPEDITE5370.h b/include/configs/XPEDITE5370.h index 01047c85e..73e3d52e8 100644 --- a/include/configs/XPEDITE5370.h +++ b/include/configs/XPEDITE5370.h @@ -396,6 +396,7 @@ extern unsigned long get_board_ddr_clk(unsigned long dummy);  #define CONFIG_CMD_PCA953X  #define CONFIG_CMD_PCA953X_INFO  #define CONFIG_CMD_PCI +#define CONFIG_CMD_PCI_ENUM  #define CONFIG_CMD_PING  #define CONFIG_CMD_SAVEENV  #define CONFIG_CMD_SNTP |