|
@@ -36,11 +36,8 @@
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
-#undef PCIE_ENDPOINT
|
|
|
-/* #define PCIE_ENDPOINT 1 */
|
|
|
|
|
|
void fpga_init (void);
|
|
|
-
|
|
|
void get_sys_info(PPC440_SYS_INFO *board_cfg );
|
|
|
int compare_to_true(char *str );
|
|
|
char *remove_l_w_space(char *in_str );
|
|
@@ -847,6 +844,7 @@ void pcie_setup_hoses(int busno)
|
|
|
{
|
|
|
struct pci_controller *hose;
|
|
|
int i, bus;
|
|
|
+ int ret = 0;
|
|
|
char *env;
|
|
|
unsigned int delay;
|
|
|
|
|
@@ -860,16 +858,19 @@ void pcie_setup_hoses(int busno)
|
|
|
if (!yucca_pcie_card_present(i))
|
|
|
continue;
|
|
|
|
|
|
-#ifdef PCIE_ENDPOINT
|
|
|
- yucca_setup_pcie_fpga_endpoint(i);
|
|
|
- if (ppc4xx_init_pcie_endport(i)) {
|
|
|
-#else
|
|
|
- yucca_setup_pcie_fpga_rootpoint(i);
|
|
|
- if (ppc4xx_init_pcie_rootport(i)) {
|
|
|
-#endif
|
|
|
- printf("PCIE%d: initialization failed\n", i);
|
|
|
- continue;
|
|
|
+ if (is_end_point(i)) {
|
|
|
+ printf("PCIE%d: will be configured as endpoint\n",i);
|
|
|
+ yucca_setup_pcie_fpga_endpoint(i);
|
|
|
+ ret = ppc4xx_init_pcie_endport(i);
|
|
|
+ } else {
|
|
|
+ printf("PCIE%d: will be configured as root-complex\n",i);
|
|
|
+ yucca_setup_pcie_fpga_rootpoint(i);
|
|
|
+ ret = ppc4xx_init_pcie_rootport(i);
|
|
|
}
|
|
|
+ if (ret) {
|
|
|
+ printf("PCIE%d: initialization failed\n", i);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
hose = &pcie_hose[i];
|
|
|
hose->first_busno = bus;
|
|
@@ -881,35 +882,33 @@ void pcie_setup_hoses(int busno)
|
|
|
CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
|
|
|
CFG_PCIE_MEMBASE + i * CFG_PCIE_MEMSIZE,
|
|
|
CFG_PCIE_MEMSIZE,
|
|
|
- PCI_REGION_MEM
|
|
|
- );
|
|
|
+ PCI_REGION_MEM);
|
|
|
hose->region_count = 1;
|
|
|
pci_register_hose(hose);
|
|
|
|
|
|
-#ifdef PCIE_ENDPOINT
|
|
|
- ppc4xx_setup_pcie_endpoint(hose, i);
|
|
|
- /*
|
|
|
- * Reson for no scanning is endpoint can not generate
|
|
|
- * upstream configuration accesses.
|
|
|
- */
|
|
|
-#else
|
|
|
- ppc4xx_setup_pcie_rootpoint(hose, i);
|
|
|
-
|
|
|
- env = getenv ("pciscandelay");
|
|
|
- if (env != NULL) {
|
|
|
- delay = simple_strtoul (env, NULL, 10);
|
|
|
- if (delay > 5)
|
|
|
- printf ("Warning, expect noticable delay before PCIe"
|
|
|
- "scan due to 'pciscandelay' value!\n");
|
|
|
- mdelay (delay * 1000);
|
|
|
- }
|
|
|
+ if (is_end_point(i)) {
|
|
|
+ ppc4xx_setup_pcie_endpoint(hose, i);
|
|
|
+ /*
|
|
|
+ * Reson for no scanning is endpoint can not generate
|
|
|
+ * upstream configuration accesses.
|
|
|
+ */
|
|
|
+ } else {
|
|
|
+ ppc4xx_setup_pcie_rootpoint(hose, i);
|
|
|
+ env = getenv("pciscandelay");
|
|
|
+ if (env != NULL) {
|
|
|
+ delay = simple_strtoul(env, NULL, 10);
|
|
|
+ if (delay > 5)
|
|
|
+ printf("Warning, expect noticable delay before "
|
|
|
+ "PCIe scan due to 'pciscandelay' value!\n");
|
|
|
+ mdelay(delay * 1000);
|
|
|
+ }
|
|
|
|
|
|
- /*
|
|
|
- * Config access can only go down stream
|
|
|
- */
|
|
|
- hose->last_busno = pci_hose_scan(hose);
|
|
|
- bus = hose->last_busno + 1;
|
|
|
-#endif
|
|
|
+ /*
|
|
|
+ * Config access can only go down stream
|
|
|
+ */
|
|
|
+ hose->last_busno = pci_hose_scan(hose);
|
|
|
+ bus = hose->last_busno + 1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
#endif /* defined(CONFIG_PCI) */
|