From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Walleij Subject: [PATCH 2/4 v4] PCI: add driver for Faraday Technology Host Bridge Date: Fri, 3 Mar 2017 09:44:07 +0100 Message-ID: <20170303084407.17384-1-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" To: Hans Ulli Kroll , Florian Fainelli , Rob Herring , devicetree@vger.kernel.org, Bjorn Helgaas Cc: openwrt-devel@openwrt.org, Feng-Hsin Chiang , Paulius Zaleckas , linux-pci@vger.kernel.org, Greentime Hu , Janos Laube , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBhZGRzIGEgaG9zdCBicmlkZ2UgZHJpdmVyIGZvciB0aGUgRmFyYWRheSBUZWNobm9sb2d5 CkZQUENJMTAwIGhvc3QgYnJpZGdlLCB1c2VkIGZvciBDb3J0aW5hIFN5c3RlbXMgR2VtaW5pIFNv QwooU0wzNTE2KSBQQ0kgSG9zdCBCcmlkZ2UuCgpUaGlzIGNvZGUgaXMgaW5zcGlyZWQgYnkgdGhl IG91dC1vZi10cmVlIE9wZW5XUlQgcGF0Y2ggYW5kCnRoZW4gZXh0ZW5zaXZlbHkgcmV3cml0dGVu IGZvciBkZXZpY2UgdHJlZSBhbmQgdXNpbmcgdGhlIG1vZGVybgpoZWxwZXJzIHRvIGN1dCBkb3du IGFuZCBtb2Rlcm5pemUgdGhlIGNvZGUgdG8gYWxsIG5ldyBQQ0kKZnJhbWV3b3Jrcy4gQSBkcml2 ZXIgZXhpc3RzIGluIFUtQm9vdCBhcyB3ZWxsLgoKVGVzdGVkIG9uIHRoZSBJVGlhbiBTcXVhcmUg T25lIFNRMjAxIE5BUyB3aXRoIHRoZSBmb2xsb3dpbmcKcmVzdWx0IGluIHRoZSBib290IGxvZyAo dHJpbW1lZCB0byByZWxldmFudCBwYXJ0cyk6CgpPRjogUENJOiBob3N0IGJyaWRnZSAvc29jL3Bj aUA1MDAwMDAwMCByYW5nZXM6Ck9GOiBQQ0k6ICAgIElPIDB4NTAwMDAwMDAuLjB4NTAwZmZmZmYg LT4gMHgwMDAwMDAwMApPRjogUENJOiAgIE1FTSAweDU4MDAwMDAwLi4weDVmZmZmZmZmIC0+IDB4 NTgwMDAwMDAKZnRwY2kxMDAgNTAwMDAwMDAucGNpOiBQQ0kgaG9zdCBicmlkZ2UgdG8gYnVzIDAw MDA6MDAKcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJjZSBbYnVzIDAwLWZmXQpwY2lf YnVzIDAwMDA6MDA6IHJvb3QgYnVzIHJlc291cmNlIFtpbyAgMHgwMDAwLTB4ZmZmZmZdCnBjaV9i dXMgMDAwMDowMDogcm9vdCBidXMgcmVzb3VyY2UgW21lbSAweDU4MDAwMDAwLTB4NWZmZmZmZmZd CmZ0cGNpMTAwIDUwMDAwMDAwLnBjaToKICBETUEgTUVNMSBCQVNFOiAweDAwMDAwMDAwMDAwMDAw MDAgLT4gMHgwMDAwMDAwMDA3ZmZmZmZmIGNvbmZpZyAwMDA3MDAwMApmdHBjaTEwMCA1MDAwMDAw MC5wY2k6CiAgRE1BIE1FTTIgQkFTRTogMHgwMDAwMDAwMDAwMDAwMDAwIC0+IDB4MDAwMDAwMDAw M2ZmZmZmZiBjb25maWcgMDAwNjAwMDAKZnRwY2kxMDAgNTAwMDAwMDAucGNpOgogIERNQSBNRU0z IEJBU0U6IDB4MDAwMDAwMDAwMDAwMDAwMCAtPiAweDAwMDAwMDAwMDNmZmZmZmYgY29uZmlnIDAw MDYwMDAwClBDSTogYnVzMDogRmFzdCBiYWNrIHRvIGJhY2sgdHJhbnNmZXJzIGRpc2FibGVkCnBj aSAwMDAwOjAwOjAwLjA6IG9mX2lycV9wYXJzZV9wY2koKSBmYWlsZWQgd2l0aCByYz0tMjIKcGNp IDAwMDA6MDA6MGMuMDogQkFSIDA6IGFzc2lnbmVkIFttZW0gMHg1ODAwMDAwMC0weDU4MDA3ZmZm XQpwY2kgMDAwMDowMDowOS4yOiBCQVIgMDogYXNzaWduZWQgW21lbSAweDU4MDA4MDAwLTB4NTgw MDgwZmZdCnBjaSAwMDAwOjAwOjA5LjA6IEJBUiA0OiBhc3NpZ25lZCBbaW8gIDB4MTAwMC0weDEw MWZdCnBjaSAwMDAwOjAwOjA5LjE6IEJBUiA0OiBhc3NpZ25lZCBbaW8gIDB4MTAyMC0weDEwM2Zd CnBjaSAwMDAwOjAwOjA5LjA6IGVuYWJsaW5nIGRldmljZSAoMDE0MCAtPiAwMTQxKQpwY2kgMDAw MDowMDowOS4wOiBIQ1JFU0VUIG5vdCBjb21wbGV0ZWQgeWV0IQpwY2kgMDAwMDowMDowOS4xOiBl bmFibGluZyBkZXZpY2UgKDAxNDAgLT4gMDE0MSkKcGNpIDAwMDA6MDA6MDkuMTogSENSRVNFVCBu b3QgY29tcGxldGVkIHlldCEKcGNpIDAwMDA6MDA6MDkuMjogZW5hYmxpbmcgZGV2aWNlICgwMTQw IC0+IDAxNDIpCnJ0NjFwY2kgMDAwMDowMDowYy4wOiBlbmFibGluZyBkZXZpY2UgKDAxNDAgLT4g MDE0MikKaWVlZTgwMjExIHBoeTA6IHJ0MngwMF9zZXRfY2hpcDogSW5mbyAtIENoaXBzZXQgZGV0 ZWN0ZWQgLQogICBydDogMjU2MSwgcmY6IDAwMDMsIHJldjogMDAwYwplaGNpX2hjZDogVVNCIDIu MCAnRW5oYW5jZWQnIEhvc3QgQ29udHJvbGxlciAoRUhDSSkgRHJpdmVyCmVoY2ktcGNpOiBFSENJ IFBDSSBwbGF0Zm9ybSBkcml2ZXIKZWhjaS1wY2kgMDAwMDowMDowOS4yOiBFSENJIEhvc3QgQ29u dHJvbGxlcgplaGNpLXBjaSAwMDAwOjAwOjA5LjI6IG5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFz c2lnbmVkIGJ1cyBudW1iZXIgMQplaGNpLXBjaSAwMDAwOjAwOjA5LjI6IGlycSAxMjUsIGlvIG1l bSAweDU4MDA4MDAwCmVoY2ktcGNpIDAwMDA6MDA6MDkuMjogVVNCIDIuMCBzdGFydGVkLCBFSENJ IDEuMDAKaHViIDEtMDoxLjA6IFVTQiBodWIgZm91bmQKaHViIDEtMDoxLjA6IDQgcG9ydHMgZGV0 ZWN0ZWQKdWhjaV9oY2Q6IFVTQiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBk cml2ZXIKdWhjaV9oY2QgMDAwMDowMDowOS4wOiBVSENJIEhvc3QgQ29udHJvbGxlcgp1aGNpX2hj ZCAwMDAwOjAwOjA5LjA6IG5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFzc2lnbmVkIGJ1cyBudW1i ZXIgMgp1aGNpX2hjZCAwMDAwOjAwOjA5LjA6IEhDUkVTRVQgbm90IGNvbXBsZXRlZCB5ZXQhCnVo Y2lfaGNkIDAwMDA6MDA6MDkuMDogaXJxIDEyMywgaW8gYmFzZSAweDAwMDAxMDAwCmh1YiAyLTA6 MS4wOiBVU0IgaHViIGZvdW5kCmh1YiAyLTA6MS4wOiBjb25maWcgZmFpbGVkLCBodWIgZG9lc24n dCBoYXZlIGFueSBwb3J0cyEgKGVyciAtMTkpCnVoY2lfaGNkIDAwMDA6MDA6MDkuMTogVUhDSSBI b3N0IENvbnRyb2xsZXIKdWhjaV9oY2QgMDAwMDowMDowOS4xOiBuZXcgVVNCIGJ1cyByZWdpc3Rl cmVkLCBhc3NpZ25lZCBidXMgbnVtYmVyIDMKdWhjaV9oY2QgMDAwMDowMDowOS4xOiBIQ1JFU0VU IG5vdCBjb21wbGV0ZWQgeWV0IQp1aGNpX2hjZCAwMDAwOjAwOjA5LjE6IGlycSAxMjQsIGlvIGJh c2UgMHgwMDAwMTAyMApodWIgMy0wOjEuMDogVVNCIGh1YiBmb3VuZApodWIgMy0wOjEuMDogY29u ZmlnIGZhaWxlZCwgaHViIGRvZXNuJ3QgaGF2ZSBhbnkgcG9ydHMhIChlcnIgLTE5KQpzY3NpIDA6 MDowOjA6IERpcmVjdC1BY2Nlc3MgICAgIFVTQiAgICAgIEZsYXNoIERpc2sgICAgICAgMS4wMCBQ UTogMCBBTlNJOiAyCnNkIDA6MDowOjA6IFtzZGFdIDc5MDAzMzYgNTEyLWJ5dGUgbG9naWNhbCBi bG9ja3M6ICg0LjA0IEdCLzMuNzcgR2lCKQpzZCAwOjA6MDowOiBbc2RhXSBXcml0ZSBQcm90ZWN0 IGlzIG9mZgpzZCAwOjA6MDowOiBbc2RhXSBObyBDYWNoaW5nIG1vZGUgcGFnZSBmb3VuZApzZCAw OjA6MDowOiBbc2RhXSBBc3N1bWluZyBkcml2ZSBjYWNoZTogd3JpdGUgdGhyb3VnaAogc2RhOiBz ZGExIHNkYTIgc2RhMwpzZCAwOjA6MDowOiBbc2RhXSBBdHRhY2hlZCBTQ1NJIHJlbW92YWJsZSBk aXNrCmllZWU4MDIxMSBwaHkwOiBydDJ4MDBsaWJfcmVxdWVzdF9maXJtd2FyZTogSW5mbyAtCiAg IExvYWRpbmcgZmlybXdhcmUgZmlsZSAncnQyNTYxcy5iaW4nCmllZWU4MDIxMSBwaHkwOiBydDJ4 MDBsaWJfcmVxdWVzdF9maXJtd2FyZTogSW5mbyAtCiAgIEZpcm13YXJlIGRldGVjdGVkIC0gdmVy c2lvbjogMC44CklQdjY6IEFERFJDT05GKE5FVERFVl9VUCk6IHdsYW4wOiBsaW5rIGlzIG5vdCBy ZWFkeQoKJCBsc3BjaQowMDowMC4wIENsYXNzIDA2MDA6IDE1OWI6NDMyMQowMDowOS4yIENsYXNz IDBjMDM6IDExMDY6MzEwNAowMDowOS4wIENsYXNzIDBjMDM6IDExMDY6MzAzOAowMDowOS4xIENs YXNzIDBjMDM6IDExMDY6MzAzOAowMDowYy4wIENsYXNzIDAyODA6IDE4MTQ6MDMwMQoKY2F0IC9w cm9jL2ludGVycnVwdHMKICAgICAgICAgICBDUFUwCjEyMzogICAgICAgICAgMCAgICAgICBQQ0kg ICAwIEVkZ2UgICAgICB1aGNpX2hjZDp1c2IyCjEyNDogICAgICAgICAgMCAgICAgICBQQ0kgICAx IEVkZ2UgICAgICB1aGNpX2hjZDp1c2IzCjEyNTogICAgICAgIDE1OSAgICAgICBQQ0kgICAyIEVk Z2UgICAgICBlaGNpX2hjZDp1c2IxCjEyNjogICAgICAgMTA4MiAgICAgICBQQ0kgICAzIEVkZ2Ug ICAgICBydDYxcGNpCgpjYXQgL3Byb2MvaW9tZW0KNTAwMDAwMDAtNTAwMDAwZmYgOiAvc29jL3Bj aUA1MDAwMDAwMAo1ODAwMDAwMC01ZmZmZmZmZiA6IEdlbWluaSBQQ0kgTUVNCiAgNTgwMDAwMDAt NTgwMDdmZmYgOiAwMDAwOjAwOjBjLjAKICAgIDU4MDAwMDAwLTU4MDA3ZmZmIDogMDAwMDowMDow Yy4wCiAgNTgwMDgwMDAtNTgwMDgwZmYgOiAwMDAwOjAwOjA5LjIKICAgIDU4MDA4MDAwLTU4MDA4 MGZmIDogZWhjaV9oY2QKClRoZSBFSENJIFVTQiBodWIgd29ya3MgZmluZSwgSSBjYW4gbW91bnQg YW5kIG1hbmFnZQpmaWxlcyBhbmQgdGhlIElSUXMganVzdCBrZWVwIHRpY2tpbmcgdXAuIEkgY2Fu IGlzc3VlCml3bGlzdCB3bGFuMCBzY2FubmluZyBhbmQgc2VlIGFsbCB0aGUgV0xBTnMgaGVyZSwg SSBkb24ndCBoYXZlCndwYV9zdXBwbGljYW50IHNvIGhhdmUgbm90IHRyaWVkIGNvbm5lY3Rpbmcg dG8gdGhlbS4KCkNjOiBKYW5vcyBMYXViZSA8amFub3MuZGV2QGdtYWlsLmNvbT4KQ2M6IFBhdWxp dXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAZ21haWwuY29tPgpDYzogSGFucyBVbGxpIEty b2xsIDx1bGxpLmtyb2xsQGdvb2dsZW1haWwuY29tPgpDYzogRmxvcmlhbiBGYWluZWxsaSA8Zi5m YWluZWxsaUBnbWFpbC5jb20+CkNjOiBGZW5nLUhzaW4gQ2hpYW5nIDxqb2huNDUzQGZhcmFkYXkt dGVjaC5jb20+CkNjOiBHcmVlbnRpbWUgSHUgPGdyZWVuLmh1QGdtYWlsLmNvbT4KU2lnbmVkLW9m Zi1ieTogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgotLS0KQ2hhbmdl TG9nIHYzLT52NDoKLSBDaGFuZ2UgcHJfZGJnKCkgdG8gcHJfZGVidWcoKS4gVGhlIGZvcm1lciBk b2VzIG5vdCBleGlzdCBhbmQKICBmb3Igc29tZSByZWFzb24gSSBmaXJzdCBjaGFuZ2VkIHByX2lu Zm8oKSB0byBwcl9kYmcoKSBhbmQgZGlkbid0CiAgdGVzdC1jb21waWxlIGl0IGJlZm9yZSBzdWJt aXR0aW5nLCBtZWEgY3VscGEuCkNoYW5nZUxvZyB2Mi0+djM6Ci0gUmV3cml0ZSB0byB1c2UgcGNp X2FsbG9jX2hvc3RfYnJpZGdlKCkgYW5kCiAgcGNpX3JlZ2lzdGVyX2hvc3RfYnJpZGdlKCkKLSBD aGFuZ2UgY29tcGF0aWJsZSBzdHJpbmdzIHRvICJmYXJhZGF5LGZ0cGNpMTAwIiBhbmQKICAiZmFy YWRheSxmdHBjaTEwMC1kdWFsIgotIFJlbmFtZSBkcml2ZXIgZmlsZSB0byBwY2ktZnRwY2kxMDAu YyB0byByZWZsZWN0IHRoZSBuYW1lCiAgb2YgdGhlIGFjdHVhbCBGYXJhZGF5IElQIGNvcmUuCi0g TWFrZSB0aGUgZHJpdmVyIGRlcGVuZCBvbiBBUk0gYWdhaW4gYXMgbm90IGFsbCBhcmNocyB1c2UK ICBzZXR1cC1pcnEuYyB3aGljaCBjb250YWlucyBwY2lfZml4dXBfaXJxcygpIHRoYXQgdGhlIGRy aXZlcgogIGlzIHVzaW5nLgotIEFkZCAiZG1hLXJhbmdlcyIgcHJvcGVydHksIGFmdGVyIGRlY2lw aGVyaW5nIHRoYXQgc29tZSBoYXJkY29kZWQKICBjb25zdGFudHMgaW4gdGhlIGRyaXZlciBpcyBy ZWFsbHkgYWJvdXQgdGhpcy4KQ2hhbmdlTG9nIHYxLT52MjoKLSBSZW5hbWUgdGhlIGJyaWRnZSBh bmQgc3ltYm9scyB0byByZWZsZWN0IEZhcmFkYXkgdGVjaG5vbG9neQogIGFzIHRoaXMgSVAgYmxv Y2sgaXMgY2xlYXJseSBhIEZhcmFkYXkgYmxvY2sgYW5kIG5vdCBmcm9tCiAgU3RvcmxpbmsvU3Rv cm0vQ29ydGluYSBhdCBhbGwuCi0gU3VwcG9ydCBib3RoIHRoZSByZWd1bGFyIGFuZCAiZHVhbCIg dmVyc2lvbnMgb2YgdGhlIGJyaWRnZSwKICB3aGVyZSB0aGUgcmVndWxhciBoYXMgYSBjYXNjYWRl ZCBJUlEgY29udHJvbGxlciBhbmQgdGhlIGR1YWwKICBkb2VzIG5vdC4KLSBFbmNvZGUgcGVyLXZh cmlhbnQgY2hhcmFjdGVyaXN0aWNzIGluIGEgdmFyaWFudCBzdHJ1Y3QgaW4KICB0aGUgLmRhdGEg ZmllbGQgb2YgdGhlIE9GIG1hdGNoLgotIERyb3AgdGhlIHBvaW50bGVzcyBzcGlubG9jayBpbiB0 aGUgY29uZmlnIHNwYWNlIGFjY2Vzc29ycy4KLSBEcm9wIG1hbmlwdWxhdGlvbiBvZiBwY2liaW9z X21pbl9pbyBhbmQgcGNpYmlvc19taW5fbWVtCi0gR2V0IHRoZSBJTyByYW5nZSBzaXplIGZyb20g dGhlIGRldmljZSB0cmVlLCBhbmQgc2V0IHVwIHRoZQogIGJyaWRnZSBwcm9wZXJseSBhY2NvcmRp bmcgdG8gdGhpcy4gQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydAogIGEgMU1pQiBzaXplIElPIHJh bmdlLCBidXQgaGV5LCBpdCdzIGF0IGxlYXN0IGR5bmFtaWMgYW5kCiAgbG9naWNhbC4KClRoaXMg Y2FuIGJlIG1lcmdlZCB0byB0aGUgUENJIHRyZWUgd2hlbmV2ZXIgaXQgaXMgY29uc2lkZXJlZApm aW5lIGZvciBpbmNsdXNpb24uCgpBbmRlc3RlY2ggYW5kIEZhcmFkYXkgZ3V5czogeW91IGFyZSBt b3JlIGxpa2VseSB0aGFuIG1lIHRvCmFjdHVhbGx5IGhhdmUgZG9jdW1lbnRhdGlvbiBmb3IgdGhp cyBicmlkZ2UuIFBsZWFzZSBzaGFyZSB3aXRoCm1lIGlmIHlvdSBjYW4sIGVzcGVjaWFsbHkgdGhl IHJlZ2lzdGVyIGRlZmludGlvbnMsIGJlY2F1c2UgSQp3YW50IHRvIHNldCB1cCBJTyBhbmQgTUVN IHdpbmRvd3MgcHJvcGVybHkgZnJvbSB0aGUgZGV2aWNlIHRyZWUsCm5vdCBqdXN0IHJlbHkgb24g ZGVmYXVsdHMuIFRoZXJlIGFyZSBkZWZpbmVzIGZvciB0aGVzZSByZWdpc3RlcnMKYnV0IG5vIHVz ZSBvciBkb2N1bWVudGF0aW9uLgotLS0KIGRyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZyAgICAgICAg fCAgIDYgKwogZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZSAgICAgICB8ICAgMSArCiBkcml2ZXJz L3BjaS9ob3N0L3BjaS1mdHBjaTEwMC5jIHwgNTY2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNTczIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9ob3N0L3BjaS1mdHBjaTEwMC5jCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnCmlu ZGV4IDg5OGQyYzQ4MjM5Yy4uYTI1NTVlMzVhMzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9o b3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnCkBAIC02MCw2ICs2MCwx MiBAQCBjb25maWcgUENJX0VYWU5PUwogCXNlbGVjdCBQQ0lFUE9SVEJVUwogCXNlbGVjdCBQQ0lF X0RXCiAKK2NvbmZpZyBQQ0lfRlRQQ0kxMDAKKwlib29sICJGYXJhZGF5IFRlY2hub2xvZ3kgRlRQ Q0kxMDAgUENJIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMgb24gQVJNCisJ ZGVmYXVsdCBBUkNIX0dFTUlOSQorCiBjb25maWcgUENJX0lNWDYKIAlib29sICJGcmVlc2NhbGUg aS5NWDYgUENJZSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gU09DX0lNWDZRCmRpZmYgLS1naXQg YS9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZQpp bmRleCBiZmUzMTc5YWU3NGMuLjM5ZjIwYjQzNDE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kv aG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlCkBAIC0yLDYgKzIs NyBAQCBvYmotJChDT05GSUdfUENJRV9EVykgKz0gcGNpZS1kZXNpZ253YXJlLm8KIG9iai0kKENP TkZJR19QQ0lFX0RXX1BMQVQpICs9IHBjaWUtZGVzaWdud2FyZS1wbGF0Lm8KIG9iai0kKENPTkZJ R19QQ0lfRFJBN1hYKSArPSBwY2ktZHJhN3h4Lm8KIG9iai0kKENPTkZJR19QQ0lfRVhZTk9TKSAr PSBwY2ktZXh5bm9zLm8KK29iai0kKENPTkZJR19QQ0lfRlRQQ0kxMDApICs9IHBjaS1mdHBjaTEw MC5vCiBvYmotJChDT05GSUdfUENJX0lNWDYpICs9IHBjaS1pbXg2Lm8KIG9iai0kKENPTkZJR19Q Q0lfSFlQRVJWKSArPSBwY2ktaHlwZXJ2Lm8KIG9iai0kKENPTkZJR19QQ0lfTVZFQlUpICs9IHBj aS1tdmVidS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1mdHBjaTEwMC5jIGIv ZHJpdmVycy9wY2kvaG9zdC9wY2ktZnRwY2kxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjQzOGExZTk1ZWUxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv cGNpL2hvc3QvcGNpLWZ0cGNpMTAwLmMKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBTdXBwb3J0 IGZvciBGYXJhZGF5IFRlY2hub2xvZ3kgRlRQQzEwMCBQQ0kgQ29udHJvbGxlcgorICoKKyAqIENv cHlyaWdodCAoQykgMjAxNyBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+ CisgKgorICogQmFzZWQgb24gdGhlIG91dC1vZi10cmVlIE9wZW5XUlQgcGF0Y2ggZm9yIENvcnRp bmEgR2VtaW5pOgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbm9zIExhdWJlIDxqYW5vcy5kZXZA Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxp dXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICogQmFzZWQgb24gU0wyMzEyIFBDSSBjb250cm9s bGVyIGNvZGUKKyAqIFN0b3JsaW5rIChDKSAyMDAzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5o PgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9j aGFpbmVkX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4 L2lycS5oPgorCisvKgorICogU3BlY2lhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBkaXJlY3Rs eSBpbiB0aGUgZmlyc3QgZmV3IHdvcmRzCisgKiBpbiBoZSBJL08gc3BhY2UuCisgKi8KKyNkZWZp bmUgUENJX0lPU0laRQkweDAwCisjZGVmaW5lIFBDSV9QUk9UCTB4MDQgLyogQUhCIHByb3RlY3Rp b24gKi8KKyNkZWZpbmUgUENJX0NUUkwJMHgwOCAvKiBQQ0kgY29udHJvbCBzaWduYWwgKi8KKyNk ZWZpbmUgUENJX1NPRlRSU1QJMHgxMCAvKiBTb2Z0IHJlc2V0IGNvdW50ZXIgYW5kIHJlc3BvbnNl IGVycm9yIGVuYWJsZSAqLworI2RlZmluZSBQQ0lfQ09ORklHCTB4MjggLyogUENJIGNvbmZpZ3Vy YXRpb24gY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZSBQQ0lfREFUQQkweDJDCisKKyNkZWZp bmUgRkFSQURBWV9QQ0lfUE1DCQkJMHg0MCAvKiBQb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgKi8K KyNkZWZpbmUgRkFSQURBWV9QQ0lfUE1DU1IJCTB4NDQgLyogUG93ZXIgbWFuYWdlbWVudCBzdGF0 dXMgKi8KKyNkZWZpbmUgRkFSQURBWV9QQ0lfQ1RSTDEJCTB4NDggLyogQ29udHJvbCByZWdpc3Rl ciAxICovCisjZGVmaW5lIEZBUkFEQVlfUENJX0NUUkwyCQkweDRDIC8qIENvbnRyb2wgcmVnaXN0 ZXIgMiAqLworI2RlZmluZSBGQVJBREFZX1BDSV9NRU0xX0JBU0VfU0laRQkweDUwIC8qIE1lbW9y eSBiYXNlIGFuZCBzaXplICMxICovCisjZGVmaW5lIEZBUkFEQVlfUENJX01FTTJfQkFTRV9TSVpF CTB4NTQgLyogTWVtb3J5IGJhc2UgYW5kIHNpemUgIzIgKi8KKyNkZWZpbmUgRkFSQURBWV9QQ0lf TUVNM19CQVNFX1NJWkUJMHg1OCAvKiBNZW1vcnkgYmFzZSBhbmQgc2l6ZSAjMyAqLworCisvKiBC aXRzIDMxLi4yOCBnaXZlcyBJTlRELi5JTlRBIHN0YXR1cyAqLworI2RlZmluZSBQQ0lfQ1RSTDJf SU5UU1RTX1NISUZUCQkyOAorI2RlZmluZSBQQ0lfQ1RSTDJfSU5UTUFTS19DTURFUlIJQklUKDI3 KQorI2RlZmluZSBQQ0lfQ1RSTDJfSU5UTUFTS19QQVJFUlIJQklUKDI2KQorLyogQml0cyAyNS4u MjIgbWFza3MgSU5URC4uSU5UQSAqLworI2RlZmluZSBQQ0lfQ1RSTDJfSU5UTUFTS19TSElGVAkJ MjIKKyNkZWZpbmUgUENJX0NUUkwyX0lOVE1BU0tfTUFCUlRfUlgJQklUKDIxKQorI2RlZmluZSBQ Q0lfQ1RSTDJfSU5UTUFTS19UQUJSVF9SWAlCSVQoMjApCisjZGVmaW5lIFBDSV9DVFJMMl9JTlRN QVNLX1RBQlJUX1RYCUJJVCgxOSkKKyNkZWZpbmUgUENJX0NUUkwyX0lOVE1BU0tfUkVUUlk0CUJJ VCgxOCkKKyNkZWZpbmUgUENJX0NUUkwyX0lOVE1BU0tfU0VSUl9SWAlCSVQoMTcpCisjZGVmaW5l IFBDSV9DVFJMMl9JTlRNQVNLX1BFUlJfUlgJQklUKDE2KQorLyogQml0IDE1IHJlc2VydmVkICov CisjZGVmaW5lIFBDSV9DVFJMMl9NU1RQUklfUkVRNgkJQklUKDE0KQorI2RlZmluZSBQQ0lfQ1RS TDJfTVNUUFJJX1JFUTUJCUJJVCgxMykKKyNkZWZpbmUgUENJX0NUUkwyX01TVFBSSV9SRVE0CQlC SVQoMTIpCisjZGVmaW5lIFBDSV9DVFJMMl9NU1RQUklfUkVRMwkJQklUKDExKQorI2RlZmluZSBQ Q0lfQ1RSTDJfTVNUUFJJX1JFUTIJCUJJVCgxMCkKKyNkZWZpbmUgUENJX0NUUkwyX01TVFBSSV9S RVExCQlCSVQoOSkKKyNkZWZpbmUgUENJX0NUUkwyX01TVFBSSV9SRVEwCQlCSVQoOCkKKy8qIEJp dHMgNy4uNCByZXNlcnZlZCAqLworLyogQml0cyAzLi4wIFRSRFlXICovCisKKy8qCisgKiBNZW1v cnkgY29uZmlnczoKKyAqIEJpdCAzMS4uMjAgZGVmaW5lcyB0aGUgUENJIHNpZGUgbWVtb3J5IGJh c2UKKyAqIEJpdCAxOS4uMTYgKDQgYml0cykgZGVmaW5lcyB0aGUgc2l6ZSBwZXIgYmVsb3cKKyAq LworI2RlZmluZSBGQVJBREFZX1BDSV9NRU1CQVNFX01BU0sJMHhmZmYwMDAwMAorI2RlZmluZSBG QVJBREFZX1BDSV9NRU1TSVpFXzFNQgkJMHgwCisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVf Mk1CCQkweDEKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV80TUIJCTB4MgorI2RlZmluZSBG QVJBREFZX1BDSV9NRU1TSVpFXzhNQgkJMHgzCisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVf MTZNQgkweDQKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV8zMk1CCTB4NQorI2RlZmluZSBG QVJBREFZX1BDSV9NRU1TSVpFXzY0TUIJMHg2CisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVf MTI4TUIJMHg3CisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJWkVfMjU2TUIJMHg4CisjZGVmaW5l IEZBUkFEQVlfUENJX01FTVNJWkVfNTEyTUIJMHg5CisjZGVmaW5lIEZBUkFEQVlfUENJX01FTVNJ WkVfMUdCCQkweGEKKyNkZWZpbmUgRkFSQURBWV9QQ0lfTUVNU0laRV8yR0IJCTB4YgorI2RlZmlu ZSBGQVJBREFZX1BDSV9NRU1TSVpFX1NISUZUCTE2CisKKy8qCisgKiBUaGUgRE1BIGJhc2UgaXMg c2V0IHRvIDB4MCBmb3IgYWxsIG1lbW9yeSBzZWdtZW50cywgaXQgcmVmbGVjdHMgdGhlCisgKiBm YWN0IHRoYXQgdGhlIG1lbW9yeSBvZiB0aGUgaG9zdCBzeXN0ZW0gc3RhcnRzIGF0IDB4MC4KKyAq LworI2RlZmluZSBGQVJBREFZX1BDSV9ETUFfTUVNMV9CQVNFCTB4MDAwMDAwMDAKKyNkZWZpbmUg RkFSQURBWV9QQ0lfRE1BX01FTTJfQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIEZBUkFEQVlfUENJ X0RNQV9NRU0zX0JBU0UJMHgwMDAwMDAwMAorCisvKiBEZWZpbmVzIGZvciBQQ0kgY29uZmlndXJh dGlvbiBjb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSV9DT05GX0VOQUJMRQkJQklUKDMx KQorI2RlZmluZSBQQ0lfQ09ORl9XSEVSRShyKQkoKHIpICYgMHhGQykKKyNkZWZpbmUgUENJX0NP TkZfQlVTKGIpCQkoKChiKSAmIDB4RkYpIDw8IDE2KQorI2RlZmluZSBQQ0lfQ09ORl9ERVZJQ0Uo ZCkJKCgoZCkgJiAweDFGKSA8PCAxMSkKKyNkZWZpbmUgUENJX0NPTkZfRlVOQ1RJT04oZikJKCgo ZikgJiAweDA3KSA8PCA4KQorCisvKioKKyAqIHN0cnVjdCBmYXJhZGF5X3BjaV92YXJpYW50IC0g ZW5jb2RlcyBJUCBibG9jayBkaWZmZXJlbmNlcworICogQGNhc2NhZGVkX2lycTogdGhpcyBob3N0 IGhhcyBjYXNjYWRlZCBJUlFzIGZyb20gYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqCWVtYmVk ZGVkIGluIHRoZSBob3N0IGJyaWRnZS4KKyAqLworc3RydWN0IGZhcmFkYXlfcGNpX3ZhcmlhbnQg eworCWJvb2wgY2FzY2FkZWRfaXJxOworfTsKKworc3RydWN0IGZhcmFkYXlfcGNpIHsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBpcnFfZG9tYWlu ICppcnFkb21haW47CisJc3RydWN0IHBjaV9idXMgKmJ1czsKK307CisKK3N0YXRpYyBpbnQgZmFy YWRheV9yZXNfdG9fbWVtY2ZnKHJlc291cmNlX3NpemVfdCBtZW1fYmFzZSwKKwkJCQkgcmVzb3Vy Y2Vfc2l6ZV90IG1lbV9zaXplLAorCQkJCSB1MzIgKnZhbCkKK3sKKwl1MzIgb3V0dmFsOworCisJ c3dpdGNoIChtZW1fc2l6ZSkgeworCWNhc2UgU1pfMU06CisJCW91dHZhbCA9IEZBUkFEQVlfUENJ X01FTVNJWkVfMU1COworCQlicmVhazsKKwljYXNlIFNaXzJNOgorCQlvdXR2YWwgPSBGQVJBREFZ X1BDSV9NRU1TSVpFXzJNQjsKKwkJYnJlYWs7CisJY2FzZSBTWl80TToKKwkJb3V0dmFsID0gRkFS QURBWV9QQ0lfTUVNU0laRV80TUI7CisJCWJyZWFrOworCWNhc2UgU1pfOE06CisJCW91dHZhbCA9 IEZBUkFEQVlfUENJX01FTVNJWkVfOE1COworCQlicmVhazsKKwljYXNlIFNaXzE2TToKKwkJb3V0 dmFsID0gRkFSQURBWV9QQ0lfTUVNU0laRV8xNk1COworCQlicmVhazsKKwljYXNlIFNaXzMyTToK KwkJb3V0dmFsID0gRkFSQURBWV9QQ0lfTUVNU0laRV8zMk1COworCQlicmVhazsKKwljYXNlIFNa XzY0TToKKwkJb3V0dmFsID0gRkFSQURBWV9QQ0lfTUVNU0laRV82NE1COworCQlicmVhazsKKwlj YXNlIFNaXzEyOE06CisJCW91dHZhbCA9IEZBUkFEQVlfUENJX01FTVNJWkVfMTI4TUI7CisJCWJy ZWFrOworCWNhc2UgU1pfMjU2TToKKwkJb3V0dmFsID0gRkFSQURBWV9QQ0lfTUVNU0laRV8yNTZN QjsKKwkJYnJlYWs7CisJY2FzZSBTWl81MTJNOgorCQlvdXR2YWwgPSBGQVJBREFZX1BDSV9NRU1T SVpFXzUxMk1COworCQlicmVhazsKKwljYXNlIFNaXzFHOgorCQlvdXR2YWwgPSBGQVJBREFZX1BD SV9NRU1TSVpFXzFHQjsKKwkJYnJlYWs7CisJY2FzZSBTWl8yRzoKKwkJb3V0dmFsID0gRkFSQURB WV9QQ0lfTUVNU0laRV8yR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFM OworCX0KKwlvdXR2YWwgPDw9IEZBUkFEQVlfUENJX01FTVNJWkVfU0hJRlQ7CisKKwkvKiBUaGlz IGlzIHByb2JhYmx5IG5vdCBnb29kICovCisJaWYgKG1lbV9iYXNlICYgfihGQVJBREFZX1BDSV9N RU1CQVNFX01BU0spKQorCQlwcl93YXJuKCJ0cnVuY2F0ZWQgUENJIG1lbW9yeSBiYXNlXG4iKTsK KwkvKiBUcmFuc2xhdGUgdG8gYnJpZGdlIHNpZGUgYWRkcmVzcyBzcGFjZSAqLworCW91dHZhbCB8 PSAobWVtX2Jhc2UgJiBGQVJBREFZX1BDSV9NRU1CQVNFX01BU0spOworCXByX2RlYnVnKCJUcmFu c2xhdGVkIHBjaSBiYXNlIEAlMDh4LCBzaXplICUwOHggdG8gY29uZmlnICUwOHhcbiIsCisJCSBt ZW1fYmFzZSwgbWVtX3NpemUsIG91dHZhbCk7CisKKwkqdmFsID0gb3V0dmFsOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGZhcmFkYXlfcGNpX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVz ICpidXMsIHVuc2lnbmVkIGludCBmbiwKKwkJCQkgIGludCBjb25maWcsIGludCBzaXplLCB1MzIg KnZhbHVlKQoreworCXN0cnVjdCBmYXJhZGF5X3BjaSAqcCA9IGJ1cy0+c3lzZGF0YTsKKworCXdy aXRlbChQQ0lfQ09ORl9CVVMoYnVzLT5udW1iZXIpIHwKKwkJCVBDSV9DT05GX0RFVklDRShQQ0lf U0xPVChmbikpIHwKKwkJCVBDSV9DT05GX0ZVTkNUSU9OKFBDSV9GVU5DKGZuKSkgfAorCQkJUENJ X0NPTkZfV0hFUkUoY29uZmlnKSB8CisJCQlQQ0lfQ09ORl9FTkFCTEUsCisJCQlwLT5iYXNlICsg UENJX0NPTkZJRyk7CisKKwkqdmFsdWUgPSByZWFkbChwLT5iYXNlICsgUENJX0RBVEEpOworCisJ aWYgKHNpemUgPT0gMSkKKwkJKnZhbHVlID0gKCp2YWx1ZSA+PiAoOCAqIChjb25maWcgJiAzKSkp ICYgMHhGRjsKKwllbHNlIGlmIChzaXplID09IDIpCisJCSp2YWx1ZSA9ICgqdmFsdWUgPj4gKDgg KiAoY29uZmlnICYgMykpKSAmIDB4RkZGRjsKKworCWRldl9kYmcoJmJ1cy0+ZGV2LAorCQkiW3Jl YWRdICBzbHQ6ICUuMmQsIGZuYzogJWQsIGNuZjogMHglLjJYLCB2YWwgKCVkIGJ5dGVzKTogMHgl LjhYXG4iLAorCQlQQ0lfU0xPVChmbiksIFBDSV9GVU5DKGZuKSwgY29uZmlnLCBzaXplLCAqdmFs dWUpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBmYXJh ZGF5X3BjaV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGZu LAorCQkJCSAgIGludCBjb25maWcsIGludCBzaXplLCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGZh cmFkYXlfcGNpICpwID0gYnVzLT5zeXNkYXRhOworCWludCByZXQgPSBQQ0lCSU9TX1NVQ0NFU1NG VUw7CisKKwlkZXZfZGJnKCZidXMtPmRldiwKKwkJIlt3cml0ZV0gc2x0OiAlLjJkLCBmbmM6ICVk LCBjbmY6IDB4JS4yWCwgdmFsICglZCBieXRlcyk6IDB4JS44WFxuIiwKKwkJUENJX1NMT1QoZm4p LCBQQ0lfRlVOQyhmbiksIGNvbmZpZywgc2l6ZSwgdmFsdWUpOworCisJd3JpdGVsKFBDSV9DT05G X0JVUyhidXMtPm51bWJlcikgfAorCQkJUENJX0NPTkZfREVWSUNFKFBDSV9TTE9UKGZuKSkgfAor CQkJUENJX0NPTkZfRlVOQ1RJT04oUENJX0ZVTkMoZm4pKSB8CisJCQlQQ0lfQ09ORl9XSEVSRShj b25maWcpIHwKKwkJCVBDSV9DT05GX0VOQUJMRSwKKwkJCXAtPmJhc2UgKyBQQ0lfQ09ORklHKTsK KworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgNDoKKwkJd3JpdGVsKHZhbHVlLCBwLT5iYXNlICsg UENJX0RBVEEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXdyaXRldyh2YWx1ZSwgcC0+YmFzZSAr IFBDSV9EQVRBICsgKGNvbmZpZyAmIDMpKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3cml0ZWIo dmFsdWUsIHAtPmJhc2UgKyBQQ0lfREFUQSArIChjb25maWcgJiAzKSk7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldCA9IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgZmFyYWRheV9wY2lfb3BzID0gewor CS5yZWFkCT0gZmFyYWRheV9wY2lfcmVhZF9jb25maWcsCisJLndyaXRlCT0gZmFyYWRheV9wY2lf d3JpdGVfY29uZmlnLAorfTsKKworc3RhdGljIHZvaWQgZmFyYWRheV9wY2lfYWNrX2lycShzdHJ1 Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGZhcmFkYXlfcGNpICpwID0gaXJxX2RhdGFfZ2V0 X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCWZhcmFkYXlfcGNpX3Jl YWRfY29uZmlnKHAtPmJ1cywgMCwgRkFSQURBWV9QQ0lfQ1RSTDIsIDQsICZyZWcpOworCXJlZyAm PSB+KDB4RiA8PCBQQ0lfQ1RSTDJfSU5UU1RTX1NISUZUKTsKKwlyZWcgfD0gQklUKGlycWRfdG9f aHdpcnEoZCkgKyBQQ0lfQ1RSTDJfSU5UU1RTX1NISUZUKTsKKwlmYXJhZGF5X3BjaV93cml0ZV9j b25maWcocC0+YnVzLCAwLCBGQVJBREFZX1BDSV9DVFJMMiwgNCwgcmVnKTsKK30KKworc3RhdGlj IHZvaWQgZmFyYWRheV9wY2lfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVj dCBmYXJhZGF5X3BjaSAqcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2ln bmVkIGludCByZWc7CisKKwlmYXJhZGF5X3BjaV9yZWFkX2NvbmZpZyhwLT5idXMsIDAsIEZBUkFE QVlfUENJX0NUUkwyLCA0LCAmcmVnKTsKKwlyZWcgJj0gfigoMHhGIDw8IFBDSV9DVFJMMl9JTlRT VFNfU0hJRlQpCisJCSB8IEJJVChpcnFkX3RvX2h3aXJxKGQpICsgUENJX0NUUkwyX0lOVE1BU0tf U0hJRlQpKTsKKwlmYXJhZGF5X3BjaV93cml0ZV9jb25maWcocC0+YnVzLCAwLCBGQVJBREFZX1BD SV9DVFJMMiwgNCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZmFyYWRheV9wY2lfdW5tYXNrX2ly cShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGZhcmFkYXlfcGNpICpwID0gaXJxX2Rh dGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCWZhcmFkYXlf cGNpX3JlYWRfY29uZmlnKHAtPmJ1cywgMCwgRkFSQURBWV9QQ0lfQ1RSTDIsIDQsICZyZWcpOwor CXJlZyAmPSB+KDB4RiA8PCBQQ0lfQ1RSTDJfSU5UU1RTX1NISUZUKTsKKwlyZWcgfD0gQklUKGly cWRfdG9faHdpcnEoZCkgKyBQQ0lfQ1RSTDJfSU5UTUFTS19TSElGVCk7CisJZmFyYWRheV9wY2lf d3JpdGVfY29uZmlnKHAtPmJ1cywgMCwgRkFSQURBWV9QQ0lfQ1RSTDIsIDQsIHJlZyk7Cit9CisK K3N0YXRpYyB2b2lkIGZhcmFkYXlfcGNpX2lycV9oYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVz YykKK3sKKwlzdHJ1Y3QgZmFyYWRheV9wY2kgKnAgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRh KGRlc2MpOworCXN0cnVjdCBpcnFfY2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRl c2MpOworCXVuc2lnbmVkIGludCBpcnFfc3RhdCwgcmVnLCBpOworCisJZmFyYWRheV9wY2lfcmVh ZF9jb25maWcocC0+YnVzLCAwLCBGQVJBREFZX1BDSV9DVFJMMiwgNCwgJnJlZyk7CisJaXJxX3N0 YXQgPSByZWcgPj4gUENJX0NUUkwyX0lOVFNUU19TSElGVDsKKworCWNoYWluZWRfaXJxX2VudGVy KGlycWNoaXAsIGRlc2MpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoKGly cV9zdGF0ICYgQklUKGkpKSA9PSAwKQorCQkJY29udGludWU7CisJCWdlbmVyaWNfaGFuZGxlX2ly cShpcnFfZmluZF9tYXBwaW5nKHAtPmlycWRvbWFpbiwgaSkpOworCX0KKworCWNoYWluZWRfaXJx X2V4aXQoaXJxY2hpcCwgZGVzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZmFyYWRh eV9wY2lfaXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiUENJIiwKKwkuaXJxX2FjayA9IGZhcmFkYXlf cGNpX2Fja19pcnEsCisJLmlycV9tYXNrID0gZmFyYWRheV9wY2lfbWFza19pcnEsCisJLmlycV91 bm1hc2sgPSBmYXJhZGF5X3BjaV91bm1hc2tfaXJxLAorfTsKKworc3RhdGljIGludCBmYXJhZGF5 X3BjaV9pcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEs CisJCQkgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisJaXJxX3NldF9jaGlwX2FuZF9o YW5kbGVyKGlycSwgJmZhcmFkYXlfcGNpX2lycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwlp cnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi0+aG9zdF9kYXRhKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIGZhcmFkYXlfcGNpX2lycWRv bWFpbl9vcHMgPSB7CisJLm1hcCA9IGZhcmFkYXlfcGNpX2lycV9tYXAsCit9OworCitzdGF0aWMg aW50IGZhcmFkYXlfcGNpX3NldHVwX2Nhc2NhZGVkX2lycShzdHJ1Y3QgZmFyYWRheV9wY2kgKnAp Cit7CisJc3RydWN0IGRldmljZV9ub2RlICppbnRjID0gb2ZfZ2V0X25leHRfY2hpbGQocC0+ZGV2 LT5vZl9ub2RlLCBOVUxMKTsKKwlpbnQgaXJxOworCWludCBpOworCisJaWYgKCFpbnRjKSB7CisJ CWRldl9lcnIocC0+ZGV2LCAibWlzc2luZyBjaGlsZCBpbnRlcnJ1cHQtY29udHJvbGxlciBub2Rl XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQWxsIFBDSSBJUlFzIGNhc2NhZGUg b2ZmIHRoaXMgb25lICovCisJaXJxID0gb2ZfaXJxX2dldChpbnRjLCAwKTsKKwlpZiAoIWlycSkg eworCQlkZXZfZXJyKHAtPmRldiwgImZhaWxlZCB0byBnZXQgcGFyZW50IElSUVxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXAtPmlycWRvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVh cihpbnRjLCA0LAorCQkJCQkgICAgICZmYXJhZGF5X3BjaV9pcnFkb21haW5fb3BzLAorCQkJCQkg ICAgIHApOworCWlmICghcC0+aXJxZG9tYWluKSB7CisJCWRldl9lcnIocC0+ZGV2LCAiZmFpbGVk IHRvIGNyZWF0ZSBHZW1pbmkgUENJIElSUSBkb21haW5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0YShpcnEsIGZhcmFkYXlfcGNp X2lycV9oYW5kbGVyLCBwKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWlycV9jcmVh dGVfbWFwcGluZyhwLT5pcnFkb21haW4sIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgcGNpX2RtYV9yYW5nZV9wYXJzZXJfaW5pdChzdHJ1Y3Qgb2ZfcGNpX3JhbmdlX3BhcnNlciAq cGFyc2VyLAorCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWNvbnN0IGlu dCBuYSA9IDMsIG5zID0gMjsKKwlpbnQgcmxlbjsKKworCXBhcnNlci0+bm9kZSA9IG5vZGU7CisJ cGFyc2VyLT5wbmEgPSBvZl9uX2FkZHJfY2VsbHMobm9kZSk7CisJcGFyc2VyLT5ucCA9IHBhcnNl ci0+cG5hICsgbmEgKyBuczsKKworCXBhcnNlci0+cmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkobm9k ZSwgImRtYS1yYW5nZXMiLCAmcmxlbik7CisJaWYgKCFwYXJzZXItPnJhbmdlKQorCQlyZXR1cm4g LUVOT0VOVDsKKwlwYXJzZXItPmVuZCA9IHBhcnNlci0+cmFuZ2UgKyBybGVuIC8gc2l6ZW9mKF9f YmUzMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYXJhZGF5X3BjaV9wYXJzZV9t YXBfZG1hX3JhbmdlcyhzdHJ1Y3QgZmFyYWRheV9wY2kgKnAsCisJCQkJCSAgICBzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBvZl9wY2lfcmFuZ2UgcmFuZ2U7CisJc3RydWN0IG9m X3BjaV9yYW5nZV9wYXJzZXIgcGFyc2VyOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHAtPmRldjsK Kwl1MzIgY29uZnJlZ1szXSA9IHsKKwkJRkFSQURBWV9QQ0lfTUVNMV9CQVNFX1NJWkUsCisJCUZB UkFEQVlfUENJX01FTTJfQkFTRV9TSVpFLAorCQlGQVJBREFZX1BDSV9NRU0zX0JBU0VfU0laRSwK Kwl9OworCWludCBpID0gMDsKKwl1MzIgdmFsOworCisJaWYgKHBjaV9kbWFfcmFuZ2VfcGFyc2Vy X2luaXQoJnBhcnNlciwgbnApKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBkbWEtcmFuZ2Vz IHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBHZXQgdGhl IGRtYS1yYW5nZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUKKwkgKi8KKwlmb3JfZWFjaF9vZl9wY2lf cmFuZ2UoJnBhcnNlciwgJnJhbmdlKSB7CisJCXU2NCBlbmQgPSByYW5nZS5wY2lfYWRkciArIHJh bmdlLnNpemUgLSAxOworCQlpbnQgcmV0OworCisJCXJldCA9IGZhcmFkYXlfcmVzX3RvX21lbWNm ZyhyYW5nZS5wY2lfYWRkciwgcmFuZ2Uuc2l6ZSwgJnZhbCk7CisJCWlmIChyZXQpIHsKKwkJCWRl dl9lcnIoZGV2LAorCQkJCSJETUEgcmFuZ2UgJWQ6IGlsbGVnYWwgTUVNIHJlc291cmNlIHNpemVc biIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlkZXZfaW5mbyhkZXYsICJETUEg TUVNJWQgQkFTRTogMHglMDE2bGx4IC0+IDB4JTAxNmxseCBjb25maWcgJTA4eFxuIiwKKwkJCSBp ICsgMSwgcmFuZ2UucGNpX2FkZHIsIGVuZCwgdmFsKTsKKwkJaWYgKGkgPD0gMikgeworCQkJZmFy YWRheV9wY2lfd3JpdGVfY29uZmlnKHAtPmJ1cywgMCwgY29uZnJlZ1tpXSwKKwkJCQkJCSA0LCB2 YWwpOworCQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICJpZ25vcmUgZXh0cmFuZW91cyBkbWEt cmFuZ2UgJWRcbiIsIGkpOworCQkJYnJlYWs7CisJCX0KKworCQlpKys7CisJfQorCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZmFyYWRheV9wY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWNvbnN0 IHN0cnVjdCBmYXJhZGF5X3BjaV92YXJpYW50ICp2YXJpYW50ID0KKwkJb2ZfZGV2aWNlX2dldF9t YXRjaF9kYXRhKGRldik7CisJc3RydWN0IHJlc291cmNlICpyZWdzOworCXJlc291cmNlX3NpemVf dCBpb19iYXNlOworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqd2luOworCXN0cnVjdCBmYXJhZGF5 X3BjaSAqcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvOwor CXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3Q7CisJaW50IHJldDsKKwl1MzIgdmFsOworCUxJ U1RfSEVBRChyZXMpOworCisJaG9zdCA9IHBjaV9hbGxvY19ob3N0X2JyaWRnZShzaXplb2YoKnAp KTsKKwlpZiAoIWhvc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJaG9zdC0+ZGV2LnBhcmVudCA9 IGRldjsKKwlob3N0LT5vcHMgPSAmZmFyYWRheV9wY2lfb3BzOworCWhvc3QtPmJ1c25yID0gMDsK Kwlob3N0LT5tc2kgPSBOVUxMOworCXAgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdihob3N0KTsKKwlo b3N0LT5zeXNkYXRhID0gcDsKKwlwLT5kZXYgPSBkZXY7CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlwLT5iYXNlID0gZGV2bV9pb3Jl bWFwX3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihwLT5iYXNlKSkKKwkJcmV0dXJu IFBUUl9FUlIocC0+YmFzZSk7CisKKwlyZXQgPSBvZl9wY2lfZ2V0X2hvc3RfYnJpZGdlX3Jlc291 cmNlcyhkZXYtPm9mX25vZGUsIDAsIDB4ZmYsCisJCQkJCSAgICAgICAmcmVzLCAmaW9fYmFzZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRldm1fcmVxdWVzdF9wY2lfYnVz X3Jlc291cmNlcyhkZXYsICZyZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBH ZXQgdGhlIEkvTyBhbmQgbWVtb3J5IHJhbmdlcyBmcm9tIERUICovCisJcmVzb3VyY2VfbGlzdF9m b3JfZWFjaF9lbnRyeSh3aW4sICZyZXMpIHsKKwkJc3dpdGNoIChyZXNvdXJjZV90eXBlKHdpbi0+ cmVzKSkgeworCQljYXNlIElPUkVTT1VSQ0VfSU86CisJCQlpbyA9IHdpbi0+cmVzOworCQkJaW8t Pm5hbWUgPSAiR2VtaW5pIFBDSSBJL08iOworCQkJaWYgKCFmYXJhZGF5X3Jlc190b19tZW1jZmco aW8tPnN0YXJ0IC0gd2luLT5vZmZzZXQsCisJCQkJCQkgICByZXNvdXJjZV9zaXplKGlvKSwKKwkJ CQkJCSAgICZ2YWwpKSB7CisJCQkJLyogc2V0dXAgSS9PIHNwYWNlIHNpemUgKi8KKwkJCQl3cml0 ZWwodmFsLCBwLT5iYXNlICsgUENJX0lPU0laRSk7CisJCQl9IGVsc2UgeworCQkJCWRldl9lcnIo ZGV2LAorCQkJCQkiaWxsZWdhbCBJTyBtZW0gc2l6ZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7 CisJCQl9CisJCQlyZXQgPSBwY2lfcmVtYXBfaW9zcGFjZShpbywgaW9fYmFzZSk7CisJCQlpZiAo cmV0KSB7CisJCQkJZGV2X3dhcm4oZGV2LCAiZXJyb3IgJWQ6IGZhaWxlZCB0byBtYXAgcmVzb3Vy Y2UgJXBSXG4iLAorCQkJCQkgcmV0LCBpbyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicmVh azsKKwkJY2FzZSBJT1JFU09VUkNFX01FTToKKwkJCW1lbSA9IHdpbi0+cmVzOworCQkJbWVtLT5u YW1lID0gIkdlbWluaSBQQ0kgTUVNIjsKKwkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0VfQlVT OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFNldHVw IGhvc3RicmlkZ2UgKi8KKwl2YWwgPSByZWFkbChwLT5iYXNlICsgUENJX0NUUkwpOworCXZhbCB8 PSBQQ0lfQ09NTUFORF9JTzsKKwl2YWwgfD0gUENJX0NPTU1BTkRfTUVNT1JZOworCXZhbCB8PSBQ Q0lfQ09NTUFORF9NQVNURVI7CisJd3JpdGVsKHZhbCwgcC0+YmFzZSArIFBDSV9DVFJMKTsKKwor CWxpc3Rfc3BsaWNlX2luaXQoJnJlcywgJmhvc3QtPndpbmRvd3MpOworCXJldCA9IHBjaV9yZWdp c3Rlcl9ob3N0X2JyaWRnZShob3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHJlZ2lzdGVyIGhvc3Q6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlw LT5idXMgPSBob3N0LT5idXM7CisKKwkvKiBNYXNrIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cyAq LworCWZhcmFkYXlfcGNpX3dyaXRlX2NvbmZpZyhwLT5idXMsIDAsIEZBUkFEQVlfUENJX0NUUkwy ICsgMiwgMiwgMHhGMDAwKTsKKwlpZiAodmFyaWFudC0+Y2FzY2FkZWRfaXJxKSB7CisJCXJldCA9 IGZhcmFkYXlfcGNpX3NldHVwX2Nhc2NhZGVkX2lycShwKTsKKwkJaWYgKHJldCkgeworCQkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gc2V0dXAgY2FzY2FkZWQgSVJRXG4iKTsKKwkJCXJldHVybiBy ZXQ7CisJCX0KKwl9CisKKwlyZXQgPSBmYXJhZGF5X3BjaV9wYXJzZV9tYXBfZG1hX3Jhbmdlcyhw LCBkZXYtPm9mX25vZGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwY2lfc2Nhbl9j aGlsZF9idXMocC0+YnVzKTsKKwlwY2lfZml4dXBfaXJxcyhwY2lfY29tbW9uX3N3aXp6bGUsIG9m X2lycV9wYXJzZV9hbmRfbWFwX3BjaSk7CisJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHAtPmJ1 cyk7CisJcGNpX2J1c19hZGRfZGV2aWNlcyhwLT5idXMpOworCXBjaV9mcmVlX3Jlc291cmNlX2xp c3QoJnJlcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGVuY29kZSBicmlkZ2UgdmFy aWFudHMgaGVyZSwgd2UgaGF2ZSBhdCBsZWFzdCB0d28gc28gaXQgZG9lc24ndAorICogaHVydCB0 byBoYXZlIGluZnJhc3RydWN0dXJlIHRvIGVuY29tcGFzcyBmdXR1cmUgdmFyaWFudHMgYXMgd2Vs bC4KKyAqLworY29uc3Qgc3RydWN0IGZhcmFkYXlfcGNpX3ZhcmlhbnQgZmFyYWRheV9yZWd1bGFy ID0geworCS5jYXNjYWRlZF9pcnEgPSB0cnVlLAorfTsKKworY29uc3Qgc3RydWN0IGZhcmFkYXlf cGNpX3ZhcmlhbnQgZmFyYWRheV9kdWFsID0geworCS5jYXNjYWRlZF9pcnEgPSBmYWxzZSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZhcmFkYXlfcGNpX29mX21hdGNo W10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJmYXJhZGF5LGZ0cGNpMTAwIiwKKwkJLmRhdGEg PSAmZmFyYWRheV9yZWd1bGFyLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmYXJhZGF5LGZ0 cGNpMTAwLWR1YWwiLAorCQkuZGF0YSA9ICZmYXJhZGF5X2R1YWwsCisJfSwKKwl7fSwKK307CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZhcmFkYXlfcGNpX2RyaXZlciA9IHsKKwku ZHJpdmVyID0geworCQkubmFtZSA9ICJmdHBjaTEwMCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9m X21hdGNoX3B0cihmYXJhZGF5X3BjaV9vZl9tYXRjaCksCisJfSwKKwkucHJvYmUgID0gZmFyYWRh eV9wY2lfcHJvYmUsCit9OworYnVpbHRpbl9wbGF0Zm9ybV9kcml2ZXIoZmFyYWRheV9wY2lfZHJp dmVyKTsKLS0gCjIuOS4zCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCm9wZW53cnQtZGV2ZWwgbWFpbGluZyBsaXN0Cm9wZW53cnQtZGV2ZWxAbGlzdHMub3Bl bndydC5vcmcKaHR0cHM6Ly9saXN0cy5vcGVud3J0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGlu Zm8vb3BlbndydC1kZXZlbAo=