Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp3973840img; Mon, 25 Mar 2019 23:54:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqy0LJ9JV+OQvb+hYaVcS8AIz2H9TOafpMejgwmuzc6wq/Rw2e12Um4QDcywAr+FCPkf0yyv X-Received: by 2002:a63:4750:: with SMTP id w16mr27932428pgk.256.1553583290898; Mon, 25 Mar 2019 23:54:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553583290; cv=none; d=google.com; s=arc-20160816; b=R3la+JyVxpQgzvQqMLhbLX/fAVd4+CqaP/TxoPq/FSAX19+Whwz290X/OcnTFbgA52 rUUcE4Cxag8v+1vWl72wYwQ4sWlZW3OUB84D25z4Zfmtk5H9WJfYEvqrJO19N6p4fniG ihtS8U6NmXk8Y1DB7zTUif+cqDgNBVeiTUjaK+ROpzV/hf5CRMleI27wwDfSskS5zOeO YGAFrX33MhCsfdPso2XpOAJ+5SM1yNhHRAjPR/6aENECv/KjNx27RW/6r1DtxXUxVr2z TBNVHA5pS2LSyaD846pXr3zrf7e1rkzjZd9mdfGmm2oObrAYBw9V09EfSm0Cr+fuGfqh RuTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=Uy4dir7yhlX6zR+EXClCiWnaAcrhm+/MaTbEl2e2r50=; b=T0VtbBgdtIDTmHjVEowQ5Ta0DEEE7AsktCViRmejyUpk8hDrucHdHIXGEsBu+vcFqo iv/aupfT7RkI8HxMRF6bY0fL5pjmRFMw39XIrAoysH4/0N8tPPCl8atxQKPrQYrL3uCN YLY9eYZUXB+3+EtGRol6uZWR3IYntPNUJF/VQrynIceHhVIHPFZMFMTWl7qzRIZ1/AEI zD3NOfjgSvb4KHxNRj34bQ/nXfvv8FCTqIZCDc8NaVr8Ed5WiMSkmDHukWgxtKkCNulH ykJxuYKz5jwjsGK9zJZD5riRSTwGGaDauCdUgAT+dB9p5vkyPV3FESukAukB8FFjtaNn hwhQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=Z9tsTWiQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d9si17179383pln.403.2019.03.25.23.54.35; Mon, 25 Mar 2019 23:54:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=Z9tsTWiQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731210AbfCZGwm (ORCPT + 99 others); Tue, 26 Mar 2019 02:52:42 -0400 Received: from mail-eopbgr20078.outbound.protection.outlook.com ([40.107.2.78]:44866 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731159AbfCZGwl (ORCPT ); Tue, 26 Mar 2019 02:52:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uy4dir7yhlX6zR+EXClCiWnaAcrhm+/MaTbEl2e2r50=; b=Z9tsTWiQwVD3eTO2KFS+Dl7qY9JKFH3Tn/2Dti9qXaEclRRcWuC0nVoGODxpAJtTyoTHzfAg3PGooA1lHDjcNgi/xeLBgOgpXUyIf/h+nCOAwJuuKfgNa3dVwkaS1J35OBPu4H3gL12p9w68dOtbwl/f0dfy7QBy6+VVxewEJGM= Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com (52.134.72.18) by DB3PR0402MB3675.eurprd04.prod.outlook.com (52.134.69.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Tue, 26 Mar 2019 06:52:33 +0000 Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08]) by DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08%7]) with mapi id 15.20.1730.019; Tue, 26 Mar 2019 06:52:33 +0000 From: Anson Huang To: "thierry.reding@gmail.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux@armlinux.org.uk" , "stefan@agner.ch" , "otavio@ossystems.com.br" , Leonard Crestez , "schnitzeltony@gmail.com" , Robin Gong , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "u.kleine-koenig@pengutronix.de" CC: dl-linux-imx Subject: [PATCH V10 2/5] pwm: Add i.MX TPM PWM driver support Thread-Topic: [PATCH V10 2/5] pwm: Add i.MX TPM PWM driver support Thread-Index: AQHU46B9WLT24xilRkuAOvixB3Q1lg== Date: Tue, 26 Mar 2019 06:52:33 +0000 Message-ID: <1553582817-29519-3-git-send-email-Anson.Huang@nxp.com> References: <1553582817-29519-1-git-send-email-Anson.Huang@nxp.com> In-Reply-To: <1553582817-29519-1-git-send-email-Anson.Huang@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.7.4 x-clientproxiedby: HK0PR04CA0008.apcprd04.prod.outlook.com (2603:1096:203:36::20) To DB3PR0402MB3916.eurprd04.prod.outlook.com (2603:10a6:8:10::18) authentication-results: spf=none (sender IP is ) smtp.mailfrom=anson.huang@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e7842e6f-9482-4d2c-9233-08d6b1b79efd x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:DB3PR0402MB3675; x-ms-traffictypediagnostic: DB3PR0402MB3675: x-microsoft-antispam-prvs: x-forefront-prvs: 09888BC01D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(39860400002)(376002)(396003)(366004)(346002)(199004)(189003)(66066001)(486006)(105586002)(186003)(2616005)(68736007)(11346002)(446003)(2906002)(50226002)(6486002)(71190400001)(2501003)(6436002)(53946003)(256004)(81166006)(8676002)(81156014)(97736004)(106356001)(476003)(14444005)(53936002)(71200400001)(26005)(6512007)(316002)(99286004)(305945005)(6116002)(6506007)(25786009)(386003)(86362001)(2201001)(7736002)(52116002)(478600001)(76176011)(4326008)(14454004)(30864003)(7416002)(5660300002)(102836004)(8936002)(3846002)(36756003)(110136005)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB3PR0402MB3675;H:DB3PR0402MB3916.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: VxuIsqYyU468oLiLxWWY7YrlAYcvhCi633j2GKtHjOi8gOrP9Fr0MjLFwvu9So4biOFfd9Zgtt8Z3Cv3XKqTZfV5h9QbBHM8KQ4WJ4x2zlz43UXhf/mcWKTBbELJAAcBxP/EPAVjsShFTGdvfQq6nFY5gwTr0p9+VZ2OrN0XDt6Gk9xWgxq1Xdf6dJ3Fm3MTFXNR0p37SrUSozONLKqopLFr7Fe9x75mejRIpi8tQPlNRJZ8+5pGzsl8HG6cPxlEOZMlo9IL4tNykEQViJJbzUVPm+sDjBeyIiU6BJ8QB89JM7TH6/FZH2t3vdSG56VclJ53m7Rxgm9ZX9qZ2BpUI990FZJ/IS1+hEgZiMQeAi504plQDnIXFSaTTHXFjTJLWjyRszH0j3IaEESGrZBIxcPq40ux19VDOu481tl6nu4= Content-Type: text/plain; charset="utf-8" Content-ID: <6FD5F3480E0638409100E1BFD74F4C84@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7842e6f-9482-4d2c-9233-08d6b1b79efd X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2019 06:52:33.6322 (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-Transport-CrossTenantHeadersStamped: DB3PR0402MB3675 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org aS5NWDdVTFAgaGFzIFRQTShMb3cgUG93ZXIgVGltZXIvUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBN b2R1bGUpDQppbnNpZGUsIGl0IGNhbiBzdXBwb3J0IG11bHRpcGxlIFBXTSBjaGFubmVscywgYWxs IHRoZSBjaGFubmVscw0Kc2hhcmUgc2FtZSBjb3VudGVyIGFuZCBwZXJpb2Qgc2V0dGluZywgYnV0 IGVhY2ggY2hhbm5lbCBjYW4NCmNvbmZpZ3VyZSBpdHMgZHV0eSBhbmQgcG9sYXJpdHkgaW5kZXBl bmRlbnRseS4NCg0KVGhlcmUgYXJlIHNldmVyYWwgVFBNIG1vZHVsZXMgaW4gaS5NWDdVTFAsIHRo ZSBudW1iZXIgb2YgY2hhbm5lbHMNCmluIFRQTSBtb2R1bGVzIGFyZSBkaWZmZXJlbnQsIGl0IGNh biBiZSByZWFkIGZyb20gZWFjaCBUUE0gbW9kdWxlJ3MNClBBUkFNIHJlZ2lzdGVyLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBBbnNvbiBIdWFuZyA8QW5zb24uSHVhbmdAbnhwLmNvbT4NCi0tLQ0KQ2hhbmdl cyBzaW5jZSBWOToNCgktIGltcHJvdmUgc29tZSBjb21tZW50czsNCgktIG1lcmdlIHBlcmlvZF9k dXR5IHNldHRpbmcgYW5kIGNvbmZpZ19odyB0byBiZSAxIGZ1bmN0aW9uLCBhdm9pZCBkdXBsaWNh dGVkIGR1dHkgc2V0dGluZ3MNCgkgIGluIHNvbWUgc2NlbmFyaW87DQoJLSB1c2Ugbm9uICJkZXZt XyIgZnVuY3Rpb24gZm9yIGNoYW5uZWwgZGF0YSBhbGxvY2F0aW9uIGFuZCBmcmVlLg0KLS0tDQog ZHJpdmVycy9wd20vS2NvbmZpZyAgICAgICB8ICAxMSArKw0KIGRyaXZlcnMvcHdtL01ha2VmaWxl ICAgICAgfCAgIDEgKw0KIGRyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMgfCA0NjMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDMgZmlsZXMgY2hhbmdlZCwg NDc1IGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wd20vcHdtLWlt eC10cG0uYw0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vS2NvbmZpZyBiL2RyaXZlcnMvcHdt L0tjb25maWcNCmluZGV4IDU0ZjgyMzguLjNlYTAzOTEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3B3 bS9LY29uZmlnDQorKysgYi9kcml2ZXJzL3B3bS9LY29uZmlnDQpAQCAtMjEwLDYgKzIxMCwxNyBA QCBjb25maWcgUFdNX0lNWDI3DQogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVs ZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQ0KIAkgIHdpbGwgYmUgY2FsbGVkIHB3bS1pbXgy Ny4NCiANCitjb25maWcgUFdNX0lNWF9UUE0NCisJdHJpc3RhdGUgImkuTVggVFBNIFBXTSBzdXBw b3J0Ig0KKwlkZXBlbmRzIG9uIEFSQ0hfTVhDIHx8IENPTVBJTEVfVEVTVA0KKwlkZXBlbmRzIG9u IEhBVkVfQ0xLICYmIEhBU19JT01FTQ0KKwloZWxwDQorCSAgR2VuZXJpYyBQV00gZnJhbWV3b3Jr IGRyaXZlciBmb3IgaS5NWDdVTFAgVFBNIG1vZHVsZSwgVFBNJ3MgZnVsbA0KKwkgIG5hbWUgaXMg TG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0KKw0KKwkgIFRv IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1 bGUNCisJICB3aWxsIGJlIGNhbGxlZCBwd20taW14LXRwbS4NCisNCiBjb25maWcgUFdNX0paNDc0 MA0KIAl0cmlzdGF0ZSAiSW5nZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQiDQogCWRlcGVuZHMgb24g TUFDSF9JTkdFTklDDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vTWFrZWZpbGUgYi9kcml2ZXJz L3B3bS9NYWtlZmlsZQ0KaW5kZXggNDQ4ODI1ZS4uYzM2ODU5OSAxMDA2NDQNCi0tLSBhL2RyaXZl cnMvcHdtL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KQEAgLTE5LDYgKzE5 LDcgQEAgb2JqLSQoQ09ORklHX1BXTV9ISUJWVCkJCSs9IHB3bS1oaWJ2dC5vDQogb2JqLSQoQ09O RklHX1BXTV9JTUcpCQkrPSBwd20taW1nLm8NCiBvYmotJChDT05GSUdfUFdNX0lNWDEpCQkrPSBw d20taW14MS5vDQogb2JqLSQoQ09ORklHX1BXTV9JTVgyNykJCSs9IHB3bS1pbXgyNy5vDQorb2Jq LSQoQ09ORklHX1BXTV9JTVhfVFBNKQkrPSBwd20taW14LXRwbS5vDQogb2JqLSQoQ09ORklHX1BX TV9KWjQ3NDApCSs9IHB3bS1qejQ3NDAubw0KIG9iai0kKENPTkZJR19QV01fTFAzOTQzKQkrPSBw d20tbHAzOTQzLm8NCiBvYmotJChDT05GSUdfUFdNX0xQQzE4WFhfU0NUKQkrPSBwd20tbHBjMTh4 eC1zY3Qubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMgYi9kcml2ZXJz L3B3bS9wd20taW14LXRwbS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4u ZTFlOWI2OA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9wd20vcHdtLWlteC10cG0uYw0K QEAgLTAsMCArMSw0NjMgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K Ky8qDQorICogQ29weXJpZ2h0IDIwMTgtMjAxOSBOWFAuDQorICoNCisgKiBMaW1pdGF0aW9uczoN CisgKiAtIFRoZSBUUE0gY291bnRlciBhbmQgcGVyaW9kIGNvdW50ZXIgYXJlIHNoYXJlZCBiZXR3 ZWVuDQorICogICBtdWx0aXBsZSBjaGFubmVscywgc28gYWxsIGNoYW5uZWxzIHNob3VsZCB1c2Ug c2FtZSBwZXJpb2QNCisgKiAgIHNldHRpbmdzLg0KKyAqIC0gQ2hhbmdlcyB0byBwb2xhcml0eSBj YW5ub3QgYmUgbGF0Y2hlZCBhdCB0aGUgdGltZSBvZiB0aGUNCisgKiAgIG5leHQgcGVyaW9kIHN0 YXJ0Lg0KKyAqIC0gQ2hhbmdpbmcgcGVyaW9kIGFuZCBkdXR5IGN5Y2xlIHRvZ2V0aGVyIGlzbid0 IGF0b21pYywNCisgKiAgIHdpdGggdGhlIHdyb25nIHRpbWluZyBpdCBtaWdodCBoYXBwZW4gdGhh dCBhIHBlcmlvZCBpcw0KKyAqICAgcHJvZHVjZWQgd2l0aCBvbGQgZHV0eSBjeWNsZSBidXQgbmV3 IHBlcmlvZCBzZXR0aW5ncy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4N CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4NCisjaW5jbHVkZSA8bGludXgvaW8uaD4NCisjaW5jbHVkZSA8 bGludXgvbG9nMi5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGlu dXgvb2YuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcHdtLmg+DQorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCisNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1BBUkFNCTB4NA0KKyNkZWZp bmUgUFdNX0lNWF9UUE1fR0xPQkFMCTB4OA0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fU0MJCTB4MTAN CisjZGVmaW5lIFBXTV9JTVhfVFBNX0NOVAkJMHgxNA0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9E CQkweDE4DQorI2RlZmluZSBQV01fSU1YX1RQTV9DblNDKG4pCSgweDIwICsgKG4pICogMHg4KQ0K KyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25WKG4pCSgweDI0ICsgKG4pICogMHg4KQ0KKw0KKyNkZWZp bmUgUFdNX0lNWF9UUE1fUEFSQU1fQ0hBTgkJCUdFTk1BU0soNywgMCkNCisNCisjZGVmaW5lIFBX TV9JTVhfVFBNX1NDX1BTCQkJR0VOTUFTSygyLCAwKQ0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fU0Nf Q01PRAkJCUdFTk1BU0soNCwgMykNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NNT0RfSU5DX0VW RVJZX0NMSwlGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX0NNT0QsIDEpDQorI2RlZmluZSBQV01f SU1YX1RQTV9TQ19DUFdNUwkJCUJJVCg1KQ0KKw0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19D SEYJQklUKDcpDQorI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX01TQglCSVQoNSkNCisjZGVmaW5l IFBXTV9JTVhfVFBNX0NuU0NfTVNBCUJJVCg0KQ0KKw0KKy8qDQorICogVGhlIHJlZmVyZW5jZSBt YW51YWwgZGVzY3JpYmVzIHRoaXMgZmllbGQgYXMgdHdvIHNlcGFyYXRlIGJpdHMuIFRoZQ0KKyAq IHNlbWFudGljIG9mIHRoZSB0d28gYml0cyBpc24ndCBvcnRob2dvbmFsIHRob3VnaCwgc28gdGhl eSBhcmUgdHJlYXRlZA0KKyAqIHRvZ2V0aGVyIGFzIGEgMi1iaXQgZmllbGQgaGVyZS4NCisgKi8N CisjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfRUxTCUdFTk1BU0soMywgMikNCisjZGVmaW5lIFBX TV9JTVhfVFBNX0NuU0NfRUxTX1BPTEFSSVRZX0lOVkVSU0VECTB4MQ0KKyNkZWZpbmUgUFdNX0lN WF9UUE1fQ25TQ19FTFNfSU5WRVJTRUQJRklFTERfUFJFUChQV01fSU1YX1RQTV9DblNDX0VMUywg MSkNCisjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfRUxTX05PUk1BTAlGSUVMRF9QUkVQKFBXTV9J TVhfVFBNX0NuU0NfRUxTLCAyKQ0KKw0KKw0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9EX1dJRFRI CTE2DQorI2RlZmluZSBQV01fSU1YX1RQTV9NT0RfTU9ECUdFTk1BU0soUFdNX0lNWF9UUE1fTU9E X1dJRFRIIC0gMSwgMCkNCisNCitzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCB7DQorCXN0cnVjdCBw d21fY2hpcCBjaGlwOw0KKwlzdHJ1Y3QgY2xrICpjbGs7DQorCXZvaWQgX19pb21lbSAqYmFzZTsN CisJc3RydWN0IG11dGV4IGxvY2s7DQorCXUzMiB1c2VyX2NvdW50Ow0KKwl1MzIgZW5hYmxlX2Nv dW50Ow0KKwl1MzIgcmVhbF9wZXJpb2Q7DQorfTsNCisNCitzdHJ1Y3QgaW14X3RwbV9wd21fcGFy YW0gew0KKwl1OCBwcmVzY2FsZTsNCisJdTMyIG1vZDsNCisJdTMyIHZhbDsNCit9Ow0KKw0KK3N0 cnVjdCBpbXhfdHBtX3B3bV9jaGFubmVsIHsNCisJZW51bSBwd21fcG9sYXJpdHkgcG9sYXJpdHk7 DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0b19pbXhf dHBtX3B3bV9jaGlwKHN0cnVjdCBwd21fY2hpcCAqY2hpcCkNCit7DQorCXJldHVybiBjb250YWlu ZXJfb2YoY2hpcCwgc3RydWN0IGlteF90cG1fcHdtX2NoaXAsIGNoaXApOw0KK30NCisNCitzdGF0 aWMgaW50IHB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCisJ CQkJICAgc3RydWN0IGlteF90cG1fcHdtX3BhcmFtICpwLA0KKwkJCQkgICBzdHJ1Y3QgcHdtX3N0 YXRlICpzdGF0ZSwNCisJCQkJICAgc3RydWN0IHB3bV9zdGF0ZSAqcmVhbF9zdGF0ZSkNCit7DQor CXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXAp Ow0KKwl1MzIgcmF0ZSwgcHJlc2NhbGUsIHBlcmlvZF9jb3VudCwgY2xvY2tfdW5pdDsNCisJdTY0 IHRtcDsNCisNCisJcmF0ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQorCXRtcCA9ICh1NjQp c3RhdGUtPnBlcmlvZCAqIHJhdGU7DQorCWNsb2NrX3VuaXQgPSBESVZfUk9VTkRfQ0xPU0VTVF9V TEwodG1wLCBOU0VDX1BFUl9TRUMpOw0KKwlpZiAoY2xvY2tfdW5pdCA8PSBQV01fSU1YX1RQTV9N T0RfTU9EKQ0KKwkJcHJlc2NhbGUgPSAwOw0KKwllbHNlDQorCQlwcmVzY2FsZSA9IGlsb2cyKGNs b2NrX3VuaXQpICsgMSAtIFBXTV9JTVhfVFBNX01PRF9XSURUSDsNCisNCisJaWYgKCghRklFTERf RklUKFBXTV9JTVhfVFBNX1NDX1BTLCBwcmVzY2FsZSkpKQ0KKwkJcmV0dXJuIC1FUkFOR0U7DQor CXAtPnByZXNjYWxlID0gcHJlc2NhbGU7DQorDQorCXBlcmlvZF9jb3VudCA9IChjbG9ja191bml0 ICsgKCgxIDw8IHByZXNjYWxlKSA+PiAxKSkgPj4gcHJlc2NhbGU7DQorCXAtPm1vZCA9IHBlcmlv ZF9jb3VudDsNCisNCisJLyogY2FsY3VsYXRlIHJlYWwgcGVyaW9kIEhXIGNhbiBzdXBwb3J0ICov DQorCXRtcCA9ICh1NjQpcGVyaW9kX2NvdW50IDw8IHByZXNjYWxlOw0KKwl0bXAgKj0gTlNFQ19Q RVJfU0VDOw0KKwlyZWFsX3N0YXRlLT5wZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1w LCByYXRlKTsNCisNCisJLyoNCisJICogaWYgZXZlbnR1YWxseSB0aGUgUFdNIG91dHB1dCBpcyBp bmFjdGl2ZSwgZWl0aGVyDQorCSAqIGR1dHkgY3ljbGUgaXMgMCBvciBzdGF0dXMgaXMgZGlzYWJs ZWQsIG5lZWQgdG8NCisJICogbWFrZSBzdXJlIHRoZSBvdXRwdXQgcGluIGlzIGluYWN0aXZlLg0K KwkgKi8NCisJaWYgKCFzdGF0ZS0+ZW5hYmxlZCkNCisJCXJlYWxfc3RhdGUtPmR1dHlfY3ljbGUg PSAwOw0KKwllbHNlDQorCQlyZWFsX3N0YXRlLT5kdXR5X2N5Y2xlID0gc3RhdGUtPmR1dHlfY3lj bGU7DQorDQorCXRtcCA9ICh1NjQpcC0+bW9kICogcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZTsNCisJ cC0+dmFsID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmVhbF9zdGF0ZS0+cGVyaW9kKTsN CisNCisJcmVhbF9zdGF0ZS0+cG9sYXJpdHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQorCXJlYWxfc3Rh dGUtPmVuYWJsZWQgPSBzdGF0ZS0+ZW5hYmxlZDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIHB3bV9pbXhfdHBtX2dldF9zdGF0ZShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQor CQkJCSAgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwNCisJCQkJICBzdHJ1Y3QgcHdtX3N0YXRlICpz dGF0ZSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3 bV9jaGlwKGNoaXApOw0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hhbm5lbCAqY2hhbiA9IHB3bV9n ZXRfY2hpcF9kYXRhKHB3bSk7DQorCXUzMiByYXRlLCB2YWwsIHByZXNjYWxlOw0KKwl1NjQgdG1w Ow0KKw0KKwkvKiBnZXQgcGVyaW9kICovDQorCXN0YXRlLT5wZXJpb2QgPSB0cG0tPnJlYWxfcGVy aW9kOw0KKw0KKwkvKiBnZXQgZHV0eSBjeWNsZSAqLw0KKwlyYXRlID0gY2xrX2dldF9yYXRlKHRw bS0+Y2xrKTsNCisJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KKwlw cmVzY2FsZSA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9TQ19QUywgdmFsKTsNCisJdG1wID0gcmVh ZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25WKHB3bS0+aHdwd20pKTsNCisJdG1wID0gKHRt cCA8PCBwcmVzY2FsZSkgKiBOU0VDX1BFUl9TRUM7DQorCXN0YXRlLT5kdXR5X2N5Y2xlID0gRElW X1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmF0ZSk7DQorDQorCS8qIGdldCBwb2xhcml0eSAqLw0K KwlpZiAoY2hhbikgew0KKwkJc3RhdGUtPnBvbGFyaXR5ID0gY2hhbi0+cG9sYXJpdHk7DQorCX0g ZWxzZSB7DQorCQkvKiBpbiBjYXNlIG5vIGNoYW5uZWwgcmVxdWVzdGVkIHlldCwgcmV0dXJuIEhX IHN0YXR1cyAqLw0KKwkJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25TQyhw d20tPmh3cHdtKSk7DQorCQlpZiAoRklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwp ID09DQorCQkgICAgUFdNX0lNWF9UUE1fQ25TQ19FTFNfUE9MQVJJVFlfSU5WRVJTRUQpDQorCQkJ c3RhdGUtPnBvbGFyaXR5ID0gUFdNX1BPTEFSSVRZX0lOVkVSU0VEOw0KKwkJZWxzZQ0KKwkJCS8q DQorCQkJICogQXNzdW1lIHJlc2VydmVkIHZhbHVlcyAoMmIwMCBhbmQgMmIxMSkgdG8geWllbGQN CisJCQkgKiBub3JtYWwgcG9sYXJpdHkuDQorCQkJICovDQorCQkJc3RhdGUtPnBvbGFyaXR5ID0g UFdNX1BPTEFSSVRZX05PUk1BTDsNCisJfQ0KKw0KKwkvKiBnZXQgY2hhbm5lbCBzdGF0dXMgKi8N CisJc3RhdGUtPmVuYWJsZWQgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fQ25TQ19FTFMsIHZhbCkg PyB0cnVlIDogZmFsc2U7DQorfQ0KKw0KKy8qIHRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8g YmUgY2FsbGVkIHdpdGggbXV0ZXggaG9sZCAqLw0KK3N0YXRpYyBpbnQgcHdtX2lteF90cG1fYXBw bHlfaHcoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KKwkJCQlzdHJ1Y3QgcHdtX2RldmljZSAqcHdt LA0KKwkJCQlzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSwNCisJCQkJc3RydWN0IGlteF90cG1fcHdt X3BhcmFtICpwKQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90 cG1fcHdtX2NoaXAoY2hpcCk7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGFubmVsICpjaGFuID0g cHdtX2dldF9jaGlwX2RhdGEocHdtKTsNCisJYm9vbCBwZXJpb2RfdXBkYXRlID0gZmFsc2U7DQor CWJvb2wgZHV0eV91cGRhdGUgPSBmYWxzZTsNCisJdTMyIHZhbCwgY21vZCwgY3VyX3ByZXNjYWxl Ow0KKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7DQorCXN0cnVjdCBwd21fc3RhdGUgYzsNCisNCisJ aWYgKHN0YXRlLT5wZXJpb2QgIT0gdHBtLT5yZWFsX3BlcmlvZCkgew0KKwkJLyoNCisJCSAqIFRQ TSBjb3VudGVyIGlzIHNoYXJlZCBieSBtdWx0aXBsZSBjaGFubmVscywgc28NCisJCSAqIHByZXNj YWxlIGFuZCBwZXJpb2QgY2FuIE5PVCBiZSBtb2RpZmllZCB3aGVuDQorCQkgKiB0aGVyZSBhcmUg bXVsdGlwbGUgY2hhbm5lbHMgaW4gdXNlIHdpdGggZGlmZmVyZW50DQorCQkgKiBwZXJpb2Qgc2V0 dGluZ3MuDQorCQkgKi8NCisJCWlmICh0cG0tPnVzZXJfY291bnQgPiAxKQ0KKwkJCXJldHVybiAt RUJVU1k7DQorDQorCQl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQor CQljbW9kID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX0NNT0QsIHZhbCk7DQorCQljdXJfcHJl c2NhbGUgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfUFMsIHZhbCk7DQorCQlpZiAoY21vZCAm JiBjdXJfcHJlc2NhbGUgIT0gcC0+cHJlc2NhbGUpDQorCQkJcmV0dXJuIC1FQlVTWTsNCisNCisJ CS8qIHNldCBUUE0gY291bnRlciBwcmVzY2FsZSAqLw0KKwkJdmFsICY9IH5QV01fSU1YX1RQTV9T Q19QUzsNCisJCXZhbCB8PSBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX1BTLCBwLT5wcmVzY2Fs ZSk7DQorCQl3cml0ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQorDQorCQkv Kg0KKwkJICogc2V0IHBlcmlvZCBjb3VudDoNCisJCSAqIGlmIHRoZSBQV00gaXMgZGlzYWJsZWQg KENNT0RbMTowXSA9IDJiMDApLCB0aGVuIE1PRCByZWdpc3Rlcg0KKwkJICogaXMgdXBkYXRlZCB3 aGVuIE1PRCByZWdpc3RlciBpcyB3cml0dGVuLg0KKwkJICoNCisJCSAqIGlmIHRoZSBQV00gaXMg ZW5hYmxlZCAoQ01PRFsxOjBdIOKJoCAyYjAwKSwgdGhlIHBlcmlvZCBsZW5ndGgNCisJCSAqIGlz IGxhdGNoZWQgaW50byBoYXJkd2FyZSB3aGVuIHRoZSBuZXh0IHBlcmlvZCBzdGFydHMuDQorCQkg Ki8NCisJCXdyaXRlbChwLT5tb2QsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX01PRCk7DQorCQl0 cG0tPnJlYWxfcGVyaW9kID0gc3RhdGUtPnBlcmlvZDsNCisJCXBlcmlvZF91cGRhdGUgPSB0cnVl Ow0KKwl9DQorDQorCXB3bV9pbXhfdHBtX2dldF9zdGF0ZShjaGlwLCBwd20sICZjKTsNCisNCisJ aWYgKHN0YXRlLT5kdXR5X2N5Y2xlICE9IGMuZHV0eV9jeWNsZSkgew0KKwkJLyoNCisJCSAqIHNl dCBjaGFubmVsIHZhbHVlOg0KKwkJICogaWYgdGhlIFBXTSBpcyBkaXNhYmxlZCAoQ01PRFsxOjBd ID0gMmIwMCksIHRoZW4gQ25WIHJlZ2lzdGVyDQorCQkgKiBpcyB1cGRhdGVkIHdoZW4gQ25WIHJl Z2lzdGVyIGlzIHdyaXR0ZW4uDQorCQkgKg0KKwkJICogaWYgdGhlIFBXTSBpcyBlbmFibGVkIChD TU9EWzE6MF0g4omgIDJiMDApLCB0aGUgZHV0eSBsZW5ndGgNCisJCSAqIGlzIGxhdGNoZWQgaW50 byBoYXJkd2FyZSB3aGVuIHRoZSBuZXh0IHBlcmlvZCBzdGFydHMuDQorCQkgKi8NCisJCXdyaXRl bChwLT52YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tPmh3cHdtKSk7DQorCQlk dXR5X3VwZGF0ZSA9IHRydWU7DQorCX0NCisNCisJLyogbWFrZSBzdXJlIE1PRCAmIENuViByZWdp c3RlcnMgYXJlIHVwZGF0ZWQgKi8NCisJaWYgKHBlcmlvZF91cGRhdGUgfHwgZHV0eV91cGRhdGUp IHsNCisJCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0cG0tPnJlYWxfcGVy aW9kIC8NCisJCQkJCQkgICAgIE5TRUNfUEVSX01TRUMgKyAxKTsNCisJCXdoaWxlIChyZWFkbCh0 cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9NT0QpICE9IHAtPm1vZA0KKwkJICAgICAgIHx8IHJlYWRs KHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tPmh3cHdtKSkNCisJCSAgICAgICAhPSBw LT52YWwpIHsNCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkNCisJCQkJcmV0 dXJuIC1FVElNRTsNCisJCQljcHVfcmVsYXgoKTsNCisJCX0NCisJfQ0KKw0KKwl2YWwgPSByZWFk bCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblNDKHB3bS0+aHdwd20pKTsNCisJdmFsICY9IH4o UFdNX0lNWF9UUE1fQ25TQ19FTFMgfCBQV01fSU1YX1RQTV9DblNDX01TQSB8DQorCQkgUFdNX0lN WF9UUE1fQ25TQ19NU0IpOw0KKwlpZiAoc3RhdGUtPmVuYWJsZWQpIHsNCisJCS8qDQorCQkgKiBz ZXQgcG9sYXJpdHkgKGZvciBlZGdlLWFsaWduZWQgUFdNIG1vZGVzKQ0KKwkJICoNCisJCSAqIEVM U1sxOjBdID0gMmIxMCB5aWVsZHMgbm9ybWFsIHBvbGFyaXR5IGJlaGF2aW91ciwNCisJCSAqIEVM U1sxOjBdID0gMmIwMSB5aWVsZHMgaW52ZXJzZWQgcG9sYXJpdHkuDQorCQkgKiBUaGUgb3RoZXIg dmFsdWVzIGFyZSByZXNlcnZlZC4NCisJCSAqDQorCQkgKiBwb2xhcml0eSBzZXR0aW5ncyB3aWxs IGVuYWJsZWQvZGlzYWJsZSBvdXRwdXQgc3RhdHVzDQorCQkgKiBpbW1lZGlhdGVseSwgc28gaWYg dGhlIGNoYW5uZWwgaXMgZGlzYWJsZWQsIG5lZWQgdG8NCisJCSAqIG1ha2Ugc3VyZSBNU0EvTVNC L0VMUyBhcmUgc2V0IHRvIDAgd2hpY2ggbWVhbnMgY2hhbm5lbA0KKwkJICogZGlzYWJsZWQuDQor CQkgKi8NCisJCXZhbCB8PSBQV01fSU1YX1RQTV9DblNDX01TQjsNCisJCXZhbCB8PSAoc3RhdGUt PnBvbGFyaXR5ID09IFBXTV9QT0xBUklUWV9OT1JNQUwpID8NCisJCQlQV01fSU1YX1RQTV9DblND X0VMU19OT1JNQUwgOg0KKwkJCVBXTV9JTVhfVFBNX0NuU0NfRUxTX0lOVkVSU0VEOw0KKwl9DQor CXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdtLT5od3B3bSkpOw0K Kw0KKwkvKiBjb250cm9sIHRoZSBjb3VudGVyIHN0YXR1cyAqLw0KKwlpZiAoc3RhdGUtPmVuYWJs ZWQgIT0gYy5lbmFibGVkKSB7DQorCQl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQ TV9TQyk7DQorCQlpZiAoc3RhdGUtPmVuYWJsZWQpIHsNCisJCQlpZiAoKyt0cG0tPmVuYWJsZV9j b3VudCA9PSAxKQ0KKwkJCQl2YWwgfD0gUFdNX0lNWF9UUE1fU0NfQ01PRF9JTkNfRVZFUllfQ0xL Ow0KKwkJfSBlbHNlIHsNCisJCQlpZiAoLS10cG0tPmVuYWJsZV9jb3VudCA9PSAwKQ0KKwkJCQl2 YWwgJj0gflBXTV9JTVhfVFBNX1NDX0NNT0Q7DQorCQl9DQorCQl3cml0ZWwodmFsLCB0cG0tPmJh c2UgKyBQV01fSU1YX1RQTV9TQyk7DQorCX0NCisNCisJLyogc2F2ZSBsYXN0IHBvbGFyaXR5IHNl dHRpbmcgKi8NCisJY2hhbi0+cG9sYXJpdHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX2FwcGx5KHN0cnVjdCBwd21fY2hp cCAqY2hpcCwNCisJCQkgICAgIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQorCQkJICAgICBzdHJ1 Y3QgcHdtX3N0YXRlICpzdGF0ZSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0g PSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fcGFyYW0g cGFyYW07DQorCXN0cnVjdCBwd21fc3RhdGUgcmVhbF9zdGF0ZTsNCisJaW50IHJldDsNCisNCisJ cmV0ID0gcHdtX2lteF90cG1fcm91bmRfc3RhdGUoY2hpcCwgJnBhcmFtLCBzdGF0ZSwgJnJlYWxf c3RhdGUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCW11dGV4X2xvY2so JnRwbS0+bG9jayk7DQorCXJldCA9IHB3bV9pbXhfdHBtX2FwcGx5X2h3KGNoaXAsIHB3bSwgJnJl YWxfc3RhdGUsICZwYXJhbSk7DQorCW11dGV4X3VubG9jaygmdHBtLT5sb2NrKTsNCisNCisJcmV0 dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBwd21faW14X3RwbV9yZXF1ZXN0KHN0cnVjdCBw d21fY2hpcCAqY2hpcCwgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkNCit7DQorCXN0cnVjdCBpbXhf dHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KKwlzdHJ1Y3Qg aW14X3RwbV9wd21fY2hhbm5lbCAqY2hhbjsNCisNCisJY2hhbiA9IGt6YWxsb2Moc2l6ZW9mKCpj aGFuKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghY2hhbikNCisJCXJldHVybiAtRU5PTUVNOw0KKw0K Kwlwd21fc2V0X2NoaXBfZGF0YShwd20sIGNoYW4pOw0KKw0KKwltdXRleF9sb2NrKCZ0cG0tPmxv Y2spOw0KKwl0cG0tPnVzZXJfY291bnQrKzsNCisJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgcHdtX2lteF90cG1fZnJlZShzdHJ1 Y3QgcHdtX2NoaXAgKmNoaXAsIHN0cnVjdCBwd21fZGV2aWNlICpwd20pDQorew0KKwlzdHJ1Y3Qg aW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlwKTsNCisNCisJ bXV0ZXhfbG9jaygmdHBtLT5sb2NrKTsNCisJdHBtLT51c2VyX2NvdW50LS07DQorCW11dGV4X3Vu bG9jaygmdHBtLT5sb2NrKTsNCisNCisJa2ZyZWUocHdtX2dldF9jaGlwX2RhdGEocHdtKSk7DQor CXB3bV9zZXRfY2hpcF9kYXRhKHB3bSwgTlVMTCk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcHdtX29wcyBpbXhfdHBtX3B3bV9vcHMgPSB7DQorCS5yZXF1ZXN0ID0gcHdtX2lteF90cG1f cmVxdWVzdCwNCisJLmZyZWUgPSBwd21faW14X3RwbV9mcmVlLA0KKwkuZ2V0X3N0YXRlID0gcHdt X2lteF90cG1fZ2V0X3N0YXRlLA0KKwkuYXBwbHkgPSBwd21faW14X3RwbV9hcHBseSwNCisJLm93 bmVyID0gVEhJU19NT0RVTEUsDQorfTsNCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21f Y2hpcCAqdHBtOw0KKwlpbnQgcmV0Ow0KKwl1MzIgdmFsOw0KKw0KKwl0cG0gPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp0cG0pLCBHRlBfS0VSTkVMKTsNCisJaWYgKCF0cG0pDQor CQlyZXR1cm4gLUVOT01FTTsNCisNCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHBtKTsN CisNCisJdHBtLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAp Ow0KKwlpZiAoSVNfRVJSKHRwbS0+YmFzZSkpDQorCQlyZXR1cm4gUFRSX0VSUih0cG0tPmJhc2Up Ow0KKw0KKwl0cG0tPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsNCisJaWYg KElTX0VSUih0cG0tPmNsaykpIHsNCisJCXJldCA9IFBUUl9FUlIodHBtLT5jbGspOw0KKwkJaWYg KHJldCAhPSAtRVBST0JFX0RFRkVSKQ0KKwkJCWRldl9lcnIoJnBkZXYtPmRldiwNCisJCQkJImZh aWxlZCB0byBnZXQgUFdNIGNsb2NrOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0N CisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycigmcGRldi0+ZGV2LA0KKwkJCSJmYWlsZWQgdG8gcHJlcGFyZSBvciBlbmFibGUg Y2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwl0cG0tPmNoaXAu ZGV2ID0gJnBkZXYtPmRldjsNCisJdHBtLT5jaGlwLm9wcyA9ICZpbXhfdHBtX3B3bV9vcHM7DQor CXRwbS0+Y2hpcC5iYXNlID0gLTE7DQorCXRwbS0+Y2hpcC5vZl94bGF0ZSA9IG9mX3B3bV94bGF0 ZV93aXRoX2ZsYWdzOw0KKwl0cG0tPmNoaXAub2ZfcHdtX25fY2VsbHMgPSAzOw0KKw0KKwkvKiBn ZXQgbnVtYmVyIG9mIGNoYW5uZWxzICovDQorCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9J TVhfVFBNX1BBUkFNKTsNCisJdHBtLT5jaGlwLm5wd20gPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1f UEFSQU1fQ0hBTiwgdmFsKTsNCisNCisJbXV0ZXhfaW5pdCgmdHBtLT5sb2NrKTsNCisNCisJcmV0 ID0gcHdtY2hpcF9hZGQoJnRwbS0+Y2hpcCk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoJnBk ZXYtPmRldiwgImZhaWxlZCB0byBhZGQgUFdNIGNoaXA6ICVkXG4iLCByZXQpOw0KKwkJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKHRwbS0+Y2xrKTsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOw0KKwlpbnQgcmV0ID0gcHdtY2hpcF9yZW1vdmUoJnRwbS0+Y2hpcCk7DQor DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0cG0tPmNsayk7DQorDQorCXJldHVybiByZXQ7DQor fQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcHdtX2lteF90cG1fc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gZGV2 X2dldF9kcnZkYXRhKGRldik7DQorDQorCWlmICh0cG0tPmVuYWJsZV9jb3VudCA+IDApDQorCQly ZXR1cm4gLUVCVVNZOw0KKw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUodHBtLT5jbGspOw0KKw0K KwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBwd21faW14X3Rw bV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2No aXAgKnRwbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIo ZGV2LA0KKwkJCSJmYWlsZWQgdG8gcHJlcGFyZSBvciBlbmFibGUgY2xvY2s6ICVkXG4iLA0KKwkJ CXJldCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBTSU1QTEVfREVWX1BNX09Q UyhpbXhfdHBtX3B3bV9wbSwNCisJCQkgcHdtX2lteF90cG1fc3VzcGVuZCwgcHdtX2lteF90cG1f cmVzdW1lKTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXhfdHBtX3B3 bV9kdF9pZHNbXSA9IHsNCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14N3VscC1wd20iLCB9LA0K Kwl7IC8qIHNlbnRpbmVsICovIH0NCit9Ow0KK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteF90 cG1fcHdtX2R0X2lkcyk7DQorDQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14X3Rw bV9wd21fZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAiaW14N3VscC10cG0t cHdtIiwNCisJCS5vZl9tYXRjaF90YWJsZSA9IGlteF90cG1fcHdtX2R0X2lkcywNCisJCS5wbSA9 ICZpbXhfdHBtX3B3bV9wbSwNCisJfSwNCisJLnByb2JlCT0gcHdtX2lteF90cG1fcHJvYmUsDQor CS5yZW1vdmUgPSBwd21faW14X3RwbV9yZW1vdmUsDQorfTsNCittb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGlteF90cG1fcHdtX2RyaXZlcik7DQorDQorTU9EVUxFX0FVVEhPUigiQW5zb24gSHVhbmcg PEFuc29uLkh1YW5nQG54cC5jb20+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIFRQTSBQ V00gRHJpdmVyIik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KLS0gDQoyLjcuNA0KDQo=