From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39879) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aTLeH-0006Pj-OV for qemu-devel@nongnu.org; Tue, 09 Feb 2016 22:41:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aTLeD-0003mx-HY for qemu-devel@nongnu.org; Tue, 09 Feb 2016 22:41:01 -0500 Received: from mga03.intel.com ([134.134.136.65]:5061) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aTLeD-0003mg-3N for qemu-devel@nongnu.org; Tue, 09 Feb 2016 22:40:57 -0500 From: "Kay, Allen M" Date: Wed, 10 Feb 2016 03:40:54 +0000 Message-ID: <003AAFE53969E14CB1F09B6FD68C3CD47BB75E56@ORSMSX106.amr.corp.intel.com> References: <1436938670-7677-1-git-send-email-tiejun.chen@intel.com> <1436938670-7677-4-git-send-email-tiejun.chen@intel.com> <20160208203235.69088310@t450s.home> <20160209104332.775b88f8@t450s.home> <003AAFE53969E14CB1F09B6FD68C3CD47BB7580F@ORSMSX106.amr.corp.intel.com> <20160209143253.0d73e002@t450s.home> In-Reply-To: <20160209143253.0d73e002@t450s.home> Content-Language: en-US Content-Type: multipart/mixed; boundary="_002_003AAFE53969E14CB1F09B6FD68C3CD47BB75E56ORSMSX106amrcor_" MIME-Version: 1.0 Subject: Re: [Qemu-devel] [v10][PATCH 03/10] piix: create host bridge to passthrough List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alex Williamson Cc: "Ruan, Shuai" , "ehabkost@redhat.com" , "stefano.stabellini@eu.citrix.com" , "mst@redhat.com" , "qemu-devel@nongnu.org" , "pbonzini@redhat.com" , "rth@twiddle.net" --_002_003AAFE53969E14CB1F09B6FD68C3CD47BB75E56ORSMSX106amrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Alex Williamson [mailto:alex.williamson@redhat.com] > Sent: Tuesday, February 09, 2016 1:33 PM > To: Kay, Allen M > Cc: ehabkost@redhat.com; mst@redhat.com; > stefano.stabellini@eu.citrix.com; qemu-devel@nongnu.org; > pbonzini@redhat.com; rth@twiddle.net; Ruan, Shuai > > Subject: Re: [Qemu-devel] [v10][PATCH 03/10] piix: create host bridge to > passthrough >=20 > Hi Allen, >=20 Hi Alex, > Thanks for the reply. I'm totally onboard with you for BDW/SKL for > supported platforms, but I'd like to understand what the incremental > investment is for each back step within reason for older GPUs, at least f= or > best-effort, community support. If we want to assume BDW/SKL and > Universal Passthrough Mode, then we could abandon the host bridge and > ISA bridge modifications altogether, right? Right. > On the other hand, it's not clear > to me that UPT drivers are that pervasive and if we need to enable some > degree of host bridge/ISA bridge poke thrus, why not enable a fair chunk = of > users, including me. >=20 Sounds good. > My IVB desktop seems to be working well (win10 + linux) with only poking > through the standard host bridge and ISA bridge identifications. Yes, I = need > to know about the different GMCH layout of IVB vs BDW in the IGD device, > but I've already taken care of that. Other than VendorID/DeviceID, which other PCI config fields in host bridge = and ISA bridge fields did you have to passthrough to get your IVB to work. = Are you passing IGD through as primary or secondary? > It seems like SNB is pretty similar to IVB (they run on the same chipsets= ), Agree. > but I haven't yet fgured out the magic to make an SNB laptop light up wit= h IGD > assignment, which would be useful to show that OpRegion passthrough is > actually doing something. >=20 There might be a difference in BDSM definition. You might want to add 0xb0= in host bridge passthrough and try SNB again. It is also possible the difference might be caused by difference in driver = version. If I google "sandybridge windows graphics driver" and "ivybridge = windows graphics driver" I get the following: SNB driver: https://downloadcenter.intel.com/product/81502/Intel-HD-Graphic= s-2000-for-2nd-Generation-Intel-Core-Processors IVB driver: https://downloadcenter.intel.com/product/81501/Intel-HD-Graphic= s-2500-for-3rd-Generation-Intel-Core-Processors SNB driver points to version 15.28 driver binary. This driver supports SNB= and ILK graphics. IVB driver points to version 15.33 driver binary. This driver supports IVB= and SNB graphics. One experiment you can try is to install same IVB 15.33 binary on both IVB = and SNB systems. To prevent Windows update messing with driver version, yo= u should do the following: 1) disable MSFT driver update: Computer->"Advance system settings"->Hardwa= re->"Device Installation Settings"->"No, let me choose what to do"->"Never = install driver software from Windows Update". 2) Disable Windows update to never check or download updates. 3) remove "c:\windows\system32\DriverStore\FileRepository\igd*" 4) re-install IGD driver to desired binary. 5) Double check driver versions of both IVB and SNB are the same after rebo= ot guest. Unfortunately, it won't said 15.33 but have a version number sta= rts with 10.*. > If we ignore IronLake and older GPUs, how many VM chipset hacks do we > need? What combinations would require GMCH mirrored in the host bridge, Base on original code in Xen, you can try the following host bridge offset = passthrough. I have also attached pt-graphics.c from Xen/QEMU for your ref= erence. case 0x00: /* vendor id */ case 0x02: /* device id */ case 0x08: /* revision id */ case 0x2c: /* sybsystem vendor id */ case 0x2e: /* sybsystem id */ case 0x50: /* SNB: processor graphics control register */ case 0x52: /* processor graphics control register */ case 0xa0: /* top of memory */ case 0xb0: /* ILK: BSM: should read from dev 2 offset 0x5c *= / case 0x58: /* SNB: PAVPC Offset */ case 0xa4: /* SNB: graphics base of stolen memory */ case 0xa8: /* SNB: base of GTT stolen memory */ > and couldn't we mirror it from the IGD device itself since it's present i= n the > same location all the way back through SNB. >=20 Yes, you can copy content from MCCG in IGD device to same 0x50 offset in ho= st bridge. > We certainly don't want to get into the nastiness of RMRRs in a VM, but d= o > the stolen memory use cases you've outlined explain the DMAR faults to th= at > region that I was seeing just booting a VM with a Linux live CD? What I described about stolen memory was based on Windows driver usage. I = will need to try Linux live CD to see DMAR faults you encountered. I will = try that after I finish setting up my environment. I have been following y= our blog. Great instructions! > Again, it seems just as easy, if not easier to copy GMCH from the IGD its= elf into the > host bridge. >=20 Not sure if I follow ... how does this would solve stolen memory/RMRR issue= ...? >=20 > Ok, unless anyone shouts really loudly and it doesn't affect anything new= er > than IronLake, I'm happy to let those fall off the plate. I don't have a= ny older > systems that I care to make work with this. >=20 Sounds good. >=20 > Ok, so the code comment is pretty misleading for these. Would anything > since SNB need these? > We did not do much pruning pre-SNB. Tiejun and I did checked HSW last year= , most (maybe all) of these register are not needed. > What about the BDSM register in the host bridge? > Is the Xen experience of not needing to copy it relevant since stolen me= mory is > identity mapped into the VM anyway? Maybe Xen achieves the same effect > by not copying it and exposing it as zero. In SNB, BDSM is at offset 0xb0 in host bridge. Xen/QEMU passes thru 0xb0 i= n host bridge. Although the comment says it is for ILK. It is also true f= or SNB. In current BDW/SKL driver, BDSM is located at 0x5c in IGD device. Allen --_002_003AAFE53969E14CB1F09B6FD68C3CD47BB75E56ORSMSX106amrcor_ Content-Type: text/plain; name="pt-graphics.c" Content-Description: pt-graphics.c Content-Disposition: attachment; filename="pt-graphics.c"; size=8442; creation-date="Wed, 10 Feb 2016 03:01:19 GMT"; modification-date="Wed, 10 Feb 2016 02:58:50 GMT" Content-Transfer-Encoding: base64 LyoKICogZ3JhcGhpY3MgcGFzc3Rocm91Z2gKICovCgojaW5jbHVkZSAicGFzcy10aHJvdWdoLmgi CiNpbmNsdWRlICJwY2kuaCIKI2luY2x1ZGUgInBjaS9oZWFkZXIuaCIKI2luY2x1ZGUgInBjaS9w Y2kuaCIKCiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgojaW5jbHVk ZSA8YXNzZXJ0Lmg+CgpleHRlcm4gaW50IGdmeF9wYXNzdGhydTsKZXh0ZXJuIGludCBpZ2RfcGFz c3RocnU7CgpzdGF0aWMgdWludDMyX3QgaWdkX2d1ZXN0X29wcmVnaW9uID0gMDsKCnN0YXRpYyBp bnQgcGNoX21hcF9pcnEoUENJRGV2aWNlICpwY2lfZGV2LCBpbnQgaXJxX251bSkKewogICAgUFRf TE9HKCJwY2hfbWFwX2lycSBjYWxsZWRcbiIpOwogICAgcmV0dXJuIGlycV9udW07Cn0KCnZvaWQg aW50ZWxfcGNoX2luaXQoUENJQnVzICpidXMpCnsKICAgIHVpbnQxNl90IHZpZCwgZGlkOwogICAg dWludDhfdCAgcmlkOwogICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfMWY7CgogICAgaWYgKCAh Z2Z4X3Bhc3N0aHJ1ICkKICAgICAgICByZXR1cm47CgogICAgaWYgKCAhKHBjaV9kZXZfMWY9cHRf cGNpX2dldF9kZXYoMCwgMHgxZiwgMCkpICkKICAgIHsKICAgICAgICBQVF9FUlIoIkVycm9yOiBD YW4ndCBnZXQgcGNpX2Rldl9ob3N0X2JyaWRnZVxuIik7CiAgICAgICAgYWJvcnQoKTsKICAgIH0K CiAgICB2aWQgPSBwdF9wY2lfaG9zdF9yZWFkKHBjaV9kZXZfMWYsIFBDSV9WRU5ET1JfSUQsIDIp OwogICAgZGlkID0gcHRfcGNpX2hvc3RfcmVhZChwY2lfZGV2XzFmLCBQQ0lfREVWSUNFX0lELCAy KTsKICAgIHJpZCA9IHB0X3BjaV9ob3N0X3JlYWQocGNpX2Rldl8xZiwgUENJX1JFVklTSU9OLCAx KTsKCiAgICBpZiAodmlkID09IFBDSV9WRU5ET1JfSURfSU5URUwpIHsKICAgICAgICBwY2lfaXNh X2JyaWRnZV9pbml0KGJ1cywgUENJX0RFVkZOKDB4MWYsIDApLCB2aWQsIGRpZCwgcmlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGNoX21hcF9pcnEsICJpbnRlbF9icmlkZ2VfMWYiKTsK CiAgICB9Cn0KCnVpbnQzMl90IGlnZF9yZWFkX29wcmVnaW9uKHN0cnVjdCBwdF9kZXYgKnBjaV9k ZXYpCnsKICAgIHVpbnQzMl90IHZhbCA9IC0xOwoKICAgIGlmICggaWdkX2d1ZXN0X29wcmVnaW9u ID09IDAgKQogICAgICAgIHJldHVybiAtMTsKCiAgICB2YWwgPSBpZ2RfZ3Vlc3Rfb3ByZWdpb247 CiNpZmRlZiBQVF9ERUJVR19QQ0lfQ09ORklHX0FDQ0VTUwogICAgUFRfTE9HX0RFVigoUENJRGV2 aWNlKilwY2lfZGV2LCAiYWRkcj0leCBsZW49JXggdmFsPSV4XG4iLAogICAgICAgICAgICBQQ0lf SU5URUxfT1BSRUdJT04sIDQsIHZhbCk7CiNlbmRpZgogICAgcmV0dXJuIHZhbDsKfQoKdm9pZCBp Z2Rfd3JpdGVfb3ByZWdpb24oc3RydWN0IHB0X2RldiAqcmVhbF9kZXYsIHVpbnQzMl90IHZhbCkK ewogICAgdWludDMyX3QgaG9zdF9vcHJlZ2lvbiA9IDA7CiAgICBpbnQgcmV0OwoKICAgIGlmICgg aWdkX2d1ZXN0X29wcmVnaW9uICkKICAgIHsKICAgICAgICBQVF9MT0coIm9wcmVnaW9uIHJlZ2lz dGVyIGFscmVhZHkgYmVlbiBzZXQsIGlnbm9yaW5nICV4XG4iLCB2YWwpOwogICAgICAgIHJldHVy bjsKICAgIH0KCiAgICBob3N0X29wcmVnaW9uID0gcHRfcGNpX2hvc3RfcmVhZChyZWFsX2Rldi0+ cGNpX2RldiwgUENJX0lOVEVMX09QUkVHSU9OLCA0KTsKICAgIGlnZF9ndWVzdF9vcHJlZ2lvbiA9 ICh2YWwgJiB+MHhmZmYpIHwgKGhvc3Rfb3ByZWdpb24gJiAweGZmZik7CiAgICBQVF9MT0coIk1h cCBPcFJlZ2lvbjogJXggLT4gJXhcbiIsIGhvc3Rfb3ByZWdpb24sIGlnZF9ndWVzdF9vcHJlZ2lv bik7CgogICAgcmV0ID0geGNfZG9tYWluX21lbW9yeV9tYXBwaW5nKHhjX2hhbmRsZSwgZG9taWQs CiAgICAgICAgICAgIGlnZF9ndWVzdF9vcHJlZ2lvbiA+PiBYQ19QQUdFX1NISUZULAogICAgICAg ICAgICBob3N0X29wcmVnaW9uID4+IFhDX1BBR0VfU0hJRlQsCiAgICAgICAgICAgIDIsCiAgICAg ICAgICAgIERQQ0lfQUREX01BUFBJTkcpOwoKICAgIGlmICggcmV0ICE9IDAgKQogICAgewogICAg ICAgIFBUX0xPRygiRXJyb3I6IENhbid0IG1hcCBvcHJlZ2lvblxuIik7CiAgICAgICAgaWdkX2d1 ZXN0X29wcmVnaW9uID0gMDsKICAgIH0KI2lmZGVmIFBUX0RFQlVHX1BDSV9DT05GSUdfQUNDRVNT CiAgICBQVF9MT0dfREVWKChQQ0lEZXZpY2UqKXJlYWxfZGV2LCAiYWRkcj0leCBsZW49JWx4IHZh bD0leFxuIiwKICAgICAgICAgICAgUENJX0lOVEVMX09QUkVHSU9OLCBsZW4sIHZhbCk7CiNlbmRp ZgoKfQoKdm9pZCBpZ2RfcGNpX3dyaXRlKFBDSURldmljZSAqcGNpX2RldiwgdWludDMyX3QgY29u ZmlnX2FkZHIsIHVpbnQzMl90IHZhbCwgaW50IGxlbikKewogICAgc3RydWN0IHBjaV9kZXYgKnBj aV9kZXZfaG9zdF9icmlkZ2U7CiAgICBhc3NlcnQocGNpX2Rldi0+ZGV2Zm4gPT0gMHgwMCk7CiAg ICBpZiAoICFpZ2RfcGFzc3RocnUgKQogICAgICAgIGdvdG8gd3JpdGVfZGVmYXVsdDsKCiAgICBz d2l0Y2ggKGNvbmZpZ19hZGRyKQogICAgewogICAgICAgIGNhc2UgMHg1ODogICAgICAgIC8vIFBB VlBDIE9mZnNldAogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAg ICBnb3RvIHdyaXRlX2RlZmF1bHQ7CiAgICB9CgogICAgLyogSG9zdCB3cml0ZSAqLwogICAgaWYg KCAhKHBjaV9kZXZfaG9zdF9icmlkZ2UgPSBwdF9wY2lfZ2V0X2RldigwLCAwLCAwKSkgKQogICAg ewogICAgICAgIFBUX0VSUigiRXJyb3I6IENhbid0IGdldCBwY2lfZGV2X2hvc3RfYnJpZGdlXG4i KTsKICAgICAgICBhYm9ydCgpOwogICAgfQoKICAgIHB0X3BjaV9ob3N0X3dyaXRlKHBjaV9kZXZf aG9zdF9icmlkZ2UsIGNvbmZpZ19hZGRyLCB2YWwsIGxlbik7CiNpZmRlZiBQVF9ERUJVR19QQ0lf Q09ORklHX0FDQ0VTUwogICAgUFRfTE9HX0RFVihwY2lfZGV2LCAiYWRkcj0leCBsZW49JXggdmFs PSV4XG4iLAogICAgICAgICAgICAgICBjb25maWdfYWRkciwgbGVuLCB2YWwpOwojZW5kaWYKICAg IHJldHVybjsKCndyaXRlX2RlZmF1bHQ6CiAgICBwY2lfZGVmYXVsdF93cml0ZV9jb25maWcocGNp X2RldiwgY29uZmlnX2FkZHIsIHZhbCwgbGVuKTsKfQoKdWludDMyX3QgaWdkX3BjaV9yZWFkKFBD SURldmljZSAqcGNpX2RldiwgdWludDMyX3QgY29uZmlnX2FkZHIsIGludCBsZW4pCnsKICAgIHN0 cnVjdCBwY2lfZGV2ICpwY2lfZGV2X2hvc3RfYnJpZGdlOwogICAgdWludDMyX3QgdmFsOwoKICAg IGFzc2VydChwY2lfZGV2LT5kZXZmbiA9PSAweDAwKTsKICAgIGlmICggIWlnZF9wYXNzdGhydSAp CiAgICAgICAgZ290byByZWFkX2RlZmF1bHQ7CgogICAgc3dpdGNoIChjb25maWdfYWRkcikKICAg IHsKICAgICAgICBjYXNlIDB4MDA6ICAgICAgICAvKiB2ZW5kb3IgaWQgKi8KICAgICAgICBjYXNl IDB4MDI6ICAgICAgICAvKiBkZXZpY2UgaWQgKi8KICAgICAgICBjYXNlIDB4MDg6ICAgICAgICAv KiByZXZpc2lvbiBpZCAqLwogICAgICAgIGNhc2UgMHgyYzogICAgICAgIC8qIHN5YnN5c3RlbSB2 ZW5kb3IgaWQgKi8KICAgICAgICBjYXNlIDB4MmU6ICAgICAgICAvKiBzeWJzeXN0ZW0gaWQgKi8K ICAgICAgICBjYXNlIDB4NTA6ICAgICAgICAvKiBTTkI6IHByb2Nlc3NvciBncmFwaGljcyBjb250 cm9sIHJlZ2lzdGVyICovCiAgICAgICAgY2FzZSAweDUyOiAgICAgICAgLyogcHJvY2Vzc29yIGdy YXBoaWNzIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICAgICAgICBjYXNlIDB4YTA6ICAgICAgICAvKiB0 b3Agb2YgbWVtb3J5ICovCiAgICAgICAgY2FzZSAweGIwOiAgICAgICAgLyogSUxLOiBCU006IHNo b3VsZCByZWFkIGZyb20gZGV2IDIgb2Zmc2V0IDB4NWMgKi8KICAgICAgICBjYXNlIDB4NTg6ICAg ICAgICAvKiBTTkI6IFBBVlBDIE9mZnNldCAqLwogICAgICAgIGNhc2UgMHhhNDogICAgICAgIC8q IFNOQjogZ3JhcGhpY3MgYmFzZSBvZiBzdG9sZW4gbWVtb3J5ICovCiAgICAgICAgY2FzZSAweGE4 OiAgICAgICAgLyogU05COiBiYXNlIG9mIEdUVCBzdG9sZW4gbWVtb3J5ICovCiAgICAgICAgICAg IGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGdvdG8gcmVhZF9kZWZhdWx0Owog ICAgfQoKICAgIC8qIEhvc3QgcmVhZCAqLwogICAgaWYgKCAhKHBjaV9kZXZfaG9zdF9icmlkZ2Ug PSBwdF9wY2lfZ2V0X2RldigwLCAwLCAwKSkgKQogICAgewogICAgICAgIFBUX0VSUigiRXJyb3I6 IENhbid0IGdldCBwY2lfZGV2X2hvc3RfYnJpZGdlXG4iKTsKICAgICAgICBhYm9ydCgpOwogICAg fQoKICAgIHZhbCA9IHB0X3BjaV9ob3N0X3JlYWQocGNpX2Rldl9ob3N0X2JyaWRnZSwgY29uZmln X2FkZHIsIGxlbik7CiNpZmRlZiBQVF9ERUJVR19QQ0lfQ09ORklHX0FDQ0VTUwogICAgUFRfTE9H X0RFVihwY2lfZGV2LCAiYWRkcj0leCBsZW49JXggdmFsPSV4XG4iLAogICAgICAgICAgICAgICBj b25maWdfYWRkciwgbGVuLCB2YWwpOwojZW5kaWYKICAgIHJldHVybiB2YWw7CiAgIApyZWFkX2Rl ZmF1bHQ6CiAgIAogICByZXR1cm4gcGNpX2RlZmF1bHRfcmVhZF9jb25maWcocGNpX2RldiwgY29u ZmlnX2FkZHIsIGxlbik7Cn0KCi8qCiAqIHJlZ2lzdGVyIFZHQSByZXNvdXJjZXMgZm9yIHRoZSBk b21haW4gd2l0aCBhc3NpZ25lZCBnZngKICovCmludCByZWdpc3Rlcl92Z2FfcmVnaW9ucyhzdHJ1 Y3QgcHRfZGV2ICpyZWFsX2RldmljZSkKewogICAgdTE2IHZlbmRvcl9pZDsKICAgIGludCByZXQg PSAwOwoKICAgIGlmICggIWdmeF9wYXNzdGhydSB8fCByZWFsX2RldmljZS0+cGNpX2Rldi0+ZGV2 aWNlX2NsYXNzICE9IDB4MDMwMCApCiAgICAgICAgcmV0dXJuIHJldDsKCiAgICByZXQgfD0geGNf ZG9tYWluX2lvcG9ydF9tYXBwaW5nKHhjX2hhbmRsZSwgZG9taWQsIDB4M0IwLAogICAgICAgICAg ICAweDNCMCwgMHhDLCBEUENJX0FERF9NQVBQSU5HKTsKCiAgICByZXQgfD0geGNfZG9tYWluX2lv cG9ydF9tYXBwaW5nKHhjX2hhbmRsZSwgZG9taWQsIDB4M0MwLAogICAgICAgICAgICAweDNDMCwg MHgyMCwgRFBDSV9BRERfTUFQUElORyk7CgogICAgcmV0IHw9IHhjX2RvbWFpbl9tZW1vcnlfbWFw cGluZyh4Y19oYW5kbGUsIGRvbWlkLAogICAgICAgICAgICAweGEwMDAwID4+IFhDX1BBR0VfU0hJ RlQsCiAgICAgICAgICAgIDB4YTAwMDAgPj4gWENfUEFHRV9TSElGVCwKICAgICAgICAgICAgMHgy MCwKICAgICAgICAgICAgRFBDSV9BRERfTUFQUElORyk7CgogICAgaWYgKCByZXQgIT0gMCApCiAg ICAgICAgUFRfTE9HKCJWR0EgcmVnaW9uIG1hcHBpbmcgZmFpbGVkXG4iKTsKCiAgICByZXR1cm4g cmV0Owp9CgovKgogKiB1bnJlZ2lzdGVyIFZHQSByZXNvdXJjZXMgZm9yIHRoZSBkb21haW4gd2l0 aCBhc3NpZ25lZCBnZngKICovCmludCB1bnJlZ2lzdGVyX3ZnYV9yZWdpb25zKHN0cnVjdCBwdF9k ZXYgKnJlYWxfZGV2aWNlKQp7CiAgICB1MzIgdmVuZG9yX2lkOwogICAgaW50IHJldCA9IDA7Cgog ICAgaWYgKCAhZ2Z4X3Bhc3N0aHJ1IHx8IHJlYWxfZGV2aWNlLT5wY2lfZGV2LT5kZXZpY2VfY2xh c3MgIT0gMHgwMzAwICkKICAgICAgICByZXR1cm4gcmV0OwoKICAgIHJldCB8PSB4Y19kb21haW5f aW9wb3J0X21hcHBpbmcoeGNfaGFuZGxlLCBkb21pZCwgMHgzQjAsCiAgICAgICAgICAgIDB4M0Iw LCAweEMsIERQQ0lfUkVNT1ZFX01BUFBJTkcpOwoKICAgIHJldCB8PSB4Y19kb21haW5faW9wb3J0 X21hcHBpbmcoeGNfaGFuZGxlLCBkb21pZCwgMHgzQzAsCiAgICAgICAgICAgIDB4M0MwLCAweDIw LCBEUENJX1JFTU9WRV9NQVBQSU5HKTsKCiAgICByZXQgfD0geGNfZG9tYWluX21lbW9yeV9tYXBw aW5nKHhjX2hhbmRsZSwgZG9taWQsCiAgICAgICAgICAgIDB4YTAwMDAgPj4gWENfUEFHRV9TSElG VCwKICAgICAgICAgICAgMHhhMDAwMCA+PiBYQ19QQUdFX1NISUZULAogICAgICAgICAgICAyMCwK ICAgICAgICAgICAgRFBDSV9SRU1PVkVfTUFQUElORyk7CgogICAgdmVuZG9yX2lkID0gcHRfcGNp X2hvc3RfcmVhZChyZWFsX2RldmljZS0+cGNpX2RldiwgUENJX1ZFTkRPUl9JRCwgMik7CiAgICBp ZiAoICh2ZW5kb3JfaWQgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkgJiYgaWdkX2d1ZXN0X29wcmVn aW9uICkKICAgIHsKICAgICAgICByZXQgfD0geGNfZG9tYWluX21lbW9yeV9tYXBwaW5nKHhjX2hh bmRsZSwgZG9taWQsCiAgICAgICAgICAgICAgICBpZ2RfZ3Vlc3Rfb3ByZWdpb24gPj4gWENfUEFH RV9TSElGVCwKICAgICAgICAgICAgICAgIGlnZF9ndWVzdF9vcHJlZ2lvbiA+PiBYQ19QQUdFX1NI SUZULAogICAgICAgICAgICAgICAgMiwKICAgICAgICAgICAgICAgIERQQ0lfUkVNT1ZFX01BUFBJ TkcpOwogICAgfQoKICAgIGlmICggcmV0ICE9IDAgKQogICAgICAgIFBUX0xPRygiVkdBIHJlZ2lv biB1bm1hcHBpbmcgZmFpbGVkXG4iKTsKCiAgICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgaW50IGdl dF92Z2FiaW9zKHVuc2lnbmVkIGNoYXIgKmJ1ZikKewogICAgaW50IGZkOwogICAgdWludDMyX3Qg Ymlvc19zaXplID0gMDsKICAgIHVpbnQzMl90IHN0YXJ0ID0gMHhDMDAwMDsKICAgIHVpbnQxNl90 IG1hZ2ljID0gMDsKCiAgICBpZiAoIChmZCA9IG9wZW4oIi9kZXYvbWVtIiwgT19SRE9OTFkpKSA8 IDAgKQogICAgewogICAgICAgIFBUX0xPRygiRXJyb3I6IENhbid0IG9wZW4gL2Rldi9tZW06ICVz XG4iLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIC8qCiAg ICAgKiBDaGVjayBpZiBpdCBhIHJlYWwgYmlvcyBleHRlbnNpb24uCiAgICAgKiBUaGUgbWFnaWMg bnVtYmVyIGlzIDB4QUE1NS4KICAgICAqLwogICAgaWYgKCBzdGFydCAhPSBsc2VlayhmZCwgc3Rh cnQsIFNFRUtfU0VUKSApCiAgICAgICAgZ290byBvdXQ7CiAgICBpZiAoIHJlYWQoZmQsICZtYWdp YywgMikgIT0gMiApCiAgICAgICAgZ290byBvdXQ7CiAgICBpZiAoIG1hZ2ljICE9IDB4QUE1NSAp CiAgICAgICAgZ290byBvdXQ7CgogICAgLyogRmluZCB0aGUgc2l6ZSBvZiB0aGUgcm9tIGV4dGVu c2lvbiAqLwogICAgaWYgKCBzdGFydCAhPSBsc2VlayhmZCwgc3RhcnQsIFNFRUtfU0VUKSApCiAg ICAgICAgZ290byBvdXQ7CiAgICBpZiAoIGxzZWVrKGZkLCAyLCBTRUVLX0NVUikgIT0gKHN0YXJ0 ICsgMikgKQogICAgICAgIGdvdG8gb3V0OwogICAgaWYgKCByZWFkKGZkLCAmYmlvc19zaXplLCAx KSAhPSAxICkKICAgICAgICBnb3RvIG91dDsKCiAgICAvKiBUaGlzIHNpemUgaXMgaW4gNTEyIGJ5 dGVzICovCiAgICBiaW9zX3NpemUgKj0gNTEyOwoKICAgIC8qCiAgICAgKiBTZXQgdGhlIGZpbGUg dG8gdGhlIGJlZ2luaW5nIG9mIHRoZSByb21iaW9zLAogICAgICogdG8gc3RhcnQgdGhlIGNvcHku CiAgICAgKi8KICAgIGlmICggc3RhcnQgIT0gbHNlZWsoZmQsIHN0YXJ0LCBTRUVLX1NFVCkgKQog ICAgICAgIGdvdG8gb3V0OwoKICAgIGlmICggYmlvc19zaXplICE9IHJlYWQoZmQsIGJ1ZiwgYmlv c19zaXplKSkKICAgICAgICBiaW9zX3NpemUgPSAwOwoKb3V0OgogICAgY2xvc2UoZmQpOwogICAg cmV0dXJuIGJpb3Nfc2l6ZTsKfQoKaW50IHNldHVwX3ZnYV9wdChzdHJ1Y3QgcHRfZGV2ICpyZWFs X2RldmljZSkKewogICAgdW5zaWduZWQgY2hhciAqYmlvcyA9IE5VTEw7CiAgICBpbnQgYmlvc19z aXplID0gMDsKICAgIGNoYXIgKmMgPSBOVUxMOwogICAgY2hhciBjaGVja3N1bSA9IDA7CiAgICBp bnQgcmMgPSAwOwoKICAgIGlmICggIWdmeF9wYXNzdGhydSB8fCByZWFsX2RldmljZS0+cGNpX2Rl di0+ZGV2aWNlX2NsYXNzICE9IDB4MDMwMCApCiAgICAgICAgcmV0dXJuIHJjOwoKICAgIC8qIEFs bG9jYXRlZCA2NEsgZm9yIHRoZSB2Z2EgYmlvcyAqLwogICAgaWYgKCAhKGJpb3MgPSBtYWxsb2Mo NjQgKiAxMDI0KSkgKQogICAgICAgIHJldHVybiAtMTsKCiAgICBiaW9zX3NpemUgPSBnZXRfdmdh YmlvcyhiaW9zKTsKICAgIGlmICggYmlvc19zaXplID09IDAgfHwgYmlvc19zaXplID4gNjQgKiAx MDI0KQogICAgewogICAgICAgIFBUX0xPRygidmdhIGJpb3Mgc2l6ZSAoMHgleCkgaXMgaW52YWxp ZCFcbiIsIGJpb3Nfc2l6ZSk7CiAgICAgICAgcmMgPSAtMTsKICAgICAgICBnb3RvIG91dDsKICAg IH0KCiAgICAvKiBBZGp1c3QgdGhlIGJpb3MgY2hlY2tzdW0gKi8KICAgIGZvciAoIGMgPSAoY2hh ciopYmlvczsgYyA8ICgoY2hhciopYmlvcyArIGJpb3Nfc2l6ZSk7IGMrKyApCiAgICAgICAgY2hl Y2tzdW0gKz0gKmM7CiAgICBpZiAoIGNoZWNrc3VtICkKICAgIHsKICAgICAgICBiaW9zW2Jpb3Nf c2l6ZSAtIDFdIC09IGNoZWNrc3VtOwogICAgICAgIFBUX0xPRygidmdhIGJpb3MgY2hlY2tzdW0g aXMgYWRqdXN0ZWQhXG4iKTsKICAgIH0KCiAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3J3KDB4YzAw MDAsIGJpb3MsIGJpb3Nfc2l6ZSwgMSk7Cm91dDoKICAgIGZyZWUoYmlvcyk7CiAgICByZXR1cm4g cmM7Cn0K --_002_003AAFE53969E14CB1F09B6FD68C3CD47BB75E56ORSMSX106amrcor_--