From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [RFC] ARM PCI Passthrough design document Date: Fri, 26 May 2017 18:14:09 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dEIoa-00036x-Qr for xen-devel@lists.xenproject.org; Fri, 26 May 2017 17:14:17 +0000 Received: by mail-wm0-f48.google.com with SMTP id m7so7331090wmg.0 for ; Fri, 26 May 2017 10:14:14 -0700 (PDT) List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: edgar.iglesias@xilinx.com, punit.agrawal@arm.com, Wei Chen , Steve Capper , Andre Przywara , manish.jaggi@caviumnetworks.com, Julien Grall , vikrams@qti.qualcomm.com, okaya@qti.qualcomm.com, "Goel, Sameer" , xen-devel , Dave P Martin , Vijaya Kumar K , roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org SGkgYWxsLAoKVGhlIGRvY3VtZW50IGJlbG93IGlzIGFuIFJGQyB2ZXJzaW9uIG9mIGEgZGVzaWdu IHByb3Bvc2FsIGZvciBQQ0kKUGFzc3Rocm91Z2ggaW4gWGVuIG9uIEFSTS4gSXQgYWltcyB0byBk ZXNjcmliZSBmcm9tIGFuIGhpZ2ggbGV2ZWwgcGVyc3BlY3RpdmUKdGhlIGludGVyYWN0aW9uIHdp dGggdGhlIGRpZmZlcmVudCBzdWJzeXN0ZW1zIGFuZCBob3cgZ3Vlc3Qgd2lsbCBiZSBhYmxlCnRv IGRpc2NvdmVyIGFuZCBhY2Nlc3MgUENJLgoKQ3VycmVudGx5IG9uIEFSTSwgWGVuIGRvZXMgbm90 IGhhdmUgYW55IGtub3dsZWRnZSBhYm91dCBQQ0kgZGV2aWNlcy4gVGhpcwptZWFucyB0aGF0IElP TU1VIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlciAoc3VjaCBhcyBJVFMpIHJlcXVpcmluZyBzcGVj aWZpYwpjb25maWd1cmF0aW9uIHdpbGwgbm90IHdvcmsgd2l0aCBQQ0kgZXZlbiB3aXRoIERPTTAu CgpUaGUgUENJIFBhc3N0aHJvdWdoIHdvcmsgY291bGQgYmUgZGl2aWRlZCBpbiAyIHBoYXNlczoK ICAgICAgICAqIFBoYXNlIDE6IFJlZ2lzdGVyIGFsbCBQQ0kgZGV2aWNlcyBpbiBYZW4gPT4gd2ls bCBhbGxvdwogICAgICAgICAgICAgICAgICAgdG8gdXNlIElUUyBhbmQgU01NVSB3aXRoIFBDSSBp biBYZW4KICAgICAgICAqIFBoYXNlIDI6IEFzc2lnbiBkZXZpY2VzIHRvIGd1ZXN0cwoKVGhpcyBk b2N1bWVudCBhaW1zIHRvIGRlc2NyaWJlIHRoZSAyIHBoYXNlcywgYnV0IGZvciBub3cgb25seSBw aGFzZQoxIGlzIGZ1bGx5IGRlc2NyaWJlZC4KCgpJIHRoaW5rIEkgd2FzIGFibGUgdG8gZ2F0aGVy IGFsbCBvZiB0aGUgZmVlZGJhY2tzIGFuZCBjb21lIHVwIHdpdGggYSBzb2x1dGlvbgp0aGF0IHdp bGwgc2F0aXNmeSBhbGwgdGhlIHBhcnRpZXMuIFRoZSBkZXNpZ24gZG9jdW1lbnQgaGFzIGNoYW5n ZWQgcXVpdGUgYSBsb3QKY29tcGFyZSB0byB0aGUgZWFybHkgZHJhZnQgc2VudCBmZXcgbW9udGhz IGFnby4gVGhlIG1ham9yIGNoYW5nZXMgYXJlOgoJKiBQcm92aWRlIG1vcmUgZGV0YWlscyBob3cg UENJIHdvcmtzIG9uIEFSTSBhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoCglNU0kgY29udHJvbGxl ciBhbmQgSU9NTVUKCSogUHJvdmlkZSBkZXRhaWxzIG9uIHRoZSBleGlzdGluZyBob3N0IGJyaWRn ZSBpbXBsZW1lbnRhdGlvbnMKCSogR2l2ZSBtb3JlIGV4cGxhbmF0aW9uIGFuZCBqdXN0aWZpY2F0 aW9ucyBvbiB0aGUgYXBwcm9hY2ggY2hvc2VuIAoJKiBEZXNjcmliaW5nIHRoZSBoeXBlcmNhbGxz IHVzZWQgYW5kIGhvdyB0aGV5IHNob3VsZCBiZSBjYWxsZWQKCkZlZWRiYWNrcyBhcmUgd2VsY29t ZWQuCgpDaGVlcnMsCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKJSBQQ0kgcGFzcy10aHJvdWdo IHN1cHBvcnQgb24gQVJNCiUgSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAbGluYXJvLm9yZz4K JSBEcmFmdCBCCgojIFByZWZhY2UKClRoaXMgZG9jdW1lbnQgYWltcyB0byBkZXNjcmliZSB0aGUg Y29tcG9uZW50cyByZXF1aXJlZCB0byBlbmFibGUgdGhlIFBDSQpwYXNzLXRocm91Z2ggb24gQVJN LgoKVGhpcyBpcyBhbiBlYXJseSBkcmFmdCBhbmQgc29tZSBxdWVzdGlvbnMgYXJlIHN0aWxsIHVu YW5zd2VyZWQuIFdoZW4gdGhpcyBpcwp0aGUgY2FzZSwgdGhlIHRleHQgd2lsbCBjb250YWluIFhY WC4KCiMgSW50cm9kdWN0aW9uCgpQQ0kgcGFzcy10aHJvdWdoIGFsbG93cyB0aGUgZ3Vlc3QgdG8g cmVjZWl2ZSBmdWxsIGNvbnRyb2wgb2YgcGh5c2ljYWwgUENJCmRldmljZXMuIFRoaXMgbWVhbnMg dGhlIGd1ZXN0IHdpbGwgaGF2ZSBmdWxsIGFuZCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBQQ0kKZGV2 aWNlLgoKQVJNIGlzIHN1cHBvcnRpbmcgYSBraW5kIG9mIGd1ZXN0IHRoYXQgZXhwbG9pdHMgYXMg bXVjaCBhcyBwb3NzaWJsZQp2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGluIGhhcmR3YXJlLiBUaGUg Z3Vlc3Qgd2lsbCByZWx5IG9uIFBWIGRyaXZlciBvbmx5CmZvciBJTyAoZS5nIGJsb2NrLCBuZXR3 b3JrKSBhbmQgaW50ZXJydXB0cyB3aWxsIGNvbWUgdGhyb3VnaCB0aGUgdmlydHVhbGl6ZWQKaW50 ZXJydXB0IGNvbnRyb2xsZXIsIHRoZXJlZm9yZSB0aGVyZSBhcmUgbm8gYmlnIGNoYW5nZXMgcmVx dWlyZWQgd2l0aGluIHRoZQprZXJuZWwuCgpBcyBhIGNvbnNlcXVlbmNlLCBpdCB3b3VsZCBiZSBw b3NzaWJsZSB0byByZXBsYWNlIFBWIGRyaXZlcnMgYnkgYXNzaWduaW5nIHJlYWwKZGV2aWNlcyB0 byB0aGUgZ3Vlc3QgZm9yIEkvTyBhY2Nlc3MuIFhlbiBvbiBBUk0gd291bGQgdGhlcmVmb3JlIGJl IGFibGUgdG8KcnVuIHVubW9kaWZpZWQgb3BlcmF0aW5nIHN5c3RlbS4KClRvIGFjaGlldmUgdGhp cyBnb2FsLCBpdCBsb29rcyBtb3JlIHNlbnNpYmxlIHRvIGdvIHRvd2FyZHMgZW11bGF0aW5nIHRo ZQpob3N0IGJyaWRnZSAodGhlcmUgd2lsbCBiZSBtb3JlIGRldGFpbHMgbGF0ZXIpLiBBIGd1ZXN0 IHdvdWxkIGJlIGFibGUgdG8gdGFrZQphZHZhbnRhZ2Ugb2YgdGhlIGZpcm13YXJlIHRhYmxlcywg b2J2aWF0aW5nIHRoZSBuZWVkIGZvciBhIHNwZWNpZmljIGRyaXZlcgpmb3IgWGVuLgoKVGh1cywg aW4gdGhpcyBkb2N1bWVudCB3ZSBmb2xsb3cgdGhlIGVtdWxhdGVkIGhvc3QgYnJpZGdlIGFwcHJv YWNoLgoKIyBQQ0kgdGVybWlub2xvZ2llcwoKRWFjaCBQQ0kgZGV2aWNlIHVuZGVyIGEgaG9zdCBi cmlkZ2UgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieSBpdHMgUmVxdWVzdGVyIElECihBS0EgUklE KS4gQSBSZXF1ZXN0ZXIgSUQgaXMgYSB0cmlwbGV0IG9mIEJ1cyBudW1iZXIsIERldmljZSBudW1i ZXIsIGFuZApGdW5jdGlvbi4KCldoZW4gdGhlIHBsYXRmb3JtIGhhcyBtdWx0aXBsZSBob3N0IGJy aWRnZXMsIHRoZSBzb2Z0d2FyZSBjYW4gYWRkIGEgZm91cnRoCm51bWJlciBjYWxsZWQgU2VnbWVu dCAoc29tZXRpbWVzIGNhbGxlZCBEb21haW4pIHRvIGRpZmZlcmVudGlhdGUgaG9zdCBicmlkZ2Vz LgpBIFBDSSBkZXZpY2Ugd2lsbCB0aGVuIHVuaXF1ZWx5IGJ5IHNlZ21lbnQ6YnVzOmRldmljZTpm dW5jdGlvbiAoQUtBIFNCREYpLgoKU28gZ2l2ZW4gYSBzcGVjaWZpYyBTQkRGLCBpdCB3b3VsZCBi ZSBwb3NzaWJsZSB0byBmaW5kIHRoZSBob3N0IGJyaWRnZSBhbmQgdGhlClJJRCBhc3NvY2lhdGVk IHRvIGEgUENJIGRldmljZS4gVGhlIHBhaXIgKGhvc3QgYnJpZGdlLCBSSUQpIHdpbGwgb2Z0ZW4g YmUgdXNlZAp0byBmaW5kIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgY29uZmlndXJpbmcg dGhlIGRpZmZlcmVudCBzdWJzeXN0ZW1zIChlLmcKSU9NTVUsIE1TSSBjb250cm9sbGVyKS4gRm9y IGNvbnZlbmllbmNlLCB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQgd2lsbCB1c2UKU0JERiB0byBy ZWZlciB0byB0aGUgcGFpciAoaG9zdCBicmlkZ2UsIFJJRCkuCgojIFBDSSBob3N0IGJyaWRnZQoK UENJIGhvc3QgYnJpZGdlIGVuYWJsZXMgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIGEgaG9zdCBwcm9j ZXNzb3IgYW5kIFBDSSBidXMKYmFzZWQgZGV2aWNlcy4gVGhlIGJyaWRnZSBpcyB1c2VkIHRvIGFj Y2VzcyB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBvZiBlYWNoClBDSSBkZXZpY2VzIGFuZCwgb24g c29tZSBwbGF0Zm9ybSBtYXkgYWxzbyBhY3QgYXMgYW4gTVNJIGNvbnRyb2xsZXIuCgojIyBJbml0 aWFsaXphdGlvbiBvZiB0aGUgUENJIGhvc3QgYnJpZGdlCgpXaGlsc3QgaXQgd291bGQgYmUgZXhw ZWN0ZWQgdGhhdCB0aGUgYm9vdGxvYWRlciB0YWtlcyBjYXJlIG9mIGluaXRpYWxpemluZwp0aGUg UENJIGhvc3QgYnJpZGdlLCBvbiBzb21lIHBsYXRmb3JtcyBpdCBpcyBkb25lIGluIHRoZSBPcGVy YXRpbmcgU3lzdGVtLgoKVGhpcyBtYXkgaW5jbHVkZSBlbmFibGluZy9jb25maWd1cmluZyB0aGUg Y2xvY2tzIHRoYXQgY291bGQgYmUgc2hhcmVkIGFtb25nCm11bHRpcGxlIGRldmljZXMuCgojIyBB Y2Nlc3NpbmcgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UKCkFjY2Vzc2luZyB0aGUgUENJIGNvbmZp Z3VyYXRpb24gc3BhY2UgY2FuIGJlIGRpdmlkZWQgaW4gMiBjYXRlZ29yeToKICAgICogSW5kaXJl Y3QgYWNjZXNzLCB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBzcGFjZXMgYXJlIG11bHRpcGxleGVk LiBBbgogICAgZXhhbXBsZSB3b3VsZCBiZSBsZWdhY3kgbWV0aG9kIG9uIHg4NiAoZS5nIDB4Y2Y4 IGFuZCAweGNmYykuIE9uIEFSTSBhCiAgICBzaW1pbGFyIG1ldGhvZCBpcyB1c2VkIGJ5IFBDSWUg UkNhciByb290IGNvbXBsZXggKHNlZSBbMTJdKS4KICAgICogRUNBTSBhY2Nlc3MsIGVhY2ggY29u ZmlndXJhdGlvbiBzcGFjZSB3aWxsIGhhdmUgaXRzIG93biBhZGRyZXNzIHNwYWNlLgoKV2hpbHN0 IEVDQU0gaXMgYSBzdGFuZGFyZCwgc29tZSBQQ0kgaG9zdCBicmlkZ2VzIHdpbGwgcmVxdWlyZSBz cGVjaWZpYyBmaWRkbGluZwp3aGVuIGFjY2VzcyB0aGUgcmVnaXN0ZXJzIChzZWUgdGh1bmRlci1l Y2FtIFsxM10pLgoKSW4gbW9zdCBvZiB0aGUgY2FzZXMsIGFjY2Vzc2luZyBhbGwgdGhlIFBDSSBj b25maWd1cmF0aW9uIHNwYWNlcyB1bmRlciBhCmdpdmVuIFBDSSBob3N0IHdpbGwgYmUgZG9uZSB0 aGUgc2FtZSB3YXkgKGkuZSBlaXRoZXIgaW5kaXJlY3QgYWNjZXNzIG9yIEVDQU0KYWNjZXNzKS4g SG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IGNhc2VzLCBkZXBlbmRlbnQgb24gdGhlIFBDSSBkZXZp Y2VzIGFjY2Vzc2VkLAp3aGljaCB3aWxsIHVzZSBkaWZmZXJlbnQgbWV0aG9kcyAoc2VlIHRodW5k ZXItcGVtIFsxNF0pLgoKIyMgR2VuZXJpYyBob3N0IGJyaWRnZQoKRm9yIHRoZSBwdXJwb3NlIG9m IHRoaXMgZG9jdW1lbnQsIHRoZSB0ZXJtICJnZW5lcmljIGhvc3QgYnJpZGdlIiB3aWxsIGJlIHVz ZWQKdG8gZGVzY3JpYmUgYW55IGhvc3QgYnJpZGdlIEVDQU0tY29tcGxpYW50IGFuZCB0aGUgaW5p dGlhbGl6YXRpb24sIGlmIHJlcXVpcmVkLAp3aWxsIGJlIGFscmVhZHkgZG9uZSBieSB0aGUgZmly bXdhcmUvYm9vdGxvYWRlci4KCiMgSW50ZXJhY3Rpb24gb2YgdGhlIFBDSSBzdWJzeXN0ZW0gd2l0 aCBvdGhlciBzdWJzeXN0ZW1zCgpJbiBvcmRlciB0byBoYXZlIGEgUENJIGRldmljZSBmdWxseSB3 b3JraW5nLCBYZW4gd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZQpvdGhlciBzdWJzeXN0ZW1zIHN1Y2gg YXMgdGhlIElPTU1VIGFuZCB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIuCgpUaGUgaW50ZXJhY3Rp b24gZXhwZWN0ZWQgYmV0d2VlbiB0aGUgUENJIHN1YnN5c3RlbSBhbmQgdGhlIG90aGVyIHN1YnN5 c3RlbXMgaXM6CiAgICAqIEFkZCBhIGRldmljZQogICAgKiBSZW1vdmUgYSBkZXZpY2UKICAgICog QXNzaWduIGEgZGV2aWNlIHRvIGEgZ3Vlc3QKICAgICogRGVhc3NpZ24gYSBkZXZpY2UgZnJvbSBh IGd1ZXN0CgpYWFg6IERldGFpbCB0aGUgaW50ZXJhY3Rpb24gd2hlbiBhc3NpZ25pbmcvZGVhc3Np Z25pbmcgZGV2aWNlCgpJbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLCB0aGUgaW50ZXJhY3Rp b25zIHdpbGwgYmUgYnJpZWZseSBkZXNjcmliZWQgZnJvbSBhCmhpZ2hlciBsZXZlbCBwZXJzcGVj dGl2ZS4gSG93ZXZlciwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBzdWNoIGFzIGNhbGxiYWNrLApz dHJ1Y3R1cmUsIGV0Yy4uLiBhcmUgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgoK IyMgSU9NTVUKClRoZSBJT01NVSB3aWxsIGJlIHVzZWQgdG8gaXNvbGF0ZSB0aGUgUENJIGRldmlj ZSB3aGVuIGFjY2Vzc2luZyB0aGUgbWVtb3J5IChlLmcKRE1BIGFuZCBNU0kgRG9vcmJlbGxzKS4g T2Z0ZW4gdGhlIElPTU1VIHdpbGwgYmUgY29uZmlndXJlZCB1c2luZyBhIE1hc3RlcklECihha2Eg U3RyZWFtSUQgZm9yIEFSTSBTTU1VKSAgdGhhdCBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZSBTQkRG IHdpdGggdGhlIGhlbHAKb2YgdGhlIGZpcm13YXJlIHRhYmxlcyAoc2VlIGJlbG93KS4KCldoaWxz dCBpbiB0aGVvcnksIGFsbCB0aGUgbWVtb3J5IHRyYW5zYWN0aW9ucyBpc3N1ZWQgYnkgYSBQQ0kg ZGV2aWNlIHNob3VsZApnbyB0aHJvdWdoIHRoZSBJT01NVSwgb24gY2VydGFpbiBwbGF0Zm9ybXMg c29tZSBvZiB0aGUgbWVtb3J5IHRyYW5zYWN0aW9uIG1heQpub3QgcmVhY2ggdGhlIElPTU1VIGJl Y2F1c2UgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYnkgdGhlIGhvc3QgYnJpZGdlLiBGb3IKaW5zdGFu Y2UsIHRoaXMgY291bGQgaGFwcGVuIGlmIHRoZSBNU0kgZG9vcmJlbGwgaXMgYnVpbHQgaW50byB0 aGUgUENJIGhvc3QKYnJpZGdlIG9yIGZvciBQMlAgdHJhZmZpYy4gU2VlIFs2XSBmb3IgbW9yZSBk ZXRhaWxzLgoKWFhYOiBJIHRoaW5rIHRoaXMgY291bGQgYmUgc29sdmVkIGJ5IHVzaW5nIGRpcmVj dCBtYXBwaW5nIChlLmcgR0ZOID09IE1GTiksCnRoaXMgd291bGQgbWVhbiB0aGUgZ3Vlc3QgbWVt b3J5IGxheW91dCB3b3VsZCBiZSBzaW1pbGFyIHRvIHRoZSBob3N0IG9uZSB3aGVuClBDSSBkZXZp Y2VzIHdpbGwgYmUgcGFzcy10aHJvdWdoZWQgPT4gRGV0YWlsIGl0LgoKIyMgSW50ZXJydXB0IGNv bnRyb2xsZXIKClBDSSBzdXBwb3J0cyB0aHJlZSBraW5kIG9mIGludGVycnVwdHM6IGxlZ2FjeSBp bnRlcnJ1cHQsIE1TSSBhbmQgTVNJLVguIE9uIEFSTSwKbGVnYWN5IGludGVycnVwdHMgd2lsbCBi ZSBtYXBwZWQgdG8gU1BJcy4gTVNJIGFuZCBNU0ktWCB3aWxsIHdyaXRlIHRoZWlyCnBheWxvYWQg aW4gYSBkb29yYmVsbCBiZWxvbmdpbmcgdG8gYSBNU0kgY29udHJvbGxlci4KCiMjIyBFeGlzdGlu ZyBNU0kgY29udHJvbGxlcnMKCkluIHRoaXMgc2VjdGlvbiBzb21lIG9mIHRoZSBleGlzdGluZyBj b250cm9sbGVycyBhbmQgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aAp0aGUgZGV2aWNlcyB3aWxsIGJl IGJyaWVmbHkgZGVzY3JpYmVkLiBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZQpyZXNw ZWN0aXZlIHNwZWNpZmljYXRpb25zIG9mIGVhY2ggTVNJIGNvbnRyb2xsZXIuCgpNU0lzIGNhbiBi ZSBkaXN0aW5ndWlzaGVkIGJ5IHNvbWUgY29tYmluYXRpb24gb2YKICAgICogdGhlIERvb3JiZWxs CiAgICAgICAgSXQgaXMgdGhlIE1NSU8gYWRkcmVzcyB3cml0dGVuIHRvLiBEZXZpY2VzIG1heSBi ZSBjb25maWd1cmVkIGJ5CiAgICAgICAgc29mdHdhcmUgdG8gd3JpdGUgdG8gYXJiaXRyYXJ5IGRv b3JiZWxscyB3aGljaCB0aGV5IGNhbiBhZGRyZXNzLgogICAgICAgIEFuIE1TSSBjb250cm9sbGVy IG1heSBmZWF0dXJlIGEgbnVtYmVyIG9mIGRvb3JiZWxscy4KICAgICogdGhlIFBheWxvYWQKICAg ICAgICBEZXZpY2VzIG1heSBiZSBjb25maWd1cmVkIHRvIHdyaXRlIGFuIGFyYml0cmFyeSBwYXls b2FkIGNob3NlbiBieQogICAgICAgIHNvZnR3YXJlLiBNU0kgY29udHJvbGxlcnMgbWF5IGhhdmUg cmVzdHJpY3Rpb25zIG9uIHBlcm1pdHRlZCBwYXlsb2FkLgogICAgICAgIFhlbiB3aWxsIGhhdmUg dG8gc2FuaXRpemUgdGhlIHBheWxvYWQgdW5sZXNzIGl0IGlzIGtub3duIHRvIGJlIGFsd2F5cwog ICAgICAgIHNhZmUuCiAgICAqIFNpZGViYW5kIGluZm9ybWF0aW9uIGFjY29tcGFueWluZyB0aGUg d3JpdGUKICAgICAgICBUeXBpY2FsbHkgdGhpcyBpcyBuZWl0aGVyIGNvbmZpZ3VyYWJsZSBub3Ig cHJvYmVhYmxlLCBhbmQgZGVwZW5kcyBvbgogICAgICAgIHRoZSBwYXRoIHRha2VuIHRocm91Z2gg dGhlIG1lbW9yeSBzeXN0ZW0gKGkuZSBpdCBpcyBhIHByb3BlcnR5IG9mIHRoZQogICAgICAgIGNv bWJpbmF0aW9uIG9mIE1TSSBjb250cm9sbGVyIGFuZCBkZXZpY2UgcmF0aGVyIHRoYW4gYSBwcm9w ZXJ0eSBvZgogICAgICAgIGVpdGhlciBpbiBpc29sYXRpb24pLgoKIyMjIEdJQ3YzL0dJQ3Y0IElU UwoKVGhlIEludGVycnVwdCBUcmFuc2xhdGlvbiBTZXJ2aWNlIChJVFMpIGlzIGEgTVNJIGNvbnRy b2xsZXIgZGVzaWduZWQgYnkgQVJNCmFuZCBpbnRlZ3JhdGVkIGluIHRoZSBHSUN2My9HSUN2NCBp bnRlcnJ1cHQgY29udHJvbGxlci4gRm9yIHRoZSBzcGVjaWZpY2F0aW9uCnNlZSBbR0lDVjNdLiBF YWNoIE1TSS9NU0ktWCB3aWxsIGJlIG1hcHBlZCB0byBhIG5ldyB0eXBlIG9mIGludGVycnVwdCBj YWxsZWQKTFBJLiBUaGlzIGludGVycnVwdCB3aWxsIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIHNvZnR3 YXJlIHVzaW5nIGEgcGFpciAoRGV2aWNlSUQsCkV2ZW50SUQpLgoKQSBwbGF0Zm9ybSBtYXkgaGF2 ZSBtdWx0aXBsZSBJVFMgYmxvY2sgKGUuZyBvbmUgcGVyIE5VTUEgbm9kZSksIGVhY2ggb2YgdGhl bQpiZWxvbmcgdG8gYW4gSVRTIGdyb3VwLgoKVGhlIERldmljZUlEIGlzIGEgdW5pcXVlIGlkZW50 aWZpZXIgd2l0aCBhbiBJVFMgZ3JvdXAgZm9yIGVhY2ggTVNJLWNhcGFibGUKZGV2aWNlIHRoYXQg Y2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgUklEIHdpdGggdGhlIGhlbHAgb2YgdGhlIGZpcm13YXJl IHRhYmxlcwooc2VlIGJlbG93KS4KClRoZSBFdmVudElEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIg dG8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IGV2ZW50IHNlbmRpbmcKYnkgYSBkZXZpY2UuCgpUaGUg TVNJIHBheWxvYWQgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIEV2ZW50SUQgYXMgdGhlIERldmljZUlE IHdpbGwgYmUgYWRkZWQKYWZ0ZXJ3YXJkcyBieSB0aGUgaGFyZHdhcmUgaW4gYSB3YXkgdGhhdCB3 aWxsIHByZXZlbnQgYW55IHRhbXBlcmluZy4KClRoZSBbU0JTQV0gYXBwZW5kaXggSSBkZXNjcmli ZXMgdGhlIHNldCBvZiBydWxlcyBmb3IgdGhlIGludGVncmF0aW9uIG9mIHRoZQpJVFMgdGhhdCBh bnkgY29tcGxpYW50IHBsYXRmb3JtIHNob3VsZCBmb2xsb3cuIFNvbWUgb2YgdGhlIHJ1bGVzIHdp bGwgZXhwbGFpbgp0aGUgc2VjdXJpdHkgaW1wbGljYXRpb24gb2YgYSBtaXNiZWhhdmluZyBkZXZp Y2VzLiBJdCBlbnN1cmVzIHRoYXQgYSBndWVzdAp3aWxsIG5ldmVyIGJlIGFibGUgdG8gdHJpZ2dl ciBhbiBNU0kgb24gYmVoYWxmIG9mIGFub3RoZXIgZ3Vlc3QuCgpYWFg6IFRoZSBzZWN1cml0eSBp bXBsaWNhdGlvbiBpcyBkZXNjcmliZWQgaW4gdGhlIFtTQlNBXSBidXQgSSBoYXZlbid0IGZvdW5k CmFueSBzaW1pbGFyIHdvcmtpbmcgaW4gdGhlIEdJQ3YzIHNwZWNpZmljYXRpb24uIEl0IGlzIHVu Y2xlYXIgdG8gbWUgaWYKbm9uLVNCU0EgY29tcGxpYW50IHBsYXRmb3JtIChlLmcgZW1iZWRkZWQp IHdpbGwgZm9sbG93IHRob3NlIHJ1bGVzLgoKIyMjIEdJQ3YybQoKVGhlIEdJQ3YybSBpcyBhbiBl eHRlbnNpb24gb2YgdGhlIEdJQ3YyIHRvIGNvbnZlcnQgTVNJL01TSS1YIHdyaXRlcyB0byB1bmlx dWUKaW50ZXJydXB0cy4gVGhlIHNwZWNpZmljYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBbU0JT QV0gYXBwZW5kaXggRS4KCkRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIHRoZSBHSUN2Mm0gd2ls bCBwcm92aWRlIG9uZSBvciBtdWx0aXBsZSBpbnN0YW5jZQpvZiByZWdpc3RlciBmcmFtZXMuIEVh Y2ggZnJhbWUgaXMgY29tcG9zZWQgb2YgYSBkb29yYmVsbCBhbmQgYXNzb2NpYXRlZCB0bwphIHNl dCBvZiBTUElzIHRoYXQgY2FuIGJlIGRpc2NvdmVyZWQgYnkgcmVhZGluZyB0aGUgcmVnaXN0ZXIg TVNJX1RZUEVSLgoKT24gYW4gTVNJIHdyaXRlLCB0aGUgcGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhl IFNQSSBJRCB0byBnZW5lcmF0ZS4gTm90ZSB0aGF0Cm9uIHNvbWUgcGxhdGZvcm0gdGhlIE1TSSBw YXlsb2FkIG1heSBjb250YWluIGFuIG9mZnNldCBmb3JtIHRoZSBiYXNlIFNQSQpyYXRoZXIgdGhh biB0aGUgU1BJIGl0c2VsZi4KClRoZSBmcmFtZSB3aWxsIG9ubHkgZ2VuZXJhdGUgU1BJIGlmIHRo ZSB3cml0dGVuIHZhbHVlIGNvcnJlc3BvbmRzIHRvIGFuIFNQSQphbGxvY2F0ZWQgdG8gdGhlIGZy YW1lLiBFYWNoIFZNIHNob3VsZCBoYXZlIGV4Y2x1c2l0eSB0byB0aGUgZnJhbWUgdG8gZW5zdXJl Cmlzb2xhdGlvbiBhbmQgcHJldmVudCBhIGd1ZXN0IE9TIHRvIHRyaWdnZXIgYW4gTVNJIG9uLWJl aGFsZiBvZiBhbm90aGVyIGd1ZXN0Ck9TLgoKWFhYOiBMaW51eCBzZWVtcyB0byBjb25zaWRlciBH SUN2Mm0gYXMgdW5zYWZlIGJ5IGRlZmF1bHQuIEZyb20gbXkgdW5kZXJzdGFuZGluZywKaXQgaXMg c3RpbGwgdW5jbGVhciBob3cgd2Ugc2hvdWxkIHByb2NlZWQgb24gWGVuLCBhcyBHSUN2Mm0gc2hv dWxkIGJlIHNhZmUKYXMgbG9uZyBhcyB0aGUgZnJhbWUgaXMgb25seSBhY2Nlc3NlZCBieSBvbmUg Z3Vlc3QuCgojIyMgT3RoZXIgTVNJIGNvbnRyb2xsZXJzCgpTZXJ2ZXJzIGNvbXBsaWFudCB3aXRo IFNCU0EgbGV2ZWwgMSBhbmQgaGlnaGVyIHdpbGwgaGF2ZSB0byB1c2UgZWl0aGVyIElUUwpvciBH SUN2Mm0uIEhvd2V2ZXIsIGl0IGlzIGJ5IG5vIG1lYW5zIHRoZSBvbmx5IE1TSSBjb250cm9sbGVy cyBhdmFpbGFibGUuClRoZSBoYXJkd2FyZSB2ZW5kb3IgbWF5IGRlY2lkZSB0byB1c2UgdGhlaXIg Y3VzdG9tIE1TSSBjb250cm9sbGVyIHdoaWNoIGNhbiBiZQppbnRlZ3JhdGVkIGluIHRoZSBQQ0kg aG9zdCBicmlkZ2UuCgpXaGV0aGVyIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gd3JpdGUgc2VjdXJl bHkgYW4gTVNJIHdpbGwgZGVwZW5kIG9uIHRoZQpNU0kgY29udHJvbGxlciBpbXBsZW1lbnRhdGlv bnMuCgpYWFg6IEkgYW0gaGFwcHkgdG8gZ2l2ZSBhIGJyaWVmIGV4cGxhbmF0aW9uIG9uIG1vcmUg TVNJIGNvbnRyb2xsZXIgKHN1Y2gKYXMgWGlsaW54IGFuZCBSZW5lc2FzKSBpZiBwZW9wbGUgdGhp bmsgaXQgaXMgbmVjZXNzYXJ5LgoKVGhpcyBkZXNpZ24gZG9jdW1lbnQgZG9lcyBub3QgcGVydGFp biB0byBhIHNwZWNpZmljIE1TSSBjb250cm9sbGVyIGFuZCB3aWxsIHRyeQp0byBiZSBhcyBhZ25v c3RpYyBpcyBwb3NzaWJsZS4gV2hlbiBwb3NzaWJsZSwgaXQgd2lsbCBnaXZlIGluc2lnaHQgaG93 IHRvCmludGVncmF0ZSB0aGUgTVNJIGNvbnRyb2xsZXIuCgojIEluZm9ybWF0aW9uIGF2YWlsYWJs ZSBpbiB0aGUgZmlybXdhcmUgdGFibGVzCgojIyBBQ1BJCgojIyMgSG9zdCBicmlkZ2VzCgpUaGUg c3RhdGljIHRhYmxlIE1DRkcgKHNlZSA0LjIgaW4gWzFdKSB3aWxsIGRlc2NyaWJlIHRoZSBob3N0 IGJyaWRnZXMgYXZhaWxhYmxlCmF0IGJvb3QgYW5kIHN1cHBvcnRpbmcgRUNBTS4gVW5mb3J0dW5h dGVseSwgdGhlcmUgYXJlIHBsYXRmb3JtcyBvdXQgdGhlcmUKKHNlZSBbMl0pIHRoYXQgcmUtdXNl IE1DRkcgdG8gZGVzY3JpYmUgaG9zdCBicmlkZ2UgdGhhdCBhcmUgbm90IGZ1bGx5IEVDQU0KY29t cGF0aWJsZS4KClRoaXMgbWVhbnMgdGhhdCBYZW4gbmVlZHMgdG8gYWNjb3VudCBmb3IgcG9zc2li bGUgcXVpcmtzIGluIHRoZSBob3N0IGJyaWRnZS4KVGhlIExpbnV4IGNvbW11bml0eSBhcmUgd29y a2luZyBvbiBhIHBhdGNoIHNlcmllcyBmb3IgdGhpcywgc2VlIFsyXSBhbmQgWzNdLAp3aGVyZSBx dWlya3Mgd2lsbCBiZSBkZXRlY3RlZCB3aXRoOgogICAgKiBPRU0gSUQKICAgICogT0VNIFRhYmxl IElECiAgICAqIE9FTSBSZXZpc2lvbgogICAgKiBQQ0kgU2VnbWVudAogICAgKiBQQ0kgYnVzIG51 bWJlciByYW5nZSAod2lsZGNhcmQgYWxsb3dlZCkKCkJhc2VkIG9uIHdoYXQgTGludXggaXMgY3Vy cmVudGx5IGRvaW5nLCB0aGVyZSBhcmUgdHdvIGtpbmQgb2YgcXVpcmtzOgogICAgKiBBY2Nlc3Nl cyB0byB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBvZiBjZXJ0YWluIHNpemVzIGFyZSBub3QgYWxs b3dlZAogICAgKiBBIHNwZWNpZmljIGRyaXZlciBpcyBuZWNlc3NhcnkgZm9yIGRyaXZpbmcgdGhl IGhvc3QgYnJpZGdlCgpUaGUgZm9ybWVyIGlzIHN0cmFpZ2h0Zm9yd2FyZCB0byBzb2x2ZSBidXQg dGhlIGxhdHRlciB3aWxsIHJlcXVpcmUgbW9yZSB0aG91Z2h0LgpJbnN0YW50aWF0aW9uIG9mIGEg c3BlY2lmaWMgZHJpdmVyIGZvciB0aGUgaG9zdCBjb250cm9sbGVyIGNhbiBiZSBlYXNpbHkgZG9u ZQppZiBYZW4gaGFzIHRoZSBpbmZvcm1hdGlvbiB0byBkZXRlY3QgaXQuIEhvd2V2ZXIsIHRob3Nl IGRyaXZlcnMgbWF5IHJlcXVpcmUKcmVzb3VyY2VzIGRlc2NyaWJlZCBpbiBBU0wgKHNlZSBbNF0g Zm9yIGluc3RhbmNlKS4KClRoZSBudW1iZXIgb2YgcGxhdGZvcm1zIHJlcXVpcmluZyBzcGVjaWZp YyBQQ0kgaG9zdCBicmlkZ2UgZHJpdmVyIGlzIGN1cnJlbnRseQpsaW1pdGVkLiBXaGlsc3QgaXQg aXMgbm90IHBvc3NpYmxlIHRvIHByZWRpY3QgdGhlIGZ1dHVyZSwgaXQgd2lsbCBiZSBleHBlY3Rl ZAp1cGNvbWluZyBwbGF0Zm9ybSB0byBoYXZlIGZ1bGx5IEVDQU0gY29tcGxpYW50IFBDSSBob3N0 IGJyaWRnZXMuIFRoZXJlZm9yZSwKZ2l2ZW4gWGVuIGRvZXMgbm90IGhhdmUgYW55IEFTTCBwYXJz ZXIsIHRoZSBhcHByb2FjaCBzdWdnZXN0ZWQgaXMgdG8gaGFyZGNvZGUKdGhlIG1pc3NpbmcgdmFs dWVzLiBUaGlzIGNvdWxkIGJlIHJldmlzaXQgaW4gdGhlIGZ1dHVyZSBpZiBuZWNlc3NhcnkuCgoj IyMgRmluZGluZyBpbmZvcm1hdGlvbiB0byBjb25maWd1cmUgSU9NTVUgYW5kIE1TSSBjb250cm9s bGVyCgpUaGUgc3RhdGljIHRhYmxlIFtJT1JUXSB3aWxsIHByb3ZpZGUgaW5mb3JtYXRpb24gdGhh dCB3aWxsIGhlbHAgdG8gZGVkdWNlCmRhdGEgKHN1Y2ggYXMgTWFzdGVySUQgYW5kIERldmljZUlE KSB0byBjb25maWd1cmUgYm90aCB0aGUgSU9NTVUgYW5kIHRoZSBNU0kKY29udHJvbGxlciBmcm9t IGEgZ2l2ZW4gU0JERi4KCiMjIEZpbmRpbmcgd2hpY2ggTlVNQSBub2RlIGEgUENJIGRldmljZSBi ZWxvbmdzIHRvCgpPbiBOVU1BIHN5c3RlbSwgdGhlIE5VTUEgbm9kZSBhc3NvY2lhdGVkIHRvIGEg UENJIGRldmljZSBjYW4gYmUgZm91bmQgdXNpbmcKdGhlIF9QWE0gbWV0aG9kIG9mIHRoZSBob3N0 IGJyaWRnZSAoPykuCgpYWFg6IEkgYW0gbm90IGVudGlyZWx5IHN1cmUgd2hlcmUgdGhlIF9QWE0g d2lsbCBiZSAoaS5lIGhvc3QgYnJpZGdlIHZzIFBDSQpkZXZpY2UpLgoKIyMgRGV2aWNlIFRyZWUK CiMjIyBIb3N0IGJyaWRnZXMKCkVhY2ggRGV2aWNlIFRyZWUgbm9kZSBhc3NvY2lhdGVkIHRvIGEg aG9zdCBicmlkZ2Ugd2lsbCBoYXZlIGF0IGxlYXN0IHRoZQpmb2xsb3dpbmcgcHJvcGVydGllcyAo c2VlIGJpbmRpbmdzIGluIFs4XSk6CiAgICAtIGRldmljZV90eXBlOiB3aWxsIGFsd2F5cyBiZSAi cGNpIi4KICAgIC0gY29tcGF0aWJsZTogYSBzdHJpbmcgaW5kaWNhdGluZyB3aGljaCBkcml2ZXIg dG8gaW5zdGFuY2lhdGUKClRoZSBub2RlIG1heSBhbHNvIGNvbnRhaW4gb3B0aW9uYWwgcHJvcGVy dGllcyBzdWNoIGFzOgogICAgLSBsaW51eCxwY2ktZG9tYWluOiBhc3NpZ24gYSBmaXggc2VnbWVu dCBudW1iZXIKICAgIC0gYnVzLXJhbmdlOiBpbmRpY2F0ZSB0aGUgcmFuZ2Ugb2YgYnVzIG51bWJl cnMgc3VwcG9ydGVkCgpXaGVuIHRoZSBwcm9wZXJ0eSBsaW51eCxwY2ktZG9tYWluIGlzIG5vdCBw cmVzZW50LCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3b3VsZApoYXZlIHRvIGFsbG9jYXRlIHRoZSBz ZWdtZW50IG51bWJlciBmb3IgZWFjaCBob3N0IGJyaWRnZXMuCgojIyMgRmluZGluZyBpbmZvcm1h dGlvbiB0byBjb25maWd1cmUgSU9NTVUgYW5kIE1TSSBjb250cm9sbGVyCgojIyMgQ29uZmlndXJp bmcgdGhlIElPTU1VCgpUaGUgRGV2aWNlIFRyZWVlIHByb3ZpZGVzIGEgZ2VuZXJpYyBJT01NVSBi aW5kaW5ncyAoc2VlIFsxMF0pIHdoaWNoIHVzZXMgdGhlCnByb3BlcnRpZXMgImlvbW11LW1hcCIg YW5kICJpb21tdS1tYXAtbWFzayIgdG8gZGVzY3JpYmVkIHRoZSByZWxhdGlvbnNoaXAKYmV0d2Vl biBSSUQgYW5kIGEgTWFzdGVySUQuCgpUaGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgcHJlc2VudCBp biB0aGUgaG9zdCBicmlkZ2UgRGV2aWNlIFRyZWUgbm9kZS4gRnJvbSBhCmdpdmVuIFNCREYsIGl0 IHdpbGwgYmUgcG9zc2libGUgdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBNYXN0ZXJJRC4KCk5v dGUgdGhhdCB0aGUgQVJNIFNNTVUgYWxzbyBoYXZlIGEgbGVnYWN5IGJpbmRpbmcgKHNlZSBbOV0p LCBidXQgaXQgZG9lcyBub3QKaGF2ZSBhIHdheSB0byBkZXNjcmliZSB0aGUgcmVsYXRpb25zaGlw IGJldHdlZW4gUklEIGFuZCBTdHJlYW1JRC4gSW5zdGVhZCBpdAphc3N1bWVkIHRoYXQgU3RyZWFt SUQgPT0gUklELiBUaGlzIGJpbmRpbmcgaGFzIG5vdyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3IK b2YgdGhlIGdlbmVyaWMgSU9NTVUgYmluZGluZy4KCiMjIyBDb25maWd1cmluZyB0aGUgTVNJIGNv bnRyb2xsZXIKClRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgUklEIGFuZCBkYXRhIHJlcXVp cmVkIHRvIGNvbmZpZ3VyZSB0aGUgTVNJCmNvbnRyb2xsZXIgKHN1Y2ggYXMgRGV2aWNlSUQpIGNh biBiZSBmb3VuZCB1c2luZyB0aGUgcHJvcGVydHkgIm1zaS1tYXAiCihzZWUgWzExXSkuCgpUaGlz IHByb3BlcnR5IHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgaG9zdCBicmlkZ2UgRGV2aWNlIFRyZWUg bm9kZS4gRnJvbSBhCmdpdmVuIFNCREYsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gZmluZCB0aGUg Y29ycmVzcG9uZGluZyBNYXN0ZXJJRC4KCiMjIEZpbmRpbmcgd2hpY2ggTlVNQSBub2RlIGEgUENJ IGRldmljZSBiZWxvbmdzIHRvCgpPbiBOVU1BIHN5c3RlbSwgdGhlIE5VTUEgbm9kZSBhc3NvY2lh dGVkIHRvIGEgUENJIGRldmljZSBjYW4gYmUgZm91bmQgdXNpbmcKdGhlIHByb3BlcnR5ICJudW1h LW5vZGUtaWQiIChzZWUgWzE1XSkgcHJlc2VudHMgaW4gdGhlIGhvc3QgYnJpZGdlIERldmljZSBU cmVlCm5vZGUuCgojIERpc2NvdmVyaW5nIFBDSSBkZXZpY2VzCgpXaGlsc3QgUENJIGRldmljZXMg YXJlIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIGhhcmR3YXJlIGRvbWFpbiwgdGhlCmh5cGVy dmlzb3IgZG9lcyBub3QgaGF2ZSBhbnkga25vd2xlZGdlIG9mIHRoZW0uIFRoZSBmaXJzdCBzdGVw IG9mIHN1cHBvcnRpbmcKUENJIHBhc3MtdGhyb3VnaCBpcyB0byBtYWtlIFhlbiBhd2FyZSBvZiB0 aGUgUENJIGRldmljZXMuCgpYZW4gd2lsbCByZXF1aXJlIGFjY2VzcyB0byB0aGUgUENJIGNvbmZp Z3VyYXRpb24gc3BhY2UgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24KZm9yIHRoZSBQQ0kgZGV2aWNl cyBvciBhY2Nlc3MgaXQgb24gYmVoYWxmIG9mIHRoZSBndWVzdCB2aWEgdGhlIGVtdWxhdGVkCmhv c3QgYnJpZGdlLgoKVGhpcyBtZWFucyB0aGF0IFhlbiBzaG91bGQgYmUgaW4gY2hhcmdlIG9mIGNv bnRyb2xsaW5nIHRoZSBob3N0IGJyaWRnZS4gSG93ZXZlciwKZm9yIHNvbWUgaG9zdCBjb250cm9s bGVyLCB0aGlzIG1heSBiZSBkaWZmaWN1bHQgdG8gaW1wbGVtZW50IGluIFhlbiBiZWNhdXNlIG9m CmRlcGVuY2VuY2llcyBvbiBvdGhlciBjb21wb25lbnRzIChlLmcgY2xvY2tzLCBzZWUgbW9yZSBk ZXRhaWxzIGluICJQQ0kgaG9zdApicmlkZ2UiIHNlY3Rpb24pLgoKRm9yIHRoaXMgcmVhc29uLCB0 aGUgYXBwcm9hY2ggY2hvc2VuIGluIHRoaXMgZG9jdW1lbnQgaXMgdG8gbGV0IHRoZSBoYXJkd2Fy ZQpkb21haW4gdG8gZGlzY292ZXIgdGhlIGhvc3QgYnJpZGdlcywgc2NhbiB0aGUgUENJIGRldmlj ZXMgYW5kIHRoZW4gcmVwb3J0CmV2ZXJ5dGhpbmcgdG8gWGVuLiBUaGlzIGRvZXMgbm90IHJ1bGUg b3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBkb2luZyBldmVyeXRoaW5nCndpdGhvdXQgdGhlIGhlbHAg b2YgdGhlIGhhcmR3YXJlIGRvbWFpbiBpbiB0aGUgZnV0dXJlLgoKIyMgV2hvIGlzIGluIGNoYXJn ZSBvZiB0aGUgaG9zdCBicmlkZ2U/CgpUaGVyZSBhcmUgbnVtZXJvdXMgaW1wbGVtZW50YXRpb24g b2YgaG9zdCBicmlkZ2VzIHdoaWNoIGV4aXN0IG9uIEFSTS4gQSBwYXJ0IG9mCnRoZW0gcmVxdWly ZXMgYSBzcGVjaWZpYyBkcml2ZXIgYXMgdGhleSBjYW5ub3QgYmUgZHJpdmVuIGJ5IGEgZ2VuZXJp YyBob3N0IGJyaWRnZQpkcml2ZXIuIFBvcnRpbmcgdGhvc2UgZHJpdmVycyBtYXkgYmUgY29tcGxl eCBkdWUgdG8gZGVwZW5kZW5jaWVzIG9uIG90aGVyCmNvbXBvbmVudHMuCgpUaGlzIHdvdWxkIGJl IHNlZW4gYXMgc2lnbmFsIHRvIGxlYXZlIHRoZSBob3N0IGJyaWRnZSBkcml2ZXJzIGluIHRoZSBo YXJkd2FyZQpkb21haW4uIEJlY2F1c2UgWGVuIHdvdWxkIG5lZWQgdG8gYWNjZXNzIHRoZSBjb25m aWd1cmF0aW9uIHNwYWNlLCBhbGwgdGhlIGFjY2Vzcwp3b3VsZCBoYXZlIHRvIGJlIGZvcndhcmRl ZCB0byBoYXJkd2FyZSBkb21haW4gd2hpY2ggaW4gdHVybiB3aWxsIGFjY2VzcyB0aGUKaGFyZHdh cmUuCgpJbiB0aGlzIGRlc2lnbiBkb2N1bWVudCwgd2UgYXJlIGNvbnNpZGVyaW5nIHRoYXQgdGhl IGhvc3QgYnJpZGdlIGRyaXZlciBjYW4KYmUgcG9ydGVkIGluIFhlbi4gSW4gdGhlIGNhc2UgaXQg aXMgbm90IHBvc3NpYmxlLCBhIGludGVyZmFjZSB0byBmb3J3YXJkCmNvbmZpZ3VyYXRpb24gc3Bh Y2UgYWNjZXNzIHdvdWxkIG5lZWQgdG8gYmUgZGVmaW5lZC4gVGhlIGludGVyZmFjZSBkZXRhaWxz CmlzIG91dCBvZiBzY29wZS4KCiMjIERpc2NvdmVyaW5nIGFuZCByZWdpc3RlcmluZyBob3N0IGJy aWRnZQoKVGhlIGFwcHJvYWNoIHRha2VuIGluIHRoZSBkb2N1bWVudCB3aWxsIHJlcXVpcmUgY29t bXVuaWNhdGlvbiBiZXR3ZWVuIFhlbiBhbmQKdGhlIGhhcmR3YXJlIGRvbWFpbi4gSW4gdGhpcyBj YXNlLCB0aGV5IHdvdWxkIG5lZWQgdG8gYWdyZWUgb24gdGhlIHNlZ21lbnQKbnVtYmVyIGFzc29j aWF0ZWQgdG8gYW4gaG9zdCBicmlkZ2UuIEhvd2V2ZXIsIHRoaXMgbnVtYmVyIGlzIG5vdCBhdmFp bGFibGUgaW4KdGhlIERldmljZSBUcmVlIGNhc2UuCgpUaGUgaGFyZHdhcmUgZG9tYWluIHdpbGwg cmVnaXN0ZXIgbmV3IGhvc3QgYnJpZGdlcyB1c2luZyB0aGUgZXhpc3RpbmcgaHlwZXJjYWxsClBI WVNERVZfbW1jZmdfcmVzZXJ2ZWQ6CgojZGVmaW5lIFhFTl9QQ0lfTU1DRkdfUkVTRVJWRUQgMQoK c3RydWN0IHBoeXNkZXZfcGNpX21tY2ZnX3Jlc2VydmVkIHsKICAgIC8qIElOICovCiAgICB1aW50 NjRfdCAgICBhZGRyZXNzOwogICAgdWludDE2X3QgICAgc2VnbWVudDsKICAgIC8qIFJhbmdlIG9m IGJ1cyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgYnJpZGdlICovCiAgICB1aW50OF90ICAgICBzdGFy dF9idXM7CiAgICB1aW50OF90ICAgICBlbmRfYnVzOwoKICAgIHVpbnQzMl90ICAgIGZsYWdzOwp9 CgpTb21lIG9mIHRoZSBob3N0IGJyaWRnZXMgbWF5IG5vdCBoYXZlIGEgc2VwYXJhdGUgY29uZmln dXJhdGlvbiBhZGRyZXNzIHNwYWNlCnJlZ2lvbiBkZXNjcmliZWQgaW4gdGhlIGZpcm13YXJlIHRh Ymxlcy4gVG8gc2ltcGxpZnkgdGhlIHJlZ2lzdHJhdGlvbiwgdGhlCmZpZWxkICdhZGRyZXNzJyBz aG91bGQgY29udGFpbnMgdGhlIGJhc2UgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIHJlZ2lvbgpkZXNj cmliZWQgaW4gdGhlIGZpcm13YXJlIHRhYmxlcy4KICAgICogRm9yIEFDUEksIGl0IHdvdWxkIGJl IHRoZSBiYXNlIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBNQ0ZHIG9yIGluIHRoZQogICAgX0NC QSBtZXRob2QuCiAgICAqIEZvciBEZXZpY2UgVHJlZSwgdGhpcyB3b3VsZCBiZSBhbnkgYmFzZSBh ZGRyZXNzIG9mIHJlZ2lvbgogICAgc3BlY2lmaWVkIGluIHRoZSAicmVnIiBwcm9wZXJ0eS4KClRo ZSBmaWVsZCAnZmxhZ3MnIGlzIGV4cGVjdGVkIHRvIGhhdmUgWEVOX1BDSV9NTUNGR19SRVNFUlZF RCBzZXQuCgpJdCBpcyBleHBlY3RlZCB0aGF0IHRoaXMgaHlwZXJjYWxsIGlzIGNhbGxlZCBiZWZv cmUgYW55IFBDSSBkZXZpY2VzIGlzCnJlZ2lzdGVyZWQgdG8gWGVuLgoKV2hlbiB0aGUgaGFyZHdh cmUgZG9tYWluIGlzIGluIGNoYXJnZSBvZiB0aGUgaG9zdCBicmlkZ2UsIHRoaXMgaHlwZXJjYWxs IHdpbGwKYmUgdXNlZCB0byB0ZWxsIFhlbiB0aGUgZXhpc3RlbmNlIG9mIGFuIGhvc3QgYnJpZGdl IGluIG9yZGVyIHRvIGZpbmQgdGhlCmFzc29jaWF0ZWQgaW5mb3JtYXRpb24gZm9yIGNvbmZpZ3Vy aW5nIHRoZSBNU0kgY29udHJvbGxlciBhbmQgdGhlIElPTU1VLgoKIyMgRGlzY292ZXJpbmcgYW5k IHJlZ2lzdGVyaW5nIFBDSSBkZXZpY2VzCgpUaGUgaGFyZHdhcmUgZG9tYWluIHdpbGwgc2NhbiB0 aGUgaG9zdCBicmlkZ2UgdG8gZmluZCB0aGUgbGlzdCBvZiBQQ0kgZGV2aWNlcwphdmFpbGFibGUg YW5kIHRoZW4gcmVwb3J0IGl0IHRvIFhlbiB1c2luZyB0aGUgZXhpc3RpbmcgaHlwZXJjYWxsClBI WVNERVZfcGNpX2RldmljZV9hZGQ6CgojZGVmaW5lIFhFTl9QQ0lfREVWX0VYVEZOICAgMHgxCiNk ZWZpbmUgWEVOX1BDSV9ERVZfVklSVEZOICAweDIKI2RlZmluZSBYRU5fUENJX0RFVl9QWE0gICAg IDB4MwoKc3RydWN0IHBoeXNkZXZfcGNpX2RldmljZV9hZGQgewogICAgLyogSU4gKi8KICAgIHVp bnQxNl90ICAgIHNlZzsKICAgIHVpbnQ4X3QgICAgIGJ1czsKICAgIHVpbnQ4X3QgICAgIGRldmZu OwogICAgdWludDMyX3QgICAgZmxhZ3M7CiAgICBzdHJ1Y3QgewogICAgICAgIHVpbnQ4X3QgYnVz OwogICAgICAgIHVpbnQ4X3QgZGV2Zm47CiAgICB9IHBoeXNmbjsKICAgIC8qCiAgICAgKiBPcHRp b25hbCBwYXJhbWV0ZXJzIGFycmF5LgogICAgICogRmlyc3QgZWxlbWVudCAoWzBdKSBpcyBQWE0g ZG9tYWluIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIChpZgogICAgICogWEVOX1BDSV9ERVZf UFhNIGlzIHNldCkKICAgICAqLwogICAgdWludDMyX3Qgb3B0YXJyWzBdOwp9CgpXaGVuIFhFTl9Q Q0lfREVWX1BYTSBpcyBzZXQgaW4gdGhlIGZpZWxkICdmbGFnJywgb3B0YXJyWzBdIHdpbGwgY29u dGFpbiB0aGUKTlVNQSBub2RlIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlOgogICAgKiBG b3IgQUNQSSwgaXQgd291bGQgYmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBtZXRob2QgX1BY TQogICAgKiBGb3IgRGV2aWNlIFRyZWUsIHRoaXMgd291bGQgdGhlIHZhbHVlIGZvdW5kIGluIHRo ZSBwcm9wZXJ0eSAibnVtYS1ub2RlLWlkIi4KRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIHNlY3Rp b24gIkZpbmRpbmcgd2hpY2ggTlVNQSBub2RlIGEgUENJIGRldmljZSBiZWxvbmdzCnRvIiBpbiAi QUNQSSIgYW5kICJEZXZpY2UgVHJlZSIuCgpYWFg6IEkgc3RpbGwgZG9uJ3QgZnVsbHkgdW5kZXJz dGFuZCBob3cgWEVOX1BDSV9ERVZfRVhURk4gYW5kIFhFTl9QQ0lfREVWX1ZJUlRGTgp3aWwgd29y ay4gQUZBSUNULCB0aGUgZm9ybWVyIGlzIHVzZWQgd2l0aCB0aGUgYnVzIHN1cHBvcnQgQVJJIGFu ZCB0aGUgb25seSB1c2FnZQppcyBpbiB0aGUgeDg2IElPTU1VIGNvZGUuIEZvciB0aGUgbGF0dGVy LCB0aGlzIGlzIHJlbGF0ZWQgdG8gSU9WIGJ1dCBJIGFtIG5vdApzdXJlIHdoYXQgZGV2Zm4gYW5k IHBoeXNmbi5kZXZmbiB3aWxsIGNvcnJlc3BvbmQgdG9vLgoKTm90ZSB0aGF0IHg4NiBjdXJyZW50 bHkgcHJvdmlkZXMgdHdvIG1vcmUgaHlwZXJjYWxscyAoUEhZU0RFVk9QX21hbmFnZV9wY2lfYWRk CmFuZCBQSFlTREVWT1BfbWFuYWdlX3BjaV9hZGRfZXh0KSB0byByZWdpc3RlciBQQ0kgZGV2aWNl cy4gSG93ZXZlciB0aGV5IGFyZQpzdWJzZXQgb2YgdGhlIGh5cGVyY2FsbCBQSFlTREVWT1BfcGNp X2RldmljZV9hZGQuIFRoZXJlZm9yZSwgaXQgaXMgc3VnZ2VzdGVkCnRvIGxlYXZlIHRoZW0gdW5p bXBsZW1lbnRlZCBvbiBBUk0uCgojIyBSZW1vdmluZyBQQ0kgZGV2aWNlcwoKVGhlIGhhcmR3YXJl IGRvbWFpbiB3aWxsIGJlIGluIGNoYXJnZSBYZW4gYSBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCB1 c2luZwp0aGUgZXhpc3RpbmcgaHlwZXJjYWxsIFBIWVNERVZfcGNpX2RldmljZV9yZW1vdmU6Cgpz dHJ1Y3QgcGh5c2Rldl9wY2lfZGV2aWNlIHsKICAgIC8qIElOICovCiAgICB1aW50MTZfdCAgICBz ZWc7CiAgICB1aW50OF90ICAgICBidXM7CiAgICB1aW50OF90ICAgICBkZXZmbjsKfQoKTm90ZSB0 aGF0IHg4NiBjdXJyZW50bHkgcHJvdmlkZSBvbmUgbW9yZSBoeXBlcmNhbGwgKFBIWVNERVZPUF9t YW5hZ2VfcGNpX3JlbW92ZSkKdG8gcmVtb3ZlIFBDSSBkZXZpY2VzLiBIb3dldmVyIGl0IGRvZXMg bm90IGFsbG93IHRvIHBhc3MgYSBzZWdtZW50IG51bWJlci4KVGhlcmVmb3JlIGl0IGlzIHN1Z2dl c3RlZCB0byBsZWF2ZSB1bmltcGxlbWVudGVkIG9uIEFSTS4KCiMgR2xvc3NhcnkKCkVDQU06IEVu aGFuY2VkIENvbmZpZ3VyYXRpb24gTWVjaGFuaXNtClNCREY6IFNlZ21lbnQgQnVzIERldmljZSBG dW5jdGlvbi4gVGhlIHNlZ21lbnQgaXMgYSBzb2Z0d2FyZSBjb25jZXB0LgpNU0k6IE1lc3NhZ2Ug U2lnbmFsZWQgSW50ZXJydXB0Ck1TSSBkb29yYmVsbDogTU1JTyBhZGRyZXNzIHdyaXR0ZW4gdG8g YnkgYSBkZXZpY2UgdG8gZ2VuZXJhdGUgYW4gTVNJClNQSTogU2hhcmVkIFBlcmlwaGVyYWwgSW50 ZXJydXB0CkxQSTogTG9jYWxpdHktc3BlY2lmaWMgUGVyaXBoZXJhbCBJbnRlcnJ1cHQKSVRTOiBJ bnRlcnJ1cHQgVHJhbnNsYXRpb24gU2VydmljZQoKIyBTcGVjaWZpY2F0aW9ucwpbU0JTQV0gIEFS TS1ERU4tMDAyOSB2My4wCltHSUNWM10gSUhJMDA2OUMKW0lPUlRdICBERU4wMDQ5QgoKIyBCaWJs aW9ncmFwaHkKClsxXSBQQ0kgZmlybXdhcmUgc3BlY2lmaWNhdGlvbiwgcmV2IDMuMgpbMl0gaHR0 cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvbGludXgtcGNpL21zZzU2NzE1Lmh0bWwKWzNdIGh0 dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2xpbnV4LXBjaS9tc2c1NjcyMy5odG1sCls0XSBo dHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1wY2kvbXNnNTY3MjguaHRtbApbNl0g aHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMva3ZtL21zZzE0MDExNi5odG1sCls3XSBodHRw Oi8vd3d3LmZpcm13YXJlLm9yZy8xMjc1L2JpbmRpbmdzL3BjaS9wY2kyXzEucGRmCls4XSBEb2N1 bWVudHMvZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kKWzldIERvY3VtZW50cy9kZXZpY2V0cmVlL2Jp bmRpbmdzL2lvbW11L2FybSxzbW11LnR4dApbMTBdIERvY3VtZW50L2RldmljZXRyZWUvYmluZGlu Z3MvcGNpL3BjaS1pb21tdS50eHQKWzExXSBEb2N1bWVudHMvZGV2aWNldHJlZS9iaW5kaW5ncy9w Y2kvcGNpLW1zaS50eHQKWzEyXSBkcml2ZXJzL3BjaS9ob3N0L3BjaWUtcmNhci5jClsxM10gZHJp dmVycy9wY2kvaG9zdC9wY2ktdGh1bmRlci1lY2FtLmMKWzE0XSBkcml2ZXJzL3BjaS9ob3N0L3Bj aS10aHVuZGVyLXBlbS5jClsxNV0gRG9jdW1lbnRzL2RldmljZXRyZWUvYmluZGluZ3MvbnVtYS50 eHQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=