]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - board/amcc/katmai/katmai.c
ppc4xx: Dynamic configuration of 4xx PCIe mode as root or endpoint mode
[karo-tx-uboot.git] / board / amcc / katmai / katmai.c
index f1c352cb86e32fbeb2a6b5edece824a57e4ee454..0627a7a095cc94afa04fed469d6518b5f1580094 100644 (file)
@@ -30,9 +30,6 @@
 #include <asm/gpio.h>
 #include <asm/4xx_pcie.h>
 
-#undef PCIE_ENDPOINT
-/* #define PCIE_ENDPOINT 1 */
-
 DECLARE_GLOBAL_DATA_PTR;
 
 int board_early_init_f (void)
@@ -392,6 +389,7 @@ void pcie_setup_hoses(int busno)
 {
        struct pci_controller *hose;
        int i, bus;
+       int ret = 0;
        char *env;
        unsigned int delay;
 
@@ -405,11 +403,14 @@ void pcie_setup_hoses(int busno)
                if (!katmai_pcie_card_present(i))
                        continue;
 
-#ifdef PCIE_ENDPOINT
-               if (ppc4xx_init_pcie_endport(i)) {
-#else
-               if (ppc4xx_init_pcie_rootport(i)) {
-#endif
+               if (is_end_point(i)) {
+                       printf("PCIE%d: will be configured as endpoint\n", i);
+                       ret = ppc4xx_init_pcie_endport(i);
+               } else {
+                       printf("PCIE%d: will be configured as root-complex\n", i);
+                       ret = ppc4xx_init_pcie_rootport(i);
+               }
+               if (ret) {
                        printf("PCIE%d: initialization failed\n", i);
                        continue;
                }
@@ -424,35 +425,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;
                }
-
-               /*
-                * Config access can only go down stream
-                */
-               hose->last_busno = pci_hose_scan(hose);
-               bus = hose->last_busno + 1;
-#endif
        }
 }
 #endif /* defined(CONFIG_PCI) */