Hi Bin, >>>> +static unsigned long acpi_fill_mcfg(unsigned long current) >>>> +{ >>>> + pci_dev_t qemu_dev; >>>> + struct pci_device_id qemu_id[] = { { 0x8086, 0x29c0 } }; >>>> + u32 reg; >>>> + >>>> + qemu_dev = pci_find_devices(qemu_id, 0); >>>> + if (!qemu_dev) >>>> + return current; >>>> + >>>> + reg = pci_read_config_dword(qemu_dev, 0x60, ®); >>>> + if ((reg & 0x07) != 0x01) // require enabled + 256MB size >>>> + return current; >>>> + >>>> + current += acpi_create_mcfg_mmconfig((struct acpi_mcfg_mmconfig >>>> *) current, >>>> + reg & 0xf0000000, 0x0, 0x0, >>>> 255); >>> >>> We need actually programming the chipset to enable the ECAM. This >>> needs to be done in the arch/x86/cpu/qemu/qemu.c. >>> >> >> Would be needing your guidance for this. Would need some info about >> qemu working and ECAM's role. > > ECAM is PCIe enhanced configuration access mechanism. QEMU i440FX is a > PCI chipset, which does not support ECAM. For QEMU Q35 which supports > PCIe, you need check the Q35 chipset. I just checked that, it's on > D0:F0:R60h a register called PCIEXBAR. You need hook U-Boot's PCI > configuration RW routines to actually use ECAM to verify it is really > working. >
As suggested by you, I have added below patch - diff --git a/arch/x86/cpu/qemu/pci.c b/arch/x86/cpu/qemu/pci.c index 1a9140b..ba8f470 100644 --- a/arch/x86/cpu/qemu/pci.c +++ b/arch/x86/cpu/qemu/pci.c @@ -11,6 +11,8 @@ #include <asm/arch/device.h> #include <asm/arch/qemu.h> +#define Q35_PCIEXBAR_ADDR 0xb0000000 + DECLARE_GLOBAL_DATA_PTR; void board_pci_setup_hose(struct pci_controller *hose) @@ -83,7 +85,10 @@ int board_pci_post_scan(struct pci_controller *hose) x86_pci_write_config16(PIIX_IDE, IDE0_TIM, IDE_DECODE_EN); x86_pci_write_config16(PIIX_IDE, IDE1_TIM, IDE_DECODE_EN); } - + else { + /* setup mmconfig */ + x86_pci_write_config32(device, 0x60, Q35_PCIEXBAR_ADDR | 1); + } /* * QEMU emulated graphic card shows in the PCI configuration space with * PCI vendor id and device id as an artificial pair 0x1234:0x1111. In the bootup logs, with this patch applied, I am getting - [ 0.432000] ACPI: Using PIC for interrupt routing [ 0.436000] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.486000] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.488000] acpi PNP0A08:00: _OSC: OS supports [ASPM ClockPM Segments MSI] [ 0.491000] acpi PNP0A08:00: _OSC: not requesting OS control; OS requires [ExtendedConfig ASPM ClockPM MSI] [ 0.494000] acpi PNP0A08:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge. [ 0.496000] PCI host bridge to bus 0000:00 [ 0.497000] pci_bus 0000:00: root bus resource [bus 00-ff] [ 0.498000] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window] [ 0.498000] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window] [ 0.500000] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window] [ 0.501000] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xfebfffff window] In the log "fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge." shows I am still not able to use ECAM. Regards, Saket Sinha _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot