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 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 02A25CA0FFC for ; Wed, 27 Aug 2025 11:07:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type: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=+CwShbdO/ZrngTTUv+kiWku9/dUEIDJ7RH8aQrUQ/Y8=; b=ri7630VrYadICPlvKSsfmEYjXO 900eipiT8d1dR3QsQgKLRpKn2eJkk40lgTnL7pZV4ji0aSk7Cb83XPPyDCGRa+33JhhWGRv3MeRLX ezyY6B5ZDA7G5cRsaptO7xUaQQn1tYaTat+07PycDsqzDcz2LcUN/4DttbelJTi2EV69wW3bH9UCC 07BUe3LVAUzqIyQt+ykI0bk4ZJvhF4JB0DaOUvhDVphqz8FEpMleM6ysjAc1l6E8i+WrSwvItSB/Z c8mjK/Qqn/UMeJ1I0unCJFNsUP9aKTGcNs0simKZCRBCMs6W4wnfeL8ueVN0b3+6gRH3zOzKrH+Sy 0y9+JijQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1urDzc-0000000F9kA-1EJT; Wed, 27 Aug 2025 11:07:04 +0000 Received: from bali.collaboradmins.com ([148.251.105.195]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1urC8f-0000000EmtW-0PSG; Wed, 27 Aug 2025 09:08:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1756285695; bh=sHB7aQqQ5tvTIwvx7aEQX0xjPTW6+EELkX33HX6IEUE=; h=From:To:Cc:Subject:Date:From; b=iP47MwToVkWq0XComZtgpx/oRQkGxlyLT8aWPxGGT1rFmV2r1c6Cd4IuZb2L5HlKB rBkEpTz9i34NyRZbBF5ayjW+oaDmEKQVdPWVViP54gG0iEnv5rLFneKYVZUgCol56p cGh++knuM/inLsB7A5px+e/oI3Zlcd2opO68POH0mw/Vi5gKiQ8nPK4QlS8337slm0 LKnEYHNRw+PCv6q22GLOyoFhDVXYDCZ/JxySsIOuaIOjxlX6nw5cX3c9V1ii+4QW9O m8lKh2FYkz1Y4SrzjcXoYd6z/U/e7tttgn3Fr5tRS6tImHsZ9ovGCZlJQLiTE4Ipop 03sD2bZAF5ciQ== Received: from benjamin-XPS-13-9310.. (unknown [IPv6:2a01:e0a:120:3210:4be:99b9:5069:3bef]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bali.collaboradmins.com (Postfix) with ESMTPSA id 99CC017E03B0; Wed, 27 Aug 2025 11:08:14 +0200 (CEST) From: Benjamin Gaignard To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, nicolas.dufresne@collabora.com, jgg@ziepe.ca, p.zabel@pengutronix.de, mchehab@kernel.org Cc: iommu@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, kernel@collabora.com, linux-media@vger.kernel.org, Benjamin Gaignard Subject: [PATCH v8 0/7] Add support for Verisilicon IOMMU used by media codec blocks Date: Wed, 27 Aug 2025 11:07:56 +0200 Message-ID: <20250827090809.34555-1-benjamin.gaignard@collabora.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Type: text/plain; charset=y Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250827_020817_282922_4E758CF4 X-CRM114-Status: GOOD ( 22.64 ) 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 Hi all, This patch series adds support for the Verisilicon IOMMU, which is found in front of hardware encoder and decoder blocks in several SoCs using Verisilicon IP. A first implementation of this IOMMU is available on the Rockchip RK3588 SoC. Rockchip provides a driver for this hardware in their 6.1 kernel branch: https://github.com/rockchip-linux/kernel/blob/develop-6.1/drivers/iommu/rockchip-iommu-av1d.c This series includes: - a new binding for the Verisilicon IOMMU - a driver implementation - DT updates for RK3588 The driver was forward-ported from Rockchip’s 6.1 implementation, the prefix was renamed to vsi for generality, and several fixes were applied. AV1 decoding was tested using the stateless VPU driver and Fluster. The test results show a score of 205/239, which confirms that no regressions were introduced by this series. Feedback and testing welcome. changes in version 8: - Add myself in MAINTAINERS file. - Add API to restore VSI iommu context from decoder driver - Fix reported checkpatch issues: add comment in pinlock_t declaration and remove blank line. - Include board name in defconfig patch commit message changes in version 7: - fix locking issues. - add a patch in AV1 video decoder to manage per context iommu domain. - fix compilation issues when build as module. - remove useless "rockchip,rk3588-av1-iommu" compatible in driver code. changes in version 6: - rework lock schema in vsi_iommu_attach_device() so it protected against concurrent invalidation. - flush the cache after changing of domain. changes in version 5: - change locking schema to use 2 spin_locks: one to protect vsi_domain data and one to protect vsi_iommu structure. - make suspend/resume more robust by calling disable/enable function. - rebased on top of v6.16-rc5 changes in version 4: - rename and reorder compatibles fields. - Kconfig dependencies - Fix the remarks done by Jason and Robin: locking, clocks, macros probing, pm_runtime, atomic allocation. changes in version 3: - Change compatible to "rockchip,rk3588-iommu-1.2" - Fix compatible in .yaml - Update DT and driver to use "rockchip,rk3588-iommu-1.2" compatible - Set CONFIG_VSI_IOMMU as module in defconfig - Create an identity domain for the driver - Fix double flush issue - Rework attach/detach logic - Simplify xlate function - Discover iommu device like done in ARM driver - Remove ARM_DMA_USE_IOMMU from Kconfig changes in version 2: - Add a compatible "rockchip,rk3588-av1-iommu" - Fix clock-names in binding - Remove "vsi_mmu" label in binding example. - Rework driver probe function - Remove double flush - Rework driver internal structures and avoid allocate in xlate function. - Do not touch to VPU driver anymore (path removed) - Add a patch to enable the driver in arm64 defconfig Benjamin Gaignard (7): dt-bindings: vendor-prefixes: Add Verisilicon dt-bindings: iommu: verisilicon: Add binding for VSI IOMMU iommu: Add verisilicon IOMMU driver MAINTAINERS: Add entry for Verisilicon IOMMU driver media: verisilicon: AV1: Restore IOMMU context before decoding a frame arm64: dts: rockchip: Add verisilicon IOMMU node on RK3588 arm64: defconfig: enable Verisilicon IOMMU for Rockchip RK3588 .../bindings/iommu/verisilicon,iommu.yaml | 71 ++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 8 + arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 11 + arch/arm64/configs/defconfig | 1 + drivers/iommu/Kconfig | 11 + drivers/iommu/Makefile | 1 + drivers/iommu/vsi-iommu.c | 810 ++++++++++++++++++ .../verisilicon/rockchip_vpu981_hw_av1_dec.c | 14 + include/linux/vsi-iommu.h | 21 + 10 files changed, 950 insertions(+) create mode 100644 Documentation/devicetree/bindings/iommu/verisilicon,iommu.yaml create mode 100644 drivers/iommu/vsi-iommu.c create mode 100644 include/linux/vsi-iommu.h -- 2.43.0