We want access PCI earlier in the init sequence, so refactor the code so
that it does not require use of a BSS variable to work. This will allow us
to use early malloc() to store information about a PCI hose.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 arch/x86/cpu/pci.c                | 26 +++++++++++++++++++++++---
 arch/x86/include/asm/u-boot-x86.h |  3 +++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/arch/x86/cpu/pci.c b/arch/x86/cpu/pci.c
index f35c8b3..a72175d 100644
--- a/arch/x86/cpu/pci.c
+++ b/arch/x86/cpu/pci.c
@@ -10,6 +10,8 @@
  */
 
 #include <common.h>
+#include <errno.h>
+#include <malloc.h>
 #include <pci.h>
 #include <asm/pci.h>
 
@@ -31,10 +33,8 @@ static struct pci_config_table pci_x86_config_table[] = {
        {}
 };
 
-void pci_init_board(void)
+static void pci_setup_hose(struct pci_controller *hose)
 {
-       struct pci_controller *hose = &x86_hose;
-
        hose->config_table = pci_x86_config_table;
        hose->first_busno = 0;
        hose->last_busno = 0;
@@ -44,7 +44,27 @@ void pci_init_board(void)
        hose->region_count = 1;
 
        pci_setup_type1(hose);
+}
+
+int pci_early_init_hose(struct pci_controller **hosep)
+{
+       struct pci_controller *hose;
+
+       hose = calloc(1, sizeof(struct pci_controller));
+       if (!hose)
+               return -ENOMEM;
+
+       pci_setup_hose(hose);
+       *hosep = hose;
+
+       return 0;
+}
+
+void pci_init_board(void)
+{
+       struct pci_controller *hose = &x86_hose;
 
+       pci_setup_hose(hose);
        pci_register_hose(hose);
 
        pci_hose_scan(hose);
diff --git a/arch/x86/include/asm/u-boot-x86.h 
b/arch/x86/include/asm/u-boot-x86.h
index 8d5b438..6404cd3 100644
--- a/arch/x86/include/asm/u-boot-x86.h
+++ b/arch/x86/include/asm/u-boot-x86.h
@@ -37,6 +37,9 @@ int cpu_init_interrupts(void);
 /* board/.../... */
 int dram_init(void);
 
+struct pci_controller;
+int pci_early_init_hose(struct pci_controller **hosep);
+
 int cleanup_before_linux(void);
 int x86_cleanup_before_linux(void);
 void x86_enable_caches(void);
-- 
2.1.0.rc2.206.gedb03e5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to