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

[Xen-devel] Partial Success VGA passthrough NVIDIA GeForce 7600 GS on Intel 5520



(Sorry if this is a duplicate. I've been having email client trouble and can't tell if it is going out.)
I've been working on getting VGA passthrough to Windows 7 working on my
machine.  I have already succeeded in passing through the second network
card.  That worked flawlessly.

SuperMicro x8dai (5520 chipset)
GeForce 7600 GS (I'm passing this one through)
GeForce 6800
E5520 processor

I started by trying to follow everything that Mr. Teo En Ming did.  I
applied qemu-change-for-vBAR-pBAR.patch,
qemu-claim-vga-cycle-for-secondary-gfx-passthrough.patch,
xen-load-vbios-file, and xen-vBAR-pBAR.patch.  I applied them all by
hand since it's been so long.

I also found the message about updating xen-vBAR-pBAR.patch to have the
memory addresses from lspci -v, so I did that.

05:00.0 VGA compatible controller: nVidia Corporation G70 [GeForce 7600
GS] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: eVga.com. Corp. Device c549
        Flags: bus master, fast devsel, latency 0, IRQ 10
        Memory at f7000000 (32-bit, non-prefetchable) [size=16M]
        Memory at c0000000 (64-bit, prefetchable) [size=256M]
        Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        I/O ports at ec00 [size=128]
        Expansion ROM at f8ee0000 [disabled] [size=128K]
        Capabilities: <access denied>
        Kernel driver in use: pci-stub

diff -r bec27eb6f72c tools/firmware/hvmloader/acpi/dsdt.asl
--- a/tools/firmware/hvmloader/acpi/dsdt.asl    Sat Nov 14 10:32:59 2009
+0000
+++ b/tools/firmware/hvmloader/acpi/dsdt.asl    Tue Dec 01 10:33:31 2009
-0800
@@ -175,6 +175,34 @@
                         0x000BFFFF,
                         0x00000000,
                         0x00020000)
