On Thu, Nov 13, 2014 at 1:42 PM, Simon Glass <s...@chromium.org> wrote: > Add support for using PCI before SDRAM is available, using early malloc() > and global_data. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > Changes in v3: > - Callpci_setup_type1() in early PCI setup > > Changes in v2: > - Split out new patch to support use fo PCI before relocation > > arch/x86/cpu/pci.c | 21 +++++++++++++++++++++ > arch/x86/include/asm/global_data.h | 1 + > arch/x86/include/asm/pci.h | 9 +++++++++ > 3 files changed, 31 insertions(+) > > diff --git a/arch/x86/cpu/pci.c b/arch/x86/cpu/pci.c > index 0741dc2..2d8f16c 100644 > --- a/arch/x86/cpu/pci.c > +++ b/arch/x86/cpu/pci.c > @@ -10,15 +10,36 @@ > */ > > #include <common.h> > +#include <errno.h> > +#include <malloc.h> > #include <pci.h> > #include <asm/pci.h> > > static struct pci_controller x86_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; > + > + board_pci_setup_hose(hose); > + pci_setup_type1(hose); > + gd->arch.hose = hose; > + *hosep = hose; > + > + return 0; > +} > + > void pci_init_board(void) > { > struct pci_controller *hose = &x86_hose; > > + /* Stop using the early hose */ > + gd->arch.hose = NULL; > + > board_pci_setup_hose(hose); > pci_setup_type1(hose); > pci_register_hose(hose); > diff --git a/arch/x86/include/asm/global_data.h > b/arch/x86/include/asm/global_data.h > index 186b97e..d32987b 100644 > --- a/arch/x86/include/asm/global_data.h > +++ b/arch/x86/include/asm/global_data.h > @@ -24,6 +24,7 @@ struct arch_global_data { > uint32_t tsc_mhz; /* TSC frequency in MHz */ > void *new_fdt; /* Relocated FDT */ > uint32_t bist; /* Built-in self test value */ > + struct pci_controller *hose; /* PCI hose for early use */ > }; > > #endif > diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h > index c160707..6e70a99 100644 > --- a/arch/x86/include/asm/pci.h > +++ b/arch/x86/include/asm/pci.h > @@ -24,4 +24,13 @@ void pci_setup_type1(struct pci_controller *hose); > * store things in 'hose' and not in BSS variables. > */ > void board_pci_setup_hose(struct pci_controller *hose); > + > +/** > + * pci_early_init_hose() - Set up PCI host before relocation > + * > + * This allocates memory for, sets up and returns the PCI hose. It can be > + * called before relocation. The hose will be stored in gd->arch.hose for > + * later use, but will become invalid one DRAM is available. > + */ > +int pci_early_init_hose(struct pci_controller **hosep); > #endif > --
Reviewed-by: Bin Meng <bmeng...@gmail.com> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot