Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp2644828rdb; Mon, 4 Dec 2023 03:42:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IGKB8CMgFczMWahOtjmXUpfXSLJ77M9KCaDoW1IyCmsOU+dnj9bA++Mrb5+Nrs0WWyvu+kc X-Received: by 2002:aa7:88d1:0:b0:6ce:5fd2:dd0f with SMTP id k17-20020aa788d1000000b006ce5fd2dd0fmr425808pff.7.1701690162087; Mon, 04 Dec 2023 03:42:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701690162; cv=none; d=google.com; s=arc-20160816; b=k5hq9zWw/a/pzlQKNO+vIHUtPiZA94WgeSpmBCGNZD50mQo2bNxl7qY59dBbHLChKE ETKPCHk6YtRFIk06jgExP5x4ZtJ3SPeGeoRwC9uQ2mHP4DK+7CVlTNeLf0yaXy1s0YsH MrVc0A91aTHoAJkIccJN64KcDMv5EaQu6Yhtnqknio0zZY6q1uePs3RajYZ3WpzVx9pb +3D6h88Ob7oprwwyarAqdfccLVbNlXwx7iXmP3h/qqG+mQwLBDc70oY6HOv/BQoeXbjw aX7m5LB5n5uZmToIWCoXXmP/sjydFCFoiPIMFeccN6Mqw3CERTD0S9aUIzRUvKN4kWzu /4IA== 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=Sjjv3p5jNupGO0rt7SAm98IW6kvskxa109XeBx+CRiY=; fh=VZHXHo+vwBqT7vOg4dFYBUvOBDmtIVtwH9XG5mvsu+Q=; b=m7BTpF12aizbXgVkztDVjZdezEYTfLaKal+lznGmgh4dq3NS4tlnMemtm0p/qyFB1B syJIWSC8eY8xYynqXSflC6s2L5i5tB4Wm+tlxqUDqyB7h9DWwqwRTnfM+u2VMkVxNr4G VgqsuZ+6N3glzRGC2qj8jVDxLiv9DZsmPpX01dd/NBuULfGq7TIcPEnbH2QJGX2R33TU 6NwHJqGrHm7Hk0EFjBgo68ABSgkRDKC/cqac+vLxJDY+6fTIAGUB+sO7az1llGhGZjTc NGZoI8+t50CIgbwcX1rowQ6MbwmaULfpCr5OBKHGXPsboN2AF6kAiSIVpHtmGLSv7F6Y 69VQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=hz0sFD+N; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id p14-20020a056a000a0e00b006cd8754211esi7877149pfh.250.2023.12.04.03.42.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 03:42:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=hz0sFD+N; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 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 groat.vger.email (Postfix) with ESMTP id B52998093F4E; Mon, 4 Dec 2023 03:42:37 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232798AbjLDLmS (ORCPT + 99 others); Mon, 4 Dec 2023 06:42:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60956 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229711AbjLDLmQ (ORCPT ); Mon, 4 Dec 2023 06:42:16 -0500 Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EDF43B0 for ; Mon, 4 Dec 2023 03:42:22 -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 6EE8466022D2; Mon, 4 Dec 2023 11:42:20 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1701690141; bh=eSpJG0YWIXZPNYb2R/czri772X3ebzFnTtplL2z+JAM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hz0sFD+NXH1EP6kQP5F/WXGW0j1yqaf47U1wtIaG+TzanlR7FSrnPgMCbn4VVHSrT XYGj2hpLOl7COx/7LhfXB1jnogMUgfMCUYfAxi+019qR9VFh6/vuO7oqgF5qMkVUJu 092uSd01TuDU2ydzy7KxH661R0OWBLwnWB+Ma6imNz8F715XoKixPX2vEsuNup4Koi P0X11R1p/tXWtgDBLoZaYhArMj7o9cnNINBne0kH31SdH5ZfZ+L3rmVpWViQAWAsfb pPttqqfprLgiGCceWhmwGMvQdUKUI5C06DdMtiP9hZS6jeE4WFEduEgckuk89/fnbT iF7OryPTcKB1w== 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 v4 1/3] drm/panfrost: Ignore core_mask for poweroff and disable PWRTRANS irq Date: Mon, 4 Dec 2023 12:42:13 +0100 Message-ID: <20231204114215.54575-2-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231204114215.54575-1-angelogioacchino.delregno@collabora.com> References: <20231204114215.54575-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 groat.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 (groat.vger.email [0.0.0.0]); Mon, 04 Dec 2023 03:42:37 -0800 (PST) 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()") Reviewed-by: Boris Brezillon Reviewed-by: Steven Price Signed-off-by: AngeloGioacchino Del Regno --- 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) -- 2.43.0