From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC19BC43381 for ; Thu, 7 Mar 2019 10:06:19 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A8C5B20840 for ; Thu, 7 Mar 2019 10:06:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="EEdz+Kld" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A8C5B20840 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sigxcpu.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ZP/5WZGmwYw+RkWKR8jvhcUvRHd2QAxilhmTyAPiiS4=; b=EEdz+Kld8UUPY5 S26/D0OfdbovnmOux/x223Mzm9BAI44Vle/xx472OLLLtOhMRYpRhJcC+HrRMzDrQWEjgr9F+q23u Hi1A5fSxTRgcSRBBvIhztWNGA4ZZhjgvrAjxcz//ENccky4FLQ+BA2mtuRfJsskgqX1mBjEwjkRZn m4z8jB+D34/KjFSNG/j3VZmFeUkOCjjXLBPm3vOzVWFk0CP2fjpFTno3ASLN+BxKojShlYZYP1D2e Yb985uJQO5h5P0cXM1Yo8lAZ/mcekKemUMAduaUhtVLGqbZFjJ+FXU2Mk69q/9Op/NU/QsCt3zwAa +9OJevO9JJVghjLkNChw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h1pul-0007dl-UI; Thu, 07 Mar 2019 10:06:11 +0000 Received: from honk.sigxcpu.org ([24.134.29.49]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h1puJ-000701-7t for linux-arm-kernel@lists.infradead.org; Thu, 07 Mar 2019 10:05:54 +0000 Received: from localhost (localhost [127.0.0.1]) by honk.sigxcpu.org (Postfix) with ESMTP id 97920FB02; Thu, 7 Mar 2019 11:05:41 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at honk.sigxcpu.org Received: from honk.sigxcpu.org ([127.0.0.1]) by localhost (honk.sigxcpu.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 49qlIeqNDvpF; Thu, 7 Mar 2019 11:05:35 +0100 (CET) Received: by bogon.sigxcpu.org (Postfix, from userid 1000) id F41F047357; Thu, 7 Mar 2019 11:05:32 +0100 (CET) From: =?UTF-8?q?Guido=20G=C3=BCnther?= To: Maxime Ripard , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Robert Chiras , Sam Ravnborg , Fabio Estevam Subject: [PATCH v4 3/3] phy: Add driver for mixel dphy found on imx8 Date: Thu, 7 Mar 2019 11:05:32 +0100 Message-Id: <309d85012f4de5c4da3ef9d4afc80fc1cb85a079.1551952749.git.agx@sigxcpu.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190307_020543_900129_C78672E1 X-CRM114-Status: GOOD ( 22.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaXhlbCBEUEhZIGFzIGZvdW5kIG9uIGkuTVg4IENQ VXMgYnV0IHNpbmNlCnRoaXMgaXMgYW4gSVAgY29yZSBpdCB3aWxsIGxpa2VseSBiZSBmb3VuZCBv biBvdGhlcnMgaW4gdGhlIGZ1dHVyZS4gU28KaW5zdGVhZCBvZiBhZGRpbmcgdGhpcyB0byB0aGUg bndsIGhvc3QgZHJpdmVyIG1ha2UgaXQgYSBnZW5lcmljIFBIWQpkcml2ZXIuCgpUaGUgZHJpdmVy IHN1cHBvcnRzIHRoZSBpLk1YOE1RLiBTdXBwb3J0IGZvciBpLk1YOFFNIGFuZCBpLk1YOFFYUCBj YW4gYmUKYWRkZWQgb25jZSB0aGUgbmVjZXNzYXJ5IHN5c3RlbSBjb250cm9sbGVyIGJpdHMgYXJl IGluIHZpYQptaXhlbF9kcGh5X2RldmRhdGEuCgpDby1hdXRob3JlZC1ieTogUm9iZXJ0IENoaXJh cyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBHdWlkbyBHw7xudGhlciA8 YWd4QHNpZ3hjcHUub3JnPgotLS0KIGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnICAgICAg ICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFrZWZpbGUgICAgICAg ICAgICAgICAgfCAgIDEgKwogLi4uL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4LW1pcGktZHBo eS5jICAgIHwgNDk5ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MTAgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHkt ZnNsLWlteDgtbWlwaS1kcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUv S2NvbmZpZyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnCmluZGV4IDgzMjY3MGI0OTUy Yi4uNzNhMDY0ZDE1ZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZp ZworKysgYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZwpAQCAtMywzICszLDEzIEBAIGNv bmZpZyBQSFlfRlNMX0lNWDhNUV9VU0IKIAlkZXBlbmRzIG9uIE9GICYmIEhBU19JT01FTQogCXNl bGVjdCBHRU5FUklDX1BIWQogCWRlZmF1bHQgQVJDSF9NWEMgJiYgQVJNNjQKKworY29uZmlnIFBI WV9NSVhFTF9NSVBJX0RQSFkKKwl0cmlzdGF0ZSAiTWl4ZWwgTUlQSSBEU0kgUEhZIHN1cHBvcnQi CisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBHRU5FUklDX1BIWQorCXNlbGVjdCBHRU5FUklDX1BI WV9NSVBJX0RQSFkKKwlzZWxlY3QgUkVHTUFQX01NSU8KKwloZWxwCisJICBFbmFibGUgdGhpcyB0 byBhZGQgc3VwcG9ydCBmb3IgdGhlIE1peGVsIERTSSBQSFkgYXMgZm91bmQKKwkgIG9uIE5YUCdz IGkuTVg4IGZhbWlseSBvZiBTT0NzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvZnJlZXNjYWxl L01ha2VmaWxlIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL01ha2VmaWxlCmluZGV4IGRjMmIzZjFm MmY4MC4uMDc0OTFjOTI2YTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL01ha2VmaWxlCkBAIC0xICsxLDIgQEAK IG9iai0kKENPTkZJR19QSFlfRlNMX0lNWDhNUV9VU0IpCSs9IHBoeS1mc2wtaW14OG1xLXVzYi5v CitvYmotJChDT05GSUdfUEhZX01JWEVMX01JUElfRFBIWSkJKz0gcGh5LWZzbC1pbXg4LW1pcGkt ZHBoeS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4LW1p cGktZHBoeS5jIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OC1taXBpLWRwaHku YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5MDM4OTU4NWU3NQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHktZnNsLWlteDgtbWlw aS1kcGh5LmMKQEAgLTAsMCArMSw0OTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wKworLyoKKyAqIENvcHlyaWdodCAyMDE3LDIwMTggTlhQCisgKiBDb3B5cmlnaHQgMjAx OSBQdXJpc20gU1BDCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8 bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRm b3JtLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3Bo eS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiBEUEhZIHJlZ2lz dGVycyAqLworI2RlZmluZSBEUEhZX1BEX0RQSFkJCQkweDAwCisjZGVmaW5lIERQSFlfTV9QUkdf SFNfUFJFUEFSRQkJMHgwNAorI2RlZmluZSBEUEhZX01DX1BSR19IU19QUkVQQVJFCQkweDA4Cisj ZGVmaW5lIERQSFlfTV9QUkdfSFNfWkVSTwkJMHgwYworI2RlZmluZSBEUEhZX01DX1BSR19IU19a RVJPCQkweDEwCisjZGVmaW5lIERQSFlfTV9QUkdfSFNfVFJBSUwJCTB4MTQKKyNkZWZpbmUgRFBI WV9NQ19QUkdfSFNfVFJBSUwJCTB4MTgKKyNkZWZpbmUgRFBIWV9QRF9QTEwJCQkweDFjCisjZGVm aW5lIERQSFlfVFNUCQkJMHgyMAorI2RlZmluZSBEUEhZX0NOCQkJCTB4MjQKKyNkZWZpbmUgRFBI WV9DTQkJCQkweDI4CisjZGVmaW5lIERQSFlfQ08JCQkJMHgyYworI2RlZmluZSBEUEhZX0xPQ0sJ CQkweDMwCisjZGVmaW5lIERQSFlfTE9DS19CWVAJCQkweDM0CisjZGVmaW5lIERQSFlfUkVHX0JZ UEFTU19QTEwJCTB4NEMKKworI2RlZmluZSBNQlBTKHgpICgoeCkgKiAxMDAwMDAwKQorCisjZGVm aW5lIERBVEFfUkFURV9NQVhfU1BFRUQgTUJQUygxNTAwKQorI2RlZmluZSBEQVRBX1JBVEVfTUlO X1NQRUVEIE1CUFMoODApCisKKyNkZWZpbmUgUExMX0xPQ0tfU0xFRVAgMTAKKyNkZWZpbmUgUExM X0xPQ0tfVElNRU9VVCAxMDAwCisKKyNkZWZpbmUgQ05fQlVGCTB4Y2I3YTg5YzAKKyNkZWZpbmUg Q09fQlVGCTB4NjMKKyNkZWZpbmUgQ00oeCkJKAkJCQlcCisJCSgoeCkgPAkzMik/MHhlMHwoKHgp LTE2KSA6CVwKKwkJKCh4KSA8CTY0KT8weGMwfCgoeCktMzIpIDoJXAorCQkoKHgpIDwgMTI4KT8w eDgwfCgoeCktNjQpIDoJXAorCQkoKHgpIC0gMTI4KSkKKyNkZWZpbmUgQ04oeCkJKCgoeCkgPT0g MSk/MHgxZiA6ICgoKENOX0JVRik+PigoeCktMSkpJjB4MWYpKQorI2RlZmluZSBDTyh4KQkoKENP X0JVRik+Pig4LSh4KSkmMHgzKQorCisvKiBQSFkgcG93ZXIgb24gaXMgYWN0aXZlIGxvdyAqLwor I2RlZmluZSBQV1JfT04JMAorI2RlZmluZSBQV1JfT0ZGCTEKKworZW51bSBtaXhlbF9kcGh5X2Rl dnR5cGUgeworCU1JWEVMX0lNWDhNUSwKK307CisKK3N0cnVjdCBtaXhlbF9kcGh5X2RldmRhdGEg eworCXU4IHJlZ190eF9yY2FsOworCXU4IHJlZ19hdXRvX3BkX2VuOworCXU4IHJlZ19yeGxwcnA7 CisJdTggcmVnX3J4Y2RycDsKKwl1OCByZWdfcnhoc19zZXR0bGU7Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG1peGVsX2RwaHlfZGV2ZGF0YSBtaXhlbF9kcGh5X2RldmRhdGFbXSA9IHsKKwlb TUlYRUxfSU1YOE1RXSA9IHsKKwkJLnJlZ190eF9yY2FsID0gMHgzOCwKKwkJLnJlZ19hdXRvX3Bk X2VuID0gMHgzYywKKwkJLnJlZ19yeGxwcnAgPSAweDQwLAorCQkucmVnX3J4Y2RycCA9IDB4NDQs CisJCS5yZWdfcnhoc19zZXR0bGUgPSAweDQ4LAorCX0sCit9OworCitzdHJ1Y3QgbWl4ZWxfZHBo eV9jZmcgeworCS8qIERQSFkgUExMIHBhcmFtZXRlcnMgKi8KKwl1MzIgY207CisJdTMyIGNuOwor CXUzMiBjbzsKKwkvKiBEUEhZIHJlZ2lzdGVyIHZhbHVlcyAqLworCXU4IG1jX3ByZ19oc19wcmVw YXJlOworCXU4IG1fcHJnX2hzX3ByZXBhcmU7CisJdTggbWNfcHJnX2hzX3plcm87CisJdTggbV9w cmdfaHNfemVybzsKKwl1OCBtY19wcmdfaHNfdHJhaWw7CisJdTggbV9wcmdfaHNfdHJhaWw7CisJ dTggcnhoc19zZXR0bGU7Cit9OworCitzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2IHsKKwlzdHJ1Y3Qg bWl4ZWxfZHBoeV9jZmcgY2ZnOworCXN0cnVjdCByZWdtYXAgKnJlZ3M7CisJc3RydWN0IGNsayAq cGh5X3JlZl9jbGs7CisJY29uc3Qgc3RydWN0IG1peGVsX2RwaHlfZGV2ZGF0YSAqZGV2ZGF0YTsK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtaXhlbF9kcGh5X3JlZ21h cF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0 cmlkZSA9IDQsCisJLm1heF9yZWdpc3RlciA9IERQSFlfUkVHX0JZUEFTU19QTEwsCisJLm5hbWUg PSAibWlwaS1kcGh5IiwKK307CisKK3N0YXRpYyBpbnQgcGh5X3dyaXRlKHN0cnVjdCBwaHkgKnBo eSwgdTMyIHZhbHVlLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBtaXhlbF9kcGh5X3By aXYgKnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVn bWFwX3dyaXRlKHByaXYtPnJlZ3MsIHJlZywgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlkZXZf ZXJyKCZwaHktPmRldiwgIkZhaWxlZCB0byB3cml0ZSBEUEhZIHJlZyAlZDogJWQiLCByZWcsIHJl dCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZpbmQgYSByYXRpbyBjbG9zZSB0byB0aGUg ZGVzaXJlZCBvbmUgdXNpbmcgY29udGludWVkIGZyYWN0aW9uCisgKiBhcHByb3hpbWF0aW9uIGVu ZGluZyBlaXRoZXIgYXQgZXhhY3QgbWF0Y2ggb3IgbWF4aW11bSBhbGxvd2VkCisgKiBub21pbmF0 b3IsIGRlbm9taW5hdG9yLgorICovCitzdGF0aWMgdm9pZCBnZXRfYmVzdF9yYXRpbyh1bnNpZ25l ZCBsb25nICpwbnVtLCB1bnNpZ25lZCBsb25nICpwZGVub20sCisJCQkgICB1bnNpZ25lZCBpbnQg bWF4X24sIHVuc2lnbmVkIGludCBtYXhfZCkKK3sKKwl1bnNpZ25lZCBsb25nIGEgPSAqcG51bTsK Kwl1bnNpZ25lZCBsb25nIGIgPSAqcGRlbm9tOworCXVuc2lnbmVkIGxvbmcgYzsKKwl1bnNpZ25l ZCBpbnQgbltdID0gezAsIDF9OworCXVuc2lnbmVkIGludCBkW10gPSB7MSwgMH07CisJdW5zaWdu ZWQgaW50IHdob2xlOworCXVuc2lnbmVkIGludCBpID0gMTsKKworCXdoaWxlIChiKSB7CisJCWkg Xj0gMTsKKwkJd2hvbGUgPSBhIC8gYjsKKwkJbltpXSArPSAobltpIF4gMV0gKiB3aG9sZSk7CisJ CWRbaV0gKz0gKGRbaSBeIDFdICogd2hvbGUpOworCQlpZiAoKG5baV0gPiBtYXhfbikgfHwgKGRb aV0gPiBtYXhfZCkpIHsKKwkJCWkgXj0gMTsKKwkJCWJyZWFrOworCQl9CisJCWMgPSBhIC0gKGIg KiB3aG9sZSk7CisJCWEgPSBiOworCQliID0gYzsKKwl9CisJKnBudW0gPSBuW2ldOworCSpwZGVu b20gPSBkW2ldOworfQorCitzdGF0aWMgaW50IG1peGVsX2RwaHlfY29uZmlnX2Zyb21fb3B0cyhz dHJ1Y3QgcGh5ICpwaHksCisJICAgICAgIHN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9k cGh5ICpkcGh5X29wdHMsCisJICAgICAgIHN0cnVjdCBtaXhlbF9kcGh5X2NmZyAqY2ZnKQorewor CXN0cnVjdCBtaXhlbF9kcGh5X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEocGh5LT5kZXYu cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIHJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUocHJpdi0+cGh5 X3JlZl9jbGspOworCXVuc2lnbmVkIGxvbmcgbHBfdCwgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwg ZnJlcXVlbmN5OworCXUzMiBuOworCWludCBpOworCisJaWYgKGRwaHlfb3B0cy0+aHNfY2xrX3Jh dGUgPiBEQVRBX1JBVEVfTUFYX1NQRUVEIHx8CisJICAgIGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUg PCBEQVRBX1JBVEVfTUlOX1NQRUVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW51bWVyYXRvciA9 IGRwaHlfb3B0cy0+aHNfY2xrX3JhdGU7CisJZGVub21pbmF0b3IgPSByZWZfY2xrOworCWdldF9i ZXN0X3JhdGlvKCZudW1lcmF0b3IsICZkZW5vbWluYXRvciwgMjU1LCAyNTYpOworCWlmICghbnVt ZXJhdG9yIHx8ICFkZW5vbWluYXRvcikgeworCQlkZXZfZXJyKCZwaHktPmRldiwgIkludmFsaWQg JWxkLyVsZCBmb3IgJWxkLyVsZFxuIiwKKwkJCW51bWVyYXRvciwgZGVub21pbmF0b3IsCisJCQlk cGh5X29wdHMtPmhzX2Nsa19yYXRlLCByZWZfY2xrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJd2hpbGUgKChudW1lcmF0b3IgPCAxNikgJiYgKGRlbm9taW5hdG9yIDw9IDEyOCkpIHsKKwkJ bnVtZXJhdG9yIDw8PSAxOworCQlkZW5vbWluYXRvciA8PD0gMTsKKwl9CisJLyoKKwkgKiBDTSBy YW5nZXMgYmV0d2VlbiAxNiBhbmQgMjU1CisJICogQ04gcmFuZ2VzIGJldHdlZW4gMSBhbmQgMzIK KwkgKiBDTyBpcyBwb3dlciBvZiAyOiAxLCAyLCA0LCA4CisJICovCisJaSA9IF9fZmZzKGRlbm9t aW5hdG9yKTsKKwlpZiAoaSA+IDMpCisJCWkgPSAzOworCWNmZy0+Y24gPSBkZW5vbWluYXRvciA+ PiBpOworCWNmZy0+Y28gPSAxIDw8IGk7CisJY2ZnLT5jbSA9IG51bWVyYXRvcjsKKworCWlmIChj ZmctPmNtIDwgMTYgfHwgY2ZnLT5jbSA+IDI1NSB8fAorCSAgICBjZmctPmNuIDwgMSB8fCBjZmct PmNuID4gMzIgfHwKKwkgICAgY2ZnLT5jbyA8IDEgfHwgY2ZnLT5jbyA+IDgpIHsKKwkJZGV2X2Vy cigmcGh5LT5kZXYsICJJbnZhbGlkIENNL0NOL0NPIHZhbHVlczogJXUvJXUvJXVcbiIsCisJCQlj ZmctPmNtLCBjZmctPmNuLCBjZmctPmNvKTsKKwkJZGV2X2VycigmcGh5LT5kZXYsICJmb3IgaHNf Y2xrL3JlZl9jbGs9JWxkLyVsZCDiqbAgJWxkLyVsZFxuIiwKKwkJCWRwaHlfb3B0cy0+aHNfY2xr X3JhdGUsIHJlZl9jbGssCisJCQludW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJZnJlcXVlbmN5ID0gcmVmX2NsayAqIG51bWVyYXRvciAvICgyICogZGVu b21pbmF0b3IpOworCWRldl9kYmcoJnBoeS0+ZGV2LCAiZnJlcT0lbGQsIGhzX2Nsay9yZWZfY2xr PSVsZC8lbGQg4qmwICVsZC8lbGRcbiIsCisJCWZyZXF1ZW5jeSwgZHBoeV9vcHRzLT5oc19jbGtf cmF0ZSwgcmVmX2NsaywKKwkJbnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CisKKwkvKiBMUCBjbG9j ayBwZXJpb2QgKi8KKwlscF90ID0gMTAwMDAwMDAwMDAwMEwgLyBkcGh5X29wdHMtPmxwX2Nsa19y YXRlOyAvKiBwcyAqLworCWRldl9kYmcoJnBoeS0+ZGV2LCAiTFAgY2xvY2sgJWx1LCBwZXJpb2Q6 ICVsdSBwc1xuIiwKKwkJZHBoeV9vcHRzLT5scF9jbGtfcmF0ZSwgbHBfdCk7CisKKwkvKiBoc19w cmVwYXJlOiBpbiBscCBjbG9jayBwZXJpb2RzICovCisJaWYgKDIgKiBkcGh5X29wdHMtPmhzX3By ZXBhcmUgPiA1ICogbHBfdCkgeworCQlkZXZfZXJyKCZwaHktPmRldiwKKwkJCSJoc19wcmVwYXJl ICgldSkgPiAyLjUgKiBscCBjbG9jayBwZXJpb2QgKCVsdSkiLAorCQkJZHBoeV9vcHRzLT5oc19w cmVwYXJlLCBscF90KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIDAwOiBscF90LCAwMTog MS41ICogbHBfdCwgMTA6IDIgKiBscF90LCAxMTogMi41ICogbHBfdCAqLworCWlmIChkcGh5X29w dHMtPmhzX3ByZXBhcmUgPCBscF90KQorCQluID0gMDsKKwllbHNlCisJCW4gPSAyICogKGRwaHlf b3B0cy0+aHNfcHJlcGFyZSAtIGxwX3QpIC8gbHBfdDsKKwljZmctPm1fcHJnX2hzX3ByZXBhcmUg PSBuOworCisJLyogY2xrX3ByZXBhcmU6IGluIGxwIGNsb2NrIHBlcmlvZHMgKi8KKwlpZiAoMiAq IGRwaHlfb3B0cy0+Y2xrX3ByZXBhcmUgPiAzICogbHBfdCkgeworCQlkZXZfZXJyKCZwaHktPmRl diwKKwkJCSJjbGtfcHJlcGFyZSAoJXUpID4gMS41ICogbHAgY2xvY2sgcGVyaW9kICglbHUpIiwK KwkJCWRwaHlfb3B0cy0+Y2xrX3ByZXBhcmUsIGxwX3QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisJLyogMDA6IGxwX3QsIDAxOiAxLjUgKiBscF90ICovCisJY2ZnLT5tY19wcmdfaHNfcHJlcGFy ZSA9IGRwaHlfb3B0cy0+Y2xrX3ByZXBhcmUgPiBscF90ID8gMSA6IDA7CisKKwkvKiBoc196ZXJv OiBmb3JtdWxhIGZyb20gTlhQIEJTUCAqLworCW4gPSAoMTQ0ICogKGRwaHlfb3B0cy0+aHNfY2xr X3JhdGUgLyAxMDAwMDAwKSAtIDQ3NTAwKSAvIDEwMDAwOworCWNmZy0+bV9wcmdfaHNfemVybyA9 IG4gPCAxID8gMSA6IG47CisKKwkvKiBjbGtfemVybzogZm9ybXVsYSBmcm9tIE5YUCBCU1AgKi8K KwluID0gKDM0ICogKGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUgLyAxMDAwMDAwKSAtIDI1MDApIC8g MTAwMDsKKwljZmctPm1jX3ByZ19oc196ZXJvID0gbiA8IDEgPyAxIDogbjsKKworCS8qIGNsa190 cmFpbCwgaHNfdHJhaWw6IGZvcm11bGEgZnJvbSBOWFAgQlNQICovCisJbiA9ICgxMDMgKiAoZHBo eV9vcHRzLT5oc19jbGtfcmF0ZSAvIDEwMDAwMDApICsgMTAwMDApIC8gMTAwMDA7CisJaWYgKG4g PiAxNSkKKwkJbiA9IDE1OworCWlmIChuIDwgMSkKKwkJbiA9IDE7CisJY2ZnLT5tX3ByZ19oc190 cmFpbCA9IG47CisJY2ZnLT5tY19wcmdfaHNfdHJhaWwgPSBuOworCisJLyogcnhoc19zZXR0bGU6 IGZvcm11bGEgZnJvbSBOWFAgQlNQICovCisJaWYgKGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUgPCBN QlBTKDgwKSkKKwkJY2ZnLT5yeGhzX3NldHRsZSA9IDB4MGQ7CisJZWxzZSBpZiAoZHBoeV9vcHRz LT5oc19jbGtfcmF0ZSA8IE1CUFMoOTApKQorCQljZmctPnJ4aHNfc2V0dGxlID0gMHgwYzsKKwll bHNlIGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRlIDwgTUJQUygxMjUpKQorCQljZmctPnJ4aHNf c2V0dGxlID0gMHgwYjsKKwllbHNlIGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRlIDwgTUJQUygx NTApKQorCQljZmctPnJ4aHNfc2V0dGxlID0gMHgwYTsKKwllbHNlIGlmIChkcGh5X29wdHMtPmhz X2Nsa19yYXRlIDwgTUJQUygyMjUpKQorCQljZmctPnJ4aHNfc2V0dGxlID0gMHgwOTsKKwllbHNl IGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRlIDwgTUJQUyg1MDApKQorCQljZmctPnJ4aHNfc2V0 dGxlID0gMHgwODsKKwllbHNlCisJCWNmZy0+cnhoc19zZXR0bGUgPSAweDA3OworCisJZGV2X2Ri ZygmcGh5LT5kZXYsICJoc19wcmVwYXJlOiAldSwgY2xrX3ByZXBhcmU6ICV1LCAiCisJCSJoc19w cmVwYXJlOiAldSwgY2xrX3ByZXBhcmU6ICV1LCAiCisJCSJoc190cmFpbDogJXUsIGNsa190cmFp bDogJXUsICIKKwkJInJ4aHNfc2V0dGxlOiAldVxuIiwKKwkJY2ZnLT5tX3ByZ19oc19wcmVwYXJl LCBjZmctPm1jX3ByZ19oc19wcmVwYXJlLAorCQljZmctPm1fcHJnX2hzX3plcm8sIGNmZy0+bWNf cHJnX2hzX3plcm8sCisJCWNmZy0+bV9wcmdfaHNfdHJhaWwsIGNmZy0+bWNfcHJnX2hzX3RyYWls LAorCQljZmctPnJ4aHNfc2V0dGxlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBt aXhlbF9waHlfc2V0X2hzX3RpbWluZ3Moc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtaXhl bF9kcGh5X3ByaXYgKnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCXBoeV93cml0ZShw aHksIHByaXYtPmNmZy5tX3ByZ19oc19wcmVwYXJlLCBEUEhZX01fUFJHX0hTX1BSRVBBUkUpOwor CXBoeV93cml0ZShwaHksIHByaXYtPmNmZy5tY19wcmdfaHNfcHJlcGFyZSwgRFBIWV9NQ19QUkdf SFNfUFJFUEFSRSk7CisJcGh5X3dyaXRlKHBoeSwgcHJpdi0+Y2ZnLm1fcHJnX2hzX3plcm8sIERQ SFlfTV9QUkdfSFNfWkVSTyk7CisJcGh5X3dyaXRlKHBoeSwgcHJpdi0+Y2ZnLm1jX3ByZ19oc196 ZXJvLCBEUEhZX01DX1BSR19IU19aRVJPKTsKKwlwaHlfd3JpdGUocGh5LCBwcml2LT5jZmcubV9w cmdfaHNfdHJhaWwsIERQSFlfTV9QUkdfSFNfVFJBSUwpOworCXBoeV93cml0ZShwaHksIHByaXYt PmNmZy5tY19wcmdfaHNfdHJhaWwsIERQSFlfTUNfUFJHX0hTX1RSQUlMKTsKKwlwaHlfd3JpdGUo cGh5LCBwcml2LT5jZmcucnhoc19zZXR0bGUsIHByaXYtPmRldmRhdGEtPnJlZ19yeGhzX3NldHRs ZSk7Cit9CisKK3N0YXRpYyBpbnQgbWl4ZWxfZHBoeV9zZXRfcGxsX3BhcmFtcyhzdHJ1Y3QgcGh5 ICpwaHkpCit7CisJc3RydWN0IG1peGVsX2RwaHlfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0 YShwaHktPmRldi5wYXJlbnQpOworCisJaWYgKHByaXYtPmNmZy5jbSA8IDE2IHx8IHByaXYtPmNm Zy5jbSA+IDI1NSB8fAorCSAgICBwcml2LT5jZmcuY24gPCAxIHx8IHByaXYtPmNmZy5jbiA+IDMy IHx8CisJICAgIHByaXYtPmNmZy5jbyA8IDEgfHwgcHJpdi0+Y2ZnLmNvID4gOCkgeworCQlkZXZf ZXJyKCZwaHktPmRldiwgIkludmFsaWQgQ00vQ04vQ08gdmFsdWVzISAoJXUvJXUvJXUpXG4iLAor CQkJcHJpdi0+Y2ZnLmNtLCBwcml2LT5jZmcuY24sIHByaXYtPmNmZy5jbyk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKwlkZXZfZGJnKCZwaHktPmRldiwgIlVzaW5nIENNOiV1IENOOiV1IENPOiV1 XG4iLAorCQlwcml2LT5jZmcuY20sIHByaXYtPmNmZy5jbiwgcHJpdi0+Y2ZnLmNvKTsKKwlwaHlf d3JpdGUocGh5LCBDTShwcml2LT5jZmcuY20pLCBEUEhZX0NNKTsKKwlwaHlfd3JpdGUocGh5LCBD Tihwcml2LT5jZmcuY24pLCBEUEhZX0NOKTsKKwlwaHlfd3JpdGUocGh5LCBDTyhwcml2LT5jZmcu Y28pLCBEUEhZX0NPKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaXhlbF9kcGh5X2Nv bmZpZ3VyZShzdHJ1Y3QgcGh5ICpwaHksIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqb3B0cykK K3sKKwlzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7 CisJc3RydWN0IG1peGVsX2RwaHlfY2ZnIGNmZyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQg PSBtaXhlbF9kcGh5X2NvbmZpZ19mcm9tX29wdHMocGh5LCAmb3B0cy0+bWlwaV9kcGh5LCAmY2Zn KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXBkYXRlIHRoZSBjb25maWd1cmF0 aW9uICovCisJbWVtY3B5KCZwcml2LT5jZmcsICZjZmcsIHNpemVvZihzdHJ1Y3QgbWl4ZWxfZHBo eV9jZmcpKTsKKworCXBoeV93cml0ZShwaHksIDB4MDAsIERQSFlfTE9DS19CWVApOworCXBoeV93 cml0ZShwaHksIDB4MDEsIHByaXYtPmRldmRhdGEtPnJlZ190eF9yY2FsKTsKKwlwaHlfd3JpdGUo cGh5LCAweDAwLCBwcml2LT5kZXZkYXRhLT5yZWdfYXV0b19wZF9lbik7CisJcGh5X3dyaXRlKHBo eSwgMHgwMiwgcHJpdi0+ZGV2ZGF0YS0+cmVnX3J4bHBycCk7CisJcGh5X3dyaXRlKHBoeSwgMHgw MiwgcHJpdi0+ZGV2ZGF0YS0+cmVnX3J4Y2RycCk7CisJcGh5X3dyaXRlKHBoeSwgMHgyNSwgRFBI WV9UU1QpOworCisJbWl4ZWxfcGh5X3NldF9oc190aW1pbmdzKHBoeSk7CisJcmV0ID0gbWl4ZWxf ZHBoeV9zZXRfcGxsX3BhcmFtcyhwaHkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWl4ZWxfZHBoeV92YWxpZGF0ZShzdHJ1Y3Qg cGh5ICpwaHksIGVudW0gcGh5X21vZGUgbW9kZSwgaW50IHN1Ym1vZGUsCisJCQkgICAgICAgdW5p b24gcGh5X2NvbmZpZ3VyZV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBtaXhlbF9kcGh5X2NmZyBj ZmcgPSB7IDAgfTsKKworCWlmIChtb2RlICE9IFBIWV9NT0RFX01JUElfRFBIWSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlyZXR1cm4gbWl4ZWxfZHBoeV9jb25maWdfZnJvbV9vcHRzKHBoeSwgJm9w dHMtPm1pcGlfZHBoeSwgJmNmZyk7Cit9CisKKworc3RhdGljIGludCBtaXhlbF9kcGh5X2luaXQo c3RydWN0IHBoeSAqcGh5KQoreworCXBoeV93cml0ZShwaHksIFBXUl9PRkYsIERQSFlfUERfUExM KTsKKwlwaHlfd3JpdGUocGh5LCBQV1JfT0ZGLCBEUEhZX1BEX0RQSFkpOworCisJcmV0dXJuIDA7 Cit9CisKKworc3RhdGljIGludCBtaXhlbF9kcGh5X2V4aXQoc3RydWN0IHBoeSAqcGh5KQorewor CXBoeV93cml0ZShwaHksIDAsIERQSFlfQ00pOworCXBoeV93cml0ZShwaHksIDAsIERQSFlfQ04p OworCXBoeV93cml0ZShwaHksIDAsIERQSFlfQ08pOworCisJcmV0dXJuIDA7Cit9CisKKworc3Rh dGljIGludCBtaXhlbF9kcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3Qg bWl4ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJdTMyIGxvY2tl ZDsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPnBoeV9yZWZf Y2xrKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXBoeV93cml0ZShwaHksIFBX Ul9PTiwgRFBIWV9QRF9QTEwpOworCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2 LT5yZWdzLCBEUEhZX0xPQ0ssIGxvY2tlZCwKKwkJCQkgICAgICAgbG9ja2VkLCBQTExfTE9DS19T TEVFUCwKKwkJCQkgICAgICAgUExMX0xPQ0tfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycigmcGh5LT5kZXYsICJDb3VsZCBub3QgZ2V0IERQSFkgbG9jayAoJWQpIVxuIiwgcmV0 KTsKKwkJZ290byBjbG9ja19kaXNhYmxlOworCX0KKwlwaHlfd3JpdGUocGh5LCBQV1JfT04sIERQ SFlfUERfRFBIWSk7CisKKwlyZXR1cm4gMDsKK2Nsb2NrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHByaXYtPnBoeV9yZWZfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IG1peGVsX2RwaHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbWl4 ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwlwaHlfd3JpdGUo cGh5LCBQV1JfT0ZGLCBEUEhZX1BEX1BMTCk7CisJcGh5X3dyaXRlKHBoeSwgUFdSX09GRiwgRFBI WV9QRF9EUEhZKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5waHlfcmVmX2Nsayk7 CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9vcHMgbWl4ZWxf ZHBoeV9waHlfb3BzID0geworCS5pbml0ID0gbWl4ZWxfZHBoeV9pbml0LAorCS5leGl0ID0gbWl4 ZWxfZHBoeV9leGl0LAorCS5wb3dlcl9vbiA9IG1peGVsX2RwaHlfcG93ZXJfb24sCisJLnBvd2Vy X29mZiA9IG1peGVsX2RwaHlfcG93ZXJfb2ZmLAorCS5jb25maWd1cmUgPSBtaXhlbF9kcGh5X2Nv bmZpZ3VyZSwKKwkudmFsaWRhdGUgPSBtaXhlbF9kcGh5X3ZhbGlkYXRlLAorCS5vd25lciA9IFRI SVNfTU9EVUxFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWl4ZWxf ZHBoeV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWl4ZWwsaW14OG1xLW1pcGkt ZHBoeSIsCisJICAuZGF0YSA9ICZtaXhlbF9kcGh5X2RldmRhdGFbTUlYRUxfSU1YOE1RXSB9LAor CXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtaXhlbF9k cGh5X29mX21hdGNoKTsKKworc3RhdGljIGludCBtaXhlbF9kcGh5X3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBwaHlfcHJv dmlkZXIgKnBoeV9wcm92aWRlcjsKKwlzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2ICpwcml2OworCXN0 cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwaHkgKnBoeTsKKwl2b2lkIF9faW9tZW0gKnJl Z3M7CisKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaXYgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVy biAtRU5PTUVNOworCisJcHJpdi0+ZGV2ZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgm cGRldi0+ZGV2KTsKKwlpZiAoIXByaXYtPmRldmRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwly ZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJlZ3Mp KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgbWFwIHRoZSBEUEhZIHJlZ2lzdGVyc1xuIik7 CisJCXJldHVybiBQVFJfRVJSKHJlZ3MpOworCX0KKworCXByaXYtPnJlZ3MgPSBkZXZtX3JlZ21h cF9pbml0X21taW8oJnBkZXYtPmRldiwgcmVncywKKwkJCQkJICAgJm1peGVsX2RwaHlfcmVnbWFw X2NvbmZpZyk7CisJaWYgKElTX0VSUihwcml2LT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkNv dWxkbid0IGNyZWF0ZSB0aGUgRFBIWSByZWdtYXBcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwcml2 LT5yZWdzKTsKKwl9CisKKwlwcml2LT5waHlfcmVmX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ ZGV2LCAicGh5X3JlZiIpOworCWlmIChJU19FUlIocHJpdi0+cGh5X3JlZl9jbGspKSB7CisJCWRl dl9lcnIoZGV2LCAiTm8gcGh5X3JlZiBjbG9jayBmb3VuZFxuIik7CisJCXJldHVybiBQVFJfRVJS KHByaXYtPnBoeV9yZWZfY2xrKTsKKwl9CisJZGV2X2RiZyhkZXYsICJwaHlfcmVmIGNsb2NrIHJh dGU6ICVsdVxuIiwKKwkJY2xrX2dldF9yYXRlKHByaXYtPnBoeV9yZWZfY2xrKSk7CisKKwlkZXZf c2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKworCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIG5w LCAmbWl4ZWxfZHBoeV9waHlfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gY3JlYXRlIHBoeSAlbGRcbiIsIFBUUl9FUlIocGh5KSk7CisJCXJldHVy biBQVFJfRVJSKHBoeSk7CisJfQorCXBoeV9zZXRfZHJ2ZGF0YShwaHksIHByaXYpOworCisJcGh5 X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2lt cGxlX3hsYXRlKTsKKworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGh5X3Byb3ZpZGVyKTsKK30K Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWl4ZWxfZHBoeV9kcml2ZXIgPSB7CisJ LnByb2JlCT0gbWl4ZWxfZHBoeV9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtaXhl bC1taXBpLWRwaHkiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBtaXhlbF9kcGh5X29mX21hdGNoLAor CX0KK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1peGVsX2RwaHlfZHJpdmVyKTsKKworTU9E VUxFX0FVVEhPUigiTlhQIFNlbWljb25kdWN0b3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWl4 ZWwgTUlQSS1EU0kgUEhZIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAK Mi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Subject: [PATCH v4 3/3] phy: Add driver for mixel dphy found on imx8 Date: Thu, 7 Mar 2019 11:05:32 +0100 Message-ID: <309d85012f4de5c4da3ef9d4afc80fc1cb85a079.1551952749.git.agx@sigxcpu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from honk.sigxcpu.org (honk.sigxcpu.org [24.134.29.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id DB92F6E27B for ; Thu, 7 Mar 2019 10:05:42 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Robert Chiras , Sam Ravnborg , Fabio Estevam List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaXhlbCBEUEhZIGFzIGZvdW5kIG9uIGkuTVg4IENQ VXMgYnV0IHNpbmNlCnRoaXMgaXMgYW4gSVAgY29yZSBpdCB3aWxsIGxpa2VseSBiZSBmb3VuZCBv biBvdGhlcnMgaW4gdGhlIGZ1dHVyZS4gU28KaW5zdGVhZCBvZiBhZGRpbmcgdGhpcyB0byB0aGUg bndsIGhvc3QgZHJpdmVyIG1ha2UgaXQgYSBnZW5lcmljIFBIWQpkcml2ZXIuCgpUaGUgZHJpdmVy IHN1cHBvcnRzIHRoZSBpLk1YOE1RLiBTdXBwb3J0IGZvciBpLk1YOFFNIGFuZCBpLk1YOFFYUCBj YW4gYmUKYWRkZWQgb25jZSB0aGUgbmVjZXNzYXJ5IHN5c3RlbSBjb250cm9sbGVyIGJpdHMgYXJl IGluIHZpYQptaXhlbF9kcGh5X2RldmRhdGEuCgpDby1hdXRob3JlZC1ieTogUm9iZXJ0IENoaXJh cyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBHdWlkbyBHw7xudGhlciA8 YWd4QHNpZ3hjcHUub3JnPgotLS0KIGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnICAgICAg ICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFrZWZpbGUgICAgICAg ICAgICAgICAgfCAgIDEgKwogLi4uL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4LW1pcGktZHBo eS5jICAgIHwgNDk5ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MTAgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHkt ZnNsLWlteDgtbWlwaS1kcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUv S2NvbmZpZyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnCmluZGV4IDgzMjY3MGI0OTUy Yi4uNzNhMDY0ZDE1ZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZp ZworKysgYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZwpAQCAtMywzICszLDEzIEBAIGNv bmZpZyBQSFlfRlNMX0lNWDhNUV9VU0IKIAlkZXBlbmRzIG9uIE9GICYmIEhBU19JT01FTQogCXNl bGVjdCBHRU5FUklDX1BIWQogCWRlZmF1bHQgQVJDSF9NWEMgJiYgQVJNNjQKKworY29uZmlnIFBI WV9NSVhFTF9NSVBJX0RQSFkKKwl0cmlzdGF0ZSAiTWl4ZWwgTUlQSSBEU0kgUEhZIHN1cHBvcnQi CisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBHRU5FUklDX1BIWQorCXNlbGVjdCBHRU5FUklDX1BI WV9NSVBJX0RQSFkKKwlzZWxlY3QgUkVHTUFQX01NSU8KKwloZWxwCisJICBFbmFibGUgdGhpcyB0 byBhZGQgc3VwcG9ydCBmb3IgdGhlIE1peGVsIERTSSBQSFkgYXMgZm91bmQKKwkgIG9uIE5YUCdz IGkuTVg4IGZhbWlseSBvZiBTT0NzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvZnJlZXNjYWxl L01ha2VmaWxlIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL01ha2VmaWxlCmluZGV4IGRjMmIzZjFm MmY4MC4uMDc0OTFjOTI2YTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL01ha2VmaWxlCkBAIC0xICsxLDIgQEAK IG9iai0kKENPTkZJR19QSFlfRlNMX0lNWDhNUV9VU0IpCSs9IHBoeS1mc2wtaW14OG1xLXVzYi5v CitvYmotJChDT05GSUdfUEhZX01JWEVMX01JUElfRFBIWSkJKz0gcGh5LWZzbC1pbXg4LW1pcGkt ZHBoeS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4LW1p cGktZHBoeS5jIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OC1taXBpLWRwaHku YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5MDM4OTU4NWU3NQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHktZnNsLWlteDgtbWlw aS1kcGh5LmMKQEAgLTAsMCArMSw0OTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wKworLyoKKyAqIENvcHlyaWdodCAyMDE3LDIwMTggTlhQCisgKiBDb3B5cmlnaHQgMjAx OSBQdXJpc20gU1BDCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8 bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRm b3JtLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3Bo eS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiBEUEhZIHJlZ2lz dGVycyAqLworI2RlZmluZSBEUEhZX1BEX0RQSFkJCQkweDAwCisjZGVmaW5lIERQSFlfTV9QUkdf SFNfUFJFUEFSRQkJMHgwNAorI2RlZmluZSBEUEhZX01DX1BSR19IU19QUkVQQVJFCQkweDA4Cisj ZGVmaW5lIERQSFlfTV9QUkdfSFNfWkVSTwkJMHgwYworI2RlZmluZSBEUEhZX01DX1BSR19IU19a RVJPCQkweDEwCisjZGVmaW5lIERQSFlfTV9QUkdfSFNfVFJBSUwJCTB4MTQKKyNkZWZpbmUgRFBI WV9NQ19QUkdfSFNfVFJBSUwJCTB4MTgKKyNkZWZpbmUgRFBIWV9QRF9QTEwJCQkweDFjCisjZGVm aW5lIERQSFlfVFNUCQkJMHgyMAorI2RlZmluZSBEUEhZX0NOCQkJCTB4MjQKKyNkZWZpbmUgRFBI WV9DTQkJCQkweDI4CisjZGVmaW5lIERQSFlfQ08JCQkJMHgyYworI2RlZmluZSBEUEhZX0xPQ0sJ CQkweDMwCisjZGVmaW5lIERQSFlfTE9DS19CWVAJCQkweDM0CisjZGVmaW5lIERQSFlfUkVHX0JZ UEFTU19QTEwJCTB4NEMKKworI2RlZmluZSBNQlBTKHgpICgoeCkgKiAxMDAwMDAwKQorCisjZGVm aW5lIERBVEFfUkFURV9NQVhfU1BFRUQgTUJQUygxNTAwKQorI2RlZmluZSBEQVRBX1JBVEVfTUlO X1NQRUVEIE1CUFMoODApCisKKyNkZWZpbmUgUExMX0xPQ0tfU0xFRVAgMTAKKyNkZWZpbmUgUExM X0xPQ0tfVElNRU9VVCAxMDAwCisKKyNkZWZpbmUgQ05fQlVGCTB4Y2I3YTg5YzAKKyNkZWZpbmUg Q09fQlVGCTB4NjMKKyNkZWZpbmUgQ00oeCkJKAkJCQlcCisJCSgoeCkgPAkzMik/MHhlMHwoKHgp LTE2KSA6CVwKKwkJKCh4KSA8CTY0KT8weGMwfCgoeCktMzIpIDoJXAorCQkoKHgpIDwgMTI4KT8w eDgwfCgoeCktNjQpIDoJXAorCQkoKHgpIC0gMTI4KSkKKyNkZWZpbmUgQ04oeCkJKCgoeCkgPT0g MSk/MHgxZiA6ICgoKENOX0JVRik+PigoeCktMSkpJjB4MWYpKQorI2RlZmluZSBDTyh4KQkoKENP X0JVRik+Pig4LSh4KSkmMHgzKQorCisvKiBQSFkgcG93ZXIgb24gaXMgYWN0aXZlIGxvdyAqLwor I2RlZmluZSBQV1JfT04JMAorI2RlZmluZSBQV1JfT0ZGCTEKKworZW51bSBtaXhlbF9kcGh5X2Rl dnR5cGUgeworCU1JWEVMX0lNWDhNUSwKK307CisKK3N0cnVjdCBtaXhlbF9kcGh5X2RldmRhdGEg eworCXU4IHJlZ190eF9yY2FsOworCXU4IHJlZ19hdXRvX3BkX2VuOworCXU4IHJlZ19yeGxwcnA7 CisJdTggcmVnX3J4Y2RycDsKKwl1OCByZWdfcnhoc19zZXR0bGU7Cit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IG1peGVsX2RwaHlfZGV2ZGF0YSBtaXhlbF9kcGh5X2RldmRhdGFbXSA9IHsKKwlb TUlYRUxfSU1YOE1RXSA9IHsKKwkJLnJlZ190eF9yY2FsID0gMHgzOCwKKwkJLnJlZ19hdXRvX3Bk X2VuID0gMHgzYywKKwkJLnJlZ19yeGxwcnAgPSAweDQwLAorCQkucmVnX3J4Y2RycCA9IDB4NDQs CisJCS5yZWdfcnhoc19zZXR0bGUgPSAweDQ4LAorCX0sCit9OworCitzdHJ1Y3QgbWl4ZWxfZHBo eV9jZmcgeworCS8qIERQSFkgUExMIHBhcmFtZXRlcnMgKi8KKwl1MzIgY207CisJdTMyIGNuOwor CXUzMiBjbzsKKwkvKiBEUEhZIHJlZ2lzdGVyIHZhbHVlcyAqLworCXU4IG1jX3ByZ19oc19wcmVw YXJlOworCXU4IG1fcHJnX2hzX3ByZXBhcmU7CisJdTggbWNfcHJnX2hzX3plcm87CisJdTggbV9w cmdfaHNfemVybzsKKwl1OCBtY19wcmdfaHNfdHJhaWw7CisJdTggbV9wcmdfaHNfdHJhaWw7CisJ dTggcnhoc19zZXR0bGU7Cit9OworCitzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2IHsKKwlzdHJ1Y3Qg bWl4ZWxfZHBoeV9jZmcgY2ZnOworCXN0cnVjdCByZWdtYXAgKnJlZ3M7CisJc3RydWN0IGNsayAq cGh5X3JlZl9jbGs7CisJY29uc3Qgc3RydWN0IG1peGVsX2RwaHlfZGV2ZGF0YSAqZGV2ZGF0YTsK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtaXhlbF9kcGh5X3JlZ21h cF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSAzMiwKKwkucmVnX3N0 cmlkZSA9IDQsCisJLm1heF9yZWdpc3RlciA9IERQSFlfUkVHX0JZUEFTU19QTEwsCisJLm5hbWUg PSAibWlwaS1kcGh5IiwKK307CisKK3N0YXRpYyBpbnQgcGh5X3dyaXRlKHN0cnVjdCBwaHkgKnBo eSwgdTMyIHZhbHVlLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBtaXhlbF9kcGh5X3By aXYgKnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVn bWFwX3dyaXRlKHByaXYtPnJlZ3MsIHJlZywgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlkZXZf ZXJyKCZwaHktPmRldiwgIkZhaWxlZCB0byB3cml0ZSBEUEhZIHJlZyAlZDogJWQiLCByZWcsIHJl dCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZpbmQgYSByYXRpbyBjbG9zZSB0byB0aGUg ZGVzaXJlZCBvbmUgdXNpbmcgY29udGludWVkIGZyYWN0aW9uCisgKiBhcHByb3hpbWF0aW9uIGVu ZGluZyBlaXRoZXIgYXQgZXhhY3QgbWF0Y2ggb3IgbWF4aW11bSBhbGxvd2VkCisgKiBub21pbmF0 b3IsIGRlbm9taW5hdG9yLgorICovCitzdGF0aWMgdm9pZCBnZXRfYmVzdF9yYXRpbyh1bnNpZ25l ZCBsb25nICpwbnVtLCB1bnNpZ25lZCBsb25nICpwZGVub20sCisJCQkgICB1bnNpZ25lZCBpbnQg bWF4X24sIHVuc2lnbmVkIGludCBtYXhfZCkKK3sKKwl1bnNpZ25lZCBsb25nIGEgPSAqcG51bTsK Kwl1bnNpZ25lZCBsb25nIGIgPSAqcGRlbm9tOworCXVuc2lnbmVkIGxvbmcgYzsKKwl1bnNpZ25l ZCBpbnQgbltdID0gezAsIDF9OworCXVuc2lnbmVkIGludCBkW10gPSB7MSwgMH07CisJdW5zaWdu ZWQgaW50IHdob2xlOworCXVuc2lnbmVkIGludCBpID0gMTsKKworCXdoaWxlIChiKSB7CisJCWkg Xj0gMTsKKwkJd2hvbGUgPSBhIC8gYjsKKwkJbltpXSArPSAobltpIF4gMV0gKiB3aG9sZSk7CisJ CWRbaV0gKz0gKGRbaSBeIDFdICogd2hvbGUpOworCQlpZiAoKG5baV0gPiBtYXhfbikgfHwgKGRb aV0gPiBtYXhfZCkpIHsKKwkJCWkgXj0gMTsKKwkJCWJyZWFrOworCQl9CisJCWMgPSBhIC0gKGIg KiB3aG9sZSk7CisJCWEgPSBiOworCQliID0gYzsKKwl9CisJKnBudW0gPSBuW2ldOworCSpwZGVu b20gPSBkW2ldOworfQorCitzdGF0aWMgaW50IG1peGVsX2RwaHlfY29uZmlnX2Zyb21fb3B0cyhz dHJ1Y3QgcGh5ICpwaHksCisJICAgICAgIHN0cnVjdCBwaHlfY29uZmlndXJlX29wdHNfbWlwaV9k cGh5ICpkcGh5X29wdHMsCisJICAgICAgIHN0cnVjdCBtaXhlbF9kcGh5X2NmZyAqY2ZnKQorewor CXN0cnVjdCBtaXhlbF9kcGh5X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEocGh5LT5kZXYu cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIHJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUocHJpdi0+cGh5 X3JlZl9jbGspOworCXVuc2lnbmVkIGxvbmcgbHBfdCwgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwg ZnJlcXVlbmN5OworCXUzMiBuOworCWludCBpOworCisJaWYgKGRwaHlfb3B0cy0+aHNfY2xrX3Jh dGUgPiBEQVRBX1JBVEVfTUFYX1NQRUVEIHx8CisJICAgIGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUg PCBEQVRBX1JBVEVfTUlOX1NQRUVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW51bWVyYXRvciA9 IGRwaHlfb3B0cy0+aHNfY2xrX3JhdGU7CisJZGVub21pbmF0b3IgPSByZWZfY2xrOworCWdldF9i ZXN0X3JhdGlvKCZudW1lcmF0b3IsICZkZW5vbWluYXRvciwgMjU1LCAyNTYpOworCWlmICghbnVt ZXJhdG9yIHx8ICFkZW5vbWluYXRvcikgeworCQlkZXZfZXJyKCZwaHktPmRldiwgIkludmFsaWQg JWxkLyVsZCBmb3IgJWxkLyVsZFxuIiwKKwkJCW51bWVyYXRvciwgZGVub21pbmF0b3IsCisJCQlk cGh5X29wdHMtPmhzX2Nsa19yYXRlLCByZWZfY2xrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJd2hpbGUgKChudW1lcmF0b3IgPCAxNikgJiYgKGRlbm9taW5hdG9yIDw9IDEyOCkpIHsKKwkJ bnVtZXJhdG9yIDw8PSAxOworCQlkZW5vbWluYXRvciA8PD0gMTsKKwl9CisJLyoKKwkgKiBDTSBy YW5nZXMgYmV0d2VlbiAxNiBhbmQgMjU1CisJICogQ04gcmFuZ2VzIGJldHdlZW4gMSBhbmQgMzIK KwkgKiBDTyBpcyBwb3dlciBvZiAyOiAxLCAyLCA0LCA4CisJICovCisJaSA9IF9fZmZzKGRlbm9t aW5hdG9yKTsKKwlpZiAoaSA+IDMpCisJCWkgPSAzOworCWNmZy0+Y24gPSBkZW5vbWluYXRvciA+ PiBpOworCWNmZy0+Y28gPSAxIDw8IGk7CisJY2ZnLT5jbSA9IG51bWVyYXRvcjsKKworCWlmIChj ZmctPmNtIDwgMTYgfHwgY2ZnLT5jbSA+IDI1NSB8fAorCSAgICBjZmctPmNuIDwgMSB8fCBjZmct PmNuID4gMzIgfHwKKwkgICAgY2ZnLT5jbyA8IDEgfHwgY2ZnLT5jbyA+IDgpIHsKKwkJZGV2X2Vy cigmcGh5LT5kZXYsICJJbnZhbGlkIENNL0NOL0NPIHZhbHVlczogJXUvJXUvJXVcbiIsCisJCQlj ZmctPmNtLCBjZmctPmNuLCBjZmctPmNvKTsKKwkJZGV2X2VycigmcGh5LT5kZXYsICJmb3IgaHNf Y2xrL3JlZl9jbGs9JWxkLyVsZCDiqbAgJWxkLyVsZFxuIiwKKwkJCWRwaHlfb3B0cy0+aHNfY2xr X3JhdGUsIHJlZl9jbGssCisJCQludW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJZnJlcXVlbmN5ID0gcmVmX2NsayAqIG51bWVyYXRvciAvICgyICogZGVu b21pbmF0b3IpOworCWRldl9kYmcoJnBoeS0+ZGV2LCAiZnJlcT0lbGQsIGhzX2Nsay9yZWZfY2xr PSVsZC8lbGQg4qmwICVsZC8lbGRcbiIsCisJCWZyZXF1ZW5jeSwgZHBoeV9vcHRzLT5oc19jbGtf cmF0ZSwgcmVmX2NsaywKKwkJbnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CisKKwkvKiBMUCBjbG9j ayBwZXJpb2QgKi8KKwlscF90ID0gMTAwMDAwMDAwMDAwMEwgLyBkcGh5X29wdHMtPmxwX2Nsa19y YXRlOyAvKiBwcyAqLworCWRldl9kYmcoJnBoeS0+ZGV2LCAiTFAgY2xvY2sgJWx1LCBwZXJpb2Q6 ICVsdSBwc1xuIiwKKwkJZHBoeV9vcHRzLT5scF9jbGtfcmF0ZSwgbHBfdCk7CisKKwkvKiBoc19w cmVwYXJlOiBpbiBscCBjbG9jayBwZXJpb2RzICovCisJaWYgKDIgKiBkcGh5X29wdHMtPmhzX3By ZXBhcmUgPiA1ICogbHBfdCkgeworCQlkZXZfZXJyKCZwaHktPmRldiwKKwkJCSJoc19wcmVwYXJl ICgldSkgPiAyLjUgKiBscCBjbG9jayBwZXJpb2QgKCVsdSkiLAorCQkJZHBoeV9vcHRzLT5oc19w cmVwYXJlLCBscF90KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIDAwOiBscF90LCAwMTog MS41ICogbHBfdCwgMTA6IDIgKiBscF90LCAxMTogMi41ICogbHBfdCAqLworCWlmIChkcGh5X29w dHMtPmhzX3ByZXBhcmUgPCBscF90KQorCQluID0gMDsKKwllbHNlCisJCW4gPSAyICogKGRwaHlf b3B0cy0+aHNfcHJlcGFyZSAtIGxwX3QpIC8gbHBfdDsKKwljZmctPm1fcHJnX2hzX3ByZXBhcmUg PSBuOworCisJLyogY2xrX3ByZXBhcmU6IGluIGxwIGNsb2NrIHBlcmlvZHMgKi8KKwlpZiAoMiAq IGRwaHlfb3B0cy0+Y2xrX3ByZXBhcmUgPiAzICogbHBfdCkgeworCQlkZXZfZXJyKCZwaHktPmRl diwKKwkJCSJjbGtfcHJlcGFyZSAoJXUpID4gMS41ICogbHAgY2xvY2sgcGVyaW9kICglbHUpIiwK KwkJCWRwaHlfb3B0cy0+Y2xrX3ByZXBhcmUsIGxwX3QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisJLyogMDA6IGxwX3QsIDAxOiAxLjUgKiBscF90ICovCisJY2ZnLT5tY19wcmdfaHNfcHJlcGFy ZSA9IGRwaHlfb3B0cy0+Y2xrX3ByZXBhcmUgPiBscF90ID8gMSA6IDA7CisKKwkvKiBoc196ZXJv OiBmb3JtdWxhIGZyb20gTlhQIEJTUCAqLworCW4gPSAoMTQ0ICogKGRwaHlfb3B0cy0+aHNfY2xr X3JhdGUgLyAxMDAwMDAwKSAtIDQ3NTAwKSAvIDEwMDAwOworCWNmZy0+bV9wcmdfaHNfemVybyA9 IG4gPCAxID8gMSA6IG47CisKKwkvKiBjbGtfemVybzogZm9ybXVsYSBmcm9tIE5YUCBCU1AgKi8K KwluID0gKDM0ICogKGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUgLyAxMDAwMDAwKSAtIDI1MDApIC8g MTAwMDsKKwljZmctPm1jX3ByZ19oc196ZXJvID0gbiA8IDEgPyAxIDogbjsKKworCS8qIGNsa190 cmFpbCwgaHNfdHJhaWw6IGZvcm11bGEgZnJvbSBOWFAgQlNQICovCisJbiA9ICgxMDMgKiAoZHBo eV9vcHRzLT5oc19jbGtfcmF0ZSAvIDEwMDAwMDApICsgMTAwMDApIC8gMTAwMDA7CisJaWYgKG4g PiAxNSkKKwkJbiA9IDE1OworCWlmIChuIDwgMSkKKwkJbiA9IDE7CisJY2ZnLT5tX3ByZ19oc190 cmFpbCA9IG47CisJY2ZnLT5tY19wcmdfaHNfdHJhaWwgPSBuOworCisJLyogcnhoc19zZXR0bGU6 IGZvcm11bGEgZnJvbSBOWFAgQlNQICovCisJaWYgKGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUgPCBN QlBTKDgwKSkKKwkJY2ZnLT5yeGhzX3NldHRsZSA9IDB4MGQ7CisJZWxzZSBpZiAoZHBoeV9vcHRz LT5oc19jbGtfcmF0ZSA8IE1CUFMoOTApKQorCQljZmctPnJ4aHNfc2V0dGxlID0gMHgwYzsKKwll bHNlIGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRlIDwgTUJQUygxMjUpKQorCQljZmctPnJ4aHNf c2V0dGxlID0gMHgwYjsKKwllbHNlIGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRlIDwgTUJQUygx NTApKQorCQljZmctPnJ4aHNfc2V0dGxlID0gMHgwYTsKKwllbHNlIGlmIChkcGh5X29wdHMtPmhz X2Nsa19yYXRlIDwgTUJQUygyMjUpKQorCQljZmctPnJ4aHNfc2V0dGxlID0gMHgwOTsKKwllbHNl IGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRlIDwgTUJQUyg1MDApKQorCQljZmctPnJ4aHNfc2V0 dGxlID0gMHgwODsKKwllbHNlCisJCWNmZy0+cnhoc19zZXR0bGUgPSAweDA3OworCisJZGV2X2Ri ZygmcGh5LT5kZXYsICJoc19wcmVwYXJlOiAldSwgY2xrX3ByZXBhcmU6ICV1LCAiCisJCSJoc19w cmVwYXJlOiAldSwgY2xrX3ByZXBhcmU6ICV1LCAiCisJCSJoc190cmFpbDogJXUsIGNsa190cmFp bDogJXUsICIKKwkJInJ4aHNfc2V0dGxlOiAldVxuIiwKKwkJY2ZnLT5tX3ByZ19oc19wcmVwYXJl LCBjZmctPm1jX3ByZ19oc19wcmVwYXJlLAorCQljZmctPm1fcHJnX2hzX3plcm8sIGNmZy0+bWNf cHJnX2hzX3plcm8sCisJCWNmZy0+bV9wcmdfaHNfdHJhaWwsIGNmZy0+bWNfcHJnX2hzX3RyYWls LAorCQljZmctPnJ4aHNfc2V0dGxlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBt aXhlbF9waHlfc2V0X2hzX3RpbWluZ3Moc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtaXhl bF9kcGh5X3ByaXYgKnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCXBoeV93cml0ZShw aHksIHByaXYtPmNmZy5tX3ByZ19oc19wcmVwYXJlLCBEUEhZX01fUFJHX0hTX1BSRVBBUkUpOwor CXBoeV93cml0ZShwaHksIHByaXYtPmNmZy5tY19wcmdfaHNfcHJlcGFyZSwgRFBIWV9NQ19QUkdf SFNfUFJFUEFSRSk7CisJcGh5X3dyaXRlKHBoeSwgcHJpdi0+Y2ZnLm1fcHJnX2hzX3plcm8sIERQ SFlfTV9QUkdfSFNfWkVSTyk7CisJcGh5X3dyaXRlKHBoeSwgcHJpdi0+Y2ZnLm1jX3ByZ19oc196 ZXJvLCBEUEhZX01DX1BSR19IU19aRVJPKTsKKwlwaHlfd3JpdGUocGh5LCBwcml2LT5jZmcubV9w cmdfaHNfdHJhaWwsIERQSFlfTV9QUkdfSFNfVFJBSUwpOworCXBoeV93cml0ZShwaHksIHByaXYt PmNmZy5tY19wcmdfaHNfdHJhaWwsIERQSFlfTUNfUFJHX0hTX1RSQUlMKTsKKwlwaHlfd3JpdGUo cGh5LCBwcml2LT5jZmcucnhoc19zZXR0bGUsIHByaXYtPmRldmRhdGEtPnJlZ19yeGhzX3NldHRs ZSk7Cit9CisKK3N0YXRpYyBpbnQgbWl4ZWxfZHBoeV9zZXRfcGxsX3BhcmFtcyhzdHJ1Y3QgcGh5 ICpwaHkpCit7CisJc3RydWN0IG1peGVsX2RwaHlfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0 YShwaHktPmRldi5wYXJlbnQpOworCisJaWYgKHByaXYtPmNmZy5jbSA8IDE2IHx8IHByaXYtPmNm Zy5jbSA+IDI1NSB8fAorCSAgICBwcml2LT5jZmcuY24gPCAxIHx8IHByaXYtPmNmZy5jbiA+IDMy IHx8CisJICAgIHByaXYtPmNmZy5jbyA8IDEgfHwgcHJpdi0+Y2ZnLmNvID4gOCkgeworCQlkZXZf ZXJyKCZwaHktPmRldiwgIkludmFsaWQgQ00vQ04vQ08gdmFsdWVzISAoJXUvJXUvJXUpXG4iLAor CQkJcHJpdi0+Y2ZnLmNtLCBwcml2LT5jZmcuY24sIHByaXYtPmNmZy5jbyk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKwlkZXZfZGJnKCZwaHktPmRldiwgIlVzaW5nIENNOiV1IENOOiV1IENPOiV1 XG4iLAorCQlwcml2LT5jZmcuY20sIHByaXYtPmNmZy5jbiwgcHJpdi0+Y2ZnLmNvKTsKKwlwaHlf d3JpdGUocGh5LCBDTShwcml2LT5jZmcuY20pLCBEUEhZX0NNKTsKKwlwaHlfd3JpdGUocGh5LCBD Tihwcml2LT5jZmcuY24pLCBEUEhZX0NOKTsKKwlwaHlfd3JpdGUocGh5LCBDTyhwcml2LT5jZmcu Y28pLCBEUEhZX0NPKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaXhlbF9kcGh5X2Nv bmZpZ3VyZShzdHJ1Y3QgcGh5ICpwaHksIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyAqb3B0cykK K3sKKwlzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7 CisJc3RydWN0IG1peGVsX2RwaHlfY2ZnIGNmZyA9IHsgMCB9OworCWludCByZXQ7CisKKwlyZXQg PSBtaXhlbF9kcGh5X2NvbmZpZ19mcm9tX29wdHMocGh5LCAmb3B0cy0+bWlwaV9kcGh5LCAmY2Zn KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXBkYXRlIHRoZSBjb25maWd1cmF0 aW9uICovCisJbWVtY3B5KCZwcml2LT5jZmcsICZjZmcsIHNpemVvZihzdHJ1Y3QgbWl4ZWxfZHBo eV9jZmcpKTsKKworCXBoeV93cml0ZShwaHksIDB4MDAsIERQSFlfTE9DS19CWVApOworCXBoeV93 cml0ZShwaHksIDB4MDEsIHByaXYtPmRldmRhdGEtPnJlZ190eF9yY2FsKTsKKwlwaHlfd3JpdGUo cGh5LCAweDAwLCBwcml2LT5kZXZkYXRhLT5yZWdfYXV0b19wZF9lbik7CisJcGh5X3dyaXRlKHBo eSwgMHgwMiwgcHJpdi0+ZGV2ZGF0YS0+cmVnX3J4bHBycCk7CisJcGh5X3dyaXRlKHBoeSwgMHgw MiwgcHJpdi0+ZGV2ZGF0YS0+cmVnX3J4Y2RycCk7CisJcGh5X3dyaXRlKHBoeSwgMHgyNSwgRFBI WV9UU1QpOworCisJbWl4ZWxfcGh5X3NldF9oc190aW1pbmdzKHBoeSk7CisJcmV0ID0gbWl4ZWxf ZHBoeV9zZXRfcGxsX3BhcmFtcyhwaHkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWl4ZWxfZHBoeV92YWxpZGF0ZShzdHJ1Y3Qg cGh5ICpwaHksIGVudW0gcGh5X21vZGUgbW9kZSwgaW50IHN1Ym1vZGUsCisJCQkgICAgICAgdW5p b24gcGh5X2NvbmZpZ3VyZV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBtaXhlbF9kcGh5X2NmZyBj ZmcgPSB7IDAgfTsKKworCWlmIChtb2RlICE9IFBIWV9NT0RFX01JUElfRFBIWSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlyZXR1cm4gbWl4ZWxfZHBoeV9jb25maWdfZnJvbV9vcHRzKHBoeSwgJm9w dHMtPm1pcGlfZHBoeSwgJmNmZyk7Cit9CisKKworc3RhdGljIGludCBtaXhlbF9kcGh5X2luaXQo c3RydWN0IHBoeSAqcGh5KQoreworCXBoeV93cml0ZShwaHksIFBXUl9PRkYsIERQSFlfUERfUExM KTsKKwlwaHlfd3JpdGUocGh5LCBQV1JfT0ZGLCBEUEhZX1BEX0RQSFkpOworCisJcmV0dXJuIDA7 Cit9CisKKworc3RhdGljIGludCBtaXhlbF9kcGh5X2V4aXQoc3RydWN0IHBoeSAqcGh5KQorewor CXBoeV93cml0ZShwaHksIDAsIERQSFlfQ00pOworCXBoeV93cml0ZShwaHksIDAsIERQSFlfQ04p OworCXBoeV93cml0ZShwaHksIDAsIERQSFlfQ08pOworCisJcmV0dXJuIDA7Cit9CisKKworc3Rh dGljIGludCBtaXhlbF9kcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3Qg bWl4ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJdTMyIGxvY2tl ZDsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPnBoeV9yZWZf Y2xrKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXBoeV93cml0ZShwaHksIFBX Ul9PTiwgRFBIWV9QRF9QTEwpOworCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2 LT5yZWdzLCBEUEhZX0xPQ0ssIGxvY2tlZCwKKwkJCQkgICAgICAgbG9ja2VkLCBQTExfTE9DS19T TEVFUCwKKwkJCQkgICAgICAgUExMX0xPQ0tfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycigmcGh5LT5kZXYsICJDb3VsZCBub3QgZ2V0IERQSFkgbG9jayAoJWQpIVxuIiwgcmV0 KTsKKwkJZ290byBjbG9ja19kaXNhYmxlOworCX0KKwlwaHlfd3JpdGUocGh5LCBQV1JfT04sIERQ SFlfUERfRFBIWSk7CisKKwlyZXR1cm4gMDsKK2Nsb2NrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHByaXYtPnBoeV9yZWZfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IG1peGVsX2RwaHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbWl4 ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisKKwlwaHlfd3JpdGUo cGh5LCBQV1JfT0ZGLCBEUEhZX1BEX1BMTCk7CisJcGh5X3dyaXRlKHBoeSwgUFdSX09GRiwgRFBI WV9QRF9EUEhZKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5waHlfcmVmX2Nsayk7 CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9vcHMgbWl4ZWxf ZHBoeV9waHlfb3BzID0geworCS5pbml0ID0gbWl4ZWxfZHBoeV9pbml0LAorCS5leGl0ID0gbWl4 ZWxfZHBoeV9leGl0LAorCS5wb3dlcl9vbiA9IG1peGVsX2RwaHlfcG93ZXJfb24sCisJLnBvd2Vy X29mZiA9IG1peGVsX2RwaHlfcG93ZXJfb2ZmLAorCS5jb25maWd1cmUgPSBtaXhlbF9kcGh5X2Nv bmZpZ3VyZSwKKwkudmFsaWRhdGUgPSBtaXhlbF9kcGh5X3ZhbGlkYXRlLAorCS5vd25lciA9IFRI SVNfTU9EVUxFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWl4ZWxf ZHBoeV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWl4ZWwsaW14OG1xLW1pcGkt ZHBoeSIsCisJICAuZGF0YSA9ICZtaXhlbF9kcGh5X2RldmRhdGFbTUlYRUxfSU1YOE1RXSB9LAor CXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtaXhlbF9k cGh5X29mX21hdGNoKTsKKworc3RhdGljIGludCBtaXhlbF9kcGh5X3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVjdCBwaHlfcHJv dmlkZXIgKnBoeV9wcm92aWRlcjsKKwlzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2ICpwcml2OworCXN0 cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwaHkgKnBoeTsKKwl2b2lkIF9faW9tZW0gKnJl Z3M7CisKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaXYgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVy biAtRU5PTUVNOworCisJcHJpdi0+ZGV2ZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgm cGRldi0+ZGV2KTsKKwlpZiAoIXByaXYtPmRldmRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwly ZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJlZ3Mp KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgbWFwIHRoZSBEUEhZIHJlZ2lzdGVyc1xuIik7 CisJCXJldHVybiBQVFJfRVJSKHJlZ3MpOworCX0KKworCXByaXYtPnJlZ3MgPSBkZXZtX3JlZ21h cF9pbml0X21taW8oJnBkZXYtPmRldiwgcmVncywKKwkJCQkJICAgJm1peGVsX2RwaHlfcmVnbWFw X2NvbmZpZyk7CisJaWYgKElTX0VSUihwcml2LT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkNv dWxkbid0IGNyZWF0ZSB0aGUgRFBIWSByZWdtYXBcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwcml2 LT5yZWdzKTsKKwl9CisKKwlwcml2LT5waHlfcmVmX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ ZGV2LCAicGh5X3JlZiIpOworCWlmIChJU19FUlIocHJpdi0+cGh5X3JlZl9jbGspKSB7CisJCWRl dl9lcnIoZGV2LCAiTm8gcGh5X3JlZiBjbG9jayBmb3VuZFxuIik7CisJCXJldHVybiBQVFJfRVJS KHByaXYtPnBoeV9yZWZfY2xrKTsKKwl9CisJZGV2X2RiZyhkZXYsICJwaHlfcmVmIGNsb2NrIHJh dGU6ICVsdVxuIiwKKwkJY2xrX2dldF9yYXRlKHByaXYtPnBoeV9yZWZfY2xrKSk7CisKKwlkZXZf c2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKworCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIG5w LCAmbWl4ZWxfZHBoeV9waHlfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gY3JlYXRlIHBoeSAlbGRcbiIsIFBUUl9FUlIocGh5KSk7CisJCXJldHVy biBQVFJfRVJSKHBoeSk7CisJfQorCXBoeV9zZXRfZHJ2ZGF0YShwaHksIHByaXYpOworCisJcGh5 X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2lt cGxlX3hsYXRlKTsKKworCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGh5X3Byb3ZpZGVyKTsKK30K Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWl4ZWxfZHBoeV9kcml2ZXIgPSB7CisJ LnByb2JlCT0gbWl4ZWxfZHBoeV9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtaXhl bC1taXBpLWRwaHkiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBtaXhlbF9kcGh5X29mX21hdGNoLAor CX0KK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1peGVsX2RwaHlfZHJpdmVyKTsKKworTU9E VUxFX0FVVEhPUigiTlhQIFNlbWljb25kdWN0b3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWl4 ZWwgTUlQSS1EU0kgUEhZIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAK Mi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=