[U-Boot] [PATCH v3 09/26] x86: Support use of PCI before relocation

Simon Glass sjg at chromium.org
Fri Nov 21 07:50:58 CET 2014


On 13 November 2014 07:20, Bin Meng <bmeng.cn at gmail.com> wrote:
> On Thu, Nov 13, 2014 at 1:42 PM, Simon Glass <sjg at chromium.org> wrote:
>> Add support for using PCI before SDRAM is available, using early malloc()
>> and global_data.
>>
>> Signed-off-by: Simon Glass <sjg at 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.cn at gmail.com>

Applied to u-boot-x86.


More information about the U-Boot mailing list