From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.178]) by ozlabs.org (Postfix) with ESMTP id 28EA2DDED3 for ; Wed, 2 Jul 2008 22:48:40 +1000 (EST) Received: by py-out-1112.google.com with SMTP id z59so160368pyg.27 for ; Wed, 02 Jul 2008 05:48:39 -0700 (PDT) Message-ID: <792f5f410807020548m107cd6a5xf0360e07053e104c@mail.gmail.com> Date: Wed, 2 Jul 2008 13:48:39 +0100 From: "Tim Yamin" Sender: plasmaroo@gmail.com To: "Grant Likely" Subject: Re: [PATCH]: [MPC5200] (v2) Add ATA DMA support In-Reply-To: <20080701234943.GA16391@secretlab.ca> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1838_32139766.1215002919190" References: <792f5f410806270544p69c773b9o9df4a5618d4babe1@mail.gmail.com> <20080701234943.GA16391@secretlab.ca> Cc: linuxppc-dev@ozlabs.org List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , ------=_Part_1838_32139766.1215002919190 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi Grant, Thanks for the feedback. New version is attached. > Is this a bug fix? If so, please put it into a separate patch. I suppose so, yes. If Ethernet has higher priority than ATA, you can get a deadlock if you try and download a large file over a LAN to disk, for example. But given that nothing other than this patch uses BestComm for ATA do you have any specific reason to split it out into another patch? > Good, it can be turned off. Do you think there is any risk to existing > ATA users with this patch applied if this is turned off? With the new version, the only risk if this is turned off is the change I've made to bestcomm.h. Other than that, you should get no risk because none of the new code is executed (mwdma_mask and udma_mask are set to 0 if the option is turned off). > Can you find any way to avoid this? This could be a performance drain. Previous code had this, so I kept it. Things do seem to work OK without it, so I've removed it... > Is there any way to turn on/off DMA at runtime instead of CONFIG time? You could use libata.dma=0 to force DMA off even if it's enabled at CONFIG time. >> priv->ipb_period = 1000000000 / (ipb_freq / 1000); >> priv->ata_regs = ata_regs; >> + priv->ata_regs_pa = (struct mpc52xx_ata __iomem *) res_mem.start; > > I'm not fond of this. First off, it is *not* __iomem. It is physical > address. It would be better to use the offset_of macro to add an offset > to the physical base address. Doing it this way forces you to cast and > sidestep the compile time checks for incorrect dereferences. I'm afraid I'm not quite sure what you have in mind here, could you please provide a pointer? Thanks, Tim ------=_Part_1838_32139766.1215002919190 Content-Type: text/x-patch; name=1050-mpc5200-add-ATA-DMA.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fi5xcqgf0 Content-Disposition: attachment; filename=1050-mpc5200-add-ATA-DMA.patch VGhpcyBwYXRjaCBhZGRzIE1ETUEvVURNQSBzdXBwb3J0ICh1c2luZyBCZXN0Q29tbSBmb3IgRE1B KSBvbiB0aGUgTVBDNTIwMApwbGF0Zm9ybS4KCkJhc2VkIGhlYXZpbHkgb24gcHJldmlvdXMgd29y ayBieSBGcmVlc2NhbGUgKEJlcm5hcmQgS3VobiwgSm9obiBSaWdieSkKYW5kIERvbWVuIFB1bmNl ci4KClVzaW5nIGEgU2FuRGlzayBFeHRyZW1lIElWIENGIGNhcmQgSSBnZXQgcmVhZCBzcGVlZHMg b2YgYXBwcm94aW1hdGVseQoyNi43MCBNQi9zZWMuCgpUaGUgQmVzdENvbW0gQVRBIHRhc2sgcHJp b3JpdHkgd2FzIGNoYW5nZWQgdG8gbWF4aW11bSBpbiBiZXN0Y29tbV9wcml2Lmg7CnRoaXMgZml4 ZXMgYSBkZWFkbG9jayBpc3N1ZSBJIHdhcyBleHBlcmllbmNpbmcgd2hlbiBoZWF2eSBETUEgd2Fz Cm9jY3VyaW5nIG9uIGJvdGggdGhlIEFUQSBhbmQgRXRoZXJuZXQgQmVzdENvbW0gdGFza3MsIGUu Zy4gd2hlbgpkb3dubG9hZGluZyBhIGxhcmdlIGZpbGUgb3ZlciBhIExBTiB0byBkaXNrLgoKVGhl cmUncyBhbHNvIHdoYXQgSSBiZWxpZXZlIHRvIGJlIGEgaGFyZHdhcmUgYnVnIGlmIHlvdSBoYXZl IGhpZ2ggbGV2ZWxzCm9mIEJlc3RDb21tIEFUQSBETUEgYWN0aXZpdHkgYWxvbmcgd2l0aCBoZWF2 eSBMb2NhbFBsdXMgQnVzIGFjdGl2aXR5Owp0aGUgYWRkcmVzcyBidXMgc2VlbXMgdG8gc29tZXRp bWVzIGdldCBjb3JydXB0ZWQgd2l0aCBBVEEgY29tbWFuZHMgd2hpbGUKdGhlIExvY2FsUGx1cyBC dXMgb3BlcmF0aW9uIGlzIHN0aWxsIGFjdGl2ZSAoaS5lLiBDaGlwIFNlbGVjdCBpcyBhc3NlcnRl ZCkuCgpJJ3ZlIGFza2VkIEZyZWVzY2FsZSBhYm91dCB0aGlzIGJ1dCBoYXZlIG5vdCByZWNlaXZl ZCBhIHJlcGx5IHlldCAtLSBpZgphbnlib2R5IGZyb20gRnJlZXNjYWxlIGhhcyBhbnkgaWRlYXMg cGxlYXNlIGNvbnRhY3QgbWU7IEkgY2FuIHN1cHBseSBzb21lCmFuYWx5emVyIHRyYWNlcyBpZiBu ZWVkZWQuIFRoZXJlZm9yZSwgZm9yIG5vdywgZG8gbm90IGVuYWJsZSBETUEgaWYgeW91Cm5lZWQg cmVsaWFibGUgTG9jYWxQbHVzIEJ1cyB1bmxlc3MgeW91IGRvIGEgZml4dXAgaW4geW91ciBkcml2 ZXIgYXMKZm9sbG93czoKCkxvY2tpbmcgZXhhbXBsZToKCiAgICAgICAgd2hpbGUgKHRlc3RfYW5k X3NldF9iaXQoMCwgJnBhdGFfbXBjNTJ4eF9hdGFfZG1hX2xvY2spICE9IDApCiAgICAgICAgewog ICAgICAgICAgICAgICAgc3RydWN0IGJjb21fdGFza18yICp0c2sgPSBwYXRhX21wYzUyeHhfYXRh X2RtYV90YXNrOwoKICAgICAgICAgICAgICAgIGlmKGJjb21fYnVmZmVyX2RvbmVfMih0c2spKQog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgoJcmV0dXJuIDA7Cgoo U2F2ZSB0aGUgcmV0dXJuIHZhbHVlIHRvIGBmbGFnc2ApCgpVbmxvY2tpbmcgZXhhbXBsZToKCiAg ICAgICAgaWYoZmxhZ3MgPT0gMCkKICAgICAgICAgICAgICAgIGNsZWFyX2JpdCgwLCAmcGF0YV9t cGM1Mnh4X2F0YV9kbWFfbG9jayk7CgpDb21tZW50cyBhbmQgdGVzdGluZyB3b3VsZCBvZiBjb3Vy c2UgYmUgdmVyeSB3ZWxjb21lLgoKVGhhbmtzLAoKU2lnbmVkLW9mZi1ieTogVGltIFlhbWluIDxw bGFzbUByb28ubWUudWs+CgpkaWZmIC11cnAgbGludXgtMi42LjI2LXJjNi9hcmNoL3Bvd2VycGMv c3lzZGV2L2Jlc3Rjb21tL2F0YS5oIGxpbnV4LTIuNi4yNi1yYzYtYXRhL2FyY2gvcG93ZXJwYy9z eXNkZXYvYmVzdGNvbW0vYXRhLmgKLS0tIGxpbnV4LTIuNi4yNi1yYzYvYXJjaC9wb3dlcnBjL3N5 c2Rldi9iZXN0Y29tbS9hdGEuaAkyMDA4LTA0LTE3IDAzOjQ5OjQ0LjAwMDAwMDAwMCArMDEwMAor KysgbGludXgtMi42LjI2LXJjNi1hdGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9hdGEu aAkyMDA4LTA3LTAyIDEyOjQ4OjE0LjAwMDAwMDAwMCArMDEwMApAQCAtMTYsOCArMTYsOCBAQAog CiBzdHJ1Y3QgYmNvbV9hdGFfYmQgewogCXUzMglzdGF0dXM7Ci0JdTMyCWRzdF9wYTsKIAl1MzIJ c3JjX3BhOworCXUzMglkc3RfcGE7CiB9OwogCiBleHRlcm4gc3RydWN0IGJjb21fdGFzayAqCmRp ZmYgLXVycCBsaW51eC0yLjYuMjYtcmM2L2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vYmVz dGNvbW0uYyBsaW51eC0yLjYuMjYtcmM2LWF0YS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21t L2Jlc3Rjb21tLmMKLS0tIGxpbnV4LTIuNi4yNi1yYzYvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0 Y29tbS9iZXN0Y29tbS5jCTIwMDgtMDQtMTcgMDM6NDk6NDQuMDAwMDAwMDAwICswMTAwCisrKyBs aW51eC0yLjYuMjYtcmM2LWF0YS9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21t LmMJMjAwOC0wNy0wMiAxMjo0ODoxNC4wMDAwMDAwMDAgKzAxMDAKQEAgLTMzMCwxMSArMzMwLDE2 IEBAIGJjb21fZW5naW5lX2luaXQodm9pZCkKIAkvKiBJbml0ICdhbHdheXMnIGluaXRpYXRvciAq LwogCW91dF84KCZiY29tX2VuZy0+cmVncy0+aXByW0JDT01fSU5JVElBVE9SX0FMV0FZU10sIEJD T01fSVBSX0FMV0FZUyk7CiAKKwkvKiBJZiBBVEEgRE1BIGlzIGVuYWJsZWQsIGFsd2F5cyB0dXJu IHByZWZldGNoIG9mZiAoaXQgYnJlYWtzIHRoaW5ncykgKi8KKyNpZm5kZWYgQ09ORklHX1BBVEFf TVBDNTJ4eF9ETUEKIAkvKiBEaXNhYmxlIENPTU0gQnVzIFByZWZldGNoIG9uIHRoZSBvcmlnaW5h bCA1MjAwOyBpdCdzIGJyb2tlbiAqLwogCWlmICgobWZzcHIoU1BSTl9TVlIpICYgTVBDNTIwMF9T VlJfTUFTSykgPT0gTVBDNTIwMF9TVlIpIHsKKyNlbmRpZgogCQlyZWd2YWwgPSBpbl9iZTE2KCZi Y29tX2VuZy0+cmVncy0+UHRkQ250cmwpOwogCQlvdXRfYmUxNigmYmNvbV9lbmctPnJlZ3MtPlB0 ZENudHJsLCAgcmVndmFsIHwgMSk7CisjaWZuZGVmIENPTkZJR19QQVRBX01QQzUyeHhfRE1BCiAJ fQorI2VuZGlmCiAKIAkvKiBJbml0IGxvY2sgKi8KIAlzcGluX2xvY2tfaW5pdCgmYmNvbV9lbmct PmxvY2spOwpkaWZmIC11cnAgbGludXgtMi42LjI2LXJjNi9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jl c3Rjb21tL2Jlc3Rjb21tLmggbGludXgtMi42LjI2LXJjNi1hdGEvYXJjaC9wb3dlcnBjL3N5c2Rl di9iZXN0Y29tbS9iZXN0Y29tbS5oCi0tLSBsaW51eC0yLjYuMjYtcmM2L2FyY2gvcG93ZXJwYy9z eXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaAkyMDA4LTA0LTE3IDAzOjQ5OjQ0LjAwMDAwMDAwMCAr MDEwMAorKysgbGludXgtMi42LjI2LXJjNi1hdGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29t bS9iZXN0Y29tbS5oCTIwMDgtMDctMDIgMTI6NDg6MTQuMDAwMDAwMDAwICswMTAwCkBAIC0xNDAs MTUgKzE0MCwyOSBAQCBiY29tX3F1ZXVlX2Z1bGwoc3RydWN0IGJjb21fdGFzayAqdHNrKQogfQog CiAvKioKKyAqIGJjb21fZ2V0X2JkIC0gR2V0IGEgQkQgZnJvbSB0aGUgcXVldWUKKyAqIEB0c2s6 IFRoZSBCZXN0Q29tbSB0YXNrIHN0cnVjdHVyZQorICogaW5kZXg6IEluZGV4IG9mIHRoZSBCRCB0 byBmZXRjaAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiY29tX2JkCisqYmNvbV9nZXRfYmQo c3RydWN0IGJjb21fdGFzayAqdHNrLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJcmV0dXJuICgo dm9pZCAqKSB0c2stPmJkKSArIChpbmRleCAqIHRzay0+YmRfc2l6ZSk7Cit9CisKKy8qKgogICog YmNvbV9idWZmZXJfZG9uZSAtIENoZWNrcyBpZiBhIEJlc3RDb21tIAogICogQHRzazogVGhlIEJl c3RDb21tIHRhc2sgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBiY29tX2J1ZmZl cl9kb25lKHN0cnVjdCBiY29tX3Rhc2sgKnRzaykKIHsKKwlzdHJ1Y3QgYmNvbV9iZCAqYmQ7CiAJ aWYgKGJjb21fcXVldWVfZW1wdHkodHNrKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuICEodHNrLT5i ZFt0c2stPm91dGRleF0uc3RhdHVzICYgQkNPTV9CRF9SRUFEWSk7CisKKwliZCA9IGJjb21fZ2V0 X2JkKHRzaywgdHNrLT5vdXRkZXgpOworCXJldHVybiAhKGJkLT5zdGF0dXMgJiBCQ09NX0JEX1JF QURZKTsKIH0KIAogLyoqCkBAIC0xNjAsMTYgKzE3NCwyMSBAQCBiY29tX2J1ZmZlcl9kb25lKHN0 cnVjdCBiY29tX3Rhc2sgKnRzaykKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJjb21fYmQgKgogYmNv bV9wcmVwYXJlX25leHRfYnVmZmVyKHN0cnVjdCBiY29tX3Rhc2sgKnRzaykKIHsKLQl0c2stPmJk W3Rzay0+aW5kZXhdLnN0YXR1cyA9IDA7CS8qIGNsZWFudXAgbGFzdCBzdGF0dXMgKi8KLQlyZXR1 cm4gJnRzay0+YmRbdHNrLT5pbmRleF07CisJc3RydWN0IGJjb21fYmQgKmJkOworCisJYmQgPSBi Y29tX2dldF9iZCh0c2ssIHRzay0+aW5kZXgpOworCWJkLT5zdGF0dXMgPSAwOwkvKiBjbGVhbnVw IGxhc3Qgc3RhdHVzICovCisJcmV0dXJuIGJkOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGJj b21fc3VibWl0X25leHRfYnVmZmVyKHN0cnVjdCBiY29tX3Rhc2sgKnRzaywgdm9pZCAqY29va2ll KQogeworCXN0cnVjdCBiY29tX2JkICpiZCA9IGJjb21fZ2V0X2JkKHRzaywgdHNrLT5pbmRleCk7 CisKIAl0c2stPmNvb2tpZVt0c2stPmluZGV4XSA9IGNvb2tpZTsKIAltYigpOwkvKiBlbnN1cmUg dGhlIGJkIGlzIHJlYWxseSB1cC10by1kYXRlICovCi0JdHNrLT5iZFt0c2stPmluZGV4XS5zdGF0 dXMgfD0gQkNPTV9CRF9SRUFEWTsKKwliZC0+c3RhdHVzIHw9IEJDT01fQkRfUkVBRFk7CiAJdHNr LT5pbmRleCA9IF9iY29tX25leHRfaW5kZXgodHNrKTsKIAlpZiAodHNrLT5mbGFncyAmIEJDT01f RkxBR1NfRU5BQkxFX1RBU0spCiAJCWJjb21fZW5hYmxlKHRzayk7CkBAIC0xNzksMTAgKzE5OCwx MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKgogYmNvbV9yZXRyaWV2ZV9idWZmZXIoc3RydWN0IGJj b21fdGFzayAqdHNrLCB1MzIgKnBfc3RhdHVzLCBzdHJ1Y3QgYmNvbV9iZCAqKnBfYmQpCiB7CiAJ dm9pZCAqY29va2llID0gdHNrLT5jb29raWVbdHNrLT5vdXRkZXhdOworCXN0cnVjdCBiY29tX2Jk ICpiZCA9IGJjb21fZ2V0X2JkKHRzaywgdHNrLT5vdXRkZXgpOworCiAJaWYgKHBfc3RhdHVzKQot CQkqcF9zdGF0dXMgPSB0c2stPmJkW3Rzay0+b3V0ZGV4XS5zdGF0dXM7CisJCSpwX3N0YXR1cyA9 IGJkLT5zdGF0dXM7CiAJaWYgKHBfYmQpCi0JCSpwX2JkID0gJnRzay0+YmRbdHNrLT5vdXRkZXhd OworCQkqcF9iZCA9IGJkOwogCXRzay0+b3V0ZGV4ID0gX2Jjb21fbmV4dF9vdXRkZXgodHNrKTsK IAlyZXR1cm4gY29va2llOwogfQpkaWZmIC11cnAgbGludXgtMi42LjI2LXJjNi9hcmNoL3Bvd2Vy cGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tX3ByaXYuaCBsaW51eC0yLjYuMjYtcmM2LWF0YS9h cmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tX3ByaXYuaAotLS0gbGludXgtMi42 LjI2LXJjNi9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL2Jlc3Rjb21tX3ByaXYuaAkyMDA4 LTA0LTE3IDAzOjQ5OjQ0LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjI2LXJjNi1hdGEv YXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9iZXN0Y29tbV9wcml2LmgJMjAwOC0wNy0wMiAx Mjo0ODoxNC4wMDAwMDAwMDAgKzAxMDAKQEAgLTE5OCw4ICsxOTgsOCBAQCBzdHJ1Y3QgYmNvbV90 YXNrX2hlYWRlciB7CiAjZGVmaW5lIEJDT01fSVBSX1NDVE1SXzEJMgogI2RlZmluZSBCQ09NX0lQ Ul9GRUNfUlgJCTYKICNkZWZpbmUgQkNPTV9JUFJfRkVDX1RYCQk1Ci0jZGVmaW5lIEJDT01fSVBS X0FUQV9SWAkJNAotI2RlZmluZSBCQ09NX0lQUl9BVEFfVFgJCTMKKyNkZWZpbmUgQkNPTV9JUFJf QVRBX1JYCQk3CisjZGVmaW5lIEJDT01fSVBSX0FUQV9UWAkJNwogI2RlZmluZSBCQ09NX0lQUl9T Q1BDSV9SWAkyCiAjZGVmaW5lIEJDT01fSVBSX1NDUENJX1RYCTIKICNkZWZpbmUgQkNPTV9JUFJf UFNDM19SWAkyCmRpZmYgLXVycCBsaW51eC0yLjYuMjYtcmM2L2RyaXZlcnMvYXRhL0tjb25maWcg bGludXgtMi42LjI2LXJjNi1hdGEvZHJpdmVycy9hdGEvS2NvbmZpZwotLS0gbGludXgtMi42LjI2 LXJjNi9kcml2ZXJzL2F0YS9LY29uZmlnCTIwMDgtMDctMDIgMTI6NTE6MjcuMDAwMDAwMDAwICsw MTAwCisrKyBsaW51eC0yLjYuMjYtcmM2LWF0YS9kcml2ZXJzL2F0YS9LY29uZmlnCTIwMDgtMDct MDIgMTI6NDc6MTUuMDAwMDAwMDAwICswMTAwCkBAIC00NjIsNiArNDYyLDE1IEBAIGNvbmZpZyBQ QVRBX01QQzUyeHgKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFBBVEFfTVBDNTJ4 eF9ETUEKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzUyeHggU29DIGludGVybmFsIElERSBETUEi CisJZGVwZW5kcyBvbiBQQVRBX01QQzUyeHgKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVz IHN1cHBvcnQgZm9yIERNQSBvbiB0aGUgTVBDNTJ4eCBTb0MgUEFUQQorCSAgY29udHJvbGxlci4K KworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFBBVEFfTVBJSVgKIAl0cmlzdGF0ZSAi SW50ZWwgUEFUQSBNUElJWCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCmRpZmYgLXVycCBsaW51 eC0yLjYuMjYtcmM2L2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jIGxpbnV4LTIuNi4yNi1yYzYt YXRhL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCi0tLSBsaW51eC0yLjYuMjYtcmM2L2RyaXZl cnMvYXRhL3BhdGFfbXBjNTJ4eC5jCTIwMDgtMDctMDIgMTI6NTE6MjcuMDAwMDAwMDAwICswMTAw CisrKyBsaW51eC0yLjYuMjYtcmM2LWF0YS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwkyMDA4 LTA3LTAyIDEyOjQ3OjE0LjAwMDAwMDAwMCArMDEwMApAQCAtNiw2ICs2LDkgQEAKICAqIENvcHly aWdodCAoQykgMjAwNiBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+CiAgKiBDb3B5cmln aHQgKEMpIDIwMDMgTWlwc3lzIC0gQmVuamFtaW4gSGVycmVuc2NobWlkdAogICoKKyAqIFVETUEg c3VwcG9ydCBiYXNlZCBvbiBwYXRjaGVzIGJ5IEZyZWVzY2FsZSAoQmVybmFyZCBLdWhuLCBKb2hu IFJpZ2J5KSwKKyAqIERvbWVuIFB1bmNlciBhbmQgVGltIFlhbWluLgorICoKICAqIFRoaXMgZmls ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCiAgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdp dGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQogICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGlt cGxpZWQuCkBAIC0xNywyOCArMjAsNDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2lu Y2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNp bmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFz bS9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAKKyNpbmNsdWRlIDxz eXNkZXYvYmVzdGNvbW0vYmVzdGNvbW0uaD4KKyNpbmNsdWRlIDxzeXNkZXYvYmVzdGNvbW0vYmVz dGNvbW1fcHJpdi5oPgorI2luY2x1ZGUgPHN5c2Rldi9iZXN0Y29tbS9hdGEuaD4KIAogI2RlZmlu ZSBEUlZfTkFNRQkibXBjNTJ4eF9hdGEiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjEuMiIKIAot CiAvKiBQcml2YXRlIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgZHJpdmVyICovCiBzdHJ1Y3QgbXBj NTJ4eF9hdGFfdGltaW5ncyB7CiAJdTMyCXBpbzE7CiAJdTMyCXBpbzI7CisJdTMyCW1kbWExOwor CXUzMgltZG1hMjsKKwl1MzIJdWRtYTE7CisJdTMyCXVkbWEyOworCXUzMgl1ZG1hMzsKKwl1MzIJ dWRtYTQ7CisJdTMyCXVkbWE1OworCWludAl1c2luZ191ZG1hOwogfTsKIAogc3RydWN0IG1wYzUy eHhfYXRhX3ByaXYgewogCXVuc2lnbmVkIGludAkJCWlwYl9wZXJpb2Q7CiAJc3RydWN0IG1wYzUy eHhfYXRhIF9faW9tZW0gKglhdGFfcmVnczsKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGEJCSphdGFfcmVn c19wYTsKIAlpbnQJCQkJYXRhX2lycTsKIAlzdHJ1Y3QgbXBjNTJ4eF9hdGFfdGltaW5ncwl0aW1p bmdzWzJdOwogCWludAkJCQljc2VsOworCisJLyogRE1BICovCisJc3RydWN0IGJjb21fdGFzawkJ KmRtYXRzazsKKwljb25zdCBzdHJ1Y3QgdWRtYXNwZWMJCSp1ZG1hc3BlYzsKKwljb25zdCBzdHJ1 Y3QgbWRtYXNwZWMJCSptZG1hc3BlYzsKKwlpbnQgCQkJCW1wYzUyeHhfYXRhX2RtYV9sYXN0X3dy aXRlOworCWludAkJCQl3YWl0aW5nX2Zvcl9kbWE7CiB9OwogCiAKQEAgLTUzLDYgKzc1LDk1IEBA IHN0YXRpYyBjb25zdCBpbnQgYXRhc3BlY190YVs1XSAgICA9IHsgMzUKIAogI2RlZmluZSBDQUxD X0NMS0NZQyhjLHYpICgoKCh2KSsoYyktMSkvKGMpKSkKIAorLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICov CisKKy8qIEFUQVBJLTQgTURNQSBzcGVjcyAoaW4gY2xvY2tzKSAqLworc3RydWN0IG1kbWFzcGVj IHsKKwl1MzIgdDBNOworCXUzMiB0ZDsKKwl1MzIgdGg7CisJdTMyIHRqOworCXUzMiB0a3c7CisJ dTMyIHRtOworCXUzMiB0bjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRtYXNwZWMgbWRt YXNwZWM2NlszXSA9IHsKKwl7IC50ME0gPSAzMiwgLnRkID0gMTUsIC50aCA9IDIsIC50aiA9IDIs IC50a3cgPSAxNSwgLnRtID0gNCwgLnRuID0gMSB9LAorCXsgLnQwTSA9IDEwLCAudGQgPSA2LCAu dGggPSAxLCAudGogPSAxLCAudGt3ID0gNCwgLnRtID0gMiwgLnRuID0gMSB9LAorCXsgLnQwTSA9 IDgsIC50ZCA9IDUsIC50aCA9IDEsIC50aiA9IDEsIC50a3cgPSAyLCAudG0gPSAyLCAudG4gPSAx IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1kbWFzcGVjIG1kbWFzcGVjMTMyWzNdID0g eworCXsgLnQwTSA9IDY0LCAudGQgPSAyOSwgLnRoID0gMywgLnRqID0gMywgLnRrdyA9IDI5LCAu dG0gPSA3LCAudG4gPSAyIH0sCisJeyAudDBNID0gMjAsIC50ZCA9IDExLCAudGggPSAyLCAudGog PSAxLCAudGt3ID0gNywgLnRtID0gNCwgLnRuID0gMSB9LAorCXsgLnQwTSA9IDE2LCAudGQgPSAx MCwgLnRoID0gMiwgLnRqID0gMSwgLnRrdyA9IDQsIC50bSA9IDQsIC50biA9IDEgfSwKK307CisK Ky8qIEFUQVBJLTQgVURNQSBzcGVjcyAoaW4gY2xvY2tzKSAqLworc3RydWN0IHVkbWFzcGVjIHsK Kwl1MzIgdGN5YzsKKwl1MzIgdDJjeWM7CisJdTMyIHRkczsKKwl1MzIgdGRoOworCXUzMiB0ZHZz OworCXUzMiB0ZHZoOworCXUzMiB0ZnM7CisJdTMyIHRsaTsKKwl1MzIgdG1saTsKKwl1MzIgdGF6 OworCXUzMiB0emFoOworCXUzMiB0ZW52OworCXUzMiB0c3I7CisJdTMyIHRyZnM7CisJdTMyIHRy cDsKKwl1MzIgdGFjazsKKwl1MzIgdHNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1ZG1h c3BlYyB1ZG1hc3BlYzY2WzZdID0geworCXsgLnRjeWMgPSA4LCAudDJjeWMgPSAxNiwgLnRkcyA9 IDEsIC50ZGggPSAxLCAudGR2cyA9IDUsIC50ZHZoID0gMSwKKwkgIC50ZnMgPSAxNiwgLnRsaSA9 IDEwLCAudG1saSA9IDIsIC50YXogPSAxLCAudHphaCA9IDIsIC50ZW52ID0gMiwKKwkgIC50c3Ig PSAzLCAudHJmcyA9IDUsIC50cnAgPSAxMSwgLnRhY2sgPSAyLCAudHNzID0gNCB9LAorCXsgLnRj eWMgPSA1LCAudDJjeWMgPSAxMSwgLnRkcyA9IDEsIC50ZGggPSAxLCAudGR2cyA9IDQsIC50ZHZo ID0gMSwKKwkgIC50ZnMgPSAxNCwgLnRsaSA9IDEwLCAudG1saSA9IDIsIC50YXogPSAxLCAudHph aCA9IDIsIC50ZW52ID0gMiwKKwkgIC50c3IgPSAyLCAudHJmcyA9IDUsIC50cnAgPSA5LCAudGFj ayA9IDIsIC50c3MgPSA0IH0sCisJeyAudGN5YyA9IDQsIC50MmN5YyA9IDgsIC50ZHMgPSAxLCAu dGRoID0gMSwgLnRkdnMgPSAzLCAudGR2aCA9IDEsCisJICAudGZzID0gMTIsIC50bGkgPSAxMCwg LnRtbGkgPSAyLCAudGF6ID0gMSwgLnR6YWggPSAyLCAudGVudiA9IDIsCisJICAudHNyID0gMiwg LnRyZnMgPSA0LCAudHJwID0gNywgLnRhY2sgPSAyLCAudHNzID0gNCB9LAorCXsgLnRjeWMgPSAz LCAudDJjeWMgPSA2LCAudGRzID0gMSwgLnRkaCA9IDEsIC50ZHZzID0gMiwgLnRkdmggPSAxLAor CSAgLnRmcyA9IDksIC50bGkgPSA3LCAudG1saSA9IDIsIC50YXogPSAxLCAudHphaCA9IDIsIC50 ZW52ID0gMiwKKwkgIC50c3IgPSAyLCAudHJmcyA9IDQsIC50cnAgPSA3LCAudGFjayA9IDIsIC50 c3MgPSA0IH0sCisJeyAudGN5YyA9IDIsIC50MmN5YyA9IDQsIC50ZHMgPSAxLCAudGRoID0gMSwg LnRkdnMgPSAxLCAudGR2aCA9IDEsCisJICAudGZzID0gOCwgLnRsaSA9IDgsIC50bWxpID0gMiwg LnRheiA9IDEsIC50emFoID0gMiwgLnRlbnYgPSAyLAorCSAgLnRzciA9IDIsIC50cmZzID0gNCwg LnRycCA9IDcsIC50YWNrID0gMiwgLnRzcyA9IDQgfSwKKwl7IC50Y3ljID0gMiwgLnQyY3ljID0g MiwgLnRkcyA9IDEsIC50ZGggPSAxLCAudGR2cyA9IDEsIC50ZHZoID0gMSwKKwkgIC50ZnMgPSA2 LCAudGxpID0gNSwgLnRtbGkgPSAyLCAudGF6ID0gMSwgLnR6YWggPSAyLCAudGVudiA9IDIsCisJ ICAudHNyID0gMiwgLnRyZnMgPSA0LCAudHJwID0gNiwgLnRhY2sgPSAyLCAudHNzID0gNCB9LAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1ZG1hc3BlYyB1ZG1hc3BlYzEzMls2XSA9IHsKKwl7 IC50Y3ljID0gMTUsIC50MmN5YyA9IDMxLCAudGRzID0gMiwgLnRkaCA9IDEsIC50ZHZzID0gMTAs IC50ZHZoID0gMSwKKwkgIC50ZnMgPSAzMCwgLnRsaSA9IDIwLCAudG1saSA9IDMsIC50YXogPSAy LCAudHphaCA9IDMsIC50ZW52ID0gMywKKwkgIC50c3IgPSA3LCAudHJmcyA9IDEwLCAudHJwID0g MjIsIC50YWNrID0gMywgLnRzcyA9IDcgfSwKKwl7IC50Y3ljID0gMTAsIC50MmN5YyA9IDIxLCAu dGRzID0gMiwgLnRkaCA9IDEsIC50ZHZzID0gNywgLnRkdmggPSAxLAorCSAgLnRmcyA9IDI3LCAu dGxpID0gMjAsIC50bWxpID0gMywgLnRheiA9IDIsIC50emFoID0gMywgLnRlbnYgPSAzLAorCSAg LnRzciA9IDQsIC50cmZzID0gMTAsIC50cnAgPSAxNywgLnRhY2sgPSAzLCAudHNzID0gNyB9LAor CXsgLnRjeWMgPSA2LCAudDJjeWMgPSAxMiwgLnRkcyA9IDEsIC50ZGggPSAxLCAudGR2cyA9IDUs IC50ZHZoID0gMSwKKwkgIC50ZnMgPSAyMywgLnRsaSA9IDIwLCAudG1saSA9IDMsIC50YXogPSAy LCAudHphaCA9IDMsIC50ZW52ID0gMywKKwkgIC50c3IgPSAzLCAudHJmcyA9IDgsIC50cnAgPSAx NCwgLnRhY2sgPSAzLCAudHNzID0gNyB9LAorCXsgLnRjeWMgPSA3LCAudDJjeWMgPSAxMiwgLnRk cyA9IDEsIC50ZGggPSAxLCAudGR2cyA9IDMsIC50ZHZoID0gMSwKKwkgIC50ZnMgPSAxNSwgLnRs aSA9IDEzLCAudG1saSA9IDMsIC50YXogPSAyLCAudHphaCA9IDMsIC50ZW52ID0gMywKKwkgIC50 c3IgPSAzLCAudHJmcyA9IDgsIC50cnAgPSAxNCwgLnRhY2sgPSAzLCAudHNzID0gNyB9LAorCXsg LnRjeWMgPSAyLCAudDJjeWMgPSA1LCAudGRzID0gMCwgLnRkaCA9IDAsIC50ZHZzID0gMSwgLnRk dmggPSAxLAorCSAgLnRmcyA9IDE2LCAudGxpID0gMTQsIC50bWxpID0gMiwgLnRheiA9IDEsIC50 emFoID0gMiwgLnRlbnYgPSAyLAorCSAgLnRzciA9IDIsIC50cmZzID0gNywgLnRycCA9IDEzLCAu dGFjayA9IDIsIC50c3MgPSA2IH0sCisJeyAudGN5YyA9IDMsIC50MmN5YyA9IDYsIC50ZHMgPSAx LCAudGRoID0gMSwgLnRkdnMgPSAxLCAudGR2aCA9IDEsCisJICAudGZzID0gMTIsIC50bGkgPSAx MCwgLnRtbGkgPSAzLCAudGF6ID0gMiwgLnR6YWggPSAzLCAudGVudiA9IDMsCisJICAudHNyID0g MywgLnRyZnMgPSA3LCAudHJwID0gMTIsIC50YWNrID0gMywgLnRzcyA9IDcgfSwKK307CisKKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PSAqLwogCiAvKiBCaXQgZGVmaW5pdGlvbnMgaW5zaWRlIHRoZSByZWdp c3RlcnMgKi8KICNkZWZpbmUgTVBDNTJ4eF9BVEFfSE9TVENPTkZfU01SCTB4ODAwMDAwMDBVTCAv KiBTdGF0ZSBtYWNoaW5lIHJlc2V0ICovCkBAIC02Niw2ICsxNjUsNyBAQCBzdGF0aWMgY29uc3Qg aW50IGF0YXNwZWNfdGFbNV0gICAgPSB7IDM1CiAjZGVmaW5lIE1QQzUyeHhfQVRBX0hPU1RTVEFU X1dFUlIJMHgwMTAwMDAwMFVMIC8qIFdyaXRlIEVycm9yICovCiAKICNkZWZpbmUgTVBDNTJ4eF9B VEFfRklGT1NUQVRfRU1QVFkJMHgwMSAvKiBGSUZPIEVtcHR5ICovCisjZGVmaW5lIE1QQzUyeHhf QVRBX0ZJRk9TVEFUX0VSUk9SCTB4NDAgLyogRklGTyBFcnJvciAqLwogCiAjZGVmaW5lIE1QQzUy eHhfQVRBX0RNQU1PREVfV1JJVEUJMHgwMSAvKiBXcml0ZSBETUEgKi8KICNkZWZpbmUgTVBDNTJ4 eF9BVEFfRE1BTU9ERV9SRUFECTB4MDIgLyogUmVhZCBETUEgKi8KQEAgLTc1LDYgKzE3NSw4IEBA IHN0YXRpYyBjb25zdCBpbnQgYXRhc3BlY190YVs1XSAgICA9IHsgMzUKICNkZWZpbmUgTVBDNTJ4 eF9BVEFfRE1BTU9ERV9GUgkJMHgyMCAvKiBGSUZPIFJlc2V0ICovCiAjZGVmaW5lIE1QQzUyeHhf QVRBX0RNQU1PREVfSFVUCQkweDQwIC8qIEhvc3QgVURNQSBidXJzdCB0ZXJtaW5hdGUgKi8KIAor I2RlZmluZSBNQVhfRE1BX0JVRkZFUlMgMTI4CisjZGVmaW5lIE1BWF9ETUFfQlVGRkVSX1NJWkUg MHgyMDAwMHUKIAogLyogU3RydWN0dXJlIG9mIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgKi8KIHN0 cnVjdCBtcGM1Mnh4X2F0YSB7CkBAIC0xMzMsNiArMjM1LDkgQEAgc3RydWN0IG1wYzUyeHhfYXRh IHsKIAl1OCAgcmVzZXJ2ZWQyMVsyXTsKIH07CiAKKy8qIEJlc3RDb21tIGxvY2tpbmcgKi8KK3Vu c2lnbmVkIGxvbmcgcGF0YV9tcGM1Mnh4X2F0YV9kbWFfbG9jazsKK3N0cnVjdCBiY29tX3Rhc2sg KnBhdGFfbXBjNTJ4eF9hdGFfZG1hX3Rhc2s7CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyog QXV4IGZucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCkBAIC0xNjUsNiArMjcwLDQxIEBAIG1wYzUyeHhfYXRhX2NvbXB1 dGVfcGlvX3RpbWluZ3Moc3RydWN0IG0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbXBj NTJ4eF9hdGFfY29tcHV0ZV9tZG1hX3RpbWluZ3Moc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnBy aXYsIGludCBkZXYsIGludCBzcGVlZCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGFfdGltaW5ncyAq dGltaW5nID0gJnByaXYtPnRpbWluZ3NbZGV2XTsKKwljb25zdCBzdHJ1Y3QgbWRtYXNwZWMgKnMg PSAmcHJpdi0+bWRtYXNwZWNbc3BlZWRdOworCisJaWYgKHNwZWVkIDwgMCB8fCBzcGVlZCA+IDIp CisJCXJldHVybiAtRUlOVkFMOworCisJdGltaW5nLT5tZG1hMSA9IChzLT50ME0gPDwgMjQpIHwg KHMtPnRkIDw8IDE2KSB8IChzLT50a3cgPDwgOCkgfCAocy0+dG0pOworCXRpbWluZy0+bWRtYTIg PSAocy0+dGggPDwgMjQpIHwgKHMtPnRqIDw8IDE2KSB8IChzLT50biA8PCA4KTsKKwl0aW1pbmct PnVzaW5nX3VkbWEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21wYzUyeHhf YXRhX2NvbXB1dGVfdWRtYV90aW1pbmdzKHN0cnVjdCBtcGM1Mnh4X2F0YV9wcml2ICpwcml2LCBp bnQgZGV2LCBpbnQgc3BlZWQpCit7CisJc3RydWN0IG1wYzUyeHhfYXRhX3RpbWluZ3MgKnRpbWlu ZyA9ICZwcml2LT50aW1pbmdzW2Rldl07CisJY29uc3Qgc3RydWN0IHVkbWFzcGVjICpzID0gJnBy aXYtPnVkbWFzcGVjW3NwZWVkXTsKKworCWlmIChzcGVlZCA8IDAgfHwgc3BlZWQgPiAyKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCXRpbWluZy0+dWRtYTEgPSAocy0+dDJjeWMgPDwgMjQpIHwgKHMt PnRjeWMgPDwgMTYpIHwgKHMtPnRkcyA8PCA4KSB8IChzLT50ZGgpOworCXRpbWluZy0+dWRtYTIg PSAocy0+dGR2cyA8PCAyNCkgfCAocy0+dGR2aCA8PCAxNikgfCAocy0+dGZzIDw8IDgpIHwgKHMt PnRsaSk7CisJdGltaW5nLT51ZG1hMyA9IChzLT50bWxpIDw8IDI0KSB8IChzLT50YXogPDwgMTYp IHwgKHMtPnRlbnYgPDwgOCkgfCAocy0+dHNyKTsKKwl0aW1pbmctPnVkbWE0ID0gKHMtPnRzcyA8 PCAyNCkgfCAocy0+dHJmcyA8PCAxNikgfCAocy0+dHJwIDw8IDgpIHwgKHMtPnRhY2spOworCXRp bWluZy0+dWRtYTUgPSAocy0+dHphaCA8PCAyNCk7CisJdGltaW5nLT51c2luZ191ZG1hID0gMTsK KworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogbXBjNTJ4eF9hdGFfYXBwbHlfdGltaW5n cyhzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAqcHJpdiwgaW50IGRldmljZSkKIHsKQEAgLTE3Mywx NCArMzEzLDEzIEBAIG1wYzUyeHhfYXRhX2FwcGx5X3RpbWluZ3Moc3RydWN0IG1wYzUyeHgKIAog CW91dF9iZTMyKCZyZWdzLT5waW8xLCAgdGltaW5nLT5waW8xKTsKIAlvdXRfYmUzMigmcmVncy0+ cGlvMiwgIHRpbWluZy0+cGlvMik7Ci0Jb3V0X2JlMzIoJnJlZ3MtPm1kbWExLCAwKTsKLQlvdXRf YmUzMigmcmVncy0+bWRtYTIsIDApOwotCW91dF9iZTMyKCZyZWdzLT51ZG1hMSwgMCk7Ci0Jb3V0 X2JlMzIoJnJlZ3MtPnVkbWEyLCAwKTsKLQlvdXRfYmUzMigmcmVncy0+dWRtYTMsIDApOwotCW91 dF9iZTMyKCZyZWdzLT51ZG1hNCwgMCk7Ci0Jb3V0X2JlMzIoJnJlZ3MtPnVkbWE1LCAwKTsKLQor CW91dF9iZTMyKCZyZWdzLT5tZG1hMSwgdGltaW5nLT5tZG1hMSk7CisJb3V0X2JlMzIoJnJlZ3Mt Pm1kbWEyLCB0aW1pbmctPm1kbWEyKTsKKwlvdXRfYmUzMigmcmVncy0+dWRtYTEsIHRpbWluZy0+ dWRtYTEpOworCW91dF9iZTMyKCZyZWdzLT51ZG1hMiwgdGltaW5nLT51ZG1hMik7CisJb3V0X2Jl MzIoJnJlZ3MtPnVkbWEzLCB0aW1pbmctPnVkbWEzKTsKKwlvdXRfYmUzMigmcmVncy0+dWRtYTQs IHRpbWluZy0+dWRtYTQpOworCW91dF9iZTMyKCZyZWdzLT51ZG1hNSwgdGltaW5nLT51ZG1hNSk7 CiAJcHJpdi0+Y3NlbCA9IGRldmljZTsKIH0KIApAQCAtMjQ1LDYgKzM4NCwyOSBAQCBtcGM1Mnh4 X2F0YV9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgCiAJbXBjNTJ4eF9hdGFfYXBwbHlfdGlt aW5ncyhwcml2LCBhZGV2LT5kZXZubyk7CiB9CiBzdGF0aWMgdm9pZAorbXBjNTJ4eF9hdGFfc2V0 X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCit7 CisJc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRh OworCWludCBydjsKKworCWlmIChhZGV2LT5kbWFfbW9kZSA+PSBYRkVSX1VETUFfMCkgeworCQlp bnQgZG1hID0gYWRldi0+ZG1hX21vZGUgLSBYRkVSX1VETUFfMDsKKwkJcnYgPSBtcGM1Mnh4X2F0 YV9jb21wdXRlX3VkbWFfdGltaW5ncyhwcml2LCBhZGV2LT5kZXZubywgZG1hKTsKKwl9IGVsc2Ug eworCQlpbnQgZG1hID0gYWRldi0+ZG1hX21vZGUgLSBYRkVSX01XX0RNQV8wOworCQlydiA9IG1w YzUyeHhfYXRhX2NvbXB1dGVfbWRtYV90aW1pbmdzKHByaXYsIGFkZXYtPmRldm5vLCBkbWEpOwor CX0KKworCWlmIChydikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCSI6IFRyeWlu ZyB0byBzZWxlY3QgaW52YWxpZCBETUEgbW9kZSAlZFxuIiwKKwkJCWFkZXYtPmRtYV9tb2RlKTsK KwkJcmV0dXJuOworCX0KKworCW1wYzUyeHhfYXRhX2FwcGx5X3RpbWluZ3MocHJpdiwgYWRldi0+ ZGV2bm8pOworfQorc3RhdGljIHZvaWQKIG1wYzUyeHhfYXRhX2Rldl9zZWxlY3Qoc3RydWN0IGF0 YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9hdGFf cHJpdiAqcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CkBAIC0yNTUsMTYgKzQxNiwxOTAg QEAgbXBjNTJ4eF9hdGFfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKgogCWF0YV9zZmZfZGV2 X3NlbGVjdChhcCxkZXZpY2UpOwogfQogCitzdGF0aWMgaW50CittcGM1Mnh4X2F0YV9idWlsZF9k bWF0YWJsZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAq YXAgPSBxYy0+YXA7CisJc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYgPSBhcC0+aG9zdC0+ cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtcGM1Mnh4X2F0YSAqcmVnc19wYSA9IHByaXYtPmF0YV9y ZWdzX3BhOworCXVuc2lnbmVkIGludCByZWFkID0gIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdf V1JJVEUpLCBzaTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBjb3VudCA9IDA7CisK KwlpZiAocmVhZCkKKwkJYmNvbV9hdGFfcnhfcHJlcGFyZShwcml2LT5kbWF0c2spOworCWVsc2UK KwkJYmNvbV9hdGFfdHhfcHJlcGFyZShwcml2LT5kbWF0c2spOworCisJZm9yX2VhY2hfc2cocWMt PnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpIHsKKwkJZG1hX2FkZHJfdCBjdXJfYWRkciA9IHNnX2Rt YV9hZGRyZXNzKHNnKTsKKwkJdTMyIGN1cl9sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKworCQl3aGls ZSAoY3VyX2xlbikgeworCQkJdW5zaWduZWQgaW50IHRjID0gbWluKGN1cl9sZW4sIE1BWF9ETUFf QlVGRkVSX1NJWkUpOworCQkJc3RydWN0IGJjb21fYXRhX2JkICpiZCA9IChzdHJ1Y3QgYmNvbV9h dGFfYmQgKikgYmNvbV9wcmVwYXJlX25leHRfYnVmZmVyKHByaXYtPmRtYXRzayk7CisKKwkJCWlm IChyZWFkKSB7CisJCQkJYmQtPnN0YXR1cyA9IHRjOworCQkJCWJkLT5zcmNfcGEgPSAoX19mb3Jj ZSB1MzIpICZyZWdzX3BhLT5maWZvX2RhdGE7CisJCQkJYmQtPmRzdF9wYSA9IChfX2ZvcmNlIHUz MikgY3VyX2FkZHI7CisJCQl9IGVsc2UgeworCQkJCWJkLT5zdGF0dXMgPSB0YzsKKwkJCQliZC0+ c3JjX3BhID0gKF9fZm9yY2UgdTMyKSBjdXJfYWRkcjsKKwkJCQliZC0+ZHN0X3BhID0gKF9fZm9y Y2UgdTMyKSAmcmVnc19wYS0+Zmlmb19kYXRhOworCQkJfQorCisJCQliY29tX3N1Ym1pdF9uZXh0 X2J1ZmZlcihwcml2LT5kbWF0c2ssIE5VTEwpOworCisJCQljdXJfYWRkciArPSB0YzsKKwkJCWN1 cl9sZW4gLT0gdGM7CisJCQljb3VudCsrOworCisJCQlpZiAoY291bnQgPiBNQVhfRE1BX0JVRkZF UlMpIHsKKwkJCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6ICVpIGRtYSB0YWJsZSIKKwkJCQkJInRv byBzbWFsbFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJCQlnb3RvIHVzZV9waW9faW5zdGVh ZDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMTsKKwordXNlX3Bpb19pbnN0ZWFkOgorCWJjb21f YXRhX3Jlc2V0X2JkKHByaXYtPmRtYXRzayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk CittcGM1Mnh4X2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3Ry dWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAqcHJp diA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1wYzUyeHhfYXRhIF9faW9tZW0g KnJlZ3MgPSBwcml2LT5hdGFfcmVnczsKKworCXVuc2lnbmVkIGludCByZWFkID0gIShxYy0+dGYu ZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOworCXU4IGRtYV9tb2RlOworCisJaWYgKCFtcGM1Mnh4 X2F0YV9idWlsZF9kbWF0YWJsZShxYykpCisJCXByaW50ayhLRVJOX0FMRVJUICIlczogJWksIHJl dHVybiAxP1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCS8qIENoZWNrIEZJRk8gaXMgT0su Li4gKi8KKwlpZihpbl84KCZwcml2LT5hdGFfcmVncy0+Zmlmb19zdGF0dXMpICYgTVBDNTJ4eF9B VEFfRklGT1NUQVRfRVJST1IpCisJCXByaW50ayhLRVJOX0FMRVJUICIlczogRklGTyBlcnJvciBk ZXRlY3RlZDogMHglMDJ4IVxuIiwKKwkJCV9fZnVuY19fLCBpbl84KCZwcml2LT5hdGFfcmVncy0+ Zmlmb19zdGF0dXMpKTsKKworCWlmIChyZWFkKSB7CisJCWRtYV9tb2RlID0gTVBDNTJ4eF9BVEFf RE1BTU9ERV9JRSB8IE1QQzUyeHhfQVRBX0RNQU1PREVfUkVBRCB8CisJCQkJTVBDNTJ4eF9BVEFf RE1BTU9ERV9GRTsKKworCQkvKiBTZXR1cCBGSUZPIGlmIGRpcmVjdGlvbiBjaGFuZ2VkICovCisJ CWlmIChwcml2LT5tcGM1Mnh4X2F0YV9kbWFfbGFzdF93cml0ZSAhPSAwKSB7CisJCQlwcml2LT5t cGM1Mnh4X2F0YV9kbWFfbGFzdF93cml0ZSA9IDA7CisKKwkJCS8qIENvbmZpZ3VyZSBGSUZPIHdp dGggZ3JhbnVsYXJpdHkgdG8gNyAqLworCQkJb3V0XzgoJnJlZ3MtPmZpZm9fY29udHJvbCwgNyk7 CisJCQlvdXRfYmUxNigmcmVncy0+Zmlmb19hbGFybSwgMTI4KTsKKworCQkJLyogU2V0IEZJRk8g UmVzZXQgYml0IChGUikgKi8KKwkJCW91dF84KCZyZWdzLT5kbWFfbW9kZSwgTVBDNTJ4eF9BVEFf RE1BTU9ERV9GUik7CisJCX0KKwl9IGVsc2UgeworCQlkbWFfbW9kZSA9IE1QQzUyeHhfQVRBX0RN QU1PREVfSUUgfCBNUEM1Mnh4X0FUQV9ETUFNT0RFX1dSSVRFOworCisJCS8qIFNldHVwIEZJRk8g aWYgZGlyZWN0aW9uIGNoYW5nZWQgKi8KKwkJaWYgKHByaXYtPm1wYzUyeHhfYXRhX2RtYV9sYXN0 X3dyaXRlICE9IDEpIHsKKwkJCXByaXYtPm1wYzUyeHhfYXRhX2RtYV9sYXN0X3dyaXRlID0gMTsK KworCQkJLyogQ29uZmlndXJlIEZJRk8gd2l0aCBncmFudWxhcml0eSB0byA0ICovCisJCQlvdXRf OCgmcmVncy0+Zmlmb19jb250cm9sLCA0KTsKKwkJCW91dF9iZTE2KCZyZWdzLT5maWZvX2FsYXJt LCAxMjgpOworCQl9CisJfQorCisJaWYgKHByaXYtPnRpbWluZ3NbcWMtPmRldi0+ZGV2bm9dLnVz aW5nX3VkbWEpCisJCWRtYV9tb2RlIHw9IE1QQzUyeHhfQVRBX0RNQU1PREVfVURNQTsKKworCW91 dF84KCZyZWdzLT5kbWFfbW9kZSwgZG1hX21vZGUpOworCXByaXYtPndhaXRpbmdfZm9yX2RtYSA9 IEFUQV9ETUFfQUNUSVZFOworCisJYXRhX3dhaXRfaWRsZShhcCk7CisJYXAtPm9wcy0+c2ZmX2V4 ZWNfY29tbWFuZChhcCwgJnFjLT50Zik7Cit9CisKK3N0YXRpYyB2b2lkCittcGM1Mnh4X2JtZG1h X3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICph cCA9IHFjLT5hcDsKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAqcHJpdiA9IGFwLT5ob3N0LT5w cml2YXRlX2RhdGE7CisKKwkvKiBMb2NhbEJ1cyBsb2NrICovCisJd2hpbGUgKHRlc3RfYW5kX3Nl dF9iaXQoMCwgJnBhdGFfbXBjNTJ4eF9hdGFfZG1hX2xvY2spICE9IDApCisJCTsKKworCWJjb21f c2V0X3Rhc2tfYXV0b19zdGFydChwcml2LT5kbWF0c2stPnRhc2tudW0sIHByaXYtPmRtYXRzay0+ dGFza251bSk7CisJYmNvbV9lbmFibGUocHJpdi0+ZG1hdHNrKTsKK30KKworc3RhdGljIHZvaWQK K21wYzUyeHhfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVj dCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IG1wYzUyeHhfYXRhX3ByaXYgKnByaXYg PSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCisJYmNvbV9kaXNhYmxlKHByaXYtPmRtYXRzayk7 CisJYmNvbV9hdGFfcmVzZXRfYmQocHJpdi0+ZG1hdHNrKTsKKworCS8qIExvY2FsQnVzIHVubG9j ayovCisJY2xlYXJfYml0KDAsICZwYXRhX21wYzUyeHhfYXRhX2RtYV9sb2NrKTsKKworCXByaXYt PndhaXRpbmdfZm9yX2RtYSA9IDA7CisKKwkvKiBDaGVjayBGSUZPIGlzIE9LLi4uICovCisJaWYo aW5fOCgmcHJpdi0+YXRhX3JlZ3MtPmZpZm9fc3RhdHVzKSAmIE1QQzUyeHhfQVRBX0ZJRk9TVEFU X0VSUk9SKQorCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6IEZJRk8gZXJyb3IgZGV0ZWN0ZWQ6IDB4 JTAyeCFcbiIsCisJCQlfX2Z1bmNfXywgaW5fOCgmcHJpdi0+YXRhX3JlZ3MtPmZpZm9fc3RhdHVz KSk7Cit9CisKK3N0YXRpYyB1OAorbXBjNTJ4eF9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0 ICphcCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9hdGFfcHJpdiAqcHJpdiA9IGFwLT5ob3N0LT5wcml2 YXRlX2RhdGE7CisKKwkvKiBDaGVjayBGSUZPIGlzIE9LLi4uICovCisJaWYoaW5fOCgmcHJpdi0+ YXRhX3JlZ3MtPmZpZm9fc3RhdHVzKSAmIE1QQzUyeHhfQVRBX0ZJRk9TVEFUX0VSUk9SKSB7CisJ CXByaW50ayhLRVJOX0FMRVJUICIlczogRklGTyBlcnJvciBkZXRlY3RlZDogMHglMDJ4IVxuIiwK KwkJCV9fZnVuY19fLCBpbl84KCZwcml2LT5hdGFfcmVncy0+Zmlmb19zdGF0dXMpKTsKKwkJcmV0 dXJuIHByaXYtPndhaXRpbmdfZm9yX2RtYSB8IEFUQV9ETUFfRVJSOworCX0KKworCXJldHVybiBw cml2LT53YWl0aW5nX2Zvcl9kbWE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbXBjNTJ4eF9h dGFfdGFza19pcnEoaW50IGlycSwgdm9pZCAqdnByaXYpCit7CisJc3RydWN0IG1wYzUyeHhfYXRh X3ByaXYgKnByaXYgPSB2cHJpdjsKKwlwcml2LT53YWl0aW5nX2Zvcl9kbWEgfD0gQVRBX0RNQV9J TlRSOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9z dF90ZW1wbGF0ZSBtcGM1Mnh4X2F0YV9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLAog fTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIG1wYzUyeHhfYXRhX3BvcnRf b3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKLQkuc2ZmX2Rldl9zZWxl Y3QJCT0gbXBjNTJ4eF9hdGFfZGV2X3NlbGVjdCwKLQkuY2FibGVfZGV0ZWN0CQk9IGF0YV9jYWJs ZV80MHdpcmUsCisKIAkuc2V0X3Bpb21vZGUJCT0gbXBjNTJ4eF9hdGFfc2V0X3Bpb21vZGUsCi0J LnBvc3RfaW50ZXJuYWxfY21kCT0gQVRBX09QX05VTEwsCisJLnNldF9kbWFtb2RlCQk9IG1wYzUy eHhfYXRhX3NldF9kbWFtb2RlLAorCS5zZmZfZGV2X3NlbGVjdAkJPSBtcGM1Mnh4X2F0YV9kZXZf c2VsZWN0LAorCisJLmJtZG1hX3NldHVwCQk9IG1wYzUyeHhfYm1kbWFfc2V0dXAsCisJLmJtZG1h X3N0YXJ0CQk9IG1wYzUyeHhfYm1kbWFfc3RhcnQsCisJLmJtZG1hX3N0b3AJCT0gbXBjNTJ4eF9i bWRtYV9zdG9wLAorCS5ibWRtYV9zdGF0dXMJCT0gbXBjNTJ4eF9ibWRtYV9zdGF0dXMsCisKKwku cWNfcHJlcAkJPSBhdGFfbm9vcF9xY19wcmVwLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQK QEAgLTI4MSw5ICs2MTUsMTQgQEAgbXBjNTJ4eF9hdGFfaW5pdF9vbmUoc3RydWN0IGRldmljZSAq ZGV2LAogCiAJYXAgPSBob3N0LT5wb3J0c1swXTsKIAlhcC0+ZmxhZ3MJCXw9IEFUQV9GTEFHX1NM QVZFX1BPU1M7Ci0JYXAtPnBpb19tYXNrCQk9IDB4MWY7CS8qIFVwIHRvIFBJTzQgKi8KLQlhcC0+ bXdkbWFfbWFzawkJPSAweDAwOwkvKiBObyBNV0RNQSAgICovCi0JYXAtPnVkbWFfbWFzawkJPSAw eDAwOwkvKiBObyBVRE1BICAgICovCisJYXAtPnBpb19tYXNrCQk9IEFUQV9QSU80OwkvKiBVcCB0 byBQSU80ICovCisjaWZkZWYgQ09ORklHX1BBVEFfTVBDNTJ4eF9ETUEKKwlhcC0+bXdkbWFfbWFz awkJPSBBVEFfTVdETUEyOwkvKiBVcCB0byBNV0RNQTIgKi8KKwlhcC0+dWRtYV9tYXNrCQk9IEFU QV9VRE1BMjsJLyogVXAgdG8gVURNQTIgKi8KKyNlbHNlCisJYXAtPm13ZG1hX21hc2sJCT0gMHgw MDsJCS8qIE5vIE1XRE1BICovCisJYXAtPnVkbWFfbWFzawkJPSAweDAwOwkJLyogTm8gVURNQSAq LworI2VuZGlmCiAJYXAtPm9wcwkJCT0gJm1wYzUyeHhfYXRhX3BvcnRfb3BzOwogCWhvc3QtPnBy aXZhdGVfZGF0YQk9IHByaXY7CiAKQEAgLTMzMyw3ICs2NzIsNyBAQCBtcGM1Mnh4X2F0YV9wcm9i ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgCiAJaW50IGF0YV9pcnE7CiAJc3RydWN0IG1wYzUyeHhf YXRhIF9faW9tZW0gKmF0YV9yZWdzOwogCXN0cnVjdCBtcGM1Mnh4X2F0YV9wcml2ICpwcml2Owot CWludCBydjsKKwlpbnQgcnYsIHJldCwgdGFza19pcnE7CiAKIAkvKiBHZXQgaXBiIGZyZXF1ZW5j eSAqLwogCWlwYl9mcmVxID0gbXBjNTJ4eF9maW5kX2lwYl9mcmVxKG9wLT5ub2RlKTsKQEAgLTM4 OSw4ICs3MjgsMzQgQEAgbXBjNTJ4eF9hdGFfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsIAog CiAJcHJpdi0+aXBiX3BlcmlvZCA9IDEwMDAwMDAwMDAgLyAoaXBiX2ZyZXEgLyAxMDAwKTsKIAlw cml2LT5hdGFfcmVncyA9IGF0YV9yZWdzOworCXByaXYtPmF0YV9yZWdzX3BhID0gKHN0cnVjdCBt cGM1Mnh4X2F0YSAqKSByZXNfbWVtLnN0YXJ0OwogCXByaXYtPmF0YV9pcnEgPSBhdGFfaXJxOwog CXByaXYtPmNzZWwgPSAtMTsKKwlwcml2LT5tcGM1Mnh4X2F0YV9kbWFfbGFzdF93cml0ZSA9IC0x OworCisJaWYgKGlwYl9mcmVxLzEwMDAwMDAgPT0gNjYpIHsKKwkJcHJpdi0+bWRtYXNwZWMgPSBt ZG1hc3BlYzY2OworCQlwcml2LT51ZG1hc3BlYyA9IHVkbWFzcGVjNjY7CisJfSBlbHNlIHsKKwkJ cHJpdi0+bWRtYXNwZWMgPSBtZG1hc3BlYzEzMjsKKwkJcHJpdi0+dWRtYXNwZWMgPSB1ZG1hc3Bl YzEzMjsKKwl9CisKKwlwYXRhX21wYzUyeHhfYXRhX2RtYV9sb2NrID0gMDsKKwlwcml2LT5kbWF0 c2sgPSBiY29tX2F0YV9pbml0KE1BWF9ETUFfQlVGRkVSUywgTUFYX0RNQV9CVUZGRVJfU0laRSk7 CisJcGF0YV9tcGM1Mnh4X2F0YV9kbWFfdGFzayA9IHByaXYtPmRtYXRzazsKKwlpZiAoIXByaXYt PmRtYXRzaykgeworCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6ICVpXG4iLCBfX2Z1bmNfXywgX19M SU5FX18pOworCQlydiA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXRhc2tfaXJxID0g YmNvbV9nZXRfdGFza19pcnEocHJpdi0+ZG1hdHNrKTsKKwlyZXQgPSByZXF1ZXN0X2lycSh0YXNr X2lycSwgJm1wYzUyeHhfYXRhX3Rhc2tfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJCSJBVEEgdGFz ayIsIHByaXYpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0FMRVJUICIlczogcmVxdWVzdF9p cnEgZmFpbGVkIHdpdGg6ICIKKwkJCQkJIiVpXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAogCS8qIElu aXQgdGhlIGh3ICovCiAJcnYgPSBtcGM1Mnh4X2F0YV9od19pbml0KHByaXYpOwo= ------=_Part_1838_32139766.1215002919190--