Received: by 2002:a05:6358:a55:b0:ec:fcf4:3ecf with SMTP id 21csp3404401rwb; Mon, 16 Jan 2023 07:35:49 -0800 (PST) X-Google-Smtp-Source: AMrXdXtdn1zDQjU0vxgjWvKjpa29nj86qx1QnFWvYPR8MaVY3Mf2n+y0ADsLk8e790D3jMMFuIsa X-Received: by 2002:a17:906:507:b0:84d:489b:f1b1 with SMTP id j7-20020a170906050700b0084d489bf1b1mr12516949eja.75.1673883348783; Mon, 16 Jan 2023 07:35:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673883348; cv=none; d=google.com; s=arc-20160816; b=b9BGvK/xEYFQb+Wr36xoDQVvRL5Ema3aAi2FVMObMgHK1e+3Q8VSYWx5mi+c3gvHW1 9GoPQIaH+dIdPmo87yCVAlWUnAtYUF58I/1EKpIZWi1JfBJhIz+chHZNfh+DT13skIqQ VUn954CeuEQfYshucCJFJlwnht8XTjASWF0wyrkagcVZnRZEDtc1/+enq7UfXkeJvlOw PX/eZbBKSwf5uvHpNLN1P+GvVrap3EC5rpfm7WH4r7uPiH0aDt/R1Eipu7lXftzyQdYZ wekYTOiDYgeXEsIHcywTZURCnDxSOk4C/gt38O2SmJuRzwrQbrGz9LnRJ0ARBZ8MHz+U Nenw== 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=LWH5Yr6I4+OH50fAUKmsb9K+Phz3i3Vj8ROLfOintKo=; b=SmZmWM2k4XEQ4OThITaGkTeDMTXgrdUm7S0MfldVGTQF2M4Gc5oBp8b/eBzGUeDbBJ LU+3in3HfgKDwRky5fyUguI0sVmcWOX9vAaaN4dNPylUEhoN3Nd++npyrKtMxaSKaEFs qXH14j8mM8gOzbRR0fjCGBq+SjYcqe+A+AVGRj4Mo8U0OBfG6n8vSZCnq70fX22m0qT3 sHKjnNgQ9VJeZCV097U4+XDbYx1BjXChe9dR4oQ2UrTcJioHpD8iyFvrixN3AZF7Tn2X jR9YDHnhvv/einToFEz27tjjUYFBHdZsTRq7aTTMQQt0k/1vtDDoTTmvzPxXJD8fbso5 BwiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QhjQO0iM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h9-20020a0564020e8900b0049dce3ed3easi345638eda.337.2023.01.16.07.35.35; Mon, 16 Jan 2023 07:35:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QhjQO0iM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231810AbjAPOEY (ORCPT + 50 others); Mon, 16 Jan 2023 09:04:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231853AbjAPODl (ORCPT ); Mon, 16 Jan 2023 09:03:41 -0500 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D1032313D; Mon, 16 Jan 2023 06:02:54 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 7E047CE1166; Mon, 16 Jan 2023 14:02:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1EBB6C433F2; Mon, 16 Jan 2023 14:02:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1673877770; bh=c1dLUwLzKCg211SfEHv4A5E+XPyoUTVlsOTJ08S8uLo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QhjQO0iMneDDr6zm6B5ku1kwHIvlUF/AOXRW7f7WwdVw9e7qK9t8SYUcH7+fHBJn5 x79k9mqywvKIe0jPfmy7wFWEDAGgQJ4GfjTwRCEgoK9ufJnypTt8VwseK6NSCTu0Kc cvKdMqkQztvzoWiXTb/2ej+OyDk+Hvbp7OATYDRid+GttMyWIPJ9X6WqH4eskxl3WO gVOXMGAoNhmKI2XGgLJtuGHsQRCyWTpip1IbP2Xg+lEZsrl1NUhVZoqcP/yklGXzmA BBW0PhbHSdUvKEs2YIqbWZ1ZfJhzPtvRPKTBKq3PXvOGdjfWWWotZ+QbJJTmxymlMO yKFdluySDqCAA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Akhil P Oommen , Rob Clark , Sasha Levin , robdclark@gmail.com, quic_abhinavk@quicinc.com, dmitry.baryshkov@linaro.org, airlied@gmail.com, daniel@ffwll.ch, konrad.dybcio@somainline.org, geert@linux-m68k.org, dianders@chromium.org, olvaffe@gmail.com, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org Subject: [PATCH AUTOSEL 6.1 16/53] drm/msm/a6xx: Avoid gx gbit halt during rpm suspend Date: Mon, 16 Jan 2023 09:01:16 -0500 Message-Id: <20230116140154.114951-16-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20230116140154.114951-1-sashal@kernel.org> References: <20230116140154.114951-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Akhil P Oommen [ Upstream commit f4a75b5933c998e60fd812a7680e0971eb1c7cee ] As per the downstream driver, gx gbif halt is required only during recovery sequence. So lets avoid it during regular rpm suspend. Signed-off-by: Akhil P Oommen Patchwork: https://patchwork.freedesktop.org/patch/515279/ Link: https://lore.kernel.org/r/20221216223253.1.Ice9c47bfeb1fddb8dc377a3491a043a3ee7fca7d@changeid Signed-off-by: Rob Clark Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 15 +++++++++------ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 7 +++++++ drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 1 + 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c index e033d6a67a20..870252bef23f 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -876,7 +876,8 @@ static void a6xx_gmu_rpmh_off(struct a6xx_gmu *gmu) #define GBIF_CLIENT_HALT_MASK BIT(0) #define GBIF_ARB_HALT_MASK BIT(1) -static void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu) +static void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, + bool gx_off) { struct msm_gpu *gpu = &adreno_gpu->base; @@ -889,9 +890,11 @@ static void a6xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu) return; } - /* Halt the gx side of GBIF */ - gpu_write(gpu, REG_A6XX_RBBM_GBIF_HALT, 1); - spin_until(gpu_read(gpu, REG_A6XX_RBBM_GBIF_HALT_ACK) & 1); + if (gx_off) { + /* Halt the gx side of GBIF */ + gpu_write(gpu, REG_A6XX_RBBM_GBIF_HALT, 1); + spin_until(gpu_read(gpu, REG_A6XX_RBBM_GBIF_HALT_ACK) & 1); + } /* Halt new client requests on GBIF */ gpu_write(gpu, REG_A6XX_GBIF_HALT, GBIF_CLIENT_HALT_MASK); @@ -929,7 +932,7 @@ static void a6xx_gmu_force_off(struct a6xx_gmu *gmu) /* Halt the gmu cm3 core */ gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 1); - a6xx_bus_clear_pending_transactions(adreno_gpu); + a6xx_bus_clear_pending_transactions(adreno_gpu, true); /* Reset GPU core blocks */ gpu_write(gpu, REG_A6XX_RBBM_SW_RESET_CMD, 1); @@ -1083,7 +1086,7 @@ static void a6xx_gmu_shutdown(struct a6xx_gmu *gmu) return; } - a6xx_bus_clear_pending_transactions(adreno_gpu); + a6xx_bus_clear_pending_transactions(adreno_gpu, a6xx_gpu->hung); /* tell the GMU we want to slumber */ ret = a6xx_gmu_notify_slumber(gmu); diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index e846e629c00d..9d7fc44c1e2a 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -1277,6 +1277,12 @@ static void a6xx_recover(struct msm_gpu *gpu) if (hang_debug) a6xx_dump(gpu); + /* + * To handle recovery specific sequences during the rpm suspend we are + * about to trigger + */ + a6xx_gpu->hung = true; + /* Halt SQE first */ gpu_write(gpu, REG_A6XX_CP_SQE_CNTL, 3); @@ -1319,6 +1325,7 @@ static void a6xx_recover(struct msm_gpu *gpu) mutex_unlock(&gpu->active_lock); msm_gpu_hw_init(gpu); + a6xx_gpu->hung = false; } static const char *a6xx_uche_fault_block(struct msm_gpu *gpu, u32 mid) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h index ab853f61db63..eea2e60ce3b7 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h @@ -32,6 +32,7 @@ struct a6xx_gpu { void *llc_slice; void *htw_llc_slice; bool have_mmu500; + bool hung; }; #define to_a6xx_gpu(x) container_of(x, struct a6xx_gpu, base) -- 2.35.1