From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 AF35043B49C for ; Tue, 11 Aug 2026 10:18:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786443505; cv=none; b=eAIPGnpAFFV6DjW9MSXVOmpZVxJAnLxPmczDwtRxyCbGx6VYCn8rOOSbOHVkzSuNq2vwkoXzc71lj5uzgxx4xuRvuPhlLHQZ9/YZcB3LJyWW/yM6Nd4g5AwzAougaRNOteC9wsYazIAMhpcOy8c5Rp7lGjz+d59/jtSbFyfAZ7U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786443505; c=relaxed/simple; bh=tdKa3iEPlj3pDEW5mojDJ07XRew8XsVzU/fp1UTnZ+s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IxjdJjVJu/GUVi6ICLsZibwLy1WQ6hVMoNMYLftVLS1ngtFm4slnrxMfUDeBFQKmoIT6KyMbovP0cYig2pEEStUYCviGW1e7L4t89hd1jV9Ixccdpwg0rHqMuAMPeSA1kUXCjvpxqcgq7Yh+npYRbrnVaLdvRinoI4apZDWIYjw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=dtUQK+it; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="dtUQK+it" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1786443472; bh=tdKa3iEPlj3pDEW5mojDJ07XRew8XsVzU/fp1UTnZ+s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dtUQK+it7DhezXywi/idifHHMdch9D1kdNpnve/7HTapPAyjxs0ZuXEWkS4gqqQzS DTd5wFio21QUfg6Lqx6cpLeAdRR+vetHdohVB68jIbZx6XdgOpYHNaGc6yW/I4YkIA uc63wNR5NvtnmGeMVmeA4pYWdefXBPgwrmsQSjVdcNfQahMWZggt0FeOgOWSicl06P +kjh9N4CkAf648oPhnd3nkYdpFFo26cXexs9/ayV4XMiPIUJ1+AnXtN9m35zGhwyDA gKUXPhjxxUhQ0buLG9k+yELkM4QTWlrNZtWXdLNxufR8rnGrHUMs5NhkOmxSf5BGGY Bd9au4tXfEMqA== Received: from fedora-21.home (unknown [100.64.0.11]) (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: bbrezillon) by bali.collaboradmins.com (Postfix) with ESMTPSA id 7B2BC17E107E; Tue, 11 Aug 2026 12:17:52 +0200 (CEST) From: Boris Brezillon Date: Tue, 11 Aug 2026 12:17:44 +0200 Subject: [PATCH v2 10/17] drm/panthor: Check AS state before disabling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260811-panthor-unplug-fixes-v2-10-6b583e37f9ae@collabora.com> References: <20260811-panthor-unplug-fixes-v2-0-6b583e37f9ae@collabora.com> In-Reply-To: <20260811-panthor-unplug-fixes-v2-0-6b583e37f9ae@collabora.com> To: Steven Price , Liviu Dudau Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Boris Brezillon X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786443466; l=1813; i=boris.brezillon@collabora.com; s=20260429; h=from:subject:message-id; bh=tdKa3iEPlj3pDEW5mojDJ07XRew8XsVzU/fp1UTnZ+s=; b=DL0wv/KpUhTY11HUkSoSQ0lr6Ag4Jnb3mHCpc/YqeDKuHesr6CS4z6SUnJr2alm65cl2LvAuz dQF3rqYQboaDeOMk+YDY5WV7DRbn+W5fGt8qr8Mle8MX7I+ka4qeTHb X-Developer-Key: i=boris.brezillon@collabora.com; a=ed25519; pk=eN+ORdOgQY7d5U+0kA8h5bf67XdD8bhKbjD/TCHexSY= Use TRANSTAB == 0 as a way to detect if an AS slot is idle. This allows us to make panthor_mmu_as_disable() a NOP when it's called after a SOFT_RESET, which will be needed for our unplug rework. Signed-off-by: Boris Brezillon --- drivers/gpu/drm/panthor/panthor_mmu.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/panthor/panthor_mmu.c index 1b401fd0d2d7..a48466788f4d 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -634,6 +634,10 @@ static int panthor_mmu_as_disable(struct panthor_device *ptdev, u32 slot, lockdep_assert_held(&ptdev->mmu->as.slots_lock); + /* The AS was disabled already, nothing to do. */ + if (!gpu_read64(mmu->iomem, AS_TRANSTAB(slot))) + return 0; + panthor_mmu_irq_disable_events(&ptdev->mmu->irq, panthor_mmu_as_fault_mask(ptdev, slot)); @@ -656,11 +660,17 @@ static int panthor_mmu_as_disable(struct panthor_device *ptdev, u32 slot, if (recycle_slot) return 0; - gpu_write64(mmu->iomem, AS_TRANSTAB(slot), 0); - gpu_write64(mmu->iomem, AS_MEMATTR(slot), 0); gpu_write64(mmu->iomem, AS_TRANSCFG(slot), AS_TRANSCFG_ADRMODE_UNMAPPED); + ret = as_send_cmd_and_wait(ptdev, slot, AS_COMMAND_UPDATE); + if (ret) + return ret; - return as_send_cmd_and_wait(ptdev, slot, AS_COMMAND_UPDATE); + /* We reset the other fields late to ensure that, if something fails, + * the page table is considered active (TRANSTAB != NULL). + */ + gpu_write64(mmu->iomem, AS_MEMATTR(slot), 0); + gpu_write64(mmu->iomem, AS_TRANSTAB(slot), 0); + return 0; } static u32 panthor_mmu_fault_mask(struct panthor_device *ptdev, u32 value) -- 2.55.0