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

Re: [Xen-devel] Getting VGA Passthrough to work on Xen Unstable



Hi,

>Hi all,
>
>I've tried to filter out parts of XCI that are relevant to VGA
>passthrough (most, if not all, are Jean Guyader's work) and apply them
>to Xen unstable. The patch doesn't work with changeset 19597. I'm not
>sure why. But I've gotten DomU to boot up showing only the physical gfx
>on previous changesets. I didn't have a chance to test the gfx
>functionalities though. I made a lot of simplifications, such as
>excluding user options, and ignoring HID passthrough for now. The patch
>is hardcoded for VGA passthrough on HVM guests. The reason is really to
>study which are the parts really affect VGA passthrough, and of course
>ultimately getting VGA passthrough to work.
>
>This may seem like taking a step backwards, but I think there are many
>people out there who are new, like me, and are really interested to
>understand and get VGA passthrough to work correctly. I'm hoping that
>experts out there can provide constructive criticism on this patch, and
>of course provide suggestions on how to make this patch work for the
>latest changeset.
>
I suspect the VGA rom doesn't be loaded.
pci_load_option_roms() loads only mass stroage devices and serial bus 
controller.
You need to remove the ckeck.

@tools/firmware/hvmloader/hvmloader.c
 476 static int pci_load_option_roms(uint32_t rom_base_addr)
 477 {
 478     uint32_t option_rom_addr, rom_phys_addr = rom_base_addr;
 479     uint16_t vendor_id, device_id;
 480     uint8_t devfn, class;
 481 
 482     for ( devfn = 0; devfn < 128; devfn++ )
 483     {
 484         class     = pci_readb(devfn, PCI_CLASS_DEVICE + 1);
 485         vendor_id = pci_readw(devfn, PCI_VENDOR_ID);
 486         device_id = pci_readw(devfn, PCI_DEVICE_ID);
 487 
 488         if ( (vendor_id == 0xffff) && (device_id == 0xffff) )
 489             continue;
 490 
 491         /*
 492          * Currently only scan options from mass storage devices and serial
 493          * bus controller (Fibre Channel included).
 494          */
 495         if ( (class != 0x1) && (class != 0xc) )
 496             continue;
 497 
 498         option_rom_addr = pci_readl(devfn, PCI_ROM_ADDRESS);
 499         if ( !option_rom_addr )
 500             continue;
 501 
 502         /* Ensure Expansion Bar is enabled before copying */
 503         pci_writel(devfn, PCI_ROM_ADDRESS, option_rom_addr | 0x1);
 504 
 505         rom_phys_addr += scan_option_rom(
 506             devfn, vendor_id, device_id,
 507             (void *)(option_rom_addr & ~2047), rom_phys_addr);
 508 
 509         /* Restore the default original value of Expansion Bar */
 510         pci_writel(devfn, PCI_ROM_ADDRESS, option_rom_addr);
 511     }
 512 
 513     return rom_phys_addr - rom_base_addr;
 514 }
 
Best Regards,

Akio Takebe


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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