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=-8.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 9EEE4C43603 for ; Mon, 16 Dec 2019 12:13:51 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 6F904206D3 for ; Mon, 16 Dec 2019 12:13:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="gB8kmiKJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6F904206D3 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 localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 4826A85E6E; Mon, 16 Dec 2019 12:13:51 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cWd3BUl-SWop; Mon, 16 Dec 2019 12:13:50 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by fraxinus.osuosl.org (Postfix) with ESMTP id 8357B85E6B; Mon, 16 Dec 2019 12:13:50 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7B2FBC18DD; Mon, 16 Dec 2019 12:13:50 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id B49A5C077D for ; Mon, 16 Dec 2019 12:13:48 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 9E44F877E7 for ; Mon, 16 Dec 2019 12:13:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 50Y-2EwcFi5X for ; Mon, 16 Dec 2019 12:13:47 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mailgw02.mediatek.com (unknown [1.203.163.81]) by hemlock.osuosl.org (Postfix) with ESMTP id 4E1DB8768B for ; Mon, 16 Dec 2019 12:13:23 +0000 (UTC) X-UUID: 96a927f982284ffd80da20c66b46ab6e-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=01Zdn2moavFSAH92DOzH42F7drWh36U1FiCarROFBME=; b=gB8kmiKJsw2QXVsVSf87Ql0IIKx6iaF1MPzMyMIa344K8meP31Ih0lFWASZP7OJ/s5GytRk2BSpN5cCqMw4zqXAZ68tR6etmIohcfZ9i6xT7MtcZ/1kpe7pTO21hUt6fALn4tkS4p7ZugkgWGjVW1WsM1cpLPrN2ya6fVEAvGqo=; X-UUID: 96a927f982284ffd80da20c66b46ab6e-20191216 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1289468991; Mon, 16 Dec 2019 20:13:17 +0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by MTKMBS31DR.mediatek.inc (172.27.6.102) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:12:41 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:12:59 +0800 Message-ID: <1576498396.28043.78.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 03/13] iommu/mediatek: Add mtk_iommu_pgtable structure From: Yong Wu To: Chao Hao Date: Mon, 16 Dec 2019 20:13:16 +0800 In-Reply-To: <20191104115238.2394-4-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-4-chao.hao@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 39EAD26C571E2DA9A3ADF7D67BFB280A5C20D797FC547AE679A650866EB2D9B32000:8 X-MTK: N Cc: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , linux-mediatek@lists.infradead.org, Miles Chen , Matthias Brugger , linux-arm-kernel@lists.infradead.org, Guangming Cao 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" On Mon, 2019-11-04 at 19:52 +0800, Chao Hao wrote: > 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. Thanks for the hard work of this file. Actually this patch and the later ones confuse me. Why do you make this flow change? for making the code "more explicit" or for adding multi-domain support in 13/13. IMHO, the change is unnecessary. a) For me, this change has no improvement. currently we use a global mtk_iommu_get_m4u_data to get the M4U data. I will be very glad if you could get rid of it. But in this patchset, You use a another global mtk_iommu_pgtable to instead. For me. It has no improvement. b) This patchset break the original flow. device_group give you a software chance for initializing, then you move pagetable allocating code into it. But it isn't device_group job. I can not decide if your flow is right. But if you only want to add support multi-domain, I guess you could extend the current "m4u_group" to a array "m4u_group[N]". It may be more simple. To make mt6779 progress easily, I suggest you can use this way to support multi-domain firstly. Then you could send this new mtk_iommu_pgtable patchset for the code "more explicit" if you insist. > 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; _______________________________________________ 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 EA103C43603 for ; Mon, 16 Dec 2019 12:13:38 +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 B30DE206CB for ; Mon, 16 Dec 2019 12:13:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Dhw9okMZ"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="BunkaHOK" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B30DE206CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=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.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=x7bgojwXHqNN/NcIhJwNc3ZogDLMiigv0ar9/MSEnJc=; b=Dhw9okMZog/DSS uWZ/o6SflM4nEujz4N51dR8miX3mYNVPWpuVPiF30wFn5nCCAJiz80qCDRDvLK3JMVmHEK79x1VPX jEg5YI20GBBbvCV0cNiOeJBo5RLSYQ2zCGC4IsncrH/wZj3vwtc3IQZAEsKJv9Si2LI+fSo1Au06H yuTcuMEpExU942MVIbl/jvl2rANN5ykQutwk92LHqtWcSF4SP/7fIVL+0DKEIlq78Mnw1/IgEAGVV e5YpqYzI2pA7gvDBgUJTq45ODnvcvhMpuYxCEE6yXgzjmIINEJPDYsI0KmN/tFXNmcz97LAS2i6Xk Nldcz72g2x1oPx05EosA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1igpFg-0000Rp-O1; Mon, 16 Dec 2019 12:13:28 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1igpFc-0000Qe-Gf; Mon, 16 Dec 2019 12:13:27 +0000 X-UUID: df7c194140c1458bac79aecee555f15e-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=01Zdn2moavFSAH92DOzH42F7drWh36U1FiCarROFBME=; b=BunkaHOKwGz0XKwjgWlc6w83G3Xtk3fjV+FGFAfKc9ki2tIelg4qxB7r7fLVFTN3ypc6VP6yY0nkVwlmkA54wEfbDHiDaMYeCv3Kro5qZWrqQsqSBiKNHk/Reimm0pY0oWgESNqXWOQ8lFSssXE86KOfVFDG6BowjE2kWEJb1Rw=; X-UUID: df7c194140c1458bac79aecee555f15e-20191216 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 2045145198; Mon, 16 Dec 2019 04:13:21 -0800 Received: from MTKMBS31DR.mediatek.inc (172.27.6.102) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 04:13:38 -0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by MTKMBS31DR.mediatek.inc (172.27.6.102) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:12:41 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:12:59 +0800 Message-ID: <1576498396.28043.78.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 03/13] iommu/mediatek: Add mtk_iommu_pgtable structure From: Yong Wu To: Chao Hao Date: Mon, 16 Dec 2019 20:13:16 +0800 In-Reply-To: <20191104115238.2394-4-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-4-chao.hao@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 39EAD26C571E2DA9A3ADF7D67BFB280A5C20D797FC547AE679A650866EB2D9B32000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191216_041324_571721_F8A2DF98 X-CRM114-Status: GOOD ( 25.46 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, Joerg Roedel , linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , linux-mediatek@lists.infradead.org, Miles Chen , Matthias Brugger , linux-arm-kernel@lists.infradead.org, Guangming Cao Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Mon, 2019-11-04 at 19:52 +0800, Chao Hao wrote: > 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. Thanks for the hard work of this file. Actually this patch and the later ones confuse me. Why do you make this flow change? for making the code "more explicit" or for adding multi-domain support in 13/13. IMHO, the change is unnecessary. a) For me, this change has no improvement. currently we use a global mtk_iommu_get_m4u_data to get the M4U data. I will be very glad if you could get rid of it. But in this patchset, You use a another global mtk_iommu_pgtable to instead. For me. It has no improvement. b) This patchset break the original flow. device_group give you a software chance for initializing, then you move pagetable allocating code into it. But it isn't device_group job. I can not decide if your flow is right. But if you only want to add support multi-domain, I guess you could extend the current "m4u_group" to a array "m4u_group[N]". It may be more simple. To make mt6779 progress easily, I suggest you can use this way to support multi-domain firstly. Then you could send this new mtk_iommu_pgtable patchset for the code "more explicit" if you insist. > 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; _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 8C66FC2D0BF for ; Mon, 16 Dec 2019 12:13:33 +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 6124D206CB for ; Mon, 16 Dec 2019 12:13:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Sm2S1nND"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="BunkaHOK" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6124D206CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=/b3gi5ZNjXNZ0FshgIv3R9uuEWEprhQ6RPbT4eCF9Ls=; b=Sm2S1nNDaWCPA5 5LT6iZfNxtFxtB/8ASDacrYvDzEYZoSBSQNMnLMifOxM+XgtVJjndUqeMryzFsWr1tgSaggtlnXPN AtmeLFPrTDDQsTxO6CFX+12qT/fIlSo7hy5zy1AsDmYYQ0hpemExw6I9a+LSPrTk0DHNVanQksvX5 i+KSKP5RWF2W7PAnDkbdePOgHZUK837VwsdsaVlvROUHVw7ptZf50GV+6/pAN7+OBFFZOP4whpLU0 Ku9m8LxptGWj3SoYpoUB7j50RkRdAgOOrHy21ExHRL73opP7z16vSalNycIIVlEqlpDGIGMZFWQjG PX1sTBLb1c+lXmVPA+YA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1igpFh-0000Sl-U8; Mon, 16 Dec 2019 12:13:29 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1igpFc-0000Qe-Gf; Mon, 16 Dec 2019 12:13:27 +0000 X-UUID: df7c194140c1458bac79aecee555f15e-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=01Zdn2moavFSAH92DOzH42F7drWh36U1FiCarROFBME=; b=BunkaHOKwGz0XKwjgWlc6w83G3Xtk3fjV+FGFAfKc9ki2tIelg4qxB7r7fLVFTN3ypc6VP6yY0nkVwlmkA54wEfbDHiDaMYeCv3Kro5qZWrqQsqSBiKNHk/Reimm0pY0oWgESNqXWOQ8lFSssXE86KOfVFDG6BowjE2kWEJb1Rw=; X-UUID: df7c194140c1458bac79aecee555f15e-20191216 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 2045145198; Mon, 16 Dec 2019 04:13:21 -0800 Received: from MTKMBS31DR.mediatek.inc (172.27.6.102) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 04:13:38 -0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by MTKMBS31DR.mediatek.inc (172.27.6.102) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:12:41 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:12:59 +0800 Message-ID: <1576498396.28043.78.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 03/13] iommu/mediatek: Add mtk_iommu_pgtable structure From: Yong Wu To: Chao Hao Date: Mon, 16 Dec 2019 20:13:16 +0800 In-Reply-To: <20191104115238.2394-4-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-4-chao.hao@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 39EAD26C571E2DA9A3ADF7D67BFB280A5C20D797FC547AE679A650866EB2D9B32000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191216_041324_571721_F8A2DF98 X-CRM114-Status: GOOD ( 25.46 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, Joerg Roedel , linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , linux-mediatek@lists.infradead.org, Miles Chen , Matthias Brugger , linux-arm-kernel@lists.infradead.org, Guangming Cao Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, 2019-11-04 at 19:52 +0800, Chao Hao wrote: > 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. Thanks for the hard work of this file. Actually this patch and the later ones confuse me. Why do you make this flow change? for making the code "more explicit" or for adding multi-domain support in 13/13. IMHO, the change is unnecessary. a) For me, this change has no improvement. currently we use a global mtk_iommu_get_m4u_data to get the M4U data. I will be very glad if you could get rid of it. But in this patchset, You use a another global mtk_iommu_pgtable to instead. For me. It has no improvement. b) This patchset break the original flow. device_group give you a software chance for initializing, then you move pagetable allocating code into it. But it isn't device_group job. I can not decide if your flow is right. But if you only want to add support multi-domain, I guess you could extend the current "m4u_group" to a array "m4u_group[N]". It may be more simple. To make mt6779 progress easily, I suggest you can use this way to support multi-domain firstly. Then you could send this new mtk_iommu_pgtable patchset for the code "more explicit" if you insist. > 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; _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 45F7DC2D0C0 for ; Mon, 16 Dec 2019 12:13:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 03801206CB for ; Mon, 16 Dec 2019 12:13:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="gB8kmiKJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727316AbfLPMN3 (ORCPT ); Mon, 16 Dec 2019 07:13:29 -0500 Received: from mailgw02.mediatek.com ([1.203.163.81]:34257 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727427AbfLPMN3 (ORCPT ); Mon, 16 Dec 2019 07:13:29 -0500 X-UUID: 96a927f982284ffd80da20c66b46ab6e-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=01Zdn2moavFSAH92DOzH42F7drWh36U1FiCarROFBME=; b=gB8kmiKJsw2QXVsVSf87Ql0IIKx6iaF1MPzMyMIa344K8meP31Ih0lFWASZP7OJ/s5GytRk2BSpN5cCqMw4zqXAZ68tR6etmIohcfZ9i6xT7MtcZ/1kpe7pTO21hUt6fALn4tkS4p7ZugkgWGjVW1WsM1cpLPrN2ya6fVEAvGqo=; X-UUID: 96a927f982284ffd80da20c66b46ab6e-20191216 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1289468991; Mon, 16 Dec 2019 20:13:17 +0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by MTKMBS31DR.mediatek.inc (172.27.6.102) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:12:41 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:12:59 +0800 Message-ID: <1576498396.28043.78.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 03/13] iommu/mediatek: Add mtk_iommu_pgtable structure From: Yong Wu To: Chao Hao CC: Joerg Roedel , Rob Herring , Matthias Brugger , , , , , , , Jun Yan , Cui Zhang , Guangming Cao , Anan Sun , Miles Chen Date: Mon, 16 Dec 2019 20:13:16 +0800 In-Reply-To: <20191104115238.2394-4-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-4-chao.hao@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 39EAD26C571E2DA9A3ADF7D67BFB280A5C20D797FC547AE679A650866EB2D9B32000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org T24gTW9uLCAyMDE5LTExLTA0IGF0IDE5OjUyICswODAwLCBDaGFvIEhhbyB3cm90ZToNCj4gU3Rh cnQgd2l0aCB0aGlzIHBhdGNoLCB3ZSB3aWxsIGNoYW5nZSB0aGUgU1cgYXJjaGl0ZWN0dXJlDQo+ IHRvIHN1cHBvcnQgbXVsdGlwbGUgZG9tYWlucy4gU1cgYXJjaGl0ZWN0dXJlIHdpbGwgaGFzIGEg YmlnIGNoYW5nZSwNCj4gc28gd2UgbmVlZCB0byBtb2RpZnkgYSBsaXR0bGUgYml0IGJ5IG1vcmUg dGhhbiBvbmUgcGF0Y2guDQo+IFRoZSBuZXcgU1cgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgaXMgYXMg YmVsb3c6DQo+IA0KPiAJCQkJaW9tbXUwICAgaW9tbXUxDQo+IAkJCQkgIHwJICAgIHwNCj4gCQkJ CSAgLS0tLS0tLS0tLS0NCj4gCQkJCQl8DQo+IAkJCQltdGtfaW9tbXVfcGd0YWJsZQ0KPiAJCQkJ CXwNCj4gCQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IAkJ CXwJCSAgICAgfAkJCSB8DQo+IAkJbXRrX2lvbW11X2RvbWFpbjEgICBtdGtfaW9tbXVfZG9tYWlu MiAgbXRrX2lvbW11X2RvbWFpbjMNCj4gCQkJfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICB8DQo+IAkJaW9tbXVfZ3JvdXAxICAgICAgICAgaW9tbXVfZ3JvdXAyICAgICAg ICAgICBpb21tdV9ncm91cDMNCj4gCQkJfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICB8DQo+IAkJaW9tbXVfZG9tYWluMSAgICAgICBpb21tdV9kb21haW4yCSAgICBpb21t dV9kb21haW4zDQo+IAkJCXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg fA0KPiAJCWlvdmEgcmVnaW9uMShub3JtYWwpICBpb3ZhIHJlZ2lvbjIoQ0NVKSAgICBpb3ZhIHJl Z2lvbjMoVlBVKQ0KPiANCj4gRm9yIGN1cnJlbnQgc3RydWN0dXJlLCBubyBtYXR0ZXIgaG93IG1h bnkgaW9tbXVzIHRoZXJlIGFyZSwNCj4gdGhleSB1c2UgdGhlIHNhbWUgcGFnZSB0YWJsZSB0byBz aW1wbGlmeSB0aGUgdXNhZ2Ugb2YgbW9kdWxlLg0KPiBJbiBvcmRlciB0byBtYWtlIHRoZSBzb2Z0 d2FyZSBhcmNoaXRlY3R1cmUgbW9yZSBleHBsaWNpdCwgdGhpcw0KPiBwYXRjaCB3aWxsIGNyZWF0 ZSBhIGdsb2JhbCBtdGtfaW9tbXVfcGd0YWJsZSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUNCj4gcGFn ZSB0YWJsZSBhbmQgYWxsIHRoZSBpb21tdXMgdXNlIGl0Lg0KDQpUaGFua3MgZm9yIHRoZSBoYXJk IHdvcmsgb2YgdGhpcyBmaWxlLiBBY3R1YWxseSB0aGlzIHBhdGNoIGFuZCB0aGUgbGF0ZXINCm9u ZXMgY29uZnVzZSBtZS4gV2h5IGRvIHlvdSBtYWtlIHRoaXMgZmxvdyBjaGFuZ2U/IA0KZm9yIG1h a2luZyB0aGUgY29kZSAibW9yZSBleHBsaWNpdCIgb3IgZm9yIGFkZGluZyBtdWx0aS1kb21haW4g c3VwcG9ydA0KaW4gMTMvMTMuDQoNCklNSE8sIHRoZSBjaGFuZ2UgaXMgdW5uZWNlc3NhcnkuDQph KSBGb3IgbWUsIHRoaXMgY2hhbmdlIGhhcyBubyBpbXByb3ZlbWVudC4gY3VycmVudGx5IHdlIHVz ZSBhIGdsb2JhbA0KbXRrX2lvbW11X2dldF9tNHVfZGF0YSB0byBnZXQgdGhlIE00VSBkYXRhLiBJ IHdpbGwgYmUgdmVyeSBnbGFkIGlmIHlvdQ0KY291bGQgZ2V0IHJpZCBvZiBpdC4gQnV0IGluIHRo aXMgcGF0Y2hzZXQsIFlvdSB1c2UgYSBhbm90aGVyIGdsb2JhbA0KbXRrX2lvbW11X3BndGFibGUg dG8gaW5zdGVhZC4gRm9yIG1lLiBJdCBoYXMgbm8gaW1wcm92ZW1lbnQuDQoNCmIpIFRoaXMgcGF0 Y2hzZXQgYnJlYWsgdGhlIG9yaWdpbmFsIGZsb3cuIGRldmljZV9ncm91cCBnaXZlIHlvdSBhDQpz b2Z0d2FyZSBjaGFuY2UgZm9yIGluaXRpYWxpemluZywgdGhlbiB5b3UgbW92ZSBwYWdldGFibGUg YWxsb2NhdGluZw0KY29kZSBpbnRvIGl0LiBCdXQgaXQgaXNuJ3QgZGV2aWNlX2dyb3VwIGpvYi4N Cg0KSSBjYW4gbm90IGRlY2lkZSBpZiB5b3VyIGZsb3cgaXMgcmlnaHQuIEJ1dCBpZiB5b3Ugb25s eSB3YW50IHRvIGFkZA0Kc3VwcG9ydCBtdWx0aS1kb21haW4sIEkgZ3Vlc3MgeW91IGNvdWxkIGV4 dGVuZCB0aGUgY3VycmVudCAibTR1X2dyb3VwIg0KdG8gYSBhcnJheSAibTR1X2dyb3VwW05dIi4g SXQgbWF5IGJlIG1vcmUgc2ltcGxlLiBUbyBtYWtlIG10Njc3OQ0KcHJvZ3Jlc3MgZWFzaWx5LCBJ IHN1Z2dlc3QgeW91IGNhbiB1c2UgdGhpcyB3YXkgdG8gc3VwcG9ydCBtdWx0aS1kb21haW4NCmZp cnN0bHkuIFRoZW4geW91IGNvdWxkIHNlbmQgdGhpcyBuZXcgbXRrX2lvbW11X3BndGFibGUgcGF0 Y2hzZXQgZm9yIHRoZQ0KY29kZSAibW9yZSBleHBsaWNpdCIgaWYgeW91IGluc2lzdC4NCg0KPiBU aGUgZGlhZ3JhbSBpcyBhcyBiZWxvdzoNCj4gDQo+IAltdGtfaW9tbXVfZGF0YTEoTU0pICAgICAg IG10a19pb21tdV9kYXRhMihBUFUpDQo+IAkJfAkJCSAgIHwNCj4gCQl8CQkJICAgfA0KPiAJCS0t LS0tLW10a19pb21tdV9wZ3RhYmxlLS0tLS0NCj4gDQo+IFdlIG5lZWQgdG8gY3JlYXRlIGdsb2Jh bCBtdGtfaW9tbXVfcGd0YWJsZSB0byBpbmNsdWRlIGFsbCB0aGUgaW92YQ0KPiByZWdpb25zIGZp cnN0bHkgYW5kIHNwZWNpYWwgaW92YSByZWdpb25zIGJ5IGRpdmlkZWQgYmFzZWQgb24gaXQsDQo+ IHNvIHRoZSBpbmZvcm1hdGlvbiBvZiBwZ3RhYmxlIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaW4gZGV2 aWNlX2dyb3VwLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hhbyBIYW8gPGNoYW8uaGFvQG1lZGlh dGVrLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL2lvbW11L210a19pb21tdS5jIHwgODQgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBkcml2ZXJzL2lvbW11L210a19p b21tdS5oIHwgIDEgKw0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspDQo+IA0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuYyBiL2RyaXZlcnMvaW9tbXUv bXRrX2lvbW11LmMNCj4gaW5kZXggZjI4NDdlNjYxMTM3Li5mY2JkZTZiMGY1OGQgMTAwNjQ0DQo+ IC0tLSBhL2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmMNCj4gKysrIGIvZHJpdmVycy9pb21tdS9t dGtfaW9tbXUuYw0KPiBAQCAtMTIzLDYgKzEyMywxMiBAQCBzdHJ1Y3QgbXRrX2lvbW11X2RvbWFp biB7DQo+ICAJc3RydWN0IGlvbW11X2RvbWFpbgkJZG9tYWluOw0KPiAgfTsNCj4gIA0KPiArc3Ry dWN0IG10a19pb21tdV9wZ3RhYmxlIHsNCj4gKwlzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcJY2ZnOw0K PiArCXN0cnVjdCBpb19wZ3RhYmxlX29wcwkqaW9wOw0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0 cnVjdCBtdGtfaW9tbXVfcGd0YWJsZSAqc2hhcmVfcGd0YWJsZTsNCj4gIHN0YXRpYyBjb25zdCBz dHJ1Y3QgaW9tbXVfb3BzIG10a19pb21tdV9vcHM7DQo+ICANCj4gIC8qDQo+IEBAIC0xNzAsNiAr MTc2LDExIEBAIHN0YXRpYyBzdHJ1Y3QgbXRrX2lvbW11X2RhdGEgKm10a19pb21tdV9nZXRfbTR1 X2RhdGEodm9pZCkNCj4gIAlyZXR1cm4gTlVMTDsNCj4gIH0NCj4gIA0KPiArc3RhdGljIHN0cnVj dCBtdGtfaW9tbXVfcGd0YWJsZSAqbXRrX2lvbW11X2dldF9wZ3RhYmxlKHZvaWQpDQo+ICt7DQo+ ICsJcmV0dXJuIHNoYXJlX3BndGFibGU7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBzdHJ1Y3QgbXRr X2lvbW11X2RvbWFpbiAqdG9fbXRrX2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb20pDQo+ ICB7DQo+ICAJcmV0dXJuIGNvbnRhaW5lcl9vZihkb20sIHN0cnVjdCBtdGtfaW9tbXVfZG9tYWlu LCBkb21haW4pOw0KPiBAQCAtMzIyLDYgKzMzMywxMyBAQCBzdGF0aWMgaW50IG10a19pb21tdV9k b21haW5fZmluYWxpc2Uoc3RydWN0IG10a19pb21tdV9kb21haW4gKmRvbSkNCj4gIHsNCj4gIAlz dHJ1Y3QgbXRrX2lvbW11X2RhdGEgKmRhdGEgPSBtdGtfaW9tbXVfZ2V0X200dV9kYXRhKCk7DQo+ ICANCj4gKwlpZiAoZGF0YS0+cGd0YWJsZSkgew0KPiArCQlkb20tPmNmZyA9IGRhdGEtPnBndGFi bGUtPmNmZzsNCj4gKwkJZG9tLT5pb3AgPSBkYXRhLT5wZ3RhYmxlLT5pb3A7DQo+ICsJCWRvbS0+ ZG9tYWluLnBnc2l6ZV9iaXRtYXAgPSBkYXRhLT5wZ3RhYmxlLT5jZmcucGdzaXplX2JpdG1hcDsN Cj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICAJZG9tLT5jZmcgPSAoc3RydWN0IGlvX3Bn dGFibGVfY2ZnKSB7DQo+ICAJCS5xdWlya3MgPSBJT19QR1RBQkxFX1FVSVJLX0FSTV9OUyB8DQo+ ICAJCQlJT19QR1RBQkxFX1FVSVJLX05PX1BFUk1TIHwNCj4gQEAgLTM0NSw2ICszNjMsNjEgQEAg c3RhdGljIGludCBtdGtfaW9tbXVfZG9tYWluX2ZpbmFsaXNlKHN0cnVjdCBtdGtfaW9tbXVfZG9t YWluICpkb20pDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBzdHJ1Y3QgbXRr X2lvbW11X3BndGFibGUgKmNyZWF0ZV9wZ3RhYmxlKHN0cnVjdCBtdGtfaW9tbXVfZGF0YSAqZGF0 YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbXRrX2lvbW11X3BndGFibGUgKnBndGFibGU7DQo+ICsNCj4g KwlwZ3RhYmxlID0ga3phbGxvYyhzaXplb2YoKnBndGFibGUpLCBHRlBfS0VSTkVMKTsNCj4gKwlp ZiAoIXBndGFibGUpDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiArDQo+ICsJcGd0 YWJsZS0+Y2ZnID0gKHN0cnVjdCBpb19wZ3RhYmxlX2NmZykgew0KPiArCQkucXVpcmtzID0gSU9f UEdUQUJMRV9RVUlSS19BUk1fTlMgfA0KPiArCQkJSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUyB8 DQo+ICsJCQlJT19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQIHwNCj4gKwkJCUlPX1BHVEFCTEVf UVVJUktfQVJNX01US19FWFQsDQo+ICsJCS5wZ3NpemVfYml0bWFwID0gbXRrX2lvbW11X29wcy5w Z3NpemVfYml0bWFwLA0KPiArCQkuaWFzID0gMzIsDQo+ICsJCS5vYXMgPSAzNCwNCj4gKwkJLnRs YiA9ICZtdGtfaW9tbXVfZmx1c2hfb3BzLA0KPiArCQkuaW9tbXVfZGV2ID0gZGF0YS0+ZGV2LA0K PiArCX07DQo+ICsNCj4gKwlwZ3RhYmxlLT5pb3AgPSBhbGxvY19pb19wZ3RhYmxlX29wcyhBUk1f VjdTLCAmcGd0YWJsZS0+Y2ZnLCBkYXRhKTsNCj4gKwlpZiAoIXBndGFibGUtPmlvcCkgew0KPiAr CQlkZXZfZXJyKGRhdGEtPmRldiwgIkZhaWxlZCB0byBhbGxvYyBpbyBwZ3RhYmxlXG4iKTsNCj4g KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ICsJfQ0KPiArDQo+ICsJZGV2X2luZm8oZGF0 YS0+ZGV2LCAiJXMgY3JlYXRlIHBndGFibGUgZG9uZVxuIiwgX19mdW5jX18pOw0KPiArDQo+ICsJ cmV0dXJuIHBndGFibGU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2lvbW11X2F0dGFj aF9wZ3RhYmxlKHN0cnVjdCBtdGtfaW9tbXVfZGF0YSAqZGF0YSwNCj4gKwkJCQkgICAgc3RydWN0 IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBtdGtfaW9tbXVfcGd0YWJsZSAqcGd0YWJs ZSA9IG10a19pb21tdV9nZXRfcGd0YWJsZSgpOw0KPiArDQo+ICsJLyogY3JlYXRlIHNoYXJlIHBn dGFibGUgKi8NCj4gKwlpZiAoIXBndGFibGUpIHsNCj4gKwkJcGd0YWJsZSA9IGNyZWF0ZV9wZ3Rh YmxlKGRhdGEpOw0KPiArCQlpZiAoSVNfRVJSKHBndGFibGUpKSB7DQo+ICsJCQlkZXZfZXJyKGRh dGEtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgcGd0YWJsZVxuIik7DQo+ICsJCQlyZXR1cm4gLUVO T01FTTsNCj4gKwkJfQ0KPiArDQo+ICsJCXNoYXJlX3BndGFibGUgPSBwZ3RhYmxlOw0KPiArCX0N Cj4gKw0KPiArCS8qIGJpbmRpbmcgdG8gcGd0YWJsZSAqLw0KPiArCWRhdGEtPnBndGFibGUgPSBw Z3RhYmxlOw0KPiArDQo+ICsJZGV2X2luZm8oZGF0YS0+ZGV2LCAibTR1JWQgYXR0YWNoX3BndGFi bGUgZG9uZSFcbiIsIGRhdGEtPm00dV9pZCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiAgc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKm10a19pb21tdV9kb21haW5fYWxsb2Mo dW5zaWduZWQgdHlwZSkNCj4gIHsNCj4gIAlzdHJ1Y3QgbXRrX2lvbW11X2RvbWFpbiAqZG9tOw0K PiBAQCAtNTA4LDEwICs1ODEsMjEgQEAgc3RhdGljIHZvaWQgbXRrX2lvbW11X3JlbW92ZV9kZXZp Y2Uoc3RydWN0IGRldmljZSAqZGV2KQ0KPiAgc3RhdGljIHN0cnVjdCBpb21tdV9ncm91cCAqbXRr X2lvbW11X2RldmljZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICB7DQo+ICAJc3RydWN0 IG10a19pb21tdV9kYXRhICpkYXRhID0gbXRrX2lvbW11X2dldF9tNHVfZGF0YSgpOw0KPiArCXN0 cnVjdCBtdGtfaW9tbXVfcGd0YWJsZSAqcGd0YWJsZTsNCj4gKwlpbnQgcmV0ID0gMDsNCj4gIA0K PiAgCWlmICghZGF0YSkNCj4gIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7DQo+ICANCj4gKwlw Z3RhYmxlID0gZGF0YS0+cGd0YWJsZTsNCj4gKwlpZiAoIXBndGFibGUpIHsNCj4gKwkJcmV0ID0g bXRrX2lvbW11X2F0dGFjaF9wZ3RhYmxlKGRhdGEsIGRldik7DQo+ICsJCWlmIChyZXQpIHsNCj4g KwkJCWRldl9lcnIoZGF0YS0+ZGV2LCAiRmFpbGVkIHRvIGRldmljZV9ncm91cFxuIik7DQo+ICsJ CQlyZXR1cm4gTlVMTDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAgCS8qIEFsbCB0aGUgY2xpZW50 IGRldmljZXMgYXJlIGluIHRoZSBzYW1lIG00dSBpb21tdS1ncm91cCAqLw0KPiAgCWlmICghZGF0 YS0+bTR1X2dyb3VwKSB7DQo+ICAJCWRhdGEtPm00dV9ncm91cCA9IGlvbW11X2dyb3VwX2FsbG9j KCk7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L210a19pb21tdS5oIGIvZHJpdmVycy9p b21tdS9tdGtfaW9tbXUuaA0KPiBpbmRleCAxMzJkYzc2NWE0MGIuLmRkNWYxOWY3OGI2MiAxMDA2 NDQNCj4gLS0tIGEvZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuaA0KPiArKysgYi9kcml2ZXJzL2lv bW11L210a19pb21tdS5oDQo+IEBAIC02MSw2ICs2MSw3IEBAIHN0cnVjdCBtdGtfaW9tbXVfZGF0 YSB7DQo+ICAJc3RydWN0IGNsawkJCSpiY2xrOw0KPiAgCXBoeXNfYWRkcl90CQkJcHJvdGVjdF9i YXNlOyAvKiBwcm90ZWN0IG1lbW9yeSBiYXNlICovDQo+ICAJc3RydWN0IG10a19pb21tdV9zdXNw ZW5kX3JlZwlyZWc7DQo+ICsJc3RydWN0IG10a19pb21tdV9wZ3RhYmxlCSpwZ3RhYmxlOw0KPiAg CXN0cnVjdCBtdGtfaW9tbXVfZG9tYWluCQkqbTR1X2RvbTsNCj4gIAlzdHJ1Y3QgaW9tbXVfZ3Jv dXAJCSptNHVfZ3JvdXA7DQo+ICAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFi bGVfNEdCOw0KDQo=