Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp4166182pxb; Tue, 25 Jan 2022 05:00:51 -0800 (PST) X-Google-Smtp-Source: ABdhPJwJW/gU3xAbK/K4rGD/G/jK4bQFiz+bVkfAqxw4h53FbrroXhzPXfpppV46bH1Kl+Z2jywP X-Received: by 2002:a63:210:: with SMTP id 16mr15518280pgc.26.1643115651671; Tue, 25 Jan 2022 05:00:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643115651; cv=none; d=google.com; s=arc-20160816; b=GT45d26Emq2xm2Lvh6sI7XL4p1DJ4OSgXV3H8pR1/wrjmC3Qu9x6bQzm23jfGf59NR YL3BEmp31DrHE5ErWqra/hCNl6aK/uC/BKevME5reV0tKcrOEFyWjOJHeYQnSA3ml+7+ mtlzShNfVZOjW5nxzDOHOE3d1a8jLsc8KUbwR9k7cj9n+2Lxl3LhH/FWMo60Jde4pGd8 522nGV3YEXAU/MktMc1Uk2nSycDXMYn/GyzUJuic4EkwoGCVFoMxnUVZgedP/CdbA4TY 4b7P9gnMQQ+Uo5KBpZqM/OFAx5azFfMiTPRLDc7S2tZT+OFVKttjKjXBgnQr1C09wXmk rQeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=lM7wiUHKIfW6iSqdp2RX5jzWqNGwVFHZVm1v4pTht44=; b=AiMNNmFyrwLyKpJZ9oh0p1zQeKN23llT/5k50sX03Hc5fomVnnz9GtK3DWA/ETv+6Y 5XTbfUKHCMtaXnuyNjWW68ZvXFMc2cMay0gK8LrTqf6ujxFB9nI3z9vUL9Kpay53Td/O uvMpdWm/SUs8vqYyvHSk062denQ4b8OnPiwZm+trmtLVKAYCXFZ6sRRpr4CzcaxkhDVd AvG2WD9He+2mXQjshIMXsfnLr8HOHLVb2wccRzUza5twcQ7Fnf8GhwzlT2TNZ8yMnZXN r/Bzv36aXd/vH0mdBwJ/Kh623zQVb4boKCxsKhtqZooji9ZW0EB7hqKvce1nKdiDKPw6 3eYg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z13si7357020pfj.269.2022.01.25.05.00.38; Tue, 25 Jan 2022 05:00:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1454443AbiAYI73 (ORCPT + 99 others); Tue, 25 Jan 2022 03:59:29 -0500 Received: from mailgw01.mediatek.com ([60.244.123.138]:56956 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1453979AbiAYI47 (ORCPT ); Tue, 25 Jan 2022 03:56:59 -0500 X-UUID: cb91789688a241969ef728b51114aef3-20220125 X-UUID: cb91789688a241969ef728b51114aef3-20220125 Received: from mtkmbs10n2.mediatek.inc [(172.21.101.183)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 757348763; Tue, 25 Jan 2022 16:56:45 +0800 Received: from mtkcas10.mediatek.inc (172.21.101.39) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.3; Tue, 25 Jan 2022 16:56:44 +0800 Received: from localhost.localdomain (10.17.3.154) by mtkcas10.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 25 Jan 2022 16:56:42 +0800 From: Yong Wu To: Joerg Roedel , Rob Herring , "Matthias Brugger" , Will Deacon CC: Robin Murphy , Krzysztof Kozlowski , Tomasz Figa , , , , , , , Hsin-Yi Wang , , , , , , "AngeloGioacchino Del Regno" , , , , Subject: [PATCH v4 00/35] MT8195 IOMMU SUPPORT Date: Tue, 25 Jan 2022 16:55:59 +0800 Message-ID: <20220125085634.17972-1-yong.wu@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patchset adds MT8195 iommu support. MT8195 have 3 IOMMU HWs. 2 IOMMU HW is for multimedia, and 1 IOMMU HW is for infra-master, like PCIe/USB. About the 2 MM IOMMU HW, something like this: IOMMU(VDO) IOMMU(VPP) | | SMI_COMMON(VDO) SMI_COMMON(VPP) --------------- ---------------- | | ... | | ... larb0 larb2 ... larb1 larb3 ... these two MM IOMMU HW share a pgtable. About the INFRA IOMMU, it don't have larbs, the master connects the iommu directly. It use a independent pgtable. Also, mt8195 IOMMU bank supports. Normally the IOMMU register size only is 0x1000. In this IOMMU HW, the register size is 5 * 0x1000. each 0x1000 is a bank. the banks' register look like this: ---------------------------------------- |bank0 | bank1 | bank2 | bank3 | bank4| ---------------------------------------- |global | |control| null |regs | ----------------------------------------- |bank |bank |bank |bank |bank | |regs |regs |regs |regs |regs | | | | | | | ----------------------------------------- All the banks share some global control registers, and each bank have its special bank registers, like pgtable base register, tlb operation registers, the fault status registers. In mt8195, we enable this bank feature for infra iommu, We put PCIe in bank0 and USB in bank4. they have independent pgtable. Change note: v4:1) Base on v5.16-rc1 2) Base on tlb logic 2, some patches in v3 has already gone through in that patchset. https://lore.kernel.org/linux-mediatek/20211208120744.2415-1-dafna.hirschfeld@collabora.com/ 3) Due to the unreadable union for v1/v2(comment in 26/33 of v3), I separate mtk_iommu_data for v1 and v2 totally, then remove mtk_iommu.h. please see patch[26/35][27/35]. 4) add two mutex for the internal data. patch[6/35][7/35]. 5) add a new flag PM_CLK_AO. v3: https://lore.kernel.org/linux-mediatek/20210923115840.17813-1-yong.wu@mediatek.com/ 1) base on v5.15-rc1 2) Adjust devlink with smi-common, not use the property(sub-sommon). 3) Adjust tlb_flush_all flow, a) Fix tlb_flush_all only is supported in bank0. b) add tlb-flush-all in the resume callback. c) remove the pm status checking in tlb-flush-all. The reason are showed in the commit message. 4) Allow IOMMU_DOMAIN_UNMANAGED since PCIe VFIO use that. 5) Fix a clk warning and a null abort when unbind the iommu driver. v2: https://lore.kernel.org/linux-mediatek/20210813065324.29220-1-yong.wu@mediatek.com/ 1) Base on v5.14-rc1. 2) Fix build fail for arm32. 3) Fix dt-binding issue from Rob. 4) Fix the bank issue when tlb flush. v1 always use bank->base. 5) adjust devlink with smi-common since the node may be smi-sub-common. 6) other changes: like reword some commit message(removing many "This patch..."); seperate serveral patches. v1: https://lore.kernel.org/linux-mediatek/20210630023504.18177-1-yong.wu@mediatek.com/ Base on v5.13-rc1 Yong Wu (35): dt-bindings: mediatek: mt8195: Add binding for MM IOMMU dt-bindings: mediatek: mt8195: Add binding for infra IOMMU iommu/mediatek: Fix 2 HW sharing pgtable issue iommu/mediatek: Add list_del in mtk_iommu_remove iommu/mediatek: Remove clk_disable in mtk_iommu_remove iommu/mediatek: Add mutex for m4u_group and m4u_dom in data iommu/mediatek: Add mutex for data in the mtk_iommu_domain iommu/mediatek: Use kmalloc for protect buffer iommu/mediatek: Adapt sharing and non-sharing pgtable case iommu/mediatek: Add 12G~16G support for multi domains iommu/mediatek: Add a flag DCM_DISABLE iommu/mediatek: Add a flag NON_STD_AXI iommu/mediatek: Remove the granule in the tlb flush iommu/mediatek: Always enable output PA over 32bits in isr iommu/mediatek: Add SUB_COMMON_3BITS flag iommu/mediatek: Add IOMMU_TYPE flag iommu/mediatek: Contain MM IOMMU flow with the MM TYPE iommu/mediatek: Adjust device link when it is sub-common iommu/mediatek: Allow IOMMU_DOMAIN_UNMANAGED for PCIe VFIO iommu/mediatek: Add a PM_CLK_AO flag for infra iommu iommu/mediatek: Add infra iommu support iommu/mediatek: Add PCIe support iommu/mediatek: Add mt8195 support iommu/mediatek: Only adjust code about register base iommu/mediatek: Just move code position in hw_init iommu/mediatek: Separate mtk_iommu_data for v1 and v2 iommu/mediatek: Remove mtk_iommu.h iommu/mediatek-v1: Just rename mtk_iommu to mtk_iommu_v1 iommu/mediatek: Add mtk_iommu_bank_data structure iommu/mediatek: Initialise bank HW for each a bank iommu/mediatek: Change the domid to iova_region_id iommu/mediatek: Get the proper bankid for multi banks iommu/mediatek: Initialise/Remove for multi bank dev iommu/mediatek: Backup/restore regsiters for multi banks iommu/mediatek: mt8195: Enable multi banks for infra iommu .../bindings/iommu/mediatek,iommu.yaml | 20 +- drivers/iommu/mtk_iommu.c | 951 +++++++++++++----- drivers/iommu/mtk_iommu.h | 111 -- drivers/iommu/mtk_iommu_v1.c | 243 +++-- .../dt-bindings/memory/mt8195-memory-port.h | 408 ++++++++ include/dt-bindings/memory/mtk-memory-port.h | 2 + 6 files changed, 1255 insertions(+), 480 deletions(-) delete mode 100644 drivers/iommu/mtk_iommu.h create mode 100644 include/dt-bindings/memory/mt8195-memory-port.h -- 2.18.0