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 94DFE44C678 for ; Thu, 13 Aug 2026 10:57:16 +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=1786618639; cv=none; b=e1WQWPD8sVfhUbVwNiFsSxod1aHP3fs4WSk8wsQzO2utK4tW+2N2pkJGbeHhv9hn+M3bQQAJnHbWj0k1PlDHguko1fAyf+NwkORd9Nz0g/+Pd+Ai2euE3pW0I+nsFWx9EjG7wFYi8nxA8k+cLf/mu9gGbcQeP7zfQTaYVCSrd9g= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786618639; c=relaxed/simple; bh=tdKa3iEPlj3pDEW5mojDJ07XRew8XsVzU/fp1UTnZ+s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XlysyZhvXLiW+PciChgYFt472rJD/Cy0wtx8aZUatpWKRagHMH3aLtxklHuxoMFWPADqG/hBvrF1qmGDCIAaG3PS9R7VUNOZC3QQF65yFWxXtsI9OYMupfsvz+xER7rLWc5gQfmAvNJgVUQblYI6AEGNqf+zGDmSIQxdWW6imcE= 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=Jehriuzv; 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="Jehriuzv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1786618631; bh=tdKa3iEPlj3pDEW5mojDJ07XRew8XsVzU/fp1UTnZ+s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JehriuzvMgfQUTdmBiHbKaQ3TG0n6dxX8lbadmEbQyHjtunYjVRqwXBOADYQrFlYD gd4wnp2gddO1//7atr7oHxuvO5/xyOXA/pmNkAg6gMrHuecUuTWrIosr4ZMO4V3dN4 8MzPUBuZqH8IpGeikIHTyGlhUGiIhlCFxYBbG48ssnZ+1bW2jfFPRcGdJ98EU3a/v5 uRXFLVpc3QJmzEgkD7SRl2U+E2eWMrk0bQNiLaGLGFzRbGlUhWvhqvH3rdTOvFEuV9 bnanvJ2PrcVd79pqeQUaw9QTkHyQQIS1pxGdbqxP7V+6llZU2xLpTZRQzNrmQOJVRg qfW2oJcNdCT1Q== 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 7008717E1274; Thu, 13 Aug 2026 12:57:10 +0200 (CEST) From: Boris Brezillon Date: Thu, 13 Aug 2026 12:57:08 +0200 Subject: [PATCH v3 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: <20260813-panthor-unplug-fixes-v3-10-3ed4e961bbe7@collabora.com> References: <20260813-panthor-unplug-fixes-v3-0-3ed4e961bbe7@collabora.com> In-Reply-To: <20260813-panthor-unplug-fixes-v3-0-3ed4e961bbe7@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=1786618621; l=1813; i=boris.brezillon@collabora.com; s=20260429; h=from:subject:message-id; bh=tdKa3iEPlj3pDEW5mojDJ07XRew8XsVzU/fp1UTnZ+s=; b=10Gm9grrdNHb2N9BfKaUwDXZyel4DIfCZHW8+V0creWyc+gZ9zOrvW9hG2WMQDPiJ2P/j/lYr xuGOzP1Z5zUCZdem+FUU7THlZG84yvw128McTFP0WRTpMu8/VjV/Cl+ 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