From patchwork Tue Oct 25 16:54:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jernej_=C5=A0krabec?= X-Patchwork-Id: 10889 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1115221wru; Tue, 25 Oct 2022 10:03:21 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5lAx0nxv2tTkXYhroUzwVbwqoDqTl/DVNKTsUh6Q5tUs8fyIhRwi7mL+JKGVjFhrb6U0KM X-Received: by 2002:a17:902:d70e:b0:178:2d9d:ba7b with SMTP id w14-20020a170902d70e00b001782d9dba7bmr39896457ply.90.1666717401192; Tue, 25 Oct 2022 10:03:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666717401; cv=none; d=google.com; s=arc-20160816; b=1KV+s7X+wVCaedXJnQ315Pi6JOAstayjv6Lao7NOa8GOZ4yrGjIfnQetBeNmevwZbQ DkLhTWhJL65Iduw30e9/mFrpY+rH+GNeuaLRfs64HdIVT309+kS+MeVxOVcE0gbgt3x7 FeRDE461EczqVK5RRHCS1Yny+uSGmaOWZOgdHaR6svgkqqVamEUvhqInH1DLIYUy155d SvyjGPPXYEX9MRwDRoTRohxCsvu1t0L0r2k2SdpPBxMxSjJeRzz95yXqrdyddXrCYsH9 oBID422pO1WOGVnu8BCLHutjqsag2zPZLS4OtuHcpmxXt142HmfFBTpJCYgHnzBNkYOg rhVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=9XVDf5CNGXohyTDwQXIUTQefWV+zveKEvdiJ0iEMiCo=; b=DYhbJv+JGALFJgaY2Pn0n0D0+Fm3WGVuTVGYkRvtEsXZn1QXaQh2J8zHHgRTjf3vO+ F3qTX63TJy/9m2htGl70YiyyzZNRuiiQm5RAmp1nvMMMplAXZXLy7vN2evDP6WPx1l+H juCb/L9L5PtbccBadcb1w4rh7koW773ISO4rZxqK/tq5dqKnkHwekQQgBAVXL5IkzZN3 ESU4BhqzcEeBI1jFzrs8kuhB7//k5JYVfnJ9IQ7GHw+2kA2VkYalpN0yNgen2FoHzTmb s0RTDkGFMAKd/oBw0Khrbd2/eVnwlGu/MVUyPJjR6cgWpLQXpP8s75SgsDlqbHnfsO4a hiMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=nWWvtDEn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a11-20020a630b4b000000b00458fbbabb21si3136851pgl.710.2022.10.25.10.03.05; Tue, 25 Oct 2022 10:03:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=nWWvtDEn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231911AbiJYQyl (ORCPT + 99 others); Tue, 25 Oct 2022 12:54:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231663AbiJYQyh (ORCPT ); Tue, 25 Oct 2022 12:54:37 -0400 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63FC518E06 for ; Tue, 25 Oct 2022 09:54:36 -0700 (PDT) Received: by mail-wr1-x42e.google.com with SMTP id bs21so6256576wrb.4 for ; Tue, 25 Oct 2022 09:54:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9XVDf5CNGXohyTDwQXIUTQefWV+zveKEvdiJ0iEMiCo=; b=nWWvtDEnIFtSZIk2LCzs577LelT3TwOr923486IySggt0BodjQKLBytOshOzTgOkYW ShmNzTVUSj8yF8YpAsjkfXnqZw9wZ5Uxu9cFvPR9mPLSpXrh+BkPuGjsXfVTCZW1lhnx 0nTXG8MyhhmQg8vNm8SyUcRZLE8mXL8mUBGwSQHSBzwib4mvgtW7KuJzCIXJrps8u9xz lEykKyUDhLTep6wRxxb1huTpc2j03/jY6taCCgvFu/pOHj1NuUf4lp0rjTTClFpPNGUX f7e54GNHC3jhmlr7DPiVXmhJPTzx5nKyRS2lKAXqqXmREcNaaQYCs2/OmzZLNBHc8nHX 604Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9XVDf5CNGXohyTDwQXIUTQefWV+zveKEvdiJ0iEMiCo=; b=5YQIfeVo44kcGxz3FunMbymIYgRseQXePk15U7r5vMGzW6kmQyOGSjS7WbXONp0arP Jh6ruNc1KbYPO9gSoKiDIyQ9xz/85puY4mGNjSaa8vRIitrUjSYkanWgxUZeSLXJyGMN GhrsENuqAycxV+nyF0O/dhLFP0gdVLDNU8r3VutIICXTIEE2IZa+CP/Pv/YHixmHvs4V 85grZtjbzwGkqRN2DGlYuI59d1mtfqB8wKpaEYCbCy83sG7m3s8/Uv0N6F6b9XELvPu0 nxcD9drGd/Eyx7JK9kqoR/xE8XOmYSHmZQ06bCh9BBdZbax+Q4UXNi8sYdqhWF399hw5 +21w== X-Gm-Message-State: ACrzQf2+250w4Cd3I7fKzJwHGIa22HXJDV98p05jL2PheGpQXKhBP/P+ A/K4w0vCgV8cPDAly4p0XGw= X-Received: by 2002:a5d:6dcd:0:b0:235:f087:fec2 with SMTP id d13-20020a5d6dcd000000b00235f087fec2mr18867780wrz.444.1666716874910; Tue, 25 Oct 2022 09:54:34 -0700 (PDT) Received: from kista.localdomain (82-149-19-102.dynamic.telemach.net. [82.149.19.102]) by smtp.gmail.com with ESMTPSA id a20-20020a05600c349400b003a6a3595edasm3023989wmq.27.2022.10.25.09.54.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 09:54:34 -0700 (PDT) From: Jernej Skrabec To: maxime@cerno.tech, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: wens@csie.org, samuel@sholland.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej Skrabec Subject: [PATCH v2 1/5] iommu/sun50i: Fix reset release Date: Tue, 25 Oct 2022 18:54:11 +0200 Message-Id: <20221025165415.307591-2-jernej.skrabec@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221025165415.307591-1-jernej.skrabec@gmail.com> References: <20221025165415.307591-1-jernej.skrabec@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747679865743274620?= X-GMAIL-MSGID: =?utf-8?q?1747679865743274620?= Reset signal is asserted by writing 0 to the corresponding locations of masters we want to reset. So in order to deassert all reset signals, we should write 1's to all locations. Current code writes 1's to locations of masters which were just reset which is good. However, at the same time it also writes 0's to other locations and thus asserts reset signals of remaining masters. Fix code by writing all 1's when we want to deassert all reset signals. This bug was discovered when working with Cedrus (video decoder). When it faulted, display went blank due to reset signal assertion. Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver") Signed-off-by: Jernej Skrabec --- drivers/iommu/sun50i-iommu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c index cd9b74ee24de..270204a6ec4a 100644 --- a/drivers/iommu/sun50i-iommu.c +++ b/drivers/iommu/sun50i-iommu.c @@ -27,6 +27,7 @@ #include #define IOMMU_RESET_REG 0x010 +#define IOMMU_RESET_RELEASE_ALL 0xffffffff #define IOMMU_ENABLE_REG 0x020 #define IOMMU_ENABLE_ENABLE BIT(0) @@ -893,7 +894,7 @@ static irqreturn_t sun50i_iommu_irq(int irq, void *dev_id) iommu_write(iommu, IOMMU_INT_CLR_REG, status); iommu_write(iommu, IOMMU_RESET_REG, ~status); - iommu_write(iommu, IOMMU_RESET_REG, status); + iommu_write(iommu, IOMMU_RESET_REG, IOMMU_RESET_RELEASE_ALL); spin_unlock(&iommu->iommu_lock); From patchwork Tue Oct 25 16:54:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jernej_=C5=A0krabec?= X-Patchwork-Id: 10888 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1114706wru; Tue, 25 Oct 2022 10:02:28 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6SD71NxSCNaHWoKkH1rtdvqvimEddTbPzkUeBtb9BmwCGlVJ/Wih2k3vjVTZQDfYAJ8/nh X-Received: by 2002:a65:5241:0:b0:46e:f67c:c108 with SMTP id q1-20020a655241000000b0046ef67cc108mr11732072pgp.362.1666717348144; Tue, 25 Oct 2022 10:02:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666717348; cv=none; d=google.com; s=arc-20160816; b=j0Jd/vbjKN/n9rSN4R19dM8J1ChbcvXZPbVaheiyvJQFzXe7yN3ufea3v2dYHIITu2 EcX6y2du+sdcxo4JSaE/veBSPuej9d98vUYYkYoVBe1E5jZW3tLwHC4HdKwqQLHcwFpt H1DdK+7dDHUABX/pcxmN6T/sUDiokvxXSvnqtGQCWIeQwfdJDPKVuTPTlzdOlHppQebz 6Yte4G8SFPig/FjXq/i/35FuDOsLafLBZ7K7c7q2FHnk59Sf4TQgJotph3Ox3dKyDbtc EJViOrJmyNJwRfG2+D/TjpE+WiwC1OCYgWBUAq60/X3/uC83ECAdUdqyr0JYR4nwVEjS qLcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=fxmsLKzFVvKcS3WMj1YQZz1vx7/2bMhWnQ94H0bmWEY=; b=ghxW57eeZXjpITog7eN057FIyO5O+vFxlB5Y9uSuBy3SKewXgN0wVhl724yA0ifwKz jFefECq1tm+vr5suYZMOrJfZ3PypzQZkQen6Vvnrf6064BJYGNLS/+ko7BLK9SU6q1uT ApMroyNAh1yE5O1rEh+ucj/BXxZY6hhSY70Cn6LnjXt5NTEB4c7QtXzy1Du6dGSTBpub 0mjvjenAsIAJb3EYlprVc8a6ioK3jES2XUM81Y8oKi+yiRj08M6WGTk7jIjFzmKVTBNg KKLkN4tQwKXLdTVui85wDS3yJ9DpI06U3Ak55MLPsmkB+bqCMDiU5/t0l2goDk4/Z9DX TLuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Nykt+sLE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c7-20020a056a00248700b0056c37608f45si1425721pfv.348.2022.10.25.10.01.43; Tue, 25 Oct 2022 10:02:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Nykt+sLE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231967AbiJYQyo (ORCPT + 99 others); Tue, 25 Oct 2022 12:54:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231761AbiJYQyi (ORCPT ); Tue, 25 Oct 2022 12:54:38 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76D841ADBF for ; Tue, 25 Oct 2022 09:54:37 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id bu30so22157619wrb.8 for ; Tue, 25 Oct 2022 09:54:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fxmsLKzFVvKcS3WMj1YQZz1vx7/2bMhWnQ94H0bmWEY=; b=Nykt+sLEadPMO+cbi45gb3Ye9NF4TPpULSSO3kp+XegRbPdux6w/+ZO3CR3SXQRW8I R3TuAZZf1w7TrwlmiHAZ86B2JWU42B4iOt8JBUaz6eJeiBBy1XkUogeLCwFtGfszG9uR Z3rcrOhRdGx2cafEhzZkq8e1iQe9O7MFXbfFvujOvM5KHs0wioEYKntJ/BBvMa941RoX +hpKjDKTz1JH+yS0JdHZ4RzjqXIc5ObsolSvx7vq9a++fXRWX1RlSr6DmT9rqchhO4LG KvJzUCvEhmdpE1rxgBVZ1ozzNn44JG024aTd8a59jr+v0PkKHBZ0JwY5do5aEDVyYWDQ UwxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fxmsLKzFVvKcS3WMj1YQZz1vx7/2bMhWnQ94H0bmWEY=; b=7koiRsWXxacVIr5HDCAL2hTKvRwEPhCQ4jMFowaWy7PW5ZPpItTY0+j+HVKPLWLb46 HJWsl432w23lFsmGijvLwQHso9RimwYs8D9PURpiLcSv6MZZPEGqZyYIHbZ9/SJNTsnZ 19EWeu6nIaB7Ajsn+sSWOn2Fzm9P6pQ4aI4oqS1wn0MIAKz9JlZa4mdrVK2HBMkCZIQf HsJsIqBueXzXxX3rCkffyTDci5m37uQ/Ul1/9kLzjdUfo+4rC2ydRepXU3E+g80aVEC5 Krr0TadfRM9RBVSAC7snZ/gFDHkzrwU6iuKudVkw09crzia4edaU32UZMhGC9fPUvsfe AOwQ== X-Gm-Message-State: ACrzQf28DE5pRmhgXntRPvjr3CvF4NENvaeARb3zJpu1P34b/AhNiRIb 95TyD9xgDXXuQOcU3hS6Zq8= X-Received: by 2002:a5d:42c7:0:b0:236:4ddd:3576 with SMTP id t7-20020a5d42c7000000b002364ddd3576mr18079744wrr.289.1666716875926; Tue, 25 Oct 2022 09:54:35 -0700 (PDT) Received: from kista.localdomain (82-149-19-102.dynamic.telemach.net. [82.149.19.102]) by smtp.gmail.com with ESMTPSA id a20-20020a05600c349400b003a6a3595edasm3023989wmq.27.2022.10.25.09.54.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 09:54:35 -0700 (PDT) From: Jernej Skrabec To: maxime@cerno.tech, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: wens@csie.org, samuel@sholland.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej Skrabec Subject: [PATCH v2 2/5] iommu/sun50i: Consider all fault sources for reset Date: Tue, 25 Oct 2022 18:54:12 +0200 Message-Id: <20221025165415.307591-3-jernej.skrabec@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221025165415.307591-1-jernej.skrabec@gmail.com> References: <20221025165415.307591-1-jernej.skrabec@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747679809904857775?= X-GMAIL-MSGID: =?utf-8?q?1747679809904857775?= We have to reset masters for all faults - permissions, L1 fault or L2 fault. Currently it's done only for permissions. If other type of fault happens, master is in locked up state. Fix that by really considering all fault sources. Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver") Signed-off-by: Jernej Skrabec --- drivers/iommu/sun50i-iommu.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c index 270204a6ec4a..bbc269500800 100644 --- a/drivers/iommu/sun50i-iommu.c +++ b/drivers/iommu/sun50i-iommu.c @@ -869,8 +869,8 @@ static phys_addr_t sun50i_iommu_handle_perm_irq(struct sun50i_iommu *iommu) static irqreturn_t sun50i_iommu_irq(int irq, void *dev_id) { + u32 status, l1_status, l2_status, resets; struct sun50i_iommu *iommu = dev_id; - u32 status; spin_lock(&iommu->iommu_lock); @@ -880,6 +880,9 @@ static irqreturn_t sun50i_iommu_irq(int irq, void *dev_id) return IRQ_NONE; } + l1_status = iommu_read(iommu, IOMMU_L1PG_INT_REG); + l2_status = iommu_read(iommu, IOMMU_L2PG_INT_REG); + if (status & IOMMU_INT_INVALID_L2PG) sun50i_iommu_handle_pt_irq(iommu, IOMMU_INT_ERR_ADDR_L2_REG, @@ -893,7 +896,8 @@ static irqreturn_t sun50i_iommu_irq(int irq, void *dev_id) iommu_write(iommu, IOMMU_INT_CLR_REG, status); - iommu_write(iommu, IOMMU_RESET_REG, ~status); + resets = (status | l1_status | l2_status) & IOMMU_INT_MASTER_MASK; + iommu_write(iommu, IOMMU_RESET_REG, ~resets); iommu_write(iommu, IOMMU_RESET_REG, IOMMU_RESET_RELEASE_ALL); spin_unlock(&iommu->iommu_lock); From patchwork Tue Oct 25 16:54:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jernej_=C5=A0krabec?= X-Patchwork-Id: 10893 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1123009wru; Tue, 25 Oct 2022 10:17:33 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4l+AVsqKi4/pRN2n7xt7jwfg+wXZm01P1asbe8/aqCc3TK4cE1xu/1IEa83wlxDMI1T4n4 X-Received: by 2002:a17:906:9bd4:b0:7ad:2d86:418c with SMTP id de20-20020a1709069bd400b007ad2d86418cmr978183ejc.380.1666718252977; Tue, 25 Oct 2022 10:17:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666718252; cv=none; d=google.com; s=arc-20160816; b=BPe0YyIRg2Fg8Si6bATjX8QSUx0GKD6e5Vi5mMitzHupq/e1DDQhlMZG9qqUu2z3YC dMC2el00rOSdydOcGjGKcpWbObsLNMdFbYMYy8Zw/20gOrtLciWQWFwpW1uMlHpmh+88 6gy2RExOMnISJhM895KQl/DGRY2Xs5AWFU4BwhTa5VUj3OvRLD1em03EjWa5VJeEP9UQ gRXzC27Oj11WUWCvuM5xQNuwu7VibHU/qGUh9l4wBOxwGXp+ZVoBggbIdtTSZ3QN/SFV tzQeGhHu3Es0JCdHxK8wDea6GlBKx8WuSqiWCkcx6gfMKAcdYmDcIB9MhyIzSe+vtKCY 2KRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Q3Fgy6ar1zYHVJgyinsGrfKVrX6mZaQbt8q/dXIx19k=; b=Ldt8xYmF2UgzhMzq5ZyHcfHvCTFbztImC8WPcLdMiyinSRPfYYNxr0KCJc+cF3XFuO +ehl3AO9npmxX4zqaAh3ptQtI7X5LZdfUwbEabsKmOFv1BKRUh+J9q0kqNOpRKxMopJM 5S+fPG8swGnwXVP24HRFa5FHzaakCCJW/ZDCePKU21oZkNqY3fHM0ao6umUsl1nCAkC4 KsszP0crdcU50rvhjg+PDH8+GJVSeXW3IBFSqudop188mqBMo+AzqMVY9XNFkNprrQUy 1cKRWgGTUKf56bgjQMibBpnMb8fbx2FZXrqh95So8m7VhUVVZVI99nrfRdrpTPm1vijv B/Zg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=KxaheGRK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i3-20020a17090671c300b0073db9474d06si3026085ejk.325.2022.10.25.10.17.08; Tue, 25 Oct 2022 10:17:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=KxaheGRK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232208AbiJYQyt (ORCPT + 99 others); Tue, 25 Oct 2022 12:54:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229717AbiJYQyk (ORCPT ); Tue, 25 Oct 2022 12:54:40 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5BF2C1EAC9 for ; Tue, 25 Oct 2022 09:54:38 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id k8so13493834wrh.1 for ; Tue, 25 Oct 2022 09:54:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q3Fgy6ar1zYHVJgyinsGrfKVrX6mZaQbt8q/dXIx19k=; b=KxaheGRKnwqkzce0a2Zgx3U/pr8SwK/9NCPKKP5oFz0u5wQGk3AnnzyNdNH1vzKhNt aS38eOd7IygJ3U6NfjWm/4uSFbulrRqvzT66xYqDXJ1C2kaZH/65eWYUyeq5/VoJk2er I8ZYKO4NQ2QVVFvqc3WEE7Cg2xbbCQ/j/kMoyQre2PvipucNkplMtMdibxfa+uN7z36i /rOnVYYfwtclXaARGXp04ftjtb/U8N9lmTzZB4B3hHLUQvFH+YlrGcmgvRZjgKk/wNLX Y5ezx5boqZGMzV/tVSb8P9hlXVS/CphlLNvdyHdjOh/7KSz3pBv32zfQCxzVrkWZzlnB B7qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q3Fgy6ar1zYHVJgyinsGrfKVrX6mZaQbt8q/dXIx19k=; b=r+GeozudndzFkb5Cn8UbkkrETZlOkpDl5LKydfOIbowEMteO3lsvIpBXSjjb/sKB1p GaZGrDcNjzhKg8KxFVD75iG0vClKjAkmqc+h6ZmAReLrDEzRQNOxsQ813NRC4oLVKrEI l7sbn1bAXdzzh1sz0Dx9BpXG0KYQD2wswi1CtgItalEi2Tsen1WrGbJox7eu+yTAqEvQ Mf8vEQcLMoMwjRJX36Zgtne8JMu1zz9G+tEe7S78Qbqb1MYGr7ZsCdjHY31/MIJJ9O6o kBGB6WZPXeslEyHvQxHzaRd7aQRscO7OQGdgllCd4+Mzz2MK6ujobFQVSclV8VO9Rp5Z MzEg== X-Gm-Message-State: ACrzQf1MjCaTTleZsuz4mAEWzM18xaVuBXQHTvpfknycCE4TokGceGKn a7WGuSPpKserYHj09dm7ME8= X-Received: by 2002:adf:e484:0:b0:236:6a2e:154e with SMTP id i4-20020adfe484000000b002366a2e154emr9844814wrm.664.1666716876981; Tue, 25 Oct 2022 09:54:36 -0700 (PDT) Received: from kista.localdomain (82-149-19-102.dynamic.telemach.net. [82.149.19.102]) by smtp.gmail.com with ESMTPSA id a20-20020a05600c349400b003a6a3595edasm3023989wmq.27.2022.10.25.09.54.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 09:54:36 -0700 (PDT) From: Jernej Skrabec To: maxime@cerno.tech, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: wens@csie.org, samuel@sholland.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej Skrabec Subject: [PATCH v2 3/5] iommu/sun50i: Fix R/W permission check Date: Tue, 25 Oct 2022 18:54:13 +0200 Message-Id: <20221025165415.307591-4-jernej.skrabec@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221025165415.307591-1-jernej.skrabec@gmail.com> References: <20221025165415.307591-1-jernej.skrabec@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747680758425195283?= X-GMAIL-MSGID: =?utf-8?q?1747680758425195283?= Because driver has enum type permissions and iommu subsystem has bitmap type, we have to be careful how check for combined read and write permissions is done. In such case, we have to mask both permissions and check that both are set at the same time. Current code just masks both flags but doesn't check that both are set. In short, it always sets R/W permission, regardles if requested permissions were RO, WO or RW. Fix that. Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver") Signed-off-by: Jernej Skrabec --- drivers/iommu/sun50i-iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c index bbc269500800..df871af04bcb 100644 --- a/drivers/iommu/sun50i-iommu.c +++ b/drivers/iommu/sun50i-iommu.c @@ -271,7 +271,7 @@ static u32 sun50i_mk_pte(phys_addr_t page, int prot) enum sun50i_iommu_aci aci; u32 flags = 0; - if (prot & (IOMMU_READ | IOMMU_WRITE)) + if ((prot & (IOMMU_READ | IOMMU_WRITE)) == (IOMMU_READ | IOMMU_WRITE)) aci = SUN50I_IOMMU_ACI_RD_WR; else if (prot & IOMMU_READ) aci = SUN50I_IOMMU_ACI_RD; From patchwork Tue Oct 25 16:54:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jernej_=C5=A0krabec?= X-Patchwork-Id: 10891 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1119211wru; Tue, 25 Oct 2022 10:09:59 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4CdcT1VUN0h/EI1NcP5OKO7PxbxPGR06fDjqdBXpbHHAcVppF0H8ECq+FxHlF7+88F8gBu X-Received: by 2002:a17:907:75d5:b0:78d:ef76:da7d with SMTP id jl21-20020a17090775d500b0078def76da7dmr33522585ejc.476.1666717799114; Tue, 25 Oct 2022 10:09:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666717799; cv=none; d=google.com; s=arc-20160816; b=CV23goY5B2qzUfl7JPDJkEMYNV0Poj5dHBi1meBB6ik59VQCYKLieyM5ojcPob7tVS /N4x6zRT1enTiDHjABAnUIAwIlbFVRzfaQh/QBWXxwU/QjbBj7Qa2lYeJnzSogDHMxMj mdoJVp5HXxnNUSFWHtHJGTpVLfdoTNlUR1dqPerLhaevnL+jTZ0eR+D6fY6y/0GW3KhT JAc+Dv28bS2EXkTIkiFKvyHuIQe3tKZJ6389FyblJmajFcTzMIjBCDyhOR6+MkgIx6Hn pwRSo8jDiDpzICkinEeKlusc7O82XZSdM4PDqwolgELkfteQoUObad93UkS+bD7ioC4m kIbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=d/ULxq2EdVWZOhwK21JX/tvDkCGf2dqu3n7qEL+lTOY=; b=r9tMCOWQrMCGdoxS53esDVFDUv6M1by5Uy+KdxXLwdPz01cJYUVDQx1DyyLsrtl0ZI VQwV4viy87yTb4kcrVe3er74GQWSeoF07ENu9witHJLicHXH/gj4IoaD5MUTHkNFMqpR 8jyhGgXdKMOlNXUncBBm56JPagt1JGz8FtNgh1ouKK6BdMY6oi9iq7miZK0q36VhcVFK at2w+m+2cb/HDH7Zl+xYcsD6pXNcxcCdLeczrM7KXBc8lG44XFagR8kh4yzFn334TZ1w VxGgVXrZLPud0sXm6212APVkWMBN4niojwt9DZN+0Ef+Ynkl0tW3gruLeLDbX1VSrG2Y sz3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=gWB9Uysq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gy12-20020a170906f24c00b0077f92be81adsi3145614ejb.212.2022.10.25.10.09.31; Tue, 25 Oct 2022 10:09:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=gWB9Uysq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231844AbiJYQyy (ORCPT + 99 others); Tue, 25 Oct 2022 12:54:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231906AbiJYQyk (ORCPT ); Tue, 25 Oct 2022 12:54:40 -0400 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 870A822B24 for ; Tue, 25 Oct 2022 09:54:39 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id o4so13918996wrq.6 for ; Tue, 25 Oct 2022 09:54:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d/ULxq2EdVWZOhwK21JX/tvDkCGf2dqu3n7qEL+lTOY=; b=gWB9UysqAbqOPf2utGCOJH9LJdHOTVvaB5IzqXJ++K/yLuCOmVzCGmTWOlhFwGnNZ0 /1dY+xVgUo+QcHKWnYnpR5lT0jOKo+LhbGfj7zACigig7IiRakyNWEOebPeyBRg9NfRa gFWh5ww9Y0Jc+XhTLLpQqIOM21QcG72QsPGe+gi5I9OSY0fVe2rKCalR6BMzhJwfZ91Q Zgmp9N7XliVwx3Ml6S9CO1NA9AbKpCiYuL+qAWLMxnMXHUnEb69TTsEaOEJ0njKBXIrq NtiigBcNGVlOe3WJ7lJgbHvYDnRr3BeFTzYElFREinnm+LCJ0/Resp8Sv5GGG8mgsqVG ANjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d/ULxq2EdVWZOhwK21JX/tvDkCGf2dqu3n7qEL+lTOY=; b=3q2/EitpKNr9wuCWo9O9cNzrJTTKBKMwylKo8uYaSlhszWDlJD+FO51c3M6QLkfhAt FX0OauUPaxib7/yszNS3GBilq0bEzmuMWrRwLI8kAsKMLXM8F39p9yisACw+V3JZZiKP c9tSSF3t8T0ym2OAFCj5mhAxSeg7qpDsbv4e3SCmQQ0N9f3eO8bY3iEaelZ5qD7tMjEx Of42O1bkO+LPHiU3VBmBYT8EWIzUB1sTBIJjDajKg0kzJR2nbUEPtVJnu02a5SryY+Im VTstBV8QaKRVANQRC8FGm+XD8iYi1E50bUgclP0f9FfkIKcR/ISMPQLrOSAB145tPIPc lhYw== X-Gm-Message-State: ACrzQf14wIkgzyYXB5y7fJT7XpoIahPCrY6L6LdG5MttfdMmPsTp9GRh vxVWn0dJreUlOZRqH6qo9Vo= X-Received: by 2002:a05:6000:1c0a:b0:22e:5d8a:c903 with SMTP id ba10-20020a0560001c0a00b0022e5d8ac903mr25013588wrb.182.1666716878012; Tue, 25 Oct 2022 09:54:38 -0700 (PDT) Received: from kista.localdomain (82-149-19-102.dynamic.telemach.net. [82.149.19.102]) by smtp.gmail.com with ESMTPSA id a20-20020a05600c349400b003a6a3595edasm3023989wmq.27.2022.10.25.09.54.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 09:54:37 -0700 (PDT) From: Jernej Skrabec To: maxime@cerno.tech, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: wens@csie.org, samuel@sholland.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej Skrabec Subject: [PATCH v2 4/5] iommu/sun50i: Fix flush size Date: Tue, 25 Oct 2022 18:54:14 +0200 Message-Id: <20221025165415.307591-5-jernej.skrabec@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221025165415.307591-1-jernej.skrabec@gmail.com> References: <20221025165415.307591-1-jernej.skrabec@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747680282976522012?= X-GMAIL-MSGID: =?utf-8?q?1747680282976522012?= Function sun50i_table_flush() takes number of entries as an argument, not number of bytes. Fix that mistake in sun50i_dte_get_page_table(). Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver") Signed-off-by: Jernej Skrabec --- drivers/iommu/sun50i-iommu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c index df871af04bcb..e62e245060ac 100644 --- a/drivers/iommu/sun50i-iommu.c +++ b/drivers/iommu/sun50i-iommu.c @@ -512,7 +512,7 @@ static u32 *sun50i_dte_get_page_table(struct sun50i_iommu_domain *sun50i_domain, sun50i_iommu_free_page_table(iommu, drop_pt); } - sun50i_table_flush(sun50i_domain, page_table, PT_SIZE); + sun50i_table_flush(sun50i_domain, page_table, NUM_PT_ENTRIES); sun50i_table_flush(sun50i_domain, dte_addr, 1); return page_table; From patchwork Tue Oct 25 16:54:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jernej_=C5=A0krabec?= X-Patchwork-Id: 10890 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp1117688wru; Tue, 25 Oct 2022 10:07:14 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7i8AYfKVubovki8G1ge1GcilhsxushDA+Bb+JCnIpA1Sh4bBsmlWwx+4KycvAPRk9u3Qy8 X-Received: by 2002:a17:907:d02:b0:7a3:de36:b67 with SMTP id gn2-20020a1709070d0200b007a3de360b67mr13448367ejc.451.1666717634592; Tue, 25 Oct 2022 10:07:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666717634; cv=none; d=google.com; s=arc-20160816; b=rFWfVp9ikr5YFHjzaDnhlEA6RPow+nRsLICcqZ6BDwECVZlmxVejcZpZRLgqjxSSJz sM5qnjzv1G8gNBswvquS1qsXemfuvxTf/3+LVf5lzW1DOyWC7YYN1vvcDLHYGzdtTwRB 0fIIibQBypcWY0IUY5Bmu3aP2Mm5CmmUQr0zWbnJYJrz6fSJhhYA+M8KDUXE69PwZevI 4jLEwDH65tRXzYNJg3AupLousCrL1dtLeZWyPDyaK6qOpJGxGI3VzAvag3Nho895JCZ5 9DpNoQPEAN9NwW9JkSCSRrFcIuPbvS8EiyyYydbptoFaQ9Cjp1WhafLsejva3VLlXRDZ djUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Wj7FhB58uMn4h8H3wgZfmSRd9vXTbsp8lRGrOrs+X1o=; b=DzvztwT00tW3Aq3uUmtt1NUcuUJkRw4p5qBnh1caJjOtB7ZaJiRYZxvxEYGzqzn3yd Syo+UdZDBgPeFJNP8xfmwjvqtRky1QUyz6faoO4P9ktHHKdiu8EsN7jIWYTd6Ut8aTDm mtNUrQ9CtTpqapAQfbRgbsfBRgnZVBqysEnvMqRDua9wlrSXLHzykDVbMXfyQxvvQlvC xYu0DvymvSOGaPykXmQpKduRBh5/Jb2dP54jRx2q6Fs5YlIXyu+MHIEQe7sA24qLJ3IR UAU0rtYQQFRT83OB/j6CBRqr2BRuDtMetbc2mPEikRZIVK2zkiC+9hJgLlz/V9Izcqgf VzGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="KoO/IFDI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w21-20020a1709062f9500b007808f3f4cbcsi2861571eji.239.2022.10.25.10.06.41; Tue, 25 Oct 2022 10:07:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="KoO/IFDI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232203AbiJYQzU (ORCPT + 99 others); Tue, 25 Oct 2022 12:55:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45188 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232240AbiJYQzF (ORCPT ); Tue, 25 Oct 2022 12:55:05 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8165D5209E for ; Tue, 25 Oct 2022 09:54:49 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id k8so13494880wrh.1 for ; Tue, 25 Oct 2022 09:54:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Wj7FhB58uMn4h8H3wgZfmSRd9vXTbsp8lRGrOrs+X1o=; b=KoO/IFDIdAddmPIJ1BG+QvpjyIUIS+dN795VoEhPKi5wfaQcbf+E+GBzzCH6fbXB/f d9ezM6PZerO2XMyIMxsSkwcP20hElLy6CA53mi4Ad70JlUoEJZ4K5wCBfivlaTzslW/j YMhNodNgw0XA0BPiiU+0Hcacb+yulPiCGfNKmvPAuKajNPunn14TvN1/MPH986ZC67w0 zkf6rSBJMR4omsaTAkmgZQtJcYGtOFewv3K43i1E5CtMwARAPVfK5Tq/KrxUNFrk7sYb 2mv3NfngdOVyfsvD7dk7CUw6njAMR0Vg70i5toRbU7IqeLnCDaRSm4G0ppSF5+EIz4O0 73lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Wj7FhB58uMn4h8H3wgZfmSRd9vXTbsp8lRGrOrs+X1o=; b=vkKaqXvJmq8dp197dfc9TzDHURecL/SD31iwekFxCJOr/hB/OKlsELAsmyNo1m1vsm +c9e7IUPC5QILmjGqiwukCm/fqM8EI1LBWXTPg0W0tpKaO05VWwEPzdrNPXPrnuWeuvL IKNyUaA/sWAtycoc++qpsHdgBusM/pPINMeBZSrvaupFPUCqiOZxkCWbwdxgsiRZU1Ep /lT56vWZ1Fz1k7x4obEzDMPKOq13ZL+hFhJVUlTAbq7e55K8TsS0XOBNpMrmcRgeFQeQ 7Yug/UeH+rA/JgOvuqeUuXFif+/1WfHleEGpq9o7wPkI0hB5I3U3dYdGC1YKnyz7+Z7w JGrQ== X-Gm-Message-State: ACrzQf3kaWJWnheS4+zRSEFbum9fB0GOlrjRO9jM43lQhokxtZSjANSU XmNg5CdzQdmjwEcpKOsHo/4ypI8VbgvqSA== X-Received: by 2002:a5d:64c2:0:b0:22e:41b1:faf7 with SMTP id f2-20020a5d64c2000000b0022e41b1faf7mr24834767wri.428.1666716879104; Tue, 25 Oct 2022 09:54:39 -0700 (PDT) Received: from kista.localdomain (82-149-19-102.dynamic.telemach.net. [82.149.19.102]) by smtp.gmail.com with ESMTPSA id a20-20020a05600c349400b003a6a3595edasm3023989wmq.27.2022.10.25.09.54.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Oct 2022 09:54:38 -0700 (PDT) From: Jernej Skrabec To: maxime@cerno.tech, joro@8bytes.org, will@kernel.org, robin.murphy@arm.com Cc: wens@csie.org, samuel@sholland.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Jernej Skrabec Subject: [PATCH v2 5/5] iommu/sun50i: Implement .iotlb_sync_map Date: Tue, 25 Oct 2022 18:54:15 +0200 Message-Id: <20221025165415.307591-6-jernej.skrabec@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221025165415.307591-1-jernej.skrabec@gmail.com> References: <20221025165415.307591-1-jernej.skrabec@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1747680110682867617?= X-GMAIL-MSGID: =?utf-8?q?1747680110682867617?= Allocated iova ranges need to be invalidated immediately or otherwise they might or might not work when used by master or CPU. This was discovered when running video decoder conformity test with Cedrus. Some videos were now and then decoded incorrectly and generated page faults. According to vendor driver, it's enough to invalidate just start and end TLB and PTW cache lines. Documentation says that neighbouring lines must be invalidated too. Finally, when page fault occurs, that iova must be invalidated the same way, according to documentation. Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver") Signed-off-by: Jernej Skrabec --- Changes from v1: - new patch drivers/iommu/sun50i-iommu.c | 73 ++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) -- 2.38.1 diff --git a/drivers/iommu/sun50i-iommu.c b/drivers/iommu/sun50i-iommu.c index e62e245060ac..5cb2d44dfb92 100644 --- a/drivers/iommu/sun50i-iommu.c +++ b/drivers/iommu/sun50i-iommu.c @@ -93,6 +93,8 @@ #define NUM_PT_ENTRIES 256 #define PT_SIZE (NUM_PT_ENTRIES * PT_ENTRY_SIZE) +#define SPAGE_SIZE 4096 + struct sun50i_iommu { struct iommu_device iommu; @@ -295,6 +297,62 @@ static void sun50i_table_flush(struct sun50i_iommu_domain *sun50i_domain, dma_sync_single_for_device(iommu->dev, dma, size, DMA_TO_DEVICE); } +static void sun50i_iommu_zap_iova(struct sun50i_iommu *iommu, + unsigned long iova) +{ + u32 reg; + int ret; + + iommu_write(iommu, IOMMU_TLB_IVLD_ADDR_REG, iova); + iommu_write(iommu, IOMMU_TLB_IVLD_ADDR_MASK_REG, GENMASK(31, 12)); + iommu_write(iommu, IOMMU_TLB_IVLD_ENABLE_REG, + IOMMU_TLB_IVLD_ENABLE_ENABLE); + + ret = readl_poll_timeout_atomic(iommu->base + IOMMU_TLB_IVLD_ENABLE_REG, + reg, !reg, 1, 2000); + if (ret) + dev_warn(iommu->dev, "TLB invalidation timed out!\n"); +} + +static void sun50i_iommu_zap_ptw_cache(struct sun50i_iommu *iommu, + unsigned long iova) +{ + u32 reg; + int ret; + + iommu_write(iommu, IOMMU_PC_IVLD_ADDR_REG, iova); + iommu_write(iommu, IOMMU_PC_IVLD_ENABLE_REG, + IOMMU_PC_IVLD_ENABLE_ENABLE); + + ret = readl_poll_timeout_atomic(iommu->base + IOMMU_PC_IVLD_ENABLE_REG, + reg, !reg, 1, 2000); + if (ret) + dev_warn(iommu->dev, "PTW cache invalidation timed out!\n"); +} + +static void sun50i_iommu_zap_range(struct sun50i_iommu *iommu, + unsigned long iova, size_t size) +{ + assert_spin_locked(&iommu->iommu_lock); + + iommu_write(iommu, IOMMU_AUTO_GATING_REG, 0); + + sun50i_iommu_zap_iova(iommu, iova); + sun50i_iommu_zap_iova(iommu, iova + SPAGE_SIZE); + if (size > SPAGE_SIZE) { + sun50i_iommu_zap_iova(iommu, iova + size); + sun50i_iommu_zap_iova(iommu, iova + size + SPAGE_SIZE); + } + sun50i_iommu_zap_ptw_cache(iommu, iova); + sun50i_iommu_zap_ptw_cache(iommu, iova + SZ_1M); + if (size > SZ_1M) { + sun50i_iommu_zap_ptw_cache(iommu, iova + size); + sun50i_iommu_zap_ptw_cache(iommu, iova + size + SZ_1M); + } + + iommu_write(iommu, IOMMU_AUTO_GATING_REG, IOMMU_AUTO_GATING_ENABLE); +} + static int sun50i_iommu_flush_all_tlb(struct sun50i_iommu *iommu) { u32 reg; @@ -344,6 +402,18 @@ static void sun50i_iommu_flush_iotlb_all(struct iommu_domain *domain) spin_unlock_irqrestore(&iommu->iommu_lock, flags); } +static void sun50i_iommu_iotlb_sync_map(struct iommu_domain *domain, + unsigned long iova, size_t size) +{ + struct sun50i_iommu_domain *sun50i_domain = to_sun50i_domain(domain); + struct sun50i_iommu *iommu = sun50i_domain->iommu; + unsigned long flags; + + spin_lock_irqsave(&iommu->iommu_lock, flags); + sun50i_iommu_zap_range(iommu, iova, size); + spin_unlock_irqrestore(&iommu->iommu_lock, flags); +} + static void sun50i_iommu_iotlb_sync(struct iommu_domain *domain, struct iommu_iotlb_gather *gather) { @@ -767,6 +837,7 @@ static const struct iommu_ops sun50i_iommu_ops = { .attach_dev = sun50i_iommu_attach_device, .detach_dev = sun50i_iommu_detach_device, .flush_iotlb_all = sun50i_iommu_flush_iotlb_all, + .iotlb_sync_map = sun50i_iommu_iotlb_sync_map, .iotlb_sync = sun50i_iommu_iotlb_sync, .iova_to_phys = sun50i_iommu_iova_to_phys, .map = sun50i_iommu_map, @@ -786,6 +857,8 @@ static void sun50i_iommu_report_fault(struct sun50i_iommu *iommu, report_iommu_fault(iommu->domain, iommu->dev, iova, prot); else dev_err(iommu->dev, "Page fault while iommu not attached to any domain?\n"); + + sun50i_iommu_zap_range(iommu, iova, SPAGE_SIZE); } static phys_addr_t sun50i_iommu_handle_pt_irq(struct sun50i_iommu *iommu,