From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe CORNU Subject: [PATCH v5 7/7] drm/stm: Add STM32 DSI controller driver Date: Mon, 3 Jul 2017 10:41:27 +0200 Message-ID: <1499071287-10414-8-git-send-email-philippe.cornu@st.com> References: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 008C96E239 for ; Mon, 3 Jul 2017 08:46:57 +0000 (UTC) In-Reply-To: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandre Torgue , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre , Neil Armstrong , Archit Taneja , Eric Anholt , Chris Zhong , Andrzej Hajda , Xinliang Liu , zourongrong@gmail.com, Xinwei Kong , Chen Feng , Mark Yao Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Philippe Cornu , Fabien Dessenne , dri-devel@lists.freedesktop.org, Mickael Reulier , Vincent Abriou , Gabriel Fernandez , Ludovic Barre List-Id: dri-devel@lists.freedesktop.org QWRkIHRoZSBTVE0zMiBEU0kgY29udHJvbGxlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBTeW5vcHN5 cyBEZXNpZ25XYXJlCk1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UuCgpTaWduZWQtb2Zm LWJ5OiBQaGlsaXBwZSBDT1JOVSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPgpSZXZpZXdlZC1ieTog TmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgpSZXZpZXdlZC1ieTogQXJj aGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v c3RtL0tjb25maWcgICAgICAgICAgIHwgICA3ICsKIGRyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZp bGUgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3N0bS9kd19taXBpX2RzaS1zdG0u YyB8IDM1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5n ZWQsIDM2MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3N0bS9kd19taXBpX2RzaS1zdG0uYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdG0v S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZwppbmRleCA0Yjg4MjIzLi5mOTQ2 MmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3RtL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3N0bS9LY29uZmlnCkBAIC0xNCwzICsxNCwxMCBAQCBjb25maWcgRFJNX1NUTQog CSAgU1RNaWNyb2VsZWN0cm9uaWNzIFNUTTMyIE1DVXMuCiAJICBUbyBjb21waWxlIHRoaXMgZHJp dmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNh bGxlZCBzdG0tZHJtLgorCitjb25maWcgRFJNX1NUTV9EU0kKKwl0cmlzdGF0ZSAiU1RNaWNyb2Vs ZWN0cm9uaWNzIHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIFN5bm9wc3lzIE1JUEkgRFNJIgorCWRl cGVuZHMgb24gRFJNX1NUTQorCXNlbGVjdCBEUk1fRFdfTUlQSV9EU0kKKwloZWxwCisJICBDaG9v c2UgdGhpcyBvcHRpb24gZm9yIE1JUEkgRFNJIHN1cHBvcnQgb24gU1RNaWNyb2VsZWN0cm9uaWNz IFNvQy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vc3RtL01ha2VmaWxlCmluZGV4IGEwOWVjZjQuLmQ4ODNhZGMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9N YWtlZmlsZQpAQCAtMiw0ICsyLDYgQEAgc3RtLWRybS15IDo9IFwKIAlkcnYubyBcCiAJbHRkYy5v CiAKK29iai0kKENPTkZJR19EUk1fU1RNX0RTSSkgKz0gZHdfbWlwaV9kc2ktc3RtLm8KKwogb2Jq LSQoQ09ORklHX0RSTV9TVE0pICs9IHN0bS1kcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3N0bS9kd19taXBpX2RzaS1zdG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vZHdfbWlwaV9k c2ktc3RtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhZTAwZQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vZHdfbWlwaV9kc2ktc3RtLmMKQEAg LTAsMCArMSwzNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBT QSAyMDE3CisgKgorICogQXV0aG9yczogUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0 LmNvbT4KKyAqICAgICAgICAgIFlhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+ CisgKgorICogTGljZW5zZSB0ZXJtczogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwp LCB2ZXJzaW9uIDIKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGlu dXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2JyaWRn ZS9kd19taXBpX2RzaS5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorCisvKiBE U0kgd3JhcHBlciByZWdpc3RlciAmIGJpdCBkZWZpbml0aW9ucyAqLworLyogTm90ZTogcmVnaXN0 ZXJzIGFyZSBuYW1lZCBhcyBpbiB0aGUgUmVmZXJlbmNlIE1hbnVhbCAqLworI2RlZmluZSBEU0lf V0NGR1IJMHgwNDAwCQkvKiBXcmFwcGVyIENvbkZpR3VyYXRpb24gUmVnICovCisjZGVmaW5lIFdD RkdSX0RTSU0JQklUKDApCQkvKiBEU0kgTW9kZSAqLworI2RlZmluZSBXQ0ZHUl9DT0xNVVgJR0VO TUFTSygzLCAxKQkvKiBDT0xvciBNVWx0aXBsZVhpbmcgKi8KKworI2RlZmluZSBEU0lfV0NSCQkw eDA0MDQJCS8qIFdyYXBwZXIgQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgV0NSX0RTSUVOCUJJVCgz KQkJLyogRFNJIEVOYWJsZSAqLworCisjZGVmaW5lIERTSV9XSVNSCTB4MDQwQwkJLyogV3JhcHBl ciBJbnRlcnJ1cHQgYW5kIFN0YXR1cyBSZWcgKi8KKyNkZWZpbmUgV0lTUl9QTExMUwlCSVQoOCkJ CS8qIFBMTCBMb2NrIFN0YXR1cyAqLworI2RlZmluZSBXSVNSX1JSUwlCSVQoMTIpCQkvKiBSZWd1 bGF0b3IgUmVhZHkgU3RhdHVzICovCisKKyNkZWZpbmUgRFNJX1dQQ1IwCTB4MDQxOAkJLyogV3Jh cHBlciBQaHkgQ29uZiBSZWcgMCAqLworI2RlZmluZSBXUENSMF9VSVg0CUdFTk1BU0soNSwgMCkJ LyogVW5pdCBJbnRlcnZhbCBYIDQgKi8KKyNkZWZpbmUgV1BDUjBfVERETAlCSVQoMTYpCQkvKiBU dXJuIERpc2FibGUgRGF0YSBMYW5lcyAqLworCisjZGVmaW5lIERTSV9XUlBDUgkweDA0MzAJCS8q IFdyYXBwZXIgUmVndWxhdG9yICYgUGxsIEN0cmwgUmVnICovCisjZGVmaW5lIFdSUENSX1BMTEVO CUJJVCgwKQkJLyogUExMIEVOYWJsZSAqLworI2RlZmluZSBXUlBDUl9ORElWCUdFTk1BU0soOCwg MikJLyogcGxsIGxvb3AgRElWaXNpb24gRmFjdG9yICovCisjZGVmaW5lIFdSUENSX0lERglHRU5N QVNLKDE0LCAxMSkJLyogcGxsIElucHV0IERpdmlzaW9uIEZhY3RvciAqLworI2RlZmluZSBXUlBD Ul9PREYJR0VOTUFTSygxNywgMTYpCS8qIHBsbCBPdXRwdXQgRGl2aXNpb24gRmFjdG9yICovCisj ZGVmaW5lIFdSUENSX1JFR0VOCUJJVCgyNCkJCS8qIFJFR3VsYXRvciBFTmFibGUgKi8KKyNkZWZp bmUgV1JQQ1JfQkdSRU4JQklUKDI4KQkJLyogQmFuZEdhcCBSZWZlcmVuY2UgRU5hYmxlICovCisj ZGVmaW5lIElERl9NSU4JCTEKKyNkZWZpbmUgSURGX01BWAkJNworI2RlZmluZSBORElWX01JTgkx MAorI2RlZmluZSBORElWX01BWAkxMjUKKyNkZWZpbmUgT0RGX01JTgkJMQorI2RlZmluZSBPREZf TUFYCQk4CisKKy8qIGRzaSBjb2xvciBmb3JtYXQgY29kaW5nIGFjY29yZGluZyB0byB0aGUgZGF0 YXNoZWV0ICovCitlbnVtIGRzaV9jb2xvciB7CisJRFNJX1JHQjU2NV9DT05GMSwKKwlEU0lfUkdC NTY1X0NPTkYyLAorCURTSV9SR0I1NjVfQ09ORjMsCisJRFNJX1JHQjY2Nl9DT05GMSwKKwlEU0lf UkdCNjY2X0NPTkYyLAorCURTSV9SR0I4ODgsCit9OworCisjZGVmaW5lIExBTkVfTUlOX0tCUFMJ MzEyNTAKKyNkZWZpbmUgTEFORV9NQVhfS0JQUwk1MDAwMDAKKworLyogU2xlZXAgJiB0aW1lb3V0 IGZvciByZWd1bGF0b3Igb24vb2ZmLCBwbGwgbG9jay91bmxvY2sgJiBmaWZvIGVtcHR5ICovCisj ZGVmaW5lIFNMRUVQX1VTCTEwMDAKKyNkZWZpbmUgVElNRU9VVF9VUwkyMDAwMDAKKworc3RydWN0 IGR3X21pcGlfZHNpX3N0bSB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBjbGsgKnBs bHJlZl9jbGs7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dyaXRlKHN0cnVjdCBkd19t aXBpX2RzaV9zdG0gKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBkc2kt PmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdf bWlwaV9kc2lfc3RtICpkc2ksIHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSAr IHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfc2V0KHN0cnVjdCBkd19taXBpX2Rz aV9zdG0gKmRzaSwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJZHNpX3dyaXRlKGRzaSwgcmVnLCBk c2lfcmVhZChkc2ksIHJlZykgfCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzaV9j bGVhcihzdHJ1Y3QgZHdfbWlwaV9kc2lfc3RtICpkc2ksIHUzMiByZWcsIHUzMiBtYXNrKQorewor CWRzaV93cml0ZShkc2ksIHJlZywgZHNpX3JlYWQoZHNpLCByZWcpICYgfm1hc2spOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgZHNpX3VwZGF0ZV9iaXRzKHN0cnVjdCBkd19taXBpX2RzaV9zdG0g KmRzaSwgdTMyIHJlZywKKwkJCQkgICB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlkc2lfd3JpdGUo ZHNpLCByZWcsIChkc2lfcmVhZChkc2ksIHJlZykgJiB+bWFzaykgfCB2YWwpOworfQorCitzdGF0 aWMgZW51bSBkc2lfY29sb3IgZHNpX2NvbG9yX2Zyb21fbWlwaShlbnVtIG1pcGlfZHNpX3BpeGVs X2Zvcm1hdCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4 ODg6CisJCXJldHVybiBEU0lfUkdCODg4OworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJ cmV0dXJuIERTSV9SR0I2NjZfQ09ORjI7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2X1BBQ0tF RDoKKwkJcmV0dXJuIERTSV9SR0I2NjZfQ09ORjE7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1 OgorCQlyZXR1cm4gRFNJX1JHQjU2NV9DT05GMTsKKwlkZWZhdWx0OgorCQlEUk1fREVCVUdfRFJJ VkVSKCJNSVBJIGNvbG9yIGludmFsaWQsIHNvIHdlIHVzZSByZ2I4ODhcbiIpOworCX0KKwlyZXR1 cm4gRFNJX1JHQjg4ODsKK30KKworc3RhdGljIGludCBkc2lfcGxsX2dldF9jbGtvdXRfa2h6KGlu dCBjbGtpbl9raHosIGludCBpZGYsIGludCBuZGl2LCBpbnQgb2RmKQoreworCS8qIHByZXZlbnQg ZnJvbSBkaXZpc2lvbiBieSAwICovCisJaWYgKGlkZiAqIG9kZikKKwkJcmV0dXJuIERJVl9ST1VO RF9DTE9TRVNUKGNsa2luX2toeiAqIG5kaXYsIGlkZiAqIG9kZik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBkc2lfcGxsX2dldF9wYXJhbXMoaW50IGNsa2luX2toeiwgaW50IGNsa291 dF9raHosCisJCQkgICAgICBpbnQgKmlkZiwgaW50ICpuZGl2LCBpbnQgKm9kZikKK3sKKwlpbnQg aSwgbywgbiwgbl9taW4sIG5fbWF4OworCWludCBmdmNvX21pbiwgZnZjb19tYXgsIGRlbHRhLCBi ZXN0X2RlbHRhOyAvKiBhbGwgaW4ga2h6ICovCisKKwkvKiBFYXJseSBjaGVja3MgcHJldmVudGlu ZyBkaXZpc2lvbiBieSAwICYgb2RkIHJlc3VsdHMgKi8KKwlpZiAoKGNsa2luX2toeiA8PSAwKSB8 fCAoY2xrb3V0X2toeiA8PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmdmNvX21pbiA9IExB TkVfTUlOX0tCUFMgKiAyICogT0RGX01BWDsKKwlmdmNvX21heCA9IExBTkVfTUFYX0tCUFMgKiAy ICogT0RGX01JTjsKKworCWJlc3RfZGVsdGEgPSAxMDAwMDAwOyAvKiBiaWcgc3RhcnRlZCB2YWx1 ZSAoMTAwMDAwMGtoeikgKi8KKworCWZvciAoaSA9IElERl9NSU47IGkgPD0gSURGX01BWDsgaSsr KSB7CisJCS8qIENvbXB1dGUgbmRpdiByYW5nZSBhY2NvcmRpbmcgdG8gRnZjbyAqLworCQluX21p biA9ICgoZnZjb19taW4gKiBpKSAvICgyICogY2xraW5fa2h6KSkgKyAxOworCQluX21heCA9IChm dmNvX21heCAqIGkpIC8gKDIgKiBjbGtpbl9raHopOworCisJCS8qIE5vIG5lZWQgdG8gY29udGlu dWUgaWRmIGxvb3AgaWYgd2UgcmVhY2ggbmRpdiBtYXggKi8KKwkJaWYgKG5fbWluID49IE5ESVZf TUFYKQorCQkJYnJlYWs7CisKKwkJLyogQ2xhbXAgbmRpdiB0byB2YWxpZCB2YWx1ZXMgKi8KKwkJ aWYgKG5fbWluIDwgTkRJVl9NSU4pCisJCQluX21pbiA9IE5ESVZfTUlOOworCQlpZiAobl9tYXgg PiBORElWX01BWCkKKwkJCW5fbWF4ID0gTkRJVl9NQVg7CisKKwkJZm9yIChvID0gT0RGX01JTjsg byA8PSBPREZfTUFYOyBvICo9IDIpIHsKKwkJCW4gPSBESVZfUk9VTkRfQ0xPU0VTVChpICogbyAq IGNsa291dF9raHosIGNsa2luX2toeik7CisJCQkvKiBDaGVjayBuZGl2IGFjY29yZGluZyB0byB2 Y28gcmFuZ2UgKi8KKwkJCWlmICgobiA8IG5fbWluKSB8fCAobiA+IG5fbWF4KSkKKwkJCQljb250 aW51ZTsKKwkJCS8qIENoZWNrIGlmIG5ldyBkZWx0YSBpcyBiZXR0ZXIgJiBzYXZlcyBwYXJhbWV0 ZXJzICovCisJCQlkZWx0YSA9IGRzaV9wbGxfZ2V0X2Nsa291dF9raHooY2xraW5fa2h6LCBpLCBu LCBvKSAtCisJCQkJY2xrb3V0X2toejsKKwkJCWlmIChkZWx0YSA8IDApCisJCQkJZGVsdGEgPSAt ZGVsdGE7CisJCQlpZiAoZGVsdGEgPCBiZXN0X2RlbHRhKSB7CisJCQkJKmlkZiA9IGk7CisJCQkJ Km5kaXYgPSBuOworCQkJCSpvZGYgPSBvOworCQkJCWJlc3RfZGVsdGEgPSBkZWx0YTsKKwkJCX0K KwkJCS8qIGZhc3QgcmV0dXJuIGluIGNhc2Ugb2YgInBlcmZlY3QgcmVzdWx0IiAqLworCQkJaWYg KCFkZWx0YSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX3BoeV9pbml0KHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3Qg ZHdfbWlwaV9kc2lfc3RtICpkc2kgPSBwcml2X2RhdGE7CisJdTMyIHZhbDsKKwlpbnQgcmV0Owor CisJLyogRW5hYmxlIHRoZSByZWd1bGF0b3IgKi8KKwlkc2lfc2V0KGRzaSwgRFNJX1dSUENSLCBX UlBDUl9SRUdFTiB8IFdSUENSX0JHUkVOKTsKKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNp LT5iYXNlICsgRFNJX1dJU1IsIHZhbCwgdmFsICYgV0lTUl9SUlMsCisJCQkJIFNMRUVQX1VTLCBU SU1FT1VUX1VTKTsKKwlpZiAocmV0KQorCQlEUk1fREVCVUdfRFJJVkVSKCIhVElNRU9VVCEgd2Fp dGluZyBSRUdVLCBsZXQncyBjb250aW51ZVxuIik7CisKKwkvKiBFbmFibGUgdGhlIERTSSBQTEwg JiB3YWl0IGZvciBpdHMgbG9jayAqLworCWRzaV9zZXQoZHNpLCBEU0lfV1JQQ1IsIFdSUENSX1BM TEVOKTsKKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1dJU1IsIHZh bCwgdmFsICYgV0lTUl9QTExMUywKKwkJCQkgU0xFRVBfVVMsIFRJTUVPVVRfVVMpOworCWlmIChy ZXQpCisJCURSTV9ERUJVR19EUklWRVIoIiFUSU1FT1VUISB3YWl0aW5nIFBMTCwgbGV0J3MgY29u dGludWVcbiIpOworCisJLyogRW5hYmxlIHRoZSBEU0kgd3JhcHBlciAqLworCWRzaV9zZXQoZHNp LCBEU0lfV0NSLCBXQ1JfRFNJRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2R3 X21pcGlfZHNpX2dldF9sYW5lX21icHModm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKKwkJCSAgdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzLCB1MzIgbGFuZXMs IHUzMiBmb3JtYXQsCisJCQkgIHVuc2lnbmVkIGludCAqbGFuZV9tYnBzKQoreworCXN0cnVjdCBk d19taXBpX2RzaV9zdG0gKmRzaSA9IHByaXZfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaWRmLCBuZGl2 LCBvZGYsIHBsbF9pbl9raHosIHBsbF9vdXRfa2h6OworCWludCByZXQsIGJwcDsKKwl1MzIgdmFs OworCisJcGxsX2luX2toeiA9ICh1bnNpZ25lZCBpbnQpKGNsa19nZXRfcmF0ZShkc2ktPnBsbHJl Zl9jbGspIC8gMTAwMCk7CisKKwkvKiBDb21wdXRlIHJlcXVlc3RlZCBwbGwgb3V0ICovCisJYnBw ID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChmb3JtYXQpOworCXBsbF9vdXRfa2h6ID0g bW9kZS0+Y2xvY2sgKiBicHAgLyBsYW5lczsKKwkvKiBBZGQgMjAlIHRvIHBsbCBvdXQgdG8gYmUg aGlnaGVyIHRoYW4gcGl4ZWwgYncgKGJ1cnN0IG1vZGUgb25seSkgKi8KKwlwbGxfb3V0X2toeiA9 IChwbGxfb3V0X2toeiAqIDEyKSAvIDEwOworCWlmIChwbGxfb3V0X2toeiA+IExBTkVfTUFYX0tC UFMpIHsKKwkJcGxsX291dF9raHogPSBMQU5FX01BWF9LQlBTOworCQlEUk1fV0FSTigiV2Fybmlu ZyBtYXggcGh5IG1icHMgaXMgdXNlZFxuIik7CisJfQorCWlmIChwbGxfb3V0X2toeiA8IExBTkVf TUlOX0tCUFMpIHsKKwkJcGxsX291dF9raHogPSBMQU5FX01JTl9LQlBTOworCQlEUk1fV0FSTigi V2FybmluZyBtaW4gcGh5IG1icHMgaXMgdXNlZFxuIik7CisJfQorCisJLyogQ29tcHV0ZSBiZXN0 IHBsbCBwYXJhbWV0ZXJzICovCisJaWRmID0gMDsKKwluZGl2ID0gMDsKKwlvZGYgPSAwOworCXJl dCA9IGRzaV9wbGxfZ2V0X3BhcmFtcyhwbGxfaW5fa2h6LCBwbGxfb3V0X2toeiwgJmlkZiwgJm5k aXYsICZvZGYpOworCWlmIChyZXQpCisJCURSTV9XQVJOKCJXYXJuaW5nIGRzaV9wbGxfZ2V0X3Bh cmFtcygpOiBiYWQgcGFyYW1zXG4iKTsKKworCS8qIEdldCB0aGUgYWRqdXN0ZWQgcGxsIG91dCB2 YWx1ZSAqLworCXBsbF9vdXRfa2h6ID0gZHNpX3BsbF9nZXRfY2xrb3V0X2toeihwbGxfaW5fa2h6 LCBpZGYsIG5kaXYsIG9kZik7CisKKwkvKiBTZXQgdGhlIFBMTCBkaXZpc2lvbiBmYWN0b3JzICov CisJZHNpX3VwZGF0ZV9iaXRzKGRzaSwgRFNJX1dSUENSLAlXUlBDUl9ORElWIHwgV1JQQ1JfSURG IHwgV1JQQ1JfT0RGLAorCQkJKG5kaXYgPDwgMikgfCAoaWRmIDw8IDExKSB8ICgoZmZzKG9kZikg LSAxKSA8PCAxNikpOworCisJLyogQ29tcHV0ZSB1aXg0ICYgc2V0IHRoZSBiaXQgcGVyaW9kIGlu IGhpZ2gtc3BlZWQgbW9kZSAqLworCXZhbCA9IDQwMDAwMDAgLyBwbGxfb3V0X2toejsKKwlkc2lf dXBkYXRlX2JpdHMoZHNpLCBEU0lfV1BDUjAsIFdQQ1IwX1VJWDQsIHZhbCk7CisKKwkvKiBTZWxl Y3QgdmlkZW8gbW9kZSBieSByZXNldHRpbmcgRFNJTSBiaXQgKi8KKwlkc2lfY2xlYXIoZHNpLCBE U0lfV0NGR1IsIFdDRkdSX0RTSU0pOworCisJLyogU2VsZWN0IHRoZSBjb2xvciBjb2RpbmcgKi8K Kwlkc2lfdXBkYXRlX2JpdHMoZHNpLCBEU0lfV0NGR1IsIFdDRkdSX0NPTE1VWCwKKwkJCWRzaV9j b2xvcl9mcm9tX21pcGkoZm9ybWF0KSA8PCAxKTsKKworCSpsYW5lX21icHMgPSBwbGxfb3V0X2to eiAvIDEwMDA7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJwbGxfaW4gJXVrSHogcGxsX291dCAldWtI eiBsYW5lX21icHMgJXVNSHpcbiIsCisJCQkgcGxsX2luX2toeiwgcGxsX291dF9raHosICpsYW5l X21icHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGh5 X29wcyBkd19taXBpX2RzaV9zdG1fcGh5X29wcyA9IHsKKwkuaW5pdCA9IGR3X21pcGlfZHNpX3Bo eV9pbml0LAorCS5nZXRfbGFuZV9tYnBzID0gZHdfbWlwaV9kc2lfZ2V0X2xhbmVfbWJwcywKK307 CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIGR3X21pcGlfZHNpX3N0bV9w bGF0X2RhdGEgPSB7CisJLm1heF9kYXRhX2xhbmVzID0gMiwKKwkucGh5X29wcyA9ICZkd19taXBp X2RzaV9zdG1fcGh5X29wcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IGR3X21pcGlfZHNpX3N0bV9kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInN0LHN0bTMy LWRzaSIsIC5kYXRhID0gJmR3X21pcGlfZHNpX3N0bV9wbGF0X2RhdGEsIH0sCisJeyB9LAorfTsK K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21pcGlfZHNpX3N0bV9kdF9pZHMpOworCitzdGF0 aWMgaW50IGR3X21pcGlfZHNpX3N0bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGR3X21pcGlf ZHNpX3N0bSAqZHNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkc2kg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNp KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2 LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJRFJNX0VSUk9SKCJVbmFibGUg dG8gZ2V0IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHNpLT5iYXNl ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRzaS0+YmFz ZSkpIHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZ2V0IGRzaSByZWdpc3RlcnNcbiIpOworCQly ZXR1cm4gUFRSX0VSUihkc2ktPmJhc2UpOworCX0KKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1f Y2xrX2dldChkZXYsICJyZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJ cmV0ID0gUFRSX0VSUihkc2ktPnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0 byBnZXQgcGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGtcbiIs IF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkd19taXBpX2RzaV9zdG1fcGxhdF9k YXRhLmJhc2UgPSBkc2ktPmJhc2U7CisJZHdfbWlwaV9kc2lfc3RtX3BsYXRfZGF0YS5wcml2X2Rh dGEgPSBkc2k7CisKKwlyZXQgPSBkd19taXBpX2RzaV9wcm9iZShwZGV2LCAmZHdfbWlwaV9kc2lf c3RtX3BsYXRfZGF0YSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0 aWFsaXplIG1pcGkgZHNpIGhvc3RcbiIpOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5w bGxyZWZfY2xrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3X21pcGlf ZHNpX3N0bV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg ZHdfbWlwaV9kc2lfc3RtICpkc2kgPSBkd19taXBpX2RzaV9zdG1fcGxhdF9kYXRhLnByaXZfZGF0 YTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworCWR3X21pcGlf ZHNpX3JlbW92ZShwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBkd19taXBpX2RzaV9zdG1fZHJpdmVyID0geworCS5wcm9iZQkJPSBkd19taXBp X2RzaV9zdG1fcHJvYmUsCisJLnJlbW92ZQkJPSBkd19taXBpX2RzaV9zdG1fcmVtb3ZlLAorCS5k cml2ZXIJCT0geworCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBpX2RzaV9zdG1fZHRfaWRzLAor CQkubmFtZQk9ICJkd19taXBpX2RzaS1zdG0iLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKGR3X21pcGlfZHNpX3N0bV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJQaGlsaXBw ZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPiIpOworTU9EVUxFX0FVVEhPUigiWWFubmlj ayBGZXJ0cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi U1RNaWNyb2VsZWN0cm9uaWNzIERXIE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK