From patchwork Thu Nov 9 10:25:38 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: 163340 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp340185vqs; Thu, 9 Nov 2023 02:26:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IEtvSNkycOdUC3llSani3Tbu+bZZkbHnYu77sbPB8hPlqNIh5xEDJ4RbUsbgX4ghcVRwOBb X-Received: by 2002:a9d:5e13:0:b0:6c6:18c7:7ca2 with SMTP id d19-20020a9d5e13000000b006c618c77ca2mr4639622oti.12.1699525617057; Thu, 09 Nov 2023 02:26:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699525617; cv=none; d=google.com; s=arc-20160816; b=SXJkcMw/RlHIO+AGZnQO8ceBXzRmgjr/ULblmLM6X6Ou8Uv6iP97fCLmfOvBLC4huS mTA53ts4Djrne9BhL8LIxy7ZB8wKUEUIZXBc39OdHq0ySTFAaA5zgmsunPvzm7N+XPlY nCvaZ9EcoI2IjjPcBS6zeB2+hhB8sMtaTHs9U27HXbiMkJBBDNkFHzGSHh5VUAgYwr8D 4KcJX2rTwkFJaT7zpgJUjML4M0CCGT0NjLXKcy9aaQ/KbiMD7Lk9NAHuH8u05BGbfKTk CiiXl6EyyLJHkzJQ2i7AYxcV+qq06xUR4GJo7pHGwD+QnNYYG+3tPbye6DltYO0N3fC0 9dXA== 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=CoeBCMhFyR/TBO8TaZqZN4LVGKzobLV+G9Iva9u7bR0=; fh=tAWvjMAEmVD3R8FzmIRYzQIb+yW9J+gWZJ2R8deHkVw=; b=vVGsgvFZJ3bthPg5QZJl438d0c/Ttp/UzeKa4353GxMDimmP252Oniv1ocmFNw4roD nLI2oFIR1nBq1pVOEHKPidr1wjI5ChRkHH2Iankbrlz8vIAqkuGpEHad6rYT/zhgGrJU glg5sA7O9BIz2MGYFq+YlF8oafSyIwjaqUYOFq3WgvtRXiEOZMOY7bWfypL/Eo+JILt5 /iGgGqzhaEo1LJwO+PiGh3JuUjgVTMIyxV1FVidnOQV0EmzZj9Ge46pZvNE5XEfmftyl y3Z5C5ggtyKzbHoGBkFVq4VKrC7iDCPS1knQO6KOxFD6f0xuZcT+95KxkRWNGQgzv8/q e8lQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=IEf1VhxQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 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. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id h192-20020a636cc9000000b005b8f298110csi6742159pgc.6.2023.11.09.02.26.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 02:26:57 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=IEf1VhxQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 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 9A3FD80A431C; Thu, 9 Nov 2023 02:26:21 -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 S233309AbjKIKZ4 (ORCPT + 32 others); Thu, 9 Nov 2023 05:25:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231849AbjKIKZx (ORCPT ); Thu, 9 Nov 2023 05:25:53 -0500 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 08D16D50 for ; Thu, 9 Nov 2023 02:25:51 -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 D92C7660748C; Thu, 9 Nov 2023 10:25:48 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1699525549; bh=VutiVek57G2+kwr524Jb2GlK/BYf3oFU6xsK3CmnGxY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IEf1VhxQm+/YrzXxu0eX2Vp/pHu8nyLBdUXrysuB7D05srtm483iHG5cBEXi9m0+W V9wKVd8g+jqhRoD2CfHjL9KEj712PUwqFtErrTOAccAbMdu5f1LHmb77ITJ5XGR1s4 w4qWhV/U02mblV0mYYqcgD+Q36FPULk5Eg4hVrcu1Ud4E9KUteIIn2O0Qd7+P4HiBm coHD52Egca4uqzE3cWey20IoxF6lXEgRrrHJ68zbVdLIpoAryvjy8oLVH4OiIey0pR cT7fSm/3xGfY+jWPv6bFAI0MLLZn+DhukSn7ytK9dWvpkNGR7Doz56bkQRcmdo0PZV Ft0tAZO5F8p9w== 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, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, wenst@chromium.org, AngeloGioacchino Del Regno , kernel@collabora.com Subject: [PATCH v3 1/6] drm/panfrost: Perform hard reset to recover GPU if soft reset fails Date: Thu, 9 Nov 2023 11:25:38 +0100 Message-ID: <20231109102543.42971-2-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231109102543.42971-1-angelogioacchino.delregno@collabora.com> References: <20231109102543.42971-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 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]); Thu, 09 Nov 2023 02:26:21 -0800 (PST) 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782081773347268983 X-GMAIL-MSGID: 1782081773347268983 Even though soft reset should ideally never fail, during development of some power management features I managed to get some bits wrong: this resulted in GPU soft reset failures, where the GPU was never able to recover, not even after suspend/resume cycles, meaning that the only way to get functionality back was to reboot the machine. Perform a hard reset after a soft reset failure to be able to recover the GPU during runtime (so, without any machine reboot). Signed-off-by: AngeloGioacchino Del Regno Reviewed-by: Steven Price --- drivers/gpu/drm/panfrost/panfrost_gpu.c | 13 ++++++++++--- drivers/gpu/drm/panfrost/panfrost_regs.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panfrost/panfrost_gpu.c index f0be7e19b13e..ae3f7d97bb47 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -60,14 +60,21 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev) gpu_write(pfdev, GPU_INT_MASK, 0); gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_RESET_COMPLETED); - gpu_write(pfdev, GPU_CMD, GPU_CMD_SOFT_RESET); + gpu_write(pfdev, GPU_CMD, GPU_CMD_SOFT_RESET); ret = readl_relaxed_poll_timeout(pfdev->iomem + GPU_INT_RAWSTAT, val, val & GPU_IRQ_RESET_COMPLETED, 100, 10000); if (ret) { - dev_err(pfdev->dev, "gpu soft reset timed out\n"); - return ret; + dev_err(pfdev->dev, "gpu soft reset timed out, attempting hard reset\n"); + + gpu_write(pfdev, GPU_CMD, GPU_CMD_HARD_RESET); + ret = readl_relaxed_poll_timeout(pfdev->iomem + GPU_INT_RAWSTAT, val, + val & GPU_IRQ_RESET_COMPLETED, 100, 10000); + if (ret) { + dev_err(pfdev->dev, "gpu hard reset timed out\n"); + return ret; + } } gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_MASK_ALL); diff --git a/drivers/gpu/drm/panfrost/panfrost_regs.h b/drivers/gpu/drm/panfrost/panfrost_regs.h index 55ec807550b3..c25743b05c55 100644 --- a/drivers/gpu/drm/panfrost/panfrost_regs.h +++ b/drivers/gpu/drm/panfrost/panfrost_regs.h @@ -44,6 +44,7 @@ GPU_IRQ_MULTIPLE_FAULT) #define GPU_CMD 0x30 #define GPU_CMD_SOFT_RESET 0x01 +#define GPU_CMD_HARD_RESET 0x02 #define GPU_CMD_PERFCNT_CLEAR 0x03 #define GPU_CMD_PERFCNT_SAMPLE 0x04 #define GPU_CMD_CYCLE_COUNT_START 0x05