From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6D64BC43381 for ; Wed, 6 Mar 2019 20:00:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 25C3720661 for ; Wed, 6 Mar 2019 20:00:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="mkKGrBIl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730327AbfCFUAn (ORCPT ); Wed, 6 Mar 2019 15:00:43 -0500 Received: from mail-eopbgr10060.outbound.protection.outlook.com ([40.107.1.60]:26341 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726233AbfCFUAm (ORCPT ); Wed, 6 Mar 2019 15:00:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8o4Gm2e1rFQ5KUaS0NuXf5EKmhew+zmY9xG7OAQUpm0=; b=mkKGrBIlv8S5TtVzwurcnX6bik3JkyQl+ItVponOBIukTabiYogZKhr8vLfluuF+QaLm6LPV0FOynMkrbg5Idgc4Y8rAFyyT5oLGZxuiP/zqKTjXYbsABtn9l3UAQRCDKyrXcfsUdDnRROCE61odnRdgXkj0GyvL3q/dhmX+fdU= Received: from DB6PR05MB3223.eurprd05.prod.outlook.com (10.175.232.149) by DB6PR05MB3256.eurprd05.prod.outlook.com (10.170.221.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1686.16; Wed, 6 Mar 2019 20:00:30 +0000 Received: from DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::7125:3978:d83c:74f6]) by DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::7125:3978:d83c:74f6%6]) with mapi id 15.20.1665.021; Wed, 6 Mar 2019 20:00:30 +0000 From: Liming Sun To: Andy Shevchenko CC: David Woods , Andy Shevchenko , Darren Hart , Vadim Pasternak , Linux Kernel Mailing List , Platform Driver Subject: RE: [PATCH v10] platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc Thread-Topic: [PATCH v10] platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc Thread-Index: AQHUz32MYsaubm4NZ0Cxf1vyWTPgKKX9Ms0AgAAg1KA= Date: Wed, 6 Mar 2019 20:00:30 +0000 Message-ID: References: <1551369083-31122-1-git-send-email-lsun@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=lsun@mellanox.com; x-originating-ip: [216.156.69.42] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a894e001-be53-4d67-7124-08d6a26e62b0 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:DB6PR05MB3256; x-ms-traffictypediagnostic: DB6PR05MB3256: x-microsoft-exchange-diagnostics: =?utf-8?B?MTtEQjZQUjA1TUIzMjU2OzIzOkhNeHJoUU5EMmdHOVorYUJRbDlkR0xQRXM4?= =?utf-8?B?ZnkzNC95NGFyOHBEWm15OHlvWHRjQ3RSWXJKdm55UUhTREIwdzJuK1NzclFu?= =?utf-8?B?NmJVZ1luMVdXSFBXaVFlTzg4Z0dQcm8vdTJ0aFFMT3pnSzBHSHFMK0kzYnJN?= =?utf-8?B?Rk1Kbnd2bUl0WDNMc1dCVDYrR1RDSXRZY0ZBc1o2K0JMZWlJaW54S1dBN3pp?= =?utf-8?B?eWhFQmFGN1U2WWRsV216Z3ptc0pLVWFVbHNFRnFOOTErZGpCa3ArVXBHakhy?= =?utf-8?B?SmlZNVlBSmkvSkVDakE0SCtzRmlEUFBHOTJBaGpwN2Q1ZHVvL2xXSFhyNktw?= =?utf-8?B?dzNncUw0R2pHdE1sU0M0bHZwYjJUalg4T2xETTNQRzdnUWVwSlNNeWtkeDd1?= =?utf-8?B?WXZKalR3VW5LaEZ5TlpPbzNHZW8vSEtNaTVxUXdBZDdYUnl6WEgrMkZDUWhO?= =?utf-8?B?SlgrZEJka1dCWVd0V05SM3BwUHg0TkdrUWhubFoyaEJYVkQ2Y3EzT1NucUU1?= =?utf-8?B?Z3hBQWg5elIwZ2I2WXFDeDB3MWI5NGx2V3VNOGZjN3dGdVFGaDk0a0syZ3dZ?= =?utf-8?B?S1l0Y3pZUHNxclpadFV5WXZZMXZMQ2VqZWxlbXAwSnBKOWtSOVJQTDBGTE02?= =?utf-8?B?a0I2czNSdnJEamVsSFNvd3FicURHRGRsK0hVVWJTQWNuNUxkZDhFZjNSSWxR?= =?utf-8?B?QVhNeUc4bmg0dnM5S0ZuUVdlY3JHWXdzaFlzZlYrQjZWNVlPRms3TEkwaXVv?= =?utf-8?B?SlU5TklaNERDZE9SeG9kSlFzMnp4alRNYnRXWWo4eXlGOFdQeERocUJGS3dh?= =?utf-8?B?V0NnTWV1ZjhrVjNrbXNGcFYwaTVOaEh6SlczZnJ2ZXM4MnIyYjNVZzV1c09N?= =?utf-8?B?VVFnem52cDhYcVVYK0hsV3FXRVV3dDdOK2xySTh3aGloSjE5czhOam45VUFZ?= =?utf-8?B?VVdSWUsra0F6TTJMVTRsVnFGNEttRzlxTEFqTyt6YXd3VEpoWVdKWVh3bEg3?= =?utf-8?B?NnUrdDhaVDR5WG45NkVRSFRNdFpXaUZzRWdaQTFxSHZpNGF5MnB0SVJNNVF4?= =?utf-8?B?aW11NmNEVUUxSGdtNWZMS2N2S3M5U251c1FQVHIrN0RKWVVNRUQ2SGNBN3NX?= =?utf-8?B?RWlNTTZQUVl5d0NNT2t0VmdBY1E3WWZ6L1hUQWtkcXNlcVhHeUZGbThienhC?= =?utf-8?B?VmRPNHhEb1Rqa3lOVDNHcDk2TlM3VkhEUndGd213RkJtWlM2VDROaW50OW5Q?= =?utf-8?B?ZGxFdnhzVC9mbDdFcEdDbHdtMGlSczQ3UmZLb2RjMGVnYm9oUStVUEttK1N4?= =?utf-8?B?cGdKbXdZc2VPV1dHd3pQUU9UWHlBVmFTTWpsOFE5N3VmQ0lIRmFrYzI2Y3l2?= =?utf-8?B?M3lVWlZOdVA1WVkzZFBiSmVXclh4M2NCQXNGYlcxTDBRdXhtSXdBMnUyRFhH?= =?utf-8?B?eVJJQzNCcmtPbnNyeFR5Mk9tYlJKV0Z3VGlGNDN2akdNL3V3R1lXeENCN0JW?= =?utf-8?B?clhHZml3NCtqSFdXcjJKdXp3eTdmcVh5ajB6Kzk4Y1JrRUxwNk9rNWtEQk80?= =?utf-8?B?QVV2OWpCc1hEMGRaMG8vbE1VVm9hcVR6SmZHT0tmdXpDNE5DZ2ZscG5aUFJo?= =?utf-8?B?eDk1cTN4Yzh0eStsVXJnb1UyZ3c4R2lnUE0xcGpqVkh2WjhwdXNMMllseTRB?= =?utf-8?B?Mzl0Z2c5WGxzTWY2V2FHYjVjOHFYbTRIZmYvczNjL2h2Wml5SVZxNDA5S1E3?= =?utf-8?Q?pAqWTGAvVtepbSWqHYZ9OBnfVF6KHFV5S7MhI=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0968D37274 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6029001)(136003)(396003)(376002)(366004)(346002)(39860400002)(199004)(189003)(51914003)(13464003)(229853002)(4326008)(33656002)(8936002)(68736007)(74316002)(81166006)(53936002)(81156014)(71200400001)(2906002)(7696005)(6116002)(71190400001)(76176011)(25786009)(7736002)(8676002)(3846002)(97736004)(66066001)(476003)(11346002)(446003)(486006)(99286004)(5660300002)(186003)(102836004)(305945005)(316002)(26005)(55016002)(9686003)(86362001)(14444005)(53546011)(6506007)(256004)(478600001)(6436002)(54906003)(105586002)(14454004)(6916009)(52536013)(106356001)(6246003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR05MB3256;H:DB6PR05MB3223.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: OVu8MmdJ0ji1OZVHfh3AFdfAfwzsaNYz78hR61+Q4FK/heAxs8vl1b/z3k9WGmyL3eGrrMfX67CjQvictTWvHSqqGizYTUbgYX3Cfp4DxjSVmBqot6GlpiIAHar8B+pF3ZSABHx9Voe/7SCJSvkONfyCdBM0kMUDJGTS1wKZW/i8V+4pdBkoypNQV6jdySrf9D6a8UFjCXIQy15Hu5qRNtcyixn7enx8rhy1jwYHHDhKULkxgun5RZYVUTTiBwno4RWD5v+SUacPGhvFPmAp0pvyafMpHO6sa8WfyDQo2xBqDvqnENYLO9qzoGppp6cVOHNw0f7/Wbw+f/6xUWFbfSMGEj1UszJ0uOBrRKdiMymUTFAcvZbVxzcr9D/t2FRPiiqrmeMgdNXna8vwptDz5Simiy15nwYtxoglzuQMvSw= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: a894e001-be53-4d67-7124-08d6a26e62b0 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2019 20:00:30.4175 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR05MB3256 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhhbmtzIEFuZHkhIFBsZWFzZSBzZWUgbXkgcmVzcG9uc2UgYmVsb3cuIElmIG5vIGZ1cnRoZXIg Y29tbWVudHMsIEknbGwgdHJ5IHRvIHBvc3QgdjExIGFmdGVyIG1vcmUgdGVzdGluZy4NCg0KUmVn YXJkcywNCkxpbWluZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFu ZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4NCj4gU2VudDogVHVlc2Rh eSwgTWFyY2ggNSwgMjAxOSAxMDozNCBBTQ0KPiBUbzogTGltaW5nIFN1biA8bHN1bkBtZWxsYW5v eC5jb20+DQo+IENjOiBEYXZpZCBXb29kcyA8ZHdvb2RzQG1lbGxhbm94LmNvbT47IEFuZHkgU2hl dmNoZW5rbyA8YW5keUBpbmZyYWRlYWQub3JnPjsgRGFycmVuIEhhcnQgPGR2aGFydEBpbmZyYWRl YWQub3JnPjsgVmFkaW0NCj4gUGFzdGVybmFrIDx2YWRpbXBAbWVsbGFub3guY29tPjsgTGludXgg S2VybmVsIE1haWxpbmcgTGlzdCA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz47IFBsYXRm b3JtIERyaXZlciA8cGxhdGZvcm0tZHJpdmVyLQ0KPiB4ODZAdmdlci5rZXJuZWwub3JnPg0KPiBT dWJqZWN0OiBSZTogW1BBVENIIHYxMF0gcGxhdGZvcm0vbWVsbGFub3g6IEFkZCBUbUZpZm8gZHJp dmVyIGZvciBNZWxsYW5veCBCbHVlRmllbGQgU29jDQo+IA0KPiBPbiBUaHUsIEZlYiAyOCwgMjAx OSBhdCA1OjUxIFBNIExpbWluZyBTdW4gPGxzdW5AbWVsbGFub3guY29tPiB3cm90ZToNCj4gPg0K PiA+IFRoaXMgY29tbWl0IGFkZHMgdGhlIFRtRmlmbyBwbGF0Zm9ybSBkcml2ZXIgZm9yIE1lbGxh bm94IEJsdWVGaWVsZA0KPiA+IFNvYy4gVG1GaWZvIGlzIGEgc2hhcmVkIEZJRk8gd2hpY2ggZW5h YmxlcyBleHRlcm5hbCBob3N0IG1hY2hpbmUNCj4gPiB0byBleGNoYW5nZSBkYXRhIHdpdGggdGhl IFNvQyB2aWEgVVNCIG9yIFBDSWUuIFRoZSBkcml2ZXIgaXMgYmFzZWQNCj4gPiBvbiB2aXJ0aW8g ZnJhbWV3b3JrIGFuZCBoYXMgY29uc29sZSBhbmQgbmV0d29yayBhY2Nlc3MgZW5hYmxlZC4NCj4g DQo+IFRoYW5rIHlvdSBmb3IgYW4gdXBkYXRlLg0KPiANCj4gVW5mb3J0dW5hdGVseSBtb3JlIHdv cmsgaXMgbmVlZGVkLiBNeSBjb21tZW50cyBiZWxvdy4NCj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZf VE1GSUZPX1RYX1NUU19fQ09VTlRfUk1BU0sgICAgICAgICAgICAgICBHRU5NQVNLKDgsIDApDQo+ ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX1NUU19fQ09VTlRfTUFTSyAgICAgICAgICAgICAg ICAgICAgICAgIEdFTk1BU0soOCwgMCkNCj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RY X0NUTF9fTFdNX1JNQVNLICAgICAgICAgICAgICAgICBHRU5NQVNLKDcsIDApDQo+ID4gKyNkZWZp bmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9fTFdNX01BU0sgICAgICAgICAgICAgICAgICBHRU5NQVNL KDcsIDApDQo+IA0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19UWF9DVExfX0hXTV9STUFTSyAg ICAgICAgICAgICAgICAgR0VOTUFTSyg3LCAwKQ0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19U WF9DVExfX0hXTV9NQVNLICAgICAgICAgICAgICAgICAgR0VOTUFTSygxNSwgOCkNCj4gDQo+ID4g KyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9fTUFYX0VOVFJJRVNfUk1BU0sgICAgICAgICBH RU5NQVNLKDgsIDApDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9fTUFYX0VOVFJJ RVNfTUFTSyAgICAgICAgICBHRU5NQVNLX1VMTCg0MCwgMzIpDQo+IA0KPiA+ICsjZGVmaW5lIE1M WEJGX1RNRklGT19SWF9TVFNfX0NPVU5UX1JNQVNLICAgICAgICAgICAgICAgR0VOTUFTSyg4LCAw KQ0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9TVFNfX0NPVU5UX01BU0sgICAgICAgICAg ICAgICAgICAgICAgICBHRU5NQVNLKDgsIDApDQo+IA0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklG T19SWF9DVExfX0xXTV9STUFTSyAgICAgICAgICAgICAgICAgR0VOTUFTSyg3LCAwKQ0KPiA+ICsj ZGVmaW5lIE1MWEJGX1RNRklGT19SWF9DVExfX0xXTV9NQVNLICAgICAgICAgICAgICAgICAgR0VO TUFTSyg3LCAwKQ0KPiANCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfQ1RMX19IV01fUk1B U0sgICAgICAgICAgICAgICAgIEdFTk1BU0soNywgMCkNCj4gPiArI2RlZmluZSBNTFhCRl9UTUZJ Rk9fUlhfQ1RMX19IV01fTUFTSyAgICAgICAgICAgICAgICAgIEdFTk1BU0soMTUsIDgpDQo+IA0K PiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9DVExfX01BWF9FTlRSSUVTX1JNQVNLICAgICAg ICAgR0VOTUFTSyg4LCAwKQ0KPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9DVExfX01BWF9F TlRSSUVTX01BU0sgICAgICAgICAgR0VOTUFTS19VTEwoNDAsIDMyKQ0KPiANCj4gU2luY2UgdHdv IG9mIHRoZW0gaGF2ZSBfVUxMIHN1ZmZpeCBJJ20gd29uZGVyaW5nIGlmIHlvdSBoYXZlIGNoZWNr ZWQNCj4gZm9yIHNpZGUgZWZmZWN0cyBvbiB0aGUgcmVzdCwgaS5lLiBpZiB5b3Ugb3BlcmF0ZSB3 aXRoIDY0LWJpdCB2YXJpYWJsZQ0KPiBhbmQgdXNlIHNvbWV0aGluZyBsaWtlIH5NTFhCRl9UTUZJ Rk9fUlhfQ1RMX19NQVhfRU5UUklFU19STUFTSywgaXQgbWF5DQo+IGdpdmUgeW91IGludGVyZXN0 aW5nIHJlc3VsdHMuDQoNClRoZSBydW5uaW5nIHN5c3RlbSBvbiB0aGUgU29DIGlzIGFybTY0IHdo ZXJlIEJJVFNfUEVSX0xPTkcgYW5kIA0KQklUU19QRVJfTE9OR19MT05HIGhhdmUgdGhlIHNhbWUg dmFsdWUuIEluIHN1Y2ggY2FzZSwgdGhlIHR3byBtYWNyb3MgYXBwZWFycw0KdG8gYmUgdGhlIHNh bWUuIEJ1dCB5b3UncmUgcmlnaHQsIEkgc2hvdWxkIHVzZSBHRU5NQVNLX1VMTCgpIHRvIGJlIGNv bnNpc3RlbnQNCmFuZCBtb3JlIGNvcnJlY3RseSwganVzdCBpbiBjYXNlIHRoZSAiQ09ORklHXzY0 QklUIiBpcyBub3QgZGVmaW5lZCBzb21laG93Lg0KDQpXaWxsIHVwZGF0ZSBpdCBpbiB2MTEuDQoN Cj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RJTUVSX0lOVEVSVkFMICAgICAgICAgICAg KEhaIC8gMTApDQo+IA0KPiA+ICsvKioNCj4gPiArICogbWx4YmZfdG1maWZvX3U2NCAtIFVuaW9u IG9mIDY0LWJpdCBkYXRhDQo+ID4gKyAqIEBkYXRhIC0gNjQtYml0IGRhdGEgaW4gaG9zdCBieXRl IG9yZGVyDQo+ID4gKyAqIEBkYXRhX2xlIC0gNjQtYml0IGRhdGEgaW4gbGl0dGxlLWVuZGlhbiBi eXRlIG9yZGVyDQo+ID4gKyAqDQo+ID4gKyAqIEl0J3MgZXhwZWN0ZWQgdG8gc2VuZCA2NC1iaXQg bGl0dGxlLWVuZGlhbiB2YWx1ZSAoX19sZTY0KSBpbnRvIHRoZSBUbUZpZm8uDQo+ID4gKyAqIHJl YWRxKCkgYW5kIHdyaXRlcSgpIGV4cGVjdCB1NjQgaW5zdGVhZC4gQSB1bmlvbiBzdHJ1Y3R1cmUg aXMgdXNlZCBoZXJlDQo+ID4gKyAqIHRvIHdvcmthcm91bmQgdGhlIGV4cGxpY2l0IGNhc3Rpbmcg dXNhZ2UgbGlrZSB3cml0ZXEoKih1NjQgKikmZGF0YV9sZSkuDQo+ID4gKyAqLw0KPiANCj4gSG93 IGRvIHlvdSBrbm93IHdoYXQgcmVhZHEoKS93cml0ZXEoKSBkb2VzIHdpdGggdGhlIGRhdGE/IElz IGl0IG9uIGFsbA0KPiBhcmNoaXRlY3R1cmVzPw0KPiBIb3cgdGhlIGVuZGlhbmVzcyBjb252ZXJz aW9uIGFmZmVjdHMgdGhlIGFjdHVhbCBkYXRhPw0KDQpUaGUgU29DIHJ1bnMgYXJtNjQgYW5kIHN1 cHBvcnRzIGxpdHRsZSBlbmRpYW4gZm9yIG5vdy4gVGhlIEZJRk8gaGFzIHR3byBzaWRlcywNCm9u ZSBzaWRlIGlzIHRoZSBTb0MsIHRoZSBvdGhlciBzaWRlIGlzIGV4dGVybiBob3N0IG1hY2hpbmUg d2hpY2ggY291bGQgDQphY2Nlc3MgdGhlIEZJRk8gdmlhIFVTQiBvciBQQ0llLiBUaGUgcnVsZSBp cyB0aGF0IHRoZSAnYnl0ZSBzdHJlYW0nIHdpbGwgDQprZWVwIHRoZSBzYW1lIHdoZW4gb25lIHNp ZGUgd3JpdGUgOCBieXRlcyBhbmQgdGhlIG90aGVyIHNpZGUgcmVhZHMgDQp0aGUgOCBieXRlcy4g U28gYXMgbG9uZyBhcyBib3RoIHNpZGVzIGhhdmUgYWdyZWVtZW50IG9uIHRoZSBieXRlLW9yZGVy DQppdCBzaG91bGQgYmUgZmluZS4NCg0KQWZ0ZXIgZG91YmxlIGNoZWNrIHRoZSBhcm02NCByZWFk cSgpL3dyaXRlcSgpIGltcGxlbWVudGF0aW9uLCBpdCBhcHBlYXJzDQp0aGF0IHRoZXNlIEFQSXMg YWxyZWFkeSBkb2VzIGNwdV90b19sZTY0KCkgYW5kIGxlNjRfdG9fY3B1KCkNCmNvbnZlcnNpb24u IFRoZXJlJ3MgYWN0dWFsbHkgbm8gbmVlZCB0byBtYWtlIGFub3RoZXIgY29udmVyc2lvbiANCihh bmQgc2hvdWxkbid0IGRvIGl0KS4gSSdsbCByZW1vdmUgdGhlc2UgY29udmVyc2lvbnMgaW4gdjEx LiBUaGUgY29kZSB3aWxsDQpsb29rIG11Y2ggY2xlYW5lci4NCg0KPiANCj4gPiArdW5pb24gbWx4 YmZfdG1maWZvX3U2NCB7DQo+ID4gKyAgICAgICB1NjQgZGF0YTsNCj4gPiArICAgICAgIF9fbGU2 NCBkYXRhX2xlOw0KPiA+ICt9Ow0KPiANCj4gPiArLyoNCj4gPiArICogRGVmYXVsdCBNQUMuDQo+ ID4gKyAqIFRoaXMgTUFDIGFkZHJlc3Mgd2lsbCBiZSByZWFkIGZyb20gRUZJIHBlcnNpc3RlbnQg dmFyaWFibGUgaWYgY29uZmlndXJlZC4NCj4gPiArICogSXQgY2FuIGFsc28gYmUgcmVjb25maWd1 cmVkIHdpdGggc3RhbmRhcmQgTGludXggdG9vbHMuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdTgg bWx4YmZfdG1maWZvX25ldF9kZWZhdWx0X21hY1s2XSA9IHsNCj4gPiArICAgICAgIDB4MDAsIDB4 MUEsIDB4Q0EsIDB4RkYsIDB4RkYsIDB4MDF9Ow0KPiANCj4gPiArI2RlZmluZSBtbHhiZl92ZGV2 X3RvX3RtZmlmbyhkZXYpICAgICAgXA0KPiA+ICsgICAgICAgY29udGFpbmVyX29mKGRldiwgc3Ry dWN0IG1seGJmX3RtZmlmb192ZGV2LCB2ZGV2KQ0KPiANCj4gT25lIGxpbmU/DQoNCkNvdWxkbid0 IGZpdCBpdCBpbnRvIG9uZSBsaW5lIHdpdGhpbiA4MCBjaGFyYWN0ZXJzLg0KKFBsZWFzZSBjb3Jy ZWN0IG1lIGlmIHlvdSBtZWFudCBzaW5nbGUgbGluZSBldmVuIGV4Y2VlZGluZyA4MCBjaHJhY3Rl cnMpLg0KDQo+IA0KPiA+ICsvKiBSZXR1cm4gdGhlIGNvbnN1bWVkIFR4IGJ1ZmZlciBzcGFjZS4g Ki8NCj4gPiArc3RhdGljIGludCBtbHhiZl90bWZpZm9fdmRldl90eF9idWZfbGVuKHN0cnVjdCBt bHhiZl90bWZpZm9fdmRldiAqdG1fdmRldikNCj4gPiArew0KPiA+ICsgICAgICAgaW50IGxlbjsN Cj4gPiArDQo+ID4gKyAgICAgICBpZiAodG1fdmRldi0+dHhfdGFpbCA+PSB0bV92ZGV2LT50eF9o ZWFkKQ0KPiA+ICsgICAgICAgICAgICAgICBsZW4gPSB0bV92ZGV2LT50eF90YWlsIC0gdG1fdmRl di0+dHhfaGVhZDsNCj4gPiArICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAgbGVuID0g TUxYQkZfVE1GSUZPX0NPTlNfVFhfQlVGX1NJWkUgLSB0bV92ZGV2LT50eF9oZWFkICsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICB0bV92ZGV2LT50eF90YWlsOw0KPiA+ICsgICAgICAgcmV0 dXJuIGxlbjsNCj4gPiArfQ0KPiANCj4gSXMgdGhpcyBjdXN0b20gaW1wbGVtZW50YXRpb24gb2Yg c29tZSBraW5kIG9mIGNpcmNfYnVmPw0KDQpZZXMuIEknbGwgdHJ5IGlmIEkgY291bGQgcmUtdXNl IHRoZSBjaXJjX2J1ZiBzdHJ1Y3R1cmUgYW5kIHVwZGF0ZSBpdCBpbiB2MTEuDQoNCj4gDQo+ID4g Ky8qIEFsbG9jYXRlIHZyaW5ncyBmb3IgdGhlIGZpZm8uICovDQo+ID4gK3N0YXRpYyBpbnQgbWx4 YmZfdG1maWZvX2FsbG9jX3ZyaW5ncyhzdHJ1Y3QgbWx4YmZfdG1maWZvICpmaWZvLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWx4YmZfdG1maWZvX3Zk ZXYgKnRtX3ZkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBtbHhiZl90bWZpZm9fdnJp bmcgKnZyaW5nOw0KPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsgICAgICAg ZG1hX2FkZHJfdCBkbWE7DQo+ID4gKyAgICAgICBpbnQgaSwgc2l6ZTsNCj4gPiArICAgICAgIHZv aWQgKnZhOw0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRt X3ZkZXYtPnZyaW5ncyk7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICB2cmluZyA9ICZ0bV92 ZGV2LT52cmluZ3NbaV07DQo+ID4gKyAgICAgICAgICAgICAgIHZyaW5nLT5maWZvID0gZmlmbzsN Cj4gPiArICAgICAgICAgICAgICAgdnJpbmctPm51bSA9IE1MWEJGX1RNRklGT19WUklOR19TSVpF Ow0KPiA+ICsgICAgICAgICAgICAgICB2cmluZy0+YWxpZ24gPSBTTVBfQ0FDSEVfQllURVM7DQo+ ID4gKyAgICAgICAgICAgICAgIHZyaW5nLT5pbmRleCA9IGk7DQo+ID4gKyAgICAgICAgICAgICAg IHZyaW5nLT52ZGV2X2lkID0gdG1fdmRldi0+dmRldi5pZC5kZXZpY2U7DQo+ID4gKyAgICAgICAg ICAgICAgIGRldiA9ICZ0bV92ZGV2LT52ZGV2LmRldjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIHNpemUgPSB2cmluZ19zaXplKHZyaW5nLT5udW0sIHZyaW5nLT5hbGlnbik7DQo+ID4gKyAg ICAgICAgICAgICAgIHZhID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+cGFyZW50LCBzaXplLCAm ZG1hLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCF2YSkgew0KPiANCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldi0+cGFyZW50LCAiZG1hX2FsbG9j X2NvaGVyZW50IGZhaWxlZFxuIik7DQo+IA0KPiBBbmQgaG93IGRvIHlvdSBjbGVhbiBwcmV2aW91 c2x5IGFsbG9jYXRlZCBpdGVtcz8NCg0KRml4ZWQuIENoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2Yg bWx4YmZfdG1maWZvX2FsbG9jX3ZyaW5ncygpIGFuZCBnb3RvIA0KJ3JlZ2lzdGVyX2ZhaWwnIChw cm9iYWJseSBjaGFuZ2UgdG8gYSBiZXR0ZXIgbmFtZSkgaW5zdGVhZCBvZiAnZmFpbCcuIA0KSW4g c3VjaCBjYXNlIHRoZSBtbHhiZl90bWZpZm9fZnJlZV92cmluZ3MoKSB3aWxsIGJlIGNhbGxlZCB0 byBjbGVhbiB1cA0KYWxsIGFsbG9jYXRlZCB2cmluZ3MuDQoNCj4gDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgICAgICAgICAgIHZyaW5nLT52YSA9IHZhOw0KPiA+ICsgICAgICAgICAgICAg ICB2cmluZy0+ZG1hID0gZG1hOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+IA0KPiA+ICsvKiBEaXNhYmxlIGludGVycnVwdHMgb2YgdGhlIGZp Zm8gZGV2aWNlLiAqLw0KPiA+ICtzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fZGlzYWJsZV9pcnFz KHN0cnVjdCBtbHhiZl90bWZpZm8gKmZpZm8pDQo+ID4gK3sNCj4gPiArICAgICAgIGludCBpLCBp cnE7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IE1MWEJGX1RNX01BWF9JUlE7 IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICBpcnEgPSBmaWZvLT5pcnFfaW5mb1tpXS5pcnE7 DQo+IA0KPiA+ICsgICAgICAgICAgICAgICBpZiAoaXJxKSB7DQo+IA0KPiBJIGRvbid0IHRoaW5r IHRoaXMgY2hlY2sgaXMgbmVlZGVkIGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgaXQgaGFzIG5v DQo+IHN0YWxlZCByZWNvcmRzLg0KDQpZZXMsIGl0J3Mgbm90IG5lZWRlZCBhbnkgbW9yZSBhY2Nv cmRpbmcgdG8gdGhlIGN1cnJlbnQgY29kZS4NCldpbGwgcmVtb3ZlIGl0IGluIHYxMS4NCg0KPiAN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBmaWZvLT5pcnFfaW5mb1tpXS5pcnEgPSAwOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVfaXJxKGlycSk7DQo+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArfQ0KPiANCj4gPiArLyogR2V0IHRoZSBu dW1iZXIgb2YgYXZhaWxhYmxlIHdvcmRzIGluIHRoZSBUbUZpZm8gZm9yIHNlbmRpbmcuICovDQo+ ID4gK3N0YXRpYyBpbnQgbWx4YmZfdG1maWZvX2dldF90eF9hdmFpbChzdHJ1Y3QgbWx4YmZfdG1m aWZvICpmaWZvLCBpbnQgdmRldl9pZCkNCj4gPiArew0KPiA+ICsgICAgICAgaW50IHR4X3Jlc2Vy dmU7DQo+ID4gKyAgICAgICB1NjQgc3RzOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIFJlc2VydmUg c29tZSByb29tIGluIEZJRk8gZm9yIGNvbnNvbGUgbWVzc2FnZXMuICovDQo+ID4gKyAgICAgICBp ZiAodmRldl9pZCA9PSBWSVJUSU9fSURfTkVUKQ0KPiA+ICsgICAgICAgICAgICAgICB0eF9yZXNl cnZlID0gZmlmby0+dHhfZmlmb19zaXplIC8gTUxYQkZfVE1GSUZPX1JFU0VSVkVfUkFUSU87DQo+ ID4gKyAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgIHR4X3Jlc2VydmUgPSAxOw0KPiA+ ICsNCj4gPiArICAgICAgIHN0cyA9IHJlYWRxKGZpZm8tPnR4X2Jhc2UgKyBNTFhCRl9UTUZJRk9f VFhfU1RTKTsNCj4gDQo+ID4gKyAgICAgICByZXR1cm4gKGZpZm8tPnR4X2ZpZm9fc2l6ZSAtIHR4 X3Jlc2VydmUgLQ0KPiA+ICsgICAgICAgICAgICAgICBGSUVMRF9HRVQoTUxYQkZfVE1GSUZPX1RY X1NUU19fQ09VTlRfTUFTSywgc3RzKSk7DQo+IA0KPiBSZWR1bmRhbnQgcGFyZW5zLg0KPiBNb3Jl b3ZlciwgY29uc2lkZXINCj4gDQo+IHUzMiBjb3VudDsgLy8gb3Igd2hhdGV2ZXIgc3VpdHMgZm9y IEZJRUxEX0dFVCgpLg0KPiAuLi4NCj4gDQo+IHN0cyA9IHJlYWRxKC4uLik7DQo+IGNvdW50ID0g RklFTERfR0VUKC4uLik7DQo+IHJldHVybiAuLi47DQoNCldpbGwgdXBkYXRlIGluIHYxMS4NCg0K PiANCj4gPiArfQ0KPiANCj4gPiArICAgICAgIHdoaWxlIChzaXplID4gMCkgew0KPiA+ICsgICAg ICAgICAgICAgICBhZGRyID0gY29ucy0+dHhfYnVmICsgY29ucy0+dHhfaGVhZDsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgIGlmIChjb25zLT50eF9oZWFkICsgc2l6ZW9mKHU2NCkgPD0NCj4g PiArICAgICAgICAgICAgICAgICAgIE1MWEJGX1RNRklGT19DT05TX1RYX0JVRl9TSVpFKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZkYXRhLCBhZGRyLCBzaXplb2YodTY0 KSk7DQo+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgcGFydGlhbCA9IE1MWEJGX1RNRklGT19DT05TX1RYX0JVRl9TSVpFIC0gY29ucy0+dHhf aGVhZDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmRhdGEsIGFkZHIsIHBh cnRpYWwpOw0KPiANCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHU4ICopJmRh dGEgKyBwYXJ0aWFsLCBjb25zLT50eF9idWYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZih1NjQpIC0gcGFydGlhbCk7DQo+IA0KPiBVbmFsaWduZWQgYWNjZXNzPyEN Cg0KVGhlIGNvZGUgaGVyZSBpcyB0byBidWlsZCBhbmQgY29weSA4IGJ5dGVzIGZyb20gdGhlIGJ1 ZmZlciBpbnRvIHRoZSAnZGF0YScNCnZhcmlhYmxlLiBUaGUgc291cmNlIGNvdWxkIGJlIHVuYWxp Z25lZC4gRm9yIGV4YW1wbGUsIDMgYnl0ZXMgYXJlIGF0IHRoZQ0KZW5kIG9mIHRoZSBidWZmZXIg YW5kIDUgYnl0ZXMgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gbWVtY3B5KCkN CmlzIHVzZWQgdG8gZG8gYnl0ZS1zdHJlYW0gY29weSB3aGljaCBzZWVtcyBvay4gUGxlYXNlIGNv cnJlY3QgbWUgaWYNCkkgbWlzdW5kZXJzdGFuZCB0aGUgY29tbWVudC4NCg0KPiANCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiANCj4gPiArICAgICAgICAgICAgICAgYnVmLmRhdGEgPSByZWFkcShm aWZvLT5yeF9iYXNlICsgTUxYQkZfVE1GSUZPX1JYX0RBVEEpOw0KPiA+ICsgICAgICAgICAgICAg ICBidWYuZGF0YSA9IGxlNjRfdG9fY3B1KGJ1Zi5kYXRhX2xlKTsNCj4gDQo+IEFyZSB5b3Ugc3Vy ZSB0aGlzIGlzIGNvcnJlY3Q/DQo+IEhvdyBkaWQgeW91IHRlc3QgdGhpcyBvbiBCRSBhcmNoaXRl Y3R1cmVzPw0KDQpUaGFua3MgZm9yIHRoZSBjb21tZW50ISBTYW1lIGFzIGFib3ZlLCB0aGUgY29u dmVyc2lvbiBpcyBub3QgcmVhbGx5IG5lZWRlZC4gDQpJJ2xsIHJlbW92ZSB0aGVtIGluIHYxMS4g QXMgZm9yIHRlc3RpbmcsIHdlIG9ubHkgaGF2ZSBhcm02NCBsaXR0bGUtZW5kaWFuIExpbnV4DQpy dW5uaW5nIG9uIHRoZSBTb0MuIFRoaXMgY29udmVyc2lvbiBkb2Vzbid0IG1ha2UgbXVjaCBkaWZm ZXJlbmNlIGZvciB0aGUgU29DLg0KQXMgZm9yIEJFIGFyY2hpdGVjdHVyZSwgd2UgbWFpbmx5IHZl cmlmeSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgRklGTywgd2hpY2ggaXMgdGhlDQpleHRlcm5hbCBo b3N0IGxpa2UgdXNpbmcgcHBjNjQuDQoNCj4gDQo+ID4gKyAgICAgICB0bV92ZGV2ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCp0bV92ZGV2KSwgR0ZQX0tFUk5FTCk7DQo+IA0KPiBJcyBpdCBh cHByb3ByaWF0ZSB1c2Ugb2YgZGV2bV8qID8NCg0KVGhpcyBpcyBTb0MsIHRoZSBkZXZpY2Ugd29u J3QgYmUgY2xvc2VkIG9yIGRldGFjaGVkLiBUaGUgb25seSBjYXNlIGlzIHdoZW4NCnRoZSBkcml2 ZXIgaXMgdW5sb2FkZWQuIFNvIGl0IGFwcGVhcnMgb2sgdG8gdXNlIGRldm1fa3phbGxvYygpIHNp bmNlIGl0J3MNCmFsbG9jYXRlZCBkdXJpbmcgcHJvYmUoKSBhbmQgcmVsZWFzZWQgZHVyaW5nIG1v ZHVsZSB1bmxvYWQgLiBQbGVhc2UNCmNvcnJlY3QgbWUgaWYgSSBtaXN1bmRlcnN0YW5kIGl0Lg0K DQo+IA0KPiA+ICsgICAgICAgaWYgKCF0bV92ZGV2KSB7DQo+ID4gKyAgICAgICAgICAgICAgIHJl dCA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gZmFpbDsNCj4gPiArICAgICAg IH0NCj4gDQo+ID4gKy8qIFJlYWQgdGhlIGNvbmZpZ3VyZWQgbmV0d29yayBNQUMgYWRkcmVzcyBm cm9tIGVmaSB2YXJpYWJsZS4gKi8NCj4gPiArc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX2dldF9j ZmdfbWFjKHU4ICptYWMpDQo+ID4gK3sNCj4gPiArICAgICAgIGVmaV9ndWlkX3QgZ3VpZCA9IEVG SV9HTE9CQUxfVkFSSUFCTEVfR1VJRDsNCj4gPiArICAgICAgIGVmaV9zdGF0dXNfdCBzdGF0dXM7 DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7DQo+IA0KPiA+ICsgICAgICAgdTggYnVm WzZdOw0KPiANCj4gRVRIX0FMRU4gPw0KDQpXaWxsIHVwZGF0ZSBpdCBpbiB2MTENCg0KPiANCj4g PiArDQo+ID4gKyAgICAgICBzaXplID0gc2l6ZW9mKGJ1Zik7DQo+IA0KPiBEaXR0by4NCg0KV2ls bCB1cGRhdGUgaXQgaW4gdjExDQoNCj4gDQo+ID4gKyAgICAgICBzdGF0dXMgPSBlZmkuZ2V0X3Zh cmlhYmxlKG1seGJmX3RtZmlmb19lZmlfbmFtZSwgJmd1aWQsIE5VTEwsICZzaXplLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYpOw0KPiANCj4gPiArICAgICAgIGlm IChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MgJiYgc2l6ZSA9PSBzaXplb2YoYnVmKSkNCj4gDQo+IERp dHRvLg0KDQpXaWxsIHVwZGF0ZSBpdCBpbiB2MTENCg0KPiANCj4gPiArICAgICAgICAgICAgICAg bWVtY3B5KG1hYywgYnVmLCBzaXplb2YoYnVmKSk7DQo+IA0KPiBldGhlcl9hZGRyX2NvcHkoKS4N Cg0KV2lsbCB1cGRhdGUgaXQgaW4gdjExDQoNCj4gDQo+ID4gK30NCj4gDQo+ID4gKyAgICAgICBt ZW1jcHkobmV0X2NvbmZpZy5tYWMsIG1seGJmX3RtZmlmb19uZXRfZGVmYXVsdF9tYWMsIDYpOw0K PiANCj4gZXRoZXJfYWRkcl9jb3B5KCkuLi4NCj4gDQo+ID4gKyAgICAgICBtbHhiZl90bWZpZm9f Z2V0X2NmZ19tYWMobmV0X2NvbmZpZy5tYWMpOw0KPiANCj4gLi4uIGJ1dCBhY3R1YWxseSBhYm92 ZSBzaG91bGQgYmUgcGFydCBvZiB0aGlzIGZ1bmN0aW9uLg0KDQpXaWxsIHVwZGF0ZSBpdCBpbiB2 MTENCg0KPiANCj4gLS0NCj4gV2l0aCBCZXN0IFJlZ2FyZHMsDQo+IEFuZHkgU2hldmNoZW5rbw0K