From patchwork Sun Sep 8 17:32:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 1982226 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=siemens.com header.i=jan.kiszka@siemens.com header.a=rsa-sha256 header.s=fm1 header.b=gm14SeiL; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:4601:e00::3; helo=am.mirrors.kernel.org; envelope-from=linux-pci+bounces-12928-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from am.mirrors.kernel.org (am.mirrors.kernel.org [IPv6:2604:1380:4601:e00::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4X1xrB2Vvwz1y1j for ; Mon, 9 Sep 2024 03:32:58 +1000 (AEST) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id C9E751F21165 for ; Sun, 8 Sep 2024 17:32:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3EBFB176ADA; Sun, 8 Sep 2024 17:32:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=siemens.com header.i=jan.kiszka@siemens.com header.b="gm14SeiL" X-Original-To: linux-pci@vger.kernel.org Received: from mta-64-226.siemens.flowmailer.net (mta-64-226.siemens.flowmailer.net [185.136.64.226]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E76F73176 for ; Sun, 8 Sep 2024 17:32:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.136.64.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725816767; cv=none; b=Tv4t4MXA2f5xnirRJOmTh4XpEuOdEY19vzVFTTwl8jRw4/lqH2qY1jU3CmZi3oHtAV2HexNISA/NgS9WFfV45xmbL47AQ0im2t5b1C/I8CSmI+1/bA/HqE1i/oDSydJs74uvr6cUm0/pCDB97izA6xFjDAOiSg+6o4eQvc2X6X0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725816767; c=relaxed/simple; bh=0y5vADgxSGXWncNsL7qL0HgtBGBRT0BGhIAXFhIRbOA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=s/tQHEH0XSVRgVR+NUz51oPcnMqoz8MUMpDzZqzPRcHZshYELFmCl6RjHSRD8G+63AnSYKU3+KBhZHUeQjSZUozvB+kpLalNQ37jRC6D7oeeWyB+Qm6Ao6W+ekMFUzEskjMNt92iIe4JIBsR8NpzE23HpVni2KuzNwBE6CzyEYQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com; dkim=pass (2048-bit key) header.d=siemens.com header.i=jan.kiszka@siemens.com header.b=gm14SeiL; arc=none smtp.client-ip=185.136.64.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rts-flowmailer.siemens.com Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 20240908173235b5d01d86e81a2f3041 for ; Sun, 08 Sep 2024 19:32:35 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=jan.kiszka@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc; bh=Bq4vCAet2h4Ojz5quDJlJSc0D89NtJEmgPMW4y5XBP0=; b=gm14SeiLuXz21ajH3mUS3vqvu2kLWJg7Umy/cDox7C3y7o0Q1CaEn7OWG4JOMhK9j2lkc/ V4evyclind2ptOO5TKqcv3/3zNtDxe8u3v5a6lzwxJA7+RjK8FMeka5fCCf2dfyhtVukKBjJ eNtPv7reSlIodtfIvf10tT5BzGDape5NT38iGSnICy3Ag/E7M7dUacrx07438kZlTf4Uhjuq aq3OoGGdFKv5LxDi2ihM0rn+y+TLo35BC98Nuatm2rXv8uu27EmyUXS6wAH2iUnj+PTy96k3 6XCytNWbQ1zXt/OrkgbErj061Hl7JC86n3Kk1m9RLFnHH3FMukPJ1cGQ==; From: Jan Kiszka To: Nishanth Menon , Santosh Shilimkar , Vignesh Raghavendra , Tero Kristo , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, Siddharth Vadapalli , Bao Cheng Su , Hua Qian Li , Diogo Ivo , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Lorenzo Pieralisi Subject: [PATCH v5 0/7] soc: ti: Add and use PVU on K3-AM65 for DMA isolation Date: Sun, 8 Sep 2024 19:32:26 +0200 Message-ID: Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-294854:519-21489:flowmailer Changes in v5: - resolve review comments on pci-host bindings - reduce DMA memory regions to 1 - swiotlb does not support more - move activation into overlay (controlled via firmware) - use ks_init_vmap helper instead of loop in rework ks_init_restricted_dma - add more comments to pci-keystone - use 2 chained TLBs of PVU to support maximum of swiotlb (320 MB) Changes in v4: - reorder patch queue, moving all DTS changes to the back - limit activation to IOT2050 Advanced variants - move DMA pool to allow firmware-based expansion it up to 512M Changes in v3: - fix ti,am654-pvu.yaml according to review comments - address review comments on ti,am65-pci-host.yaml - differentiate between different compatibles in ti,am65-pci-host.yaml - move pvu nodes to k3-am65-main.dtsi - reorder patch series, pulling bindings and generic DT bits to the front Changes in v2: - fix dt_bindings_check issues (patch 1) - address first review comments (patch 2) - extend ti,am65-pci-host bindings for PVU (new patch 3) Only few of the K3 SoCs have an IOMMU and, thus, can isolate the system against DMA-based attacks of external PCI devices. The AM65 is without an IOMMU, but it comes with something close to it: the Peripheral Virtualization Unit (PVU). The PVU was originally designed to establish static compartments via a hypervisor, isolate those DMA-wise against each other and the host and even allow remapping of guest-physical addresses. But it only provides a static translation region, not page-granular mappings. Thus, it cannot be handled transparently like an IOMMU. Now, to use the PVU for the purpose of isolated PCI devices from the Linux host, this series takes a different approach. It defines a restricted-dma-pool for the PCI host, using swiotlb to map all DMA buffers from a static memory carve-out. And to enforce that the devices actually follow this, a special PVU soc driver is introduced. The driver permits access to the GIC ITS and otherwise waits for other drivers that detect devices with constrained DMA to register pools with the PVU. For the AM65, the first (and possibly only) driver where this is introduced is the pci-keystone host controller. Finally, this series provides a DT overlay for the IOT2050 Advanced devices (all have MiniPCIe or M.2 extension slots) to make use of this protection scheme. Application of this overlay will be handled by firmware. Due to the cross-cutting nature of these changes, multiple subsystems are affected. However, I wanted to present the whole thing in one series to allow everyone to review with the complete picture in hands. If preferred, I can also split the series up, of course. Jan CC: Bjorn Helgaas CC: "Krzysztof WilczyƄski" CC: linux-pci@vger.kernel.org CC: Lorenzo Pieralisi Jan Kiszka (7): dt-bindings: soc: ti: Add AM65 peripheral virtualization unit dt-bindings: PCI: ti,am65: Extend for use with PVU soc: ti: Add IOMMU-like PVU driver PCI: keystone: Add support for PVU-based DMA isolation on AM654 arm64: dts: ti: k3-am65-main: Add PVU nodes arm64: dts: ti: k3-am65-main: Add VMAP registers to PCI root complexes arm64: dts: ti: iot2050: Add overlay for DMA isolation for devices behind PCI RC .../bindings/pci/ti,am65-pci-host.yaml | 29 +- .../bindings/soc/ti/ti,am654-pvu.yaml | 51 ++ arch/arm64/boot/dts/ti/Makefile | 5 + arch/arm64/boot/dts/ti/k3-am65-main.dtsi | 38 +- ...am6548-iot2050-advanced-dma-isolation.dtso | 33 ++ drivers/pci/controller/dwc/pci-keystone.c | 108 ++++ drivers/soc/ti/Kconfig | 4 + drivers/soc/ti/Makefile | 1 + drivers/soc/ti/ti-pvu.c | 500 ++++++++++++++++++ include/linux/ti-pvu.h | 16 + 10 files changed, 778 insertions(+), 7 deletions(-) create mode 100644 Documentation/devicetree/bindings/soc/ti/ti,am654-pvu.yaml create mode 100644 arch/arm64/boot/dts/ti/k3-am6548-iot2050-advanced-dma-isolation.dtso create mode 100644 drivers/soc/ti/ti-pvu.c create mode 100644 include/linux/ti-pvu.h