From patchwork Fri Dec 1 10:40:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AngeloGioacchino Del Regno X-Patchwork-Id: 172408 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp1023711vqy; Fri, 1 Dec 2023 02:40:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IFDmBOUXK8J2gzm8K+ZypHAPXTCrsDAAWB9WO4PA+skApWDrYrEYsOizw+LukcjRXNvwh1L X-Received: by 2002:a05:6358:4407:b0:16d:abc7:bfab with SMTP id z7-20020a056358440700b0016dabc7bfabmr29713663rwc.15.1701427249495; Fri, 01 Dec 2023 02:40:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701427249; cv=none; d=google.com; s=arc-20160816; b=axmHTRBT3Yr4CktNkaMIJWureI2XynGxsxZo4FPtFgQCZusXsL54DVCjH7bzhRopfs lRVEcaGdO3FD0J4wAy/Qsceky5IWZREiM/T7jvrMN2LyNa5NtPyouEp5kXW6ScEYwWd1 LisQPKBbkxqFY4o00U5JZJ0py+uk1Y4cnLt5OkX5QFPdpSoD/IzWk+QogUlrAGwSYvJD rovUf/QKi/jLdu9ybgMynHyLpw7iBm8OKyudgF9m4j+pYmBa3VPVY/hFi7Nkpn9+Hov9 L7RNI2M2zYlYOelNZ/6icGTa9JTRHGOBN1z4GvBThFPXRBqskj2xqmcrh6DJs0iygCXE X3vQ== 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=cB3mfzZEf189YNWWwDvr3l8knGHxkOsFPnRstSCbdJw=; fh=VZHXHo+vwBqT7vOg4dFYBUvOBDmtIVtwH9XG5mvsu+Q=; b=m9bS2iigxRK+imaIX8fdfw7H2WoG7N2ldy3+mlmRIpycogrc3oGZfCss2dcQSpjK6H jJNteqBTa+HYZTuhewNpxAKF5XLCTp6168l1vIcM3kY+OVzkaSRZCT7f3rzP/R+CbgRs l8K7vu1zmcD6JwwTJeGmpPyJsY8/ImNe58wv8Nw48QFZAUZpg+B8+OhyXJL03dBRNV86 //8+SKrOhTNiQPwpm6nOpMbAO2a2sJxFuFY6YvOnGubL+h77Nvk7wZLpuQIVur1f3heQ 7J2O0rNLd+U+tSU3j3eMkWjgmR43LK44cWYFa3HtZ+kpCa/AlQETin4U9X/M1ctwNOuK IAdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=TcZPEQmP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id x2-20020a654542000000b005c648edd16csi533137pgr.884.2023.12.01.02.40.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Dec 2023 02:40:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=TcZPEQmP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id C1DDA80F648F; Fri, 1 Dec 2023 02:40:44 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378326AbjLAKka (ORCPT + 99 others); Fri, 1 Dec 2023 05:40:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49112 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378239AbjLAKk3 (ORCPT ); Fri, 1 Dec 2023 05:40:29 -0500 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3716D4A for ; Fri, 1 Dec 2023 02:40:35 -0800 (PST) Received: from IcarusMOD.eternityproject.eu (cola.collaboradmins.com [195.201.22.229]) (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: kholk11) by madras.collabora.co.uk (Postfix) with ESMTPSA id A31F6660739D; Fri, 1 Dec 2023 10:40:33 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1701427234; bh=UdqAnQyqUpZF3YGNOviQ2mxK+3TR9j8a8/SIDFRzpkA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TcZPEQmPQ3RJ9k95K1YM75cPXqO5FMKLgLedx0yqCugFsRH7QTEDL2+jJFBOmWuyW xLWJ3/uez5Cj4VrqYfqCWhFrqLJjn2qcPtdgPJ6cL7Exvk3jMJXrvMJESZuyzhWVhY +/9VUcMasAnbvibVG1GIlrmZ9WehDXpXQ5faC+V0XhGog0CjYfryMieThrR+z/tXjT ZjSl6B9m3qo3RrYAMH/wJWyqqTQPIh5yGCjyxKjVf49UhaNBO8gsjRmJ5srNv+2BJF 1U5M8lBY7EjkDqUmvds3BzKEQ9WUw2deb2WsgVHLuFKafX/js4SJHCOy/e2xnrjsFt 26V3cp06vH5Pw== From: AngeloGioacchino Del Regno To: boris.brezillon@collabora.com Cc: robh@kernel.org, steven.price@arm.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, daniel@ffwll.ch, angelogioacchino.delregno@collabora.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com, m.szyprowski@samsung.com, krzysztof.kozlowski@linaro.org Subject: [PATCH v3 1/3] drm/panfrost: Ignore core_mask for poweroff and disable PWRTRANS irq Date: Fri, 1 Dec 2023 11:40:25 +0100 Message-ID: <20231201104027.35273-2-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231201104027.35273-1-angelogioacchino.delregno@collabora.com> References: <20231201104027.35273-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Fri, 01 Dec 2023 02:40:45 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784075779575957706 X-GMAIL-MSGID: 1784075779575957706 Some SoCs may be equipped with a GPU containing two core groups and this is exactly the case of Samsung's Exynos 5422 featuring an ARM Mali-T628 MP6 GPU: the support for this GPU in Panfrost is partial, as this driver currently supports using only one core group and that's reflected on all parts of it, including the power on (and power off, previously to this patch) function. The issue with this is that even though executing the soft reset operation should power off all cores unconditionally, on at least one platform we're seeing a crash that seems to be happening due to an interrupt firing which may be because we are calling power transition only on the first core group, leaving the second one unchanged, or because ISR execution was pending before entering the panfrost_gpu_power_off() function and executed after powering off the GPU cores, or all of the above. Finally, solve this by: - Avoid to enable the power transition interrupt on reset; and - Ignoring the core_mask and ask the GPU to poweroff both core groups Fixes: 22aa1a209018 ("drm/panfrost: Really power off GPU cores in panfrost_gpu_power_off()") Signed-off-by: AngeloGioacchino Del Regno Reviewed-by: Boris Brezillon Reviewed-by: Steven Price --- drivers/gpu/drm/panfrost/panfrost_gpu.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panfrost/panfrost_gpu.c index 09f5e1563ebd..bd41617c5e4b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -78,7 +78,12 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev) } gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_MASK_ALL); - gpu_write(pfdev, GPU_INT_MASK, GPU_IRQ_MASK_ALL); + + /* Only enable the interrupts we care about */ + gpu_write(pfdev, GPU_INT_MASK, + GPU_IRQ_MASK_ERROR | + GPU_IRQ_PERFCNT_SAMPLE_COMPLETED | + GPU_IRQ_CLEAN_CACHES_COMPLETED); /* * All in-flight jobs should have released their cycle @@ -425,11 +430,10 @@ void panfrost_gpu_power_on(struct panfrost_device *pfdev) void panfrost_gpu_power_off(struct panfrost_device *pfdev) { - u64 core_mask = panfrost_get_core_mask(pfdev); int ret; u32 val; - gpu_write(pfdev, SHADER_PWROFF_LO, pfdev->features.shader_present & core_mask); + gpu_write(pfdev, SHADER_PWROFF_LO, pfdev->features.shader_present); ret = readl_relaxed_poll_timeout(pfdev->iomem + SHADER_PWRTRANS_LO, val, !val, 1, 1000); if (ret) @@ -441,7 +445,7 @@ void panfrost_gpu_power_off(struct panfrost_device *pfdev) if (ret) dev_err(pfdev->dev, "tiler power transition timeout"); - gpu_write(pfdev, L2_PWROFF_LO, pfdev->features.l2_present & core_mask); + gpu_write(pfdev, L2_PWROFF_LO, pfdev->features.l2_present); ret = readl_poll_timeout(pfdev->iomem + L2_PWRTRANS_LO, val, !val, 0, 1000); if (ret)