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=-13.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 42251C63777 for ; Mon, 30 Nov 2020 05:27:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D42ED20857 for ; Mon, 30 Nov 2020 05:27:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="Z6+U4Vk3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726055AbgK3F10 (ORCPT ); Mon, 30 Nov 2020 00:27:26 -0500 Received: from mail-eopbgr80040.outbound.protection.outlook.com ([40.107.8.40]:45443 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725933AbgK3F10 (ORCPT ); Mon, 30 Nov 2020 00:27:26 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EXGZaWBceRBeVN/NK25oDcu8ZA4Dr9yIIyT6g146zJmbvsZDY0UpWXKYZqCdIsIEo/Xy7NxGKb715/n74DQPST1l6Ie3UCQMNfwn2oj3qXcyJvKQaS5XBp83ZoJ1Y/z8H7L85OjM1nGvlAIoKs880KSrySEmHdi+0UTbi4l3g3CGKjCL2n9ox3T3C8Fi8lsh858/jZgJWg0N36VPRWR61XuNFx6PQFJhhZNrwkNZeyW4iJLl8jTgNw0BtxBtJeqBZPZ0Wwzjbk7EuEI7uscluD/oO+WL2o/xFNc+WrR1jxY5xSTCId/vqjMgfpanAKUJNBTLB6+nY8ix2sSefjIrXA== 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-SenderADCheck; bh=8BYbGhwNIY4RDPIndnpv9Cg31GuKuTIFU6MUi16/BwY=; b=eUyUg25/Oh4QhT9vf/bffOKtqZ8FTg/KBpa/6hi36CL63plUXpgZqKUv40WE54u23Zipb9GH3y9XoonDCNdIaTvFdIg1gE6Dxyd8CJ6s4Uw0cIkGwODDUFqHE9hpTb5epvD3kr0U5H4DHPTLrcrRC5mrDoAJ1oZC9sXldij8sHJLExS54eUuM8xaP7hSjDxfpVJIXcaXUCAdEALYBoaQCFbGY3e27v4lhnNtCOV00za23szWg5Xlkuvb6EWG0UHwDDfT68inC90b270+M7/bWqfFgmWymyBQaf0Jwmo4tkYumuq4evavpCaq9FhXLWRs1tpfw6b763+hnENRt8JJ2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8BYbGhwNIY4RDPIndnpv9Cg31GuKuTIFU6MUi16/BwY=; b=Z6+U4Vk3HVf2CFaAGMBo2fw7OsrAjbVGdbnhaNEu8p/5djIaAFrWRbUzeNdCCLVAFlUu7VmAnw0ehjVohnaGMImnQhBXKwueI0q5TqzdfdBaK0nQh43W5P8m8KLyFhDiPh+CvVCIuRWIuoPzxv5SRyiU7ihfREeQtgWuo87HMos= Received: from DB6PR0401MB2438.eurprd04.prod.outlook.com (2603:10a6:4:33::14) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Mon, 30 Nov 2020 05:26:33 +0000 Received: from DB6PR0401MB2438.eurprd04.prod.outlook.com ([fe80::f0c9:fd48:c8d1:5c22]) by DB6PR0401MB2438.eurprd04.prod.outlook.com ([fe80::f0c9:fd48:c8d1:5c22%11]) with mapi id 15.20.3611.025; Mon, 30 Nov 2020 05:26:33 +0000 From: "Biwen Li (OSS)" To: Oleksij Rempel , "Biwen Li (OSS)" CC: Leo Li , "linux@rempel-privat.de" , "kernel@pengutronix.de" , "wsa@the-dreams.de" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "festevam@gmail.com" , Aisheng Dong , Clark Wang , "linux-i2c@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Jiafei Pan , Xiaobo Xie , "linux-arm-kernel@lists.infradead.org" Subject: RE: [v10] i2c: imx: support slave mode for imx I2C driver Thread-Topic: [v10] i2c: imx: support slave mode for imx I2C driver Thread-Index: AQHWxtldQDR+r3I89UKiv6XOJFwXpQ== Date: Mon, 30 Nov 2020 05:26:33 +0000 Message-ID: References: <20201111113255.28710-1-biwen.li@oss.nxp.com> <20201113135947.h7cek55eevilay2t@pengutronix.de> In-Reply-To: <20201113135947.h7cek55eevilay2t@pengutronix.de> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: pengutronix.de; dkim=none (message not signed) header.d=none;pengutronix.de; dmarc=none action=none header.from=oss.nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: e4130495-e013-4472-d9fd-08d894f08024 x-ms-traffictypediagnostic: DB8PR04MB7066: x-ms-exchange-sharedmailbox-routingagent-processed: True x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2089; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pepeYTxqXe4+BPmNQIfPu3xukoO0EsQ3bXTyU6zBAtttkVVc5Qmjd4LXaXCOyRLFjOKuhHl/G6azJTyrXJQ6d0Qdp4Rm1fUmQuSH7LqlQnmEsA4waD5NeUuA79KekyhGWAwymQh8rxnPdpF8K6yM9f/yMcknzTLA8sTG9GJBf/meeFfi9wnN09LKtFUw/TAlyxsemIDi4qAZHDp2kikBiXUFs9FKxHemhr3z+2wr7QH+t95WCa1iO5JClQWoNgSq+KM4ObGa+GQcGtv9dr5kPwNzxruobyC3Jg51hy3MBboOdFefbN8AR0SnxjZAUb13ToUlPFhS9Zaz1/ZYhQoRQg9V9u78bfglLzw+76dYoWKkDV4zb68WfmsUY2O8DNn3WhWsWDPEd+cZRiy+2aRzWIRm/K9kOpMxIxg/bYyq7eb0YT+9aoVHf5F7jmA1D5rpnv9YyD3J2gI3u2h/+69q9w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB6PR0401MB2438.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(39860400002)(376002)(346002)(136003)(396003)(52536014)(4326008)(30864003)(5660300002)(2906002)(9686003)(83080400002)(86362001)(71200400001)(64756008)(66446008)(66556008)(66476007)(76116006)(7416002)(8676002)(55016002)(966005)(478600001)(316002)(8936002)(110136005)(7696005)(66946007)(54906003)(33656002)(6506007)(26005)(186003)(83380400001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?M01vVGFOaC95ajJvYklYSjhLYWExTXZkNHYrcHNiUU1YcEJCcW5DcXNLN1ZT?= =?utf-8?B?cU9HcEZ4NzRub2xTWVgrQnZKNVlSOG55YmZrTGxiNjJ4Q2h3V3pReDVvVnNQ?= =?utf-8?B?RWJ4U1NJSFB2QTRFQ0dWVTB2aGRydkFPeFFVVFVGNnRkQ2trUGx6T1Bub0s5?= =?utf-8?B?dWtEVzNMdjA0L1NJWkRGKzUzdGZ4UkZNc3ZWcTFuQjVUYk0xUXBpY0tROS9P?= =?utf-8?B?L0dUVkt4L2R1aGhndVMvNU5zajZDdnZDdFhWOGxxNFdGSzNDMGlHSUErZVVw?= =?utf-8?B?cWJaQklUUVp3bCtXS0NTamp0OWppZElyNHJ0OVFZQ214NnFPZVRHZWxVeUQ4?= =?utf-8?B?RVNYbk5VY0k4QjRpMmdtaXFMK0F0NWtVNS90WGhkMnlMOWdiNnBKRUtPMXhw?= =?utf-8?B?dlZuQkRhZGdJY3RpeTgydk9uZzlrSXlTRVF1QzduMHNyWjc2NXFFZkNhQVFp?= =?utf-8?B?Y0MxNHQ4WlVKeFhTNXdwaERTT0dOcmlsSEJORExXNmxtUFJlb3NGRHkxbHJj?= =?utf-8?B?VFFTVEYycThVcmdGOHhtRjBNcFVOd2Y2MHV5dTJUYzh2OXNlRHY3WWhiT1RJ?= =?utf-8?B?aVUvZk05RGhKdExJdzZjTFp3LzBTUWhnS25JRUF3NG5CNFVrdGU5LzdXVWpQ?= =?utf-8?B?QUJUVXB3eEIwYXJjWUp4WW00dGM4UTF2OTQ2T2s2NjJvT1c3eDd6TzBHZ1oz?= =?utf-8?B?QWFLVlNZTE0zc1FoODlqc1MxTnNieFU2dXFwTmtKWkNoVGIySnV6aG8vZWRH?= =?utf-8?B?bUFLaGMrRDltVmptUy93dlkrVW9LczhrakdNNmk5dDRVNEpqRTRjUlRoVEhp?= =?utf-8?B?SzJyZFVINVJsa21ZckNQSGxyUEhEbGxSNU9qU25Zb0J1M1R2V3h2REIxQjJN?= =?utf-8?B?OTk1VlorY3dZdDJFaFc2UFptaGEyZEdmUE84Q3JCRUtDcHE5cVJsTUJaeTVK?= =?utf-8?B?dW1GRENLNGFyM2hMdGVDZUJOcVEvQjY4eS9sOFJQb0Q4b05BKzVXVkxFMUxy?= =?utf-8?B?bGt3RUdIZllEcEVWbi9rYzAzSVRBaE5KRXRCZ3E1VzVxWWRRWkZQd1ZhUktr?= =?utf-8?B?S1ZqV0VvN0RUMmhBRVdVTTM1TmgwU2pUSEZPQmpJeUhvSUNtdE9nT01jMkJq?= =?utf-8?B?YUZIQzhnaCtkdWloeFRuTmV2QWdmMmJZdTBaT1hFRUJJWVgxWGpobEJTWERI?= =?utf-8?B?WTZtaUlvWG1tWllOZ0FoWkd0R2RXOEtLUUh1SkdEOW9oZjAybWx3cXdsSHM3?= =?utf-8?B?NFB5ajFkbmN4YksxTld2RDJBaFBlV0gxL3RIRklkQ0lTZjdCWjc3cXJTUFdj?= =?utf-8?Q?olJUsScVuD2EA=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB6PR0401MB2438.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4130495-e013-4472-d9fd-08d894f08024 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2020 05:26:33.4626 (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: sI5BqHT9cjtSND2+3J+q1PmBA4kobOdvNqTxznhJxRBu+j8SttIVHGHiJV9zNT5SoMVvCspszRdVaDJSOUWlMA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQo+ID4NCj4gPiBUaGUgcGF0Y2ggc3VwcG9ydHMgc2xhdmUgbW9kZSBmb3IgaW14IEkyQyBkcml2 ZXINCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEJpd2VuIExpIDxiaXdlbi5saUBueHAuY29tPg0K PiANCj4gVGhhbmsgeW91IGZvciB5b3VyIHdvcmshDQo+IA0KPiBBY2tlZC1ieTogT2xla3NpaiBS ZW1wZWwgPG8ucmVtcGVsQHBlbmd1dHJvbml4LmRlPg0KDQo+IA0KPiBAV29sZnJhbSwgQ2hyaXN0 aWFuIEVnZ2VycyBJMlNSX0lBTCBwYXRjaGVzIHNob3VsZCBnbyBiZWZvcmUgdGhpcyBvbmUuDQpI aSBXb2xmcmFtLA0KDQpBbnkgcHJvZ3Jlc3M/DQoNClJlZ2FyZHMsDQpCaXdlbiBMaQ0KPiANCj4g PiAtLS0NCj4gPiBDaGFuZ2UgaW4gdjEwOg0KPiA+IAktIHRvdGFsbHkgcmVtb3ZlIENPTkZJR19J MkNfU0xBVkUNCj4gPiAJLSByZXBsYWNlIGFwaSB3aXRoIGkyY19pbXhfY2xhcnRfaXJxKCkNCj4g PiAJLSByZW1vdmUgcm9idXN0IGNvZGUNCj4gPiAJLSBwbGFjZSBwbV9ydW50aW1lX2dldCBpbiBp MmNfaW14X3NsYXZlX2luaXQoKQ0KPiA+IAkgIHRvIGkyY19pbXhfcmVnX3NsYXZlKCkNCj4gPiAJ LSBhcHBseSB0aGUgcGF0Y2ggb24gdG9wIG9mIHRoaXMgcGF0Y2ggc2V0Og0KPiA+IAkgIFtQQVRD SCB2NiAwLzNdIGkyYzogaW14OiBGaXggaGFuZGxpbmcgb2YgYXJiaXRyYXRpb24gbG9zcw0KPiA+ IAkgIGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDIwLzEwLzkvNDA3DQo+ID4NCj4gPiBDaGFuZ2Ug aW4gdjk6DQo+ID4gCS0gcmVtb3ZlICNpZmRlZiBhZnRlciBzZWxlY3QgSTJDX1NMQVZFIGJ5IGRl ZmF1bHQNCj4gPg0KPiA+IENoYW5nZSBpbiB2ODoNCj4gPiAJLSBmaXggYnVpbGQgaXNzdWUNCj4g Pg0KPiA+IENoYW5nZSBpbiB2NzoNCj4gPiAJLSBzdXBwb3J0IGF1dG8gc3dpdGNoIG1vZGUgYmV0 d2VlbiBtYXN0ZXIgYW5kIHNsYXZlDQo+ID4gCS0gZW5hYmxlIGludGVycnVwdCB3aGVuIGlkbGUg aW4gc2xhdmUgbW9kZQ0KPiA+IAktIHJlbW92ZSAjaWZkZWYNCj4gPg0KPiA+IENoYW5nZSBpbiB2 NjoNCj4gPiAJLSBkZWxldGUgcm9idXN0IGxvZ3MgYW5kIGNvbW1lbnRzDQo+ID4gCS0gbm90IHJl YWQgc3RhdHVzIHJlZ2lzdGVyIGFnYWluIGluIG1hc3RlciBpc3IuDQo+ID4NCj4gPiBDaGFuZ2Ug aW4gdjU6DQo+ID4gCS0gZml4IGEgYnVnIHRoYXQgY2Fubm90IGRldGVybWluZSBpbiB3aGF0IG1v ZGUobWFzdGVyIG1vZGUgb3INCj4gPiAJICBzbGF2ZSBtb2RlKQ0KPiA+DQo+ID4gQ2hhbmdlIGlu IHY0Og0KPiA+IAktIGFkZCBNQUNSTyBDT05GSUdfSTJDX1NMQVZFIHRvIGZpeCBjb21waWxhdGlv biBpc3N1ZQ0KPiA+DQo+ID4gQ2hhbmdlIGluIHYzOg0KPiA+IAktIHN1cHBvcnQgbGF5ZXJzY2Fw ZSBhbmQgaS5teCBwbGF0Zm9ybQ0KPiA+DQo+ID4gQ2hhbmdlIGluIHYyOg0KPiA+IAktIHJlbW92 ZSBNQUNSTyBDT05GSUdfSTJDX1NMQVZFDQo+ID4NCj4gPiAgZHJpdmVycy9pMmMvYnVzc2VzL0tj b25maWcgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMgfCAyMTkN Cj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQ0KPiA+ICAyIGZpbGVzIGNo YW5nZWQsIDE5NiBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9L Y29uZmlnDQo+ID4gaW5kZXggYTk3YTlkMDU4MTk4Li5lMmFkNjI0ODFmMjUgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL2kyYy9i dXNzZXMvS2NvbmZpZw0KPiA+IEBAIC02NzUsNiArNjc1LDcgQEAgY29uZmlnIEkyQ19JTUcNCj4g PiAgY29uZmlnIEkyQ19JTVgNCj4gPiAgCXRyaXN0YXRlICJJTVggSTJDIGludGVyZmFjZSINCj4g PiAgCWRlcGVuZHMgb24gQVJDSF9NWEMgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTERGSVJFDQo+ ID4gKwlzZWxlY3QgSTJDX1NMQVZFDQo+ID4gIAloZWxwDQo+ID4gIAkgIFNheSBZIGhlcmUgaWYg eW91IHdhbnQgdG8gdXNlIHRoZSBJSUMgYnVzIGNvbnRyb2xsZXIgb24NCj4gPiAgCSAgdGhlIEZy ZWVzY2FsZSBpLk1YL01YQywgTGF5ZXJzY2FwZSBvciBDb2xkRmlyZSBwcm9jZXNzb3JzLg0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jDQo+ID4gYi9kcml2ZXJz L2kyYy9idXNzZXMvaTJjLWlteC5jIGluZGV4IGU2ZjhkNmU0NWExNS4uYThlOGFmNTdlMzNmIDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMNCj4gPiArKysgYi9k cml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jDQo+ID4gQEAgLTE3LDYgKzE3LDcgQEANCj4gPiAg ICoJQ29weXJpZ2h0IChDKSAyMDA4IERhcml1cyBBdWd1bGlzIDxkYXJpdXMuYXVndWxpcyBhdCB0 ZWx0b25pa2EubHQ+DQo+ID4gICAqDQo+ID4gICAqCUNvcHlyaWdodCAyMDEzIEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yLCBJbmMuDQo+ID4gKyAqCUNvcHlyaWdodCAyMDIwIE5YUA0KPiA+ICAgKg0K PiA+ICAgKi8NCj4gPg0KPiA+IEBAIC03Myw2ICs3NCwxMSBAQA0KPiA+ICAjZGVmaW5lIElNWF9J MkNfSTJTUgkweDAzCS8qIGkyYyBzdGF0dXMgKi8NCj4gPiAgI2RlZmluZSBJTVhfSTJDX0kyRFIJ MHgwNAkvKiBpMmMgdHJhbnNmZXIgZGF0YSAqLw0KPiA+DQo+ID4gKy8qDQo+ID4gKyAqIEFsbCBv ZiB0aGUgbGF5ZXJzY2FwZSBzZXJpZXMgU29DcyBzdXBwb3J0IElCSUMgcmVnaXN0ZXIuDQo+ID4g KyAqLw0KPiA+ICsjZGVmaW5lIElNWF9JMkNfSUJJQwkweDA1ICAgIC8qIGkyYyBidXMgaW50ZXJy dXB0IGNvbmZpZyAqLw0KPiA+ICsNCj4gPiAgI2RlZmluZSBJTVhfSTJDX1JFR1NISUZUCTINCj4g PiAgI2RlZmluZSBWRjYxMF9JMkNfUkVHU0hJRlQJMA0KPiA+DQo+ID4gQEAgLTkxLDYgKzk3LDcg QEANCj4gPiAgI2RlZmluZSBJMkNSX01TVEEJMHgyMA0KPiA+ICAjZGVmaW5lIEkyQ1JfSUlFTgkw eDQwDQo+ID4gICNkZWZpbmUgSTJDUl9JRU4JMHg4MA0KPiA+ICsjZGVmaW5lIElCSUNfQklJRQkw eDgwIC8qIEJ1cyBpZGxlIGludGVycnVwdCBlbmFibGUgKi8NCj4gPg0KPiA+ICAvKiByZWdpc3Rl ciBiaXRzIGRpZmZlcmVudCBvcGVyYXRpbmcgY29kZXMgZGVmaW5pdGlvbjoNCj4gPiAgICogMSkg STJTUjogSW50ZXJydXB0IGZsYWdzIGNsZWFyIG9wZXJhdGlvbiBkaWZmZXIgYmV0d2VlbiBTb0Nz Og0KPiA+IEBAIC0yMDEsNiArMjA4LDcgQEAgc3RydWN0IGlteF9pMmNfc3RydWN0IHsNCj4gPiAg CXN0cnVjdCBwaW5jdHJsX3N0YXRlICpwaW5jdHJsX3BpbnNfZ3BpbzsNCj4gPg0KPiA+ICAJc3Ry dWN0IGlteF9pMmNfZG1hCSpkbWE7DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudAkqc2xhdmU7DQo+ ID4gIH07DQo+ID4NCj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfaTJjX2h3ZGF0YSBpbXgx X2kyY19od2RhdGEgPSB7IEBAIC0yNjUsNg0KPiA+ICsyNzMsMTEgQEAgc3RhdGljIGlubGluZSBp bnQgaXNfaW14MV9pMmMoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQ0KPiA+ICAJcmV0 dXJuIGkyY19pbXgtPmh3ZGF0YS0+ZGV2dHlwZSA9PSBJTVgxX0kyQzsgIH0NCj4gPg0KPiA+ICtz dGF0aWMgaW5saW5lIGludCBpc192ZjYxMF9pMmMoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNf aW14KSB7DQo+ID4gKwlyZXR1cm4gaTJjX2lteC0+aHdkYXRhLT5kZXZ0eXBlID09IFZGNjEwX0ky QzsgfQ0KPiA+ICsNCj4gPiAgc3RhdGljIGlubGluZSB2b2lkIGlteF9pMmNfd3JpdGVfcmVnKHVu c2lnbmVkIGludCB2YWwsDQo+ID4gIAkJc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LCB1 bnNpZ25lZCBpbnQgcmVnKSAgeyBAQCAtMjc3LDYNCj4gPiArMjkwLDI3IEBAIHN0YXRpYyBpbmxp bmUgdW5zaWduZWQgY2hhciBpbXhfaTJjX3JlYWRfcmVnKHN0cnVjdA0KPiBpbXhfaTJjX3N0cnVj dCAqaTJjX2lteCwNCj4gPiAgCXJldHVybiByZWFkYihpMmNfaW14LT5iYXNlICsgKHJlZyA8PCBp MmNfaW14LT5od2RhdGEtPnJlZ3NoaWZ0KSk7ICB9DQo+ID4NCj4gPiArc3RhdGljIHZvaWQgaTJj X2lteF9jbGVhcl9pcnEoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LA0KPiA+ICt1bnNp Z25lZCBpbnQgYml0cykgew0KPiA+ICsJdW5zaWduZWQgaW50IHRlbXA7DQo+ID4gKw0KPiA+ICsJ LyoNCj4gPiArCSAqIGkyc3JfY2xyX29wY29kZSBpcyB0aGUgdmFsdWUgdG8gY2xlYXIgYWxsIGlu dGVycnVwdHMuIEhlcmUgd2Ugd2FudCB0bw0KPiA+ICsJICogY2xlYXIgb25seSA8Yml0cz4sIHNv IHdlIHdyaXRlIH5pMnNyX2Nscl9vcGNvZGUgd2l0aCBqdXN0IDxiaXRzPg0KPiA+ICsJICogdG9n Z2xlZC4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGkuTVggbmVlZHMgVzBDIGFuZCBWeWJyaWQg dXNlcyBXMUMuDQo+ID4gKwkgKi8NCj4gPiArCXRlbXAgPSB+aTJjX2lteC0+aHdkYXRhLT5pMnNy X2Nscl9vcGNvZGUgXiBiaXRzOw0KPiA+ICsJaW14X2kyY193cml0ZV9yZWcodGVtcCwgaTJjX2lt eCwgSU1YX0kyQ19JMlNSKTsgfQ0KPiA+ICsNCj4gPiArLyogU2V0IHVwIGkyYyBjb250cm9sbGVy IHJlZ2lzdGVyIGFuZCBpMmMgc3RhdHVzIHJlZ2lzdGVyIHRvIGRlZmF1bHQNCj4gPiArdmFsdWUu ICovIHN0YXRpYyB2b2lkIGkyY19pbXhfcmVzZXRfcmVncyhzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QN Cj4gPiArKmkyY19pbXgpIHsNCj4gPiArCWlteF9pMmNfd3JpdGVfcmVnKGkyY19pbXgtPmh3ZGF0 YS0+aTJjcl9pZW5fb3Bjb2RlIF4gSTJDUl9JRU4sDQo+ID4gKwkJCSAgaTJjX2lteCwgSU1YX0ky Q19JMkNSKTsNCj4gPiArCWkyY19pbXhfY2xlYXJfaXJxKGkyY19pbXgsIEkyU1JfSUlGIHwgSTJT Ul9JQUwpOyB9DQo+ID4gKw0KPiA+ICAvKiBGdW5jdGlvbnMgZm9yIERNQSBzdXBwb3J0ICovDQo+ ID4gIHN0YXRpYyB2b2lkIGkyY19pbXhfZG1hX3JlcXVlc3Qoc3RydWN0IGlteF9pMmNfc3RydWN0 ICppMmNfaW14LA0KPiA+ICAJCQkJCQlkbWFfYWRkcl90IHBoeV9hZGRyKQ0KPiA+IEBAIC00MTIs MTkgKzQ0Niw2IEBAIHN0YXRpYyB2b2lkIGkyY19pbXhfZG1hX2ZyZWUoc3RydWN0IGlteF9pMmNf c3RydWN0DQo+ICppMmNfaW14KQ0KPiA+ICAJZG1hLT5jaGFuX3VzaW5nID0gTlVMTDsNCj4gPiAg fQ0KPiA+DQo+ID4gLXN0YXRpYyB2b2lkIGkyY19pbXhfY2xlYXJfaXJxKHN0cnVjdCBpbXhfaTJj X3N0cnVjdCAqaTJjX2lteCwNCj4gPiB1bnNpZ25lZCBpbnQgYml0cykgLXsNCj4gPiAtCXVuc2ln bmVkIGludCB0ZW1wOw0KPiA+IC0NCj4gPiAtCS8qDQo+ID4gLQkgKiBpMnNyX2Nscl9vcGNvZGUg aXMgdGhlIHZhbHVlIHRvIGNsZWFyIGFsbCBpbnRlcnJ1cHRzLiBIZXJlIHdlIHdhbnQgdG8NCj4g PiAtCSAqIGNsZWFyIG9ubHkgPGJpdHM+LCBzbyB3ZSB3cml0ZSB+aTJzcl9jbHJfb3Bjb2RlIHdp dGgganVzdCA8Yml0cz4NCj4gPiAtCSAqIHRvZ2dsZWQuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVz ZSBpLk1YIG5lZWRzIFcwQyBhbmQgVnlicmlkIHVzZXMgVzFDLg0KPiA+IC0JICovDQo+ID4gLQl0 ZW1wID0gfmkyY19pbXgtPmh3ZGF0YS0+aTJzcl9jbHJfb3Bjb2RlIF4gYml0czsNCj4gPiAtCWlt eF9pMmNfd3JpdGVfcmVnKHRlbXAsIGkyY19pbXgsIElNWF9JMkNfSTJTUik7DQo+ID4gLX0NCj4g PiAtDQo+ID4gIHN0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1 Y3QgKmkyY19pbXgsIGludA0KPiA+IGZvcl9idXN5LCBib29sIGF0b21pYykgIHsNCj4gPiAgCXVu c2lnbmVkIGxvbmcgb3JpZ19qaWZmaWVzID0gamlmZmllczsgQEAgLTYzOCwxOCArNjU5LDE2NSBA QCBzdGF0aWMNCj4gPiB2b2lkIGkyY19pbXhfc3RvcChzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmky Y19pbXgsIGJvb2wgYXRvbWljKQ0KPiA+ICAJaW14X2kyY193cml0ZV9yZWcodGVtcCwgaTJjX2lt eCwgSU1YX0kyQ19JMkNSKTsgIH0NCj4gPg0KPiA+ICsvKg0KPiA+ICsgKiBFbmFibGUgYnVzIGlk bGUgaW50ZXJydXB0cw0KPiA+ICsgKiBOb3RlOiBJQklDIHJlZ2lzdGVyIHdpbGwgYmUgY2xlYXJl ZCBhZnRlciBkaXNhYmxlZCBpMmMgbW9kdWxlLg0KPiA+ICsgKiBBbGwgb2YgbGF5ZXJzY2FwZSBz ZXJpZXMgU29DcyBzdXBwb3J0IElCSUMgcmVnaXN0ZXIuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMg dm9pZCBpMmNfaW14X2VuYWJsZV9idXNfaWRsZShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19p bXgpIHsNCj4gPiArCWlmIChpc192ZjYxMF9pMmMoaTJjX2lteCkpIHsNCj4gPiArCQl1bnNpZ25l ZCBpbnQgdGVtcDsNCj4gPiArDQo+ID4gKwkJdGVtcCA9IGlteF9pMmNfcmVhZF9yZWcoaTJjX2lt eCwgSU1YX0kyQ19JQklDKTsNCj4gPiArCQl0ZW1wIHw9IElCSUNfQklJRTsNCj4gPiArCQlpbXhf aTJjX3dyaXRlX3JlZyh0ZW1wLCBpMmNfaW14LCBJTVhfSTJDX0lCSUMpOw0KPiA+ICsJfQ0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgaTJjX2lteF9zbGF2ZV9pc3Ioc3Ry dWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LA0KPiA+ICsJCQkJICAgICB1bnNpZ25lZCBpbnQg c3RhdHVzLCB1bnNpZ25lZCBpbnQgY3RsKSB7DQo+ID4gKwl1OCB2YWx1ZTsNCj4gPiArDQo+ID4g KwlpZiAoc3RhdHVzICYgSTJTUl9JQUwpIHsgLyogQXJiaXRyYXRpb24gbG9zdCAqLw0KPiA+ICsJ CWkyY19pbXhfY2xlYXJfaXJxKGkyY19pbXgsIEkyU1JfSUFMKTsNCj4gPiArCQlpZiAoIShzdGF0 dXMgJiBJMlNSX0lBQVMpKQ0KPiA+ICsJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKHN0YXR1cyAmIEkyU1JfSUFBUykgeyAvKiBBZGRyZXNzZWQgYXMgYSBz bGF2ZSAqLw0KPiA+ICsJCWlmIChzdGF0dXMgJiBJMlNSX1NSVykgeyAvKiBNYXN0ZXIgd2FudHMg dG8gcmVhZCBmcm9tIHVzKi8NCj4gPiArCQkJZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYs ICJyZWFkIHJlcXVlc3RlZCIpOw0KPiA+ICsJCQlpMmNfc2xhdmVfZXZlbnQoaTJjX2lteC0+c2xh dmUsIEkyQ19TTEFWRV9SRUFEX1JFUVVFU1RFRCwNCj4gJnZhbHVlKTsNCj4gPiArDQo+ID4gKwkJ CS8qIFNsYXZlIHRyYW5zbWl0ICovDQo+ID4gKwkJCWN0bCB8PSBJMkNSX01UWDsNCj4gPiArCQkJ aW14X2kyY193cml0ZV9yZWcoY3RsLCBpMmNfaW14LCBJTVhfSTJDX0kyQ1IpOw0KPiA+ICsNCj4g PiArCQkJLyogU2VuZCBkYXRhICovDQo+ID4gKwkJCWlteF9pMmNfd3JpdGVfcmVnKHZhbHVlLCBp MmNfaW14LCBJTVhfSTJDX0kyRFIpOw0KPiA+ICsJCX0gZWxzZSB7IC8qIE1hc3RlciB3YW50cyB0 byB3cml0ZSB0byB1cyAqLw0KPiA+ICsJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwg IndyaXRlIHJlcXVlc3RlZCIpOw0KPiA+ICsJCQlpMmNfc2xhdmVfZXZlbnQoaTJjX2lteC0+c2xh dmUsDQo+IAlJMkNfU0xBVkVfV1JJVEVfUkVRVUVTVEVELCAmdmFsdWUpOw0KPiA+ICsNCj4gPiAr CQkJLyogU2xhdmUgcmVjZWl2ZSAqLw0KPiA+ICsJCQljdGwgJj0gfkkyQ1JfTVRYOw0KPiA+ICsJ CQlpbXhfaTJjX3dyaXRlX3JlZyhjdGwsIGkyY19pbXgsIElNWF9JMkNfSTJDUik7DQo+ID4gKwkJ CS8qIER1bW15IHJlYWQgKi8NCj4gPiArCQkJaW14X2kyY19yZWFkX3JlZyhpMmNfaW14LCBJTVhf STJDX0kyRFIpOw0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSBpZiAoIShjdGwgJiBJMkNSX01UWCkp IHsgLyogUmVjZWl2ZSBtb2RlICovDQo+ID4gKwkJaWYgKHN0YXR1cyAmIEkyU1JfSUJCKSB7IC8q IE5vIFNUT1Agc2lnbmFsIGRldGVjdGVkICovDQo+ID4gKwkJCXZhbHVlID0gaW14X2kyY19yZWFk X3JlZyhpMmNfaW14LCBJTVhfSTJDX0kyRFIpOw0KPiA+ICsJCQlpMmNfc2xhdmVfZXZlbnQoaTJj X2lteC0+c2xhdmUsCUkyQ19TTEFWRV9XUklURV9SRUNFSVZFRCwNCj4gJnZhbHVlKTsNCj4gPiAr CQl9IGVsc2UgeyAvKiBTVE9QIHNpZ25hbCBpcyBkZXRlY3RlZCAqLw0KPiA+ICsJCQlkZXZfZGJn KCZpMmNfaW14LT5hZGFwdGVyLmRldiwNCj4gPiArCQkJCSJTVE9QIHNpZ25hbCBkZXRlY3RlZCIp Ow0KPiA+ICsJCQlpMmNfc2xhdmVfZXZlbnQoaTJjX2lteC0+c2xhdmUsIEkyQ19TTEFWRV9TVE9Q LCAmdmFsdWUpOw0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSBpZiAoIShzdGF0dXMgJiBJMlNSX1JY QUspKSB7IC8qIFRyYW5zbWl0IG1vZGUgcmVjZWl2ZWQgQUNLICovDQo+ID4gKwkJY3RsIHw9IEky Q1JfTVRYOw0KPiA+ICsJCWlteF9pMmNfd3JpdGVfcmVnKGN0bCwgaTJjX2lteCwgSU1YX0kyQ19J MkNSKTsNCj4gPiArDQo+ID4gKwkJaTJjX3NsYXZlX2V2ZW50KGkyY19pbXgtPnNsYXZlLAlJMkNf U0xBVkVfUkVBRF9QUk9DRVNTRUQsDQo+ICZ2YWx1ZSk7DQo+ID4gKw0KPiA+ICsJCWlteF9pMmNf d3JpdGVfcmVnKHZhbHVlLCBpMmNfaW14LCBJTVhfSTJDX0kyRFIpOw0KPiA+ICsJfSBlbHNlIHsg LyogVHJhbnNtaXQgbW9kZSByZWNlaXZlZCBOQUsgKi8NCj4gPiArCQljdGwgJj0gfkkyQ1JfTVRY Ow0KPiA+ICsJCWlteF9pMmNfd3JpdGVfcmVnKGN0bCwgaTJjX2lteCwgSU1YX0kyQ19JMkNSKTsN Cj4gPiArCQlpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJEUik7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBpMmNfaW14X3NsYXZlX2luaXQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNf aW14KSB7DQo+ID4gKwlpbnQgdGVtcDsNCj4gPiArDQo+ID4gKwkvKiBTZXQgc2xhdmUgYWRkci4g Ki8NCj4gPiArCWlteF9pMmNfd3JpdGVfcmVnKChpMmNfaW14LT5zbGF2ZS0+YWRkciA8PCAxKSwg aTJjX2lteCwNCj4gPiArSU1YX0kyQ19JQURSKTsNCj4gPiArDQo+ID4gKwlpMmNfaW14X3Jlc2V0 X3JlZ3MoaTJjX2lteCk7DQo+ID4gKw0KPiA+ICsJLyogRW5hYmxlIG1vZHVsZSAqLw0KPiA+ICsJ dGVtcCA9IGkyY19pbXgtPmh3ZGF0YS0+aTJjcl9pZW5fb3Bjb2RlOw0KPiA+ICsJaW14X2kyY193 cml0ZV9yZWcodGVtcCwgaTJjX2lteCwgSU1YX0kyQ19JMkNSKTsNCj4gPiArDQo+ID4gKwkvKiBF bmFibGUgaW50ZXJydXB0IGZyb20gaTJjIG1vZHVsZSAqLw0KPiA+ICsJdGVtcCB8PSBJMkNSX0lJ RU47DQo+ID4gKwlpbXhfaTJjX3dyaXRlX3JlZyh0ZW1wLCBpMmNfaW14LCBJTVhfSTJDX0kyQ1Ip Ow0KPiA+ICsNCj4gPiArCWkyY19pbXhfZW5hYmxlX2J1c19pZGxlKGkyY19pbXgpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGkyY19pbXhfcmVnX3NsYXZlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQpIHsNCj4gPiArCXN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCA9IGky Y19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0K PiA+ICsJaWYgKGkyY19pbXgtPnNsYXZlKQ0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0K PiA+ICsJaTJjX2lteC0+c2xhdmUgPSBjbGllbnQ7DQo+ID4gKw0KPiA+ICsJLyogUmVzdW1lICov DQo+ID4gKwlyZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGkyY19pbXgtPmFkYXB0ZXIuZGV2LnBh cmVudCk7DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCWRldl9lcnIoJmkyY19pbXgtPmFk YXB0ZXIuZGV2LCAiZmFpbGVkIHRvIHJlc3VtZSBpMmMgY29udHJvbGxlciIpOw0KPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaTJjX2lteF9zbGF2ZV9pbml0KGkyY19p bXgpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGkyY19pbXhfdW5yZWdfc2xhdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkgew0KPiA+ ICsJc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14ID0gaTJjX2dldF9hZGFwZGF0YShjbGll bnQtPmFkYXB0ZXIpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoIWkyY19pbXgt PnNsYXZlKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCS8qIFJlc2V0IHNs YXZlIGFkZHJlc3MuICovDQo+ID4gKwlpbXhfaTJjX3dyaXRlX3JlZygwLCBpMmNfaW14LCBJTVhf STJDX0lBRFIpOw0KPiA+ICsNCj4gPiArCWkyY19pbXhfcmVzZXRfcmVncyhpMmNfaW14KTsNCj4g PiArDQo+ID4gKwlpMmNfaW14LT5zbGF2ZSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJLyogU3VzcGVu ZCAqLw0KPiA+ICsJcmV0ID0gcG1fcnVudGltZV9wdXRfc3luYyhpMmNfaW14LT5hZGFwdGVyLmRl di5wYXJlbnQpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJZGV2X2VycigmaTJjX2lteC0+ YWRhcHRlci5kZXYsICJmYWlsZWQgdG8gc3VzcGVuZCBpMmMgY29udHJvbGxlciIpOw0KPiA+ICsN Cj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5f dCBpMmNfaW14X21hc3Rlcl9pc3Ioc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LA0KPiA+ ICt1bnNpZ25lZCBpbnQgc3RhdHVzKSB7DQo+ID4gKwkvKiBzYXZlIHN0YXR1cyByZWdpc3RlciAq Lw0KPiA+ICsJaTJjX2lteC0+aTJjc3IgPSBzdGF0dXM7DQo+ID4gKwl3YWtlX3VwKCZpMmNfaW14 LT5xdWV1ZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICBzdGF0aWMgaXJxcmV0dXJuX3QgaTJjX2lteF9pc3IoaW50IGlycSwgdm9pZCAqZGV2 X2lkKSAgew0KPiA+ICAJc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14ID0gZGV2X2lkOw0K PiA+IC0JdW5zaWduZWQgaW50IHRlbXA7DQo+ID4gKwl1bnNpZ25lZCBpbnQgY3RsLCBzdGF0dXM7 DQo+ID4NCj4gPiAtCXRlbXAgPSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJT Uik7DQo+ID4gLQlpZiAodGVtcCAmIEkyU1JfSUlGKSB7DQo+ID4gLQkJLyogc2F2ZSBzdGF0dXMg cmVnaXN0ZXIgKi8NCj4gPiAtCQlpMmNfaW14LT5pMmNzciA9IHRlbXA7DQo+ID4gKwlzdGF0dXMg PSBpbXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJTUik7DQo+ID4gKwljdGwgPSBp bXhfaTJjX3JlYWRfcmVnKGkyY19pbXgsIElNWF9JMkNfSTJDUik7DQo+ID4gKwlpZiAoc3RhdHVz ICYgSTJTUl9JSUYpIHsNCj4gPiAgCQlpMmNfaW14X2NsZWFyX2lycShpMmNfaW14LCBJMlNSX0lJ Rik7DQo+ID4gLQkJd2FrZV91cCgmaTJjX2lteC0+cXVldWUpOw0KPiA+IC0JCXJldHVybiBJUlFf SEFORExFRDsNCj4gPiArCQlpZiAoaTJjX2lteC0+c2xhdmUgJiYgIShjdGwgJiBJMkNSX01TVEEp KQ0KPiA+ICsJCQlyZXR1cm4gaTJjX2lteF9zbGF2ZV9pc3IoaTJjX2lteCwgc3RhdHVzLCBjdGwp Ow0KPiA+ICsJCXJldHVybiBpMmNfaW14X21hc3Rlcl9pc3IoaTJjX2lteCwgc3RhdHVzKTsNCj4g PiAgCX0NCj4gPg0KPiA+ICAJcmV0dXJuIElSUV9OT05FOw0KPiA+IEBAIC0xMDI3LDYgKzExOTUs MTAgQEAgc3RhdGljIGludCBpMmNfaW14X3hmZXJfY29tbW9uKHN0cnVjdA0KPiBpMmNfYWRhcHRl ciAqYWRhcHRlciwNCj4gPiAgCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPiBl eGl0IHdpdGg6ICVzOiAlZFxuIiwgX19mdW5jX18sDQo+ID4gIAkJKHJlc3VsdCA8IDApID8gImVy cm9yIiA6ICJzdWNjZXNzIG1zZyIsDQo+ID4gIAkJCShyZXN1bHQgPCAwKSA/IHJlc3VsdCA6IG51 bSk7DQo+ID4gKwkvKiBBZnRlciBkYXRhIGlzIHRyYW5zZmVycmVkLCBzd2l0Y2ggdG8gc2xhdmUg bW9kZShhcyBhIHJlY2VpdmVyKSAqLw0KPiA+ICsJaWYgKGkyY19pbXgtPnNsYXZlKQ0KPiA+ICsJ CWkyY19pbXhfc2xhdmVfaW5pdChpMmNfaW14KTsNCj4gPiArDQo+ID4gIAlyZXR1cm4gKHJlc3Vs dCA8IDApID8gcmVzdWx0IDogbnVtOw0KPiA+ICB9DQo+ID4NCj4gPiBAQCAtMTE0MCw2ICsxMzEy LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19pbXhfYWxnbyA9IHsN Cj4gPiAgCS5tYXN0ZXJfeGZlciA9IGkyY19pbXhfeGZlciwNCj4gPiAgCS5tYXN0ZXJfeGZlcl9h dG9taWMgPSBpMmNfaW14X3hmZXJfYXRvbWljLA0KPiA+ICAJLmZ1bmN0aW9uYWxpdHkgPSBpMmNf aW14X2Z1bmMsDQo+ID4gKwkucmVnX3NsYXZlCT0gaTJjX2lteF9yZWdfc2xhdmUsDQo+ID4gKwku dW5yZWdfc2xhdmUJPSBpMmNfaW14X3VucmVnX3NsYXZlLA0KPiA+ICB9Ow0KPiA+DQo+ID4gIHN0 YXRpYyBpbnQgaTJjX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSBAQCAt MTIzMywxMA0KPiA+ICsxNDA3LDcgQEAgc3RhdGljIGludCBpMmNfaW14X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gIAljbGtfbm90aWZpZXJfcmVnaXN0ZXIoaTJjX2lt eC0+Y2xrLCAmaTJjX2lteC0+Y2xrX2NoYW5nZV9uYik7DQo+ID4gIAlpMmNfaW14X3NldF9jbGso aTJjX2lteCwgY2xrX2dldF9yYXRlKGkyY19pbXgtPmNsaykpOw0KPiA+DQo+ID4gLQkvKiBTZXQg dXAgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdHMgKi8NCj4gPiAtCWlteF9pMmNfd3JpdGVfcmVn KGkyY19pbXgtPmh3ZGF0YS0+aTJjcl9pZW5fb3Bjb2RlIF4gSTJDUl9JRU4sDQo+ID4gLQkJCWky Y19pbXgsIElNWF9JMkNfSTJDUik7DQo+ID4gLQlpbXhfaTJjX3dyaXRlX3JlZyhpMmNfaW14LT5o d2RhdGEtPmkyc3JfY2xyX29wY29kZSwgaTJjX2lteCwNCj4gSU1YX0kyQ19JMlNSKTsNCj4gPiAr CWkyY19pbXhfcmVzZXRfcmVncyhpMmNfaW14KTsNCj4gPg0KPiA+ICAJLyogSW5pdCBvcHRpb25h bCBidXMgcmVjb3ZlcnkgZnVuY3Rpb24gKi8NCj4gPiAgCXJldCA9IGkyY19pbXhfaW5pdF9yZWNv dmVyeV9pbmZvKGkyY19pbXgsIHBkZXYpOw0KPiA+IC0tDQo+ID4gMi4xNy4xDQo+ID4NCj4gPg0K PiANCj4gLS0NCj4gUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwN Cj4gfA0KPiBTdGV1ZXJ3YWxkZXIgU3RyLiAyMSAgICAgICAgICAgICAgICAgICAgICAgfCBodHRw Oi8vd3d3LnBlbmd1dHJvbml4LmRlLw0KPiB8DQo+IDMxMTM3IEhpbGRlc2hlaW0sIEdlcm1hbnkg ICAgICAgICAgICAgICAgICB8IFBob25lOiArNDktNTEyMS0yMDY5MTctMA0KPiB8DQo+IEFtdHNn ZXJpY2h0IEhpbGRlc2hlaW0sIEhSQSAyNjg2ICAgICAgICAgICB8IEZheDoNCj4gKzQ5LTUxMjEt MjA2OTE3LTU1NTUgfA0K 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=-15.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 DB95AC5519F for ; Mon, 30 Nov 2020 05:28:24 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4D04D2074A for ; Mon, 30 Nov 2020 05:28:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="l8fZmc92"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="Z6+U4Vk3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4D04D2074A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=oss.nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xQyOW1tubBVyOXi7+7KPY1aEZQp4J6Pj413gppRtR3k=; b=l8fZmc92pKwhUnQWV3K5TSSC8 V5oeo073GKQFGj5NSyXanklx5U2a+8BkSceBIQBg6zPVACKkW94kl/ELhqnXf/sfdBvKqNJ51eQWW bTCp9SxhptFgNkYMFyM8JV42rAbAUbkPHqu1H+FQXF7zICY5I1Vy5x2b6wrEvysUiEm9gicXi+x+3 GTPKCtftwh3G4ziLkX2awUJXT5MNV+SMZWptUYLmmHM2XMZb6seMtSxQcTiC5vA0SQmQXi74isCYu hrweYLj2qtITdjH4vwGXteqqxg02yppk9/AB2SYsEiBT0bia7OMvVM2Zq19zz6vZI3cOmstegkMMw n9odyQweQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kjbi1-0006PJ-7Q; Mon, 30 Nov 2020 05:26:45 +0000 Received: from mail-eopbgr80042.outbound.protection.outlook.com ([40.107.8.42] helo=EUR04-VI1-obe.outbound.protection.outlook.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kjbhv-0006Oq-Cc for linux-arm-kernel@lists.infradead.org; Mon, 30 Nov 2020 05:26:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EXGZaWBceRBeVN/NK25oDcu8ZA4Dr9yIIyT6g146zJmbvsZDY0UpWXKYZqCdIsIEo/Xy7NxGKb715/n74DQPST1l6Ie3UCQMNfwn2oj3qXcyJvKQaS5XBp83ZoJ1Y/z8H7L85OjM1nGvlAIoKs880KSrySEmHdi+0UTbi4l3g3CGKjCL2n9ox3T3C8Fi8lsh858/jZgJWg0N36VPRWR61XuNFx6PQFJhhZNrwkNZeyW4iJLl8jTgNw0BtxBtJeqBZPZ0Wwzjbk7EuEI7uscluD/oO+WL2o/xFNc+WrR1jxY5xSTCId/vqjMgfpanAKUJNBTLB6+nY8ix2sSefjIrXA== 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-SenderADCheck; bh=8BYbGhwNIY4RDPIndnpv9Cg31GuKuTIFU6MUi16/BwY=; b=eUyUg25/Oh4QhT9vf/bffOKtqZ8FTg/KBpa/6hi36CL63plUXpgZqKUv40WE54u23Zipb9GH3y9XoonDCNdIaTvFdIg1gE6Dxyd8CJ6s4Uw0cIkGwODDUFqHE9hpTb5epvD3kr0U5H4DHPTLrcrRC5mrDoAJ1oZC9sXldij8sHJLExS54eUuM8xaP7hSjDxfpVJIXcaXUCAdEALYBoaQCFbGY3e27v4lhnNtCOV00za23szWg5Xlkuvb6EWG0UHwDDfT68inC90b270+M7/bWqfFgmWymyBQaf0Jwmo4tkYumuq4evavpCaq9FhXLWRs1tpfw6b763+hnENRt8JJ2A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8BYbGhwNIY4RDPIndnpv9Cg31GuKuTIFU6MUi16/BwY=; b=Z6+U4Vk3HVf2CFaAGMBo2fw7OsrAjbVGdbnhaNEu8p/5djIaAFrWRbUzeNdCCLVAFlUu7VmAnw0ehjVohnaGMImnQhBXKwueI0q5TqzdfdBaK0nQh43W5P8m8KLyFhDiPh+CvVCIuRWIuoPzxv5SRyiU7ihfREeQtgWuo87HMos= Received: from DB6PR0401MB2438.eurprd04.prod.outlook.com (2603:10a6:4:33::14) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3611.20; Mon, 30 Nov 2020 05:26:33 +0000 Received: from DB6PR0401MB2438.eurprd04.prod.outlook.com ([fe80::f0c9:fd48:c8d1:5c22]) by DB6PR0401MB2438.eurprd04.prod.outlook.com ([fe80::f0c9:fd48:c8d1:5c22%11]) with mapi id 15.20.3611.025; Mon, 30 Nov 2020 05:26:33 +0000 From: "Biwen Li (OSS)" To: Oleksij Rempel , "Biwen Li (OSS)" Subject: RE: [v10] i2c: imx: support slave mode for imx I2C driver Thread-Topic: [v10] i2c: imx: support slave mode for imx I2C driver Thread-Index: AQHWxtldQDR+r3I89UKiv6XOJFwXpQ== Date: Mon, 30 Nov 2020 05:26:33 +0000 Message-ID: References: <20201111113255.28710-1-biwen.li@oss.nxp.com> <20201113135947.h7cek55eevilay2t@pengutronix.de> In-Reply-To: <20201113135947.h7cek55eevilay2t@pengutronix.de> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: pengutronix.de; dkim=none (message not signed) header.d=none; pengutronix.de; dmarc=none action=none header.from=oss.nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: e4130495-e013-4472-d9fd-08d894f08024 x-ms-traffictypediagnostic: DB8PR04MB7066: x-ms-exchange-sharedmailbox-routingagent-processed: True x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2089; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pepeYTxqXe4+BPmNQIfPu3xukoO0EsQ3bXTyU6zBAtttkVVc5Qmjd4LXaXCOyRLFjOKuhHl/G6azJTyrXJQ6d0Qdp4Rm1fUmQuSH7LqlQnmEsA4waD5NeUuA79KekyhGWAwymQh8rxnPdpF8K6yM9f/yMcknzTLA8sTG9GJBf/meeFfi9wnN09LKtFUw/TAlyxsemIDi4qAZHDp2kikBiXUFs9FKxHemhr3z+2wr7QH+t95WCa1iO5JClQWoNgSq+KM4ObGa+GQcGtv9dr5kPwNzxruobyC3Jg51hy3MBboOdFefbN8AR0SnxjZAUb13ToUlPFhS9Zaz1/ZYhQoRQg9V9u78bfglLzw+76dYoWKkDV4zb68WfmsUY2O8DNn3WhWsWDPEd+cZRiy+2aRzWIRm/K9kOpMxIxg/bYyq7eb0YT+9aoVHf5F7jmA1D5rpnv9YyD3J2gI3u2h/+69q9w== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB6PR0401MB2438.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(39860400002)(376002)(346002)(136003)(396003)(52536014)(4326008)(30864003)(5660300002)(2906002)(9686003)(83080400002)(86362001)(71200400001)(64756008)(66446008)(66556008)(66476007)(76116006)(7416002)(8676002)(55016002)(966005)(478600001)(316002)(8936002)(110136005)(7696005)(66946007)(54906003)(33656002)(6506007)(26005)(186003)(83380400001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?M01vVGFOaC95ajJvYklYSjhLYWExTXZkNHYrcHNiUU1YcEJCcW5DcXNLN1ZT?= =?utf-8?B?cU9HcEZ4NzRub2xTWVgrQnZKNVlSOG55YmZrTGxiNjJ4Q2h3V3pReDVvVnNQ?= =?utf-8?B?RWJ4U1NJSFB2QTRFQ0dWVTB2aGRydkFPeFFVVFVGNnRkQ2trUGx6T1Bub0s5?= =?utf-8?B?dWtEVzNMdjA0L1NJWkRGKzUzdGZ4UkZNc3ZWcTFuQjVUYk0xUXBpY0tROS9P?= =?utf-8?B?L0dUVkt4L2R1aGhndVMvNU5zajZDdnZDdFhWOGxxNFdGSzNDMGlHSUErZVVw?= =?utf-8?B?cWJaQklUUVp3bCtXS0NTamp0OWppZElyNHJ0OVFZQ214NnFPZVRHZWxVeUQ4?= =?utf-8?B?RVNYbk5VY0k4QjRpMmdtaXFMK0F0NWtVNS90WGhkMnlMOWdiNnBKRUtPMXhw?= =?utf-8?B?dlZuQkRhZGdJY3RpeTgydk9uZzlrSXlTRVF1QzduMHNyWjc2NXFFZkNhQVFp?= =?utf-8?B?Y0MxNHQ4WlVKeFhTNXdwaERTT0dOcmlsSEJORExXNmxtUFJlb3NGRHkxbHJj?= =?utf-8?B?VFFTVEYycThVcmdGOHhtRjBNcFVOd2Y2MHV5dTJUYzh2OXNlRHY3WWhiT1RJ?= =?utf-8?B?aVUvZk05RGhKdExJdzZjTFp3LzBTUWhnS25JRUF3NG5CNFVrdGU5LzdXVWpQ?= =?utf-8?B?QUJUVXB3eEIwYXJjWUp4WW00dGM4UTF2OTQ2T2s2NjJvT1c3eDd6TzBHZ1oz?= =?utf-8?B?QWFLVlNZTE0zc1FoODlqc1MxTnNieFU2dXFwTmtKWkNoVGIySnV6aG8vZWRH?= =?utf-8?B?bUFLaGMrRDltVmptUy93dlkrVW9LczhrakdNNmk5dDRVNEpqRTRjUlRoVEhp?= =?utf-8?B?SzJyZFVINVJsa21ZckNQSGxyUEhEbGxSNU9qU25Zb0J1M1R2V3h2REIxQjJN?= =?utf-8?B?OTk1VlorY3dZdDJFaFc2UFptaGEyZEdmUE84Q3JCRUtDcHE5cVJsTUJaeTVK?= =?utf-8?B?dW1GRENLNGFyM2hMdGVDZUJOcVEvQjY4eS9sOFJQb0Q4b05BKzVXVkxFMUxy?= =?utf-8?B?bGt3RUdIZllEcEVWbi9rYzAzSVRBaE5KRXRCZ3E1VzVxWWRRWkZQd1ZhUktr?= =?utf-8?B?S1ZqV0VvN0RUMmhBRVdVTTM1TmgwU2pUSEZPQmpJeUhvSUNtdE9nT01jMkJq?= =?utf-8?B?YUZIQzhnaCtkdWloeFRuTmV2QWdmMmJZdTBaT1hFRUJJWVgxWGpobEJTWERI?= =?utf-8?B?WTZtaUlvWG1tWllOZ0FoWkd0R2RXOEtLUUh1SkdEOW9oZjAybWx3cXdsSHM3?= =?utf-8?B?NFB5ajFkbmN4YksxTld2RDJBaFBlV0gxL3RIRklkQ0lTZjdCWjc3cXJTUFdj?= =?utf-8?Q?olJUsScVuD2EA=3D?= MIME-Version: 1.0 X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB6PR0401MB2438.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4130495-e013-4472-d9fd-08d894f08024 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2020 05:26:33.4626 (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: sI5BqHT9cjtSND2+3J+q1PmBA4kobOdvNqTxznhJxRBu+j8SttIVHGHiJV9zNT5SoMVvCspszRdVaDJSOUWlMA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201130_002639_677402_109F6C89 X-CRM114-Status: GOOD ( 34.57 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Aisheng Dong , "wsa@the-dreams.de" , "festevam@gmail.com" , "s.hauer@pengutronix.de" , "linux-kernel@vger.kernel.org" , "linux@rempel-privat.de" , Clark Wang , "linux-i2c@vger.kernel.org" , "kernel@pengutronix.de" , Jiafei Pan , Leo Li , "shawnguo@kernel.org" , Xiaobo Xie , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org > > > > The patch supports slave mode for imx I2C driver > > > > Signed-off-by: Biwen Li > > Thank you for your work! > > Acked-by: Oleksij Rempel > > @Wolfram, Christian Eggers I2SR_IAL patches should go before this one. Hi Wolfram, Any progress? Regards, Biwen Li > > > --- > > Change in v10: > > - totally remove CONFIG_I2C_SLAVE > > - replace api with i2c_imx_clart_irq() > > - remove robust code > > - place pm_runtime_get in i2c_imx_slave_init() > > to i2c_imx_reg_slave() > > - apply the patch on top of this patch set: > > [PATCH v6 0/3] i2c: imx: Fix handling of arbitration loss > > https://lkml.org/lkml/2020/10/9/407 > > > > Change in v9: > > - remove #ifdef after select I2C_SLAVE by default > > > > Change in v8: > > - fix build issue > > > > Change in v7: > > - support auto switch mode between master and slave > > - enable interrupt when idle in slave mode > > - remove #ifdef > > > > Change in v6: > > - delete robust logs and comments > > - not read status register again in master isr. > > > > Change in v5: > > - fix a bug that cannot determine in what mode(master mode or > > slave mode) > > > > Change in v4: > > - add MACRO CONFIG_I2C_SLAVE to fix compilation issue > > > > Change in v3: > > - support layerscape and i.mx platform > > > > Change in v2: > > - remove MACRO CONFIG_I2C_SLAVE > > > > drivers/i2c/busses/Kconfig | 1 + > > drivers/i2c/busses/i2c-imx.c | 219 > > +++++++++++++++++++++++++++++++---- > > 2 files changed, 196 insertions(+), 24 deletions(-) > > > > diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig > > index a97a9d058198..e2ad62481f25 100644 > > --- a/drivers/i2c/busses/Kconfig > > +++ b/drivers/i2c/busses/Kconfig > > @@ -675,6 +675,7 @@ config I2C_IMG > > config I2C_IMX > > tristate "IMX I2C interface" > > depends on ARCH_MXC || ARCH_LAYERSCAPE || COLDFIRE > > + select I2C_SLAVE > > help > > Say Y here if you want to use the IIC bus controller on > > the Freescale i.MX/MXC, Layerscape or ColdFire processors. > > diff --git a/drivers/i2c/busses/i2c-imx.c > > b/drivers/i2c/busses/i2c-imx.c index e6f8d6e45a15..a8e8af57e33f 100644 > > --- a/drivers/i2c/busses/i2c-imx.c > > +++ b/drivers/i2c/busses/i2c-imx.c > > @@ -17,6 +17,7 @@ > > * Copyright (C) 2008 Darius Augulis > > * > > * Copyright 2013 Freescale Semiconductor, Inc. > > + * Copyright 2020 NXP > > * > > */ > > > > @@ -73,6 +74,11 @@ > > #define IMX_I2C_I2SR 0x03 /* i2c status */ > > #define IMX_I2C_I2DR 0x04 /* i2c transfer data */ > > > > +/* > > + * All of the layerscape series SoCs support IBIC register. > > + */ > > +#define IMX_I2C_IBIC 0x05 /* i2c bus interrupt config */ > > + > > #define IMX_I2C_REGSHIFT 2 > > #define VF610_I2C_REGSHIFT 0 > > > > @@ -91,6 +97,7 @@ > > #define I2CR_MSTA 0x20 > > #define I2CR_IIEN 0x40 > > #define I2CR_IEN 0x80 > > +#define IBIC_BIIE 0x80 /* Bus idle interrupt enable */ > > > > /* register bits different operating codes definition: > > * 1) I2SR: Interrupt flags clear operation differ between SoCs: > > @@ -201,6 +208,7 @@ struct imx_i2c_struct { > > struct pinctrl_state *pinctrl_pins_gpio; > > > > struct imx_i2c_dma *dma; > > + struct i2c_client *slave; > > }; > > > > static const struct imx_i2c_hwdata imx1_i2c_hwdata = { @@ -265,6 > > +273,11 @@ static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx) > > return i2c_imx->hwdata->devtype == IMX1_I2C; } > > > > +static inline int is_vf610_i2c(struct imx_i2c_struct *i2c_imx) { > > + return i2c_imx->hwdata->devtype == VF610_I2C; } > > + > > static inline void imx_i2c_write_reg(unsigned int val, > > struct imx_i2c_struct *i2c_imx, unsigned int reg) { @@ -277,6 > > +290,27 @@ static inline unsigned char imx_i2c_read_reg(struct > imx_i2c_struct *i2c_imx, > > return readb(i2c_imx->base + (reg << i2c_imx->hwdata->regshift)); } > > > > +static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, > > +unsigned int bits) { > > + unsigned int temp; > > + > > + /* > > + * i2sr_clr_opcode is the value to clear all interrupts. Here we want to > > + * clear only , so we write ~i2sr_clr_opcode with just > > + * toggled. This is required because i.MX needs W0C and Vybrid uses W1C. > > + */ > > + temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; > > + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); } > > + > > +/* Set up i2c controller register and i2c status register to default > > +value. */ static void i2c_imx_reset_regs(struct imx_i2c_struct > > +*i2c_imx) { > > + imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, > > + i2c_imx, IMX_I2C_I2CR); > > + i2c_imx_clear_irq(i2c_imx, I2SR_IIF | I2SR_IAL); } > > + > > /* Functions for DMA support */ > > static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, > > dma_addr_t phy_addr) > > @@ -412,19 +446,6 @@ static void i2c_imx_dma_free(struct imx_i2c_struct > *i2c_imx) > > dma->chan_using = NULL; > > } > > > > -static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, > > unsigned int bits) -{ > > - unsigned int temp; > > - > > - /* > > - * i2sr_clr_opcode is the value to clear all interrupts. Here we want to > > - * clear only , so we write ~i2sr_clr_opcode with just > > - * toggled. This is required because i.MX needs W0C and Vybrid uses W1C. > > - */ > > - temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; > > - imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); > > -} > > - > > static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int > > for_busy, bool atomic) { > > unsigned long orig_jiffies = jiffies; @@ -638,18 +659,165 @@ static > > void i2c_imx_stop(struct imx_i2c_struct *i2c_imx, bool atomic) > > imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); } > > > > +/* > > + * Enable bus idle interrupts > > + * Note: IBIC register will be cleared after disabled i2c module. > > + * All of layerscape series SoCs support IBIC register. > > + */ > > +static void i2c_imx_enable_bus_idle(struct imx_i2c_struct *i2c_imx) { > > + if (is_vf610_i2c(i2c_imx)) { > > + unsigned int temp; > > + > > + temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_IBIC); > > + temp |= IBIC_BIIE; > > + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_IBIC); > > + } > > +} > > + > > +static irqreturn_t i2c_imx_slave_isr(struct imx_i2c_struct *i2c_imx, > > + unsigned int status, unsigned int ctl) { > > + u8 value; > > + > > + if (status & I2SR_IAL) { /* Arbitration lost */ > > + i2c_imx_clear_irq(i2c_imx, I2SR_IAL); > > + if (!(status & I2SR_IAAS)) > > + return IRQ_HANDLED; > > + } > > + > > + if (status & I2SR_IAAS) { /* Addressed as a slave */ > > + if (status & I2SR_SRW) { /* Master wants to read from us*/ > > + dev_dbg(&i2c_imx->adapter.dev, "read requested"); > > + i2c_slave_event(i2c_imx->slave, I2C_SLAVE_READ_REQUESTED, > &value); > > + > > + /* Slave transmit */ > > + ctl |= I2CR_MTX; > > + imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); > > + > > + /* Send data */ > > + imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR); > > + } else { /* Master wants to write to us */ > > + dev_dbg(&i2c_imx->adapter.dev, "write requested"); > > + i2c_slave_event(i2c_imx->slave, > I2C_SLAVE_WRITE_REQUESTED, &value); > > + > > + /* Slave receive */ > > + ctl &= ~I2CR_MTX; > > + imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); > > + /* Dummy read */ > > + imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); > > + } > > + } else if (!(ctl & I2CR_MTX)) { /* Receive mode */ > > + if (status & I2SR_IBB) { /* No STOP signal detected */ > > + value = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); > > + i2c_slave_event(i2c_imx->slave, I2C_SLAVE_WRITE_RECEIVED, > &value); > > + } else { /* STOP signal is detected */ > > + dev_dbg(&i2c_imx->adapter.dev, > > + "STOP signal detected"); > > + i2c_slave_event(i2c_imx->slave, I2C_SLAVE_STOP, &value); > > + } > > + } else if (!(status & I2SR_RXAK)) { /* Transmit mode received ACK */ > > + ctl |= I2CR_MTX; > > + imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); > > + > > + i2c_slave_event(i2c_imx->slave, I2C_SLAVE_READ_PROCESSED, > &value); > > + > > + imx_i2c_write_reg(value, i2c_imx, IMX_I2C_I2DR); > > + } else { /* Transmit mode received NAK */ > > + ctl &= ~I2CR_MTX; > > + imx_i2c_write_reg(ctl, i2c_imx, IMX_I2C_I2CR); > > + imx_i2c_read_reg(i2c_imx, IMX_I2C_I2DR); > > + } > > + > > + return IRQ_HANDLED; > > +} > > + > > +static void i2c_imx_slave_init(struct imx_i2c_struct *i2c_imx) { > > + int temp; > > + > > + /* Set slave addr. */ > > + imx_i2c_write_reg((i2c_imx->slave->addr << 1), i2c_imx, > > +IMX_I2C_IADR); > > + > > + i2c_imx_reset_regs(i2c_imx); > > + > > + /* Enable module */ > > + temp = i2c_imx->hwdata->i2cr_ien_opcode; > > + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); > > + > > + /* Enable interrupt from i2c module */ > > + temp |= I2CR_IIEN; > > + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR); > > + > > + i2c_imx_enable_bus_idle(i2c_imx); > > +} > > + > > +static int i2c_imx_reg_slave(struct i2c_client *client) { > > + struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); > > + int ret; > > + > > + if (i2c_imx->slave) > > + return -EBUSY; > > + > > + i2c_imx->slave = client; > > + > > + /* Resume */ > > + ret = pm_runtime_get_sync(i2c_imx->adapter.dev.parent); > > + if (ret < 0) { > > + dev_err(&i2c_imx->adapter.dev, "failed to resume i2c controller"); > > + return ret; > > + } > > + > > + i2c_imx_slave_init(i2c_imx); > > + > > + return 0; > > +} > > + > > +static int i2c_imx_unreg_slave(struct i2c_client *client) { > > + struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(client->adapter); > > + int ret; > > + > > + if (!i2c_imx->slave) > > + return -EINVAL; > > + > > + /* Reset slave address. */ > > + imx_i2c_write_reg(0, i2c_imx, IMX_I2C_IADR); > > + > > + i2c_imx_reset_regs(i2c_imx); > > + > > + i2c_imx->slave = NULL; > > + > > + /* Suspend */ > > + ret = pm_runtime_put_sync(i2c_imx->adapter.dev.parent); > > + if (ret < 0) > > + dev_err(&i2c_imx->adapter.dev, "failed to suspend i2c controller"); > > + > > + return ret; > > +} > > + > > +static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx, > > +unsigned int status) { > > + /* save status register */ > > + i2c_imx->i2csr = status; > > + wake_up(&i2c_imx->queue); > > + > > + return IRQ_HANDLED; > > +} > > + > > static irqreturn_t i2c_imx_isr(int irq, void *dev_id) { > > struct imx_i2c_struct *i2c_imx = dev_id; > > - unsigned int temp; > > + unsigned int ctl, status; > > > > - temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); > > - if (temp & I2SR_IIF) { > > - /* save status register */ > > - i2c_imx->i2csr = temp; > > + status = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2SR); > > + ctl = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR); > > + if (status & I2SR_IIF) { > > i2c_imx_clear_irq(i2c_imx, I2SR_IIF); > > - wake_up(&i2c_imx->queue); > > - return IRQ_HANDLED; > > + if (i2c_imx->slave && !(ctl & I2CR_MSTA)) > > + return i2c_imx_slave_isr(i2c_imx, status, ctl); > > + return i2c_imx_master_isr(i2c_imx, status); > > } > > > > return IRQ_NONE; > > @@ -1027,6 +1195,10 @@ static int i2c_imx_xfer_common(struct > i2c_adapter *adapter, > > dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__, > > (result < 0) ? "error" : "success msg", > > (result < 0) ? result : num); > > + /* After data is transferred, switch to slave mode(as a receiver) */ > > + if (i2c_imx->slave) > > + i2c_imx_slave_init(i2c_imx); > > + > > return (result < 0) ? result : num; > > } > > > > @@ -1140,6 +1312,8 @@ static const struct i2c_algorithm i2c_imx_algo = { > > .master_xfer = i2c_imx_xfer, > > .master_xfer_atomic = i2c_imx_xfer_atomic, > > .functionality = i2c_imx_func, > > + .reg_slave = i2c_imx_reg_slave, > > + .unreg_slave = i2c_imx_unreg_slave, > > }; > > > > static int i2c_imx_probe(struct platform_device *pdev) @@ -1233,10 > > +1407,7 @@ static int i2c_imx_probe(struct platform_device *pdev) > > clk_notifier_register(i2c_imx->clk, &i2c_imx->clk_change_nb); > > i2c_imx_set_clk(i2c_imx, clk_get_rate(i2c_imx->clk)); > > > > - /* Set up chip registers to defaults */ > > - imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode ^ I2CR_IEN, > > - i2c_imx, IMX_I2C_I2CR); > > - imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, > IMX_I2C_I2SR); > > + i2c_imx_reset_regs(i2c_imx); > > > > /* Init optional bus recovery function */ > > ret = i2c_imx_init_recovery_info(i2c_imx, pdev); > > -- > > 2.17.1 > > > > > > -- > Pengutronix e.K. | > | > Steuerwalder Str. 21 | http://www.pengutronix.de/ > | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 > | > Amtsgericht Hildesheim, HRA 2686 | Fax: > +49-5121-206917-5555 | _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel