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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 52947C83F19 for ; Wed, 9 Jul 2025 22:58:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:CC :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=m3MC6CevMfjFqdGFq0dKi7ETu6LGhlYuzjcFaxAv7Gg=; b=j1C5l4QKqoGR/b psVKu5y4tEtai/kSxk1xvBsZwOlog8Qm7MLUr1pTOu5QB5nCa4rUvZ7Egk3+AQnhCmXPTG1dEdGuj WSrep7V++RUjv04DY3MavMOtQBhcrdP/8wIS3bKYuUo1mQRzMm+lF1KF4sd+ycspf0lgv0DxDJ3KQ iNPg1alC/JDg0ewUpAyTyFuTr2n5EEyygn0eWegJLmFyWWQgGamq4VmVXraRWDk/9qTLa3hb/RJWT 1aL9GskDStoSeqrKz+XobWsMLuMGFfQtBQCt+cwwm8J2Twd6aKT4nrB68uV5vgeihh/gIqm9xEE5O 6v9fmSkADceOjZLlXDVg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uZdk0-0000000ABgl-4B9K; Wed, 09 Jul 2025 22:58:17 +0000 Received: from smtp-fw-80008.amazon.com ([99.78.197.219]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uZd6e-0000000A3li-0zxW for linux-phy@lists.infradead.org; Wed, 09 Jul 2025 22:17:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lab126.com; i=@lab126.com; q=dns/txt; s=amazoncorp2; t=1752099456; x=1783635456; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=6I0/pA1YJ4nL2BLkVcWVaXIQ5lSfcGJfu8j65+5jWWM=; b=CadiZXtOKEIZOVPc6mfab1912lMY6mO6ArDqqT2rJru1sbaFq+tJRbDE k/6CgXcsfTXjnSrmS2HNbOsgREjX0yZzYUqtuFbGzLuj/R0Rc9fVApC+b WZHLk/GGArgJR/0EapjRtDOGeeNDpsMYZynn43jmF9qoAhnaaTcqMrbX4 0dQHeoeeo9AWynOTf+52resV88i4vtjbL+GQtvV4sovDZ/BQi6AGdm9kp nrdZ10hNdjDyyP5CR1jepkhMY40oIjWu/TU/eKibvLsDtN8lFOQyiOE5x Fh2fTZHov78fwF3eosCXYDEcEgABzOkKRfsicSDxhBsxeLeXQEZqFEAJK w==; X-IronPort-AV: E=Sophos;i="6.16,299,1744070400"; d="scan'208";a="213696453" Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO smtpout.prod.us-west-2.prod.farcaster.email.amazon.dev) ([10.25.36.214]) by smtp-border-fw-80008.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jul 2025 22:17:34 +0000 Received: from EX19MTAUWC001.ant.amazon.com [10.0.38.20:61978] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.61.144:2525] with esmtp (Farcaster) id c331c799-ffc8-443a-9eca-e1219f9f9c10; Wed, 9 Jul 2025 22:17:34 +0000 (UTC) X-Farcaster-Flow-ID: c331c799-ffc8-443a-9eca-e1219f9f9c10 Received: from EX19D007UWB001.ant.amazon.com (10.13.138.75) by EX19MTAUWC001.ant.amazon.com (10.250.64.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Wed, 9 Jul 2025 22:17:34 +0000 Received: from u1cb251c9c70150.ant.amazon.com (10.68.99.17) by EX19D007UWB001.ant.amazon.com (10.13.138.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Wed, 9 Jul 2025 22:17:33 +0000 From: Karthik Poduval To: , , , , , , , , , , CC: Karthik Poduval Subject: [PATCH 1/2] phy: dw-dphy-rx: Add Synopsys DesignWare D-PHY RX Date: Wed, 9 Jul 2025 15:17:23 -0700 Message-ID: <20250709221724.1276428-1-kpoduval@lab126.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Originating-IP: [10.68.99.17] X-ClientProxiedBy: EX19D039UWA001.ant.amazon.com (10.13.139.110) To EX19D007UWB001.ant.amazon.com (10.13.138.75) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250709_151736_370371_45D4B764 X-CRM114-Status: GOOD ( 23.38 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org QWRkIHN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBELVBIWSBSWCB2MS4yLiBU aGUgZHJpdmVyCnN1cHBvcnRzIGRhdGEgcmF0ZXMgZnJvbSA4ME1icHMgdG8gMjUwME1icHMuCgpT aWduZWQtb2ZmLWJ5OiBLYXJ0aGlrIFBvZHV2YWwgPGtwb2R1dmFsQGxhYjEyNi5jb20+Ci0tLQog ZHJpdmVycy9waHkvS2NvbmZpZyAgICAgICB8ICAxMSArCiBkcml2ZXJzL3BoeS9NYWtlZmlsZSAg ICAgIHwgICAxICsKIGRyaXZlcnMvcGh5L3BoeS1kdy1kcGh5LmMgfCA1NzUgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNTg3IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9waHktZHctZHBoeS5jCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9waHkvS2NvbmZpZyBiL2RyaXZlcnMvcGh5L0tjb25maWcKaW5kZXgg NThjOTExZTFiMmQyLi4zNGMyNDVjYTVkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L0tjb25m aWcKKysrIGIvZHJpdmVycy9waHkvS2NvbmZpZwpAQCAtMTAxLDYgKzEwMSwxNyBAQCBjb25maWcg UEhZX05YUF9QVE4zMjIyCiAJICBzY2hlbWVzLiBJdCBzdXBwb3J0cyBhbGwgdGhyZWUgVVNCIDIu MCBkYXRhIHJhdGVzOiBMb3cgU3BlZWQsIEZ1bGwKIAkgIFNwZWVkIGFuZCBIaWdoIFNwZWVkLgoK K2NvbmZpZyBQSFlfU1lOT1BTWVNfRFdfRFBIWV9SWAorCXRyaXN0YXRlICJTeW5vcHN5cyBEZXNp Z25XYXJlIEQtUEhZIFJ4IFN1cHBvcnQiCisJZGVwZW5kcyBvbiBIQVNfSU9NRU0gJiYgUkVHTUFQ X01NSU8KKwlzZWxlY3QgR0VORVJJQ19QSFkKKwlzZWxlY3QgR0VORVJJQ19QSFlfTUlQSV9EUEhZ CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBTeW5vcHN5cyBEVyBN SVBJIEQtUEhZIFJYIElQLiBUaGlzIGRyaXZlcgorCSAgcHJvdmlkZXMgRC1QSFkgZnVuY3Rpb25h bGl0eSB1c2luZyBHZW5lcmljIFBIWSBmcmFtZXdvcmsgYW5kIGlzIG1lYW50IHRvCisJICBiZSB1 c2VkIGJ5IE1JUEkgQ1NJMiByZWNlaXZlcnMgb3ZlciB0aGUgUFBJIGhhcmR3YXJlIGludGVyZmFj ZS4gTUlQSSBDU0kyCisJICByZWNlaXZlcnMgbWF5IGZpbmQgdGhpcyBkcml2ZXIgYW5kIHVzZSBp dCB2aWEgR2VuZXJpYyBQSFkgRnJhbWV3b3JrIEFQSS4KKwogc291cmNlICJkcml2ZXJzL3BoeS9h bGx3aW5uZXIvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9waHkvYW1sb2dpYy9LY29uZmlnIgog c291cmNlICJkcml2ZXJzL3BoeS9icm9hZGNvbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL3BoeS9NYWtlZmlsZQppbmRleCBjNjcwYThkYWM0Njgu LmVkMDgzNmFkYjgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvTWFrZWZpbGUKKysrIGIvZHJp dmVycy9waHkvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAgb2JqLSQoQ09ORklHX1BIWV9TTlBT X0VVU0IyKQkJKz0gcGh5LXNucHMtZXVzYjIubwogb2JqLSQoQ09ORklHX1VTQl9MR01fUEhZKQkJ Kz0gcGh5LWxnbS11c2Iubwogb2JqLSQoQ09ORklHX1BIWV9BSVJPSEFfUENJRSkJCSs9IHBoeS1h aXJvaGEtcGNpZS5vCiBvYmotJChDT05GSUdfUEhZX05YUF9QVE4zMjIyKQkJKz0gcGh5LW54cC1w dG4zMjIyLm8KK29iai0kKENPTkZJR19QSFlfU1lOT1BTWVNfRFdfRFBIWV9SWCkJKz0gcGh5LWR3 LWRwaHkubwogb2JqLXkJCQkJCSs9IGFsbHdpbm5lci8JXAogCQkJCQkgICBhbWxvZ2ljLwlcCiAJ CQkJCSAgIGJyb2FkY29tLwlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktZHctZHBoeS5j IGIvZHJpdmVycy9waHkvcGh5LWR3LWRwaHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjIyNDhmNjkwYjg2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGh5 L3BoeS1kdy1kcGh5LmMKQEAgLTAsMCArMSw1NzUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjUgQW1hem9uLmNv bSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4KKyAqIENvcHlyaWdodCDCqSAyMDI1IFN5bm9wc3lz LCBJbmMuICh3d3cuc3lub3BzeXMuY29tKQorICovCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKwor I2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5LW1pcGkt ZHBoeS5oPgorCisjZGVmaW5lIEtIWiAoMTAwMCkKKyNkZWZpbmUgTUhaIChLSFogKiBLSFopCisK K2VudW0gZHdfZHBoeV9yZWdfZmllbGRzX2NmZzEgeworCVBIWV9TSFVURE9XTlosCisJRFBIWV9S U1RaLAorCVRFU1RfQ0xSLAorCVRFU1RfQ0xLLAorCVRFU1RfSU4sCisJVEVTVF9PVVQsCisJVEVT VF9FTiwKKwlEV19EUEhZX1JGX0NGRzFfTUFYCit9OworCitlbnVtIGR3X2RwaHlfcmVnX2ZpZWxk c19jZmcyIHsKKwlFTl9DT05UX1JFR19VUERBVEUsCisJVFVSTl9SRVFVRVNUXzAsCisJVFVSTl9E SVNBQkxFXzAsCisJRU5BQkxFX0NMSywKKwlGT1JDRV9UWF9TVE9QX01PREVfMCwKKwlGT1JDRV9S WF9NT0RFLAorCUJBU0VfRElSXzAsCisJQ0ZHX0NMS19GUkVRX1JBTkdFLAorCUhTX0ZSRVFfUkFO R0UsCisJQ09OVF9FTiwKKwlEV19EUEhZX1JGX0NGRzJfTUFYCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHJlZ19maWVsZCBkd19kcGh5X3YxXzJfY2ZnMVtEV19EUEhZX1JGX0NGRzFfTUFYXSA9 IHsKKwlbUEhZX1NIVVRET1dOWl0gPSBSRUdfRklFTEQoMHgwLCAwLCAwKSwKKwlbRFBIWV9SU1Ra XSA9IFJFR19GSUVMRCgweDQsIDAsIDApLAorCVtURVNUX0NMUl0gPSBSRUdfRklFTEQoMHgxMCwg MCwgMCksCisJW1RFU1RfQ0xLXSA9IFJFR19GSUVMRCgweDEwLCAxLCAxKSwKKwlbVEVTVF9JTl0g PSBSRUdfRklFTEQoMHgxNCwgMCwgNyksCisJW1RFU1RfT1VUXSA9IFJFR19GSUVMRCgweDE0LCA4 LCAxNSksCisJW1RFU1RfRU5dID0gUkVHX0ZJRUxEKDB4MTQsIDE2LCAxNiksCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IHJlZ19maWVsZCBkd19kcGh5X3YxXzJfY2ZnMltEV19EUEhZX1JGX0NG RzJfTUFYXSA9IHsKKwlbRU5fQ09OVF9SRUdfVVBEQVRFXSA9IFJFR19GSUVMRCgweDAsIDIzLCAy MyksCisJW1RVUk5fUkVRVUVTVF8wXSA9IFJFR19GSUVMRCgweDAsIDIyLCAyMiksCisJW1RVUk5f RElTQUJMRV8wXSA9IFJFR19GSUVMRCgweDAsIDIxLCAyMSksCisJW0VOQUJMRV9DTEtdID0gUkVH X0ZJRUxEKDB4MCwgMjAsIDIwKSwKKwlbRk9SQ0VfVFhfU1RPUF9NT0RFXzBdID0gUkVHX0ZJRUxE KDB4MCwgMTksIDE5KSwKKwlbRk9SQ0VfUlhfTU9ERV0gPSBSRUdfRklFTEQoMHgwLCAxNSwgMTgp LAorCVtCQVNFX0RJUl8wXSA9IFJFR19GSUVMRCgweDAsIDE0LCAxNCksCisJW0NGR19DTEtfRlJF UV9SQU5HRV0gPSBSRUdfRklFTEQoMHgwLCA4LCAxMyksCisJW0hTX0ZSRVFfUkFOR0VdID0gUkVH X0ZJRUxEKDB4MCwgMSwgNyksCisJW0NPTlRfRU5dID0gUkVHX0ZJRUxEKDB4MCwgMCwgMCksCit9 OworCitlbnVtIGRwaHlfMTJiaXRfaW50ZXJmYWNlX2FkZHIgeworCVJYX1NZU18wID0gMHgwMSwK KwlSWF9TWVNfMSA9IDB4MDIsCisJUlhfU1lTXzcgPSAweDA4LAorCVJYX1JYX1NUQVJUVVBfT1ZS XzAgPSAweGUwLAorCVJYX1JYX1NUQVJUVVBfT1ZSXzEgPSAweGUxLAorCVJYX1JYX1NUQVJUVVBf T1ZSXzIgPSAweGUyLAorCVJYX1JYX1NUQVJUVVBfT1ZSXzMgPSAweGUzLAorCVJYX1JYX1NUQVJU VVBfT1ZSXzQgPSAweGU0LAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcmFuZ2VfZHBoeV9nZW4zIC0g ZnJlcXVlbmN5IHJhbmdlIGNhbGlicmF0aW9uIHN0cnVjdHVyZQorICoKKyAqIEBmcmVxOiBpbnB1 dCBmcmVxZW5jeSB0byBjYWxpYnJhdGlvbiB0YWJsZQorICogQGhzZnJlZ3JhbmdlOiBjb3JyZXNw b25kaW5nIGNsb2NrIHRvIGNvbmZpZ3VyZSBEVyBELVBIWSBJUAorICogQG9zY19mcmVxX3Rhcmdl dDogY29ycmVzcG9uZGluZyBjbG9jayB0byBjb25maWd1cmUgRFcgRC1QSFkgSVAKKyAqCisgKiov CitzdHJ1Y3QgcmFuZ2VfZHBoeV9nZW4zIHsKKwl1MzIgZnJlcTsKKwl1OCBoc2ZyZWdyYW5nZTsK Kwl1MzIgb3NjX2ZyZXFfdGFyZ2V0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHRfZGF0YV9kd19k cGh5IC0gRFBIWSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlCisgKiBAdGFibGU6IFBvaW50 ZXIgdG8gYXJyYXkgb2YgRFBIWSBHZW4zIHRpbWluZyByYW5nZSBjb25maWd1cmF0aW9ucworICog QHRhYmxlX3NpemU6IE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0aW1pbmcgcmFuZ2UgdGFibGUK KyAqIEBwaHlfb3BzOiBQb2ludGVyIHRvIFBIWSBvcGVyYXRpb25zIHN0cnVjdHVyZSBjb250YWlu aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucworICoKKyAqKi8KK3N0cnVjdCBkdF9kYXRhX2R3X2RwaHkg eworCXN0cnVjdCByYW5nZV9kcGh5X2dlbjMgKnRhYmxlOworCWludCB0YWJsZV9zaXplOworCWNv bnN0IHN0cnVjdCBwaHlfb3BzICpwaHlfb3BzOworfTsKKworLyoKKyAqIERXIERQSFkgR2VuMyBj YWxpYnJhdGlvbiB0YWJsZQorICoKKyAqLworc3RydWN0IHJhbmdlX2RwaHlfZ2VuMyByYW5nZV9n ZW4zW10gPSB7CisJeyA4MCwgMGIwMDAwMDAwLCA0NjAgfSwJICB7IDkwLCAwYjAwMTAwMDAsIDQ2 MCB9LAorCXsgMTAwLCAwYjAxMDAwMDAsIDQ2MCB9LCAgeyAxMTAsIDBiMDExMDAwMCwgNDYwIH0s CisJeyAxMjAsIDBiMDAwMDAwMSwgNDYwIH0sICB7IDEzMCwgMGIwMDEwMDAxLCA0NjAgfSwKKwl7 IDE0MCwgMGIwMTAwMDAxLCA0NjAgfSwgIHsgMTUwLCAwYjAxMTAwMDEsIDQ2MCB9LAorCXsgMTYw LCAwYjAwMDAwMTAsIDQ2MCB9LCAgeyAxNzAsIDBiMDAxMDAxMCwgNDYwIH0sCisJeyAxODAsIDBi MDEwMDAxMCwgNDYwIH0sICB7IDE5MCwgMGIwMTEwMDEwLCA0NjAgfSwKKwl7IDIwNSwgMGIwMDAw MDExLCA0NjAgfSwgIHsgMjIwLCAwYjAwMTAwMTEsIDQ2MCB9LAorCXsgMjM1LCAwYjAxMDAwMTEs IDQ2MCB9LCAgeyAyNTAsIDBiMDExMDAxMSwgNDYwIH0sCisJeyAyNzUsIDBiMDAwMDEwMCwgNDYw IH0sICB7IDMwMCwgMGIwMDEwMTAwLCA0NjAgfSwKKwl7IDMyNSwgMGIwMTAwMTAxLCA0NjAgfSwg IHsgMzUwLCAwYjAxMTAxMDEsIDQ2MCB9LAorCXsgNDAwLCAwYjAwMDAxMDEsIDQ2MCB9LCAgeyA0 NTAsIDBiMDAxMDExMCwgNDYwIH0sCisJeyA1MDAsIDBiMDEwMDExMCwgNDYwIH0sICB7IDU1MCwg MGIwMTEwMTExLCA0NjAgfSwKKwl7IDYwMCwgMGIwMDAwMTExLCA0NjAgfSwgIHsgNjUwLCAwYjAw MTEwMDAsIDQ2MCB9LAorCXsgNzAwLCAwYjAxMDEwMDAsIDQ2MCB9LCAgeyA3NTAsIDBiMDExMTAw MSwgNDYwIH0sCisJeyA4MDAsIDBiMDAwMTAwMSwgNDYwIH0sICB7IDg1MCwgMGIwMDExMDAxLCA0 NjAgfSwKKwl7IDkwMCwgMGIwMTAxMDAxLCA0NjAgfSwgIHsgOTUwLCAwYjAxMTEwMTAsIDQ2MCB9 LAorCXsgMTAwMCwgMGIwMDAxMDEwLCA0NjAgfSwgeyAxMDUwLCAwYjAwMTEwMTAsIDQ2MCB9LAor CXsgMTExMCwgMGIwMTAxMDEwLCA0NjAgfSwgeyAxMTUwLCAwYjAxMTEwMTEsIDQ2MCB9LAorCXsg MTIwMCwgMGIwMDAxMDExLCA0NjAgfSwgeyAxMjUwLCAwYjAwMTEwMTEsIDQ2MCB9LAorCXsgMTMw MCwgMGIwMTAxMDExLCA0NjAgfSwgeyAxMzUwLCAwYjAxMTExMDAsIDQ2MCB9LAorCXsgMTQwMCwg MGIwMDAxMTAwLCA0NjAgfSwgeyAxNDUwLCAwYjAwMTExMDAsIDQ2MCB9LAorCXsgMTUwMCwgMGIw MTAxMTAwLCA0NjAgfSwgeyAxNTUwLCAwYjAxMTExMDEsIDI4NSB9LAorCXsgMTYwMCwgMGIwMDAx MTAxLCAyOTUgfSwgeyAxNjUwLCAwYjAwMTExMDEsIDMwNCB9LAorCXsgMTcwMCwgMGIwMTAxMTEw LCAzMTMgfSwgeyAxNzUwLCAwYjAxMTExMTAsIDMyMiB9LAorCXsgMTgwMCwgMGIwMDAxMTEwLCAz MzEgfSwgeyAxODUwLCAwYjAwMTExMTAsIDM0MSB9LAorCXsgMTkwMCwgMGIwMTAxMTExLCAzNTAg fSwgeyAxOTUwLCAwYjAxMTExMTEsIDM1OSB9LAorCXsgMjAwMCwgMGIwMDAxMTExLCAzNjggfSwg eyAyMDUwLCAwYjEwMDAwMDAsIDM3NyB9LAorCXsgMjEwMCwgMGIxMDAwMDAxLCAzODcgfSwgeyAy MTUwLCAwYjEwMDAwMTAsIDM5NiB9LAorCXsgMjIwMCwgMGIxMDAwMDExLCA0MDUgfSwgeyAyMjUw LCAwYjEwMDAxMDAsIDQxNCB9LAorCXsgMjMwMCwgMGIxMDAwMTAxLCA0MjMgfSwgeyAyMzUwLCAw YjEwMDAxMTAsIDQzMiB9LAorCXsgMjQwMCwgMGIxMDAwMTExLCA0NDIgfSwgeyAyNDUwLCAwYjEw MDEwMDAsIDQ1MSB9LAorCXsgMjUwMCwgMGIxMDAxMDAxLCA0NjAgfQorfTsKKworLyoqCisgKiBz dHJ1Y3QgZHdfZHBoeSAtIERXIEQtUEhZIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAq IEByZWdtYXA6IHBvaW50ZXIgdG8gcmVnbWFwCisgKiBAcmVnbWFwX2NmZzE6IHBvaW50ZXIgdG8g Y29uZmlnMSByZWdtYXAKKyAqIEByZWdtYXBfY2ZnMjogcG9pbnRlciB0byBjb25maWcyIHJlZ21h cAorICogQHJmX2NmZzE6IGFycmF5IG9mIHJlZ2ZpZWxkcyBmb3IgY29uZmlnMQorICogQHJmX2Nm ZzI6IGFycmF5IG9mIHJlZ2ZpZWxkcyBmb3IgY29uZmlnMgorICogQGlvbWVtX2NmZzE6IE1NSU8g YWRkcmVzcyBmb3IgY2ZnMSBzZWN0aW9uCisgKiBAaW9tZW1fY2ZnMjogTU1JTyBhZGRyZXNzIGZv ciBjZmcyIHNlY3Rpb24KKyAqIEBwaHk6IHBvaW50ZXIgdG8gdGhlIHBoeSBkYXRhIHN0cnVjdHVy ZQorICogQGhzX2Nsa19yYXRlOiBoaWdoIHNwZWVkIGNsb2NrIHJhdGUgYXMgcGVyIGltYWdlIHNl bnNvciBjb25maWd1cmF0aW9uCisgKiBAZHRfZGF0YV9kd19kcGh5OiBkZXZpY2UgdHJlZSBzcGVj aWZpYyBkYXRhCisgKgorICoqLworc3RydWN0IGR3X2RwaHkgeworCXN0cnVjdCByZWdtYXAgKnJl Z21hcF9jZmcxOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcF9jZmcyOworCXN0cnVjdCByZWdtYXBf ZmllbGQgKnJmX2NmZzFbRFdfRFBIWV9SRl9DRkcxX01BWF07CisJc3RydWN0IHJlZ21hcF9maWVs ZCAqcmZfY2ZnMltEV19EUEhZX1JGX0NGRzJfTUFYXTsKKwl2b2lkIF9faW9tZW0gKmlvbWVtX2Nm ZzE7CisJdm9pZCBfX2lvbWVtICppb21lbV9jZmcyOworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBoc19jbGtfcmF0ZTsKKwlzdHJ1Y3QgZHRf ZGF0YV9kd19kcGh5ICpkdF9kYXRhOworfTsKKworLyoqCisgKiBkd19kcGh5X3RlX3dyaXRlIC0g d3JpdGUgcmVnaXN0ZXIgaW50byB0ZXN0IGVuYWJsZSBpbnRlcmZhY2UKKyAqCisgKiBAZHBoeTog cG9pbnRlciB0byB0aGUgZHdfZHBoeSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKiBAYWRkcjog MTIgYml0IFRFIGFkZHJlc3MgcmVnaXN0ZXIgKDE2IGJpdCBjb250YWluZXIpCisgKiBAZGF0YTog OCBiaXQgZGF0YSB0byBiZSB3cml0dGVuIHRvIFRFIHJlZ2lzdGVyCisgKgorICoqLworc3RhdGlj IHZvaWQgZHdfZHBoeV90ZV93cml0ZShzdHJ1Y3QgZHdfZHBoeSAqZHBoeSwgdTE2IGFkZHIsIHU4 IGRhdGEpCit7CisJLyogRm9yIHdyaXRpbmcgdGhlIDQtYml0IHRlc3Rjb2RlIE1TQnMgKi8KKwor CS8qIEVuc3VyZSB0aGF0IHRlc3RjbGsgYW5kIHRlc3RlbiBpcyBzZXQgdG8gbG93ICovCisJcmVn bWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbVEVTVF9DTEtdLCAwKTsKKwlyZWdtYXBfZmll bGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0VOXSwgMCk7CisKKwkvKiBTZXQgdGVzdGVuIHRv IGhpZ2ggKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0VOXSwgMSk7 CisKKwkvKiBTZXQgdGVzdGNsayB0byBoaWdoICovCisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHkt PnJmX2NmZzFbVEVTVF9DTEtdLCAxKTsKKworCS8qIFBsYWNlIDB4MDAgaW4gdGVzdGRpbiAqLwor CXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RFU1RfSU5dLCAwKTsKKworCS8qCisJ ICogU2V0IHRlc3RjbGsgdG8gbG93ICh3aXRoIHRoZSBmYWxsaW5nIGVkZ2Ugb24gdGVzdGNsaywg dGhlIHRlc3RkaW4gc2lnbmFsCisJICogY29udGVudCBpcyBsYXRjaGVkIGludGVybmFsbHkpCisJ ICovCisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbVEVTVF9DTEtdLCAwKTsKKwor CS8qIFNldCB0ZXN0ZW4gdG8gbG93ICovCisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2Nm ZzFbVEVTVF9FTl0sIDApOworCisJLyogUGxhY2UgdGhlIDgtYml0IHdvcmQgY29ycmVzcG9uZGlu ZyB0byB0aGUgdGVzdGNvZGUgTVNCcyBpbiB0ZXN0ZGluICovCisJcmVnbWFwX2ZpZWxkX3dyaXRl KGRwaHktPnJmX2NmZzFbVEVTVF9JTl0sIChhZGRyID4+IDgpKTsKKworCS8qIFNldCB0ZXN0Y2xr IHRvIGhpZ2ggKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0NMS10s IDEpOworCisJLyogRm9yIHdyaXRpbmcgdGhlIDgtYml0IHRlc3Rjb2RlIExTQnMgKi8KKworCS8q IFNldCB0ZXN0Y2xrIHRvIGxvdyAqLworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcx W1RFU1RfQ0xLXSwgMCk7CisKKwkvKiBTZXQgdGVzdGVuIHRvIGhpZ2ggKi8KKwlyZWdtYXBfZmll bGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0VOXSwgMSk7CisKKwkvKiBTZXQgdGVzdGNsayB0 byBoaWdoICovCisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbVEVTVF9DTEtdLCAx KTsKKworCS8qIFBsYWNlIHRoZSA4LWJpdCB3b3JkIHRlc3QgZGF0YSBpbiB0ZXN0ZGluICovCisJ cmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbVEVTVF9JTl0sIChhZGRyICYgMHhmZikp OworCisJLyoKKwkgKiBTZXQgdGVzdGNsayB0byBsb3cgKHdpdGggdGhlIGZhbGxpbmcgZWRnZSBv biB0ZXN0Y2xrLCB0aGUgdGVzdGRpbiBzaWduYWwKKwkgKiBjb250ZW50IGlzIGxhdGNoZWQgaW50 ZXJuYWxseSkKKwkgKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0NM S10sIDApOworCisJLyogU2V0IHRlc3RlbiB0byBsb3cgKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUo ZHBoeS0+cmZfY2ZnMVtURVNUX0VOXSwgMCk7CisKKwkvKiBGb3Igd3JpdGluZyB0aGUgZGF0YSAq LworCisJLyogUGxhY2UgdGhlIDgtYml0IHdvcmQgY29ycmVzcG9uZGluZyB0byB0aGUgcGFnZSBv ZmZzZXQgaW4gdGVzdGRpbiAqLworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RF U1RfSU5dLCBkYXRhKTsKKworCS8qIFNldCB0ZXN0Y2xrIHRvIGhpZ2ggKHRlc3QgZGF0YSBpcyBw cm9ncmFtbWVkIGludGVybmFsbHkpICovCisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2Nm ZzFbVEVTVF9DTEtdLCAxKTsKK30KKworLyoqCisgKiBkd19kcGh5X3RlX3JlYWQgLSByZWFkIHJl Z2lzdGVyIGZyb20gdGVzdCBlbmFibGUgaW50ZXJmYWNlCisgKgorICogQGRwaHk6IHBvaW50ZXIg dG8gdGhlIGR3X2RwaHkgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICogQGFkZHI6IDEyIGJpdCBU RSBhZGRyZXNzIHJlZ2lzdGVyICgxNiBiaXQgY29udGFpbmVyKQorICogQHJldHVybnM6IDggYml0 IGRhdGEgZnJvbSBURSByZWdpc3RlcgorICoqLworc3RhdGljIHU4IGR3X2RwaHlfdGVfcmVhZChz dHJ1Y3QgZHdfZHBoeSAqZHBoeSwgdTE2IGFkZHIpCit7CisJdTMyIGRhdGE7CisKKwkvKiBGb3Ig d3JpdGluZyB0aGUgNC1iaXQgdGVzdGNvZGUgTVNCcyAqLworCisJLyogRW5zdXJlIHRoYXQgdGVz dGNsayBhbmQgdGVzdGVuIGlzIHNldCB0byBsb3cgKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBo eS0+cmZfY2ZnMVtURVNUX0NMS10sIDApOworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9j ZmcxW1RFU1RfRU5dLCAwKTsKKworCS8qIFNldCB0ZXN0ZW4gdG8gaGlnaCAqLworCXJlZ21hcF9m aWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RFU1RfRU5dLCAxKTsKKworCS8qIFNldCB0ZXN0Y2xr IHRvIGhpZ2ggKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0NMS10s IDEpOworCisJLyogUGxhY2UgMHgwMCBpbiB0ZXN0ZGluICovCisJcmVnbWFwX2ZpZWxkX3dyaXRl KGRwaHktPnJmX2NmZzFbVEVTVF9JTl0sIDApOworCisJLyoKKwkgKiBTZXQgdGVzdGNsayB0byBs b3cgKHdpdGggdGhlIGZhbGxpbmcgZWRnZSBvbiB0ZXN0Y2xrLCB0aGUgdGVzdGRpbiBzaWduYWwK KwkgKiBjb250ZW50IGlzIGxhdGNoZWQgaW50ZXJuYWxseSkKKwkgKi8KKwlyZWdtYXBfZmllbGRf d3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0NMS10sIDApOworCisJLyogU2V0IHRlc3RlbiB0byBs b3cgKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0VOXSwgMCk7CisK KwkvKiBQbGFjZSB0aGUgOC1iaXQgd29yZCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXN0Y29kZSBN U0JzIGluIHRlc3RkaW4gKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNU X0lOXSwgKGFkZHIgPj4gOCkpOworCisJLyogU2V0IHRlc3RjbGsgdG8gaGlnaCAqLworCXJlZ21h cF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RFU1RfQ0xLXSwgMSk7CisKKwkvKiBGb3Igd3Jp dGluZyB0aGUgOC1iaXQgdGVzdGNvZGUgTFNCcyAqLworCisJLyogU2V0IHRlc3RjbGsgdG8gbG93 ICovCisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbVEVTVF9DTEtdLCAwKTsKKwor CS8qIFNldCB0ZXN0ZW4gdG8gaGlnaCAqLworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9j ZmcxW1RFU1RfRU5dLCAxKTsKKworCS8qIFNldCB0ZXN0Y2xrIHRvIGhpZ2ggKi8KKwlyZWdtYXBf ZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtURVNUX0NMS10sIDEpOworCisJLyogUGxhY2UgdGhl IDgtYml0IHdvcmQgdGVzdCBkYXRhIGluIHRlc3RkaW4gKi8KKwlyZWdtYXBfZmllbGRfd3JpdGUo ZHBoeS0+cmZfY2ZnMVtURVNUX0lOXSwgKGFkZHIgJiAweGZmKSk7CisKKwkvKgorCSAqIFNldCB0 ZXN0Y2xrIHRvIGxvdyAod2l0aCB0aGUgZmFsbGluZyBlZGdlIG9uIHRlc3RjbGssIHRoZSB0ZXN0 ZGluIHNpZ25hbAorCSAqIGNvbnRlbnQgaXMgbGF0Y2hlZCBpbnRlcm5hbGx5KQorCSAqLworCXJl Z21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RFU1RfQ0xLXSwgMCk7CisKKwkvKiBTZXQg dGVzdGVuIHRvIGxvdyAqLworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RFU1Rf RU5dLCAwKTsKKworCXJlZ21hcF9maWVsZF9yZWFkKGRwaHktPnJmX2NmZzFbVEVTVF9PVVRdLCAm ZGF0YSk7CisKKwlyZXR1cm4gKHU4KWRhdGE7Cit9CisKKy8qKgorICogZHdfZHBoeV9jb25maWd1 cmUgLSBjb25maWd1cmUgdGhlIEQtUEhZCisgKgorICogQHBoeTogcG9pbnRlciB0byB0aGUgcGh5 IGRhdGEgc3RydWN0dXJlCisgKiBAb3B0czogcG9pbnRlciB0byB0aGUgcGh5IGNvbmZpZ3VyYXRp b24gb3B0aW9ucworICogQHJldHVybnMgMCBpZiBzdWNjZXNzIGVsc2UgYXBwcm9wcmlhdGUgZXJy b3IgY29kZQorICoKKyAqKi8KK3N0YXRpYyBpbnQgZHdfZHBoeV9jb25maWd1cmUoc3RydWN0IHBo eSAqcGh5LCB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMgKm9wdHMpCit7CisJc3RydWN0IGR3X2Rw aHkgKmRwaHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCWRwaHktPmhzX2Nsa19yYXRlID0g b3B0cy0+bWlwaV9kcGh5LmhzX2Nsa19yYXRlOworCWRldl9kYmcoZHBoeS0+ZGV2LCAiaHNfY2xr X3JhdGU9JWxkXG4iLCBkcGh5LT5oc19jbGtfcmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoq CisgKiBkd19kcGh5X3Bvd2VyX29uXzFwMiAtIHBvd2VyIG9uIHRoZSBEUEhZIHZlcnNpb24gMS4y CisgKgorICogQHBoeTogcG9pbnRlciB0byB0aGUgcGh5IGRhdGEgc3RydWN0dXJlCisgKiBAcmV0 dXJucyAwIGlmIHN1Y2Nlc3MgZWxzZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlCisgKgorICoqLwor c3RhdGljIGludCBkd19kcGh5X3Bvd2VyX29uXzFwMihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3Ry dWN0IGR3X2RwaHkgKmRwaHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCXVpbnQ4X3QgY291 bnRlcl9mb3JfZGVzX2VuX2NvbmZpZ19pZl9ydyA9IDB4MTsKKwl1OCByYW5nZSA9IDA7CisKKwlm b3IgKHJhbmdlID0gMDsKKwkgICAgIChyYW5nZSA8IGRwaHktPmR0X2RhdGEtPnRhYmxlX3NpemUg LSAxKSAmJgorCSAgICAgKChkcGh5LT5oc19jbGtfcmF0ZSkgPiBkcGh5LT5kdF9kYXRhLT50YWJs ZVtyYW5nZV0uZnJlcSk7CisJICAgICByYW5nZSsrKQorCQk7CisKKwkvKiBpbiBjYXNlIHJlcXVl c3RlZCBoc19jbGtfcmF0ZSBpcyBvdXQgb2YgcmFuZ2UsIHJldHVybiAtRUlOVkFMICovCisJaWYg KHJhbmdlID49IGRwaHktPmR0X2RhdGEtPnRhYmxlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOwor CisJZGV2X2RiZyhkcGh5LT5kZXYsICIxMmJpdDogUEhZIEdFTiAzOiBGcmVxOiAlbGQgJXhcbiIs IGRwaHktPmhzX2Nsa19yYXRlLAorCQkgcmFuZ2VfZ2VuM1tyYW5nZV0uaHNmcmVncmFuZ2UpOwor CisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbRFBIWV9SU1RaXSwgMCk7CisJcmVn bWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzFbUEhZX1NIVVRET1dOWl0sIDApOworCXJlZ21h cF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1RFU1RfQ0xSXSwgMCk7CisJcmVnbWFwX2ZpZWxk X3dyaXRlKGRwaHktPnJmX2NmZzFbVEVTVF9DTFJdLCAxKTsKKwlyZWdtYXBfZmllbGRfd3JpdGUo ZHBoeS0+cmZfY2ZnMVtURVNUX0NMUl0sIDApOworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5y Zl9jZmcyW0NGR19DTEtfRlJFUV9SQU5HRV0sIDB4MjgpOworCWR3X2RwaHlfdGVfd3JpdGUoZHBo eSwgUlhfU1lTXzEsCisJCQkgZHBoeS0+ZHRfZGF0YS0+dGFibGVbcmFuZ2VdLmhzZnJlZ3Jhbmdl KTsKKwlkd19kcGh5X3RlX3dyaXRlKGRwaHksIFJYX1NZU18wLCAweDIwKTsKKwlkd19kcGh5X3Rl X3dyaXRlKGRwaHksIFJYX1JYX1NUQVJUVVBfT1ZSXzIsCisJCQkgKHU4KWRwaHktPmR0X2RhdGEt PnRhYmxlW3JhbmdlXS5vc2NfZnJlcV90YXJnZXQpOworCWR3X2RwaHlfdGVfd3JpdGUoZHBoeSwg UlhfUlhfU1RBUlRVUF9PVlJfMywKKwkJCSAodTgpKGRwaHktPmR0X2RhdGEtPnRhYmxlW3Jhbmdl XS5vc2NfZnJlcV90YXJnZXQgPj4KKwkJCSAgICAgIDgpKTsKKwlkd19kcGh5X3RlX3dyaXRlKGRw aHksIDB4ZTQsCisJCQkgKGNvdW50ZXJfZm9yX2Rlc19lbl9jb25maWdfaWZfcncgPDwgNCkgfCAw YjEpOworCisJZHdfZHBoeV90ZV93cml0ZShkcGh5LCBSWF9SWF9TVEFSVFVQX09WUl8xLCAweDAx KTsKKwlkd19kcGh5X3RlX3dyaXRlKGRwaHksIFJYX1JYX1NUQVJUVVBfT1ZSXzAsIDB4ODApOwor CisJcmVnbWFwX2ZpZWxkX3dyaXRlKGRwaHktPnJmX2NmZzJbQkFTRV9ESVJfMF0sIDEpOworCXJl Z21hcF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcyW0VOQUJMRV9DTEtdLCAxKTsKKwlyZWdtYXBf ZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMltGT1JDRV9SWF9NT0RFXSwgMHgwKTsKKworCXJlZ21h cF9maWVsZF93cml0ZShkcGh5LT5yZl9jZmcxW1BIWV9TSFVURE9XTlpdLCAxKTsKKwlyZWdtYXBf ZmllbGRfd3JpdGUoZHBoeS0+cmZfY2ZnMVtEUEhZX1JTVFpdLCAxKTsKKworCXJldHVybiAwOwor fQorCisvKioKKyAqIGR3X2RwaHlfcG93ZXJfb2ZmIC0gcG93ZXIgb2ZmIHRoZSBEUEhZCisgKgor ICogQHBoeTogcG9pbnRlciB0byB0aGUgcGh5IGRhdGEgc3RydWN0dXJlCisgKiBAcmV0dXJucyAw IGlmIHN1Y2Nlc3MgZWxzZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlCisgKgorICoqLworc3RhdGlj IGludCBkd19kcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IGR3X2Rw aHkgKmRwaHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCXJlZ21hcF9maWVsZF93cml0ZShk cGh5LT5yZl9jZmcxW0RQSFlfUlNUWl0sIDApOworCXJlZ21hcF9maWVsZF93cml0ZShkcGh5LT5y Zl9jZmcxW1BIWV9TSFVURE9XTlpdLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkd19k cGh5X29wc18xcDIgLSBQSFkgb3BlcmF0aW9ucyBmb3IgRFdDIERQSFkgdjEuMgorICogQGNvbmZp Z3VyZTogQ29uZmlndXJlcyBEUEhZIHRpbWluZyBhbmQgb3BlcmF0aW9uIHBhcmFtZXRlcnMKKyAq IEBwb3dlcl9vbjogUG93ZXJzIG9uIHRoZSBEUEhZIHVzaW5nIHYxLjIgc3BlY2lmaWMgc2VxdWVu Y2UKKyAqIEBwb3dlcl9vZmY6IFBvd2VycyBvZmYgdGhlIERQSFkKKyAqCisgKiovCitzdGF0aWMg Y29uc3Qgc3RydWN0IHBoeV9vcHMgZHdfZHBoeV9vcHNfMXAyID0geworCS5jb25maWd1cmUgPSBk d19kcGh5X2NvbmZpZ3VyZSwKKwkucG93ZXJfb24gPSBkd19kcGh5X3Bvd2VyX29uXzFwMiwKKwku cG93ZXJfb2ZmID0gZHdfZHBoeV9wb3dlcl9vZmYsCit9OworCisvKioKKyAqIGR3X2RwaHlfMXAy IC0gRFdDIERQSFkgdjEuMiBjb25maWd1cmF0aW9uIGluc3RhbmNlCisgKiBAdGFibGU6IFBvaW50 cyB0byByYW5nZV9nZW4zIHRpbWluZyBwYXJhbWV0ZXJzIHRhYmxlCisgKiBAdGFibGVfc2l6ZTog U2l6ZSBvZiByYW5nZV9nZW4zIHRhYmxlIGNhbGN1bGF0ZWQgYXQgY29tcGlsZSB0aW1lCisgKiBA cGh5X29wczogUG9pbnRzIHRvIHYxLjIgc3BlY2lmaWMgUEhZIG9wZXJhdGlvbnMgc3RydWN0dXJl CisgKgorICoqLworc3RydWN0IGR0X2RhdGFfZHdfZHBoeSBkd19kcGh5XzFwMiA9IHsKKwkudGFi bGUgPSByYW5nZV9nZW4zLAorCS50YWJsZV9zaXplID0gQVJSQVlfU0laRShyYW5nZV9nZW4zKSwK KwkucGh5X29wcyA9ICZkd19kcGh5X29wc18xcDIsCit9OworCisvKioKKyAqIGR3X2RwaHlfcmVn bWFwX2NmZzEgLSBSZWdpc3RlciBtYXAgY29uZmlndXJhdGlvbiBmb3IgRFcgRFBIWQorICogQHJl Z19iaXRzOiBXaWR0aCBvZiByZWdpc3RlciBhZGRyZXNzIGluIGJpdHMgKDMyKQorICogQHZhbF9i aXRzOiBXaWR0aCBvZiByZWdpc3RlciB2YWx1ZSBpbiBiaXRzICgzMikKKyAqIEByZWdfc3RyaWRl OiBOdW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiByZWdpc3RlcnMgKDQpCisgKiBAbmFtZTogTmFtZSBp ZGVudGlmaWVyIGZvciB0aGlzIHJlZ2lzdGVyIG1hcAorICogQGZhc3RfaW86IEZsYWcgdG8gaW5k aWNhdGUgZmFzdCBJL08gb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkCisgKgorICoqLworc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGR3X2RwaHlfcmVnbWFwX2NmZzEgPSB7CisJLnJl Z19iaXRzID0gMzIsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5uYW1l ID0gImR3LWRocHktY2ZnMSIsCisJLmZhc3RfaW8gPSB0cnVlLAorfTsKKworLyoqCisgKiBkd19k cGh5X3JlZ21hcF9jZmcyIC0gUmVnaXN0ZXIgbWFwIGNvbmZpZ3VyYXRpb24gZm9yIERXIERQSFkK KyAqIEByZWdfYml0czogV2lkdGggb2YgcmVnaXN0ZXIgYWRkcmVzcyBpbiBiaXRzICgzMikKKyAq IEB2YWxfYml0czogV2lkdGggb2YgcmVnaXN0ZXIgdmFsdWUgaW4gYml0cyAoMzIpCisgKiBAcmVn X3N0cmlkZTogTnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gcmVnaXN0ZXJzICg0KQorICogQG5hbWU6 IE5hbWUgaWRlbnRpZmllciBmb3IgdGhpcyByZWdpc3RlciBtYXAKKyAqIEBmYXN0X2lvOiBGbGFn IHRvIGluZGljYXRlIGZhc3QgSS9PIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZAorICoKKyAqKi8K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBkd19kcGh5X3JlZ21hcF9jZmcyID0g eworCS5yZWdfYml0cyA9IDMyLAorCS52YWxfYml0cyA9IDMyLAorCS5yZWdfc3RyaWRlID0gNCwK KwkubmFtZSA9ICJkdy1kaHB5LWNmZzIiLAorCS5mYXN0X2lvID0gdHJ1ZSwKK307CisKKy8qKgor ICogZHdfZHBoeV9wcm9iZSAtIFByb2JlIGFuZCBpbml0aWFsaXplIERXIERQSFkgZGV2aWNlCisg KiBAcGRldjogUGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIKKyAqIFJldHVybjogMCBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqCisgKiovCitzdGF0aWMgaW50IGR3 X2RwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdf ZHBoeSAqZHBoeTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKKwlpbnQg cmV0OworCisJZHBoeSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRwaHkpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWRwaHkpCisJCXJldHVybiAtRU5PTUVNOworCisJZHBoeS0+ZHRf ZGF0YSA9CisJCShzdHJ1Y3QgZHRfZGF0YV9kd19kcGh5ICopb2ZfZGV2aWNlX2dldF9tYXRjaF9k YXRhKCZwZGV2LT5kZXYpOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBkcGh5KTsKKwlk cGh5LT5kZXYgPSAmcGRldi0+ZGV2OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBk ZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkcGh5LT5pb21lbV9jZmcxID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihkcGh5LT5pb21lbV9jZmcx KSkKKwkJcmV0dXJuIFBUUl9FUlIoZHBoeS0+aW9tZW1fY2ZnMSk7CisKKwlkcGh5LT5yZWdtYXBf Y2ZnMSA9CisJCWRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGRwaHktPmlvbWVtX2NmZzEsICZk d19kcGh5X3JlZ21hcF9jZmcxKTsKKwlpZiAoSVNfRVJSKGRwaHktPnJlZ21hcF9jZmcxKSkKKwkJ cmV0dXJuIFBUUl9FUlIoZHBoeS0+cmVnbWFwX2NmZzEpOworCisJcmV0ID0gZGV2bV9yZWdtYXBf ZmllbGRfYnVsa19hbGxvYyhkZXYsIGRwaHktPnJlZ21hcF9jZmcxLCBkcGh5LT5yZl9jZmcxLAor CQkJCQkgICBkd19kcGh5X3YxXzJfY2ZnMSwgRFdfRFBIWV9SRl9DRkcxX01BWCk7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2MgUkZcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09V UkNFX01FTSwgMSk7CisJZHBoeS0+aW9tZW1fY2ZnMiA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm cGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoZHBoeS0+aW9tZW1fY2ZnMikpCisJCXJldHVy biBQVFJfRVJSKGRwaHktPmlvbWVtX2NmZzIpOworCisJZHBoeS0+cmVnbWFwX2NmZzIgPSBkZXZt X3JlZ21hcF9pbml0X21taW8oZGV2LCBkcGh5LT5pb21lbV9jZmcyLAorCQkJCQkJICZkd19kcGh5 X3JlZ21hcF9jZmcyKTsKKwlpZiAoSVNfRVJSKGRwaHktPnJlZ21hcF9jZmcyKSkKKwkJcmV0dXJu IFBUUl9FUlIoZHBoeS0+cmVnbWFwX2NmZzIpOworCisJcmV0ID0gZGV2bV9yZWdtYXBfZmllbGRf YnVsa19hbGxvYyhkZXYsIGRwaHktPnJlZ21hcF9jZmcyLCBkcGh5LT5yZl9jZmcyLAorCQkJCQkg ICBkd19kcGh5X3YxXzJfY2ZnMiwgRFdfRFBIWV9SRl9DRkcyX01BWCk7CisJaWYgKHJldCA8IDAp IHsKKwkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgYWxsb2MgUkZcbiIpOworCQlyZXR1cm4gcmV0 OworCX0KKworCWRwaHktPnBoeSA9IGRldm1fcGh5X2NyZWF0ZSgmcGRldi0+ZGV2LCBOVUxMLCBk cGh5LT5kdF9kYXRhLT5waHlfb3BzKTsKKwlpZiAoSVNfRVJSKGRwaHktPnBoeSkpIHsKKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIFBIWVxuIik7CisJCXJldHVybiBQVFJfRVJSKGRw aHktPnBoeSk7CisJfQorCisJcGh5X3NldF9kcnZkYXRhKGRwaHktPnBoeSwgZHBoeSk7CisJcGh5 X3Byb3ZpZGVyID0KKwkJZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoJnBkZXYtPmRldiwg b2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBoeV9wcm92 aWRlcik7Cit9CisKKy8qKgorICogZHdfZHBoeV9vZl9tYXRjaCAtIERldmljZSB0cmVlIG1hdGNo IHRhYmxlIGZvciBEVyBEUEhZCisgKiBAY29tcGF0aWJsZTogQ29tcGF0aWJsZSBzdHJpbmcgdG8g bWF0Y2ggZGV2aWNlIHRyZWUgbm9kZQorICogQGRhdGE6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlv biBkYXRhIGZvciBtYXRjaGVkIGRldmljZQorICoKKyAqIFRhYmxlIG9mIGNvbXBhdGlibGUgc3Ry aW5ncyBhbmQgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIGRhdGEKKyAqIGZvciBzdXBwb3J0ZWQg RFcgRFBIWSB2YXJpYW50cy4KKyAqIEN1cnJlbnRseSBzdXBwb3J0czoKKyAqIC0gRFcgRFBIWSB2 MS4yICgic25wcyxkdy1kcGh5LTFwMiIpCisgKgorICoqLworc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgZHdfZHBoeV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic25w cyxkdy1kcGh5LTFwMiIsIC5kYXRhID0gJmR3X2RwaHlfMXAyIH0sCisJeyAvKiBzZW50aW5lbCAq LyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X2RwaHlfb2ZfbWF0Y2gpOworCisv KioKKyAqIGR3X2RwaHlfcGxhdGZvcm1fZHJpdmVyIC0gUGxhdGZvcm0gZHJpdmVyIHN0cnVjdHVy ZSBmb3IgRFcgRFBIWQorICogQHByb2JlOiBQb2ludGVyIHRvIHByb2JlIGZ1bmN0aW9uIGNhbGxl ZCBvbiBkZXZpY2UgZGlzY292ZXJ5CisgKiBAZHJpdmVyOiBDb3JlIGRyaXZlciBzdHJ1Y3R1cmUg Y29udGFpbmluZzoKKyAqICAgICAgICAgLSBuYW1lOiBEcml2ZXIgbmFtZSB1c2VkIGZvciBtYXRj aGluZyBhbmQgZGVidWdnaW5nCisgKiAgICAgICAgIC0gb2ZfbWF0Y2hfdGFibGU6IFRhYmxlIG9m IGNvbXBhdGlibGUgZGV2aWNlIHRyZWUgbWF0Y2hlcworICoKKyAqKi8KK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIGR3X2RwaHlfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJPSBk d19kcGh5X3Byb2JlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAiZHctZHBoeSIsCisJCS5v Zl9tYXRjaF90YWJsZQk9IGR3X2RwaHlfb2ZfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfcGxhdGZv cm1fZHJpdmVyKGR3X2RwaHlfcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiS2Fy dGhpayBQb2R1dmFsIDxrcG9kdXZhbEBsYWIxMjYuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSmFz b24gWGlvbmcgPGp5eGlvbmdAYW1hem9uLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIk1pZ3VlbCBM b3BlcyA8bWlndWVsLmxvcGVzQHN5bm9wc3lzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi RFcgRC1QSFkgUlggRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tCjIuNDMuMAoK Ci0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=