+
+                    /* reserve MMIO BARs of gfx for 1:1 mapping */
+                    DWordMemory(
+                        ResourceProducer, PosDecode, MinFixed, MaxFixed,
+                        Cacheable, ReadWrite,
+                        0x00000000,
+                        0xC0000000,
+                        0xCFFFFFFF,
+                        0x00000000,
+                        0x10000000)
+
+                    DWordMemory(
+                        ResourceProducer, PosDecode, MinFixed, MaxFixed,
+                        NonCacheable, ReadWrite,
+                        0x00000000,
+                        0xF7000000,
+                        0xF7FFFFFF,
+                        0x00000000,
+                        0x01000000)
+
+                    DWordMemory(
+                        ResourceProducer, PosDecode, MinFixed, MaxFixed,
+                        NonCacheable, ReadWrite,
+                        0x00000000,
+                        0xF6000000,
+                        0xF6FFFFFF,
+                        0x00000000,
+                        0x01000000)

                     DWordMemory(
                         ResourceProducer, PosDecode, MinFixed, MaxFixed,

I succeeded in getting the videobios to load, and get output on the
graphics card!  So, at least something works.

I still get "Windows has stopped this device because it has reported
problems. (Code 43)" and the yellow exclamation mark in the device manager.

I then installed Debian in a virtual machine, and tried to do vga
passthrough there to get better debug.  When I do a "lspci" from inside
Debian, it returns

00:05.0 VGA compatible controller: nVidia Corporation G70 [GeForce 7600
GS] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: eVga.com. Corp. Device c549
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 128
        Interrupt: pin A routed to IRQ 10
        Region 0: Memory at f7000000 (32-bit, non-prefetchable) [size=16M]
        Region 1: Memory at c0000000 (64-bit, prefetchable) [size=256M]
        Region 3: Memory at f6000000 (64-bit, non-prefetchable) [size=16M]
        Region 5: I/O ports at ec00 [size=128]
        [virtual] Expansion ROM at 50000000 [disabled] [size=128K]
        Capabilities: <access denied>
        Kernel modules: nvidiafb, nvidia

If I had to guess, I'd say the Expansion ROM isn't loaded correctly, but
I don't know where to start to fix that, or if it is even a problem.

Any ideas on what is going wrong, or how to fix it?  Any help would be
appreciated.

Thanks,
    Austin Schuh
domid: 6
qemu: the number of cpus is 1
Graphics option: passthrough
Watching /local/domain/0/device-model/6/logdirty/cmd
Watching /local/domain/0/device-model/6/command
char device redirected to /dev/pts/0
qemu_map_cache_init nr_buckets = 10000 size 4194304
shared page at pfn feffd
buffered io page at pfn feffb
Guest uuid = 9a03e669-f938-ac8a-cbbe-2aa5c4bc8310
Time offset set 0
Register xen platform.
Done register platform.
platform_fixed_ioport: changed ro/rw state of ROM memory area. now is rw state.
xs_read(/local/domain/0/device-model/6/xen_extended_power_mgmt): read error
husb: open device 3.8
husb: config #1 need -1
husb: 1 interfaces claimed for configuration 1
husb: grabbed usb device 3.8
medium change watch on `hdc' (index: 1): 
/home/austin/tmp/en_windows_7_professional_x64_dvd_X15-65805.iso
I/O request not ready: 0, ptr: 0, port: 0, data: 0, count: 0, size: 0
(qemu) Log-dirty: no command yet.
xs_read(/local/domain/6/log-throttling): read error
dm-command: hot insert pass-through pci dev 
register_real_device: Assigning real physical device 05:00.0 ...
pt_iomul_init: Error: pt_iomul_init can't open file /dev/xen/pci_iomul: No such 
file or directory: 0x5:0x0.0x0
pt_register_regions: IO region registered (size=0x01000000 base_addr=0xf7000000)
pt_register_regions: IO region registered (size=0x10000000 base_addr=0xc000000c)
pt_register_regions: IO region registered (size=0x01000000 base_addr=0xf6000004)
pt_register_regions: IO region registered (size=0x00000080 base_addr=0x0000ec01)
pt_register_regions: Expansion ROM registered (size=0x00020000 
base_addr=0xf8ee0000)
gfx_claim_vga_cycle: bridge for bus 1, previous bridge control is 2
gfx_claim_vga_cycle: bus=0x0, dev=0x1e, func=0x0
gfx_claim_vga_cycle: bridge for bus 1, updated bridge control is 2
gfx_claim_vga_cycle: bridge for bus 5, previous bridge control is 1a
gfx_claim_vga_cycle: bus=0x0, dev=0x7, func=0x0
gfx_claim_vga_cycle: bridge for bus 5, updated bridge control is 1a
gfx_claim_vga_cycle: bridge for bus 6, previous bridge control is 2
gfx_claim_vga_cycle: bus=0x0, dev=0x3, func=0x0
gfx_claim_vga_cycle: bridge for bus 6, updated bridge control is 2
gfx_claim_vga_cycle: bridge for bus 7, previous bridge control is 2
gfx_claim_vga_cycle: bus=0x0, dev=0x1, func=0x0
gfx_claim_vga_cycle: bridge for bus 7, updated bridge control is 2
gfx_claim_vga_cycle: previous igd control is 0
gfx_claim_vga_cycle: updated igd control is 2
gfx_claim_vga_cycle: previous igd control is 0
gfx_claim_vga_cycle: updated igd control is 2
gfx_claim_vga_cycle: previous igd control is 0
gfx_claim_vga_cycle: updated igd control is 2
gfx_claim_vga_cycle: previous igd control is 2
gfx_claim_vga_cycle: updated igd control is 2
register_real_device: Real physical device 05:00.0 registered successfuly!
IRQ type = INTx
pt_bar_reg_read: first read BARs of gfx
pt_iomem_map: e_phys=f7000000 maddr=f7000000 type=0 len=16777216 index=0 
first_map=1
pt_bar_reg_read: first read BARs of gfx
pt_iomem_map: e_phys=c0000000 maddr=c0000000 type=8 len=268435456 index=1 
first_map=1
pt_bar_reg_read: first read BARs of gfx
pt_bar_reg_read: first read BARs of gfx
pt_iomem_map: e_phys=f6000000 maddr=f6000000 type=0 len=16777216 index=3 
first_map=1
pt_bar_reg_read: first read BARs of gfx
pt_bar_reg_read: first read BARs of gfx
pt_ioport_map: e_phys=ec00 pio_base=ec00 len=128 index=5 first_map=1
platform_fixed_ioport: changed ro/rw state of ROM memory area. now is rw state.
platform_fixed_ioport: changed ro/rw state of ROM memory area. now is ro state.
pt_iomem_map: e_phys=ffffffff maddr=f7000000 type=0 len=16777216 index=0 
first_map=0
pt_iomem_map: e_phys=ffffffff maddr=c0000000 type=8 len=268435456 index=1 
first_map=0
pt_iomem_map: e_phys=ffffffff maddr=f6000000 type=0 len=16777216 index=3 
first_map=0
pt_ioport_map: e_phys=ffff pio_base=ec00 len=128 index=5 first_map=0
pt_iomem_map: e_phys=f7000000 maddr=f7000000 type=0 len=16777216 index=0 
first_map=0
pt_iomem_map: e_phys=c0000000 maddr=c0000000 type=8 len=268435456 index=1 
first_map=0
pt_iomem_map: e_phys=f6000000 maddr=f6000000 type=0 len=16777216 index=3 
first_map=0
pt_ioport_map: e_phys=ec00 pio_base=ec00 len=128 index=5 first_map=0
husb: config #1 need 1
husb: 1 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 1 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 1 interfaces claimed for configuration 1
husb: config #1 need 1
husb: 1 interfaces claimed for configuration 1
reset requested in cpu_handle_ioreq.
Issued domain 6 reboot

_______________________________________________
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®.