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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT 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 A2219CA9EBC for ; Mon, 28 Oct 2019 08:28:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 788CB20B7C for ; Mon, 28 Oct 2019 08:28:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387445AbfJ1I2o (ORCPT ); Mon, 28 Oct 2019 04:28:44 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:65187 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387414AbfJ1I2n (ORCPT ); Mon, 28 Oct 2019 04:28:43 -0400 X-UUID: d01eab759fb646d5973c98ec934ee649-20191028 X-UUID: d01eab759fb646d5973c98ec934ee649-20191028 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1505586292; Mon, 28 Oct 2019 16:28:36 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 28 Oct 2019 16:28:33 +0800 Received: from localhost.localdomain (10.15.20.246) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 28 Oct 2019 16:28:32 +0800 From: Chao Hao To: Joerg Roedel , Rob Herring , Matthias Brugger CC: , , , , , , Jun Yan , Cui Zhang , Guangming Cao , Yong Wu , Anan Sun , Miles Chen , Chao Hao Subject: [PATCH 03/13] iommu/mediatek: Add mtk_iommu_pgtable structure Date: Mon, 28 Oct 2019 16:28:10 +0800 Message-ID: <20191028082820.20221-4-chao.hao@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20191028082820.20221-1-chao.hao@mediatek.com> References: <20191028082820.20221-1-chao.hao@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Start with this patch, we will change the SW architecture to support multiple domains. SW architecture will has a big change, so we need to modify a little bit by more than one patch. The new SW overall architecture is as below: iommu0 iommu1 | | ----------- | mtk_iommu_pgtable | ------------------------------------------ | | | mtk_iommu_domain1 mtk_iommu_domain2 mtk_iommu_domain3 | | | iommu_group1 iommu_group2 iommu_group3 | | | iommu_domain1 iommu_domain2 iommu_domain3 | | | iova region1(normal) iova region2(CCU) iova region3(VPU) For current structure, no matter how many iommus there are, they use the same page table to simplify the usage of module. In order to make the software architecture more explicit, this patch will create a global mtk_iommu_pgtable structure to describe page table and all the iommus use it. The diagram is as below: mtk_iommu_data1(MM) mtk_iommu_data2(APU) | | | | ------mtk_iommu_pgtable----- We need to create global mtk_iommu_pgtable to include all the iova regions firstly and special iova regions by divided based on it, so the information of pgtable needs to be created in device_group. Signed-off-by: Chao Hao --- drivers/iommu/mtk_iommu.c | 84 +++++++++++++++++++++++++++++++++++++++ drivers/iommu/mtk_iommu.h | 1 + 2 files changed, 85 insertions(+) diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c index f2847e661137..fcbde6b0f58d 100644 --- a/drivers/iommu/mtk_iommu.c +++ b/drivers/iommu/mtk_iommu.c @@ -123,6 +123,12 @@ struct mtk_iommu_domain { struct iommu_domain domain; }; +struct mtk_iommu_pgtable { + struct io_pgtable_cfg cfg; + struct io_pgtable_ops *iop; +}; + +static struct mtk_iommu_pgtable *share_pgtable; static const struct iommu_ops mtk_iommu_ops; /* @@ -170,6 +176,11 @@ static struct mtk_iommu_data *mtk_iommu_get_m4u_data(void) return NULL; } +static struct mtk_iommu_pgtable *mtk_iommu_get_pgtable(void) +{ + return share_pgtable; +} + static struct mtk_iommu_domain *to_mtk_domain(struct iommu_domain *dom) { return container_of(dom, struct mtk_iommu_domain, domain); @@ -322,6 +333,13 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_domain *dom) { struct mtk_iommu_data *data = mtk_iommu_get_m4u_data(); + if (data->pgtable) { + dom->cfg = data->pgtable->cfg; + dom->iop = data->pgtable->iop; + dom->domain.pgsize_bitmap = data->pgtable->cfg.pgsize_bitmap; + return 0; + } + dom->cfg = (struct io_pgtable_cfg) { .quirks = IO_PGTABLE_QUIRK_ARM_NS | IO_PGTABLE_QUIRK_NO_PERMS | @@ -345,6 +363,61 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_domain *dom) return 0; } +static struct mtk_iommu_pgtable *create_pgtable(struct mtk_iommu_data *data) +{ + struct mtk_iommu_pgtable *pgtable; + + pgtable = kzalloc(sizeof(*pgtable), GFP_KERNEL); + if (!pgtable) + return ERR_PTR(-ENOMEM); + + pgtable->cfg = (struct io_pgtable_cfg) { + .quirks = IO_PGTABLE_QUIRK_ARM_NS | + IO_PGTABLE_QUIRK_NO_PERMS | + IO_PGTABLE_QUIRK_TLBI_ON_MAP | + IO_PGTABLE_QUIRK_ARM_MTK_EXT, + .pgsize_bitmap = mtk_iommu_ops.pgsize_bitmap, + .ias = 32, + .oas = 34, + .tlb = &mtk_iommu_flush_ops, + .iommu_dev = data->dev, + }; + + pgtable->iop = alloc_io_pgtable_ops(ARM_V7S, &pgtable->cfg, data); + if (!pgtable->iop) { + dev_err(data->dev, "Failed to alloc io pgtable\n"); + return ERR_PTR(-EINVAL); + } + + dev_info(data->dev, "%s create pgtable done\n", __func__); + + return pgtable; +} + +static int mtk_iommu_attach_pgtable(struct mtk_iommu_data *data, + struct device *dev) +{ + struct mtk_iommu_pgtable *pgtable = mtk_iommu_get_pgtable(); + + /* create share pgtable */ + if (!pgtable) { + pgtable = create_pgtable(data); + if (IS_ERR(pgtable)) { + dev_err(data->dev, "Failed to create pgtable\n"); + return -ENOMEM; + } + + share_pgtable = pgtable; + } + + /* binding to pgtable */ + data->pgtable = pgtable; + + dev_info(data->dev, "m4u%d attach_pgtable done!\n", data->m4u_id); + + return 0; +} + static struct iommu_domain *mtk_iommu_domain_alloc(unsigned type) { struct mtk_iommu_domain *dom; @@ -508,10 +581,21 @@ static void mtk_iommu_remove_device(struct device *dev) static struct iommu_group *mtk_iommu_device_group(struct device *dev) { struct mtk_iommu_data *data = mtk_iommu_get_m4u_data(); + struct mtk_iommu_pgtable *pgtable; + int ret = 0; if (!data) return ERR_PTR(-ENODEV); + pgtable = data->pgtable; + if (!pgtable) { + ret = mtk_iommu_attach_pgtable(data, dev); + if (ret) { + dev_err(data->dev, "Failed to device_group\n"); + return NULL; + } + } + /* All the client devices are in the same m4u iommu-group */ if (!data->m4u_group) { data->m4u_group = iommu_group_alloc(); diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h index 132dc765a40b..dd5f19f78b62 100644 --- a/drivers/iommu/mtk_iommu.h +++ b/drivers/iommu/mtk_iommu.h @@ -61,6 +61,7 @@ struct mtk_iommu_data { struct clk *bclk; phys_addr_t protect_base; /* protect memory base */ struct mtk_iommu_suspend_reg reg; + struct mtk_iommu_pgtable *pgtable; struct mtk_iommu_domain *m4u_dom; struct iommu_group *m4u_group; bool enable_4GB; -- 2.18.0 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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HTML_MESSAGE,INCLUDES_PATCH,MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT 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 D88F4CA9EC0 for ; Mon, 28 Oct 2019 11:21:16 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (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 B29BF205ED for ; Mon, 28 Oct 2019 11:21:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B29BF205ED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 5A160110D; Mon, 28 Oct 2019 11:21:02 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id F185BB0B for ; Mon, 28 Oct 2019 08:28:41 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailgw01.mediatek.com (unknown [210.61.82.183]) by smtp1.linuxfoundation.org (Postfix) with ESMTP id 936DE63D for ; Mon, 28 Oct 2019 08:28:40 +0000 (UTC) X-UUID: d01eab759fb646d5973c98ec934ee649-20191028 X-UUID: d01eab759fb646d5973c98ec934ee649-20191028 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1505586292; Mon, 28 Oct 2019 16:28:36 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 28 Oct 2019 16:28:33 +0800 Received: from localhost.localdomain (10.15.20.246) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 28 Oct 2019 16:28:32 +0800 From: Chao Hao To: Joerg Roedel , Rob Herring , Matthias Brugger Subject: [PATCH 03/13] iommu/mediatek: Add mtk_iommu_pgtable structure Date: Mon, 28 Oct 2019 16:28:10 +0800 Message-ID: <20191028082820.20221-4-chao.hao@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20191028082820.20221-1-chao.hao@mediatek.com> References: <20191028082820.20221-1-chao.hao@mediatek.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 28 Oct 2019 11:21:00 +0000 Cc: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, linux-kernel@vger.kernel.org, Chao Hao , iommu@lists.linux-foundation.org, linux-mediatek@lists.infradead.org, Miles Chen , linux-arm-kernel@lists.infradead.org, Guangming Cao X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============5030092278456602411==" Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org --===============5030092278456602411== Content-Type: multipart/alternative; boundary="__=_Part_Boundary_004_1342251543.824474493" --__=_Part_Boundary_004_1342251543.824474493 Content-Type: text/html Content-Transfer-Encoding: base64 PHByZT4NClN0YXJ0IHdpdGggdGhpcyBwYXRjaCwgd2Ugd2lsbCBjaGFuZ2UgdGhlIFNXIGFyY2hp dGVjdHVyZQ0KdG8gc3VwcG9ydCBtdWx0aXBsZSBkb21haW5zLiBTVyBhcmNoaXRlY3R1cmUgd2ls bCBoYXMgYSBiaWcgY2hhbmdlLA0Kc28gd2UgbmVlZCB0byBtb2RpZnkgYSBsaXR0bGUgYml0IGJ5 IG1vcmUgdGhhbiBvbmUgcGF0Y2guDQpUaGUgbmV3IFNXIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGlz IGFzIGJlbG93Og0KDQoJCQkJaW9tbXUwICAgaW9tbXUxDQoJCQkJICB8CSAgICB8DQoJCQkJICAt LS0tLS0tLS0tLQ0KCQkJCSAgICAgICB8DQoJCQkJbXRrX2lvbW11X3BndGFibGUNCgkJCQkgICAg ICAgfA0KCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJCQl8 CQkgICAgIHwJCQkgfA0KCQltdGtfaW9tbXVfZG9tYWluMSAgIG10a19pb21tdV9kb21haW4yICBt dGtfaW9tbXVfZG9tYWluMw0KCQkJfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgICB8DQoJCSAgIGlvbW11X2dyb3VwMSAgICAgICAgIGlvbW11X2dyb3VwMiAgICAgICAgaW9t bXVfZ3JvdXAzDQoJCQl8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwN CgkJICAgaW9tbXVfZG9tYWluMSAgICAgICAgaW9tbXVfZG9tYWluMgkgICAgaW9tbXVfZG9tYWlu Mw0KCQkJfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8DQoJCSAgaW92 YSByZWdpb24xKG5vcm1hbCkgaW92YSByZWdpb24yKENDVSkgICBpb3ZhIHJlZ2lvbjMoVlBVKQ0K DQpGb3IgY3VycmVudCBzdHJ1Y3R1cmUsIG5vIG1hdHRlciBob3cgbWFueSBpb21tdXMgdGhlcmUg YXJlLA0KdGhleSB1c2UgdGhlIHNhbWUgcGFnZSB0YWJsZSB0byBzaW1wbGlmeSB0aGUgdXNhZ2Ug b2YgbW9kdWxlLg0KSW4gb3JkZXIgdG8gbWFrZSB0aGUgc29mdHdhcmUgYXJjaGl0ZWN0dXJlIG1v cmUgZXhwbGljaXQsIHRoaXMNCnBhdGNoIHdpbGwgY3JlYXRlIGEgZ2xvYmFsIG10a19pb21tdV9w Z3RhYmxlIHN0cnVjdHVyZSB0byBkZXNjcmliZQ0KcGFnZSB0YWJsZSBhbmQgYWxsIHRoZSBpb21t dXMgdXNlIGl0Lg0KVGhlIGRpYWdyYW0gaXMgYXMgYmVsb3c6DQoNCgltdGtfaW9tbXVfZGF0YTEo TU0pICAgICAgIG10a19pb21tdV9kYXRhMihBUFUpDQoJCXwJCQkgICB8DQoJCXwJCQkgICB8DQoJ CS0tLS0tLW10a19pb21tdV9wZ3RhYmxlLS0tLS0NCg0KV2UgbmVlZCB0byBjcmVhdGUgZ2xvYmFs IG10a19pb21tdV9wZ3RhYmxlIHRvIGluY2x1ZGUgYWxsIHRoZSBpb3ZhDQpyZWdpb25zIGZpcnN0 bHkgYW5kIHNwZWNpYWwgaW92YSByZWdpb25zIGJ5IGRpdmlkZWQgYmFzZWQgb24gaXQsDQpzbyB0 aGUgaW5mb3JtYXRpb24gb2YgcGd0YWJsZSBuZWVkcyB0byBiZSBjcmVhdGVkIGluIGRldmljZV9n cm91cC4NCg0KU2lnbmVkLW9mZi1ieTogQ2hhbyBIYW8gJmx0O2NoYW8uaGFvQG1lZGlhdGVrLmNv bSZndDsNCi0tLQ0KIGRyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmMgfCA4NCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL2lvbW11L210a19pb21tdS5oIHwg IDEgKw0KIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKQ0KDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmMNCmlu ZGV4IGYyODQ3ZTY2MTEzNy4uZmNiZGU2YjBmNThkIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9pb21t dS9tdGtfaW9tbXUuYw0KKysrIGIvZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuYw0KQEAgLTEyMyw2 ICsxMjMsMTIgQEAgc3RydWN0IG10a19pb21tdV9kb21haW4gew0KIAlzdHJ1Y3QgaW9tbXVfZG9t YWluCQlkb21haW47DQogfTsNCiANCitzdHJ1Y3QgbXRrX2lvbW11X3BndGFibGUgew0KKwlzdHJ1 Y3QgaW9fcGd0YWJsZV9jZmcJY2ZnOw0KKwlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMJKmlvcDsNCit9 Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgbXRrX2lvbW11X3BndGFibGUgKnNoYXJlX3BndGFibGU7DQog c3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9vcHMgbXRrX2lvbW11X29wczsNCiANCiAvKg0KQEAg LTE3MCw2ICsxNzYsMTEgQEAgc3RhdGljIHN0cnVjdCBtdGtfaW9tbXVfZGF0YSAqbXRrX2lvbW11 X2dldF9tNHVfZGF0YSh2b2lkKQ0KIAlyZXR1cm4gTlVMTDsNCiB9DQogDQorc3RhdGljIHN0cnVj dCBtdGtfaW9tbXVfcGd0YWJsZSAqbXRrX2lvbW11X2dldF9wZ3RhYmxlKHZvaWQpDQorew0KKwly ZXR1cm4gc2hhcmVfcGd0YWJsZTsNCit9DQorDQogc3RhdGljIHN0cnVjdCBtdGtfaW9tbXVfZG9t YWluICp0b19tdGtfZG9tYWluKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbSkNCiB7DQogCXJldHVy biBjb250YWluZXJfb2YoZG9tLCBzdHJ1Y3QgbXRrX2lvbW11X2RvbWFpbiwgZG9tYWluKTsNCkBA IC0zMjIsNiArMzMzLDEzIEBAIHN0YXRpYyBpbnQgbXRrX2lvbW11X2RvbWFpbl9maW5hbGlzZShz dHJ1Y3QgbXRrX2lvbW11X2RvbWFpbiAqZG9tKQ0KIHsNCiAJc3RydWN0IG10a19pb21tdV9kYXRh ICpkYXRhID0gbXRrX2lvbW11X2dldF9tNHVfZGF0YSgpOw0KIA0KKwlpZiAoZGF0YS0mZ3Q7cGd0 YWJsZSkgew0KKwkJZG9tLSZndDtjZmcgPSBkYXRhLSZndDtwZ3RhYmxlLSZndDtjZmc7DQorCQlk b20tJmd0O2lvcCA9IGRhdGEtJmd0O3BndGFibGUtJmd0O2lvcDsNCisJCWRvbS0mZ3Q7ZG9tYWlu LnBnc2l6ZV9iaXRtYXAgPSBkYXRhLSZndDtwZ3RhYmxlLSZndDtjZmcucGdzaXplX2JpdG1hcDsN CisJCXJldHVybiAwOw0KKwl9DQorDQogCWRvbS0mZ3Q7Y2ZnID0gKHN0cnVjdCBpb19wZ3RhYmxl X2NmZykgew0KIAkJLnF1aXJrcyA9IElPX1BHVEFCTEVfUVVJUktfQVJNX05TIHwNCiAJCQlJT19Q R1RBQkxFX1FVSVJLX05PX1BFUk1TIHwNCkBAIC0zNDUsNiArMzYzLDYxIEBAIHN0YXRpYyBpbnQg bXRrX2lvbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgbXRrX2lvbW11X2RvbWFpbiAqZG9tKQ0K IAlyZXR1cm4gMDsNCiB9DQogDQorc3RhdGljIHN0cnVjdCBtdGtfaW9tbXVfcGd0YWJsZSAqY3Jl YXRlX3BndGFibGUoc3RydWN0IG10a19pb21tdV9kYXRhICpkYXRhKQ0KK3sNCisJc3RydWN0IG10 a19pb21tdV9wZ3RhYmxlICpwZ3RhYmxlOw0KKw0KKwlwZ3RhYmxlID0ga3phbGxvYyhzaXplb2Yo KnBndGFibGUpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFwZ3RhYmxlKQ0KKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7DQorDQorCXBndGFibGUtJmd0O2NmZyA9IChzdHJ1Y3QgaW9fcGd0YWJsZV9j ZmcpIHsNCisJCS5xdWlya3MgPSBJT19QR1RBQkxFX1FVSVJLX0FSTV9OUyB8DQorCQkJSU9fUEdU QUJMRV9RVUlSS19OT19QRVJNUyB8DQorCQkJSU9fUEdUQUJMRV9RVUlSS19UTEJJX09OX01BUCB8 DQorCQkJSU9fUEdUQUJMRV9RVUlSS19BUk1fTVRLX0VYVCwNCisJCS5wZ3NpemVfYml0bWFwID0g bXRrX2lvbW11X29wcy5wZ3NpemVfYml0bWFwLA0KKwkJLmlhcyA9IDMyLA0KKwkJLm9hcyA9IDM0 LA0KKwkJLnRsYiA9ICZhbXA7bXRrX2lvbW11X2ZsdXNoX29wcywNCisJCS5pb21tdV9kZXYgPSBk YXRhLSZndDtkZXYsDQorCX07DQorDQorCXBndGFibGUtJmd0O2lvcCA9IGFsbG9jX2lvX3BndGFi bGVfb3BzKEFSTV9WN1MsICZhbXA7cGd0YWJsZS0mZ3Q7Y2ZnLCBkYXRhKTsNCisJaWYgKCFwZ3Rh YmxlLSZndDtpb3ApIHsNCisJCWRldl9lcnIoZGF0YS0mZ3Q7ZGV2LCAmcXVvdDtGYWlsZWQgdG8g YWxsb2MgaW8gcGd0YWJsZVxuJnF1b3Q7KTsNCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0K Kwl9DQorDQorCWRldl9pbmZvKGRhdGEtJmd0O2RldiwgJnF1b3Q7JXMgY3JlYXRlIHBndGFibGUg ZG9uZVxuJnF1b3Q7LCBfX2Z1bmNfXyk7DQorDQorCXJldHVybiBwZ3RhYmxlOw0KK30NCisNCitz dGF0aWMgaW50IG10a19pb21tdV9hdHRhY2hfcGd0YWJsZShzdHJ1Y3QgbXRrX2lvbW11X2RhdGEg KmRhdGEsDQorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgbXRrX2lv bW11X3BndGFibGUgKnBndGFibGUgPSBtdGtfaW9tbXVfZ2V0X3BndGFibGUoKTsNCisNCisJLyog Y3JlYXRlIHNoYXJlIHBndGFibGUgKi8NCisJaWYgKCFwZ3RhYmxlKSB7DQorCQlwZ3RhYmxlID0g Y3JlYXRlX3BndGFibGUoZGF0YSk7DQorCQlpZiAoSVNfRVJSKHBndGFibGUpKSB7DQorCQkJZGV2 X2VycihkYXRhLSZndDtkZXYsICZxdW90O0ZhaWxlZCB0byBjcmVhdGUgcGd0YWJsZVxuJnF1b3Q7 KTsNCisJCQlyZXR1cm4gLUVOT01FTTsNCisJCX0NCisNCisJCXNoYXJlX3BndGFibGUgPSBwZ3Rh YmxlOw0KKwl9DQorDQorCS8qIGJpbmRpbmcgdG8gcGd0YWJsZSAqLw0KKwlkYXRhLSZndDtwZ3Rh YmxlID0gcGd0YWJsZTsNCisNCisJZGV2X2luZm8oZGF0YS0mZ3Q7ZGV2LCAmcXVvdDttNHUlZCBh dHRhY2hfcGd0YWJsZSBkb25lIVxuJnF1b3Q7LCBkYXRhLSZndDttNHVfaWQpOw0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQogc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKm10a19pb21tdV9kb21h aW5fYWxsb2ModW5zaWduZWQgdHlwZSkNCiB7DQogCXN0cnVjdCBtdGtfaW9tbXVfZG9tYWluICpk b207DQpAQCAtNTA4LDEwICs1ODEsMjEgQEAgc3RhdGljIHZvaWQgbXRrX2lvbW11X3JlbW92ZV9k ZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQ0KIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfZ3JvdXAgKm10 a19pb21tdV9kZXZpY2VfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2KQ0KIHsNCiAJc3RydWN0IG10 a19pb21tdV9kYXRhICpkYXRhID0gbXRrX2lvbW11X2dldF9tNHVfZGF0YSgpOw0KKwlzdHJ1Y3Qg bXRrX2lvbW11X3BndGFibGUgKnBndGFibGU7DQorCWludCByZXQgPSAwOw0KIA0KIAlpZiAoIWRh dGEpDQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsNCiANCisJcGd0YWJsZSA9IGRhdGEtJmd0 O3BndGFibGU7DQorCWlmICghcGd0YWJsZSkgew0KKwkJcmV0ID0gbXRrX2lvbW11X2F0dGFjaF9w Z3RhYmxlKGRhdGEsIGRldik7DQorCQlpZiAocmV0KSB7DQorCQkJZGV2X2VycihkYXRhLSZndDtk ZXYsICZxdW90O0ZhaWxlZCB0byBkZXZpY2VfZ3JvdXBcbiZxdW90Oyk7DQorCQkJcmV0dXJuIE5V TEw7DQorCQl9DQorCX0NCisNCiAJLyogQWxsIHRoZSBjbGllbnQgZGV2aWNlcyBhcmUgaW4gdGhl IHNhbWUgbTR1IGlvbW11LWdyb3VwICovDQogCWlmICghZGF0YS0mZ3Q7bTR1X2dyb3VwKSB7DQog CQlkYXRhLSZndDttNHVfZ3JvdXAgPSBpb21tdV9ncm91cF9hbGxvYygpOw0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmggYi9kcml2ZXJzL2lvbW11L210a19pb21tdS5oDQpp bmRleCAxMzJkYzc2NWE0MGIuLmRkNWYxOWY3OGI2MiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvaW9t bXUvbXRrX2lvbW11LmgNCisrKyBiL2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmgNCkBAIC02MSw2 ICs2MSw3IEBAIHN0cnVjdCBtdGtfaW9tbXVfZGF0YSB7DQogCXN0cnVjdCBjbGsJCQkqYmNsazsN CiAJcGh5c19hZGRyX3QJCQlwcm90ZWN0X2Jhc2U7IC8qIHByb3RlY3QgbWVtb3J5IGJhc2UgKi8N CiAJc3RydWN0IG10a19pb21tdV9zdXNwZW5kX3JlZwlyZWc7DQorCXN0cnVjdCBtdGtfaW9tbXVf cGd0YWJsZQkqcGd0YWJsZTsNCiAJc3RydWN0IG10a19pb21tdV9kb21haW4JCSptNHVfZG9tOw0K IAlzdHJ1Y3QgaW9tbXVfZ3JvdXAJCSptNHVfZ3JvdXA7DQogCWJvb2wgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW5hYmxlXzRHQjsNCi0tIA0KMi4xOC4wDQoNCjwvcHJlPjwhLS10eXBlOnRl eHQtLT48IS0tey0tPjxwcmU+KioqKioqKioqKioqKiBNRURJQVRFSyBDb25maWRlbnRpYWxpdHkg Tm90aWNlDQogKioqKioqKioqKioqKioqKioqKioNClRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQg aW4gdGhpcyBlLW1haWwgbWVzc2FnZSAoaW5jbHVkaW5nIGFueSANCmF0dGFjaG1lbnRzKSBtYXkg YmUgY29uZmlkZW50aWFsLCBwcm9wcmlldGFyeSwgcHJpdmlsZWdlZCwgb3Igb3RoZXJ3aXNlDQpl eGVtcHQgZnJvbSBkaXNjbG9zdXJlIHVuZGVyIGFwcGxpY2FibGUgbGF3cy4gSXQgaXMgaW50ZW5k ZWQgdG8gYmUgDQpjb252ZXllZCBvbmx5IHRvIHRoZSBkZXNpZ25hdGVkIHJlY2lwaWVudChzKS4g QW55IHVzZSwgZGlzc2VtaW5hdGlvbiwgDQpkaXN0cmlidXRpb24sIHByaW50aW5nLCByZXRhaW5p bmcgb3IgY29weWluZyBvZiB0aGlzIGUtbWFpbCAoaW5jbHVkaW5nIGl0cyANCmF0dGFjaG1lbnRz KSBieSB1bmludGVuZGVkIHJlY2lwaWVudChzKSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkIGFuZCBt YXkgDQpiZSB1bmxhd2Z1bC4gSWYgeW91IGFyZSBub3QgYW4gaW50ZW5kZWQgcmVjaXBpZW50IG9m IHRoaXMgZS1tYWlsLCBvciBiZWxpZXZlDQogDQp0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMg ZS1tYWlsIGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgDQppbW1lZGlhdGVseSAo YnkgcmVwbHlpbmcgdG8gdGhpcyBlLW1haWwpLCBkZWxldGUgYW55IGFuZCBhbGwgY29waWVzIG9m IA0KdGhpcyBlLW1haWwgKGluY2x1ZGluZyBhbnkgYXR0YWNobWVudHMpIGZyb20geW91ciBzeXN0 ZW0sIGFuZCBkbyBub3QNCmRpc2Nsb3NlIHRoZSBjb250ZW50IG9mIHRoaXMgZS1tYWlsIHRvIGFu eSBvdGhlciBwZXJzb24uIFRoYW5rIHlvdSENCjwvcHJlPjwhLS19LS0+ --__=_Part_Boundary_004_1342251543.824474493 Content-Type: text/plain Content-Transfer-Encoding: base64 U3RhcnQgd2l0aCB0aGlzIHBhdGNoLCB3ZSB3aWxsIGNoYW5nZSB0aGUgU1cgYXJjaGl0ZWN0dXJl DQp0byBzdXBwb3J0IG11bHRpcGxlIGRvbWFpbnMuIFNXIGFyY2hpdGVjdHVyZSB3aWxsIGhhcyBh IGJpZyBjaGFuZ2UsDQpzbyB3ZSBuZWVkIHRvIG1vZGlmeSBhIGxpdHRsZSBiaXQgYnkgbW9yZSB0 aGFuIG9uZSBwYXRjaC4NClRoZSBuZXcgU1cgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgaXMgYXMgYmVs b3c6DQoNCgkJCQlpb21tdTAgICBpb21tdTENCgkJCQkgIHwJICAgIHwNCgkJCQkgIC0tLS0tLS0t LS0tDQoJCQkJICAgICAgIHwNCgkJCQltdGtfaW9tbXVfcGd0YWJsZQ0KCQkJCSAgICAgICB8DQoJ CQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkJCXwJCSAgICAg fAkJCSB8DQoJCW10a19pb21tdV9kb21haW4xICAgbXRrX2lvbW11X2RvbWFpbjIgIG10a19pb21t dV9kb21haW4zDQoJCQl8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwN CgkJICAgaW9tbXVfZ3JvdXAxICAgICAgICAgaW9tbXVfZ3JvdXAyICAgICAgICBpb21tdV9ncm91 cDMNCgkJCXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfA0KCQkgICBp b21tdV9kb21haW4xICAgICAgICBpb21tdV9kb21haW4yCSAgICBpb21tdV9kb21haW4zDQoJCQl8 ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwNCgkJICBpb3ZhIHJlZ2lv bjEobm9ybWFsKSBpb3ZhIHJlZ2lvbjIoQ0NVKSAgIGlvdmEgcmVnaW9uMyhWUFUpDQoNCkZvciBj dXJyZW50IHN0cnVjdHVyZSwgbm8gbWF0dGVyIGhvdyBtYW55IGlvbW11cyB0aGVyZSBhcmUsDQp0 aGV5IHVzZSB0aGUgc2FtZSBwYWdlIHRhYmxlIHRvIHNpbXBsaWZ5IHRoZSB1c2FnZSBvZiBtb2R1 bGUuDQpJbiBvcmRlciB0byBtYWtlIHRoZSBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUgbW9yZSBleHBs aWNpdCwgdGhpcw0KcGF0Y2ggd2lsbCBjcmVhdGUgYSBnbG9iYWwgbXRrX2lvbW11X3BndGFibGUg c3RydWN0dXJlIHRvIGRlc2NyaWJlDQpwYWdlIHRhYmxlIGFuZCBhbGwgdGhlIGlvbW11cyB1c2Ug aXQuDQpUaGUgZGlhZ3JhbSBpcyBhcyBiZWxvdzoNCg0KCW10a19pb21tdV9kYXRhMShNTSkgICAg ICAgbXRrX2lvbW11X2RhdGEyKEFQVSkNCgkJfAkJCSAgIHwNCgkJfAkJCSAgIHwNCgkJLS0tLS0t bXRrX2lvbW11X3BndGFibGUtLS0tLQ0KDQpXZSBuZWVkIHRvIGNyZWF0ZSBnbG9iYWwgbXRrX2lv bW11X3BndGFibGUgdG8gaW5jbHVkZSBhbGwgdGhlIGlvdmENCnJlZ2lvbnMgZmlyc3RseSBhbmQg c3BlY2lhbCBpb3ZhIHJlZ2lvbnMgYnkgZGl2aWRlZCBiYXNlZCBvbiBpdCwNCnNvIHRoZSBpbmZv cm1hdGlvbiBvZiBwZ3RhYmxlIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaW4gZGV2aWNlX2dyb3VwLg0K DQpTaWduZWQtb2ZmLWJ5OiBDaGFvIEhhbyA8Y2hhby5oYW9AbWVkaWF0ZWsuY29tPg0KLS0tDQog ZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuYyB8IDg0ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KIGRyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmggfCAgMSArDQogMiBmaWxl cyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11 L210a19pb21tdS5jIGIvZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuYw0KaW5kZXggZjI4NDdlNjYx MTM3Li5mY2JkZTZiMGY1OGQgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2lvbW11L210a19pb21tdS5j DQorKysgYi9kcml2ZXJzL2lvbW11L210a19pb21tdS5jDQpAQCAtMTIzLDYgKzEyMywxMiBAQCBz dHJ1Y3QgbXRrX2lvbW11X2RvbWFpbiB7DQogCXN0cnVjdCBpb21tdV9kb21haW4JCWRvbWFpbjsN CiB9Ow0KIA0KK3N0cnVjdCBtdGtfaW9tbXVfcGd0YWJsZSB7DQorCXN0cnVjdCBpb19wZ3RhYmxl X2NmZwljZmc7DQorCXN0cnVjdCBpb19wZ3RhYmxlX29wcwkqaW9wOw0KK307DQorDQorc3RhdGlj IHN0cnVjdCBtdGtfaW9tbXVfcGd0YWJsZSAqc2hhcmVfcGd0YWJsZTsNCiBzdGF0aWMgY29uc3Qg c3RydWN0IGlvbW11X29wcyBtdGtfaW9tbXVfb3BzOw0KIA0KIC8qDQpAQCAtMTcwLDYgKzE3Niwx MSBAQCBzdGF0aWMgc3RydWN0IG10a19pb21tdV9kYXRhICptdGtfaW9tbXVfZ2V0X200dV9kYXRh KHZvaWQpDQogCXJldHVybiBOVUxMOw0KIH0NCiANCitzdGF0aWMgc3RydWN0IG10a19pb21tdV9w Z3RhYmxlICptdGtfaW9tbXVfZ2V0X3BndGFibGUodm9pZCkNCit7DQorCXJldHVybiBzaGFyZV9w Z3RhYmxlOw0KK30NCisNCiBzdGF0aWMgc3RydWN0IG10a19pb21tdV9kb21haW4gKnRvX210a19k b21haW4oc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tKQ0KIHsNCiAJcmV0dXJuIGNvbnRhaW5lcl9v Zihkb20sIHN0cnVjdCBtdGtfaW9tbXVfZG9tYWluLCBkb21haW4pOw0KQEAgLTMyMiw2ICszMzMs MTMgQEAgc3RhdGljIGludCBtdGtfaW9tbXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBtdGtfaW9t bXVfZG9tYWluICpkb20pDQogew0KIAlzdHJ1Y3QgbXRrX2lvbW11X2RhdGEgKmRhdGEgPSBtdGtf aW9tbXVfZ2V0X200dV9kYXRhKCk7DQogDQorCWlmIChkYXRhLT5wZ3RhYmxlKSB7DQorCQlkb20t PmNmZyA9IGRhdGEtPnBndGFibGUtPmNmZzsNCisJCWRvbS0+aW9wID0gZGF0YS0+cGd0YWJsZS0+ aW9wOw0KKwkJZG9tLT5kb21haW4ucGdzaXplX2JpdG1hcCA9IGRhdGEtPnBndGFibGUtPmNmZy5w Z3NpemVfYml0bWFwOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCiAJZG9tLT5jZmcgPSAoc3RydWN0 IGlvX3BndGFibGVfY2ZnKSB7DQogCQkucXVpcmtzID0gSU9fUEdUQUJMRV9RVUlSS19BUk1fTlMg fA0KIAkJCUlPX1BHVEFCTEVfUVVJUktfTk9fUEVSTVMgfA0KQEAgLTM0NSw2ICszNjMsNjEgQEAg c3RhdGljIGludCBtdGtfaW9tbXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBtdGtfaW9tbXVfZG9t YWluICpkb20pDQogCXJldHVybiAwOw0KIH0NCiANCitzdGF0aWMgc3RydWN0IG10a19pb21tdV9w Z3RhYmxlICpjcmVhdGVfcGd0YWJsZShzdHJ1Y3QgbXRrX2lvbW11X2RhdGEgKmRhdGEpDQorew0K KwlzdHJ1Y3QgbXRrX2lvbW11X3BndGFibGUgKnBndGFibGU7DQorDQorCXBndGFibGUgPSBremFs bG9jKHNpemVvZigqcGd0YWJsZSksIEdGUF9LRVJORUwpOw0KKwlpZiAoIXBndGFibGUpDQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCisNCisJcGd0YWJsZS0+Y2ZnID0gKHN0cnVjdCBpb19w Z3RhYmxlX2NmZykgew0KKwkJLnF1aXJrcyA9IElPX1BHVEFCTEVfUVVJUktfQVJNX05TIHwNCisJ CQlJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1TIHwNCisJCQlJT19QR1RBQkxFX1FVSVJLX1RMQklf T05fTUFQIHwNCisJCQlJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfRVhULA0KKwkJLnBnc2l6ZV9i aXRtYXAgPSBtdGtfaW9tbXVfb3BzLnBnc2l6ZV9iaXRtYXAsDQorCQkuaWFzID0gMzIsDQorCQku b2FzID0gMzQsDQorCQkudGxiID0gJm10a19pb21tdV9mbHVzaF9vcHMsDQorCQkuaW9tbXVfZGV2 ID0gZGF0YS0+ZGV2LA0KKwl9Ow0KKw0KKwlwZ3RhYmxlLT5pb3AgPSBhbGxvY19pb19wZ3RhYmxl X29wcyhBUk1fVjdTLCAmcGd0YWJsZS0+Y2ZnLCBkYXRhKTsNCisJaWYgKCFwZ3RhYmxlLT5pb3Ap IHsNCisJCWRldl9lcnIoZGF0YS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jIGlvIHBndGFibGVcbiIp Ow0KKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQorCX0NCisNCisJZGV2X2luZm8oZGF0YS0+ ZGV2LCAiJXMgY3JlYXRlIHBndGFibGUgZG9uZVxuIiwgX19mdW5jX18pOw0KKw0KKwlyZXR1cm4g cGd0YWJsZTsNCit9DQorDQorc3RhdGljIGludCBtdGtfaW9tbXVfYXR0YWNoX3BndGFibGUoc3Ry dWN0IG10a19pb21tdV9kYXRhICpkYXRhLA0KKwkJCQkgICAgc3RydWN0IGRldmljZSAqZGV2KQ0K K3sNCisJc3RydWN0IG10a19pb21tdV9wZ3RhYmxlICpwZ3RhYmxlID0gbXRrX2lvbW11X2dldF9w Z3RhYmxlKCk7DQorDQorCS8qIGNyZWF0ZSBzaGFyZSBwZ3RhYmxlICovDQorCWlmICghcGd0YWJs ZSkgew0KKwkJcGd0YWJsZSA9IGNyZWF0ZV9wZ3RhYmxlKGRhdGEpOw0KKwkJaWYgKElTX0VSUihw Z3RhYmxlKSkgew0KKwkJCWRldl9lcnIoZGF0YS0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBwZ3Rh YmxlXG4iKTsNCisJCQlyZXR1cm4gLUVOT01FTTsNCisJCX0NCisNCisJCXNoYXJlX3BndGFibGUg PSBwZ3RhYmxlOw0KKwl9DQorDQorCS8qIGJpbmRpbmcgdG8gcGd0YWJsZSAqLw0KKwlkYXRhLT5w Z3RhYmxlID0gcGd0YWJsZTsNCisNCisJZGV2X2luZm8oZGF0YS0+ZGV2LCAibTR1JWQgYXR0YWNo X3BndGFibGUgZG9uZSFcbiIsIGRhdGEtPm00dV9pZCk7DQorDQorCXJldHVybiAwOw0KK30NCisN CiBzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqbXRrX2lvbW11X2RvbWFpbl9hbGxvYyh1bnNp Z25lZCB0eXBlKQ0KIHsNCiAJc3RydWN0IG10a19pb21tdV9kb21haW4gKmRvbTsNCkBAIC01MDgs MTAgKzU4MSwyMSBAQCBzdGF0aWMgdm9pZCBtdGtfaW9tbXVfcmVtb3ZlX2RldmljZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpDQogc3RhdGljIHN0cnVjdCBpb21tdV9ncm91cCAqbXRrX2lvbW11X2Rldmlj ZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYpDQogew0KIAlzdHJ1Y3QgbXRrX2lvbW11X2RhdGEg KmRhdGEgPSBtdGtfaW9tbXVfZ2V0X200dV9kYXRhKCk7DQorCXN0cnVjdCBtdGtfaW9tbXVfcGd0 YWJsZSAqcGd0YWJsZTsNCisJaW50IHJldCA9IDA7DQogDQogCWlmICghZGF0YSkNCiAJCXJldHVy biBFUlJfUFRSKC1FTk9ERVYpOw0KIA0KKwlwZ3RhYmxlID0gZGF0YS0+cGd0YWJsZTsNCisJaWYg KCFwZ3RhYmxlKSB7DQorCQlyZXQgPSBtdGtfaW9tbXVfYXR0YWNoX3BndGFibGUoZGF0YSwgZGV2 KTsNCisJCWlmIChyZXQpIHsNCisJCQlkZXZfZXJyKGRhdGEtPmRldiwgIkZhaWxlZCB0byBkZXZp Y2VfZ3JvdXBcbiIpOw0KKwkJCXJldHVybiBOVUxMOw0KKwkJfQ0KKwl9DQorDQogCS8qIEFsbCB0 aGUgY2xpZW50IGRldmljZXMgYXJlIGluIHRoZSBzYW1lIG00dSBpb21tdS1ncm91cCAqLw0KIAlp ZiAoIWRhdGEtPm00dV9ncm91cCkgew0KIAkJZGF0YS0+bTR1X2dyb3VwID0gaW9tbXVfZ3JvdXBf YWxsb2MoKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L210a19pb21tdS5oIGIvZHJpdmVy cy9pb21tdS9tdGtfaW9tbXUuaA0KaW5kZXggMTMyZGM3NjVhNDBiLi5kZDVmMTlmNzhiNjIgMTAw NjQ0DQotLS0gYS9kcml2ZXJzL2lvbW11L210a19pb21tdS5oDQorKysgYi9kcml2ZXJzL2lvbW11 L210a19pb21tdS5oDQpAQCAtNjEsNiArNjEsNyBAQCBzdHJ1Y3QgbXRrX2lvbW11X2RhdGEgew0K IAlzdHJ1Y3QgY2xrCQkJKmJjbGs7DQogCXBoeXNfYWRkcl90CQkJcHJvdGVjdF9iYXNlOyAvKiBw cm90ZWN0IG1lbW9yeSBiYXNlICovDQogCXN0cnVjdCBtdGtfaW9tbXVfc3VzcGVuZF9yZWcJcmVn Ow0KKwlzdHJ1Y3QgbXRrX2lvbW11X3BndGFibGUJKnBndGFibGU7DQogCXN0cnVjdCBtdGtfaW9t bXVfZG9tYWluCQkqbTR1X2RvbTsNCiAJc3RydWN0IGlvbW11X2dyb3VwCQkqbTR1X2dyb3VwOw0K IAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV80R0I7DQotLSANCjIuMTgu MA0K --__=_Part_Boundary_004_1342251543.824474493-- --===============5030092278456602411== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu --===============5030092278456602411==--