[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] xen/hvmloader: define a TOM register



On 25/02/2013 06:50, "Xudong Hao" <xudong.hao@xxxxxxxxx> wrote:

> v2:
> * Define TOM register as one byte
> 
> Define a TOM(top of memory) register to report the base of PCI memory, so that
> qemu should update MMIO by reading this register value. TOM register are
> defined
> to one byte in PCI configure space, because that only upper 4 bit of PCI
> memory
> takes effect.
> 
> With the combination of qemu upstream, this should be a fix for PCI MMIO hole
> configuration. Upstream qemu set 0xe0000000 as TOM, but guest bios may set
> MMIO
> to 0x80000000~0xe0000000.

Why does qemu (when used as the Xen device model) care about the location of
the PCI hole start?

 -- Keir

> Signed-off-by: Xudong Hao <xudong.hao@xxxxxxxxx>
> Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
> ---
>  tools/firmware/hvmloader/pci.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/tools/firmware/hvmloader/pci.c b/tools/firmware/hvmloader/pci.c
> index c7c87a7..6d03a6f 100644
> --- a/tools/firmware/hvmloader/pci.c
> +++ b/tools/firmware/hvmloader/pci.c
> @@ -34,6 +34,29 @@ unsigned long pci_mem_end = PCI_MEM_END;
>  enum virtual_vga virtual_vga = VGA_none;
>  unsigned long igd_opregion_pgbase = 0;
>  
> +#define PCI_CLASS_BRIDGE_HOST            0x0600
> +#define PCI_VENDOR_ID_INTEL              0x8086
> +#define PCI_DEVICE_ID_INTEL_82441        0x1237
> +#define I440FX_PCI_HOLE_BASE             0xb0
> +
> +static void pci_adjust_pci_hole(uint8_t pci_hole_start)
> +{
> +    uint16_t class, vendor_id, device_id;
> +    if (pci_hole_start == 0xf0)
> +        return;
> +
> +    /* Check whether it is I440FX */
> +    class     = pci_readw(0, PCI_CLASS_DEVICE);
> +    vendor_id = pci_readw(0, PCI_VENDOR_ID);
> +    device_id = pci_readw(0, PCI_DEVICE_ID);
> +
> +    if (class != PCI_CLASS_BRIDGE_HOST ||
> +        vendor_id != PCI_VENDOR_ID_INTEL ||
> +        device_id != PCI_DEVICE_ID_INTEL_82441)
> +        return;
> +    pci_writeb(0, I440FX_PCI_HOLE_BASE, pci_hole_start);
> +
> +}
>  void pci_setup(void)
>  {
>      uint8_t is_64bar, using_64bar, bar64_relocate = 0;
> @@ -236,6 +259,7 @@ void pci_setup(void)
>              BUG();
>          hvm_info->high_mem_pgend += nr_pages;
>      }
> +    pci_adjust_pci_hole((uint8_t)(pci_mem_start >> 24));
>  
>      high_mem_resource.base = ((uint64_t)hvm_info->high_mem_pgend) <<
> PAGE_SHIFT; 
>      high_mem_resource.max = 1ull << cpu_phys_addr();



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.