mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-29 15:43:44 +08:00
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>
This commit is contained in:
parent
9660c5de74
commit
96d6160324
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user