From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-gx0-f20.google.com (mail-gx0-f20.google.com [209.85.217.20]) by ozlabs.org (Postfix) with ESMTP id EEAA8DDF64 for ; Wed, 21 Jan 2009 03:05:03 +1100 (EST) Received: by gxk13 with SMTP id 13so3578152gxk.9 for ; Tue, 20 Jan 2009 08:05:00 -0800 (PST) Message-ID: Date: Tue, 20 Jan 2009 09:04:59 -0700 From: "Grant Likely" To: arieswar24b@yahoo.de Subject: Re: Bestcomm tasks and interrupts on MPC5200(B) In-Reply-To: <381238.78267.qm@web25801.mail.ukl.yahoo.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_19115_23293837.1232467499901" References: <381238.78267.qm@web25801.mail.ukl.yahoo.com> Cc: linuxppc-dev@ozlabs.org List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , ------=_Part_19115_23293837.1232467499901 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On Tue, Jan 20, 2009 at 6:15 AM, Dave Best wrote: > I'm trying to write a driver which uses the Local Plus Bus on my MPC5200B and therefore have to use BestComm DMA, which requires me to use a Gen_BD task for data transfer with Local Plus. > I tried to follow the fec driver that is currently used and took a peek at the mpc52xx-ac97 driver which at least uses the same kind of bus as I. > > Initialising the task, resetting and enabling works fine. Even request_irq reports no error, but when I start a transfer it hangs and if I am lucky, an interrupt occurs after quite some time. But it's always the BestComm ethernet rx task which produces an RFIFO interrupt, presumably after the watchdog catches on. > If this happens my interrupt occurs to. Are you using the LocalPlus fifo device for the transfer (you need to if you aren't)? I've attached a test driver that demonstrates how to do FIFO only and FIFO+DMA transfers over the localplus bus. g. -- Grant Likely, B.Sc., P.Eng. Secret Lab Technologies Ltd. ------=_Part_19115_23293837.1232467499901 Content-Type: text/x-patch; name=0001-Add-Bestcomm-localplus-test-utility.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fq6rbjpv0 Content-Disposition: attachment; filename=0001-Add-Bestcomm-localplus-test-utility.patch RnJvbSAyM2NhMGM0YjFmYTAxYWNlNDE3MjBhYWEwZmIzMmJkNDM1MWQwYWZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIu Y2E+CkRhdGU6IE1vbiwgNSBKYW4gMjAwOSAwMDo1Mzo1MSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hd IEFkZCBCZXN0Y29tbS9sb2NhbHBsdXMgdGVzdCB1dGlsaXR5CgotLS0KIGRyaXZlcnMvbWlzYy9L Y29uZmlnICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIGRyaXZlcnMvbWlzYy9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvbWlzYy9tcGM1MjAwLWxvY2FscGx1cy10 ZXN0LmMgfCAgOTM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBj aGFuZ2VkLCA5NDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL21pc2MvbXBjNTIwMC1sb2NhbHBsdXMtdGVzdC5jCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCBmZWU3MzA0 Li5lZGNhYjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJz L21pc2MvS2NvbmZpZwpAQCAtMTMsNiArMTMsMTAgQEAgbWVudWNvbmZpZyBNSVNDX0RFVklDRVMK IAogaWYgTUlTQ19ERVZJQ0VTCiAKK2NvbmZpZyBNUEM1MjAwX0xPQ0FMUExVU19QRVJGX1RFU1QK Kwl0cmlzdGF0ZSAiTVBDNTIwMCBMb2NhbFBsdXMgQnVzIHBlcmZvcm1hbmNlIHRlc3QgbW9kdWxl IgorCXNlbGVjdCBQUENfQkVTVENPTU1fR0VOX0JECisKIGNvbmZpZyBBVE1FTF9QV00KIAl0cmlz dGF0ZSAiQXRtZWwgQVQzMi9BVDkxIFBXTSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVZSMzIgfHwg QVJDSF9BVDkxU0FNOTI2MyB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxQ0FQOQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmlu ZGV4IDgxN2Y3ZjUuLjE5YTNkOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQor KysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTMzLDMgKzMzLDQgQEAgb2JqLSQoQ09ORklH X1NHSV9YUCkJCSs9IHNnaS14cC8KIG9iai0kKENPTkZJR19TR0lfR1JVKQkJKz0gc2dpLWdydS8K IG9iai0kKENPTkZJR19IUF9JTE8pCQkrPSBocGlsby5vCiBvYmotJChDT05GSUdfQzJQT1JUKQkJ Kz0gYzJwb3J0Lworb2JqLSQoQ09ORklHX01QQzUyMDBfTE9DQUxQTFVTX1BFUkZfVEVTVCkgKz0g bXBjNTIwMC1sb2NhbHBsdXMtdGVzdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbXBjNTIw MC1sb2NhbHBsdXMtdGVzdC5jIGIvZHJpdmVycy9taXNjL21wYzUyMDAtbG9jYWxwbHVzLXRlc3Qu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmE5OGZjCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9taXNjL21wYzUyMDAtbG9jYWxwbHVzLXRlc3QuYwpAQCAtMCwwICsx LDkzNyBAQAorLyoKKyAqIExvY2FsUGx1c0J1cyBwZXJmb3JtYW5jZSB0ZXN0cy4KKyAqCisgKiBD b3B5cmlnaHQgKEMpIFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4gMjAwOC0yMDA5CisgKgor ICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNl ZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBl eHByZXNzIG9yIGltcGxpZWQuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBzZXQgb2Yg TG9jYWxQbHVzIGJ1cyBwZXJmb3JtYW5jZSB0ZXN0cyB3aGVuIHVzaW5nCisgKiBkaXJlY3QgUHJv Z3JhbW1lZCBJTyAoUElPKSwgdGhlIExvY2FsUGx1cyBGSUZPLCBhbmQgd2hlbiB1c2luZyB0aGUK KyAqIEJlc3Rjb21tIERNQSBlbmdpbmUgdG8gdHJhbnNmZXIgZGF0YS4gIEl0IGNhbiBiZSBjb21w aWxlZCBpbnRvIHRoZQorICoga2VybmVsIG9yIGxvYWRlZCBhcyBhIG1vZHVsZS4KKyAqCisgKiBU aGUgdGVzdCBtb2R1bGUgaXMgY29udHJvbGxlZCB2aWEgZmlsZXMgaW4gdGhlIHN5c2ZzIGZpbGVz eXN0ZW0uICBTcGVjaWFsCisgKiBjb250cm9sIGZpbGVzIGFyZSBjcmVhdGVkIGluIC9zeXMvZGV2 aWNlcy9wbGF0Zm9ybS9scGJ0ZXN0LjAgd2hpY2gKKyAqIGNvbnRyb2wgdGhlIHRlc3RzIGFuZCBy ZXBvcnQgdGhlIHJlc3VsdHMuICBUZXN0IHBhcmFtZXRlcnMgYXJlIHNldCBieQorICogd3JpdGlu ZyB2YWx1ZXMgaW50byB0aGUgcGFyYW1ldGVyIGZpbGVzIChibG9ja3NpemUsIGJsb2NrY291bnQs IHBlcmlvZCwKKyAqIGFuZCB0eXBlKS4gIFRoZSB0ZXN0IGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQg d2l0aCB0aGUgJ2FjdGlvbicgZmlsZS4KKyAqIFJlc3VsdHMgYXJlIHJldHJpZXZlZCBieSByZWFk aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgJ3Jlc3VsdHMnIGZpbGUuCisgKgorICogVGhlIGZvbGxv d2luZyBwYXJhbWV0ZXJzIGNhbiBiZSBtb2RpZmllZDoKKyAqIGJsb2Nrc2l6ZTogbnVtYmVyIG9m IGJ5dGVzIHRvIHRyYW5zZmVyIGluIGVhY2ggYmxvY2suCisgKiBibG9ja2NvdW50OiBudW1iZXIg b2YgYmxvY2tzIHRvIHRyYW5zZmVyIHBlciB0aW1lciB0aWNrLgorICogcGVyaW9kOiBwZXJpb2Qg b2YgdGltZXIgaW4gbWljcm9zZWNvbmRzLiAgRXZlcnkgdGltZXIgdGljayB3aWxsIHN0YXJ0IGEK KyAqICAgICAgICAgbmV3IHRyYW5zZmVyIG9mIGRhdGEgYmxvY2tzCisgKiB0eXBlOiB0eXBlIG9m IHRlc3Q7IG1heSBiZSAncmFtJywgJ2ZpZm8nIG9yICdiY29tJy4KKyAqIGNoaXBzZWxlY3Q6IGNo aXBzZWxlY3QgdG8gdXNlIGZvciB0cmFuc2ZlcgorICoKKyAqIFRoZSBmaXJzdCB0ZXN0IHR5cGUg d2lsbCBjb3BpZXMgY29udGVudHMgb2YgYW4gTFBCIGFkZHJlc3MgcmFuZ2UKKyAqIHVzaW5nIGEg bWVtY3B5LgorICogVXNhZ2U6CisgKiAkIGVjaG8gcmFtID4gL3N5cy9kZXZpY2VzL3BsYXRmb3Jt L2xwYnRlc3QuMC90eXBlCisgKiAkIGVjaG8gc3RhcnQgPiAvc3lzL2RldmljZXMvcGxhdGZvcm0v bHBidGVzdC4wL2FjdGlvbgorICogJCBzbGVlcCA1cworICogJCBlY2hvIHN0b3AgPiAvc3lzL2Rl dmljZXMvcGxhdGZvcm0vbHBidGVzdC4wL2FjdGlvbgorICoKKyAqIFRoZSBzZWNvbmQgdGVzdCBj b3BpZXMgY29udGVudHMgb2YgYW4gTFBCIHJhbmdlIHRvIFJBTSB1c2luZyB0aGUKKyAqIExvY2Fs UGx1cyBGSUZPLiAgVGhlIEZJRk8gSVNSIGNvcGllcyBlYWNoIHBhY2tldCBmcm9tIHRoZSBGSUZP IHRvIFJBTS4KKyAqIFVzYWdlOgorICogJCBlY2hvIGZpZm8gPiAvc3lzL2RldmljZXMvcGxhdGZv cm0vbHBidGVzdC4wL3R5cGUKKyAqICQgZWNobyBzdGFydCA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9y bS9scGJ0ZXN0LjAvYWN0aW9uCisgKiAkIHNsZWVwIDVzCisgKiAkIGVjaG8gc3RvcCA+IC9zeXMv ZGV2aWNlcy9wbGF0Zm9ybS9scGJ0ZXN0LjAvYWN0aW9uCisgKgorICogVGhlIHRoaXJkIHRlc3Qg Y29waWVzIGNvbnRlbnRzIG9mIGFuIExQQiByYW5nZSB0byBSQU0gdXNpbmcgYm90aCB0aGUgRklG TworICogYW5kIHRoZSBCZXN0Y29tbSBETUEgZW5naW5lLgorICoKKyAqIFVzYWdlOgorICogJCBl Y2hvIGJjb20gPiAvc3lzL2RldmljZXMvcGxhdGZvcm0vbHBidGVzdC4wL3R5cGUKKyAqICQgZWNo byBzdGFydCA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9scGJ0ZXN0LjAvYWN0aW9uCisgKiAkIHNs ZWVwIDVzCisgKiAkIGVjaG8gc3RvcCA+IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9scGJ0ZXN0LjAv YWN0aW9uCisgKgorICogQWxsIHN5c2ZzIGVudHJpZXMgY2FuIGJlIHJlYWQgYnkgdXNpbmcgY2F0 IDxwYXJhbWV0ZXI+CisgKiBlLmcuIGNhdCAvc3lzL2RldmljZXMvcGxhdGZvcm0vbHBidGVzdC4w L3R5cGUgd2lsbCBzaG93IHRoZSB0ZXN0IHR5cGUKKyAqCisgKiBUaGUgZm9sbG93aW5nIGlzIGEg dXNlZnVsIGNvbW1hbmQgdG8gZHVtcCBvdXQgYWxsIHRoZSBzdGF0ZSBvZiB0aGUgbW9kdWxlOgor ICogJCBncmVwICcnICoKKyAqCisgKi8KKyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4 L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcu aD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4K KyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHN5c2Rldi9iZXN0Y29tbS9i ZXN0Y29tbS5oPgorI2luY2x1ZGUgPHN5c2Rldi9iZXN0Y29tbS9nZW5fYmQuaD4KKyNpbmNsdWRl IDxzeXNkZXYvYmVzdGNvbW0vYmVzdGNvbW1fcHJpdi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+ CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKworTU9EVUxFX0FVVEhPUigiU3RldmVuIENhdmFuYWdo IDxzY2F2YW5hZ2hAc2VjcmV0bGFiLmNhPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisj ZGVmaW5lIERSVk5BTUUgImxwYnRlc3QiCisKKyNkZWZpbmUgTFBCVEVTVF9GTEFTSF9CQVNFX0FE RFIJCSgweGZmZjAwMDAwKQorI2RlZmluZSBMUEJURVNUX0ZMQVNIX1NJWkUJCSgweDAwMDgwMDAw KQkvKiA1MTIgS0IgKi8KKyNkZWZpbmUgTFBCVEVTVF9GSUZPX1NJWkUJCSgweDIwMCkJCS8qIEZJ Rk8gc2l6ZSA1MTJieXRlcyAqLworCisjZGVmaW5lIExQQlRFU1RfU1RBVFVTX0FCT1JUCSgweDEw MDAwMDAwKQkvKiBzdGF0dXMgcmVnaXN0ZXIgYWJvcnQgICovCisjZGVmaW5lIExQQlRFU1RfU1RB VFVTX05PUk1BTAkoMHgwMTAwMDAwMCkJLyogc3RhdHVzIHJlZ2lzdGVyIG5vcm1hbCAqLworCisj ZGVmaW5lIExQQlRFU1RfRklGT19PRkZTRVQJCTB4M0MwMAorI2RlZmluZSBMUEJURVNUX1BBQ0tF VF9TSVpFX1JFRwkJMHgwMAkvKiBwYWNrZXQgU2l6ZSByZWdpc3RlciAqLworI2RlZmluZSBMUEJU RVNUX1NUQVJUX0FERFJfUkVHCQkweDA0CS8qIHN0YXJ0IEFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgTFBCVEVTVF9DT05UUk9MX1JFRwkJMHgwOAkvKiBjb250cm9sIHJlZ2lzdGVyICovCisj ZGVmaW5lIExQQlRFU1RfRU5BQkxFX1JFRwkJMHgwQwkvKiBlbmFibGUgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgTFBCVEVTVF9TVEFUVVNfUkVHCQkweDE0CS8qIGJ5dGVzIGRvbmUgc3RhdHVzIHJlZ2lz dGVyICovCisjZGVmaW5lIExQQlRFU1RfRklGT19TVEFUVVNfUkVHCQkweDQ0CS8qIEZJRk8gc3Rh dHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIExQQlRFU1RfRklGT19DTlRSTF9SRUcJCTB4NDgJLyog RklGTyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIExQQlRFU1RfRklGT19EQVRBX1JFRwkJ MHg0MAkvKiBEYXRhIFdvcmQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFBCVEVTVF9GSUZPX0FMQVJN X1JFRwkJMHg0QwkvKiBGSUZPIGFsYXJtIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgTFBCVEVTVF9C TE9DS19TSVpFX01JTgkJNAorI2RlZmluZSBMUEJURVNUX0JMT0NLX1NJWkVfTUFYCQlMUEJURVNU X0ZJRk9fU0laRQorCisvKioKKyAqIGxwYnRlc3QgLSBQcml2YXRlIGRyaXZlciBkYXRhCisgKiBA bHBiX3JlZ3NfYmFzZTogcG9pbnRlciB0byB0aGUgTFBCJ3MgcmVnaXN0ZXJzCisgKiBAaXJxOiBJ UlEgb2YgdGhpcyBMUEIgRklGTworICogQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyCisgKi8K K3N0cnVjdCBscGJ0ZXN0IHsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXZvaWQgKnRhcmdldF9iYXNl OworCXZvaWQgKnJhbV9iYXNlOworCWRtYV9hZGRyX3QgcmFtX3BoeXM7CisJdm9pZCBfX2lvbWVt ICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCXBoeXNfYWRkcl90IGZpZm9fZGF0YV9i YXNlOworCisJLyogVGltZXNsaWNlIHRpbWVyICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7 CisJdW5zaWduZWQgbG9uZyB0aW1lOwkJLyogbmV4dCBkZWFkbGluZTsgaW4gamlmZmllcyAqLwor CisJLyogU3RhdGlzdGljcyAqLworCXVuc2lnbmVkIGxvbmcgaXJxX3RpbWU7CisJdW5zaWduZWQg bG9uZyB0aW1lcl90aW1lOworCXVuc2lnbmVkIGxvbmcgY29weV90aW1lOworCXVuc2lnbmVkIGxv bmcgYmNvbV90aW1lOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKKwl1bnNpZ25lZCBsb25n IHN0b3BfdGltZTsKKwlpbnQgZGF0YV9yZWFkOworCWludCBvdmVycnVuX2NvdW50OworCisJLyog c3RhdGUgdmFyaWFibGVzICovCisJaW50IG5leHRfYmxvY2s7CS8qIE51bWJlciBvZiBuZXh0IGJs b2NrIHRvIHNlbmQuICBJZiB0aGlzIGlzCisJCQkgKiA+PSAuYmxvY2tjb3VudCwgdGhlbiBhbGwg dGhlIHRyYW5zZmVycyBhcmUKKwkJCSAqIGZpbmlzaGVkICovCisKKwlzdHJ1Y3QgYmNvbV90YXNr ICpiY29tX3Rhc2s7CisKKwkvKiBzeXNmcyBhdHRyaWJ1dGVzICovCisJaW50IGFjdGlvbjsKKwlp bnQgdHlwZTsKKwl1bnNpZ25lZCBibG9ja2NvdW50OworCXVuc2lnbmVkIGJsb2Nrc2l6ZTsKKwl1 bnNpZ25lZCBwZXJpb2Q7CisJdW5zaWduZWQgY2hpcHNlbGVjdDsKKwl1bnNpZ25lZCBvZmZzZXQ7 CisJcGh5c19hZGRyX3QgdGFyZ2V0X3BoeXM7CisJaW50IHZlcmlmeTsKKworCXNwaW5sb2NrX3Qg bG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGltbXJfaWRzW10gPSB7CisJ eyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pbW1yIiwgfSwKKwl7IC5jb21wYXRpYmxlID0g ImZzbCxtcGM1MjAwYi1pbW1yIiwgfSwKKwl7IC50eXBlID0gInNvYyIsIC5jb21wYXRpYmxlID0g Im1wYzUyMDAiLCB9LCAvKiBsaXRlNTIwMCAqLworCXsgLnR5cGUgPSAiYnVpbHRpbiIsIC5jb21w YXRpYmxlID0gIm1wYzUyMDAiLCB9LCAvKiBlZmlrYSAqLworCXt9Cit9OworCisvKiBIZWxwZXIg ZnVuY3Rpb25zIHRvIHRlc3Qgc2VsZWN0ZWQgYmVoYXZpb3VyICovCitzdGF0aWMgaW5saW5lIGlu dCBmaWZvdGVzdChzdHJ1Y3QgbHBidGVzdCAqcHJpdikgeyByZXR1cm4gcHJpdi0+dHlwZSA9PSAx OyB9CisKK3N0YXRpYyB2b2lkIGxwYnRlc3RfZG9fbmV4dF90cmFuc2ZlcihzdHJ1Y3QgbHBidGVz dCAqcHJpdikKK3sKKwlpZiAocHJpdi0+bmV4dF9ibG9jayA8IHByaXYtPmJsb2NrY291bnQpIHsK KwkJcHJpdi0+bmV4dF9ibG9jaysrOworCQkvKiBLaWNrIG9mZiB0aGUgdHJhbnNhY3Rpb24sIFNl dCB0aGUgcmVzdGFydCBiaXQgKi8KKwkJb3V0XzgocHJpdi0+cmVncyArIExQQlRFU1RfUEFDS0VU X1NJWkVfUkVHLCAweDAxKTsKKwl9Cit9CisKKy8qCisgKgorICogQ2FsbGVkIGZyb20gRE1BIElS USBoYW5kbGVyCisgKgorICovCitzdGF0aWMgdm9pZCBscGJ0ZXN0X2VucXVldWVfbmV4dF9idWZm ZXIoc3RydWN0IGxwYnRlc3QgKnByaXYpCit7CisJc3RydWN0IGJjb21fYmQgKmJkOworCisJLyog UHJlcGFyZSBhbmQgZW5xdWV1ZSB0aGUgbmV4dCBidWZmZXIgZGVzY3JpcHRvciAqLworCWJkID0g YmNvbV9wcmVwYXJlX25leHRfYnVmZmVyKHByaXYtPmJjb21fdGFzayk7CisKKwkvKiBCeXRlcyB0 byBiZSB0cmFuc2ZlcmVkIGJ5IEJlc3RDb21tICovCisJYmQtPnN0YXR1cyA9IExQQlRFU1RfRklG T19TSVpFOworCWJkLT5kYXRhWzBdID0gcHJpdi0+cmFtX3BoeXM7IC8qIFNldCB1cCBkZXN0aW5h dGlvbiBhZGRyZXNzICovCisKKwkvKiBHaXZlIEJEIHRvIEJlc3RDb21tICovCisJYmNvbV9zdWJt aXRfbmV4dF9idWZmZXIocHJpdi0+YmNvbV90YXNrLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQg bHBidGVzdF92ZXJpZnlfZG1hX3RyYW5zZmVyKHN0cnVjdCBscGJ0ZXN0ICpwcml2KQoreworCWlu dCByZXQ7CisKKwlkZXZfZGJnKHByaXYtPmRldiwgInZlcmlmeWluZyB0cmFuc2ZlclxuIik7CisJ cmV0ID0gbWVtY21wKHByaXYtPnJhbV9iYXNlLCBwcml2LT50YXJnZXRfYmFzZSwgcHJpdi0+Ymxv Y2tzaXplKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHByaXYtPmRldiwgImVycm9yOiBjb3JydXB0 IHRyYW5zZmVyXG4iKTsKK30KKworLyogQmVzdGNvbW0gU0NMUEMgRE1BIGlycSBoYW5kbGVyICov CitzdGF0aWMgaXJxcmV0dXJuX3QgbHBidGVzdF9iY29tX2lycShpbnQgaXJxLCB2b2lkICpfcHJp dikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IF9wcml2OworCXVuc2lnbmVkIGxvbmcgYmNv bV90aW1lID0gZ2V0X3RibCgpOworCisJLyogRm9yIGVhY2ggZmluaXNoZWQgYmxvY2ssIGRlcXVl dWUgdGhlIGNvbXBsZXRlZCBibG9jayBidWZmZXIKKwkgKiBhbmQgZW5xdWV1ZSBhIG5ldyBvbmUg aW4gaXQncyBwbGFjZS4gKi8KKwl3aGlsZSAoYmNvbV9idWZmZXJfZG9uZShwcml2LT5iY29tX3Rh c2spKSB7CisJCWJjb21fcmV0cmlldmVfYnVmZmVyKHByaXYtPmJjb21fdGFzaywgTlVMTCwgTlVM TCk7CisJCWlmIChwcml2LT52ZXJpZnkpCisJCQlscGJ0ZXN0X3ZlcmlmeV9kbWFfdHJhbnNmZXIo cHJpdik7CisKKwkJbHBidGVzdF9lbnF1ZXVlX25leHRfYnVmZmVyKHByaXYpOworCQliY29tX2Vu YWJsZShwcml2LT5iY29tX3Rhc2spOworCisJCXByaXYtPmRhdGFfcmVhZCArPSBwcml2LT5ibG9j a3NpemU7CisJfQorCisJcHJpdi0+YmNvbV90aW1lICs9IGdldF90YmwoKSAtIGJjb21fdGltZTsK KworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKgorICogU0NMUEMgRklGTyBwZXJpcGhl cmFsIGludGVycnVwdAorICogUHJvY2VzcyBhIEZJRk8gcGFja2V0IHNpemUgaW50ZXJydXB0LCB0 aGVuIHJlc2V0IHRoZSBGSUZPLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbHBidGVzdF9maWZv X2lycShpbnQgaXJxLCB2b2lkICpfcHJpdikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IF9w cml2OworCXUzMiBieXRlc19kb25lX3N0YXR1cyA9IDA7CisJdTMyIGZpZm9fc3RhdHVzID0gMDsK Kwl1MzIgKmZpZm9fZGF0YV93b3JkOworCXVuc2lnbmVkIGxvbmcgY29weV90aW1lOworCXVuc2ln bmVkIGxvbmcgaXJxX3RpbWUgPSBnZXRfdGJsKCk7CisJaW50IGk7CisKKwlieXRlc19kb25lX3N0 YXR1cyA9IGluX2JlMzIocHJpdi0+cmVncyArIExQQlRFU1RfU1RBVFVTX1JFRyk7CisJZmlmb19z dGF0dXMgPSBpbl9iZTMyKHByaXYtPnJlZ3MgKyBMUEJURVNUX0ZJRk9fU1RBVFVTX1JFRyk7CisK KwkvKiBDaGVjayB0aGUgYnl0ZXMgZG9uZSBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworCWlmIChi eXRlc19kb25lX3N0YXR1cyAmIExQQlRFU1RfU1RBVFVTX0FCT1JUKSB7CisJCWRldl9lcnIocHJp di0+ZGV2LCAiQUJPUlQgVEVSTUlOQVRJT04gRVJST1JcbiIpOworCQlkZXZfZXJyKHByaXYtPmRl diwgIlNDTFBDIFNUQVRVUyBSRUc6MHgleFxuIiwKKwkJCWJ5dGVzX2RvbmVfc3RhdHVzKTsKKwor CQkvKiBDbGVhciBBVCBiaXQgKi8KKwkJb3V0XzgocHJpdi0+cmVncyArIExQQlRFU1RfU1RBVFVT X1JFRywgMHgxKTsKKwkJcHJpdi0+YWN0aW9uID0gMDsKKwl9CisKKwlpZiAoYnl0ZXNfZG9uZV9z dGF0dXMgJiBMUEJURVNUX1NUQVRVU19OT1JNQUwpIHsKKwkJLyogQ2xlYXIgTlQgYml0ICovCisJ CW91dF84KHByaXYtPnJlZ3MgKyBMUEJURVNUX1NUQVRVU19SRUcsIDB4MDEpOworCisJCS8qIENo ZWNrIHRoZSBGSUZPIHN0YXR1cyByZWdpc3RlciBlcnJvciBiaXRzICovCisJCWlmIChmaWZvX3N0 YXR1cyAmIDB4NDApIHsKKwkJCWRldl9lcnIocHJpdi0+ZGV2LCAiRklGTyBFUlJPUlxuIik7CisJ CQlkZXZfZXJyKHByaXYtPmRldiwgIkZJRk8gU1RBVFVTIFJFRzoweCV4XG4iLAorCQkJCWZpZm9f c3RhdHVzKTsKKworCQkJLyogQ2xlYXIgYml0ICovCisJCQlvdXRfYmUzMihwcml2LT5yZWdzICsg TFBCVEVTVF9GSUZPX1NUQVRVU19SRUcsCisJCQkJIChmaWZvX3N0YXR1cyAmIH4weDQwKSk7CisJ CQlwcml2LT5hY3Rpb24gPSAwOworCQl9CisKKwkJLyogS2ljayBvZmYgbmV4dCB0cmFuc2ZlciBz byBpdCBjYW4gcHJvZ3Jlc3Mgd2hpbGUgdGhlIEZJRk8KKwkJICogaXMgYmVpbmcgcmVhZCAqLwor CQlscGJ0ZXN0X2RvX25leHRfdHJhbnNmZXIocHJpdik7CisKKwkJLyogUmVhZCBGSUZPLCBpZiB0 aGUgRklGTyBpcyBmdWxsLAorCQkgICByZWFkIGl0IGlmIG5vdCBydW5uaW5nIEJlc3RDb21tICov CisJCWlmIChmaWZvdGVzdChwcml2KSkgeworCQkJLyogQ29weSBGSUZPIGJ5dGVzICovCisJCQlj b3B5X3RpbWUgPSBnZXRfdGJsKCk7CisJCQlmaWZvX2RhdGFfd29yZCA9IHByaXYtPnJhbV9iYXNl OworCQkJZm9yIChpID0gMDsgaSA8IHByaXYtPmJsb2Nrc2l6ZTsgaSArPSA0KSB7CisJCQkJKmZp Zm9fZGF0YV93b3JkID0gaW5fYmUzMihwcml2LT5yZWdzICsgTFBCVEVTVF9GSUZPX0RBVEFfUkVH KTsKKwkJCQlmaWZvX2RhdGFfd29yZCsrOworCQkJfQorCQkJcHJpdi0+Y29weV90aW1lICs9IGdl dF90YmwoKSAtIGNvcHlfdGltZTsKKwkJCXByaXYtPmRhdGFfcmVhZCArPSBwcml2LT5ibG9ja3Np emU7CisJCX0KKwl9CisKKwlwcml2LT5pcnFfdGltZSArPSBnZXRfdGJsKCkgLSBpcnFfdGltZTsK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbHBidGVzdF9yZWdpc3Rlcl9z dGF0dXNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiBpbnRzcGVjWzNdID0gezIsIDIzLCAwfTsgLyog TVBDNTIwMCBpcnEgaWQgZm9yIHRoZSBGSUZPIGRldmljZSAqLworCWludCB2aXJxLCByZXQgPSAw OworCisJLyogU2V0dXAgdGhlIGludGVycnVwdCBoYW5kbGVycyAqLworCXZpcnEgPSBpcnFfY3Jl YXRlX29mX21hcHBpbmcoTlVMTCwgaW50c3BlYywgMyk7CisJZGV2X2RiZyhkZXYsICJ2aXJxPSVp XG4iLCB2aXJxKTsKKworCWlmICh2aXJxIDwgMCkgeworCQlkZXZfZXJyKGRldiwgImlycV9jcmVh dGVfb2ZfbWFwcGluZygpIGVycm9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHZpcnE7CisJfQor CisJcmV0ID0gcmVxdWVzdF9pcnEodmlycSwgbHBidGVzdF9maWZvX2lycSwgSVJRRl9TSEFSRUQs CisJCQkgICJscGJ0ZXN0LWZpZm8iLCBwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2 LCAicmVxdWVzdF9pcnEoKSBMUEIgc3RhdHVzIGVycm9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlwcml2LT5pcnEgPSB2aXJxOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyB2b2lkIGxwYnRlc3Rfc3RvcF90ZXN0KHN0cnVjdCBscGJ0ZXN0ICpwcml2KQoreworCXByaXYt PnN0b3BfdGltZSA9IGdldF90YmwoKTsKKworCWJjb21fZGlzYWJsZShwcml2LT5iY29tX3Rhc2sp OworCXdoaWxlICghYmNvbV9xdWV1ZV9lbXB0eShwcml2LT5iY29tX3Rhc2spKQorCQliY29tX3Jl dHJpZXZlX2J1ZmZlcihwcml2LT5iY29tX3Rhc2ssIE5VTEwsIE5VTEwpOworfQorCitpbnQgbHBi dGVzdF9jaGVja190ZXN0X3N0b3Aoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBscGJ0 ZXN0ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXByaXYtPmFjdGlvbikg eworCQlscGJ0ZXN0X3N0b3BfdGVzdChwcml2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogVXBk YXRlIHRoZSB0aW1lc2xpY2UgdGltZSAqLworCXByaXYtPnRpbWUgKz0gdXNlY3NfdG9famlmZmll cyhwcml2LT5wZXJpb2QpOworCWlmICgoaW50KShwcml2LT50aW1lIC0gamlmZmllcykgPCAwKSB7 CisJCWRldl9pbmZvKGRldiwgIlRpbWVzbGljZSBvdmVycnVuIGJ5ICVpdXM7IGFib3J0aW5nXG4i LAorCQkJIGppZmZpZXNfdG9fdXNlY3MoamlmZmllcyAtIHByaXYtPnRpbWUpICsgcHJpdi0+cGVy aW9kKTsKKwkJbHBidGVzdF9zdG9wX3Rlc3QocHJpdik7CisJCXJldHVybiAxOworCX0KKworCS8q IFJlc2V0IHRoZSB0aW1lciAqLworCW1vZF90aW1lcigmcHJpdi0+dGltZXIsIHByaXYtPnRpbWUp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxwYnRlc3RfcmVhZF9jaGFubmVsc190 b19yYW0odW5zaWduZWQgbG9uZyBfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1 Y3QgZGV2aWNlICopX2RldjsKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdGltZSA9IGdldF90YmwoKTsKKwlpbnQgaTsKKworCWlm IChscGJ0ZXN0X2NoZWNrX3Rlc3Rfc3RvcChkZXYpKQorCQlyZXR1cm47CisKKwkvKiBBc3N1bWUs IHRoYXQgYWxsIGNoYW5uZWxzIGhhdmUgZGF0YSBhdmFpbGFibGUgKi8KKwlmb3IgKGkgPSAwOyBp IDwgcHJpdi0+YmxvY2tjb3VudDsgaSsrKSB7CisJCW1lbWNweShwcml2LT5yYW1fYmFzZSwgcHJp di0+dGFyZ2V0X2Jhc2UsIHByaXYtPmJsb2Nrc2l6ZSk7CisJCXByaXYtPmRhdGFfcmVhZCArPSBw cml2LT5ibG9ja3NpemU7CisJfQorCisJcHJpdi0+dGltZXJfdGltZSArPSBnZXRfdGJsKCkgLSB0 aW1lOworfQorCitzdGF0aWMgdm9pZCBscGJ0ZXN0X3JlYWRfY2hhbm5lbHModW5zaWduZWQgbG9u ZyBfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopX2RldjsK KwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB0aW1lID0gZ2V0X3RibCgpOworCisJaWYgKGxw YnRlc3RfY2hlY2tfdGVzdF9zdG9wKGRldikpCisJCXJldHVybjsKKworCS8qIEFsbG93IHRoZSB0 aW1lciB0byBwcm9jZXNzIHRoZSBwcmVzZW50IHN0YXRlIHcvbyBhbiBpbnRlcnJ1cHQgKi8KKwlz cGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPm5leHRf YmxvY2sgPCBwcml2LT5ibG9ja2NvdW50KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAib3ZlcnJ1 biEgbmV4dD0laSB0b3RhbD0laVxuIiwKKwkJCXByaXYtPm5leHRfYmxvY2ssIHByaXYtPmJsb2Nr Y291bnQpOworCQlwcml2LT5vdmVycnVuX2NvdW50Kys7CisJCWdvdG8gb3V0OworCX0KKworCS8q IFRoaXMgbGluZSBpcyB0aGUgRklGTyB0aHJvdHRsZSwgdGhlIGZhc3RlciB0aGUgbmV4dCBwYWNr ZXQKKwkgKiBpcyBjbGVhcmVkLCB0aGUgZmFzdGVyIHRoZSBGSUZPIGNhbiBiZSByZWFkIGFuZCBm aWxsZWQgYnkKKwkgKiB0aGUgSVJRLiAgVGhlIElTUiB3aWxsIHN0b3AgaGFuZGxpbmcgdGhlIEZJ Rk8sIHdoZW4gYWxsIHRoZQorCSAqIGNoYW5uZWxzIGhhdmUgYmVlbiByZWFkLgorCSAqLworCXBy aXYtPm5leHRfYmxvY2sgPSAwOworCWxwYnRlc3RfZG9fbmV4dF90cmFuc2Zlcihwcml2KTsKKwor IG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJp di0+dGltZXJfdGltZSArPSBnZXRfdGJsKCkgLSB0aW1lOworfQorCitzdGF0aWMgdm9pZCBscGJ0 ZXN0X2ZpZm9fc3RhcnQoc3RydWN0IGxwYnRlc3QgKnByaXYpCit7CisJb3V0X2JlMzIocHJpdi0+ cmVncyArIExQQlRFU1RfUEFDS0VUX1NJWkVfUkVHLCBwcml2LT5ibG9ja3NpemUpOworCisJLyog RklGTyByZWNlaXZlLCBCUFQgOCBieXRlcy90cmFuc2ZlciwgQ1MjICovCisJb3V0X2JlMzIocHJp di0+cmVncyArIExQQlRFU1RfQ09OVFJPTF9SRUcsCisJCSAweDAwMDEwMDA4IHwgcHJpdi0+Y2hp cHNlbGVjdCA8PCAyNCk7CisKKwkvKiBLaWNrIG9mZiB0aGUgdHJhbnNhY3Rpb246IFNldCB0aGUg cmVzdGFydCBiaXQgZm9yIHRoZSBGSUZPICovCisJb3V0XzgocHJpdi0+cmVncyArIExQQlRFU1Rf UEFDS0VUX1NJWkVfUkVHLCAweDAxKTsKK30KKworc3RhdGljIHZvaWQgbHBidGVzdF9iY29tX3N0 YXJ0KHN0cnVjdCBscGJ0ZXN0ICpwcml2KQoreworCS8qIFNldHVwIHRoZSBCZXN0Q29tbSBlbmdp bmUgKi8KKwliY29tX2dlbl9iZF9yeF9yZXNldChwcml2LT5iY29tX3Rhc2spOworCXdoaWxlICgh YmNvbV9xdWV1ZV9mdWxsKHByaXYtPmJjb21fdGFzaykpCisJCWxwYnRlc3RfZW5xdWV1ZV9uZXh0 X2J1ZmZlcihwcml2KTsKKworCS8qIFNldCB0aGUgRklGTyBwYWNrZXQgc2l6ZSAqLworCW91dF9i ZTMyKHByaXYtPnJlZ3MgKyBMUEJURVNUX1BBQ0tFVF9TSVpFX1JFRywgcHJpdi0+YmxvY2tzaXpl KTsKKworCS8qIEZJRk8gcmVjZWl2ZSwgQlBUIDggYnl0ZXMvdHJhbnNmZXIsIENTIyAqLworCW91 dF9iZTMyKHByaXYtPnJlZ3MgKyBMUEJURVNUX0NPTlRST0xfUkVHLAorCQkgMHgwMDAxMDAwOCB8 IHByaXYtPmNoaXBzZWxlY3QgPDwgMjQpOworCisJLyogS2ljayBvZmYgdGhlIHRyYW5zYWN0aW9u OiBTZXQgdGhlIHJlc3RhcnQgYml0IGZvciB0aGUgRklGTyAqLworCW91dF84KHByaXYtPnJlZ3Mg KyBMUEJURVNUX1BBQ0tFVF9TSVpFX1JFRywgMHgwMSk7CisKKwkvKiBFbmFibGUgdGhlIGJjb20g dGFzayAqLworCWJjb21fZW5hYmxlKHByaXYtPmJjb21fdGFzayk7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbHBidGVzdF90eXBlIHsKKwljaGFyICpuYW1lOworCXZvaWQgKCpzdGFydCkoc3Ry dWN0IGxwYnRlc3QgKik7CisJdm9pZCAoKnRpbWVyKSh1bnNpZ25lZCBsb25nKTsKK30gbHBidGVz dF90eXBlW10gPSB7CisJeworCQkubmFtZSA9ICJyYW0iLAorCQkudGltZXIgPSBscGJ0ZXN0X3Jl YWRfY2hhbm5lbHNfdG9fcmFtLAorCX0sCisJeworCQkubmFtZSA9ICJmaWZvIiwKKwkJLnN0YXJ0 ID0gbHBidGVzdF9maWZvX3N0YXJ0LAorCQkudGltZXIgPSBscGJ0ZXN0X3JlYWRfY2hhbm5lbHMs CisJfSwKKwl7CisJCS5uYW1lID0gImJjb20iLAorCQkuc3RhcnQgPSBscGJ0ZXN0X2Jjb21fc3Rh cnQsCisJCS50aW1lciA9IGxwYnRlc3RfcmVhZF9jaGFubmVscywKKwl9Cit9OworCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIHN5c2ZzIGludGVyZmFjZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGlj IHNzaXplX3QgbHBidGVzdF9zZXRfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291 bnQpCit7CisJc3RydWN0IGxwYnRlc3QgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlj b25zdCBjaGFyICpuYW1lOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo bHBidGVzdF90eXBlKTsgaSsrKSB7CisJCW5hbWUgPSBscGJ0ZXN0X3R5cGVbaV0ubmFtZTsKKwor CQlpZiAoY291bnQgPCBzdHJsZW4obmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RybmNt cChidWYsIG5hbWUsIHN0cmxlbihuYW1lKSkgPT0gMCkgeworCQkJcHJpdi0+dHlwZSA9IGk7CisJ CQlyZXR1cm4gY291bnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGlj IHNzaXplX3QgbHBidGVzdF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxwYnRl c3QgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIl c1xuIiwgbHBidGVzdF90eXBlW3ByaXYtPnR5cGVdLm5hbWUpOworfQorCitzdGF0aWMgc3NpemVf dCBscGJ0ZXN0X3NldF9hY3Rpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qg Y291bnQpCit7CisJc3RydWN0IGxwYnRlc3QgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK Kwljb25zdCBzdHJ1Y3QgbHBidGVzdF90eXBlICp0eXBlID0gJmxwYnRlc3RfdHlwZVtwcml2LT50 eXBlXTsKKworCWlmIChzdHJuY21wKGJ1ZiwgInN0YXJ0Iiwgc3RybGVuKCJzdGFydCIpKSA9PSAw KQorCQlwcml2LT5hY3Rpb24gPSAxOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic3RvcCIsIHN0 cmxlbigic3RvcCIpKSA9PSAwKQorCQlwcml2LT5hY3Rpb24gPSAwOworCWVsc2UgeworCQlkZXZf ZXJyKGRldiwgIlVzYWdlOiBlY2hvIFtzdGFydCxzdG9wXSA+IGFjdGlvblxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChwcml2LT5hY3Rpb24pIHsKKwkJaW5pdF90aW1lcigmcHJp di0+dGltZXIpOworCQlwcml2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwor CQlwcml2LT5pcnFfdGltZSA9IDA7CisJCXByaXYtPnRpbWVyX3RpbWUgPSAwOworCQlwcml2LT5i Y29tX3RpbWUgPSAwOworCQlwcml2LT5zdG9wX3RpbWUgPSBwcml2LT5zdGFydF90aW1lID0gZ2V0 X3RibCgpOworCQlwcml2LT5kYXRhX3JlYWQgPSAwOworCQlwcml2LT5vdmVycnVuX2NvdW50ID0g MDsKKwkJcHJpdi0+dGltZXIuZnVuY3Rpb24gPSB0eXBlLT50aW1lcjsKKworCQkvKiBNYXAgdGhl IGRldmljZSAqLworCQlwcml2LT50YXJnZXRfYmFzZSA9IGlvcmVtYXAocHJpdi0+dGFyZ2V0X3Bo eXMsCisJCQkJCSAgICBMUEJURVNUX0JMT0NLX1NJWkVfTUFYKTsKKwkJaWYgKCFwcml2LT50YXJn ZXRfYmFzZSkgeworCQkJZGV2X2VycihkZXYsICJFcnJvciBtYXBwaW5nIGRldmljZVxuIik7CisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWRldl9kYmcoZGV2LCAiU3RhcnRlZCAlcyB0ZXN0 XG4iLCB0eXBlLT5uYW1lKTsKKworCQkvKiBSdW4gYW55IHNldHVwIGNvZGUgKi8KKwkJaWYgKHR5 cGUtPnN0YXJ0KQorCQkJdHlwZS0+c3RhcnQocHJpdik7CisKKwkJLyogU2V0IHRoZSBleHBpcmF0 aW9uIHRpbWUgZm9yIHRoZSB0aW1lci4gKi8KKwkJcHJpdi0+dGltZSA9IGppZmZpZXMgKyB1c2Vj c190b19qaWZmaWVzKHByaXYtPnBlcmlvZCk7CisJCW1vZF90aW1lcigmcHJpdi0+dGltZXIsIHBy aXYtPnRpbWUpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgbHBi dGVzdF9zaG93X2FjdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJY2hhciAqYWN0aW9uOworCXN0 cnVjdCBscGJ0ZXN0ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlhY3Rpb24gPSAo cHJpdi0+YWN0aW9uID09IDEpID8gInN0YXJ0IiA6ICJzdG9wIjsKKwlyZXR1cm4gc3ByaW50Zihi dWYsICIlc1xuIiwgYWN0aW9uKTsKK30KKworLyoKKyAqIEV4cG9ydCBhIGJsb2NrY291bnQgYXR0 cgorICovCitzdGF0aWMgc3NpemVfdCBscGJ0ZXN0X3NldF9ibG9ja2NvdW50KHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBscGJ0ZXN0ICpwcml2ID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJaWYgKHN0cmljdF9z dHJ0b3VsKGJ1ZiwgMTAsICZ0ZW1wKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJpdi0+YmxvY2tj b3VudCA9IHRlbXA7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxwYnRl c3Rfc2hvd19ibG9ja2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmlj ZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAq cHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4i LCBwcml2LT5ibG9ja2NvdW50KTsKK30KKworLyoKKyAqIEV4cG9ydCBhIGJsb2Nrc2l6ZSBhdHRy CisgKi8KK3N0YXRpYyBzc2l6ZV90IGxwYnRlc3Rfc2V0X2Jsb2Nrc2l6ZShzdHJ1Y3QgZGV2aWNl ICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBj aGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCWlmIChzdHJpY3Rfc3Ry dG91bChidWYsIDEwLCAmdGVtcCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh0ZW1wIDwg TFBCVEVTVF9CTE9DS19TSVpFX01JTikgfHwgKHRlbXAgPiBMUEJURVNUX0JMT0NLX1NJWkVfTUFY KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5ibG9ja3NpemUgPSB0ZW1wICYgMHhmZmZm ZmZmYzsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxwYnRlc3Rfc2hvd19i bG9ja3NpemUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IGxwYnRlc3QgKnByaXYgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+YmxvY2tz aXplKTsKK30KKworc3RhdGljIHNzaXplX3QgbHBidGVzdF9zZXRfcGVyaW9kKHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY29u c3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJbG9uZyB0ZW1wOworCXN0cnVjdCBscGJ0 ZXN0ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChi dWYsIDAsICZ0ZW1wKSkgeworCQlkZXZfZXJyKGRldiwgIlVzYWdlOiBlY2hvIFtwZXJpb2QgKHVz KV0gPiBwZXJpb2RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJpdi0+cGVyaW9kID0g dGVtcDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxwYnRlc3Rfc2hvd19w ZXJpb2Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxwYnRlc3QgKnByaXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+cGVyaW9kKTsK K30KKworc3RhdGljIHNzaXplX3QgbHBidGVzdF9zZXRfY3Moc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IGNvdW50KQoreworCWxvbmcgdGVtcDsKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAwLCAmdGVtcCkp CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRlbXAgPiA3KQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXByaXYtPmNoaXBzZWxlY3QgPSB0ZW1wOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGlj IHNzaXplX3QgbHBidGVzdF9zaG93X2NzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBscGJ0 ZXN0ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAi JWRcbiIsIHByaXYtPmNoaXBzZWxlY3QpOworfQorCitzdGF0aWMgc3NpemVfdCBscGJ0ZXN0X3Nl dF9iYXNlYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0 cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sK Kwl1bnNpZ25lZCBsb25nIHRlbXA7CisJc3RydWN0IGxwYnRlc3QgKnByaXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ0ZW1wKSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlwcml2LT50YXJnZXRfcGh5cyA9IHRlbXA7CisJcmV0dXJuIGNvdW50 OworfQorCitzdGF0aWMgc3NpemVfdCBscGJ0ZXN0X3Nob3dfYmFzZWFkZHIoc3RydWN0IGRldmlj ZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1 ZikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJl dHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHByaXYtPnRh cmdldF9waHlzKTsKK30KKworc3RhdGljIHNzaXplX3QgbHBidGVzdF9zZXRfdmVyaWZ5KHN0cnVj dCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJ CWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBscGJ0ZXN0ICpwcml2 ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJaWYgKHN0 cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ0ZW1wKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2 LT52ZXJpZnkgPSB0ZW1wOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgbHBi dGVzdF9zaG93X3ZlcmlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBscGJ0ZXN0ICpwcml2 ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBy aXYtPnZlcmlmeSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxwYnRlc3Rfc2hvd19yZXN1bHRzKHN0 cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs IGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOworCWludCBzeXN0aW1lLCByZWFsdGltZSwgdXRpbGl6YXRpb24sIHJhdGUsIGM7CisKKwly ZWFsdGltZSA9IHByaXYtPnN0b3BfdGltZSAtIHByaXYtPnN0YXJ0X3RpbWU7CisJc3lzdGltZSA9 IHByaXYtPnRpbWVyX3RpbWUgKyBwcml2LT5pcnFfdGltZSArIHByaXYtPmJjb21fdGltZTsKKwl1 dGlsaXphdGlvbiA9IHN5c3RpbWUgLyAocmVhbHRpbWUgLyAxMDAwMCk7CisJcmF0ZSA9IHByaXYt PmRhdGFfcmVhZCAvIChyZWFsdGltZSAvICh0Yl90aWNrc19wZXJfdXNlYyAqIDEwMCkpOworCisJ YyA9IHNwcmludGYoYnVmLCAgICAgICJyZWFsOgkJJTEwdXRpY2tzCSU5bHV1c1xuIiwKKwkJICAg IHJlYWx0aW1lLCByZWFsdGltZSAvIHRiX3RpY2tzX3Blcl91c2VjKTsKKwljICs9IHNwcmludGYo YnVmICsgYywgInN5czoJCSUxMHV0aWNrcwklOWx1dXNcbiIsCisJCSAgICAgc3lzdGltZSwgc3lz dGltZSAvIHRiX3RpY2tzX3Blcl91c2VjKTsKKwljICs9IHNwcmludGYoYnVmICsgYywgInRpbWVy OgkJJTEwbHV0aWNrcwklOWx1dXNcbiIsCisJCSAgICAgcHJpdi0+dGltZXJfdGltZSwgcHJpdi0+ dGltZXJfdGltZSAvIHRiX3RpY2tzX3Blcl91c2VjKTsKKwljICs9IHNwcmludGYoYnVmICsgYywg ImZpZm8taXJxOgklMTBsdXRpY2tzCSU5bHV1c1xuIiwKKwkJICAgICBwcml2LT5pcnFfdGltZSwg cHJpdi0+aXJxX3RpbWUgLyB0Yl90aWNrc19wZXJfdXNlYyk7CisJYyArPSBzcHJpbnRmKGJ1ZiAr IGMsICJiY29tLWlycToJJTEwbHV0aWNrcwklOWx1dXNcbiIsCisJCSAgICAgcHJpdi0+YmNvbV90 aW1lLCBwcml2LT5iY29tX3RpbWUgLyB0Yl90aWNrc19wZXJfdXNlYyk7CisJYyArPSBzcHJpbnRm KGJ1ZiArIGMsICJvdmVycnVuczoJJTEwdVxuIiwgcHJpdi0+b3ZlcnJ1bl9jb3VudCk7CisJYyAr PSBzcHJpbnRmKGJ1ZiArIGMsICIlJUNQVToJCSUxMHUuJS4ydSUlXG4iLAorCQkgICAgIHV0aWxp emF0aW9uIC8gMTAwLCB1dGlsaXphdGlvbiAlIDEwMCk7CisJYyArPSBzcHJpbnRmKGJ1ZiArIGMs ICJieXRlIGNvdW50OgklMTB1XG4iLCBwcml2LT5kYXRhX3JlYWQpOworCWMgKz0gc3ByaW50Zihi dWYgKyBjLCAiZGF0YSByYXRlOgklMTB1LiUuMnVNQi9zXG4iLAorCQkgICAgIHJhdGUgLyAxMDAs IHJhdGUgJSAxMDApOworCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0 dHJpYnV0ZSBscGJ0ZXN0X2F0dHJpYltdID0geworCV9fQVRUUihhY3Rpb24sIFNfSVdVU1IgfCBT X0lSVUdPLAorCSAgICAgICBscGJ0ZXN0X3Nob3dfYWN0aW9uLCBscGJ0ZXN0X3NldF9hY3Rpb24p LAorCV9fQVRUUihibG9ja2NvdW50LCBTX0lXVVNSIHwgU19JUlVHTywKKwkgICAgICAgbHBidGVz dF9zaG93X2Jsb2NrY291bnQsIGxwYnRlc3Rfc2V0X2Jsb2NrY291bnQpLAorCV9fQVRUUihibG9j a3NpemUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCSAgICAgICBscGJ0ZXN0X3Nob3dfYmxvY2tzaXpl LCBscGJ0ZXN0X3NldF9ibG9ja3NpemUpLAorCV9fQVRUUihwZXJpb2QsIFNfSVdVU1IgfCBTX0lS VUdPLAorCSAgICAgICBscGJ0ZXN0X3Nob3dfcGVyaW9kLCBscGJ0ZXN0X3NldF9wZXJpb2QpLAor CV9fQVRUUihjaGlwc2VsZWN0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkgICAgICAgbHBidGVzdF9z aG93X2NzLCBscGJ0ZXN0X3NldF9jcyksCisJX19BVFRSKGJhc2VhZGRyLCBTX0lXVVNSIHwgU19J UlVHTywKKwkgICAgICAgbHBidGVzdF9zaG93X2Jhc2VhZGRyLCBscGJ0ZXN0X3NldF9iYXNlYWRk ciksCisJX19BVFRSKHZlcmlmeSwgU19JV1VTUiB8IFNfSVJVR08sCisJICAgICAgIGxwYnRlc3Rf c2hvd192ZXJpZnksIGxwYnRlc3Rfc2V0X3ZlcmlmeSksCisJX19BVFRSKHR5cGUsIFNfSVdVU1Ig fCBTX0lSVUdPLAorCSAgICAgICBscGJ0ZXN0X3Nob3dfdHlwZSwgbHBidGVzdF9zZXRfdHlwZSks CisJX19BVFRSKHJlc3VsdHMsIFNfSVdVU1IgfCBTX0lSVUdPLCBscGJ0ZXN0X3Nob3dfcmVzdWx0 cywgTlVMTCksCit9OworCitzdGF0aWMgdm9pZCBscGJ0ZXN0X2NsZWFudXBfc3lzZnMoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHBidGVzdF9hdHRy aWIpOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZscGJ0ZXN0X2F0dHJpYltpXSk7 Cit9CisKK3N0YXRpYyBpbnQgbHBidGVzdF9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0cnVjdCBs cGJ0ZXN0ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisJcGh5 c19hZGRyX3QgcGh5c19hZGRyOworCisJLyogQWxsb2NhdGUgYSBkZXN0aW5hdGlvbiBidWZmZXIg Ki8KKwlwcml2LT5yYW1fYmFzZSA9IGt6YWxsb2MoTFBCVEVTVF9CTE9DS19TSVpFX01BWCwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFwcml2LT5yYW1fYmFzZSkgeworCQlkZXZfZXJyKGRldiwgIkVycm9y IGFsbG9jYXRpbmcgdGVzdCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcHJp di0+cmFtX3BoeXMgPSB2aXJ0X3RvX3BoeXMocHJpdi0+cmFtX2Jhc2UpOworCisJLyogbWFwIHRo ZSB3aG9sZSByZWdpc3RlciBzcGFjZSAqLworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5V TEwsIGltbXJfaWRzKTsKKwlpZiAoIW5wKSB7CisJCWRldl9lcnIoZGV2LCAiYmNvbW1fdGVzdF9p bml0KCk6VW5hYmxlIHRvIGxvY2F0ZSBwbGF0Zm9ybVxuIik7CisJCXJldHVybiAtRU5PREVWOwor CX0KKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcykpIHsKKwkJZGV2X2Vy cihkZXYsICJVbmFibGUgdG8gbG9jYXRlIHJlc291cmNlc1xuIik7CisJCXJldHVybiAtRU5PREVW OworCX0KKworCXBoeXNfYWRkciA9IHJlcy5zdGFydCArIExQQlRFU1RfRklGT19PRkZTRVQ7CisJ cHJpdi0+Zmlmb19kYXRhX2Jhc2UgPSBwaHlzX2FkZHIgKyBMUEJURVNUX0ZJRk9fREFUQV9SRUc7 CisJZGV2X2luZm8oZGV2LCAiRklGTyByZWdzIGF0IGFkZHJlc3MgJWxseFxuIiwKKwkJICh1bnNp Z25lZCBsb25nIGxvbmcpcGh5c19hZGRyKTsKKwlwcml2LT5yZWdzID0gaW9yZW1hcChwaHlzX2Fk ZHIsIDB4NTApOworCWlmICghcHJpdi0+cmVncykgeworCQlkZXZfZXJyKGRldiwgImJjb21tX3Rl c3RfaW5pdCgpOlVuYWJsZSB0byBsb2NhdGUgcGxhdGZvcm1cbiIpOworCQlyZXR1cm4gLUVOT0RF VjsKKwl9CisJb2Zfbm9kZV9wdXQobnApOworCisJLyogUmVzZXQgTFBCIEZJRk8gKi8KKwlvdXRf YmUzMihwcml2LT5yZWdzICsgTFBCVEVTVF9FTkFCTEVfUkVHLCAweDAxMDEwMDAwKTsKKworCS8q IFdyaXRlIHRoZSBzdGFydCBhZGRyZXNzOyBPZmZzZXQgZnJvbSBjaGlwc2VsZWN0IGJhc2UgYWRk cmVzcyAqLworCW91dF9iZTMyKHByaXYtPnJlZ3MgKyBMUEJURVNUX1NUQVJUX0FERFJfUkVHLCAw KTsKKworCS8qIFdyaXRlIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJLyogQ1MwIGFzc2VydGVk LCBGSUZPIHJlY2VpdmUsIGFuZCBCUFQgOCBieXRlcy90cmFuc2ZlciAqLworCW91dF9iZTMyKHBy aXYtPnJlZ3MgKyBMUEJURVNUX0NPTlRST0xfUkVHLCAweDAwMDEwMDA4KTsKKworCS8qIFNldCBB SUUsIE5JRSwgYW5kIE1FIGJpdHMgKi8KKwlvdXRfYmUzMihwcml2LT5yZWdzICsgTFBCVEVTVF9F TkFCTEVfUkVHLCAweDAwMDAwMzAxKTsKKworCS8qIFNldCBhbGFybSB3aGVuIG9ubHkgMjU2IGJ5 dGVzIHJlbWFpbiBpbiBGSUZPICovCisJb3V0X2JlMzIocHJpdi0+cmVncyArIExQQlRFU1RfRklG T19BTEFSTV9SRUcsIDB4MTAwKTsKKworCS8qIFN0b3AgcmVxdWVzdGluZyBkYXRhIHdoZW4gNCBi eXRlcyByZW1haW5pbmcgaW4gRklGTyAqLworCW91dF9iZTMyKHByaXYtPnJlZ3MgKyBMUEJURVNU X0ZJRk9fQ05UUkxfUkVHLCAweDAxMDAwMDAwKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBTQ0xQQyBz dGF0dXMgcmVnaXN0ZXIgSVNSKCksIGFuZAorCSAqIHNldCB0aGUgcGFja2V0IHNpemUgdG8gdGhl IEZJRk8gc2l6ZS4gV2Ugd2FudCB0bworCSAqIGludGVycnVwdCB3aGVuIHRoZSBGSUZPIGlzIGZ1 bGwgdG8gZW1wdHkgaXQgd2l0aG91dAorCSAqIGEgQmVzdENvbW0gdGFzayAqLworCXJldCA9IGxw YnRlc3RfcmVnaXN0ZXJfc3RhdHVzX2lycShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwkvKiBTZXR1cCB0aGUgYmNvbSBnZW4gYmQgdGFzayAqLworCXByaXYtPmJjb21fdGFzayA9 IGJjb21fZ2VuX2JkX3J4X2luaXQoMzIsIHByaXYtPmZpZm9fZGF0YV9iYXNlLAorCQkJCQkgICAg ICBCQ09NX0lOSVRJQVRPUl9TQ0xQQywKKwkJCQkJICAgICAgQkNPTV9JUFJfU0NMUEMsIDUxMik7 CisJaWYgKCFwcml2LT5iY29tX3Rhc2spIHsKKwkJZGV2X2VycihkZXYsICJlcnJvciBpbml0aWFs aXppbmcgYmVzdGNvbW0gdGFza1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNl dHVwIHRoZSBiY29tX3Rhc2sgaXJxICovCisJcmV0ID0gcmVxdWVzdF9pcnEoYmNvbV9nZXRfdGFz a19pcnEocHJpdi0+YmNvbV90YXNrKSwgJmxwYnRlc3RfYmNvbV9pcnEsCisJCQkgIElSUUZfU0hB UkVELCAibHBidGVzdC1iY29tIiwgcHJpdik7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJl cnJvciByZWdpc3RlcmluZyBCZXN0Y29tbSB0YXNrIGlycTogJWRcbiIsIHJldCk7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBscGJ0ZXN0X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdjsKKworCWludCByZXQgPSAwLCBpOworCisJLyogQWxs b2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGRyaXZlciBwcml2YXRlIGRhdGEgKi8KKwlwcml2ID0g a3phbGxvYyhzaXplb2YgKnByaXYsIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlwcml2LT5kZXYgPSAmcGRldi0+ZGV2OworCXByaXYtPmJsb2NrY291bnQg PSAxNjsKKwlwcml2LT5ibG9ja3NpemUgPSBMUEJURVNUX0ZJRk9fU0laRTsKKwlwcml2LT5wZXJp b2QgID0gMjAwMDA7CisJcHJpdi0+dGFyZ2V0X3BoeXMgPSBMUEJURVNUX0ZMQVNIX0JBU0VfQURE UjsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBwcml2KTsKKworCXJldCA9IGxwYnRlc3Rfc2V0dXAoZGV2KTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoZGV2LCAibHBidGVzdF9zZXR1cCgpIGVycm9yXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgU1lTRlMgZmlsZXMgKi8KKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShscGJ0ZXN0X2F0dHJpYik7IGkrKykgeworCQlyZXQgPSBkZXZpY2VfY3Jl YXRlX2ZpbGUoZGV2LCAmbHBidGVzdF9hdHRyaWJbaV0pOworCQlpZiAocmV0KSB7CisJCQlkZXZf ZXJyKGRldiwgImVycm9yIGNyZWF0aW5nIHN5c2ZzIGZpbGVzICglZClcbiIsIHJldCk7CisJCQls cGJ0ZXN0X2NsZWFudXBfc3lzZnMocGRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbHBidGVzdF9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbHBidGVzdCAqcHJpdiA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHByaXYtPmlycSkKKwkJZnJlZV9pcnEo cHJpdi0+aXJxLCBwcml2KTsKKworCWlmIChwcml2LT5iY29tX3Rhc2spIHsKKwkJZnJlZV9pcnEo YmNvbV9nZXRfdGFza19pcnEocHJpdi0+YmNvbV90YXNrKSwgcHJpdik7CisJCWJjb21fZ2VuX2Jk X3J4X3JlbGVhc2UocHJpdi0+YmNvbV90YXNrKTsKKwl9CisKKwlscGJ0ZXN0X2NsZWFudXBfc3lz ZnMocGRldik7CisKKwlkZWxfdGltZXIoJnByaXYtPnRpbWVyKTsKKworCWtmcmVlKHByaXYtPnJh bV9iYXNlKTsKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBscGJ0ZXN0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3du ZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgID0gRFJWTkFNRSwKKwl9LAorCS5wcm9iZSAgPSBs cGJ0ZXN0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChscGJ0ZXN0X3JlbW92ZSksCit9 OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbHBidGVzdF9wZGV2Oworc3RhdGlj IGludCBfX2luaXQgbHBidGVzdF9pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJbHBidGVzdF9w ZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZOQU1FLCAwLCBOVUxMLCAw KTsKKwlpZiAoIWxwYnRlc3RfcGRldikgeworCQlwcl9lcnIoIiVzOiBlcnJvciByZWdpc3Rlcmlu ZyB0ZXN0IGRldmljZVxuIiwgRFJWTkFNRSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJj ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZscGJ0ZXN0X2RyaXZlcik7CisJaWYgKHJjKQor CQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihscGJ0ZXN0X3BkZXYpOworCXJldHVybiByYzsK K30KK21vZHVsZV9pbml0KGxwYnRlc3RfaW5pdCk7CisKK3N0YXRpYyB2b2lkIGxwYnRlc3RfZXhp dCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGxwYnRlc3RfcGRldik7CisJ cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxwYnRlc3RfZHJpdmVyKTsKK30KK21vZHVsZV9l eGl0KGxwYnRlc3RfZXhpdCk7Ci0tIAoxLjUuNi4zCgo= ------=_Part_19115_23293837.1232467499901--