From mboxrd@z Thu Jan 1 00:00:00 1970 From: Isaku Yamahata Subject: Re: [PATCH 1/3] VT-d: support Intel IGD passthrough Date: Thu, 18 Feb 2010 18:49:55 +0900 Message-ID: <20100218094955.GC28653@valinux.co.jp> References: <60E426D47DE8EA47AA104E65008A100D1621AFC6F5@shzsmsx501.ccr.corp.intel.com> <19306.65275.325707.253978@mariner.uk.xensource.com> <4B6B79EF.2070609@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <4B6B79EF.2070609@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Weidong Han Cc: "Kay, Allen M" , "xen-devel@lists.xensource.com" , Ian Jackson , Keir Fraser List-Id: xen-devel@lists.xenproject.org On Fri, Feb 05, 2010 at 09:52:47AM +0800, Weidong Han wrote: > Ian Jackson wrote: >> Han, Weidong writes ("[Xen-devel][PATCH 1/3] VT-d: support Intel IGD passthrough "): >> >>> Some registers of Intel IGD are mapped in host bridge, so it needs >>> to passthrough these registers of physical host bridge to guest >>> because emulated host bridge in guest doesn't have these mappings. >>> >>> Some VBIOSs and drivers ssume the IGD BDF (bus:device:function) is >>> always 00:02.0, so this patch reserves 00:02.0 for assigned IGD in >>> guest. >>> >> >> Thanks for the contribution, which I have applied with a very small >> change to avoid having an open else at #endif. >> >> However the part in pci.c is really very ugly indeed. If we ever get >> around to rebasing to recent upstream qemu and trying to upstream our >> patches, this is sure to be dropped. So you might profitably spend >> some time thinking how to make it less ugly. >> >> Thanks, >> Ian. >> > > Thanks for check-in. I agree the hacking in pci.c is not elegant. We > will think how to make it cleaner. This can be moved out as read_config callback. See 400fx_init() calling pci_register_device() in pciix_pci.c and some wrapper of pt_cpi_read_config(). thanks, > > Regards, > Weidong > > >> >>> +#ifdef CONFIG_PASSTHROUGH >>> + /* host bridge reads for IGD passthrough */ >>> + if ( igd_passthru && pci_dev->devfn == 0x00 ) >>> + { >>> + val = pci_dev->config_read(pci_dev, config_addr, len); >>> + >>> + if ( config_addr == 0x00 && len == 4 ) >>> + val = pt_pci_host_read_long(0, 0, 0, 0x00); >>> + else if ( config_addr == 0x02 ) // Device ID >>> + val = pt_pci_host_read_word(0, 0, 0, 0x02); >>> + else if ( config_addr == 0x52 ) // GMCH Graphics Control Register >>> + val = pt_pci_host_read_word(0, 0, 0, 0x52); >>> + else if ( config_addr == 0xa0 ) // GMCH Top of Memory Register >>> + val = pt_pci_host_read_word(0, 0, 0, 0xa0); >>> + } >>> + else if ( igd_passthru && pci_dev->devfn == 0x10 && >>> + config_addr == 0xfc ) // read on IGD device >>> + val = 0; // use SMI to communicate with the system BIOS >>> + else >>> +#endif >>> + val = pci_dev->config_read(pci_dev, config_addr, len); >>> + >>> > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > -- yamahata