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, 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 F111DC2B9F4 for ; Mon, 14 Jun 2021 12:37:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C0208610CD for ; Mon, 14 Jun 2021 12:37:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232791AbhFNMjm (ORCPT ); Mon, 14 Jun 2021 08:39:42 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:9114 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232775AbhFNMjm (ORCPT ); Mon, 14 Jun 2021 08:39:42 -0400 Received: from dggemv703-chm.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4G3W9b42KPzZdp9; Mon, 14 Jun 2021 20:34:43 +0800 (CST) Received: from dggema722-chm.china.huawei.com (10.3.20.86) by dggemv703-chm.china.huawei.com (10.3.19.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Mon, 14 Jun 2021 20:37:37 +0800 Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by dggema722-chm.china.huawei.com (10.3.20.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Mon, 14 Jun 2021 20:37:36 +0800 Received: from lhreml710-chm.china.huawei.com ([169.254.81.184]) by lhreml710-chm.china.huawei.com ([169.254.81.184]) with mapi id 15.01.2176.012; Mon, 14 Jun 2021 13:37:34 +0100 From: Shameerali Kolothum Thodi To: Robin Murphy , "linux-arm-kernel@lists.infradead.org" , "linux-acpi@vger.kernel.org" , "iommu@lists.linux-foundation.org" CC: Linuxarm , "lorenzo.pieralisi@arm.com" , "joro@8bytes.org" , wanghuiqiang , "Guohanjun (Hanjun Guo)" , "steven.price@arm.com" , "Sami.Mujawar@arm.com" , "jon@solid-run.com" , "eric.auger@redhat.com" , yangyicong Subject: RE: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing Thread-Topic: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing Thread-Index: AQHXUIxnG5hhFJByf0K0fNZqfWU2CasTaxEAgAAiFPA= Date: Mon, 14 Jun 2021 12:37:34 +0000 Message-ID: <5634877440314121a8b0ed7cc238fb63@huawei.com> References: <20210524110222.2212-1-shameerali.kolothum.thodi@huawei.com> <20210524110222.2212-2-shameerali.kolothum.thodi@huawei.com> <15c7fac0-11a8-0cdb-aac3-b5d8feb8f066@arm.com> In-Reply-To: <15c7fac0-11a8-0cdb-aac3-b5d8feb8f066@arm.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.47.26.251] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org SGkgUm9iaW4sDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUm9iaW4g TXVycGh5IFttYWlsdG86cm9iaW4ubXVycGh5QGFybS5jb21dDQo+IFNlbnQ6IDE0IEp1bmUgMjAy MSAxMjoxNQ0KPiBUbzogU2hhbWVlcmFsaSBLb2xvdGh1bSBUaG9kaSA8c2hhbWVlcmFsaS5rb2xv dGh1bS50aG9kaUBodWF3ZWkuY29tPjsNCj4gbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnOyBsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZzsNCj4gaW9tbXVAbGlzdHMubGludXgt Zm91bmRhdGlvbi5vcmcNCj4gQ2M6IExpbnV4YXJtIDxsaW51eGFybUBodWF3ZWkuY29tPjsgbG9y ZW56by5waWVyYWxpc2lAYXJtLmNvbTsNCj4gam9yb0A4Ynl0ZXMub3JnOyB3YW5naHVpcWlhbmcg PHdhbmdodWlxaWFuZ0BodWF3ZWkuY29tPjsgR3VvaGFuanVuDQo+IChIYW5qdW4gR3VvKSA8Z3Vv aGFuanVuQGh1YXdlaS5jb20+OyBzdGV2ZW4ucHJpY2VAYXJtLmNvbTsNCj4gU2FtaS5NdWphd2Fy QGFybS5jb207IGpvbkBzb2xpZC1ydW4uY29tOyBlcmljLmF1Z2VyQHJlZGhhdC5jb207DQo+IHlh bmd5aWNvbmcgPHlhbmd5aWNvbmdAaHVhd2VpLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2 NSAxLzhdIEFDUEkvSU9SVDogQWRkIHN1cHBvcnQgZm9yIFJNUiBub2RlIHBhcnNpbmcNCj4gDQo+ IE9uIDIwMjEtMDUtMjQgMTI6MDIsIFNoYW1lZXIgS29sb3RodW0gd3JvdGU6DQo+ID4gQWRkIHN1 cHBvcnQgZm9yIHBhcnNpbmcgUk1SIG5vZGUgaW5mb3JtYXRpb24gZnJvbSBBQ1BJLg0KPiA+IEZp bmQgYXNzb2NpYXRlZCBzdHJlYW0gaWQgYW5kIHNtbXUgbm9kZSBpbmZvIGZyb20gdGhlDQo+ID4g Uk1SIG5vZGUgYW5kIHBvcHVsYXRlIGEgbGlua2VkIGxpc3Qgd2l0aCBSTVIgbWVtb3J5DQo+ID4g ZGVzY3JpcHRvcnMuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBTaGFtZWVyIEtvbG90aHVtDQo+ IDxzaGFtZWVyYWxpLmtvbG90aHVtLnRob2RpQGh1YXdlaS5jb20+DQo+ID4gLS0tDQo+ID4gICBk cml2ZXJzL2FjcGkvYXJtNjQvaW9ydC5jIHwgMTA0DQo+ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystDQo+ID4gICAxIGZpbGUgY2hhbmdlZCwgMTAzIGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXJtNjQv aW9ydC5jIGIvZHJpdmVycy9hY3BpL2FybTY0L2lvcnQuYw0KPiA+IGluZGV4IDM5MTJhMWY2MDU4 ZS4uZmVhMWZmYWVkZjNiIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYWNwaS9hcm02NC9pb3J0 LmMNCj4gPiArKysgYi9kcml2ZXJzL2FjcGkvYXJtNjQvaW9ydC5jDQo+ID4gQEAgLTQwLDYgKzQw LDE5IEBAIHN0cnVjdCBpb3J0X2Z3bm9kZSB7DQo+ID4gICBzdGF0aWMgTElTVF9IRUFEKGlvcnRf Zndub2RlX2xpc3QpOw0KPiA+ICAgc3RhdGljIERFRklORV9TUElOTE9DSyhpb3J0X2Z3bm9kZV9s b2NrKTsNCj4gPg0KPiA+ICsvKg0KPiA+ICsgKiBPbmUgZW50cnkgZm9yIElPUlQgUk1SLg0KPiA+ ICsgKi8NCj4gPiArc3RydWN0IGlvcnRfcm1yX2VudHJ5IHsNCj4gPiArCXN0cnVjdCBsaXN0X2hl YWQgbGlzdDsNCj4gPiArCXUzMiBzaWQ7DQo+ID4gKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKnNt bXU7DQo+ID4gKwlzdHJ1Y3QgYWNwaV9pb3J0X3Jtcl9kZXNjICpybXJfZGVzYzsNCj4gPiArCXUz MiBmbGFnczsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBMSVNUX0hFQUQoaW9ydF9ybXJf bGlzdCk7ICAgICAgICAgLyogbGlzdCBvZiBSTVIgcmVnaW9ucyBmcm9tIEFDUEkNCj4gKi8NCj4g PiArDQo+ID4gICAvKioNCj4gPiAgICAqIGlvcnRfc2V0X2Z3bm9kZSgpIC0gQ3JlYXRlIGlvcnRf Zndub2RlIGFuZCB1c2UgaXQgdG8gcmVnaXN0ZXINCj4gPiAgICAqCQkgICAgICAgaW9tbXUgZGF0 YSBpbiB0aGUgaW9ydF9md25vZGVfbGlzdA0KPiA+IEBAIC0zOTMsNyArNDA2LDggQEAgc3RhdGlj IHN0cnVjdCBhY3BpX2lvcnRfbm9kZQ0KPiAqaW9ydF9ub2RlX2dldF9pZChzdHJ1Y3QgYWNwaV9p b3J0X25vZGUgKm5vZGUsDQo+ID4gICAJCWlmIChub2RlLT50eXBlID09IEFDUElfSU9SVF9OT0RF X05BTUVEX0NPTVBPTkVOVCB8fA0KPiA+ICAgCQkgICAgbm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRf Tk9ERV9QQ0lfUk9PVF9DT01QTEVYIHx8DQo+ID4gICAJCSAgICBub2RlLT50eXBlID09IEFDUElf SU9SVF9OT0RFX1NNTVVfVjMgfHwNCj4gPiAtCQkgICAgbm9kZS0+dHlwZSA9PSBBQ1BJX0lPUlRf Tk9ERV9QTUNHKSB7DQo+ID4gKwkJICAgIG5vZGUtPnR5cGUgPT0gQUNQSV9JT1JUX05PREVfUE1D RyB8fA0KPiA+ICsJCSAgICBub2RlLT50eXBlID09IEFDUElfSU9SVF9OT0RFX1JNUikgew0KPiA+ ICAgCQkJKmlkX291dCA9IG1hcC0+b3V0cHV0X2Jhc2U7DQo+ID4gICAJCQlyZXR1cm4gcGFyZW50 Ow0KPiA+ICAgCQl9DQo+ID4gQEAgLTE2NjAsNiArMTY3NCw5MSBAQCBzdGF0aWMgdm9pZCBfX2lu aXQgaW9ydF9lbmFibGVfYWNzKHN0cnVjdA0KPiBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlKQ0K PiA+ICAgI2Vsc2UNCj4gPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBpb3J0X2VuYWJsZV9hY3Moc3Ry dWN0IGFjcGlfaW9ydF9ub2RlICppb3J0X25vZGUpIHsgfQ0KPiA+ICAgI2VuZGlmDQo+ID4gK3N0 YXRpYyBpbnQgaW9ydF9ybXJfZGVzY192YWxpZChzdHJ1Y3QgYWNwaV9pb3J0X3Jtcl9kZXNjICpk ZXNjLCB1MzIgY291bnQpDQo+ID4gK3sNCj4gPiArCWludCBpLCBqOw0KPiA+ICsNCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQo+ID4gKwkJdTY0IGVuZCwgc3RhcnQgPSBkZXNj W2ldLmJhc2VfYWRkcmVzcywgbGVuZ3RoID0gZGVzY1tpXS5sZW5ndGg7DQo+ID4gKw0KPiA+ICsJ CWlmICghSVNfQUxJR05FRChzdGFydCwgU1pfNjRLKSB8fCAhSVNfQUxJR05FRChsZW5ndGgsIFNa XzY0SykpDQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gV2Ugc2hvdWxkIGNlcnRhaW5s eSBGV19CVUcgZm9yIHRoaXMsIGJ1dCBtYXliZSBpdCdzIE9LIHRvIGNvbnRpbnVlLA0KPiBzaW5j ZSBhbGwgd2Ugc2hvdWxkIG5lZWQgdG8gZG8gaXMgcm91bmQgb3VyIGlvbW11X3Jlc3ZfcmVnaW9u cyB0byBhdA0KPiBsZWFzdCBQQUdFX1NJWkUuIFRoYXQgc2VlbXMgcG9zc2libHkgYmV0dGVyIHRo YW4gaWdub3JpbmcgdGhlbSBhbmQNCj4gaGF2aW5nIHRoaW5ncyBwb3RlbnRpYWxseSBibG93IHVw IGxhdGVyIChlc3BlY2lhbGx5IGlmIGFuIGVuZCB1c2VyDQo+IGV4ZXJjaXNlcyB0aGUgc3lzdGVt IG1vcmUgdGhvcm91Z2hseSB0aGFuIHRoZSBmaXJtd2FyZSBkZXZlbG9wZXIgdGVzdGVkDQo+IGl0 LCB3aGljaCBpbiBhdCBsZWFzdCBvbmUgY2FzZSBJJ3ZlIHNlZW4gbWF5IGJlICJhdCBhbGwiLi4u KQ0KDQpPay4gV2lsbCByZXBvcnQgRldfQlVHIGJ1dCBjb250aW51ZSB3aXRoIGEgcm91bmRlZCBh ZGRyL3NpemUuDQoNCj4gDQo+ID4gKwkJZW5kID0gc3RhcnQgKyBsZW5ndGggLSAxOw0KPiA+ICsN Cj4gPiArCQkvKiBDaGVjayBmb3IgYWRkcmVzcyBvdmVybGFwICovDQo+ID4gKwkJZm9yIChqID0g aSArIDE7IGogPCBjb3VudDsgaisrKSB7DQo+ID4gKwkJCXU2NCBlX3N0YXJ0ID0gZGVzY1tqXS5i YXNlX2FkZHJlc3M7DQo+ID4gKwkJCXU2NCBlX2VuZCA9IGVfc3RhcnQgKyBkZXNjW2pdLmxlbmd0 aCAtIDE7DQo+ID4gKw0KPiA+ICsJCQlpZiAoc3RhcnQgPD0gZV9lbmQgJiYgZW5kID49IGVfc3Rh cnQpDQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IFNpbWlsYXJseSBpdCdzIG5vdCAq dG9vKiBoYXJkIHRvIHRyaW0gb3ZlcmxhcHM7IEkgZ3Vlc3MgaXQncyByZWFsbHkgYQ0KPiBxdWVz dGlvbiBvZiB3aGV0aGVyIHdlIHdhbnQgdG8gYm90aGVyIDovDQoNCkkgZ3Vlc3MgdGhlbiwgd2Ug Y2FuIGp1c3QgcmVwb3J0IGl0IGFuZCBpZ25vcmUsDQogICBwcl93YXJuKEZXX0JVRywgIkZvdW5k IG92ZXJsYXBwaW5nIHJtciBkZXNjIEAuLi4uLCBidXQgaWdub3JpbmcuLi5cbiINCg0KVGhhbmtz DQpTaGFtZWVyDQoNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19pbml0IGlvcnRfcGFyc2Vfcm1yKHN0cnVj dCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNwaV9p b3J0X25vZGUgKnNtbXU7DQo+ID4gKwlzdHJ1Y3QgaW9ydF9ybXJfZW50cnkgKmU7DQo+ID4gKwlz dHJ1Y3QgYWNwaV9pb3J0X3JtciAqcm1yOw0KPiA+ICsJc3RydWN0IGFjcGlfaW9ydF9ybXJfZGVz YyAqcm1yX2Rlc2M7DQo+ID4gKwl1MzIgbWFwX2NvdW50ID0gaW9ydF9ub2RlLT5tYXBwaW5nX2Nv dW50Ow0KPiA+ICsJdTMyICBzaWQ7DQo+IA0KPiBOaXQ6IGV4dHJhIHNwYWNlLg0KPiANCj4gPiAr CWludCBpLCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChpb3J0X25vZGUtPnR5cGUgIT0gQUNQ SV9JT1JUX05PREVfUk1SKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCWlmICghaW9y dF9ub2RlLT5tYXBwaW5nX29mZnNldCB8fCBtYXBfY291bnQgIT0gMSkgew0KPiANCj4gQmV3YXJl IHRoYXQgdGhlcmUgd2FzIHNvbWUgZGlzY3Vzc2lvbiBhYm91dCBhbGxvd2luZyBtdWx0aXBsZSBT SURzIHRvDQo+IHNoYXJlIGFuIFJNUiBkZXNjcmlwdG9yLCBzaW5jZSB0aGVyZSBhcmUgcG90ZW50 aWFsIHVzZS1jYXNlcyB3aGljaCB3b3VsZA0KPiBvdGhlcndpc2UgbGVhZCB0byBleGNlc3NpdmUg ZHVwbGljYXRpb24gKGUuZy4gYW4gTVNJIGRvb3JiZWxsIGNhcnZlb3V0DQo+IGluIGEgVk0gd2hp Y2ggd291bGQgZWZmZWN0aXZlbHkgYXBwbHkgdG8gYWxsIHBvc3NpYmxlIFBDSSBSSURzKS4gSSB0 aGluaw0KPiB0aGUgY29uY2x1c2lvbiB3ZSByZWFjaGVkIHdhcyB0aGF0IGRpc2FsbG93aW5nIHRo YXQgd2FzIGZhaXJseQ0KPiBhcmJpdHJhcnksIGFuZCBjb3VsZCBwb3NzaWJseSBiZSByZWxheGVk IGluIGZ1dHVyZS4gSXQgbG9va3MgbGlrZSB0aGUNCj4gZGVzaWduIG9mIHRoaW5ncyBoZXJlIGNv dWxkIGdyb3cgdG8gZml0IHRoYXQgZmFpcmx5IGVhc2lseSB0aG91Z2gsIHNvIEkNCj4gZG9uJ3Qg dGhpbmsgaXQncyBhIG1ham9yIGNvbmNlcm4uDQo+IA0KPiBSb2Jpbi4NCj4gDQo+ID4gKwkJcHJf ZXJyKEZXX0JVRyAiSW52YWxpZCBJRCBtYXBwaW5nLCBza2lwcGluZyBSTVIgbm9kZSAlcFxuIiwN Cj4gPiArCQkgICAgICAgaW9ydF9ub2RlKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwkvKiBSZXRyaWV2ZSBhc3NvY2lhdGVkIHNtbXUgYW5kIHN0cmVhbSBp ZCAqLw0KPiA+ICsJc21tdSA9IGlvcnRfbm9kZV9nZXRfaWQoaW9ydF9ub2RlLCAmc2lkLCAwKTsN Cj4gPiArCWlmICghc21tdSkgew0KPiA+ICsJCXByX2VycihGV19CVUcgIkludmFsaWQgU01NVSBy ZWZlcmVuY2UsIHNraXBwaW5nIFJNUg0KPiBub2RlICVwXG4iLA0KPiA+ICsJCSAgICAgICBpb3J0 X25vZGUpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IFJldHJpZXZlIFJNUiBkYXRhICovDQo+ID4gKwlybXIgPSAoc3RydWN0IGFjcGlfaW9ydF9ybXIg Kilpb3J0X25vZGUtPm5vZGVfZGF0YTsNCj4gPiArCWlmICghcm1yLT5ybXJfb2Zmc2V0IHx8ICFy bXItPnJtcl9jb3VudCkgew0KPiA+ICsJCXByX2VycihGV19CVUcgIkludmFsaWQgUk1SIGRlc2Ny aXB0b3IgYXJyYXksIHNraXBwaW5nIFJNUg0KPiBub2RlICVwXG4iLA0KPiA+ICsJCSAgICAgICBp b3J0X25vZGUpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJtcl9kZXNjID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2lvcnRfcm1yX2Rlc2MsIGlvcnRf bm9kZSwNCj4gPiArCQkJCXJtci0+cm1yX29mZnNldCk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gaW9y dF9ybXJfZGVzY192YWxpZChybXJfZGVzYywgcm1yLT5ybXJfY291bnQpOw0KPiA+ICsJaWYgKHJl dCkgew0KPiA+ICsJCXByX2VycihGV19CVUcgIkludmFsaWQgUk1SIGRlc2NyaXB0b3JbJWRdIGZv ciBub2RlICVwLA0KPiBza2lwcGluZy4uLlxuIiwNCj4gPiArCQkgICAgICAgaSwgaW9ydF9ub2Rl KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7 IGkgPCBybXItPnJtcl9jb3VudDsgaSsrLCBybXJfZGVzYysrKSB7DQo+ID4gKwkJZSA9IGttYWxs b2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwkJaWYgKCFlKQ0KPiA+ICsJCQlyZXR1 cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwkJZS0+c2lkID0gc2lkOw0KPiA+ICsJCWUtPnNtbXUg PSBzbW11Ow0KPiA+ICsJCWUtPnJtcl9kZXNjID0gcm1yX2Rlc2M7DQo+ID4gKwkJZS0+ZmxhZ3Mg PSBybXItPmZsYWdzOw0KPiA+ICsNCj4gPiArCQlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmaW9y dF9ybXJfbGlzdCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g Pg0KPiA+ICAgc3RhdGljIHZvaWQgX19pbml0IGlvcnRfaW5pdF9wbGF0Zm9ybV9kZXZpY2VzKHZv aWQpDQo+ID4gICB7DQo+ID4gQEAgLTE2ODksNiArMTc4OCw5IEBAIHN0YXRpYyB2b2lkIF9faW5p dCBpb3J0X2luaXRfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQ0KPiA+DQo+ID4gICAJCWlvcnRfZW5h YmxlX2Fjcyhpb3J0X25vZGUpOw0KPiA+DQo+ID4gKwkJaWYgKGlvcnRfdGFibGUtPnJldmlzaW9u ID09IDMpDQo+ID4gKwkJCWlvcnRfcGFyc2Vfcm1yKGlvcnRfbm9kZSk7DQo+ID4gKw0KPiA+ICAg CQlvcHMgPSBpb3J0X2dldF9kZXZfY2ZnKGlvcnRfbm9kZSk7DQo+ID4gICAJCWlmIChvcHMpIHsN Cj4gPiAgIAkJCWZ3bm9kZSA9IGFjcGlfYWxsb2NfZndub2RlX3N0YXRpYygpOw0KPiA+DQo= 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, 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 D43B0C2B9F4 for ; Mon, 14 Jun 2021 12:37:48 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (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 7FE2961206 for ; Mon, 14 Jun 2021 12:37:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7FE2961206 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 4B619402D6; Mon, 14 Jun 2021 12:37:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5nbgXA-vDbVp; Mon, 14 Jun 2021 12:37:46 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id A92CC400B5; Mon, 14 Jun 2021 12:37:45 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 62151C000E; Mon, 14 Jun 2021 12:37:45 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 837BAC000B for ; Mon, 14 Jun 2021 12:37:44 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 591B1402D6 for ; Mon, 14 Jun 2021 12:37:44 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id IlEU40tLUk4I for ; Mon, 14 Jun 2021 12:37:42 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by smtp2.osuosl.org (Postfix) with ESMTPS id D8D7C400B5 for ; Mon, 14 Jun 2021 12:37:41 +0000 (UTC) Received: from dggemv703-chm.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4G3W9b42KPzZdp9; Mon, 14 Jun 2021 20:34:43 +0800 (CST) Received: from dggema722-chm.china.huawei.com (10.3.20.86) by dggemv703-chm.china.huawei.com (10.3.19.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Mon, 14 Jun 2021 20:37:37 +0800 Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by dggema722-chm.china.huawei.com (10.3.20.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Mon, 14 Jun 2021 20:37:36 +0800 Received: from lhreml710-chm.china.huawei.com ([169.254.81.184]) by lhreml710-chm.china.huawei.com ([169.254.81.184]) with mapi id 15.01.2176.012; Mon, 14 Jun 2021 13:37:34 +0100 From: Shameerali Kolothum Thodi To: Robin Murphy , "linux-arm-kernel@lists.infradead.org" , "linux-acpi@vger.kernel.org" , "iommu@lists.linux-foundation.org" Subject: RE: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing Thread-Topic: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing Thread-Index: AQHXUIxnG5hhFJByf0K0fNZqfWU2CasTaxEAgAAiFPA= Date: Mon, 14 Jun 2021 12:37:34 +0000 Message-ID: <5634877440314121a8b0ed7cc238fb63@huawei.com> References: <20210524110222.2212-1-shameerali.kolothum.thodi@huawei.com> <20210524110222.2212-2-shameerali.kolothum.thodi@huawei.com> <15c7fac0-11a8-0cdb-aac3-b5d8feb8f066@arm.com> In-Reply-To: <15c7fac0-11a8-0cdb-aac3-b5d8feb8f066@arm.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.47.26.251] MIME-Version: 1.0 X-CFilter-Loop: Reflected Cc: "jon@solid-run.com" , Linuxarm , "steven.price@arm.com" , "Guohanjun \(Hanjun Guo\)" , yangyicong , "Sami.Mujawar@arm.com" , wanghuiqiang X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" Hi Robin, > -----Original Message----- > From: Robin Murphy [mailto:robin.murphy@arm.com] > Sent: 14 June 2021 12:15 > To: Shameerali Kolothum Thodi ; > linux-arm-kernel@lists.infradead.org; linux-acpi@vger.kernel.org; > iommu@lists.linux-foundation.org > Cc: Linuxarm ; lorenzo.pieralisi@arm.com; > joro@8bytes.org; wanghuiqiang ; Guohanjun > (Hanjun Guo) ; steven.price@arm.com; > Sami.Mujawar@arm.com; jon@solid-run.com; eric.auger@redhat.com; > yangyicong > Subject: Re: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing > > On 2021-05-24 12:02, Shameer Kolothum wrote: > > Add support for parsing RMR node information from ACPI. > > Find associated stream id and smmu node info from the > > RMR node and populate a linked list with RMR memory > > descriptors. > > > > Signed-off-by: Shameer Kolothum > > > --- > > drivers/acpi/arm64/iort.c | 104 > +++++++++++++++++++++++++++++++++++++- > > 1 file changed, 103 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > > index 3912a1f6058e..fea1ffaedf3b 100644 > > --- a/drivers/acpi/arm64/iort.c > > +++ b/drivers/acpi/arm64/iort.c > > @@ -40,6 +40,19 @@ struct iort_fwnode { > > static LIST_HEAD(iort_fwnode_list); > > static DEFINE_SPINLOCK(iort_fwnode_lock); > > > > +/* > > + * One entry for IORT RMR. > > + */ > > +struct iort_rmr_entry { > > + struct list_head list; > > + u32 sid; > > + struct acpi_iort_node *smmu; > > + struct acpi_iort_rmr_desc *rmr_desc; > > + u32 flags; > > +}; > > + > > +static LIST_HEAD(iort_rmr_list); /* list of RMR regions from ACPI > */ > > + > > /** > > * iort_set_fwnode() - Create iort_fwnode and use it to register > > * iommu data in the iort_fwnode_list > > @@ -393,7 +406,8 @@ static struct acpi_iort_node > *iort_node_get_id(struct acpi_iort_node *node, > > if (node->type == ACPI_IORT_NODE_NAMED_COMPONENT || > > node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX || > > node->type == ACPI_IORT_NODE_SMMU_V3 || > > - node->type == ACPI_IORT_NODE_PMCG) { > > + node->type == ACPI_IORT_NODE_PMCG || > > + node->type == ACPI_IORT_NODE_RMR) { > > *id_out = map->output_base; > > return parent; > > } > > @@ -1660,6 +1674,91 @@ static void __init iort_enable_acs(struct > acpi_iort_node *iort_node) > > #else > > static inline void iort_enable_acs(struct acpi_iort_node *iort_node) { } > > #endif > > +static int iort_rmr_desc_valid(struct acpi_iort_rmr_desc *desc, u32 count) > > +{ > > + int i, j; > > + > > + for (i = 0; i < count; i++) { > > + u64 end, start = desc[i].base_address, length = desc[i].length; > > + > > + if (!IS_ALIGNED(start, SZ_64K) || !IS_ALIGNED(length, SZ_64K)) > > + return -EINVAL; > > We should certainly FW_BUG for this, but maybe it's OK to continue, > since all we should need to do is round our iommu_resv_regions to at > least PAGE_SIZE. That seems possibly better than ignoring them and > having things potentially blow up later (especially if an end user > exercises the system more thoroughly than the firmware developer tested > it, which in at least one case I've seen may be "at all"...) Ok. Will report FW_BUG but continue with a rounded addr/size. > > > + end = start + length - 1; > > + > > + /* Check for address overlap */ > > + for (j = i + 1; j < count; j++) { > > + u64 e_start = desc[j].base_address; > > + u64 e_end = e_start + desc[j].length - 1; > > + > > + if (start <= e_end && end >= e_start) > > + return -EINVAL; > > Similarly it's not *too* hard to trim overlaps; I guess it's really a > question of whether we want to bother :/ I guess then, we can just report it and ignore, pr_warn(FW_BUG, "Found overlapping rmr desc @...., but ignoring...\n" Thanks Shameer > > + } > > + } > > + > > + return 0; > > +} > > + > > +static int __init iort_parse_rmr(struct acpi_iort_node *iort_node) > > +{ > > + struct acpi_iort_node *smmu; > > + struct iort_rmr_entry *e; > > + struct acpi_iort_rmr *rmr; > > + struct acpi_iort_rmr_desc *rmr_desc; > > + u32 map_count = iort_node->mapping_count; > > + u32 sid; > > Nit: extra space. > > > + int i, ret = 0; > > + > > + if (iort_node->type != ACPI_IORT_NODE_RMR) > > + return 0; > > + > > + if (!iort_node->mapping_offset || map_count != 1) { > > Beware that there was some discussion about allowing multiple SIDs to > share an RMR descriptor, since there are potential use-cases which would > otherwise lead to excessive duplication (e.g. an MSI doorbell carveout > in a VM which would effectively apply to all possible PCI RIDs). I think > the conclusion we reached was that disallowing that was fairly > arbitrary, and could possibly be relaxed in future. It looks like the > design of things here could grow to fit that fairly easily though, so I > don't think it's a major concern. > > Robin. > > > + pr_err(FW_BUG "Invalid ID mapping, skipping RMR node %p\n", > > + iort_node); > > + return -EINVAL; > > + } > > + > > + /* Retrieve associated smmu and stream id */ > > + smmu = iort_node_get_id(iort_node, &sid, 0); > > + if (!smmu) { > > + pr_err(FW_BUG "Invalid SMMU reference, skipping RMR > node %p\n", > > + iort_node); > > + return -EINVAL; > > + } > > + > > + /* Retrieve RMR data */ > > + rmr = (struct acpi_iort_rmr *)iort_node->node_data; > > + if (!rmr->rmr_offset || !rmr->rmr_count) { > > + pr_err(FW_BUG "Invalid RMR descriptor array, skipping RMR > node %p\n", > > + iort_node); > > + return -EINVAL; > > + } > > + > > + rmr_desc = ACPI_ADD_PTR(struct acpi_iort_rmr_desc, iort_node, > > + rmr->rmr_offset); > > + > > + ret = iort_rmr_desc_valid(rmr_desc, rmr->rmr_count); > > + if (ret) { > > + pr_err(FW_BUG "Invalid RMR descriptor[%d] for node %p, > skipping...\n", > > + i, iort_node); > > + return ret; > > + } > > + > > + for (i = 0; i < rmr->rmr_count; i++, rmr_desc++) { > > + e = kmalloc(sizeof(*e), GFP_KERNEL); > > + if (!e) > > + return -ENOMEM; > > + > > + e->sid = sid; > > + e->smmu = smmu; > > + e->rmr_desc = rmr_desc; > > + e->flags = rmr->flags; > > + > > + list_add_tail(&e->list, &iort_rmr_list); > > + } > > + > > + return 0; > > +} > > > > static void __init iort_init_platform_devices(void) > > { > > @@ -1689,6 +1788,9 @@ static void __init iort_init_platform_devices(void) > > > > iort_enable_acs(iort_node); > > > > + if (iort_table->revision == 3) > > + iort_parse_rmr(iort_node); > > + > > ops = iort_get_dev_cfg(iort_node); > > if (ops) { > > fwnode = acpi_alloc_fwnode_static(); > > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu 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.9 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=unavailable 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 0BCCFC2B9F4 for ; Mon, 14 Jun 2021 12:39:26 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C12A561206 for ; Mon, 14 Jun 2021 12:39:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C12A561206 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.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=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Z9GUnaDke3dT67oOZ62Ry2L28mQmujM0DPqiXFRQXXM=; b=UA83v+GZqUGwTI STErCZULvxk9BPsGy8b+oqvZhM/kfb6TzNeeU0ID+Lao2cEYi+INwYAVghQqOTYgdbp622OkYsJqS nxbBoWcxQff0HwlY/gu3iybpyQQAl7JeonBJV9VgtFDCiKyJabMVu+EfihZa9iT6+QDbIL/LQzfsC NMkTnSrXtiqmtLu8HMcIMXdypxp9MkPpCr/ywj9wGo0rrWL8w690kSCJTLe65a9r2d0ccIJJP6NHn BjYOVHL6KzM2PBvz69FPDF7C3rkM4owIc0hH74pcYJactutPb4dID6WGqQ5N+C+E1+x0lmMFmsnjG 7YsqFXERoDNhn7HV6eqA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lslqk-00E5TX-Gs; Mon, 14 Jun 2021 12:37:54 +0000 Received: from szxga01-in.huawei.com ([45.249.212.187]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lslqg-00E5S6-76 for linux-arm-kernel@lists.infradead.org; Mon, 14 Jun 2021 12:37:52 +0000 Received: from dggemv703-chm.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4G3W9b42KPzZdp9; Mon, 14 Jun 2021 20:34:43 +0800 (CST) Received: from dggema722-chm.china.huawei.com (10.3.20.86) by dggemv703-chm.china.huawei.com (10.3.19.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2176.2; Mon, 14 Jun 2021 20:37:37 +0800 Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by dggema722-chm.china.huawei.com (10.3.20.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Mon, 14 Jun 2021 20:37:36 +0800 Received: from lhreml710-chm.china.huawei.com ([169.254.81.184]) by lhreml710-chm.china.huawei.com ([169.254.81.184]) with mapi id 15.01.2176.012; Mon, 14 Jun 2021 13:37:34 +0100 From: Shameerali Kolothum Thodi To: Robin Murphy , "linux-arm-kernel@lists.infradead.org" , "linux-acpi@vger.kernel.org" , "iommu@lists.linux-foundation.org" CC: Linuxarm , "lorenzo.pieralisi@arm.com" , "joro@8bytes.org" , wanghuiqiang , "Guohanjun (Hanjun Guo)" , "steven.price@arm.com" , "Sami.Mujawar@arm.com" , "jon@solid-run.com" , "eric.auger@redhat.com" , yangyicong Subject: RE: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing Thread-Topic: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing Thread-Index: AQHXUIxnG5hhFJByf0K0fNZqfWU2CasTaxEAgAAiFPA= Date: Mon, 14 Jun 2021 12:37:34 +0000 Message-ID: <5634877440314121a8b0ed7cc238fb63@huawei.com> References: <20210524110222.2212-1-shameerali.kolothum.thodi@huawei.com> <20210524110222.2212-2-shameerali.kolothum.thodi@huawei.com> <15c7fac0-11a8-0cdb-aac3-b5d8feb8f066@arm.com> In-Reply-To: <15c7fac0-11a8-0cdb-aac3-b5d8feb8f066@arm.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.47.26.251] MIME-Version: 1.0 X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210614_053750_656268_A2811A0C X-CRM114-Status: GOOD ( 38.58 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="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 Hi Robin, > -----Original Message----- > From: Robin Murphy [mailto:robin.murphy@arm.com] > Sent: 14 June 2021 12:15 > To: Shameerali Kolothum Thodi ; > linux-arm-kernel@lists.infradead.org; linux-acpi@vger.kernel.org; > iommu@lists.linux-foundation.org > Cc: Linuxarm ; lorenzo.pieralisi@arm.com; > joro@8bytes.org; wanghuiqiang ; Guohanjun > (Hanjun Guo) ; steven.price@arm.com; > Sami.Mujawar@arm.com; jon@solid-run.com; eric.auger@redhat.com; > yangyicong > Subject: Re: [PATCH v5 1/8] ACPI/IORT: Add support for RMR node parsing > > On 2021-05-24 12:02, Shameer Kolothum wrote: > > Add support for parsing RMR node information from ACPI. > > Find associated stream id and smmu node info from the > > RMR node and populate a linked list with RMR memory > > descriptors. > > > > Signed-off-by: Shameer Kolothum > > > --- > > drivers/acpi/arm64/iort.c | 104 > +++++++++++++++++++++++++++++++++++++- > > 1 file changed, 103 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > > index 3912a1f6058e..fea1ffaedf3b 100644 > > --- a/drivers/acpi/arm64/iort.c > > +++ b/drivers/acpi/arm64/iort.c > > @@ -40,6 +40,19 @@ struct iort_fwnode { > > static LIST_HEAD(iort_fwnode_list); > > static DEFINE_SPINLOCK(iort_fwnode_lock); > > > > +/* > > + * One entry for IORT RMR. > > + */ > > +struct iort_rmr_entry { > > + struct list_head list; > > + u32 sid; > > + struct acpi_iort_node *smmu; > > + struct acpi_iort_rmr_desc *rmr_desc; > > + u32 flags; > > +}; > > + > > +static LIST_HEAD(iort_rmr_list); /* list of RMR regions from ACPI > */ > > + > > /** > > * iort_set_fwnode() - Create iort_fwnode and use it to register > > * iommu data in the iort_fwnode_list > > @@ -393,7 +406,8 @@ static struct acpi_iort_node > *iort_node_get_id(struct acpi_iort_node *node, > > if (node->type == ACPI_IORT_NODE_NAMED_COMPONENT || > > node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX || > > node->type == ACPI_IORT_NODE_SMMU_V3 || > > - node->type == ACPI_IORT_NODE_PMCG) { > > + node->type == ACPI_IORT_NODE_PMCG || > > + node->type == ACPI_IORT_NODE_RMR) { > > *id_out = map->output_base; > > return parent; > > } > > @@ -1660,6 +1674,91 @@ static void __init iort_enable_acs(struct > acpi_iort_node *iort_node) > > #else > > static inline void iort_enable_acs(struct acpi_iort_node *iort_node) { } > > #endif > > +static int iort_rmr_desc_valid(struct acpi_iort_rmr_desc *desc, u32 count) > > +{ > > + int i, j; > > + > > + for (i = 0; i < count; i++) { > > + u64 end, start = desc[i].base_address, length = desc[i].length; > > + > > + if (!IS_ALIGNED(start, SZ_64K) || !IS_ALIGNED(length, SZ_64K)) > > + return -EINVAL; > > We should certainly FW_BUG for this, but maybe it's OK to continue, > since all we should need to do is round our iommu_resv_regions to at > least PAGE_SIZE. That seems possibly better than ignoring them and > having things potentially blow up later (especially if an end user > exercises the system more thoroughly than the firmware developer tested > it, which in at least one case I've seen may be "at all"...) Ok. Will report FW_BUG but continue with a rounded addr/size. > > > + end = start + length - 1; > > + > > + /* Check for address overlap */ > > + for (j = i + 1; j < count; j++) { > > + u64 e_start = desc[j].base_address; > > + u64 e_end = e_start + desc[j].length - 1; > > + > > + if (start <= e_end && end >= e_start) > > + return -EINVAL; > > Similarly it's not *too* hard to trim overlaps; I guess it's really a > question of whether we want to bother :/ I guess then, we can just report it and ignore, pr_warn(FW_BUG, "Found overlapping rmr desc @...., but ignoring...\n" Thanks Shameer > > + } > > + } > > + > > + return 0; > > +} > > + > > +static int __init iort_parse_rmr(struct acpi_iort_node *iort_node) > > +{ > > + struct acpi_iort_node *smmu; > > + struct iort_rmr_entry *e; > > + struct acpi_iort_rmr *rmr; > > + struct acpi_iort_rmr_desc *rmr_desc; > > + u32 map_count = iort_node->mapping_count; > > + u32 sid; > > Nit: extra space. > > > + int i, ret = 0; > > + > > + if (iort_node->type != ACPI_IORT_NODE_RMR) > > + return 0; > > + > > + if (!iort_node->mapping_offset || map_count != 1) { > > Beware that there was some discussion about allowing multiple SIDs to > share an RMR descriptor, since there are potential use-cases which would > otherwise lead to excessive duplication (e.g. an MSI doorbell carveout > in a VM which would effectively apply to all possible PCI RIDs). I think > the conclusion we reached was that disallowing that was fairly > arbitrary, and could possibly be relaxed in future. It looks like the > design of things here could grow to fit that fairly easily though, so I > don't think it's a major concern. > > Robin. > > > + pr_err(FW_BUG "Invalid ID mapping, skipping RMR node %p\n", > > + iort_node); > > + return -EINVAL; > > + } > > + > > + /* Retrieve associated smmu and stream id */ > > + smmu = iort_node_get_id(iort_node, &sid, 0); > > + if (!smmu) { > > + pr_err(FW_BUG "Invalid SMMU reference, skipping RMR > node %p\n", > > + iort_node); > > + return -EINVAL; > > + } > > + > > + /* Retrieve RMR data */ > > + rmr = (struct acpi_iort_rmr *)iort_node->node_data; > > + if (!rmr->rmr_offset || !rmr->rmr_count) { > > + pr_err(FW_BUG "Invalid RMR descriptor array, skipping RMR > node %p\n", > > + iort_node); > > + return -EINVAL; > > + } > > + > > + rmr_desc = ACPI_ADD_PTR(struct acpi_iort_rmr_desc, iort_node, > > + rmr->rmr_offset); > > + > > + ret = iort_rmr_desc_valid(rmr_desc, rmr->rmr_count); > > + if (ret) { > > + pr_err(FW_BUG "Invalid RMR descriptor[%d] for node %p, > skipping...\n", > > + i, iort_node); > > + return ret; > > + } > > + > > + for (i = 0; i < rmr->rmr_count; i++, rmr_desc++) { > > + e = kmalloc(sizeof(*e), GFP_KERNEL); > > + if (!e) > > + return -ENOMEM; > > + > > + e->sid = sid; > > + e->smmu = smmu; > > + e->rmr_desc = rmr_desc; > > + e->flags = rmr->flags; > > + > > + list_add_tail(&e->list, &iort_rmr_list); > > + } > > + > > + return 0; > > +} > > > > static void __init iort_init_platform_devices(void) > > { > > @@ -1689,6 +1788,9 @@ static void __init iort_init_platform_devices(void) > > > > iort_enable_acs(iort_node); > > > > + if (iort_table->revision == 3) > > + iort_parse_rmr(iort_node); > > + > > ops = iort_get_dev_cfg(iort_node); > > if (ops) { > > fwnode = acpi_alloc_fwnode_static(); > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel