From patchwork Tue Jun 21 07:18:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janne Grunau X-Patchwork-Id: 12888733 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id F31C8C43334 for ; Tue, 21 Jun 2022 07:20:16 +0000 (UTC) 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: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:In-Reply-To:References: List-Owner; bh=9ejhy543GdENwNvIy2q4LMh8LU3/rbJDt4L6XU7HhIk=; b=JeYnd3yeyOAl6K xigrec7Ax59j3BHH9cpEVKEyh4BrOjbTnOa5sROsFauWTCGjngdtHuvID306XkNjbb9NlJjXWjln5 v8Y8fJ0OR+1Z2x7Lj9Dm57Q9vwvJ5SiEi15zlSJwJg+6smrqQj56MRo50bXvqrIqZzET/53HQCBr7 nQo83hPzhWZEC1lJuUyWR6lXfJTGY7HxDbXCz3iWKdw/6RDmWMQZXTbTjNtIYI4PnQtKKjEMDemb/ Y0aEqj4ARQ2ULDHbOnxzsIBC2KibNS2UzUbdAFnWx18oCc1Kym+ctkSLco/FyPvUl+drGm4zCZbni cFWIeP2vzOHWH7eI8WNQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o3YAQ-0040g8-1G; Tue, 21 Jun 2022 07:19:18 +0000 Received: from soltyk.jannau.net ([144.76.91.90]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o3YAA-0040Sc-80 for linux-arm-kernel@lists.infradead.org; Tue, 21 Jun 2022 07:19:04 +0000 Received: from coburn.home.jannau.net (p579ad988.dip0.t-ipconnect.de [87.154.217.136]) by soltyk.jannau.net (Postfix) with ESMTPSA id A803826ED15; Tue, 21 Jun 2022 09:18:48 +0200 (CEST) From: Janne Grunau To: iommu@lists.linux-foundation.org Cc: Konrad Dybcio , asahi@lists.linux.dev, Alyssa Rosenzweig , Georgi Djakov , Hector Martin , "Isaac J. Manjarres" , Joerg Roedel , Krzysztof Kozlowski , Mark Kettenis , Rob Herring , Robin Murphy , Sven Peter , Will Deacon , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 0/5] iommu: M1 Pro/Max DART support Date: Tue, 21 Jun 2022 09:18:43 +0200 Message-Id: <20220621071848.14834-1-j@jannau.net> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220621_001902_486956_D491EC73 X-CRM114-Status: GOOD ( 17.69 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hej, this is the next attempt adding support for the DART found in Apple's M1 Pro/Max/Ultra. This adds a separate io-pgtable implementation for DART. As already mentioned in v2 the pte format is not fully compatible with io-pgtable-arm. Especially the 2nd least significant bit is used and is not available to tag tables/pages. io-pgtable-dart.c is copied from io-pgtable-arm.c and support for unused features is removed. Support for 4k IO pages is left for A7 to A11 SoCs as there's work underway to run Linux on them. The incompatibilities between both Apple DART pte seems manageable in their own io-pgtable implementation. A short list of the known differences: - the physical addresses are shifted left by 4 bits and and have 2 more bits inside the PTE entries - the read/write protection flags are at a different position - the subpage protection feature is now mandatory. For Linux we can just configure it to always allow access to the entire page. - BIT(1) tags "uncached" mappings (used for the display controller) There is second type of DART (t8110) present on M1 Pro/Max SoCs which uses the same PTE format as t6000. Changes in v3: - move APPLE_DART to its own io-pgtable implementation, copied from io-pgtable-arm and simplified Changes in v2: - added Rob's Acked-by: - add APPLE_DART2 io-pgtable format Janne Grunau (1): iommu/io-pgtable: Move Apple DART support to its own file Sven Peter (4): dt-bindings: iommu: dart: add t6000 compatible iommu/io-pgtable: Add DART subpage protection support iommu/io-pgtable-dart: Add DART PTE support for t6000 iommu: dart: Support t6000 variant .../devicetree/bindings/iommu/apple,dart.yaml | 4 +- MAINTAINERS | 1 + drivers/iommu/Kconfig | 1 - drivers/iommu/Makefile | 2 +- drivers/iommu/apple-dart.c | 24 +- drivers/iommu/io-pgtable-arm.c | 63 -- drivers/iommu/io-pgtable-dart.c | 623 ++++++++++++++++++ drivers/iommu/io-pgtable.c | 3 + include/linux/io-pgtable.h | 1 + 9 files changed, 653 insertions(+), 69 deletions(-) create mode 100644 drivers/iommu/io-pgtable-dart.c