[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