From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AG47ELsCyh3uuuGJeiQ8Yn9fQyklXCSKWZiik4QeMbgpJcqeAy6PpOnOTA3taDjYdXB8NRcZse33 ARC-Seal: i=1; a=rsa-sha256; t=1520957493; cv=none; d=google.com; s=arc-20160816; b=eIkpHTSZx3vm4Uqu81WmYbtRYskWhi7Y2kiGVURr3UwW7O56AfTPiZ3Opct8K65RUV zGNK1Zl1XQmMrxzrMeQqpvDkRJKCqrwDT4+w8b7LhQ+ycgaQDGxXuJIRou+bscKxoRuJ 3oRH0SgFq/TcA9+lxIkiqtGoYjIU+VI9QZoEZjXyxJ5HYS35gJiIkLIH+5oFX41LsVHL uXfR/fnjIPQG13K3OI1YeWUnbiM+tlS1PRZRZvQXIQmgt0NHJferv5p9eqd9brPngmR3 YKOPARrZJOSvaOdgnzQQLh6JgiWAxtRwcASLmhZQp3EcsEdWFn/Ix+o5+yVj64QvT+Oq U5JA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-transfer-encoding:spamdiagnosticmetadata :spamdiagnosticoutput:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=2uhZSKwSXxjf1MmvskbK2tfTSHIrx2aGhDe4b8k2wgM=; b=ZOsQdfcQhvTKlt8IxvYlnF+lG6QEJiJ6Wx/Mrdr2O8BzjXRTlm9UXMV9mJjVT+AAcU 0doxlmP48Nact/LiBshlhnUuQfb8I1GPk+RDtReQN4G+56dvrb4rLuLpanvgMtnVmuW+ B8y0/5WVjXtAA/3KqRUGf7gi1hQ39oBGaPfzChQpuityMvvb3NOlaPox9MITCDlkwr6P q49+mDMvJvOM9HUzurfTTtvlUXi6gmYejD8c/C6ACmDBMLrqxRK6YEubhbCanob2gYq3 G+30z1vQbBNDroZOQeXcOhGesHVNObEyQ39dX59fqh+2cJzLhg8dnWXMi+kAFQTNSNxs /OHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=gE8Uah6P; spf=pass (google.com: domain of nipun.gupta@nxp.com designates 40.107.1.53 as permitted sender) smtp.mailfrom=nipun.gupta@nxp.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=gE8Uah6P; spf=pass (google.com: domain of nipun.gupta@nxp.com designates 40.107.1.53 as permitted sender) smtp.mailfrom=nipun.gupta@nxp.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com From: Nipun Gupta To: Robin Murphy , "hch@lst.de" , "linux@armlinux.org.uk" , "gregkh@linuxfoundation.org" , "m.szyprowski@samsung.com" , "bhelgaas@google.com" CC: "dmitry.torokhov@gmail.com" , "rafael.j.wysocki@intel.com" , "jarkko.sakkinen@linux.intel.com" , "linus.walleij@linaro.org" , "johan@kernel.org" , "msuchanek@suse.de" , "linux-kernel@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "linux-pci@vger.kernel.org" Subject: RE: [PATCH] dma-mapping: move dma configuration to bus infrastructure Thread-Topic: [PATCH] dma-mapping: move dma configuration to bus infrastructure Thread-Index: AQHTuhZRcz681iNeqU+MbBDXy/Xb6aPOCrwAgABJyWA= Date: Tue, 13 Mar 2018 16:11:28 +0000 Message-ID: References: <1520868292-2479-1-git-send-email-nipun.gupta@nxp.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=nipun.gupta@nxp.com; x-originating-ip: [182.68.81.59] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;HE1SPR8PMB319;7:Yi+dy2khQFFxKAFOstOkHyU9YsBNvCrZIh3E8zHMy34C+p0P6RsnDJSOfd+BOt9sGwT9Rppdz42NVQn4k4X9o/oPu/qoZbfdekIFlTB51gLf/8kVVNYz0Dkno7IgHFXIfDdJup2FMyuyNZM6uC1nXvyq1ld+5DOyl77+QmXzTmNvrp4ENAEgSwb/h3+EfibJMNYj7XyXLva5pJaeYG/egy6os5F+GeHPDyH9OQCh8quBd1iHQtt1uTHdXYgHbqao x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 5968f235-a460-4f27-dc34-08d588fd1415 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);SRVR:HE1SPR8PMB319; x-ms-traffictypediagnostic: HE1SPR8PMB319: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(189930954265078)(185117386973197)(45079756050767); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(10201501046)(3231221)(944501244)(52105095)(6055026)(6041310)(20161123560045)(20161123564045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(6072148)(201708071742011);SRVR:HE1SPR8PMB319;BCL:0;PCL:0;RULEID:;SRVR:HE1SPR8PMB319; x-forefront-prvs: 0610D16BBE x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(346002)(396003)(39380400002)(366004)(39860400002)(13464003)(199004)(189003)(39060400002)(3280700002)(59450400001)(316002)(5660300001)(9686003)(54906003)(105586002)(4326008)(6306002)(106356001)(110136005)(7696005)(186003)(2201001)(45080400002)(53936002)(76176011)(2900100001)(3660700001)(86362001)(66066001)(2950100002)(99286004)(97736004)(6116002)(26005)(966005)(102836004)(5250100002)(74316002)(229853002)(33656002)(2501003)(305945005)(3846002)(14454004)(7736002)(6436002)(478600001)(7416002)(8936002)(55016002)(25786009)(6246003)(8676002)(5890100001)(68736007)(81156014)(2906002)(53546011)(81166006)(6506007);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1SPR8PMB319;H:HE1PR0401MB2425.eurprd04.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; x-microsoft-antispam-message-info: RwHdhmtpXdvklJg9JcTA6AS2qeFNXoKnHEfVovpJ6QkcemZOwWKWIwVuVqbLDQ2oWNHgqAKwM8RrdgRUdr5mbBg9Emm+eE6k5c9gxw51Clx4X0bxW4slBKgWUyYqz/BaofjpZTHzXAwsfUHvDps4tkXXcSWNTCOvcO/G9cHpSuH/KrSZcuyAX/aJSXT7xdUuMoljAgOU7aWgDbfbRQw2+8i0Q6s0O4DuyUgu27VtgcQ3hxmNNIkvf93PttN5aoiCjzVgnR6RAZLF5/VJaHLiPCrR55+FuFO6DQO28SoFWmUS30zCuTu0JQQbWrhfTfUv8kdfeuiyoVvpuwAjibAZrA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5968f235-a460-4f27-dc34-08d588fd1415 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Mar 2018 16:11:28.6311 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1SPR8PMB319 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1594746017210545974?= X-GMAIL-MSGID: =?utf-8?q?1594839525373866335?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUm9iaW4gTXVycGh5IFtt YWlsdG86cm9iaW4ubXVycGh5QGFybS5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIE1hcmNoIDEzLCAy MDE4IDE3OjA2DQo+IA0KPiBPbiAxMi8wMy8xOCAxNToyNCwgTmlwdW4gR3VwdGEgd3JvdGU6DQo+ ID4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzICdkbWFfY29uZmlndXJlJyAmICdkbWFfZGVjb25maWd1 cmUnYXMNCj4gPiBidXMgY2FsbGJhY2sgZnVuY3Rpb25zIHNvIGVhY2ggYnVzIGNhbiBjaG9vc2Ug dG8gaW1wbGVtZW50DQo+ID4gaXRzIG93biBkbWEgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4NCj4g PiBUaGlzIGVhc2VzIHRoZSBhZGRpdGlvbiBvZiBuZXcgYnVzc2VzIHcuci50LiBhZGRpbmcgdGhl IGRtYQ0KPiA+IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eS4NCj4gDQo+IEl0J3MgcHJvYmFi bHkgd29ydGggY2xhcmlmeWluZyAtIGVpdGhlciBpbiB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZQ0K PiBrZXJuZWxkb2MsIG9yIGJvdGggLSB0aGF0IHRoZSBidXMtc3BlY2lmaWMgYXNwZWN0IGlzIHRo YXQgb2YgbWFwcGluZw0KPiBiZXR3ZWVuIGEgZ2l2ZW4gZGV2aWNlIG9uIHRoZSBidXMgYW5kIHRo ZSByZWxldmFudCBmaXJtd2FyZSBkZXNjcmlwdGlvbg0KPiBvZiBpdHMgRE1BIGNvbmZpZ3VyYXRp b24uDQoNCk9rYXkuDQoNCj4NCj4gPiBUaGUgY2hhbmdlIGFsc28gdXBkYXRlcyB0aGUgUENJLCBQ bGF0Zm9ybSBhbmQgQUNQSSBidXMgdG8gdXNlDQo+ID4gbmV3IGludHJvZHVjZWQgY2FsbGJhY2tz Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmlwdW4gR3VwdGEgPG5pcHVuLmd1cHRhQG54cC5j b20+DQo+ID4gLS0tDQo+ID4gICAtIFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gdGhlIGNvbW1lbnRz IG9uOg0KPiA+DQo+IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2su Y29tLz91cmw9aHR0cHMlM0ElMkYlMkZwYXRjaHdvDQo+IHJrLmtlcm5lbC5vcmclMkZwYXRjaCUy RjEwMjU5MDg3JTJGJmRhdGE9MDIlN0MwMSU3Q25pcHVuLmd1cHRhJTQwbnhwLmNvbSU3DQo+IENj NTQxMTAwZWNiOTQ0ZTc2NTBhNDA4ZDU4OGQ2OWFiMCU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5 YzVjMzAxNjM1JTdDMCU3DQo+IEMwJTdDNjM2NTY1Mzc3NjY1Njc2NjMxJnNkYXRhPWsyWGpuNUIx R0VDeDRVakNnOXRDaE9wT3JEM05QTTdCa3pJWExMU3YzckklDQo+IDNEJnJlc2VydmVkPTANCj4g PiAgIC0gSSBoYXZlIHZhbGlkYXRlZCBmb3IgUENJIGFuZCBwbGF0Zm9ybSwgYnV0IG5vdCBmb3Ig QU1CQSBhcyBJDQo+ID4gICAgIGRvIG5vdCBoYXZlIGluZnJhc3RydWN0dXJlIHRvIHZhbGlkYXRl IGl0Lg0KPiA+ICAgICBDYW4gYW55b25lIHBsZWFzZSB2YWxpZGF0ZSB0aGVtIG9uIEFNQkE/DQo+ ID4NCj4gPiAgIGRyaXZlcnMvYW1iYS9idXMuYyAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tDQo+ID4gICBkcml2ZXJzL2Jhc2UvZGQuYyAgICAgICAgICAgfCAxNCAr KysrKysrLS0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlL2RtYS1tYXBwaW5nLmMgIHwgNDEgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMg ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4gICBkcml2ZXJzL3BjaS9w Y2ktZHJpdmVyLmMgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst DQo+IC0tLS0tLS0tDQo+ID4gICBpbmNsdWRlL2xpbnV4L2RldmljZS5oICAgICAgfCAgNiArKysr Kw0KPiA+ICAgaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIHwgMTIgLS0tLS0tLS0tDQo+ID4g ICA3IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCA4MiBkZWxldGlvbnMoLSkNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVz LmMNCj4gPiBpbmRleCA1OTRjMjI4Li41ODI0MWQyIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv YW1iYS9idXMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvYW1iYS9idXMuYw0KPiA+IEBAIC0yMCw2ICsy MCw4IEBADQo+ID4gICAjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4NCj4gPiAgICNpbmNsdWRlIDxs aW51eC9saW1pdHMuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9jbGsvY2xrLWNvbmYuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPg0KPiA+DQo+ID4gICAjaW5jbHVkZSA8YXNtL2lycS5oPg0KPiA+DQo+ID4gQEAgLTE3MSw2 ICsxNzMsMjggQEAgc3RhdGljIGludCBhbWJhX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZp Y2UNCj4gKmRldikNCj4gPiAgIH0NCj4gPiAgICNlbmRpZiAvKiBDT05GSUdfUE0gKi8NCj4gPg0K PiA+ICtpbnQgYW1iYV9kbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0K PiA+ICsJZW51bSBkZXZfZG1hX2F0dHIgYXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsN Cj4gPiArCWlmIChkZXYtPm9mX25vZGUpIHsNCj4gPiArCQlyZXQgPSBvZl9kbWFfY29uZmlndXJl KGRldiwgZGV2LT5vZl9ub2RlKTsNCj4gPiArCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9u KGRldikpIHsNCj4gPiArCQlhdHRyID0gYWNwaV9nZXRfZG1hX2F0dHIodG9fYWNwaV9kZXZpY2Vf bm9kZShkZXYtPmZ3bm9kZSkpOw0KPiA+ICsJCWlmIChhdHRyICE9IERFVl9ETUFfTk9UX1NVUFBP UlRFRCkNCj4gPiArCQkJcmV0ID0gYWNwaV9kbWFfY29uZmlndXJlKGRldiwgYXR0cik7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiANCj4gSSB3b3VsZCBiZSBp bmNsaW5lZCB0byBoYXZlIGFtYmFfYnVzdHlwZSBqdXN0IHJlZmVyZW5jZQ0KPiBwbGF0Zm9ybV9k bWFfY29uZmlndXJlKCkgZGlyZWN0bHkgcmF0aGVyIHRoYW4gZHVwbGljYXRlIGl0IGxpa2UgdGhp cywNCj4gc2luY2UgdGhlcmUncyBubyBzZW5zaWJsZSByZWFzb24gZm9yIHRoZW0gdG8gZXZlciBk aWZmZXIuDQoNCkkgdGhpbmsgZG1hX2NvbW1vbl9jb25maWd1cmUoKSBoYXZpbmcgdGhpcyBhcyB0 aGUgY29tbW9uIGNvZGUgc2VlbXMgcHJldHR5DQpEZWNlbnQuIEFsbCB0aGUgYnVzc2VzIHdpbGwg cHJvYmFibHkgY2FsbCB0aGlzIEFQSS4NCg0KPiANCj4gPiArDQo+ID4gK3ZvaWQgYW1iYV9kbWFf ZGVjb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlvZl9kbWFfZGVj b25maWd1cmUoZGV2KTsNCj4gPiArCWFjcGlfZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gK30N Cj4gPiArDQo+ID4gICBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYW1iYV9wbSA9IHsN Cj4gPiAgIAkuc3VzcGVuZAk9IHBtX2dlbmVyaWNfc3VzcGVuZCwNCj4gPiAgIAkucmVzdW1lCQk9 IHBtX2dlbmVyaWNfcmVzdW1lLA0KPiA+IEBAIC0xOTAsMTIgKzIxNCwxNCBAQCBzdGF0aWMgaW50 IGFtYmFfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZQ0KPiAqZGV2KQ0KPiA+ICAgICog c28gd2UgY2FsbCB0aGUgYnVzICJhbWJhIi4NCj4gPiAgICAqLw0KPiA+ICAgc3RydWN0IGJ1c190 eXBlIGFtYmFfYnVzdHlwZSA9IHsNCj4gPiAtCS5uYW1lCQk9ICJhbWJhIiwNCj4gPiAtCS5kZXZf Z3JvdXBzCT0gYW1iYV9kZXZfZ3JvdXBzLA0KPiA+IC0JLm1hdGNoCQk9IGFtYmFfbWF0Y2gsDQo+ ID4gLQkudWV2ZW50CQk9IGFtYmFfdWV2ZW50LA0KPiA+IC0JLnBtCQk9ICZhbWJhX3BtLA0KPiA+ IC0JLmZvcmNlX2RtYQk9IHRydWUsDQo+ID4gKwkubmFtZQkJCT0gImFtYmEiLA0KPiA+ICsJLmRl dl9ncm91cHMJCT0gYW1iYV9kZXZfZ3JvdXBzLA0KPiA+ICsJLm1hdGNoCQkJPSBhbWJhX21hdGNo LA0KPiA+ICsJLnVldmVudAkJCT0gYW1iYV91ZXZlbnQsDQo+ID4gKwkucG0JCQk9ICZhbWJhX3Bt LA0KPiA+ICsJLmRtYV9jb25maWd1cmUJCT0gYW1iYV9kbWFfY29uZmlndXJlLA0KPiA+ICsJLmRt YV9kZWNvbmZpZ3VyZQk9IGFtYmFfZG1hX2RlY29uZmlndXJlLA0KPiA+ICsJLmZvcmNlX2RtYQkJ PSB0cnVlLA0KPiANCj4gVGhpcyBwYXRjaCBzaG91bGQgYWxzbyBiZSByZW1vdmluZyBmb3JjZV9k bWEgYmVjYXVzZSBpdCBubyBsb25nZXIgbWFrZXMNCj4gc2Vuc2UuIElmIERNQSBjb25maWd1cmF0 aW9uIGlzIG5vdyBkb25lIGJ5IGEgYnVzLWxldmVsIGNhbGxiYWNrLCB0aGVuIGENCj4gYnVzIHdo aWNoIHdhbnRzIGl0cyBjaGlsZHJlbiB0byBnZXQgRE1BIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8g aW1wbGVtZW50DQo+IHRoYXQgY2FsbGJhY2s7IHRoZXJlJ3Mgbm93aGVyZSB0byBmb3JjZSBhICJk ZWZhdWx0IiBnbG9iYWwgYmVoYXZpb3VyIGFueQ0KPiBtb3JlLg0KDQpBZ3JlZS4gV2Ugd2lsbCBh bHNvIG5lZWQgdG8gcGFzcyBhIGZvcmNlX2RtYSBmbGFnIGluIG9mX2RtYV9jb25maWd1cmUoKSBh cw0KQ2hyaXN0b3BoIHN1Z2dlc3RzLiBJbGwgdXBkYXRlIHRoaXMuDQoNCj4gDQo+ID4gICB9Ow0K PiA+DQo+ID4gICBzdGF0aWMgaW50IF9faW5pdCBhbWJhX2luaXQodm9pZCkNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYw0KPiA+IGluZGV4IGRl NmZkMDkuLmYxMjRmM2YgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMNCj4gPiAr KysgYi9kcml2ZXJzL2Jhc2UvZGQuYw0KPiA+IEBAIC00MjEsOSArNDIxLDExIEBAIHN0YXRpYyBp bnQgcmVhbGx5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0DQo+IGRldmljZV9kcml2 ZXIgKmRydikNCj4gPiAgIAlpZiAocmV0KQ0KPiA+ICAgCQlnb3RvIHBpbmN0cmxfYmluZF9mYWls ZWQ7DQo+ID4NCj4gPiAtCXJldCA9IGRtYV9jb25maWd1cmUoZGV2KTsNCj4gPiAtCWlmIChyZXQp DQo+ID4gLQkJZ290byBkbWFfZmFpbGVkOw0KPiA+ICsJaWYgKGRldi0+YnVzLT5kbWFfY29uZmln dXJlKSB7DQo+ID4gKwkJcmV0ID0gZGV2LT5idXMtPmRtYV9jb25maWd1cmUoZGV2KTsNCj4gPiAr CQlpZiAocmV0KQ0KPiA+ICsJCQlnb3RvIGRtYV9mYWlsZWQ7DQo+ID4gKwl9DQo+ID4NCj4gPiAg IAlpZiAoZHJpdmVyX3N5c2ZzX2FkZChkZXYpKSB7DQo+ID4gICAJCXByaW50ayhLRVJOX0VSUiAi JXM6IGRyaXZlcl9zeXNmc19hZGQoJXMpIGZhaWxlZFxuIiwNCj4gPiBAQCAtNDg2LDcgKzQ4OCw4 IEBAIHN0YXRpYyBpbnQgcmVhbGx5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0DQo+ IGRldmljZV9kcml2ZXIgKmRydikNCj4gPiAgIAlnb3RvIGRvbmU7DQo+ID4NCj4gPiAgIHByb2Jl X2ZhaWxlZDoNCj4gPiAtCWRtYV9kZWNvbmZpZ3VyZShkZXYpOw0KPiA+ICsJaWYgKGRldi0+YnVz LT5kbWFfZGVjb25maWd1cmUpDQo+ID4gKwkJZGV2LT5idXMtPmRtYV9kZWNvbmZpZ3VyZShkZXYp Ow0KPiA+ICAgZG1hX2ZhaWxlZDoNCj4gPiAgIAlpZiAoZGV2LT5idXMpDQo+ID4gICAJCWJsb2Nr aW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsDQo+ID4g QEAgLTg5NSw3ICs4OTgsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmljZV9yZWxlYXNlX2RyaXZlcihz dHJ1Y3QgZGV2aWNlDQo+ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkNCj4gPiAgIAkJCWRy di0+cmVtb3ZlKGRldik7DQo+ID4NCj4gPiAgIAkJZGV2aWNlX2xpbmtzX2RyaXZlcl9jbGVhbnVw KGRldik7DQo+ID4gLQkJZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gKwkJaWYgKGRldi0+YnVz LT5kbWFfZGVjb25maWd1cmUpDQo+ID4gKwkJCWRldi0+YnVzLT5kbWFfZGVjb25maWd1cmUoZGV2 KTsNCj4gPg0KPiA+ICAgCQlkZXZyZXNfcmVsZWFzZV9hbGwoZGV2KTsNCj4gPiAgIAkJZGV2LT5k cml2ZXIgPSBOVUxMOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcu YyBiL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jDQo+ID4gaW5kZXggM2IxMTgzNS4uZjE2YmQ0 OSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcuYw0KPiA+ICsrKyBi L2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jDQo+ID4gQEAgLTYsMTEgKzYsOSBAQA0KPiA+ICAg ICogQ29weXJpZ2h0IChjKSAyMDA2ICBUZWp1biBIZW8gPHRlaGVvQHN1c2UuZGU+DQo+ID4gICAg Ki8NCj4gPg0KPiA+IC0jaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiA+ICAgI2luY2x1ZGUgPGxp bnV4L2RtYS1tYXBwaW5nLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+DQo+ID4g ICAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+DQo+ID4gLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgv dm1hbGxvYy5oPg0KPiA+DQo+ID4gQEAgLTMyOSw0MiArMzI3LDMgQEAgdm9pZCBkbWFfY29tbW9u X2ZyZWVfcmVtYXAodm9pZCAqY3B1X2FkZHIsIHNpemVfdA0KPiBzaXplLCB1bnNpZ25lZCBsb25n IHZtX2ZsYWdzKQ0KPiA+ICAgCXZ1bm1hcChjcHVfYWRkcik7DQo+ID4gICB9DQo+ID4gICAjZW5k aWYNCj4gPiAtDQo+ID4gLS8qDQo+ID4gLSAqIENvbW1vbiBjb25maWd1cmF0aW9uIHRvIGVuYWJs ZSBETUEgQVBJIHVzZSBmb3IgYSBkZXZpY2UNCj4gPiAtICovDQo+ID4gLSNpbmNsdWRlIDxsaW51 eC9wY2kuaD4NCj4gPiAtDQo+ID4gLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRl dikNCj4gPiAtew0KPiA+IC0Jc3RydWN0IGRldmljZSAqYnJpZGdlID0gTlVMTCwgKmRtYV9kZXYg PSBkZXY7DQo+ID4gLQllbnVtIGRldl9kbWFfYXR0ciBhdHRyOw0KPiA+IC0JaW50IHJldCA9IDA7 DQo+ID4gLQ0KPiA+IC0JaWYgKGRldl9pc19wY2koZGV2KSkgew0KPiA+IC0JCWJyaWRnZSA9IHBj aV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7DQo+ID4gLQkJZG1hX2Rl diA9IGJyaWRnZTsNCj4gPiAtCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmIGRtYV9kZXYt PnBhcmVudCAmJg0KPiA+IC0JCSAgICBkbWFfZGV2LT5wYXJlbnQtPm9mX25vZGUpDQo+ID4gLQkJ CWRtYV9kZXYgPSBkbWFfZGV2LT5wYXJlbnQ7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGRt YV9kZXYtPm9mX25vZGUpIHsNCj4gPiAtCQlyZXQgPSBvZl9kbWFfY29uZmlndXJlKGRldiwgZG1h X2Rldi0+b2Zfbm9kZSk7DQo+ID4gLQl9IGVsc2UgaWYgKGhhc19hY3BpX2NvbXBhbmlvbihkbWFf ZGV2KSkgew0KPiA+IC0JCWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0cih0b19hY3BpX2RldmljZV9u b2RlKGRtYV9kZXYtPmZ3bm9kZSkpOw0KPiA+IC0JCWlmIChhdHRyICE9IERFVl9ETUFfTk9UX1NV UFBPUlRFRCkNCj4gPiAtCQkJcmV0ID0gYWNwaV9kbWFfY29uZmlndXJlKGRldiwgYXR0cik7DQo+ ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGJyaWRnZSkNCj4gPiAtCQlwY2lfcHV0X2hvc3RfYnJp ZGdlX2RldmljZShicmlkZ2UpOw0KPiA+IC0NCj4gPiAtCXJldHVybiByZXQ7DQo+ID4gLX0NCj4g PiAtDQo+ID4gLXZvaWQgZG1hX2RlY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiAt ew0KPiA+IC0Jb2ZfZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gLQlhY3BpX2RtYV9kZWNvbmZp Z3VyZShkZXYpOw0KPiA+IC19DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9y bS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMNCj4gPiBpbmRleCBmMWJmN2IzLi5hZGY5NGVi IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jDQo+ID4gKysrIGIvZHJp dmVycy9iYXNlL3BsYXRmb3JtLmMNCj4gPiBAQCAtMTEzMCw2ICsxMTMwLDI4IEBAIGludCBwbGF0 Zm9ybV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPg0KPiA+ICAgI2VuZGlmIC8q IENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovDQo+ID4NCj4gPiAraW50IHBsYXRmb3JtX2Rt YV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwllbnVtIGRldl9k bWFfYXR0ciBhdHRyOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKGRldi0+ b2Zfbm9kZSkgew0KPiA+ICsJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBkZXYtPm9mX25v ZGUpOw0KPiA+ICsJfSBlbHNlIGlmIChoYXNfYWNwaV9jb21wYW5pb24oZGV2KSkgew0KPiA+ICsJ CWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0cih0b19hY3BpX2RldmljZV9ub2RlKGRldi0+Zndub2Rl KSk7DQo+ID4gKwkJaWYgKGF0dHIgIT0gREVWX0RNQV9OT1RfU1VQUE9SVEVEKQ0KPiA+ICsJCQly ZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHBsYXRmb3JtX2RtYV9kZWNv bmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCW9mX2RtYV9kZWNvbmZp Z3VyZShkZXYpOw0KPiA+ICsJYWNwaV9kbWFfZGVjb25maWd1cmUoZGV2KTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwbGF0Zm9ybV9kZXZfcG1f b3BzID0gew0KPiA+ICAgCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3Vz cGVuZCwNCj4gPiAgIAkucnVudGltZV9yZXN1bWUgPSBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1l LA0KPiA+IEBAIC0xMTM3LDEyICsxMTU5LDE0IEBAIGludCBwbGF0Zm9ybV9wbV9yZXN0b3JlKHN0 cnVjdCBkZXZpY2UgKmRldikNCj4gPiAgIH07DQo+ID4NCj4gPiAgIHN0cnVjdCBidXNfdHlwZSBw bGF0Zm9ybV9idXNfdHlwZSA9IHsNCj4gPiAtCS5uYW1lCQk9ICJwbGF0Zm9ybSIsDQo+ID4gLQku ZGV2X2dyb3Vwcwk9IHBsYXRmb3JtX2Rldl9ncm91cHMsDQo+ID4gLQkubWF0Y2gJCT0gcGxhdGZv cm1fbWF0Y2gsDQo+ID4gLQkudWV2ZW50CQk9IHBsYXRmb3JtX3VldmVudCwNCj4gPiAtCS5wbQkJ PSAmcGxhdGZvcm1fZGV2X3BtX29wcywNCj4gPiAtCS5mb3JjZV9kbWEJPSB0cnVlLA0KPiA+ICsJ Lm5hbWUJCQk9ICJwbGF0Zm9ybSIsDQo+ID4gKwkuZGV2X2dyb3VwcwkJPSBwbGF0Zm9ybV9kZXZf Z3JvdXBzLA0KPiA+ICsJLm1hdGNoCQkJPSBwbGF0Zm9ybV9tYXRjaCwNCj4gPiArCS51ZXZlbnQJ CQk9IHBsYXRmb3JtX3VldmVudCwNCj4gPiArCS5wbQkJCT0gJnBsYXRmb3JtX2Rldl9wbV9vcHMs DQo+ID4gKwkuZG1hX2NvbmZpZ3VyZQkJPSBwbGF0Zm9ybV9kbWFfY29uZmlndXJlLA0KPiA+ICsJ LmRtYV9kZWNvbmZpZ3VyZQk9IHBsYXRmb3JtX2RtYV9kZWNvbmZpZ3VyZSwNCj4gPiArCS5mb3Jj ZV9kbWEJCT0gdHJ1ZSwNCj4gPiAgIH07DQo+ID4gICBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9y bV9idXNfdHlwZSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZl ci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jDQo+ID4gaW5kZXggM2JlZDZiZS4uNGE3Nzgx NCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMNCj4gPiArKysgYi9k cml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMNCj4gPiBAQCAtMTgsNiArMTgsOCBAQA0KPiA+ICAgI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zdXNwZW5k Lmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2FjcGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICAgI2luY2x1 ZGUgInBjaS5oIg0KPiA+DQo+ID4gICBzdHJ1Y3QgcGNpX2R5bmlkIHsNCj4gPiBAQCAtMTUyMiwx OSArMTUyNCw1MiBAQCBzdGF0aWMgaW50IHBjaV9idXNfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRl dikNCj4gPiAgIAlyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpOw0KPiA+ICAgfQ0K PiA+DQo+ID4gK2ludCBwY2lfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmJyaWRnZSwgKmRtYV9kZXY7DQo+IA0KPiBZb3UgZG9u J3QgbmVlZCBkbWFfZGV2IGhlcmU7IHNlZSB0aGUgY29kZSByZW1vdmVkIGluIDA5NTE1ZWY1ZGRh ZCBmb3INCj4gaG93IHRoZSBsb2dpYyBvcmlnaW5hbGx5IHdvcmtlZC4NCg0KT2theS4gSSB3aWxs IGhhdmUgYSBsb29rIGluIHRoaXMgY29tbWl0IGlkLg0KDQo+IA0KPiA+ICsJZW51bSBkZXZfZG1h X2F0dHIgYXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWJyaWRnZSA9IHBj aV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7DQo+ID4gKwlkbWFfZGV2 ID0gYnJpZGdlOw0KPiA+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkbWFfZGV2LT5w YXJlbnQgJiYNCj4gPiArCSAgICBkbWFfZGV2LT5wYXJlbnQtPm9mX25vZGUpDQo+ID4gKwkJZG1h X2RldiA9IGRtYV9kZXYtPnBhcmVudDsNCj4gPiArDQo+ID4gKwlpZiAoZG1hX2Rldi0+b2Zfbm9k ZSkgew0KPiA+ICsJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBkbWFfZGV2LT5vZl9ub2Rl KTsNCj4gPiArCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9uKGRtYV9kZXYpKSB7DQo+ID4g KwkJYXR0ciA9IGFjcGlfZ2V0X2RtYV9hdHRyKHRvX2FjcGlfZGV2aWNlX25vZGUoZG1hX2Rldi0+ Zndub2RlKSk7DQo+ID4gKwkJaWYgKGF0dHIgIT0gREVWX0RNQV9OT1RfU1VQUE9SVEVEKQ0KPiA+ ICsJCQlyZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlwY2lfcHV0X2hvc3RfYnJpZGdlX2RldmljZShicmlkZ2UpOw0KPiA+ICsNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcGNpX2RtYV9kZWNvbmZpZ3Vy ZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCW9mX2RtYV9kZWNvbmZpZ3VyZShk ZXYpOw0KPiA+ICsJYWNwaV9kbWFfZGVjb25maWd1cmUoZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4g PiAgIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7DQo+ID4gLQkubmFtZQkJPSAicGNp IiwNCj4gPiAtCS5tYXRjaAkJPSBwY2lfYnVzX21hdGNoLA0KPiA+IC0JLnVldmVudAkJPSBwY2lf dWV2ZW50LA0KPiA+IC0JLnByb2JlCQk9IHBjaV9kZXZpY2VfcHJvYmUsDQo+ID4gLQkucmVtb3Zl CQk9IHBjaV9kZXZpY2VfcmVtb3ZlLA0KPiA+IC0JLnNodXRkb3duCT0gcGNpX2RldmljZV9zaHV0 ZG93biwNCj4gPiAtCS5kZXZfZ3JvdXBzCT0gcGNpX2Rldl9ncm91cHMsDQo+ID4gLQkuYnVzX2dy b3Vwcwk9IHBjaV9idXNfZ3JvdXBzLA0KPiA+IC0JLmRydl9ncm91cHMJPSBwY2lfZHJ2X2dyb3Vw cywNCj4gPiAtCS5wbQkJPSBQQ0lfUE1fT1BTX1BUUiwNCj4gPiAtCS5udW1fdmYJCT0gcGNpX2J1 c19udW1fdmYsDQo+ID4gLQkuZm9yY2VfZG1hCT0gdHJ1ZSwNCj4gPiArCS5uYW1lCQkJPSAicGNp IiwNCj4gPiArCS5tYXRjaAkJCT0gcGNpX2J1c19tYXRjaCwNCj4gPiArCS51ZXZlbnQJCQk9IHBj aV91ZXZlbnQsDQo+ID4gKwkucHJvYmUJCQk9IHBjaV9kZXZpY2VfcHJvYmUsDQo+ID4gKwkucmVt b3ZlCQkJPSBwY2lfZGV2aWNlX3JlbW92ZSwNCj4gPiArCS5zaHV0ZG93bgkJPSBwY2lfZGV2aWNl X3NodXRkb3duLA0KPiA+ICsJLmRldl9ncm91cHMJCT0gcGNpX2Rldl9ncm91cHMsDQo+ID4gKwku YnVzX2dyb3VwcwkJPSBwY2lfYnVzX2dyb3VwcywNCj4gPiArCS5kcnZfZ3JvdXBzCQk9IHBjaV9k cnZfZ3JvdXBzLA0KPiA+ICsJLnBtCQkJPSBQQ0lfUE1fT1BTX1BUUiwNCj4gPiArCS5udW1fdmYJ CQk9IHBjaV9idXNfbnVtX3ZmLA0KPiA+ICsJLmRtYV9jb25maWd1cmUJCT0gcGNpX2RtYV9jb25m aWd1cmUsDQo+ID4gKwkuZG1hX2RlY29uZmlndXJlCT0gcGNpX2RtYV9kZWNvbmZpZ3VyZSwNCj4g PiArCS5mb3JjZV9kbWEJCT0gdHJ1ZSwNCj4gPiAgIH07DQo+ID4gICBFWFBPUlRfU1lNQk9MKHBj aV9idXNfdHlwZSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2Uu aCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgNCj4gPiBpbmRleCBiMDkzNDA1Li45YjJkY2Y2IDEw MDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgNCj4gPiArKysgYi9pbmNsdWRl L2xpbnV4L2RldmljZS5oDQo+ID4gQEAgLTg4LDYgKzg4LDkgQEAgZXh0ZXJuIGludCBfX211c3Rf Y2hlY2sgYnVzX2NyZWF0ZV9maWxlKHN0cnVjdA0KPiBidXNfdHlwZSAqLA0KPiA+ICAgICogQHJl c3VtZToJQ2FsbGVkIHRvIGJyaW5nIGEgZGV2aWNlIG9uIHRoaXMgYnVzIG91dCBvZiBzbGVlcCBt b2RlLg0KPiA+ICAgICogQG51bV92ZjoJQ2FsbGVkIHRvIGZpbmQgb3V0IGhvdyBtYW55IHZpcnR1 YWwgZnVuY3Rpb25zIGEgZGV2aWNlIG9uDQo+IHRoaXMNCj4gPiAgICAqCQlidXMgc3VwcG9ydHMu DQo+ID4gKyAqIEBkbWFfY29uZmlndXJlOglDYWxsZWQgdG8gc2V0dXAgRE1BIGNvbmZpZ3VyYXRp b24gb24gYSBkZXZpY2Ugb24NCj4gPiArCQkJdGhpcyBidXMuDQo+ID4gKyAqIEBkbWFfZGVjb25m aWd1cmU6CUNhbGxlZCB0byB0ZWFyIGRvd24gdGhlIERNQSBjb25maWd1cmF0aW9uLg0KPiA+ICAg ICogQHBtOgkJUG93ZXIgbWFuYWdlbWVudCBvcGVyYXRpb25zIG9mIHRoaXMgYnVzLCBjYWxsYmFj aw0KPiB0aGUgc3BlY2lmaWMNCj4gPiAgICAqCQlkZXZpY2UgZHJpdmVyJ3MgcG0tb3BzLg0KPiA+ ICAgICogQGlvbW11X29wczogIElPTU1VIHNwZWNpZmljIG9wZXJhdGlvbnMgZm9yIHRoaXMgYnVz LCB1c2VkIHRvIGF0dGFjaA0KPiBJT01NVQ0KPiA+IEBAIC0xMzAsNiArMTMzLDkgQEAgc3RydWN0 IGJ1c190eXBlIHsNCj4gPg0KPiA+ICAgCWludCAoKm51bV92Zikoc3RydWN0IGRldmljZSAqZGV2 KTsNCj4gPg0KPiA+ICsJaW50ICgqZG1hX2NvbmZpZ3VyZSkoc3RydWN0IGRldmljZSAqZGV2KTsN Cj4gPiArCXZvaWQgKCpkbWFfZGVjb25maWd1cmUpKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+IA0K PiBTZWVpbmcgaXQgbGFpZCBvdXQgaW4gdGhlIHBhdGNoLCBJIHJlYWxseSBkb24ndCB0aGluayB3 ZSBuZWVkIGENCj4gZGVjb25maWd1cmUgY2FsbGJhY2sgbGlrZSB0aGlzIC0gdGhlIGZhY3QgdGhh dCB3ZSdyZSBqdXN0IGNvcHktcGFzdGluZw0KPiB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24g ZXZlcnl3aGVyZSBpcyBhIGJpZyBoaW50LCBidXQgbW9yZQ0KPiBjb25jZXB0dWFsbHkgSSBjYW4n dCBzZWUgYSBnb29kIHJlYXNvbiBmb3IgaXQgdG8gZXZlciBuZWVkIGJ1cy1zcGVjaWZpYw0KPiBi ZWhhdmlvdXIgaW4gdGhlIHNhbWUgd2F5IHRoYXQgY29uZmlndXJlIGRvZXMuDQo+IA0KPiBNYXli ZSB0aGF0IG1lYW5zIHdlIGtlZXAgZG1hX2NvbmZpZ3VyZSgpIGFyb3VuZCBmb3IgdGhlIHNha2Ug b2YNCj4gc3ltbWV0cnksIGJ1dCBqdXN0IHJlZHVjZSBpdCB0bzoNCj4gDQo+IGludCBkbWFfY29u ZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gew0KPiAJaWYgKGRldi0+YnVzLT5kbWFfY29u ZmlndXJlKQ0KPiAJCXJldHVybiBkZXYtPmJ1cy0+ZG1hX2NvbmZpZ3VyZShkZXYpOw0KPiAJcmV0 dXJuIDA7DQo+IH0NCj4gDQo+IFJlYWxpc3RpY2FsbHkgdGhvdWdoLCBkbWFfZGVjb25maWd1cmUo KSBvbmx5IGV4aXN0cyBmb3IgdGhlIHNha2Ugb2YNCj4gY2FsbGluZyBhcmNoX3RlYXJkb3duX2Rt YV9vcHMoKSwgYW5kIHRoYXQgb25seSByZWFsbHkgZXhpc3RzIGZvciB0aGUNCj4gc2FrZSBvZiB0 aGUgb2xkIEFSTSBJT01NVSBjb2RlLCBzbyBJJ20gbm90IGluY2xpbmVkIHRvIHByZXRlbmQgaXQn cw0KPiBhbnl3aGVyZSBuZWFyIGFzIGltcG9ydGFudCBhcyB0aGUgZG1hX2NvbmZpZ3VyZSgpIHBh dGggaW4gZGVzaWduIHRlcm1zLg0KDQpZZXMsIEkgd2lsbCByZW1vdmUgZG1hX2RlY29uZmlndXJl IGNhbGxiYWNrLg0KDQpUaGFua3MsDQpOaXB1bg0KDQo+IA0KPiBSb2Jpbi4NCj4gDQo+ID4gKw0K PiA+ICAgCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsNCj4gPg0KPiA+ICAgCWNvbnN0IHN0 cnVjdCBpb21tdV9vcHMgKmlvbW11X29wczsNCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oDQo+ID4gaW5kZXgg ZWI5ZWFiNC4uMDM5MjI0YiAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBw aW5nLmgNCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgNCj4gPiBAQCAtNzYx LDE4ICs3NjEsNiBAQCB2b2lkICpkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3Ry dWN0DQo+IGRldmljZSAqZGV2LA0KPiA+ICAgfQ0KPiA+ICAgI2VuZGlmIC8qIENPTkZJR19IQVZF X0dFTkVSSUNfRE1BX0NPSEVSRU5UICovDQo+ID4NCj4gPiAtI2lmZGVmIENPTkZJR19IQVNfRE1B DQo+ID4gLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gLXZvaWQg ZG1hX2RlY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gLSNlbHNlDQo+ID4gLXN0 YXRpYyBpbmxpbmUgaW50IGRtYV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+IC17 DQo+ID4gLQlyZXR1cm4gMDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIGlubGluZSB2b2lk IGRtYV9kZWNvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9DQo+ID4gLSNlbmRpZg0KPiA+ IC0NCj4gPiAgIC8qDQo+ID4gICAgKiBNYW5hZ2VkIERNQSBBUEkNCj4gPiAgICAqLw0KPiA+DQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-eopbgr10054.outbound.protection.outlook.com ([40.107.1.54]:43712 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932869AbeCMQLd (ORCPT ); Tue, 13 Mar 2018 12:11:33 -0400 From: Nipun Gupta To: Robin Murphy , "hch@lst.de" , "linux@armlinux.org.uk" , "gregkh@linuxfoundation.org" , "m.szyprowski@samsung.com" , "bhelgaas@google.com" CC: "dmitry.torokhov@gmail.com" , "rafael.j.wysocki@intel.com" , "jarkko.sakkinen@linux.intel.com" , "linus.walleij@linaro.org" , "johan@kernel.org" , "msuchanek@suse.de" , "linux-kernel@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "linux-pci@vger.kernel.org" Subject: RE: [PATCH] dma-mapping: move dma configuration to bus infrastructure Date: Tue, 13 Mar 2018 16:11:28 +0000 Message-ID: References: <1520868292-2479-1-git-send-email-nipun.gupta@nxp.com> In-Reply-To: Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org List-ID: DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUm9iaW4gTXVycGh5IFtt YWlsdG86cm9iaW4ubXVycGh5QGFybS5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIE1hcmNoIDEzLCAy MDE4IDE3OjA2DQo+IA0KPiBPbiAxMi8wMy8xOCAxNToyNCwgTmlwdW4gR3VwdGEgd3JvdGU6DQo+ ID4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzICdkbWFfY29uZmlndXJlJyAmICdkbWFfZGVjb25maWd1 cmUnYXMNCj4gPiBidXMgY2FsbGJhY2sgZnVuY3Rpb25zIHNvIGVhY2ggYnVzIGNhbiBjaG9vc2Ug dG8gaW1wbGVtZW50DQo+ID4gaXRzIG93biBkbWEgY29uZmlndXJhdGlvbiBmdW5jdGlvbi4NCj4g PiBUaGlzIGVhc2VzIHRoZSBhZGRpdGlvbiBvZiBuZXcgYnVzc2VzIHcuci50LiBhZGRpbmcgdGhl IGRtYQ0KPiA+IGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eS4NCj4gDQo+IEl0J3MgcHJvYmFi bHkgd29ydGggY2xhcmlmeWluZyAtIGVpdGhlciBpbiB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZQ0K PiBrZXJuZWxkb2MsIG9yIGJvdGggLSB0aGF0IHRoZSBidXMtc3BlY2lmaWMgYXNwZWN0IGlzIHRo YXQgb2YgbWFwcGluZw0KPiBiZXR3ZWVuIGEgZ2l2ZW4gZGV2aWNlIG9uIHRoZSBidXMgYW5kIHRo ZSByZWxldmFudCBmaXJtd2FyZSBkZXNjcmlwdGlvbg0KPiBvZiBpdHMgRE1BIGNvbmZpZ3VyYXRp b24uDQoNCk9rYXkuDQoNCj4NCj4gPiBUaGUgY2hhbmdlIGFsc28gdXBkYXRlcyB0aGUgUENJLCBQ bGF0Zm9ybSBhbmQgQUNQSSBidXMgdG8gdXNlDQo+ID4gbmV3IGludHJvZHVjZWQgY2FsbGJhY2tz Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmlwdW4gR3VwdGEgPG5pcHVuLmd1cHRhQG54cC5j b20+DQo+ID4gLS0tDQo+ID4gICAtIFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gdGhlIGNvbW1lbnRz IG9uOg0KPiA+DQo+IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2su Y29tLz91cmw9aHR0cHMlM0ElMkYlMkZwYXRjaHdvDQo+IHJrLmtlcm5lbC5vcmclMkZwYXRjaCUy RjEwMjU5MDg3JTJGJmRhdGE9MDIlN0MwMSU3Q25pcHVuLmd1cHRhJTQwbnhwLmNvbSU3DQo+IENj NTQxMTAwZWNiOTQ0ZTc2NTBhNDA4ZDU4OGQ2OWFiMCU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5 YzVjMzAxNjM1JTdDMCU3DQo+IEMwJTdDNjM2NTY1Mzc3NjY1Njc2NjMxJnNkYXRhPWsyWGpuNUIx R0VDeDRVakNnOXRDaE9wT3JEM05QTTdCa3pJWExMU3YzckklDQo+IDNEJnJlc2VydmVkPTANCj4g PiAgIC0gSSBoYXZlIHZhbGlkYXRlZCBmb3IgUENJIGFuZCBwbGF0Zm9ybSwgYnV0IG5vdCBmb3Ig QU1CQSBhcyBJDQo+ID4gICAgIGRvIG5vdCBoYXZlIGluZnJhc3RydWN0dXJlIHRvIHZhbGlkYXRl IGl0Lg0KPiA+ICAgICBDYW4gYW55b25lIHBsZWFzZSB2YWxpZGF0ZSB0aGVtIG9uIEFNQkE/DQo+ ID4NCj4gPiAgIGRyaXZlcnMvYW1iYS9idXMuYyAgICAgICAgICB8IDM4ICsrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tDQo+ID4gICBkcml2ZXJzL2Jhc2UvZGQuYyAgICAgICAgICAgfCAxNCAr KysrKysrLS0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlL2RtYS1tYXBwaW5nLmMgIHwgNDEgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICAgZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMg ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+ID4gICBkcml2ZXJzL3BjaS9w Y2ktZHJpdmVyLmMgICAgfCA1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst DQo+IC0tLS0tLS0tDQo+ID4gICBpbmNsdWRlL2xpbnV4L2RldmljZS5oICAgICAgfCAgNiArKysr Kw0KPiA+ICAgaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIHwgMTIgLS0tLS0tLS0tDQo+ID4g ICA3IGZpbGVzIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCA4MiBkZWxldGlvbnMoLSkNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVz LmMNCj4gPiBpbmRleCA1OTRjMjI4Li41ODI0MWQyIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv YW1iYS9idXMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvYW1iYS9idXMuYw0KPiA+IEBAIC0yMCw2ICsy MCw4IEBADQo+ID4gICAjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4NCj4gPiAgICNpbmNsdWRlIDxs aW51eC9saW1pdHMuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9jbGsvY2xrLWNvbmYuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPg0KPiA+DQo+ID4gICAjaW5jbHVkZSA8YXNtL2lycS5oPg0KPiA+DQo+ID4gQEAgLTE3MSw2 ICsxNzMsMjggQEAgc3RhdGljIGludCBhbWJhX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZp Y2UNCj4gKmRldikNCj4gPiAgIH0NCj4gPiAgICNlbmRpZiAvKiBDT05GSUdfUE0gKi8NCj4gPg0K PiA+ICtpbnQgYW1iYV9kbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0K PiA+ICsJZW51bSBkZXZfZG1hX2F0dHIgYXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsN Cj4gPiArCWlmIChkZXYtPm9mX25vZGUpIHsNCj4gPiArCQlyZXQgPSBvZl9kbWFfY29uZmlndXJl KGRldiwgZGV2LT5vZl9ub2RlKTsNCj4gPiArCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9u KGRldikpIHsNCj4gPiArCQlhdHRyID0gYWNwaV9nZXRfZG1hX2F0dHIodG9fYWNwaV9kZXZpY2Vf bm9kZShkZXYtPmZ3bm9kZSkpOw0KPiA+ICsJCWlmIChhdHRyICE9IERFVl9ETUFfTk9UX1NVUFBP UlRFRCkNCj4gPiArCQkJcmV0ID0gYWNwaV9kbWFfY29uZmlndXJlKGRldiwgYXR0cik7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiANCj4gSSB3b3VsZCBiZSBp bmNsaW5lZCB0byBoYXZlIGFtYmFfYnVzdHlwZSBqdXN0IHJlZmVyZW5jZQ0KPiBwbGF0Zm9ybV9k bWFfY29uZmlndXJlKCkgZGlyZWN0bHkgcmF0aGVyIHRoYW4gZHVwbGljYXRlIGl0IGxpa2UgdGhp cywNCj4gc2luY2UgdGhlcmUncyBubyBzZW5zaWJsZSByZWFzb24gZm9yIHRoZW0gdG8gZXZlciBk aWZmZXIuDQoNCkkgdGhpbmsgZG1hX2NvbW1vbl9jb25maWd1cmUoKSBoYXZpbmcgdGhpcyBhcyB0 aGUgY29tbW9uIGNvZGUgc2VlbXMgcHJldHR5DQpEZWNlbnQuIEFsbCB0aGUgYnVzc2VzIHdpbGwg cHJvYmFibHkgY2FsbCB0aGlzIEFQSS4NCg0KPiANCj4gPiArDQo+ID4gK3ZvaWQgYW1iYV9kbWFf ZGVjb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlvZl9kbWFfZGVj b25maWd1cmUoZGV2KTsNCj4gPiArCWFjcGlfZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gK30N Cj4gPiArDQo+ID4gICBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYW1iYV9wbSA9IHsN Cj4gPiAgIAkuc3VzcGVuZAk9IHBtX2dlbmVyaWNfc3VzcGVuZCwNCj4gPiAgIAkucmVzdW1lCQk9 IHBtX2dlbmVyaWNfcmVzdW1lLA0KPiA+IEBAIC0xOTAsMTIgKzIxNCwxNCBAQCBzdGF0aWMgaW50 IGFtYmFfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZQ0KPiAqZGV2KQ0KPiA+ICAgICog c28gd2UgY2FsbCB0aGUgYnVzICJhbWJhIi4NCj4gPiAgICAqLw0KPiA+ICAgc3RydWN0IGJ1c190 eXBlIGFtYmFfYnVzdHlwZSA9IHsNCj4gPiAtCS5uYW1lCQk9ICJhbWJhIiwNCj4gPiAtCS5kZXZf Z3JvdXBzCT0gYW1iYV9kZXZfZ3JvdXBzLA0KPiA+IC0JLm1hdGNoCQk9IGFtYmFfbWF0Y2gsDQo+ ID4gLQkudWV2ZW50CQk9IGFtYmFfdWV2ZW50LA0KPiA+IC0JLnBtCQk9ICZhbWJhX3BtLA0KPiA+ IC0JLmZvcmNlX2RtYQk9IHRydWUsDQo+ID4gKwkubmFtZQkJCT0gImFtYmEiLA0KPiA+ICsJLmRl dl9ncm91cHMJCT0gYW1iYV9kZXZfZ3JvdXBzLA0KPiA+ICsJLm1hdGNoCQkJPSBhbWJhX21hdGNo LA0KPiA+ICsJLnVldmVudAkJCT0gYW1iYV91ZXZlbnQsDQo+ID4gKwkucG0JCQk9ICZhbWJhX3Bt LA0KPiA+ICsJLmRtYV9jb25maWd1cmUJCT0gYW1iYV9kbWFfY29uZmlndXJlLA0KPiA+ICsJLmRt YV9kZWNvbmZpZ3VyZQk9IGFtYmFfZG1hX2RlY29uZmlndXJlLA0KPiA+ICsJLmZvcmNlX2RtYQkJ PSB0cnVlLA0KPiANCj4gVGhpcyBwYXRjaCBzaG91bGQgYWxzbyBiZSByZW1vdmluZyBmb3JjZV9k bWEgYmVjYXVzZSBpdCBubyBsb25nZXIgbWFrZXMNCj4gc2Vuc2UuIElmIERNQSBjb25maWd1cmF0 aW9uIGlzIG5vdyBkb25lIGJ5IGEgYnVzLWxldmVsIGNhbGxiYWNrLCB0aGVuIGENCj4gYnVzIHdo aWNoIHdhbnRzIGl0cyBjaGlsZHJlbiB0byBnZXQgRE1BIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8g aW1wbGVtZW50DQo+IHRoYXQgY2FsbGJhY2s7IHRoZXJlJ3Mgbm93aGVyZSB0byBmb3JjZSBhICJk ZWZhdWx0IiBnbG9iYWwgYmVoYXZpb3VyIGFueQ0KPiBtb3JlLg0KDQpBZ3JlZS4gV2Ugd2lsbCBh bHNvIG5lZWQgdG8gcGFzcyBhIGZvcmNlX2RtYSBmbGFnIGluIG9mX2RtYV9jb25maWd1cmUoKSBh cw0KQ2hyaXN0b3BoIHN1Z2dlc3RzLiBJbGwgdXBkYXRlIHRoaXMuDQoNCj4gDQo+ID4gICB9Ow0K PiA+DQo+ID4gICBzdGF0aWMgaW50IF9faW5pdCBhbWJhX2luaXQodm9pZCkNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYw0KPiA+IGluZGV4IGRl NmZkMDkuLmYxMjRmM2YgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMNCj4gPiAr KysgYi9kcml2ZXJzL2Jhc2UvZGQuYw0KPiA+IEBAIC00MjEsOSArNDIxLDExIEBAIHN0YXRpYyBp bnQgcmVhbGx5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0DQo+IGRldmljZV9kcml2 ZXIgKmRydikNCj4gPiAgIAlpZiAocmV0KQ0KPiA+ICAgCQlnb3RvIHBpbmN0cmxfYmluZF9mYWls ZWQ7DQo+ID4NCj4gPiAtCXJldCA9IGRtYV9jb25maWd1cmUoZGV2KTsNCj4gPiAtCWlmIChyZXQp DQo+ID4gLQkJZ290byBkbWFfZmFpbGVkOw0KPiA+ICsJaWYgKGRldi0+YnVzLT5kbWFfY29uZmln dXJlKSB7DQo+ID4gKwkJcmV0ID0gZGV2LT5idXMtPmRtYV9jb25maWd1cmUoZGV2KTsNCj4gPiAr CQlpZiAocmV0KQ0KPiA+ICsJCQlnb3RvIGRtYV9mYWlsZWQ7DQo+ID4gKwl9DQo+ID4NCj4gPiAg IAlpZiAoZHJpdmVyX3N5c2ZzX2FkZChkZXYpKSB7DQo+ID4gICAJCXByaW50ayhLRVJOX0VSUiAi JXM6IGRyaXZlcl9zeXNmc19hZGQoJXMpIGZhaWxlZFxuIiwNCj4gPiBAQCAtNDg2LDcgKzQ4OCw4 IEBAIHN0YXRpYyBpbnQgcmVhbGx5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0DQo+ IGRldmljZV9kcml2ZXIgKmRydikNCj4gPiAgIAlnb3RvIGRvbmU7DQo+ID4NCj4gPiAgIHByb2Jl X2ZhaWxlZDoNCj4gPiAtCWRtYV9kZWNvbmZpZ3VyZShkZXYpOw0KPiA+ICsJaWYgKGRldi0+YnVz LT5kbWFfZGVjb25maWd1cmUpDQo+ID4gKwkJZGV2LT5idXMtPmRtYV9kZWNvbmZpZ3VyZShkZXYp Ow0KPiA+ICAgZG1hX2ZhaWxlZDoNCj4gPiAgIAlpZiAoZGV2LT5idXMpDQo+ID4gICAJCWJsb2Nr aW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsDQo+ID4g QEAgLTg5NSw3ICs4OTgsOCBAQCBzdGF0aWMgdm9pZCBfX2RldmljZV9yZWxlYXNlX2RyaXZlcihz dHJ1Y3QgZGV2aWNlDQo+ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkNCj4gPiAgIAkJCWRy di0+cmVtb3ZlKGRldik7DQo+ID4NCj4gPiAgIAkJZGV2aWNlX2xpbmtzX2RyaXZlcl9jbGVhbnVw KGRldik7DQo+ID4gLQkJZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gKwkJaWYgKGRldi0+YnVz LT5kbWFfZGVjb25maWd1cmUpDQo+ID4gKwkJCWRldi0+YnVzLT5kbWFfZGVjb25maWd1cmUoZGV2 KTsNCj4gPg0KPiA+ICAgCQlkZXZyZXNfcmVsZWFzZV9hbGwoZGV2KTsNCj4gPiAgIAkJZGV2LT5k cml2ZXIgPSBOVUxMOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcu YyBiL2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jDQo+ID4gaW5kZXggM2IxMTgzNS4uZjE2YmQ0 OSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2Jhc2UvZG1hLW1hcHBpbmcuYw0KPiA+ICsrKyBi L2RyaXZlcnMvYmFzZS9kbWEtbWFwcGluZy5jDQo+ID4gQEAgLTYsMTEgKzYsOSBAQA0KPiA+ICAg ICogQ29weXJpZ2h0IChjKSAyMDA2ICBUZWp1biBIZW8gPHRlaGVvQHN1c2UuZGU+DQo+ID4gICAg Ki8NCj4gPg0KPiA+IC0jaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiA+ICAgI2luY2x1ZGUgPGxp bnV4L2RtYS1tYXBwaW5nLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+DQo+ID4g ICAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+DQo+ID4gLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgv dm1hbGxvYy5oPg0KPiA+DQo+ID4gQEAgLTMyOSw0MiArMzI3LDMgQEAgdm9pZCBkbWFfY29tbW9u X2ZyZWVfcmVtYXAodm9pZCAqY3B1X2FkZHIsIHNpemVfdA0KPiBzaXplLCB1bnNpZ25lZCBsb25n IHZtX2ZsYWdzKQ0KPiA+ICAgCXZ1bm1hcChjcHVfYWRkcik7DQo+ID4gICB9DQo+ID4gICAjZW5k aWYNCj4gPiAtDQo+ID4gLS8qDQo+ID4gLSAqIENvbW1vbiBjb25maWd1cmF0aW9uIHRvIGVuYWJs ZSBETUEgQVBJIHVzZSBmb3IgYSBkZXZpY2UNCj4gPiAtICovDQo+ID4gLSNpbmNsdWRlIDxsaW51 eC9wY2kuaD4NCj4gPiAtDQo+ID4gLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRl dikNCj4gPiAtew0KPiA+IC0Jc3RydWN0IGRldmljZSAqYnJpZGdlID0gTlVMTCwgKmRtYV9kZXYg PSBkZXY7DQo+ID4gLQllbnVtIGRldl9kbWFfYXR0ciBhdHRyOw0KPiA+IC0JaW50IHJldCA9IDA7 DQo+ID4gLQ0KPiA+IC0JaWYgKGRldl9pc19wY2koZGV2KSkgew0KPiA+IC0JCWJyaWRnZSA9IHBj aV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7DQo+ID4gLQkJZG1hX2Rl diA9IGJyaWRnZTsNCj4gPiAtCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmIGRtYV9kZXYt PnBhcmVudCAmJg0KPiA+IC0JCSAgICBkbWFfZGV2LT5wYXJlbnQtPm9mX25vZGUpDQo+ID4gLQkJ CWRtYV9kZXYgPSBkbWFfZGV2LT5wYXJlbnQ7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGRt YV9kZXYtPm9mX25vZGUpIHsNCj4gPiAtCQlyZXQgPSBvZl9kbWFfY29uZmlndXJlKGRldiwgZG1h X2Rldi0+b2Zfbm9kZSk7DQo+ID4gLQl9IGVsc2UgaWYgKGhhc19hY3BpX2NvbXBhbmlvbihkbWFf ZGV2KSkgew0KPiA+IC0JCWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0cih0b19hY3BpX2RldmljZV9u b2RlKGRtYV9kZXYtPmZ3bm9kZSkpOw0KPiA+IC0JCWlmIChhdHRyICE9IERFVl9ETUFfTk9UX1NV UFBPUlRFRCkNCj4gPiAtCQkJcmV0ID0gYWNwaV9kbWFfY29uZmlndXJlKGRldiwgYXR0cik7DQo+ ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKGJyaWRnZSkNCj4gPiAtCQlwY2lfcHV0X2hvc3RfYnJp ZGdlX2RldmljZShicmlkZ2UpOw0KPiA+IC0NCj4gPiAtCXJldHVybiByZXQ7DQo+ID4gLX0NCj4g PiAtDQo+ID4gLXZvaWQgZG1hX2RlY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiAt ew0KPiA+IC0Jb2ZfZG1hX2RlY29uZmlndXJlKGRldik7DQo+ID4gLQlhY3BpX2RtYV9kZWNvbmZp Z3VyZShkZXYpOw0KPiA+IC19DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9y bS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMNCj4gPiBpbmRleCBmMWJmN2IzLi5hZGY5NGVi IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jDQo+ID4gKysrIGIvZHJp dmVycy9iYXNlL3BsYXRmb3JtLmMNCj4gPiBAQCAtMTEzMCw2ICsxMTMwLDI4IEBAIGludCBwbGF0 Zm9ybV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPg0KPiA+ICAgI2VuZGlmIC8q IENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovDQo+ID4NCj4gPiAraW50IHBsYXRmb3JtX2Rt YV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwllbnVtIGRldl9k bWFfYXR0ciBhdHRyOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKGRldi0+ b2Zfbm9kZSkgew0KPiA+ICsJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBkZXYtPm9mX25v ZGUpOw0KPiA+ICsJfSBlbHNlIGlmIChoYXNfYWNwaV9jb21wYW5pb24oZGV2KSkgew0KPiA+ICsJ CWF0dHIgPSBhY3BpX2dldF9kbWFfYXR0cih0b19hY3BpX2RldmljZV9ub2RlKGRldi0+Zndub2Rl KSk7DQo+ID4gKwkJaWYgKGF0dHIgIT0gREVWX0RNQV9OT1RfU1VQUE9SVEVEKQ0KPiA+ICsJCQly ZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHBsYXRmb3JtX2RtYV9kZWNv bmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCW9mX2RtYV9kZWNvbmZp Z3VyZShkZXYpOw0KPiA+ICsJYWNwaV9kbWFfZGVjb25maWd1cmUoZGV2KTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwbGF0Zm9ybV9kZXZfcG1f b3BzID0gew0KPiA+ICAgCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3Vz cGVuZCwNCj4gPiAgIAkucnVudGltZV9yZXN1bWUgPSBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1l LA0KPiA+IEBAIC0xMTM3LDEyICsxMTU5LDE0IEBAIGludCBwbGF0Zm9ybV9wbV9yZXN0b3JlKHN0 cnVjdCBkZXZpY2UgKmRldikNCj4gPiAgIH07DQo+ID4NCj4gPiAgIHN0cnVjdCBidXNfdHlwZSBw bGF0Zm9ybV9idXNfdHlwZSA9IHsNCj4gPiAtCS5uYW1lCQk9ICJwbGF0Zm9ybSIsDQo+ID4gLQku ZGV2X2dyb3Vwcwk9IHBsYXRmb3JtX2Rldl9ncm91cHMsDQo+ID4gLQkubWF0Y2gJCT0gcGxhdGZv cm1fbWF0Y2gsDQo+ID4gLQkudWV2ZW50CQk9IHBsYXRmb3JtX3VldmVudCwNCj4gPiAtCS5wbQkJ PSAmcGxhdGZvcm1fZGV2X3BtX29wcywNCj4gPiAtCS5mb3JjZV9kbWEJPSB0cnVlLA0KPiA+ICsJ Lm5hbWUJCQk9ICJwbGF0Zm9ybSIsDQo+ID4gKwkuZGV2X2dyb3VwcwkJPSBwbGF0Zm9ybV9kZXZf Z3JvdXBzLA0KPiA+ICsJLm1hdGNoCQkJPSBwbGF0Zm9ybV9tYXRjaCwNCj4gPiArCS51ZXZlbnQJ CQk9IHBsYXRmb3JtX3VldmVudCwNCj4gPiArCS5wbQkJCT0gJnBsYXRmb3JtX2Rldl9wbV9vcHMs DQo+ID4gKwkuZG1hX2NvbmZpZ3VyZQkJPSBwbGF0Zm9ybV9kbWFfY29uZmlndXJlLA0KPiA+ICsJ LmRtYV9kZWNvbmZpZ3VyZQk9IHBsYXRmb3JtX2RtYV9kZWNvbmZpZ3VyZSwNCj4gPiArCS5mb3Jj ZV9kbWEJCT0gdHJ1ZSwNCj4gPiAgIH07DQo+ID4gICBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9y bV9idXNfdHlwZSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZl ci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jDQo+ID4gaW5kZXggM2JlZDZiZS4uNGE3Nzgx NCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMNCj4gPiArKysgYi9k cml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMNCj4gPiBAQCAtMTgsNiArMTgsOCBAQA0KPiA+ICAgI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zdXNwZW5k Lmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2FjcGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICAgI2luY2x1 ZGUgInBjaS5oIg0KPiA+DQo+ID4gICBzdHJ1Y3QgcGNpX2R5bmlkIHsNCj4gPiBAQCAtMTUyMiwx OSArMTUyNCw1MiBAQCBzdGF0aWMgaW50IHBjaV9idXNfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRl dikNCj4gPiAgIAlyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpOw0KPiA+ICAgfQ0K PiA+DQo+ID4gK2ludCBwY2lfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmJyaWRnZSwgKmRtYV9kZXY7DQo+IA0KPiBZb3UgZG9u J3QgbmVlZCBkbWFfZGV2IGhlcmU7IHNlZSB0aGUgY29kZSByZW1vdmVkIGluIDA5NTE1ZWY1ZGRh ZCBmb3INCj4gaG93IHRoZSBsb2dpYyBvcmlnaW5hbGx5IHdvcmtlZC4NCg0KT2theS4gSSB3aWxs IGhhdmUgYSBsb29rIGluIHRoaXMgY29tbWl0IGlkLg0KDQo+IA0KPiA+ICsJZW51bSBkZXZfZG1h X2F0dHIgYXR0cjsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWJyaWRnZSA9IHBj aV9nZXRfaG9zdF9icmlkZ2VfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSk7DQo+ID4gKwlkbWFfZGV2 ID0gYnJpZGdlOw0KPiA+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBkbWFfZGV2LT5w YXJlbnQgJiYNCj4gPiArCSAgICBkbWFfZGV2LT5wYXJlbnQtPm9mX25vZGUpDQo+ID4gKwkJZG1h X2RldiA9IGRtYV9kZXYtPnBhcmVudDsNCj4gPiArDQo+ID4gKwlpZiAoZG1hX2Rldi0+b2Zfbm9k ZSkgew0KPiA+ICsJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBkbWFfZGV2LT5vZl9ub2Rl KTsNCj4gPiArCX0gZWxzZSBpZiAoaGFzX2FjcGlfY29tcGFuaW9uKGRtYV9kZXYpKSB7DQo+ID4g KwkJYXR0ciA9IGFjcGlfZ2V0X2RtYV9hdHRyKHRvX2FjcGlfZGV2aWNlX25vZGUoZG1hX2Rldi0+ Zndub2RlKSk7DQo+ID4gKwkJaWYgKGF0dHIgIT0gREVWX0RNQV9OT1RfU1VQUE9SVEVEKQ0KPiA+ ICsJCQlyZXQgPSBhY3BpX2RtYV9jb25maWd1cmUoZGV2LCBhdHRyKTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlwY2lfcHV0X2hvc3RfYnJpZGdlX2RldmljZShicmlkZ2UpOw0KPiA+ICsNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcGNpX2RtYV9kZWNvbmZpZ3Vy ZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArCW9mX2RtYV9kZWNvbmZpZ3VyZShk ZXYpOw0KPiA+ICsJYWNwaV9kbWFfZGVjb25maWd1cmUoZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4g PiAgIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7DQo+ID4gLQkubmFtZQkJPSAicGNp IiwNCj4gPiAtCS5tYXRjaAkJPSBwY2lfYnVzX21hdGNoLA0KPiA+IC0JLnVldmVudAkJPSBwY2lf dWV2ZW50LA0KPiA+IC0JLnByb2JlCQk9IHBjaV9kZXZpY2VfcHJvYmUsDQo+ID4gLQkucmVtb3Zl CQk9IHBjaV9kZXZpY2VfcmVtb3ZlLA0KPiA+IC0JLnNodXRkb3duCT0gcGNpX2RldmljZV9zaHV0 ZG93biwNCj4gPiAtCS5kZXZfZ3JvdXBzCT0gcGNpX2Rldl9ncm91cHMsDQo+ID4gLQkuYnVzX2dy b3Vwcwk9IHBjaV9idXNfZ3JvdXBzLA0KPiA+IC0JLmRydl9ncm91cHMJPSBwY2lfZHJ2X2dyb3Vw cywNCj4gPiAtCS5wbQkJPSBQQ0lfUE1fT1BTX1BUUiwNCj4gPiAtCS5udW1fdmYJCT0gcGNpX2J1 c19udW1fdmYsDQo+ID4gLQkuZm9yY2VfZG1hCT0gdHJ1ZSwNCj4gPiArCS5uYW1lCQkJPSAicGNp IiwNCj4gPiArCS5tYXRjaAkJCT0gcGNpX2J1c19tYXRjaCwNCj4gPiArCS51ZXZlbnQJCQk9IHBj aV91ZXZlbnQsDQo+ID4gKwkucHJvYmUJCQk9IHBjaV9kZXZpY2VfcHJvYmUsDQo+ID4gKwkucmVt b3ZlCQkJPSBwY2lfZGV2aWNlX3JlbW92ZSwNCj4gPiArCS5zaHV0ZG93bgkJPSBwY2lfZGV2aWNl X3NodXRkb3duLA0KPiA+ICsJLmRldl9ncm91cHMJCT0gcGNpX2Rldl9ncm91cHMsDQo+ID4gKwku YnVzX2dyb3VwcwkJPSBwY2lfYnVzX2dyb3VwcywNCj4gPiArCS5kcnZfZ3JvdXBzCQk9IHBjaV9k cnZfZ3JvdXBzLA0KPiA+ICsJLnBtCQkJPSBQQ0lfUE1fT1BTX1BUUiwNCj4gPiArCS5udW1fdmYJ CQk9IHBjaV9idXNfbnVtX3ZmLA0KPiA+ICsJLmRtYV9jb25maWd1cmUJCT0gcGNpX2RtYV9jb25m aWd1cmUsDQo+ID4gKwkuZG1hX2RlY29uZmlndXJlCT0gcGNpX2RtYV9kZWNvbmZpZ3VyZSwNCj4g PiArCS5mb3JjZV9kbWEJCT0gdHJ1ZSwNCj4gPiAgIH07DQo+ID4gICBFWFBPUlRfU1lNQk9MKHBj aV9idXNfdHlwZSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2Uu aCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgNCj4gPiBpbmRleCBiMDkzNDA1Li45YjJkY2Y2IDEw MDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgNCj4gPiArKysgYi9pbmNsdWRl L2xpbnV4L2RldmljZS5oDQo+ID4gQEAgLTg4LDYgKzg4LDkgQEAgZXh0ZXJuIGludCBfX211c3Rf Y2hlY2sgYnVzX2NyZWF0ZV9maWxlKHN0cnVjdA0KPiBidXNfdHlwZSAqLA0KPiA+ICAgICogQHJl c3VtZToJQ2FsbGVkIHRvIGJyaW5nIGEgZGV2aWNlIG9uIHRoaXMgYnVzIG91dCBvZiBzbGVlcCBt b2RlLg0KPiA+ICAgICogQG51bV92ZjoJQ2FsbGVkIHRvIGZpbmQgb3V0IGhvdyBtYW55IHZpcnR1 YWwgZnVuY3Rpb25zIGEgZGV2aWNlIG9uDQo+IHRoaXMNCj4gPiAgICAqCQlidXMgc3VwcG9ydHMu DQo+ID4gKyAqIEBkbWFfY29uZmlndXJlOglDYWxsZWQgdG8gc2V0dXAgRE1BIGNvbmZpZ3VyYXRp b24gb24gYSBkZXZpY2Ugb24NCj4gPiArCQkJdGhpcyBidXMuDQo+ID4gKyAqIEBkbWFfZGVjb25m aWd1cmU6CUNhbGxlZCB0byB0ZWFyIGRvd24gdGhlIERNQSBjb25maWd1cmF0aW9uLg0KPiA+ICAg ICogQHBtOgkJUG93ZXIgbWFuYWdlbWVudCBvcGVyYXRpb25zIG9mIHRoaXMgYnVzLCBjYWxsYmFj aw0KPiB0aGUgc3BlY2lmaWMNCj4gPiAgICAqCQlkZXZpY2UgZHJpdmVyJ3MgcG0tb3BzLg0KPiA+ ICAgICogQGlvbW11X29wczogIElPTU1VIHNwZWNpZmljIG9wZXJhdGlvbnMgZm9yIHRoaXMgYnVz LCB1c2VkIHRvIGF0dGFjaA0KPiBJT01NVQ0KPiA+IEBAIC0xMzAsNiArMTMzLDkgQEAgc3RydWN0 IGJ1c190eXBlIHsNCj4gPg0KPiA+ICAgCWludCAoKm51bV92Zikoc3RydWN0IGRldmljZSAqZGV2 KTsNCj4gPg0KPiA+ICsJaW50ICgqZG1hX2NvbmZpZ3VyZSkoc3RydWN0IGRldmljZSAqZGV2KTsN Cj4gPiArCXZvaWQgKCpkbWFfZGVjb25maWd1cmUpKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+IA0K PiBTZWVpbmcgaXQgbGFpZCBvdXQgaW4gdGhlIHBhdGNoLCBJIHJlYWxseSBkb24ndCB0aGluayB3 ZSBuZWVkIGENCj4gZGVjb25maWd1cmUgY2FsbGJhY2sgbGlrZSB0aGlzIC0gdGhlIGZhY3QgdGhh dCB3ZSdyZSBqdXN0IGNvcHktcGFzdGluZw0KPiB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24g ZXZlcnl3aGVyZSBpcyBhIGJpZyBoaW50LCBidXQgbW9yZQ0KPiBjb25jZXB0dWFsbHkgSSBjYW4n dCBzZWUgYSBnb29kIHJlYXNvbiBmb3IgaXQgdG8gZXZlciBuZWVkIGJ1cy1zcGVjaWZpYw0KPiBi ZWhhdmlvdXIgaW4gdGhlIHNhbWUgd2F5IHRoYXQgY29uZmlndXJlIGRvZXMuDQo+IA0KPiBNYXli ZSB0aGF0IG1lYW5zIHdlIGtlZXAgZG1hX2NvbmZpZ3VyZSgpIGFyb3VuZCBmb3IgdGhlIHNha2Ug b2YNCj4gc3ltbWV0cnksIGJ1dCBqdXN0IHJlZHVjZSBpdCB0bzoNCj4gDQo+IGludCBkbWFfY29u ZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gew0KPiAJaWYgKGRldi0+YnVzLT5kbWFfY29u ZmlndXJlKQ0KPiAJCXJldHVybiBkZXYtPmJ1cy0+ZG1hX2NvbmZpZ3VyZShkZXYpOw0KPiAJcmV0 dXJuIDA7DQo+IH0NCj4gDQo+IFJlYWxpc3RpY2FsbHkgdGhvdWdoLCBkbWFfZGVjb25maWd1cmUo KSBvbmx5IGV4aXN0cyBmb3IgdGhlIHNha2Ugb2YNCj4gY2FsbGluZyBhcmNoX3RlYXJkb3duX2Rt YV9vcHMoKSwgYW5kIHRoYXQgb25seSByZWFsbHkgZXhpc3RzIGZvciB0aGUNCj4gc2FrZSBvZiB0 aGUgb2xkIEFSTSBJT01NVSBjb2RlLCBzbyBJJ20gbm90IGluY2xpbmVkIHRvIHByZXRlbmQgaXQn cw0KPiBhbnl3aGVyZSBuZWFyIGFzIGltcG9ydGFudCBhcyB0aGUgZG1hX2NvbmZpZ3VyZSgpIHBh dGggaW4gZGVzaWduIHRlcm1zLg0KDQpZZXMsIEkgd2lsbCByZW1vdmUgZG1hX2RlY29uZmlndXJl IGNhbGxiYWNrLg0KDQpUaGFua3MsDQpOaXB1bg0KDQo+IA0KPiBSb2Jpbi4NCj4gDQo+ID4gKw0K PiA+ICAgCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsNCj4gPg0KPiA+ICAgCWNvbnN0IHN0 cnVjdCBpb21tdV9vcHMgKmlvbW11X29wczsNCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oDQo+ID4gaW5kZXgg ZWI5ZWFiNC4uMDM5MjI0YiAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBw aW5nLmgNCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgNCj4gPiBAQCAtNzYx LDE4ICs3NjEsNiBAQCB2b2lkICpkbWFfbWFya19kZWNsYXJlZF9tZW1vcnlfb2NjdXBpZWQoc3Ry dWN0DQo+IGRldmljZSAqZGV2LA0KPiA+ICAgfQ0KPiA+ICAgI2VuZGlmIC8qIENPTkZJR19IQVZF X0dFTkVSSUNfRE1BX0NPSEVSRU5UICovDQo+ID4NCj4gPiAtI2lmZGVmIENPTkZJR19IQVNfRE1B DQo+ID4gLWludCBkbWFfY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gLXZvaWQg ZG1hX2RlY29uZmlndXJlKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gLSNlbHNlDQo+ID4gLXN0 YXRpYyBpbmxpbmUgaW50IGRtYV9jb25maWd1cmUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+IC17 DQo+ID4gLQlyZXR1cm4gMDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIGlubGluZSB2b2lk IGRtYV9kZWNvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9DQo+ID4gLSNlbmRpZg0KPiA+ IC0NCj4gPiAgIC8qDQo+ID4gICAgKiBNYW5hZ2VkIERNQSBBUEkNCj4gPiAgICAqLw0KPiA+DQo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nipun Gupta Subject: RE: [PATCH] dma-mapping: move dma configuration to bus infrastructure Date: Tue, 13 Mar 2018 16:11:28 +0000 Message-ID: References: <1520868292-2479-1-git-send-email-nipun.gupta@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Robin Murphy , "hch-jcswGhMUV9g@public.gmane.org" , "linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org" , "gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org" , "m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org" , "bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org" Cc: "rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org" , "linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org" , "dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" , "johan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org" , "jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org" , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org" , "msuchanek-l3A5Bk7waGM@public.gmane.org" List-Id: iommu@lists.linux-foundation.org > -----Original Message----- > From: Robin Murphy [mailto:robin.murphy-5wv7dgnIgG8@public.gmane.org] > Sent: Tuesday, March 13, 2018 17:06 > > On 12/03/18 15:24, Nipun Gupta wrote: > > The change introduces 'dma_configure' & 'dma_deconfigure'as > > bus callback functions so each bus can choose to implement > > its own dma configuration function. > > This eases the addition of new busses w.r.t. adding the dma > > configuration functionality. > > It's probably worth clarifying - either in the commit message, the > kerneldoc, or both - that the bus-specific aspect is that of mapping > between a given device on the bus and the relevant firmware description > of its DMA configuration. Okay. > > > The change also updates the PCI, Platform and ACPI bus to use > > new introduced callbacks. > > > > Signed-off-by: Nipun Gupta > > --- > > - This patch is based on the comments on: > > > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwo > rk.kernel.org%2Fpatch%2F10259087%2F&data=02%7C01%7Cnipun.gupta%40nxp.com%7 > Cc541100ecb944e7650a408d588d69ab0%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7 > C0%7C636565377665676631&sdata=k2Xjn5B1GECx4UjCg9tChOpOrD3NPM7BkzIXLLSv3rI% > 3D&reserved=0 > > - I have validated for PCI and platform, but not for AMBA as I > > do not have infrastructure to validate it. > > Can anyone please validate them on AMBA? > > > > drivers/amba/bus.c | 38 ++++++++++++++++++++++++----- > > drivers/base/dd.c | 14 +++++++---- > > drivers/base/dma-mapping.c | 41 ------------------------------- > > drivers/base/platform.c | 36 ++++++++++++++++++++++----- > > drivers/pci/pci-driver.c | 59 ++++++++++++++++++++++++++++++++++++- > -------- > > include/linux/device.h | 6 +++++ > > include/linux/dma-mapping.h | 12 --------- > > 7 files changed, 124 insertions(+), 82 deletions(-) > > > > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c > > index 594c228..58241d2 100644 > > --- a/drivers/amba/bus.c > > +++ b/drivers/amba/bus.c > > @@ -20,6 +20,8 @@ > > #include > > #include > > #include > > +#include > > +#include > > > > #include > > > > @@ -171,6 +173,28 @@ static int amba_pm_runtime_resume(struct device > *dev) > > } > > #endif /* CONFIG_PM */ > > > > +int amba_dma_configure(struct device *dev) > > +{ > > + enum dev_dma_attr attr; > > + int ret = 0; > > + > > + if (dev->of_node) { > > + ret = of_dma_configure(dev, dev->of_node); > > + } else if (has_acpi_companion(dev)) { > > + attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode)); > > + if (attr != DEV_DMA_NOT_SUPPORTED) > > + ret = acpi_dma_configure(dev, attr); > > + } > > + > > + return ret; > > +} > > I would be inclined to have amba_bustype just reference > platform_dma_configure() directly rather than duplicate it like this, > since there's no sensible reason for them to ever differ. I think dma_common_configure() having this as the common code seems pretty Decent. All the busses will probably call this API. > > > + > > +void amba_dma_deconfigure(struct device *dev) > > +{ > > + of_dma_deconfigure(dev); > > + acpi_dma_deconfigure(dev); > > +} > > + > > static const struct dev_pm_ops amba_pm = { > > .suspend = pm_generic_suspend, > > .resume = pm_generic_resume, > > @@ -190,12 +214,14 @@ static int amba_pm_runtime_resume(struct device > *dev) > > * so we call the bus "amba". > > */ > > struct bus_type amba_bustype = { > > - .name = "amba", > > - .dev_groups = amba_dev_groups, > > - .match = amba_match, > > - .uevent = amba_uevent, > > - .pm = &amba_pm, > > - .force_dma = true, > > + .name = "amba", > > + .dev_groups = amba_dev_groups, > > + .match = amba_match, > > + .uevent = amba_uevent, > > + .pm = &amba_pm, > > + .dma_configure = amba_dma_configure, > > + .dma_deconfigure = amba_dma_deconfigure, > > + .force_dma = true, > > This patch should also be removing force_dma because it no longer makes > sense. If DMA configuration is now done by a bus-level callback, then a > bus which wants its children to get DMA configuration needs to implement > that callback; there's nowhere to force a "default" global behaviour any > more. Agree. We will also need to pass a force_dma flag in of_dma_configure() as Christoph suggests. Ill update this. > > > }; > > > > static int __init amba_init(void) > > diff --git a/drivers/base/dd.c b/drivers/base/dd.c > > index de6fd09..f124f3f 100644 > > --- a/drivers/base/dd.c > > +++ b/drivers/base/dd.c > > @@ -421,9 +421,11 @@ static int really_probe(struct device *dev, struct > device_driver *drv) > > if (ret) > > goto pinctrl_bind_failed; > > > > - ret = dma_configure(dev); > > - if (ret) > > - goto dma_failed; > > + if (dev->bus->dma_configure) { > > + ret = dev->bus->dma_configure(dev); > > + if (ret) > > + goto dma_failed; > > + } > > > > if (driver_sysfs_add(dev)) { > > printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n", > > @@ -486,7 +488,8 @@ static int really_probe(struct device *dev, struct > device_driver *drv) > > goto done; > > > > probe_failed: > > - dma_deconfigure(dev); > > + if (dev->bus->dma_deconfigure) > > + dev->bus->dma_deconfigure(dev); > > dma_failed: > > if (dev->bus) > > blocking_notifier_call_chain(&dev->bus->p->bus_notifier, > > @@ -895,7 +898,8 @@ static void __device_release_driver(struct device > *dev, struct device *parent) > > drv->remove(dev); > > > > device_links_driver_cleanup(dev); > > - dma_deconfigure(dev); > > + if (dev->bus->dma_deconfigure) > > + dev->bus->dma_deconfigure(dev); > > > > devres_release_all(dev); > > dev->driver = NULL; > > diff --git a/drivers/base/dma-mapping.c b/drivers/base/dma-mapping.c > > index 3b11835..f16bd49 100644 > > --- a/drivers/base/dma-mapping.c > > +++ b/drivers/base/dma-mapping.c > > @@ -6,11 +6,9 @@ > > * Copyright (c) 2006 Tejun Heo > > */ > > > > -#include > > #include > > #include > > #include > > -#include > > #include > > #include > > > > @@ -329,42 +327,3 @@ void dma_common_free_remap(void *cpu_addr, size_t > size, unsigned long vm_flags) > > vunmap(cpu_addr); > > } > > #endif > > - > > -/* > > - * Common configuration to enable DMA API use for a device > > - */ > > -#include > > - > > -int dma_configure(struct device *dev) > > -{ > > - struct device *bridge = NULL, *dma_dev = dev; > > - enum dev_dma_attr attr; > > - int ret = 0; > > - > > - if (dev_is_pci(dev)) { > > - bridge = pci_get_host_bridge_device(to_pci_dev(dev)); > > - dma_dev = bridge; > > - if (IS_ENABLED(CONFIG_OF) && dma_dev->parent && > > - dma_dev->parent->of_node) > > - dma_dev = dma_dev->parent; > > - } > > - > > - if (dma_dev->of_node) { > > - ret = of_dma_configure(dev, dma_dev->of_node); > > - } else if (has_acpi_companion(dma_dev)) { > > - attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode)); > > - if (attr != DEV_DMA_NOT_SUPPORTED) > > - ret = acpi_dma_configure(dev, attr); > > - } > > - > > - if (bridge) > > - pci_put_host_bridge_device(bridge); > > - > > - return ret; > > -} > > - > > -void dma_deconfigure(struct device *dev) > > -{ > > - of_dma_deconfigure(dev); > > - acpi_dma_deconfigure(dev); > > -} > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > > index f1bf7b3..adf94eb 100644 > > --- a/drivers/base/platform.c > > +++ b/drivers/base/platform.c > > @@ -1130,6 +1130,28 @@ int platform_pm_restore(struct device *dev) > > > > #endif /* CONFIG_HIBERNATE_CALLBACKS */ > > > > +int platform_dma_configure(struct device *dev) > > +{ > > + enum dev_dma_attr attr; > > + int ret = 0; > > + > > + if (dev->of_node) { > > + ret = of_dma_configure(dev, dev->of_node); > > + } else if (has_acpi_companion(dev)) { > > + attr = acpi_get_dma_attr(to_acpi_device_node(dev->fwnode)); > > + if (attr != DEV_DMA_NOT_SUPPORTED) > > + ret = acpi_dma_configure(dev, attr); > > + } > > + > > + return ret; > > +} > > + > > +void platform_dma_deconfigure(struct device *dev) > > +{ > > + of_dma_deconfigure(dev); > > + acpi_dma_deconfigure(dev); > > +} > > + > > static const struct dev_pm_ops platform_dev_pm_ops = { > > .runtime_suspend = pm_generic_runtime_suspend, > > .runtime_resume = pm_generic_runtime_resume, > > @@ -1137,12 +1159,14 @@ int platform_pm_restore(struct device *dev) > > }; > > > > struct bus_type platform_bus_type = { > > - .name = "platform", > > - .dev_groups = platform_dev_groups, > > - .match = platform_match, > > - .uevent = platform_uevent, > > - .pm = &platform_dev_pm_ops, > > - .force_dma = true, > > + .name = "platform", > > + .dev_groups = platform_dev_groups, > > + .match = platform_match, > > + .uevent = platform_uevent, > > + .pm = &platform_dev_pm_ops, > > + .dma_configure = platform_dma_configure, > > + .dma_deconfigure = platform_dma_deconfigure, > > + .force_dma = true, > > }; > > EXPORT_SYMBOL_GPL(platform_bus_type); > > > > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c > > index 3bed6be..4a77814 100644 > > --- a/drivers/pci/pci-driver.c > > +++ b/drivers/pci/pci-driver.c > > @@ -18,6 +18,8 @@ > > #include > > #include > > #include > > +#include > > +#include > > #include "pci.h" > > > > struct pci_dynid { > > @@ -1522,19 +1524,52 @@ static int pci_bus_num_vf(struct device *dev) > > return pci_num_vf(to_pci_dev(dev)); > > } > > > > +int pci_dma_configure(struct device *dev) > > +{ > > + struct device *bridge, *dma_dev; > > You don't need dma_dev here; see the code removed in 09515ef5ddad for > how the logic originally worked. Okay. I will have a look in this commit id. > > > + enum dev_dma_attr attr; > > + int ret = 0; > > + > > + bridge = pci_get_host_bridge_device(to_pci_dev(dev)); > > + dma_dev = bridge; > > + if (IS_ENABLED(CONFIG_OF) && dma_dev->parent && > > + dma_dev->parent->of_node) > > + dma_dev = dma_dev->parent; > > + > > + if (dma_dev->of_node) { > > + ret = of_dma_configure(dev, dma_dev->of_node); > > + } else if (has_acpi_companion(dma_dev)) { > > + attr = acpi_get_dma_attr(to_acpi_device_node(dma_dev->fwnode)); > > + if (attr != DEV_DMA_NOT_SUPPORTED) > > + ret = acpi_dma_configure(dev, attr); > > + } > > + > > + pci_put_host_bridge_device(bridge); > > + > > + return ret; > > +} > > + > > +void pci_dma_deconfigure(struct device *dev) > > +{ > > + of_dma_deconfigure(dev); > > + acpi_dma_deconfigure(dev); > > +} > > + > > struct bus_type pci_bus_type = { > > - .name = "pci", > > - .match = pci_bus_match, > > - .uevent = pci_uevent, > > - .probe = pci_device_probe, > > - .remove = pci_device_remove, > > - .shutdown = pci_device_shutdown, > > - .dev_groups = pci_dev_groups, > > - .bus_groups = pci_bus_groups, > > - .drv_groups = pci_drv_groups, > > - .pm = PCI_PM_OPS_PTR, > > - .num_vf = pci_bus_num_vf, > > - .force_dma = true, > > + .name = "pci", > > + .match = pci_bus_match, > > + .uevent = pci_uevent, > > + .probe = pci_device_probe, > > + .remove = pci_device_remove, > > + .shutdown = pci_device_shutdown, > > + .dev_groups = pci_dev_groups, > > + .bus_groups = pci_bus_groups, > > + .drv_groups = pci_drv_groups, > > + .pm = PCI_PM_OPS_PTR, > > + .num_vf = pci_bus_num_vf, > > + .dma_configure = pci_dma_configure, > > + .dma_deconfigure = pci_dma_deconfigure, > > + .force_dma = true, > > }; > > EXPORT_SYMBOL(pci_bus_type); > > > > diff --git a/include/linux/device.h b/include/linux/device.h > > index b093405..9b2dcf6 100644 > > --- a/include/linux/device.h > > +++ b/include/linux/device.h > > @@ -88,6 +88,9 @@ extern int __must_check bus_create_file(struct > bus_type *, > > * @resume: Called to bring a device on this bus out of sleep mode. > > * @num_vf: Called to find out how many virtual functions a device on > this > > * bus supports. > > + * @dma_configure: Called to setup DMA configuration on a device on > > + this bus. > > + * @dma_deconfigure: Called to tear down the DMA configuration. > > * @pm: Power management operations of this bus, callback > the specific > > * device driver's pm-ops. > > * @iommu_ops: IOMMU specific operations for this bus, used to attach > IOMMU > > @@ -130,6 +133,9 @@ struct bus_type { > > > > int (*num_vf)(struct device *dev); > > > > + int (*dma_configure)(struct device *dev); > > + void (*dma_deconfigure)(struct device *dev); > > Seeing it laid out in the patch, I really don't think we need a > deconfigure callback like this - the fact that we're just copy-pasting > the existing implementation everywhere is a big hint, but more > conceptually I can't see a good reason for it to ever need bus-specific > behaviour in the same way that configure does. > > Maybe that means we keep dma_configure() around for the sake of > symmetry, but just reduce it to: > > int dma_configure(struct device *dev) > { > if (dev->bus->dma_configure) > return dev->bus->dma_configure(dev); > return 0; > } > > Realistically though, dma_deconfigure() only exists for the sake of > calling arch_teardown_dma_ops(), and that only really exists for the > sake of the old ARM IOMMU code, so I'm not inclined to pretend it's > anywhere near as important as the dma_configure() path in design terms. Yes, I will remove dma_deconfigure callback. Thanks, Nipun > > Robin. > > > + > > const struct dev_pm_ops *pm; > > > > const struct iommu_ops *iommu_ops; > > diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h > > index eb9eab4..039224b 100644 > > --- a/include/linux/dma-mapping.h > > +++ b/include/linux/dma-mapping.h > > @@ -761,18 +761,6 @@ void *dma_mark_declared_memory_occupied(struct > device *dev, > > } > > #endif /* CONFIG_HAVE_GENERIC_DMA_COHERENT */ > > > > -#ifdef CONFIG_HAS_DMA > > -int dma_configure(struct device *dev); > > -void dma_deconfigure(struct device *dev); > > -#else > > -static inline int dma_configure(struct device *dev) > > -{ > > - return 0; > > -} > > - > > -static inline void dma_deconfigure(struct device *dev) {} > > -#endif > > - > > /* > > * Managed DMA API > > */ > >