Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp711873pxv; Thu, 15 Jul 2021 14:09:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzACN0gCcvWJ+de+XL7hmo+AQtSSPePFGk20mem9nOg9BVJOG8jm2LH6659jlxuRMDSfdGx X-Received: by 2002:a17:906:33d0:: with SMTP id w16mr7620960eja.376.1626383397750; Thu, 15 Jul 2021 14:09:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626383397; cv=none; d=google.com; s=arc-20160816; b=X1fE89ANUb+AZftWLuDT/dBFLbTs/It0fpklrdW+Ffpdh3KY/Yd+BQCE3KZQxa6GoK T+7U0VYnVUA+jeLsW4psrvSsj8+6a23MO+G554BXZj5g+cX/LabXJA4PmE57N5Cc/5MK O1dZ0+gknehFQdQ82wQhipupPhOccvz22mhMi8vXb0ayERoMefjBzRVNMbQTumSJwcFY Etx5YnMMEID8Gb/tifxmRhUrNGfxiubEoR3w/QP4vz/tOafEbai6lNVHQXSeJ1mKkwHU Rg+BF0W3/3X99uPU9Qj5OEbwGPJ+5w72rd6seq8yeW7PqGw4nOPxi2Su41fiNVhWbvcf FOLg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=PnKhKLvx0goCjjI8+MTPYesUupijBsBXwHh/sqWTwZc=; b=ASyOa46jcXbUsWG3qeuVTaZKAR3O3hqkXtDy+69ubvpPM3nyGcXZHC3GgSaCpAJcsl QIk/qJZStYMuSTeRrlrJkSsEU/7wVN92pwZPvvArDUVVxq1lvNxmOuu+UWOnCaUJypss CpgulvDuvkjs7XHpuGlVYws2JLfrhqKiJ1QevcgeVNWW/DIfYIHtKeWHLQ5IiE02VWqE iTYGXkOps2cwszYFRGWO5j8mu4NDTMjo5/mkUHpAH9viskjFjXJcGZ/Jl79nnkrMNCTR R9MkM+U4sPSPxFGvAizpD3ImA48hsOLlh2XODpV4ykqkOzdJAK18k1ElhtVJi+BeGEza MdjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="OR1xB/16"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g20si8928083edw.5.2021.07.15.14.09.35; Thu, 15 Jul 2021 14:09:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="OR1xB/16"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242725AbhGOTVg (ORCPT + 99 others); Thu, 15 Jul 2021 15:21:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:38428 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242763AbhGOTFh (ORCPT ); Thu, 15 Jul 2021 15:05:37 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 82FD6613D0; Thu, 15 Jul 2021 19:01:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626375720; bh=PYQwH381dJ8DrPCGAtiLLg9DJaaQdtKh+dXprzd9LkE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OR1xB/167GK0nHL6k2Ckopu9ipzbf/KKA/5zCasuNi5BVybVrtPSR+NbUrluJwj0p vIoclvRmWl/TBTlUqD7EVLqbznJBR8Ft2/zAZv4tGtNxnni+WXgPWX+cmigsuU21ES HJrUII2/Zofi48l1uP9VDBSEuBDXtneoQaIqjLpk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Evan Quan , Lijo Lazar , Alex Deucher Subject: [PATCH 5.12 165/242] drm/amdgpu: fix the hang caused by PCIe link width switch Date: Thu, 15 Jul 2021 20:38:47 +0200 Message-Id: <20210715182622.199012923@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210715182551.731989182@linuxfoundation.org> References: <20210715182551.731989182@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Evan Quan commit adcf949e664a8b04df2fb8aa916892e58561653c upstream. SMU had set all the necessary fields for a link width switch but the width switch wasn't occurring because the link was idle in the L1 state. Setting LC_L1_RECONFIG_EN=0x1 will allow width switches to also be initiated while in L1 instead of waiting until the link is back in L0. Signed-off-by: Evan Quan Reviewed-by: Lijo Lazar Signed-off-by: Alex Deucher Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h | 1 + drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c | 13 +++++++++++++ drivers/gpu/drm/amd/amdgpu/nv.c | 3 +++ 3 files changed, 17 insertions(+) --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.h @@ -90,6 +90,7 @@ struct amdgpu_nbio_funcs { bool enable); void (*program_aspm)(struct amdgpu_device *adev); void (*apply_lc_spc_mode_wa)(struct amdgpu_device *adev); + void (*apply_l1_link_width_reconfig_wa)(struct amdgpu_device *adev); }; struct amdgpu_nbio { --- a/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v2_3.c @@ -490,6 +490,18 @@ static void nbio_v2_3_apply_lc_spc_mode_ } } +static void nbio_v2_3_apply_l1_link_width_reconfig_wa(struct amdgpu_device *adev) +{ + uint32_t reg_data = 0; + + if (adev->asic_type != CHIP_NAVI10) + return; + + reg_data = RREG32_PCIE(smnPCIE_LC_LINK_WIDTH_CNTL); + reg_data |= PCIE_LC_LINK_WIDTH_CNTL__LC_L1_RECONFIG_EN_MASK; + WREG32_PCIE(smnPCIE_LC_LINK_WIDTH_CNTL, reg_data); +} + const struct amdgpu_nbio_funcs nbio_v2_3_funcs = { .get_hdp_flush_req_offset = nbio_v2_3_get_hdp_flush_req_offset, .get_hdp_flush_done_offset = nbio_v2_3_get_hdp_flush_done_offset, @@ -512,4 +524,5 @@ const struct amdgpu_nbio_funcs nbio_v2_3 .enable_aspm = nbio_v2_3_enable_aspm, .program_aspm = nbio_v2_3_program_aspm, .apply_lc_spc_mode_wa = nbio_v2_3_apply_lc_spc_mode_wa, + .apply_l1_link_width_reconfig_wa = nbio_v2_3_apply_l1_link_width_reconfig_wa, }; --- a/drivers/gpu/drm/amd/amdgpu/nv.c +++ b/drivers/gpu/drm/amd/amdgpu/nv.c @@ -1076,6 +1076,9 @@ static int nv_common_hw_init(void *handl if (adev->nbio.funcs->apply_lc_spc_mode_wa) adev->nbio.funcs->apply_lc_spc_mode_wa(adev); + if (adev->nbio.funcs->apply_l1_link_width_reconfig_wa) + adev->nbio.funcs->apply_l1_link_width_reconfig_wa(adev); + /* enable pcie gen2/3 link */ nv_pcie_gen3_enable(adev); /* enable aspm */