From mboxrd@z Thu Jan 1 00:00:00 1970 From: Weidong Han Subject: Re: [PATCH 1/3] VT-d: support Intel IGD passthrough Date: Sat, 20 Feb 2010 15:47:22 +0800 Message-ID: <4B7F938A.3020707@intel.com> References: <60E426D47DE8EA47AA104E65008A100D1621AFC6F5@shzsmsx501.ccr.corp.intel.com> <19306.65275.325707.253978@mariner.uk.xensource.com> <4B6B79EF.2070609@intel.com> <20100218094955.GC28653@valinux.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20100218094955.GC28653@valinux.co.jp> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Isaku Yamahata Cc: "Kay, Allen M" , "xen-devel@lists.xensource.com" , Ian Jackson , Keir Fraser List-Id: xen-devel@lists.xenproject.org Isaku Yamahata wrote: > 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, > > Sound reasonable. Regards, Weidong >> 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 >> >> > >