[U-Boot] [PATCH 22/39] x86: Move Coreboot PCI into common cpu area
Simon Glass
sjg at chromium.org
Fri Nov 7 01:26:58 CET 2014
Hi Bin,
On 6 November 2014 17:07, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Fri, Nov 7, 2014 at 4:20 AM, Simon Glass <sjg at chromium.org> wrote:
>> This code is not really Coreboot-specific, so move it into the common area
>> and rename it.
>
> OK, but current coreboot pci codes are broken, thus need to be fixed
> before making it common.
>
>> Signed-off-by: Simon Glass <sjg at chromium.org>
>> ---
>>
>> arch/x86/cpu/Makefile | 1 +
>> arch/x86/cpu/coreboot/Makefile | 1 -
>> arch/x86/cpu/{coreboot => }/pci.c | 24 +++++++++++++-----------
>> 3 files changed, 14 insertions(+), 12 deletions(-)
>> rename arch/x86/cpu/{coreboot => }/pci.c (63%)
>>
>> diff --git a/arch/x86/cpu/Makefile b/arch/x86/cpu/Makefile
>> index 9d38ef7..97f36d5 100644
>> --- a/arch/x86/cpu/Makefile
>> +++ b/arch/x86/cpu/Makefile
>> @@ -11,3 +11,4 @@
>> extra-y = start.o
>> obj-$(CONFIG_X86_RESET_VECTOR) += resetvec.o start16.o
>> obj-y += interrupts.o cpu.o call64.o
>> +obj-$(CONFIG_PCI) += pci.o
>> diff --git a/arch/x86/cpu/coreboot/Makefile b/arch/x86/cpu/coreboot/Makefile
>> index cd0bf4e..65cf2cb 100644
>> --- a/arch/x86/cpu/coreboot/Makefile
>> +++ b/arch/x86/cpu/coreboot/Makefile
>> @@ -19,4 +19,3 @@ obj-$(CONFIG_SYS_COREBOOT) += tables.o
>> obj-$(CONFIG_SYS_COREBOOT) += ipchecksum.o
>> obj-$(CONFIG_SYS_COREBOOT) += sdram.o
>> obj-$(CONFIG_SYS_COREBOOT) += timestamp.o
>> -obj-$(CONFIG_PCI) += pci.o
>> diff --git a/arch/x86/cpu/coreboot/pci.c b/arch/x86/cpu/pci.c
>> similarity index 63%
>> rename from arch/x86/cpu/coreboot/pci.c
>> rename to arch/x86/cpu/pci.c
>> index 33f16a3..f35c8b3 100644
>> --- a/arch/x86/cpu/coreboot/pci.c
>> +++ b/arch/x86/cpu/pci.c
>> @@ -13,7 +13,7 @@
>> #include <pci.h>
>> #include <asm/pci.h>
>>
>> -static struct pci_controller coreboot_hose;
>> +static struct pci_controller x86_hose;
>>
>> static void config_pci_bridge(struct pci_controller *hose, pci_dev_t dev,
>> struct pci_config_table *table)
>> @@ -24,7 +24,7 @@ static void config_pci_bridge(struct pci_controller *hose, pci_dev_t dev,
>> pci_hose_scan_bus(hose, secondary);
>> }
>>
>> -static struct pci_config_table pci_coreboot_config_table[] = {
>> +static struct pci_config_table pci_x86_config_table[] = {
>> /* vendor, device, class, bus, dev, func */
>> { PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_BRIDGE_PCI,
>> PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, &config_pci_bridge },
>> @@ -33,17 +33,19 @@ static struct pci_config_table pci_coreboot_config_table[] = {
>
> Use this config_table will cause infinite loop when doing
> pci_hose_scan later. I do not use config_table on my Crown Bay port,
> instead using CONFIG_PCI_PNP which works very well.
OK, so are you saying that we should leave this separate for each board?
>
>> void pci_init_board(void)
>> {
>> - coreboot_hose.config_table = pci_coreboot_config_table;
>> - coreboot_hose.first_busno = 0;
>> - coreboot_hose.last_busno = 0;
>> + struct pci_controller *hose = &x86_hose;
>>
>> - pci_set_region(coreboot_hose.regions + 0, 0x0, 0x0, 0xffffffff,
>> - PCI_REGION_MEM);
>> - coreboot_hose.region_count = 1;
>> + hose->config_table = pci_x86_config_table;
>> + hose->first_busno = 0;
>> + hose->last_busno = 0;
>>
>> - pci_setup_type1(&coreboot_hose);
>> + pci_set_region(hose->regions + 0, 0x0, 0x0, 0xffffffff,
>> + PCI_REGION_MEM);
>> + hose->region_count = 1;
>
> There are 3 issues with the pci_set_region here:
> 1). The whole 4GiB PCI memory region creats conflicts with the systeam
> RAM memory map. This is a programming effor and normally causes
> undefined behaviour from chipset perspective.
> 2). There is no IO region configured, that means any device behind the
> PCI/PCIe bridge with only IO bar will fail to work.
> 3). There is no systeam RAM region configured, that means any device
> driver behind the PCI/PCIe bridge will fail to create pci addr <-> cpu
> physical addr mappings.
Actually this is not real setup - for the coreboot case it is
scan-only, there is no memory or I/O allocation going on.
>
>> - pci_register_hose(&coreboot_hose);
>> + pci_setup_type1(hose);
>>
>> - pci_hose_scan(&coreboot_hose);
>> + pci_register_hose(hose);
>> +
>> + pci_hose_scan(hose);
>> }
>
> Regards,
> Bin
Regards,
Simon
More information about the U-Boot
mailing list