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 81AF04562A5 for ; Tue, 4 Aug 2026 10:10:06 +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=1785838208; cv=none; b=PclpJb2+bqpGV3N3MX6BhseEwRWOyMQtDo7x0mTjLj6CATtmX4jPOZNZKp2kqY3Fnvhh0miV2OnOP/z0U/gpa4lT+AkpJ8Vp1p1yh151Tx6VJ6K4CP5ZshuUFL57kcBNknNboDr0+r0BmRPR4m2fDAD/Jm4HPZb/GT35G64SwO8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785838208; c=relaxed/simple; bh=/ERn4ilSyg7dw4kv31czsKGd25efJ0U7glQoaAIJi6A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tAJnZxCT5lcypilSrd0KsVLlIy41DzQxKsr9hF0+m2qRiBjHHRu7hyGDNYQYZKjqWEko+ySSuFxRCxM/yX4ZY7qxvfNWVBCeXQe7sAiSBW344gpf1aJz9au6DpaFWuP4IxODqHZrjFMMzbL35VLhMAjMRa/y69EYN2fM7UwJ4fU= 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=D6YV13Mm; 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="D6YV13Mm" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1785838199; bh=/ERn4ilSyg7dw4kv31czsKGd25efJ0U7glQoaAIJi6A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=D6YV13MmS+a+Jw5PHS/1d3unsBdP/pHPmCEFNm6SbbhHq4w0Za+4RK83U0IBCNYEk 4bQ3BRka2U8Ro3uVvSTMcDUBiXT5byop/44RG1w4M70jwnbzvkjXbPDE2T+VfHXmma b05fcrJlJ3LPjp4Vcw5dMmxboaoDM5l8okd/S/ThOh0RGttGLtLDrBAhizSrinnLss xnQX1eVGbD9xC/aypa+oz99xcYe259MWI10+5IEvkHp7/xyRcLTmkG3TndTD86RK6n K4/sq/LlMA9mbDwtJTZ3JvB1/svozbqcITUNcDZl+wqmFVqpU9VxRWXVwzI88MTcVN hbuVfG5lacK4g== 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 9F74517E10C0; Tue, 04 Aug 2026 12:09:58 +0200 (CEST) From: Boris Brezillon Date: Tue, 04 Aug 2026 12:09:47 +0200 Subject: [PATCH 08/12] 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: <20260804-panthor-unplug-fixes-v1-8-abbbd2d41b13@collabora.com> References: <20260804-panthor-unplug-fixes-v1-0-abbbd2d41b13@collabora.com> In-Reply-To: <20260804-panthor-unplug-fixes-v1-0-abbbd2d41b13@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=1785838194; l=1813; i=boris.brezillon@collabora.com; s=20260429; h=from:subject:message-id; bh=/ERn4ilSyg7dw4kv31czsKGd25efJ0U7glQoaAIJi6A=; b=KLSwPU31j4IxIZZaosfLTGtNLC47HwXvaFlQtYhVCaaLFeTwCtG+GtnrdpjHmWrgM4oU89yem D1kwcnG3fedASv3Qlm1sx8P90JY7rpTni+M0+gNmvz8MP49y8RxDeE3 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 9a9025b02e28..1264c3ffa832 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -654,6 +654,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)); @@ -676,11 +680,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