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 834ECCDB474 for ; Tue, 17 Oct 2023 07:07:15 +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:References:In-Reply-To: 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: List-Owner; bh=uqrT30Ruswrz+cmnKyzLpnyRSJXuY6CddFB51UzFxgc=; b=cjUMfoHAulsldK H6sz0lWF9McKcy+hWa8RW6RvNO1QjioHewE80IGm3B3ZY2FxUBJHxFfrUY1RIghVIzuZOwI9B0sST Mtreyn58P524Kzvv6OS7cQsCgSMXyFRDV330YQpoAor5/ZYYrHtQDJAflFYC3wUoKnINX76bpl/pz Qg+rXc4QZIBTjj/82qtC8ylj0mZp6FElMz7ZYesGyApMhL85j4GMdWrgR6FUVoH3ZWz0qWTBL/6To ra8b1CKJtNZREM6Gu48VrZn5IY2k3s9+F2rxkhn1EWL3TRNkcBQ1PeEVNfoJ2/yF3MeJfmJ0FgGJP 1YNo6gKEsgHYS1+AN6/g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qseA7-00BWKL-1B; Tue, 17 Oct 2023 07:06:43 +0000 Received: from mail-he1eur04on060f.outbound.protection.outlook.com ([2a01:111:f400:fe0d::60f] helo=EUR04-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qseA0-00BWEM-1V; Tue, 17 Oct 2023 07:06:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k6mtIecYaIG8cAps8voVMupO/LDS4RoKO8Qgn5saA3sBbPmcVn2D2Pm5SiAmTi7OqAdkVwKymUbyd/8wo2bo5EuEjk2QMYdm/9LPshrL8dWPNKAtWXcDdaDzI7wv8xWZQmMG2fn+jQH3f6clSfvRQcTKmI+xNmJIxIpd1Gbbc3b1xx6MHjdF/MrW+Z2v7BooMsqSRaYpo6vIp0YOpDNLsg5iMNQp74vE9CtH/o7Gb3ZPqXTL/MTaMAWPWSRacGgmP4ZEd1d2Fi6tNQok4fuQq+6RZhVDNW0lPEF7k26pAaT75MPiscXZ20ZfBmyuxafdLO6LL3ibkPGVp2j0kGPXAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OFk/CMKs7b18ObAP+f7aw5DIQjjejOICD7ytKIwpHEM=; b=VdRwaZv5msoWfwYEuuqI3Mhnir3cQsmBkG7y4BAr9vGmcnADlbU2xWBuRleKFwusjTRTPHjjSiAf75J/erpVuiNAYrnlb/pxu2MqEQ64i/ZJ+Bp/Zn+dADtMrygMeYCsuqRf2xuNbQjdWf7om0SwYjdVmuZ0EMXgb5BL7vmCffe5RZK1heQW3lnOfN+J3vYWcAUjU2GpZybhLyeYVviavI7kn9qOC1B7n3eWPVlV0m060urKG5r5xFNsOl9mlSmlyahPIMkTocrCr/+ALnd5NqOWPlIa7ToHBF+rsnRxEmLhQhUBHnopH/d9vWfuTmRyD0029mVDoaSLBYhO6HCU/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OFk/CMKs7b18ObAP+f7aw5DIQjjejOICD7ytKIwpHEM=; b=YoPV5OC1QDIT1MBzNsd2izhTI5l6bRPs6SVBkGjSGE52nX2Xb/ogmyZrQd7zxwKIh4jLp9B17dVBENm4m5IZ54g9oUN8yUmFa3MAo+R7D9EiJpy86puM9ru85Vh8Lhq5ZeQvYWib4f+7TP5mbIdMKcEEnb2kySC0fdJbPq0hzOc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9448.eurprd04.prod.outlook.com (2603:10a6:102:2b1::21) by VI1PR04MB6974.eurprd04.prod.outlook.com (2603:10a6:803:133::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.35; Tue, 17 Oct 2023 07:06:31 +0000 Received: from PAXPR04MB9448.eurprd04.prod.outlook.com ([fe80::3b23:7c3d:fd28:c3f2]) by PAXPR04MB9448.eurprd04.prod.outlook.com ([fe80::3b23:7c3d:fd28:c3f2%7]) with mapi id 15.20.6863.043; Tue, 17 Oct 2023 07:06:31 +0000 From: Sandor Yu To: dmitry.baryshkov@linaro.org, andrzej.hajda@intel.com, neil.armstrong@linaro.org, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, airlied@gmail.com, daniel@ffwll.ch, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, vkoul@kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org Cc: kernel@pengutronix.de, linux-imx@nxp.com, Sandor.yu@nxp.com, oliver.brown@nxp.com, alexander.stein@ew.tq-group.com, sam@ravnborg.org Subject: [PATCH v11 6/7] phy: freescale: Add DisplayPort PHY driver for i.MX8MQ Date: Tue, 17 Oct 2023 15:04:02 +0800 Message-Id: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-ClientProxiedBy: SG2PR03CA0122.apcprd03.prod.outlook.com (2603:1096:4:91::26) To PAXPR04MB9448.eurprd04.prod.outlook.com (2603:10a6:102:2b1::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9448:EE_|VI1PR04MB6974:EE_ X-MS-Office365-Filtering-Correlation-Id: a670c6fa-a375-4e90-ad34-08dbcedf973b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OQrq/3luaa+6ujTJS6WN1DrE2JiMPXAI47M+cSqJ7PfrYBAc1XUNR+c+g6IJFtI+YpUB8RLGYsN6Xq7nE5bqdq3IkSnmdebs6UM1kqIZ7ZlRFE3TdpdCPvaZ82IxeiZzzYlXzkUpie/HDk0uhZVLeSqxolLXm5ux9USNFYckiC/Ubeth68BcRYddoUG/BEbaXHwQf+tSASqSFhecxJWGGXi2U4TtNk7vxhQtQLSjRvzDaPTZF2vOoUiixiMx2NIGu98of5EnQ/YgAFMotdLrY8lWpxp5emVG554y34omoh/me7ZoE+pyfGhwPkLqpY0JALLEP27Jrc6VssDYub9s4eiMaPyFyluGvj3IMZ/1J8OUNPd2TCKgfvCUUSb42MjeSEI6TgEKgBrNUtshG+Ec4KfAG5jG7k29lZrbpqLo31rwd0pXxaEGJJLkyU2WgsaIIIohfhkJ7F04BlW537XUW8kYWJkuvFE/oLX37fGG170NKm5y56JHRzEPZnhnQ9+dL7vNeywATPoG9wk78uBbiGorrzGg81iNKxIwIIjl/lfWxFlQhAT91JH6IvskVq9ZNKC6wfW9UvNPwaTLgPldaQPu3o+69m3wM1JyqMDhLKFyZNNZw671lEesoBYNTy4m2h++fZslASALWq/2k8z/Ww== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9448.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(396003)(366004)(376002)(39860400002)(136003)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(86362001)(38350700005)(36756003)(26005)(478600001)(6486002)(2906002)(6506007)(5660300002)(41300700001)(6666004)(921005)(38100700002)(2616005)(316002)(8936002)(66476007)(8676002)(66556008)(66946007)(52116002)(4326008)(83380400001)(30864003)(6512007)(7416002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ck5kWFg2ZlVmL0xrWnI5b281blNPY3BUNEhLcjNYSFhQbnBwZjlrbHRXUWVM?= =?utf-8?B?b1B0OUVINkVKYzU5UWdrS0pVZHFoSHNqclNJYkFpNWtHVDZWbS9kdDlWVDlz?= =?utf-8?B?UjJ1NGxlVlAzb2dHMTc0dkltS3lUbmREV1BOcGk3a2VQMmpqWXFxcTVVVmZP?= =?utf-8?B?RXhOYm95TVlBaVFuU3FWVk9mcGxvSmJPSFEwTU05MHppQjdGYXpVdEV4YkNZ?= =?utf-8?B?UzlqTXZOZVVPUXFkSjR4dSt5QU5ubUJLdFF0QjhmK29BbVJFcUJsSmNFQjhn?= =?utf-8?B?MVZrcU5JSVUzOWdmdzNkcHBHeWtSTkVZZ3c1ak1yVGxJQm5RVWFrZUhWejh3?= =?utf-8?B?dHdseHhCZmk1d3JhM01WUERpM09QY29TSWF6OURJUHliQzdZVHdzZEdqcVRZ?= =?utf-8?B?TUJINXFoZHBPWjBmUCsvczMvdFYyZmV3eVFzSzhaVGFvU3d3aEtadWxGa1Z4?= =?utf-8?B?QkJqb2FCQnVWREhWbTBlRjNXT25WQUtqVCtMaG1JVVBqY2pkeDJtOGFrTldp?= =?utf-8?B?TVZ6dU92U3I4NlhMaE5Bbkc2aHBvZ1I1a1Nmam9ZbzYzQktRT3B3dGhqejd3?= =?utf-8?B?VXdPSDRkQlhBQUFtbVFXdm5jekFkK0RtWTBBWkxrSEozUVkwZlZZN2xITWx1?= =?utf-8?B?dTFHZklTNEh4Tm8reUNkY2paSW5waU5ZdnZuMlNxeEU3OWE1c1lRQTZmbkpn?= =?utf-8?B?T2lhc1ZhOUYzMkVJVkJ4Wjd3ZnpGa05TRVZCMngzSXJRSzJ1REhDNXdGTkNY?= =?utf-8?B?SDI4TE1CUWRMVGNIcmROam45S0dLb09OU3ErY1BuVXFJdnNzaTVkTERKakZO?= =?utf-8?B?eHFaUnBjNW1nRVNJK0lKVmVlVnBrS29hQlI5VXdjWmFVSCs5SHBYNVN0Z0JI?= =?utf-8?B?SUJKa092S0VuMEdQSXNjNllDdWNCbG5rM1Y2eXhXOVBmeVZvYSs5d2pBdUFM?= =?utf-8?B?bGdBbVU1bWtFVWRDTnpuUjNUSkdoai9aMFl1RFFtNTlhYnlaQmpIcThJM2pM?= =?utf-8?B?TElzdFBwdlQwcDFnakFRU3paSTAzQVZIR2VneGs0T1VURWwyYkF6Rko5NnlT?= =?utf-8?B?Z0tMTEVyRXVzK05nem95ZEp3L0lhRXZmT2E5KzNqQXJ1dnlNdjhmSUFIQU5S?= =?utf-8?B?d0E2NUhUMm1wYWszdHRMdjlUeVpvTkcrS2tmN2s2V3Q2aGVRdW9JdGxyektW?= =?utf-8?B?SXExNCtmV1BxM2VVVTBjYUtjbDFPSFJSdTVsUmFHVzFJOFVKTzBhVGRCTlFK?= =?utf-8?B?SHkyWnlqL2sxWGZic2lYSndvSk94cENlMTByWjIxNW5CNkVXZUJ4MDBZNHpU?= =?utf-8?B?dUpicEg0ZVA1ZzZNeWpqeURycE82bGNDOUVkU0hZbHd5c0VuSlVLeUtSY090?= =?utf-8?B?QTAyVytIYTRSZlVDU2RHVmpJcVNCNHJDcDNuWEZ0N0pYQTRMV2lMQi9SQVlX?= =?utf-8?B?TCttd3JmMHljaWRyazRBUytkT0NuUTMxaHZoQ25jV3Erd3NvblJvTzJwWkdu?= =?utf-8?B?a0hZL1NDM2dtZFpFa0VrRWM3bXhOSFQwRERkc2p0VVlzUjcxSWExcTkvVTNC?= =?utf-8?B?L1JOcS9zaWtVaG1vdnk2MXRsNzMxait2YlNndDcxcXViRnVMVWIrUmFrMGxi?= =?utf-8?B?cVVoMmYxSGs5OU9wK3dDZmpqY0swSnZTckdvMzBDSXJ6Zjg1aWlLbFlMais1?= =?utf-8?B?S1MvMnpFbXphTEhwd0lBZXBORWIwUGhVSE45b3oreXdqN2IwdEZwc1lVeVl4?= =?utf-8?B?TnZoS0lnUk9mdjJkNExTa1BiR2orZmZXU3h1MkhjQkkwRzk0NEVUUWlNT3l2?= =?utf-8?B?eWd6dHN4djY4SlAzL2ExNlFGeFd3MURPOXIyUFdVT2xEcURUdjYrajhKNWJW?= =?utf-8?B?MnBvOTZuT2tLdll5T0NxYXQwUDhtR05GQ25EeFI5QlpvbEp0MEtOMllvZVhC?= =?utf-8?B?K3BuTnRsN250OW1ORFc4emMyWEl5Z0xiT1AzMGdOTUw0aDZqYlZxVEhzdGU0?= =?utf-8?B?VVIvTE1FQ25JT2l6T2JKb0JKdWkxQ2w0NW5HNUwzSTNKZ21KVG1MUEJvNDh0?= =?utf-8?B?ZE9CeUdKRFhhbE5kZnY3dFY4c0U2YnROV2pReEVidTJzQUFwcmczUkIvcm41?= =?utf-8?Q?n7qynoHbB7ycTpsyaLLdLMEKE?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a670c6fa-a375-4e90-ad34-08dbcedf973b X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9448.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2023 07:06:31.6458 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eRD8AckUYpIkPoZgKsEKkCKVgajezDg5sHnV9pFL7u3YLvii0yOSPTGU08DXxgzsf5VzVnno1E0rVyontvcNJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6974 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231017_000636_679414_9041B203 X-CRM114-Status: GOOD ( 16.10 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 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+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWRkIENhZGVuY2UgSERQLVRYIERpc3BsYXlQb3J0IFBIWSBkcml2ZXIgZm9yIGkuTVg4TVEKCkNh ZGVuY2UgSERQLVRYIFBIWSBjb3VsZCBiZSBwdXQgaW4gZWl0aGVyIERQIG1vZGUgb3IKSERNSSBt b2RlIGJhc2Ugb24gdGhlIGNvbmZpZ3VyYXRpb24gY2hvc2VuLgpEaXNwbGF5UG9ydCBQSFkgbW9k ZSBpcyBjb25maWd1cmF0ZWQgaW4gdGhlIGRyaXZlci4KClNpZ25lZC1vZmYtYnk6IFNhbmRvciBZ dSA8U2FuZG9yLnl1QG54cC5jb20+Ci0tLQp2OS0+djExOgogKk5vIGNoYW5nZS4KCiBkcml2ZXJz L3BoeS9mcmVlc2NhbGUvS2NvbmZpZyAgICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL3BoeS9m cmVlc2NhbGUvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL3BoeS9mcmVlc2Nh bGUvcGh5LWZzbC1pbXg4bXEtZHAuYyB8IDcyMCArKysrKysrKysrKysrKysrKysrKysrCiAzIGZp bGVzIGNoYW5nZWQsIDczMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz L3BoeS9mcmVlc2NhbGUvS2NvbmZpZyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnCmlu ZGV4IDg1Mzk1OGZiMmMwNjMuLmMzOTcwOWZkNzAwYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5 L2ZyZWVzY2FsZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnCkBA IC0zNSw2ICszNSwxNiBAQCBjb25maWcgUEhZX0ZTTF9JTVg4TV9QQ0lFCiAJICBFbmFibGUgdGhp cyB0byBhZGQgc3VwcG9ydCBmb3IgdGhlIFBDSUUgUEhZIGFzIGZvdW5kIG9uCiAJICBpLk1YOE0g ZmFtaWx5IG9mIFNPQ3MuCiAKK2NvbmZpZyBQSFlfRlNMX0lNWDhNUV9EUAorCXRyaXN0YXRlICJG cmVlc2NhbGUgaS5NWDhNUSBEUCBQSFkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE9GICYmIEhBU19J T01FTQorCWRlcGVuZHMgb24gQ09NTU9OX0NMSworCXNlbGVjdCBHRU5FUklDX1BIWQorCXNlbGVj dCBDRE5TX01IRFBfSEVMUEVSCisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCB0aGUg Q2FkZW5jZSBIRFBUWCBEUCBQSFkgZHJpdmVyCisJICBvbiBpLk1YOE1RIFNPQy4KKwogZW5kaWYK IAogY29uZmlnIFBIWV9GU0xfTFlOWF8yOEcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L2ZyZWVz Y2FsZS9NYWtlZmlsZSBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmlsZQppbmRleCBjZWRi MzI4YmM0ZDI4Li40N2U1Mjg1MjA5ZmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2Nh bGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL01ha2VmaWxlCkBAIC0xLDQg KzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CitvYmotJChD T05GSUdfUEhZX0ZTTF9JTVg4TVFfRFApCQkrPSBwaHktZnNsLWlteDhtcS1kcC5vCiBvYmotJChD T05GSUdfUEhZX0ZTTF9JTVg4TVFfVVNCKQkrPSBwaHktZnNsLWlteDhtcS11c2Iubwogb2JqLSQo Q09ORklHX1BIWV9NSVhFTF9MVkRTX1BIWSkJKz0gcGh5LWZzbC1pbXg4cW0tbHZkcy1waHkubwog b2JqLSQoQ09ORklHX1BIWV9NSVhFTF9NSVBJX0RQSFkpCSs9IHBoeS1mc2wtaW14OC1taXBpLWRw aHkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRw LmMgYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4bXEtZHAuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi41ZjBkN2RhMTZiNDIyCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OG1xLWRwLmMKQEAgLTAs MCArMSw3MjAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8q CisgKiBDYWRlbmNlIEhEUC1UWCBEaXNwbGF5IFBvcnQgSW50ZXJmYWNlIChEUCkgUEhZIGRyaXZl cgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgMjAyMyBOWFAgU2VtaWNvbmR1Y3RvciwgSW5j LgorICovCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGRybS9icmlkZ2Uv Y2Rucy1taGRwLWhlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxp bnV4L2lvcG9sbC5oPgorCisjZGVmaW5lIEFERFJfUEhZX0FGRQkweDgwMDAwCisKKy8qIFBIWSBy ZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ01OX1NTTV9CSUFTX1RNUgkJCTB4MDAyMgorI2RlZmluZSBD TU5fUExMU00wX1BMTEVOX1RNUgkJCTB4MDAyOQorI2RlZmluZSBDTU5fUExMU00wX1BMTFBSRV9U TVIJCQkweDAwMmEKKyNkZWZpbmUgQ01OX1BMTFNNMF9QTExWUkVGX1RNUgkJCTB4MDAyYgorI2Rl ZmluZSBDTU5fUExMU00wX1BMTExPQ0tfVE1SCQkJMHgwMDJjCisjZGVmaW5lIENNTl9QTExTTTBf VVNFUl9ERUZfQ1RSTAkJMHgwMDJmCisjZGVmaW5lIENNTl9QU01fQ0xLX0NUUkwJCQkweDAwNjEK KyNkZWZpbmUgQ01OX1BMTDBfVkNPQ0FMX1NUQVJUCQkJMHgwMDgxCisjZGVmaW5lIENNTl9QTEww X1ZDT0NBTF9JTklUX1RNUgkJMHgwMDg0CisjZGVmaW5lIENNTl9QTEwwX1ZDT0NBTF9JVEVSX1RN UgkJMHgwMDg1CisjZGVmaW5lIENNTl9QTEwwX0lOVERJVgkJCQkweDAwOTQKKyNkZWZpbmUgQ01O X1BMTDBfRlJBQ0RJVgkJCTB4MDA5NQorI2RlZmluZSBDTU5fUExMMF9ISUdIX1RIUgkJCTB4MDA5 NgorI2RlZmluZSBDTU5fUExMMF9EU01fRElBRwkJCTB4MDA5NworI2RlZmluZSBDTU5fUExMMF9T U19DVFJMMgkJCTB4MDA5OQorI2RlZmluZSBDTU5fSUNBTF9JTklUX1RNUgkJCTB4MDBjNAorI2Rl ZmluZSBDTU5fSUNBTF9JVEVSX1RNUgkJCTB4MDBjNQorI2RlZmluZSBDTU5fUlhDQUxfSU5JVF9U TVIJCQkweDAwZDQKKyNkZWZpbmUgQ01OX1JYQ0FMX0lURVJfVE1SCQkJMHgwMGQ1CisjZGVmaW5l IENNTl9UWFBVQ0FMX0lOSVRfVE1SCQkJMHgwMGU0CisjZGVmaW5lIENNTl9UWFBVQ0FMX0lURVJf VE1SCQkJMHgwMGU1CisjZGVmaW5lIENNTl9UWFBEQ0FMX0lOSVRfVE1SCQkJMHgwMGY0CisjZGVm aW5lIENNTl9UWFBEQ0FMX0lURVJfVE1SCQkJMHgwMGY1CisjZGVmaW5lIENNTl9JQ0FMX0FESl9J TklUX1RNUgkJCTB4MDEwMgorI2RlZmluZSBDTU5fSUNBTF9BREpfSVRFUl9UTVIJCQkweDAxMDMK KyNkZWZpbmUgQ01OX1JYX0FESl9JTklUX1RNUgkJCTB4MDEwNgorI2RlZmluZSBDTU5fUlhfQURK X0lURVJfVE1SCQkJMHgwMTA3CisjZGVmaW5lIENNTl9UWFBVX0FESl9JTklUX1RNUgkJCTB4MDEw YQorI2RlZmluZSBDTU5fVFhQVV9BREpfSVRFUl9UTVIJCQkweDAxMGIKKyNkZWZpbmUgQ01OX1RY UERfQURKX0lOSVRfVE1SCQkJMHgwMTBlCisjZGVmaW5lIENNTl9UWFBEX0FESl9JVEVSX1RNUgkJ CTB4MDEwZgorI2RlZmluZSBDTU5fRElBR19QTEwwX0ZCSF9PVlJECQkJMHgwMWMwCisjZGVmaW5l IENNTl9ESUFHX1BMTDBfRkJMX09WUkQJCQkweDAxYzEKKyNkZWZpbmUgQ01OX0RJQUdfUExMMF9P VlJECQkJMHgwMWMyCisjZGVmaW5lIENNTl9ESUFHX1BMTDBfVEVTVF9NT0RFCQkJMHgwMWM0Cisj ZGVmaW5lIENNTl9ESUFHX1BMTDBfVjJJX1RVTkUJCQkweDAxYzUKKyNkZWZpbmUgQ01OX0RJQUdf UExMMF9DUF9UVU5FCQkJMHgwMWM2CisjZGVmaW5lIENNTl9ESUFHX1BMTDBfTEZfUFJPRwkJCTB4 MDFjNworI2RlZmluZSBDTU5fRElBR19QTEwwX1BUQVRJU19UVU5FMQkJMHgwMWM4CisjZGVmaW5l IENNTl9ESUFHX1BMTDBfUFRBVElTX1RVTkUyCQkweDAxYzkKKyNkZWZpbmUgQ01OX0RJQUdfSFND TEtfU0VMCQkJMHgwMWUwCisjZGVmaW5lIENNTl9ESUFHX1BFUl9DQUxfQURKCQkJMHgwMWVjCisj ZGVmaW5lIENNTl9ESUFHX0NBTF9DVFJMCQkJMHgwMWVkCisjZGVmaW5lIENNTl9ESUFHX0FDWUEJ CQkJMHgwMWZmCisjZGVmaW5lIFhDVlJfUFNNX1JDVFJMCQkJCTB4NDAwMQorI2RlZmluZSBYQ1ZS X1BTTV9DQUxfVE1SCQkJMHg0MDAyCisjZGVmaW5lIFhDVlJfUFNNX0EwSU5fVE1SCQkJMHg0MDAz CisjZGVmaW5lIFRYX1RYQ0NfQ0FMX1NDTFJfTVVMVF8wCQkJMHg0MDQ3CisjZGVmaW5lIFRYX1RY Q0NfQ1BPU1RfTVVMVF8wMF8wCQkJMHg0MDRjCisjZGVmaW5lIFhDVlJfRElBR19QTExEUkNfQ1RS TAkJCTB4NDBlMAorI2RlZmluZSBYQ1ZSX0RJQUdfUExMRFJDX0NUUkwJCQkweDQwZTAKKyNkZWZp bmUgWENWUl9ESUFHX0hTQ0xLX1NFTAkJCTB4NDBlMQorI2RlZmluZSBYQ1ZSX0RJQUdfTEFORV9G Q01fRU5fTUdOX1RNUgkJMHg0MGYyCisjZGVmaW5lIFRYX1BTQ19BMAkJCQkweDQxMDAKKyNkZWZp bmUgVFhfUFNDX0ExCQkJCTB4NDEwMQorI2RlZmluZSBUWF9QU0NfQTIJCQkJMHg0MTAyCisjZGVm aW5lIFRYX1BTQ19BMwkJCQkweDQxMDMKKyNkZWZpbmUgVFhfUkNWREVUX0VOX1RNUgkJCTB4NDEy MgorI2RlZmluZSBUWF9SQ1ZERVRfU1RfVE1SCQkJMHg0MTIzCisjZGVmaW5lIFRYX0RJQUdfQkdS RUZfUFJFRFJWX0RFTEFZCQkweDQxZTcKKyNkZWZpbmUgVFhfRElBR19CR1JFRl9QUkVEUlZfREVM QVkJCTB4NDFlNworI2RlZmluZSBUWF9ESUFHX0FDWUFfMAkJCQkweDQxZmYKKyNkZWZpbmUgVFhf RElBR19BQ1lBXzEJCQkJMHg0M2ZmCisjZGVmaW5lIFRYX0RJQUdfQUNZQV8yCQkJCTB4NDVmZgor I2RlZmluZSBUWF9ESUFHX0FDWUFfMwkJCQkweDQ3ZmYKKyNkZWZpbmUgVFhfQU5BX0NUUkxfUkVH XzEJCQkweDUwMjAKKyNkZWZpbmUgVFhfQU5BX0NUUkxfUkVHXzIJCQkweDUwMjEKKyNkZWZpbmUg VFhfRElHX0NUUkxfUkVHXzEJCQkweDUwMjMKKyNkZWZpbmUgVFhfRElHX0NUUkxfUkVHXzIJCQkw eDUwMjQKKyNkZWZpbmUgVFhEQV9DWUFfQVVYREFfQ1lBCQkJMHg1MDI1CisjZGVmaW5lIFRYX0FO QV9DVFJMX1JFR18zCQkJMHg1MDI2CisjZGVmaW5lIFRYX0FOQV9DVFJMX1JFR180CQkJMHg1MDI3 CisjZGVmaW5lIFRYX0FOQV9DVFJMX1JFR181CQkJMHg1MDI5CisjZGVmaW5lIFJYX1BTQ19BMAkJ CQkweDgwMDAKKyNkZWZpbmUgUlhfUFNDX0NBTAkJCQkweDgwMDYKKyNkZWZpbmUgUEhZX0hEUF9N T0RFX0NUUkwJCQkweGMwMDgKKyNkZWZpbmUgUEhZX0hEUF9DTEtfQ1RMCQkJCTB4YzAwOQorI2Rl ZmluZSBQSFlfUE1BX0NNTl9DVFJMMQkJCTB4YzgwMAorCisvKiBQSFlfUE1BX0NNTl9DVFJMMSAq LworI2RlZmluZSBDTUFfUkVGX0NMS19TRUxfTUFTSwkJCUdFTk1BU0soNiwgNCkKKyNkZWZpbmUg Q01BX1JFRl9DTEtfUkNWX0VOX01BU0sJCQlCSVQoMykKKyNkZWZpbmUgQ01BX1JFRl9DTEtfUkNW X0VOCQkJMQorCisvKiBQSFlfSERQX0NMS19DVEwgKi8KKyNkZWZpbmUgUExMX0RBVEFfUkFURV9D TEtfRElWX01BU0sJCUdFTk1BU0soMTUsIDgpCisjZGVmaW5lIFBMTF9EQVRBX1JBVEVfQ0xLX0RJ Vl9IQlIJCTB4MjQKKyNkZWZpbmUgUExMX0RBVEFfUkFURV9DTEtfRElWX0hCUjIJCTB4MTIKKyNk ZWZpbmUgUExMX0NMS19FTl9BQ0sJCQkJQklUKDMpCisjZGVmaW5lIFBMTF9DTEtfRU4JCQkJQklU KDIpCisjZGVmaW5lIFBMTF9SRUFEWQkJCQlCSVQoMSkKKyNkZWZpbmUgUExMX0VOCQkJCQlCSVQo MCkKKworLyogQ01OX0RJQUdfSFNDTEtfU0VMICovCisjZGVmaW5lIEhTQ0xLMV9TRUxfTUFTSwkJ CQlHRU5NQVNLKDUsIDQpCisjZGVmaW5lIEhTQ0xLMF9TRUxfTUFTSwkJCQlHRU5NQVNLKDEsIDAp CisjZGVmaW5lIEhTQ0xLX1BMTDBfRElWMgkJCQkxCisKKy8qIFhDVlJfRElBR19IU0NMS19TRUwg Ki8KKyNkZWZpbmUgSFNDTEtfU0VMX01PREUzX01BU0sJCQlHRU5NQVNLKDEzLCAxMikKKyNkZWZp bmUgSFNDTEtfU0VMX01PREUzX0hTQ0xLMQkJCTEKKworLyogWENWUl9ESUFHX1BMTERSQ19DVFJM ICovCisjZGVmaW5lIERQTExfQ0xLX1NFTF9NT0RFMwkJCUJJVCgxNCkKKyNkZWZpbmUgRFBMTF9E QVRBX1JBVEVfRElWX01PREUzX01BU0sJCUdFTk1BU0soMTMsIDEyKQorCisvKiBQSFlfSERQX01P REVfQ1RSTCAqLworI2RlZmluZSBQT1dFUl9TVEFURV9BM19BQ0sJCQlCSVQoNykKKyNkZWZpbmUg UE9XRVJfU1RBVEVfQTJfQUNLCQkJQklUKDYpCisjZGVmaW5lIFBPV0VSX1NUQVRFX0ExX0FDSwkJ CUJJVCg1KQorI2RlZmluZSBQT1dFUl9TVEFURV9BMF9BQ0sJCQlCSVQoNCkKKyNkZWZpbmUgUE9X RVJfU1RBVEVfQTMJCQkJQklUKDMpCisjZGVmaW5lIFBPV0VSX1NUQVRFX0EyCQkJCUJJVCgyKQor I2RlZmluZSBQT1dFUl9TVEFURV9BMQkJCQlCSVQoMSkKKyNkZWZpbmUgUE9XRVJfU1RBVEVfQTAJ CQkJQklUKDApCisKKyNkZWZpbmUgUkVGX0NMS18yN01IWgkJMjcwMDAwMDAKKworZW51bSBkcF9s aW5rX3JhdGUgeworCVJBVEVfMV82ID0gMTYyMDAwLAorCVJBVEVfMl8xID0gMjE2MDAwLAorCVJB VEVfMl80ID0gMjQzMDAwLAorCVJBVEVfMl83ID0gMjcwMDAwLAorCVJBVEVfM18yID0gMzI0MDAw LAorCVJBVEVfNF8zID0gNDMyMDAwLAorCVJBVEVfNV80ID0gNTQwMDAwLAorCVJBVEVfOF8xID0g ODEwMDAwLAorfTsKKworI2RlZmluZSBNQVhfTElOS19SQVRFIFJBVEVfNV80CisKK3N0cnVjdCBw aHlfcGxsX3JlZyB7CisJdTE2IHZhbFs3XTsKKwl1MzIgYWRkcjsKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcGh5X3BsbF9yZWcgcGh5X3BsbF8yN21fY2ZnW10gPSB7CisJLyogIDEuNjIgICAg Mi4xNiAgICAyLjQzICAgIDIuNyAgICAgMy4yNCAgICA0LjMyICAgIDUuNCAgICAgIHJlZ2lzdGVy IGFkZHJlc3MgKi8KKwl7eyAweDAxMGUsIDB4MDEwZSwgMHgwMTBlLCAweDAxMGUsIDB4MDEwZSwg MHgwMTBlLCAweDAxMGUgfSwgQ01OX1BMTDBfVkNPQ0FMX0lOSVRfVE1SIH0sCisJe3sgMHgwMDFi LCAweDAwMWIsIDB4MDAxYiwgMHgwMDFiLCAweDAwMWIsIDB4MDAxYiwgMHgwMDFiIH0sIENNTl9Q TEwwX1ZDT0NBTF9JVEVSX1RNUiB9LAorCXt7IDB4MzBiOSwgMHgzMDg3LCAweDMwOTYsIDB4MzBi NCwgMHgzMGI5LCAweDMwODcsIDB4MzBiNCB9LCBDTU5fUExMMF9WQ09DQUxfU1RBUlQgfSwKKwl7 eyAweDAwNzcsIDB4MDA5ZiwgMHgwMGIzLCAweDAwYzcsIDB4MDA3NywgMHgwMDlmLCAweDAwYzcg fSwgQ01OX1BMTDBfSU5URElWIH0sCisJe3sgMHhmOWRhLCAweGY3Y2QsIDB4ZjZjNywgMHhmNWMx LCAweGY5ZGEsIDB4ZjdjZCwgMHhmNWMxIH0sIENNTl9QTEwwX0ZSQUNESVYgfSwKKwl7eyAweDAw MWUsIDB4MDAyOCwgMHgwMDJkLCAweDAwMzIsIDB4MDAxZSwgMHgwMDI4LCAweDAwMzIgfSwgQ01O X1BMTDBfSElHSF9USFIgfSwKKwl7eyAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgMHgwMDIwLCAweDAwMjAgfSwgQ01OX1BMTDBfRFNNX0RJQUcgfSwKKwl7eyAweDAwMDAs IDB4MTAwMCwgMHgxMDAwLCAweDEwMDAsIDB4MDAwMCwgMHgxMDAwLCAweDEwMDAgfSwgQ01OX1BM TFNNMF9VU0VSX0RFRl9DVFJMIH0sCisJe3sgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIENNTl9ESUFHX1BMTDBfT1ZSRCB9LAorCXt7IDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCBD TU5fRElBR19QTEwwX0ZCSF9PVlJEIH0sCisJe3sgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIENNTl9ESUFHX1BMTDBfRkJMX09WUkQgfSwK Kwl7eyAweDAwMDYsIDB4MDAwNywgMHgwMDA3LCAweDAwMDcsIDB4MDAwNiwgMHgwMDA3LCAweDAw MDcgfSwgQ01OX0RJQUdfUExMMF9WMklfVFVORSB9LAorCXt7IDB4MDA0MywgMHgwMDQzLCAweDAw NDMsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDMsIDB4MDA0MiB9LCBDTU5fRElBR19QTEwwX0NQX1RV TkUgfSwKKwl7eyAweDAwMDgsIDB4MDAwOCwgMHgwMDA4LCAweDAwMDgsIDB4MDAwOCwgMHgwMDA4 LCAweDAwMDggfSwgQ01OX0RJQUdfUExMMF9MRl9QUk9HIH0sCisJe3sgMHgwMTAwLCAweDAwMDEs IDB4MDAwMSwgMHgwMDAxLCAweDAxMDAsIDB4MDAwMSwgMHgwMDAxIH0sIENNTl9ESUFHX1BMTDBf UFRBVElTX1RVTkUxIH0sCisJe3sgMHgwMDA3LCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAw MDcsIDB4MDAwMSwgMHgwMDAxIH0sIENNTl9ESUFHX1BMTDBfUFRBVElTX1RVTkUyIH0sCisJe3sg MHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwIH0s IENNTl9ESUFHX1BMTDBfVEVTVF9NT0RFfSwKKwl7eyAweDAwMTYsIDB4MDAxNiwgMHgwMDE2LCAw eDAwMTYsIDB4MDAxNiwgMHgwMDE2LCAweDAwMTYgfSwgQ01OX1BTTV9DTEtfQ1RSTCB9Cit9Owor CitzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgeworCXN0cnVjdCBjZG5zX21oZHBfYmFzZSBiYXNl OworCisJdm9pZCBfX2lvbWVtICpyZWdzOwkvKiBEUFRYIHJlZ2lzdGVycyBiYXNlICovCisJc3Ry dWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgbXV0ZXggbWJveF9t dXRleDsJLyogbXV0ZXggdG8gcHJvdGVjdCBtYWlsYm94ICovCisJc3RydWN0IGNsayAqcmVmX2Ns aywgKmFwYl9jbGs7CisJdTMyIHJlZl9jbGtfcmF0ZTsKKwl1MzIgbnVtX2xhbmVzOworCXUzMiBs aW5rX3JhdGU7CisJYm9vbCBwb3dlcl91cDsKK307CisKK3N0YXRpYyBpbnQgY2Ruc19waHlfcmVn X3dyaXRlKHN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHksIHUzMiBhZGRyLCB1MzIg dmFsKQoreworCXJldHVybiBjZG5zX21oZHBfcmVnX3dyaXRlKCZjZG5zX3BoeS0+YmFzZSwgQURE Ul9QSFlfQUZFICsgKGFkZHIgPDwgMiksIHZhbCk7Cit9CisKK3N0YXRpYyB1MzIgY2Ruc19waHlf cmVnX3JlYWQoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSwgdTMyIGFkZHIpCit7 CisJdTMyIHJlZzMyOworCisJY2Ruc19taGRwX3JlZ19yZWFkKCZjZG5zX3BoeS0+YmFzZSwgQURE Ul9QSFlfQUZFICsgKGFkZHIgPDwgMiksICZyZWczMik7CisJcmV0dXJuIHJlZzMyOworfQorCitz dGF0aWMgaW50IGxpbmtfcmF0ZV9pbmRleCh1MzIgcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUpIHsK KwljYXNlIFJBVEVfMV82OgorCQlyZXR1cm4gMDsKKwljYXNlIFJBVEVfMl8xOgorCQlyZXR1cm4g MTsKKwljYXNlIFJBVEVfMl80OgorCQlyZXR1cm4gMjsKKwljYXNlIFJBVEVfMl83OgorCQlyZXR1 cm4gMzsKKwljYXNlIFJBVEVfM18yOgorCQlyZXR1cm4gNDsKKwljYXNlIFJBVEVfNF8zOgorCQly ZXR1cm4gNTsKKwljYXNlIFJBVEVfNV80OgorCQlyZXR1cm4gNjsKKwlkZWZhdWx0OgorCQlyZXR1 cm4gLTE7CisJfQorfQorCitzdGF0aWMgaW50IGhkcHR4X2RwX2Nsa19lbmFibGUoc3RydWN0IGNk bnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjZG5z X3BoeS0+ZGV2OworCXUzMiByZWZfY2xrX3JhdGU7CisJaW50IHJldDsKKworCWNkbnNfcGh5LT5y ZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInJlZiIpOworCWlmIChJU19FUlIoY2Ruc19waHkt PnJlZl9jbGspKSB7CisJCWRldl9lcnIoZGV2LCAicGh5IHJlZiBjbG9jayBub3QgZm91bmRcbiIp OworCQlyZXR1cm4gUFRSX0VSUihjZG5zX3BoeS0+cmVmX2Nsayk7CisJfQorCisJY2Ruc19waHkt PmFwYl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiYXBiIik7CisJaWYgKElTX0VSUihjZG5zX3Bo eS0+YXBiX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJwaHkgYXBiIGNsb2NrIG5vdCBmb3VuZFxu Iik7CisJCXJldHVybiBQVFJfRVJSKGNkbnNfcGh5LT5hcGJfY2xrKTsKKwl9CisKKwlyZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUoY2Ruc19waHktPnJlZl9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihjZG5zX3BoeS0+ZGV2LCAiRmFpbGVkIHRvIHByZXBhcmUgcmVmIGNsb2NrXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZWZfY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2Ruc19waHkt PnJlZl9jbGspOworCWlmICghcmVmX2Nsa19yYXRlKSB7CisJCWRldl9lcnIoY2Ruc19waHktPmRl diwgIkZhaWxlZCB0byBnZXQgcmVmIGNsb2NrIHJhdGVcbiIpOworCQlnb3RvIGVycl9yZWZfY2xr OworCX0KKworCWlmIChyZWZfY2xrX3JhdGUgPT0gUkVGX0NMS18yN01IWikgeworCQljZG5zX3Bo eS0+cmVmX2Nsa19yYXRlID0gcmVmX2Nsa19yYXRlOworCX0gZWxzZSB7CisJCWRldl9lcnIoY2Ru c19waHktPmRldiwgIk5vdCBzdXBwb3J0IFJlZiBDbG9jayBSYXRlKCVkSHopXG4iLCByZWZfY2xr X3JhdGUpOworCQlnb3RvIGVycl9yZWZfY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShjZG5zX3BoeS0+YXBiX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNkbnNfcGh5 LT5kZXYsICJGYWlsZWQgdG8gcHJlcGFyZSBhcGIgY2xvY2tcbiIpOworCQlnb3RvIGVycl9yZWZf Y2xrOworCX0KKworCXJldHVybiAwOworCitlcnJfcmVmX2NsazoKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoY2Ruc19waHktPnJlZl9jbGspOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMg dm9pZCBoZHB0eF9kcF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNf cGh5KQoreworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZG5zX3BoeS0+cmVmX2Nsayk7CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGNkbnNfcGh5LT5hcGJfY2xrKTsKK30KKworc3RhdGljIHZvaWQg aGRwdHhfZHBfYXV4X2NmZyhzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5KQorewor CS8qIFBvd2VyIHVwIEF1eCAqLworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhEQV9D WUFfQVVYREFfQ1lBLCAxKTsKKworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfRElH X0NUUkxfUkVHXzEsIDB4Myk7CisJbmRlbGF5KDE1MCk7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNk bnNfcGh5LCBUWF9ESUdfQ1RSTF9SRUdfMiwgMzYpOworCW5kZWxheSgxNTApOworCWNkbnNfcGh5 X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDEwMCk7CisJbmRlbGF5 KDE1MCk7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9BTkFfQ1RSTF9SRUdfMiwg MHgwMzAwKTsKKwluZGVsYXkoMTUwKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRY X0FOQV9DVFJMX1JFR18zLCAweDAwMDApOworCW5kZWxheSgxNTApOworCWNkbnNfcGh5X3JlZ193 cml0ZShjZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzEsIDB4MjAwOCk7CisJbmRlbGF5KDE1MCk7 CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9BTkFfQ1RSTF9SRUdfMSwgMHgyMDE4 KTsKKwluZGVsYXkoMTUwKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9D VFJMX1JFR18xLCAweGEwMTgpOworCW5kZWxheSgxNTApOworCWNkbnNfcGh5X3JlZ193cml0ZShj ZG5zX3BoeSwgVFhfQU5BX0NUUkxfUkVHXzIsIDB4MDMwYyk7CisJbmRlbGF5KDE1MCk7CisJY2Ru c19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9BTkFfQ1RSTF9SRUdfNSwgMHgwMDAwKTsKKwlu ZGVsYXkoMTUwKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JF R180LCAweDEwMDEpOworCW5kZWxheSgxNTApOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3Bo eSwgVFhfQU5BX0NUUkxfUkVHXzEsIDB4YTA5OCk7CisJbmRlbGF5KDE1MCk7CisJY2Ruc19waHlf cmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9BTkFfQ1RSTF9SRUdfMSwgMHhhMTk4KTsKKwluZGVsYXko MTUwKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFRYX0FOQV9DVFJMX1JFR18yLCAw eDAzMGQpOworCW5kZWxheSgxNTApOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhf QU5BX0NUUkxfUkVHXzIsIDB4MDMwZik7Cit9CisKKy8qIFBNQSBjb21tb24gY29uZmlndXJhdGlv biBmb3IgMjdNSHogKi8KK3N0YXRpYyB2b2lkIGhkcHR4X2RwX3BoeV9wbWFfY21uX2NmZ18yN21o eihzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5KQoreworCXUzMiBudW1fbGFuZXMg PSBjZG5zX3BoeS0+bnVtX2xhbmVzOworCXUxNiB2YWw7CisJaW50IGs7CisKKwkvKiBFbmFibGUg UE1BIGlucHV0IHJlZiBjbGsoQ01OX1JFRl9DTEtfUkNWX0VOKSAqLworCXZhbCA9IGNkbnNfcGh5 X3JlZ19yZWFkKGNkbnNfcGh5LCBQSFlfUE1BX0NNTl9DVFJMMSk7CisJdmFsICY9IH5DTUFfUkVG X0NMS19SQ1ZfRU5fTUFTSzsKKwl2YWwgfD0gRklFTERfUFJFUChDTUFfUkVGX0NMS19SQ1ZfRU5f TUFTSywgQ01BX1JFRl9DTEtfUkNWX0VOKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHks IFBIWV9QTUFfQ01OX0NUUkwxLCB2YWwpOworCisJLyogU3RhcnR1cCBzdGF0ZSBtYWNoaW5lIHJl Z2lzdGVycyAqLworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1NTTV9CSUFTX1RN UiwgMHgwMDg3KTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENNTl9QTExTTTBfUExM RU5fVE1SLCAweDAwMWIpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1BMTFNN MF9QTExQUkVfVE1SLCAweDAwMzYpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01O X1BMTFNNMF9QTExWUkVGX1RNUiwgMHgwMDFiKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19w aHksIENNTl9QTExTTTBfUExMTE9DS19UTVIsIDB4MDA2Yyk7CisKKwkvKiBDdXJyZW50IGNhbGli cmF0aW9uIHJlZ2lzdGVycyAqLworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX0lD QUxfSU5JVF9UTVIsIDB4MDA0NCk7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5f SUNBTF9JVEVSX1RNUiwgMHgwMDA2KTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIENN Tl9JQ0FMX0FESl9JTklUX1RNUiwgMHgwMDIyKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19w aHksIENNTl9JQ0FMX0FESl9JVEVSX1RNUiwgMHgwMDA2KTsKKworCS8qIFJlc2lzdG9yIGNhbGli cmF0aW9uIHJlZ2lzdGVycyAqLworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1RY UFVDQUxfSU5JVF9UTVIsIDB4MDAyMik7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBD TU5fVFhQVUNBTF9JVEVSX1RNUiwgMHgwMDA2KTsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19w aHksIENNTl9UWFBVX0FESl9JTklUX1RNUiwgMHgwMDIyKTsKKwljZG5zX3BoeV9yZWdfd3JpdGUo Y2Ruc19waHksIENNTl9UWFBVX0FESl9JVEVSX1RNUiwgMHgwMDA2KTsKKwljZG5zX3BoeV9yZWdf d3JpdGUoY2Ruc19waHksIENNTl9UWFBEQ0FMX0lOSVRfVE1SLCAweDAwMjIpOworCWNkbnNfcGh5 X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1RYUERDQUxfSVRFUl9UTVIsIDB4MDAwNik7CisJY2Ru c19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fVFhQRF9BREpfSU5JVF9UTVIsIDB4MDAyMik7 CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fVFhQRF9BREpfSVRFUl9UTVIsIDB4 MDAwNik7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUlhDQUxfSU5JVF9UTVIs IDB4MDAyMik7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUlhDQUxfSVRFUl9U TVIsIDB4MDAwNik7CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBDTU5fUlhfQURKX0lO SVRfVE1SLCAweDAwMjIpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgQ01OX1JYX0FE Sl9JVEVSX1RNUiwgMHgwMDA2KTsKKworCWZvciAoayA9IDA7IGsgPCBudW1fbGFuZXM7IGsgPSBr ICsgMSkgeworCQkvKiBQb3dlciBzdGF0ZSBtYWNoaW5lIHJlZ2lzdGVycyAqLworCQljZG5zX3Bo eV9yZWdfd3JpdGUoY2Ruc19waHksIFhDVlJfUFNNX0NBTF9UTVIgIHwgKGsgPDwgOSksIDB4MDE2 ZCk7CisJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgWENWUl9QU01fQTBJTl9UTVIgfCAo ayA8PCA5KSwgMHgwMTZkKTsKKwkJLyogVHJhbnNjZWl2ZXIgY29udHJvbCBhbmQgZGlhZ25vc3Rp YyByZWdpc3RlcnMgKi8KKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBYQ1ZSX0RJQUdf TEFORV9GQ01fRU5fTUdOX1RNUiB8IChrIDw8IDkpLCAweDAwYTIpOworCQljZG5zX3BoeV9yZWdf d3JpdGUoY2Ruc19waHksIFRYX0RJQUdfQkdSRUZfUFJFRFJWX0RFTEFZIHwgKGsgPDwgOSksIDB4 MDA5Nyk7CisJCS8qIFRyYW5zbWl0dGVyIHJlY2VpdmVyIGRldGVjdCByZWdpc3RlcnMgKi8KKwkJ Y2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBUWF9SQ1ZERVRfRU5fVE1SIHwgKGsgPDwgOSks IDB4MGE4Yyk7CisJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfUkNWREVUX1NUX1RN UiB8IChrIDw8IDkpLCAweDAwMzYpOworCX0KKworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3Bo eSwgVFhfRElBR19BQ1lBXzAsIDEpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhf RElBR19BQ1lBXzEsIDEpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfRElBR19B Q1lBXzIsIDEpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgVFhfRElBR19BQ1lBXzMs IDEpOworfQorCitzdGF0aWMgdm9pZCBoZHB0eF9kcF9waHlfcG1hX2Ntbl9wbGwwXzI3bWh6KHN0 cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHkpCit7CisJdTMyIG51bV9sYW5lcyA9IGNk bnNfcGh5LT5udW1fbGFuZXM7CisJdTMyIGxpbmtfcmF0ZSA9IGNkbnNfcGh5LT5saW5rX3JhdGU7 CisJdTE2IHZhbDsKKwlpbnQgaW5kZXgsIGksIGs7CisKKwkvKiBEUCBQTEwgZGF0YSByYXRlIDAv MSBjbG9jayBkaXZpZGVyIHZhbHVlICovCisJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19w aHksIFBIWV9IRFBfQ0xLX0NUTCk7CisJdmFsICY9IH5QTExfREFUQV9SQVRFX0NMS19ESVZfTUFT SzsKKwlpZiAobGlua19yYXRlIDw9IFJBVEVfMl83KQorCQl2YWwgfD0gRklFTERfUFJFUChQTExf REFUQV9SQVRFX0NMS19ESVZfTUFTSywKKwkJCQkgIFBMTF9EQVRBX1JBVEVfQ0xLX0RJVl9IQlIp OworCWVsc2UKKwkJdmFsIHw9IEZJRUxEX1BSRVAoUExMX0RBVEFfUkFURV9DTEtfRElWX01BU0ss CisJCQkJICBQTExfREFUQV9SQVRFX0NMS19ESVZfSEJSMik7CisJY2Ruc19waHlfcmVnX3dyaXRl KGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwsIHZhbCk7CisKKwkvKiBIaWdoIHNwZWVkIGNsb2Nr IDAvMSBkaXYgKi8KKwl2YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgQ01OX0RJQUdf SFNDTEtfU0VMKTsKKwl2YWwgJj0gfihIU0NMSzFfU0VMX01BU0sgfCBIU0NMSzBfU0VMX01BU0sp OworCWlmIChsaW5rX3JhdGUgPD0gUkFURV8yXzcpIHsKKwkJdmFsIHw9IEZJRUxEX1BSRVAoSFND TEsxX1NFTF9NQVNLLCBIU0NMS19QTEwwX0RJVjIpOworCQl2YWwgfD0gRklFTERfUFJFUChIU0NM SzBfU0VMX01BU0ssIEhTQ0xLX1BMTDBfRElWMik7CisJfQorCWNkbnNfcGh5X3JlZ193cml0ZShj ZG5zX3BoeSwgQ01OX0RJQUdfSFNDTEtfU0VMLCB2YWwpOworCisJZm9yIChrID0gMDsgayA8IG51 bV9sYW5lczsgaysrKSB7CisJCXZhbCA9IGNkbnNfcGh5X3JlZ19yZWFkKGNkbnNfcGh5LCAoWENW Ul9ESUFHX0hTQ0xLX1NFTCB8IChrIDw8IDkpKSk7CisJCXZhbCAmPSB+SFNDTEtfU0VMX01PREUz X01BU0s7CisJCWlmIChsaW5rX3JhdGUgPD0gUkFURV8yXzcpCisJCQl2YWwgfD0gRklFTERfUFJF UChIU0NMS19TRUxfTU9ERTNfTUFTSywgSFNDTEtfU0VMX01PREUzX0hTQ0xLMSk7CisJCWNkbnNf cGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFhDVlJfRElBR19IU0NMS19TRUwgfCAoayA8PCA5KSks IHZhbCk7CisJfQorCisJLyogRFAgUEhZIFBMTCAyN01IeiBjb25maWd1cmF0aW9uICovCisJaW5k ZXggPSBsaW5rX3JhdGVfaW5kZXgobGlua19yYXRlKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShwaHlfcGxsXzI3bV9jZmcpOyBpKyspCisJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3Bo eSwgcGh5X3BsbF8yN21fY2ZnW2ldLmFkZHIsCisJCQkJICAgcGh5X3BsbF8yN21fY2ZnW2ldLnZh bFtpbmRleF0pOworCisJLyogVHJhbnNjZWl2ZXIgY29udHJvbCBhbmQgZGlhZ25vc3RpYyByZWdp c3RlcnMgKi8KKwlmb3IgKGsgPSAwOyBrIDwgbnVtX2xhbmVzOyBrKyspIHsKKwkJdmFsID0gY2Ru c19waHlfcmVnX3JlYWQoY2Ruc19waHksIChYQ1ZSX0RJQUdfUExMRFJDX0NUUkwgfCAoayA8PCA5 KSkpOworCQl2YWwgJj0gfihEUExMX0RBVEFfUkFURV9ESVZfTU9ERTNfTUFTSyB8IERQTExfQ0xL X1NFTF9NT0RFMyk7CisJCWlmIChsaW5rX3JhdGUgPD0gUkFURV8yXzcpCisJCQl2YWwgfD0gRklF TERfUFJFUChEUExMX0RBVEFfUkFURV9ESVZfTU9ERTNfTUFTSywgMik7CisJCWVsc2UKKwkJCXZh bCB8PSBGSUVMRF9QUkVQKERQTExfREFUQV9SQVRFX0RJVl9NT0RFM19NQVNLLCAxKTsKKwkJY2Ru c19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoWENWUl9ESUFHX1BMTERSQ19DVFJMIHwgKGsgPDwg OSkpLCB2YWwpOworCX0KKworCWZvciAoayA9IDA7IGsgPCBudW1fbGFuZXM7IGsgPSBrICsgMSkg eworCQkvKiBQb3dlciBzdGF0ZSBtYWNoaW5lIHJlZ2lzdGVycyAqLworCQljZG5zX3BoeV9yZWdf d3JpdGUoY2Ruc19waHksIChYQ1ZSX1BTTV9SQ1RSTCB8IChrIDw8IDkpKSwgMHhiZWZjKTsKKwkJ Y2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoVFhfUFNDX0EwIHwgKGsgPDwgOSkpLCAweDY3 OTkpOworCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIChUWF9QU0NfQTEgfCAoayA8PCA5 KSksIDB4Njc5OCk7CisJCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgKFRYX1BTQ19BMiB8 IChrIDw8IDkpKSwgMHgwMDk4KTsKKwkJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCAoVFhf UFNDX0EzIHwgKGsgPDwgOSkpLCAweDAwOTgpOworCQkvKiBSZWNlaXZlciBjYWxpYnJhdGlvbiBw b3dlciBzdGF0ZSBkZWZpbml0aW9uIHJlZ2lzdGVyICovCisJCXZhbCA9IGNkbnNfcGh5X3JlZ19y ZWFkKGNkbnNfcGh5LCBSWF9QU0NfQ0FMIHwgKGsgPDwgOSkpOworCQl2YWwgJj0gMHhmZmJiOwor CQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIChSWF9QU0NfQ0FMIHwgKGsgPDwgOSkpLCB2 YWwpOworCQl2YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgUlhfUFNDX0EwIHwgKGsg PDwgOSkpOworCQl2YWwgJj0gMHhmZmJiOworCQljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHks IChSWF9QU0NfQTAgfCAoayA8PCA5KSksIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoZHB0 eF9kcF9waHlfcmVmX2Nsb2NrX3R5cGUoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3Bo eSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIFBI WV9QTUFfQ01OX0NUUkwxKTsKKwl2YWwgJj0gfkNNQV9SRUZfQ0xLX1NFTF9NQVNLOworCS8qCisJ ICogc2luZ2xlIGVuZGVkIHJlZmVyZW5jZSBjbG9jayAodmFsIHw9IDB4MDAzMCk7CisJICogZGlm ZmVyZW50aWFsIGNsb2NrICAodmFsIHw9IDB4MDAwMCk7CisJICoKKwkgKiBmb3IgZGlmZmVyZW50 aWFsIGNsb2NrIG9uIHRoZSByZWZjbGtfcCBhbmQKKwkgKiByZWZjbGtfbSBvZmYgY2hpcCBwaW5z OiBDTU5fRElBR19BQ1lBWzhdPTEnYjEKKwkgKiBjZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHks IENNTl9ESUFHX0FDWUEsIDB4MDEwMCk7CisJICovCisJdmFsIHw9IEZJRUxEX1BSRVAoQ01BX1JF Rl9DTEtfU0VMX01BU0ssIDMpOworCWNkbnNfcGh5X3JlZ193cml0ZShjZG5zX3BoeSwgUEhZX1BN QV9DTU5fQ1RSTDEsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfYWNrKHN0cnVjdCBj ZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHksIHUzMiByZWcsIHUzMiBtYXNrLAorCQkJY29uc3Qg Y2hhciAqZXJyX21zZykKK3sKKwl1MzIgdmFsLCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBp KyspIHsKKwkJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIHJlZyk7CisJCWlmICh2 YWwgJiBtYXNrKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgyMCk7CisJfQorCisJZGV2X2Vycihj ZG5zX3BoeS0+ZGV2LCAiJXNcbiIsIGVycl9tc2cpOworCXJldHVybiAtMTsKK30KKworc3RhdGlj IGludCB3YWl0X2Zvcl9hY2tfY2xlYXIoc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3Bo eSwgdTMyIHJlZywgdTMyIG1hc2ssCisJCQkgICAgICBjb25zdCBjaGFyICplcnJfbXNnKQorewor CXUzMiB2YWwsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl2YWwgPSBjZG5z X3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgcmVnKTsKKwkJaWYgKCEodmFsICYgbWFzaykpCisJCQly ZXR1cm4gMDsKKwkJbXNsZWVwKDIwKTsKKwl9CisKKwlkZXZfZXJyKGNkbnNfcGh5LT5kZXYsICIl c1xuIiwgZXJyX21zZyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGhkcHR4X2RwX3Bo eV9wb3dlcl91cChzdHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5KQoreworCXUzMiB2 YWw7CisKKwkvKiBFbmFibGUgSERQIFBMTOKAmXMgZm9yIGhpZ2ggc3BlZWQgY2xvY2tzICovCisJ dmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCk7CisJdmFs IHw9IFBMTF9FTjsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NU TCwgdmFsKTsKKwlpZiAod2FpdF9mb3JfYWNrKGNkbnNfcGh5LCBQSFlfSERQX0NMS19DVEwsIFBM TF9SRUFEWSwKKwkJCSAiV2FpdCBQTEwgQWNrIGZhaWxlZCIpKQorCQlyZXR1cm4gLTE7CisKKwkv KiBFbmFibGUgSERQIFBMTOKAmXMgZGF0YSByYXRlIGFuZCBmdWxsIHJhdGUgY2xvY2tzIG91dCBv ZiBQTUEuICovCisJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQoY2Ruc19waHksIFBIWV9IRFBfQ0xL X0NUTCk7CisJdmFsIHw9IFBMTF9DTEtfRU47CisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5 LCBQSFlfSERQX0NMS19DVEwsIHZhbCk7CisJaWYgKHdhaXRfZm9yX2FjayhjZG5zX3BoeSwgUEhZ X0hEUF9DTEtfQ1RMLCBQTExfQ0xLX0VOX0FDSywKKwkJCSAiV2FpdCBQTEwgY2xvY2sgZW5hYmxl IEFDSyBmYWlsZWQiKSkKKwkJcmV0dXJuIC0xOworCisJLyogQ29uZmlndXJlIFBIWSBpbiBBMiBN b2RlICovCisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBQSFlfSERQX01PREVfQ1RSTCwg UE9XRVJfU1RBVEVfQTIpOworCWlmICh3YWl0X2Zvcl9hY2soY2Ruc19waHksIFBIWV9IRFBfTU9E RV9DVFJMLCBQT1dFUl9TVEFURV9BMl9BQ0ssCisJCQkgIldhaXQgQTIgQWNrIGZhaWxlZCIpKQor CQlyZXR1cm4gLTE7CisKKwkvKiBDb25maWd1cmUgUEhZIGluIEEwIG1vZGUgKFBIWSBtdXN0IGJl IGluIHRoZSBBMCBwb3dlcgorCSAqIHN0YXRlIGluIG9yZGVyIHRvIHRyYW5zbWl0IGRhdGEpCisJ ICovCisJY2Ruc19waHlfcmVnX3dyaXRlKGNkbnNfcGh5LCBQSFlfSERQX01PREVfQ1RSTCwgUE9X RVJfU1RBVEVfQTApOworCWlmICh3YWl0X2Zvcl9hY2soY2Ruc19waHksIFBIWV9IRFBfTU9ERV9D VFJMLCBQT1dFUl9TVEFURV9BMF9BQ0ssCisJCQkgIldhaXQgQTAgQWNrIGZhaWxlZCIpKQorCQly ZXR1cm4gLTE7CisKKwljZG5zX3BoeS0+cG93ZXJfdXAgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGhkcHR4X2RwX3BoeV9wb3dlcl9kb3duKHN0cnVjdCBjZG5zX2hkcHR4 X2RwX3BoeSAqY2Ruc19waHkpCit7CisJdTE2IHZhbDsKKworCWlmICghY2Ruc19waHktPnBvd2Vy X3VwKQorCQlyZXR1cm47CisKKwkvKiBQbGFjZSB0aGUgUEhZIGxhbmVzIGluIHRoZSBBMyBwb3dl ciBzdGF0ZS4gKi8KKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfTU9ERV9D VFJMLCBQT1dFUl9TVEFURV9BMyk7CisJaWYgKHdhaXRfZm9yX2FjayhjZG5zX3BoeSwgUEhZX0hE UF9NT0RFX0NUUkwsIFBPV0VSX1NUQVRFX0EzX0FDSywKKwkJCSAiV2FpdCBBMyBBY2sgZmFpbGVk IikpCisJCXJldHVybjsKKworCS8qIERpc2FibGUgSERQIFBMTOKAmXMgZGF0YSByYXRlIGFuZCBm dWxsIHJhdGUgY2xvY2tzIG91dCBvZiBQTUEuICovCisJdmFsID0gY2Ruc19waHlfcmVnX3JlYWQo Y2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCk7CisJdmFsICY9IH5QTExfQ0xLX0VOOworCWNkbnNf cGh5X3JlZ193cml0ZShjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMLCB2YWwpOworCWlmICh3YWl0 X2Zvcl9hY2tfY2xlYXIoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NUTCwgUExMX0NMS19FTl9BQ0ss CisJCQkgICAgICAgIldhaXQgUExMIGNsb2NrIEFjayBjbGVhciBmYWlsZWQiKSkKKwkJcmV0dXJu OworCisJLyogRGlzYWJsZSBIRFAgUExM4oCZcyBmb3IgaGlnaCBzcGVlZCBjbG9ja3MgKi8KKwl2 YWwgPSBjZG5zX3BoeV9yZWdfcmVhZChjZG5zX3BoeSwgUEhZX0hEUF9DTEtfQ1RMKTsKKwl2YWwg Jj0gflBMTF9FTjsKKwljZG5zX3BoeV9yZWdfd3JpdGUoY2Ruc19waHksIFBIWV9IRFBfQ0xLX0NU TCwgdmFsKTsKKwlpZiAod2FpdF9mb3JfYWNrX2NsZWFyKGNkbnNfcGh5LCBQSFlfSERQX0NMS19D VEwsIFBMTF9SRUFEWSwKKwkJCSAgICAgICAiV2FpdCBQTEwgQWNrIGNsZWFyIGZhaWxlZCIpKQor CQlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19oZHB0eF9kcF9waHlfb24oc3RydWN0IHBo eSAqcGh5KQoreworCXN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHkgPSBwaHlfZ2V0 X2RydmRhdGEocGh5KTsKKworCXJldHVybiBoZHB0eF9kcF9waHlfcG93ZXJfdXAoY2Ruc19waHkp OworfQorCitzdGF0aWMgaW50IGNkbnNfaGRwdHhfZHBfcGh5X29mZihzdHJ1Y3QgcGh5ICpwaHkp Cit7CisJc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0 YShwaHkpOworCisJaGRwdHhfZHBfcGh5X3Bvd2VyX2Rvd24oY2Ruc19waHkpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ruc19oZHB0eF9kcF9waHlfaW5pdChzdHJ1Y3QgcGh5ICpw aHkpCit7CisJc3RydWN0IGNkbnNfaGRwdHhfZHBfcGh5ICpjZG5zX3BoeSA9IHBoeV9nZXRfZHJ2 ZGF0YShwaHkpOworCWludCByZXQ7CisKKwloZHB0eF9kcF9waHlfcmVmX2Nsb2NrX3R5cGUoY2Ru c19waHkpOworCisJLyogUEhZIHBvd2VyIHVwICovCisJcmV0ID0gaGRwdHhfZHBfcGh5X3Bvd2Vy X3VwKGNkbnNfcGh5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWhkcHR4X2Rw X2F1eF9jZmcoY2Ruc19waHkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjZG5z X2hkcHR4X2RwX2NvbmZpZ3VyZShzdHJ1Y3QgcGh5ICpwaHksCisJCQkJICAgdW5pb24gcGh5X2Nv bmZpZ3VyZV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19w aHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlpbnQgcmV0OworCisJY2Ruc19waHktPmxpbmtf cmF0ZSA9IG9wdHMtPmRwLmxpbmtfcmF0ZTsKKwljZG5zX3BoeS0+bnVtX2xhbmVzID0gb3B0cy0+ ZHAubGFuZXM7CisKKwlpZiAoY2Ruc19waHktPmxpbmtfcmF0ZSA+IE1BWF9MSU5LX1JBVEUpIHsK KwkJZGV2X2VycihjZG5zX3BoeS0+ZGV2LCAiTGluayBSYXRlKCVkKSBOb3Qgc3VwcG9ydGVkXG4i LCBjZG5zX3BoeS0+bGlua19yYXRlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIERpc2Fi bGUgcGh5IGNsb2NrIGlmIFBIWSBpbiBwb3dlciB1cCBzdGF0ZSAqLworCWhkcHR4X2RwX3BoeV9w b3dlcl9kb3duKGNkbnNfcGh5KTsKKworCWlmIChjZG5zX3BoeS0+cmVmX2Nsa19yYXRlID09IFJF Rl9DTEtfMjdNSFopIHsKKwkJaGRwdHhfZHBfcGh5X3BtYV9jbW5fY2ZnXzI3bWh6KGNkbnNfcGh5 KTsKKwkJaGRwdHhfZHBfcGh5X3BtYV9jbW5fcGxsMF8yN21oeihjZG5zX3BoeSk7CisJfSBlbHNl IHsKKwkJZGV2X2VycihjZG5zX3BoeS0+ZGV2LCAiTm90IHN1cHBvcnQgcmVmIGNsb2NrIHJhdGVc biIpOworCX0KKworCS8qIFBIWSBwb3dlciB1cCAqLworCXJldCA9IGhkcHR4X2RwX3BoeV9wb3dl cl91cChjZG5zX3BoeSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IHBoeV9vcHMgY2Ruc19oZHB0eF9kcF9waHlfb3BzID0geworCS5pbml0ID0gY2Ruc19oZHB0eF9k cF9waHlfaW5pdCwKKwkuY29uZmlndXJlID0gY2Ruc19oZHB0eF9kcF9jb25maWd1cmUsCisJLnBv d2VyX29uID0gY2Ruc19oZHB0eF9kcF9waHlfb24sCisJLnBvd2VyX29mZiA9IGNkbnNfaGRwdHhf ZHBfcGh5X29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgY2Ru c19oZHB0eF9kcF9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgY2Ruc19oZHB0eF9kcF9waHkgKmNkbnNfcGh5OworCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5vZl9ub2RlOwor CXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJaW50IHJldDsKKworCWNkbnNfcGh5ID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpjZG5zX3BoeSksIEdGUF9LRVJORUwpOworCWlmICghY2Ruc19waHkp CisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgY2Ruc19waHkpOwor CWNkbnNfcGh5LT5kZXYgPSBkZXY7CisJbXV0ZXhfaW5pdCgmY2Ruc19waHktPm1ib3hfbXV0ZXgp OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2Ruc19waHktPnJlZ3MgPSBkZXZt X2lvcmVtYXAoZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChJU19F UlIoY2Ruc19waHktPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihjZG5zX3BoeS0+cmVncyk7CisK KwlwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBub2RlLCAmY2Ruc19oZHB0eF9kcF9waHlfb3Bz KTsKKwlpZiAoSVNfRVJSKHBoeSkpCisJCXJldHVybiBQVFJfRVJSKHBoeSk7CisKKwlwaHktPmF0 dHJzLm1vZGUgPSBQSFlfTU9ERV9EUDsKKwljZG5zX3BoeS0+cGh5ID0gcGh5OworCXBoeV9zZXRf ZHJ2ZGF0YShwaHksIGNkbnNfcGh5KTsKKworCS8qIGluaXQgYmFzZSBzdHJ1Y3QgZm9yIGFjY2Vz cyBtaGRwIG1haWxib3ggKi8KKwljZG5zX3BoeS0+YmFzZS5kZXYgPSBjZG5zX3BoeS0+ZGV2Owor CWNkbnNfcGh5LT5iYXNlLnJlZ3MgPSBjZG5zX3BoeS0+cmVnczsKKwljZG5zX3BoeS0+YmFzZS5t Ym94X211dGV4ID0gJmNkbnNfcGh5LT5tYm94X211dGV4OworCisJcmV0ID0gaGRwdHhfZHBfY2xr X2VuYWJsZShjZG5zX3BoeSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkluaXQgY2xr IGZhaWxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZt X29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlm IChJU19FUlIocGh5X3Byb3ZpZGVyKSkgeworCQlyZXQgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7 CisJCWdvdG8gY2xrX2Rpc2FibGU7CisJfQorCisJcmV0dXJuIDA7CisKK2Nsa19kaXNhYmxlOgor CWhkcHR4X2RwX2Nsa19kaXNhYmxlKGNkbnNfcGh5KTsKKworCXJldHVybiAtRUlOVkFMOworfQor CitzdGF0aWMgaW50IGNkbnNfaGRwdHhfZHBfcGh5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBjZG5zX2hkcHR4X2RwX3BoeSAqY2Ruc19waHkgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWhkcHR4X2RwX2Nsa19kaXNhYmxlKGNkbnNfcGh5 KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBj ZG5zX2hkcHR4X2RwX3BoeV9vZl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJmc2wsaW14 OG1xLWRwLXBoeSIgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBjZG5zX2hkcHR4X2RwX3BoeV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIGNkbnNfaGRwdHhfZHBfcGh5X2RyaXZlciA9IHsKKwkucHJvYmUgPSBjZG5z X2hkcHR4X2RwX3BoeV9wcm9iZSwKKwkucmVtb3ZlID0gY2Ruc19oZHB0eF9kcF9waHlfcmVtb3Zl LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImNkbnMtaGRwdHgtZHAtcGh5IiwKKwkJLm9mX21h dGNoX3RhYmxlCT0gY2Ruc19oZHB0eF9kcF9waHlfb2ZfbWF0Y2gsCisJfQorfTsKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIoY2Ruc19oZHB0eF9kcF9waHlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhP UigiU2FuZG9yIFl1IDxzYW5kb3IueXVAbnhwLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi Q2FkZW5jZSBIRFAtVFggRGlzcGxheVBvcnQgUEhZIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCIpOwotLSAKMi4zNC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=