From nobody Thu Nov 28 18:36:08 2024 Received: from mail-oa1-f53.google.com (mail-oa1-f53.google.com [209.85.160.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BB0813D531 for ; Mon, 30 Sep 2024 08:48:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727686096; cv=none; b=Zsyk77F9KenM1zVUzUy/I33wShQpm532ugcApLYZGFb94UhWY+F3bYKKxv+e5qbXvni7QAtN64+XBEXsBhBVItMgAkUh3KmkjUXwM/xxJ+KjNAXnr3ikJISF2ixZuixi/rGdLjZ6LAKqaiVfZALEQuH7JdXvw7bFmCBa7wUD6BI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727686096; c=relaxed/simple; bh=U+N6fg/c5wFr1Ckfoil5ymH2MOioONxXMWOiMGSRb6M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tKAQOZVBv6vsQ7ISwysYwvyqbKp74Ee5JyaJl5Te6ImlZTa5hS1trE9DJR9civXAdVUc06Sf7RdAWrnUJzbLkUsQofBF2wpOPetkQ1IiKfIzywWTQy8I1FSchanWnFuLcBN6pCZG95r3xhM0cZJSLcnb/BXgUR/BZDE5BGsvWEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=endlessos.org; spf=pass smtp.mailfrom=endlessos.org; dkim=pass (2048-bit key) header.d=endlessos.org header.i=@endlessos.org header.b=Uw5jRHeU; arc=none smtp.client-ip=209.85.160.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=endlessos.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=endlessos.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=endlessos.org header.i=@endlessos.org header.b="Uw5jRHeU" Received: by mail-oa1-f53.google.com with SMTP id 586e51a60fabf-27ce4f37afeso1623224fac.0 for ; Mon, 30 Sep 2024 01:48:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=endlessos.org; s=google; t=1727686094; x=1728290894; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=O/k2Ft8h3JSRNQa8sflgWnPU60S7BKrvPftgHnCSgfM=; b=Uw5jRHeUleKAcC6U3c5qB3j+Gcl9zBa5v1dpCIqA6v8/bHUjHzeMw+GHrGZYu5y0sy VaWFBmKBiOTJRTndIETOX34QU5TSERzGzWvkGaQYo+01opOomWO5FNiGqFxa1PXi+Y1I SbBWPdF66pjTpktNlNn9NnB76PYOc+KLDre0owxjCNnyVYgcKyFsG275T3n8w9UZCltD dPA3iGVwtxr4YjwGFkK8lMEeLAl/vxvG7LlY5RJ/7+WoCeTszcOhGz5EfQzUdp1uJM8A 4O5q+BOqyjmws1iiE3oJBuU61ypLtAJ0ZQ6HohLAdGf4NP3eHSaMwZhQUEUkGWY4ex8B a9Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727686094; x=1728290894; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O/k2Ft8h3JSRNQa8sflgWnPU60S7BKrvPftgHnCSgfM=; b=Im52+yuKxzTXs/relQ6dBTxL+ZUPCNaLow15Sfg7uPmibOET+otRCrVn1tb/hJ/Nso BUDKa0rSPKmJ9uwjyHe7ljQ3fujqKeaGsyeE22q6k8Tlu0rp38c2t79mpcwbaxT5/tDh LjAgFFBo/ds4+To2n/Wmkk7DTeY7s0FlyeMQpYkrSjVKplwrpB37sJkcRfdwHAI05xC4 zl9XOlxxdzsO/8B05NyWRU06u5v5xuXhOmB44MbFLuER5h+SJ7QqW0QeRIifrOHj94Lj i7rg1WPI1xddzWQtVdghekiiaojDx7htboXWTutIEuCB+6bZTl+RoiO7LVUlo1K3QpUQ l39A== X-Forwarded-Encrypted: i=1; AJvYcCWPqUNkxGtYzQgugA2orPDAp5XkzUKknvmS5WTgIYkzqCsBP/GdS855oP7IQxhtPMGRH3kAqzWdArqdTHY=@vger.kernel.org X-Gm-Message-State: AOJu0Ywuu1lBC7qjPePiAPaa8SoEyZOyCTLRKkpvCLR3IYVICM1ojRF9 26dq/4hgZrXZ3e29esFno6DNyoizQ5x4XlAk8degFFuJKZ2ZDqR5Yv0nemM0F44= X-Google-Smtp-Source: AGHT+IEctgfFVEWe3ZkXkooElSMnX6+GspuiN7R7XD8Cqsgbc1F66DIhxam/a3LljXHHHb9R0Ru40w== X-Received: by 2002:a05:6870:55cc:b0:270:2abd:4772 with SMTP id 586e51a60fabf-28710bdc836mr5800613fac.45.1727686093838; Mon, 30 Sep 2024 01:48:13 -0700 (PDT) Received: from localhost.localdomain ([123.51.167.56]) by smtp.googlemail.com with ESMTPSA id 41be03b00d2f7-7e6db29278esm5922525a12.16.2024.09.30.01.48.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Sep 2024 01:48:13 -0700 (PDT) From: Jian-Hong Pan To: Bjorn Helgaas Cc: Johan Hovold , David Box , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Kuppuswamy Sathyanarayanan , Nirmal Patel , Jonathan Derrick , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux@endlessos.org, Jian-Hong Pan Subject: [PATCH v11 1/3] PCI: vmd: Set PCI devices to D0 before enable PCI PM's L1 substates Date: Mon, 30 Sep 2024 16:29:27 +0800 Message-ID: <20240930082926.12966-2-jhp@endlessos.org> X-Mailer: git-send-email 2.46.2 In-Reply-To: <20240930082530.12839-2-jhp@endlessos.org> References: <20240930082530.12839-2-jhp@endlessos.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The remapped PCIe Root Port and the child device have PCI PM L1 substates capability, but they are disabled originally. Here is a failed example on ASUS B1400CEAE: Capabilities: [900 v1] L1 PM Substates L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- L1_PM_Substates+ PortCommonModeRestoreTime=3D32us PortTPowerOnTime=3D10us L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- T_CommonMode=3D0us LTR1.2_Threshold=3D101376ns L1SubCtl2: T_PwrOn=3D50us Power on all of the VMD remapped PCI devices to D0 before enable PCI-PM L1 PM Substates by following "PCIe r6.0, sec 5.5.4". Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D218394 Signed-off-by: Jian-Hong Pan Reviewed-by: Kuppuswamy Sathyanarayanan --- v2: - Power on the VMD remapped devices with pci_set_power_state_locked() - Prepare the PCIe LTR parameters before enable L1 Substates - Add note into the comments of both pci_enable_link_state() and pci_enable_link_state_locked() for kernel-doc. - The original patch set can be split as individual patches. v3: - Re-send for the missed version information. - Split drivers/pci/pcie/aspm.c modification into following patches. - Fix the comment for enasuring the PCI devices in D0. v4: - The same v5: - Tweak the commit title and message - Change the goto label from out_enable_link_state to out_state_change v6~8: - The same v9: - Update L1 PM Substates information against kernel v6.11 in commit message v10~11: - The same drivers/pci/controller/vmd.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c index 264a180403a0..11870d1fc818 100644 --- a/drivers/pci/controller/vmd.c +++ b/drivers/pci/controller/vmd.c @@ -740,11 +740,9 @@ static int vmd_pm_enable_quirk(struct pci_dev *pdev, v= oid *userdata) if (!(features & VMD_FEAT_BIOS_PM_QUIRK)) return 0; =20 - pci_enable_link_state_locked(pdev, PCIE_LINK_STATE_ALL); - pos =3D pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_LTR); if (!pos) - return 0; + goto out_state_change; =20 /* * Skip if the max snoop LTR is non-zero, indicating BIOS has set it @@ -752,7 +750,7 @@ static int vmd_pm_enable_quirk(struct pci_dev *pdev, vo= id *userdata) */ pci_read_config_dword(pdev, pos + PCI_LTR_MAX_SNOOP_LAT, <r_reg); if (!!(ltr_reg & (PCI_LTR_VALUE_MASK | PCI_LTR_SCALE_MASK))) - return 0; + goto out_state_change; =20 /* * Set the default values to the maximum required by the platform to @@ -764,6 +762,13 @@ static int vmd_pm_enable_quirk(struct pci_dev *pdev, v= oid *userdata) pci_write_config_dword(pdev, pos + PCI_LTR_MAX_SNOOP_LAT, ltr_reg); pci_info(pdev, "VMD: Default LTR value set by driver\n"); =20 +out_state_change: + /* + * Ensure devices are in D0 before enabling PCI-PM L1 PM Substates, per + * PCIe r6.0, sec 5.5.4. + */ + pci_set_power_state_locked(pdev, PCI_D0); + pci_enable_link_state_locked(pdev, PCIE_LINK_STATE_ALL); return 0; } =20 --=20 2.46.2 From nobody Thu Nov 28 18:36:08 2024 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF79E13D531 for ; Mon, 30 Sep 2024 08:49:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727686184; cv=none; b=qG8u9wqnRMttxDvYJ1coAZsr83SOAnGAnRzZ1ebru6hJ/y27cTh/KkzPONXswvxHc73AbMvIuILMLdIZ1cWePa0Y5gA7jRIBSRznNz+QJi5G8JMRFybqUt/9avRJzuJdd0Oyaka5omAlE1sp0VliI57ctAMHUSqMWrE8FzAB6+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727686184; c=relaxed/simple; bh=Vkf2QKjMMZln6LtloMLRj2/7a6w/QjR0Otd+AjYmdDI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UzkuOxzR5SbAT9/YQar4kjK0sj/UgeL0c/hp3pkeUxgzF2qV9UFDsHbarGv60KwBWXKbeFOaC2SrjJFJCcDOT8Unu7PNZpWbeXsxCxhzR+FoNvP1blwzNkfs2AimU8TvrYf2cvf12+lkGXef6zFSVDGqFzqLrSwPKci2HajWnz4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=endlessos.org; spf=pass smtp.mailfrom=endlessos.org; dkim=pass (2048-bit key) header.d=endlessos.org header.i=@endlessos.org header.b=CkElc7kW; arc=none smtp.client-ip=209.85.216.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=endlessos.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=endlessos.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=endlessos.org header.i=@endlessos.org header.b="CkElc7kW" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2e08085596eso3770974a91.3 for ; Mon, 30 Sep 2024 01:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=endlessos.org; s=google; t=1727686182; x=1728290982; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NZbysNIlOHPItNDMBaY/TpsEKwnYED1veTTB3Zccc8s=; b=CkElc7kW4Td92XFN/xUp0sYb+DjQi8FXfx3YoPCkESErArE/j3elG06j6Ho0gjQhDR JFYT2x9kXw+maGazoT5Xjfaone3czYz0W9luJ+S9c54oT1Vp/kPskfaQLO1SiNVoYPoE IIOliENL4m+a/iW1fqsue2b5JZVV9IuCzV3KlaAieVVUbJyPVV5TJvjv0svsasZfVHON 28mTPeV7yjC8OtRCvQuJKs2WEjjvJovi9SSf+PwMoRpZRcTYiD/BojBbumOUtCWY1q/m 8D2shBqN4Oa0R24oZyG+TEV7ZVHhlbd236gNuSyaY5lCfCE8Dy7ZCgidjlfEgFu2UaeH nRQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727686182; x=1728290982; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NZbysNIlOHPItNDMBaY/TpsEKwnYED1veTTB3Zccc8s=; b=CjlrJ9lTaz+laf41n98zAs7NPXVYU1FvRtXDy2h9t1kyZ+eTb5gnkbQXDXQNFEtQCd K21eynnqj10bSVxjh8ouROPG57MtgLa57Mh8xvxBYtfhTR4vy02LhdhDxlevYJqGRUDO rsr5lkNM8UffOGmftY0RxEamSYgxN5UpUnjZu/scKGLJqtTqFXrwshTXGG0/vrj2qGHR +lC0xaGNeXVgMtKPYEFR8WJaek6jmFkIWO0H+aTKVF983T05Mssuufm1quSH/6KyyuJo vjqjXJYriuf/OIvqjY11MwydmLO/CF7Gnv+tkJ1xqmMfdrUUN6mw1npsuem5bqBgjmB6 0TIA== X-Forwarded-Encrypted: i=1; AJvYcCUPBR7cYGxm7685CatQVnI9sOuKruXeuKWCrsg3o8kI63efHDux/NJBnPysdLIYXyhPkGHcADDLy6yt9+0=@vger.kernel.org X-Gm-Message-State: AOJu0YzeWw0m+hbRCDT8K0cnV2RjOU2HqK4Y4FQU2Awxy4GrOGveqVmF nlvKHbvToa95vBqVtNe7ULG862j6LkmQyl/JC4N3g7f3YtYmUgYz+4g8Tnu2bxQ= X-Google-Smtp-Source: AGHT+IHx4d72DodoB9zIC20IK7A8MZyAyZENySG3BGOZxvTHXfZzdZm2Jta5YQ3dDBcH7KW9JekMBQ== X-Received: by 2002:a17:90a:c691:b0:2d8:f0e2:96bc with SMTP id 98e67ed59e1d1-2e0b887aea6mr14158969a91.4.1727686181572; Mon, 30 Sep 2024 01:49:41 -0700 (PDT) Received: from localhost.localdomain ([123.51.167.56]) by smtp.googlemail.com with ESMTPSA id 98e67ed59e1d1-2e0b6e2b1f3sm7260565a91.57.2024.09.30.01.49.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Sep 2024 01:49:41 -0700 (PDT) From: Jian-Hong Pan To: Bjorn Helgaas Cc: Johan Hovold , David Box , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Kuppuswamy Sathyanarayanan , Nirmal Patel , Jonathan Derrick , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux@endlessos.org, Jian-Hong Pan , Bjorn Helgaas Subject: [PATCH v11 2/3] PCI/ASPM: Add notes about enabling PCI-PM L1SS to pci_enable_link_state(_locked) Date: Mon, 30 Sep 2024 16:48:41 +0800 Message-ID: <20240930084840.13424-2-jhp@endlessos.org> X-Mailer: git-send-email 2.46.2 In-Reply-To: <20240930082530.12839-2-jhp@endlessos.org> References: <20240930082530.12839-2-jhp@endlessos.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" According to "PCIe r6.0, sec 5.5.4", add note about D0 requirement in pci_enable_link_state() kernel-doc. Signed-off-by: Jian-Hong Pan Acked-by: Bjorn Helgaas Reviewed-by: Kuppuswamy Sathyanarayanan --- v3: - Fix as readable comments v4: - The same v5: - Tweak and simplify the commit message v6~11: - The same drivers/pci/pcie/aspm.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index cee2365e54b8..bd0a8a05647e 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -1442,6 +1442,9 @@ static int __pci_enable_link_state(struct pci_dev *pd= ev, int state, bool locked) * touch the LNKCTL register. Also note that this does not enable states * disabled by pci_disable_link_state(). Return 0 or a negative errno. * + * Note: Ensure devices are in D0 before enabling PCI-PM L1 PM Substates, = per + * PCIe r6.0, sec 5.5.4. + * * @pdev: PCI device * @state: Mask of ASPM link states to enable */ @@ -1458,6 +1461,9 @@ EXPORT_SYMBOL(pci_enable_link_state); * can't touch the LNKCTL register. Also note that this does not enable st= ates * disabled by pci_disable_link_state(). Return 0 or a negative errno. * + * Note: Ensure devices are in D0 before enabling PCI-PM L1 PM Substates, = per + * PCIe r6.0, sec 5.5.4. + * * @pdev: PCI device * @state: Mask of ASPM link states to enable * --=20 2.46.2 From nobody Thu Nov 28 18:36:08 2024 Received: from mail-ot1-f50.google.com (mail-ot1-f50.google.com [209.85.210.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3E1F13DB92 for ; Mon, 30 Sep 2024 08:50:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727686247; cv=none; b=eVPAImT6j40vsQUS4GWVisPUTpe+poLCG52Im+Mx+3GR0QQa4x0W79Pp3GIXwgNCEg5z5sNQ0oN2Dz/jJEpCaVVvmg4tIlnWWCAhX82eJ7d2YMilg3LLAUxc1IXweaJI9Iwak0ca9jSJ0GR2Z3zp4PjxH/jWnpc/JVixqLUaE74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727686247; c=relaxed/simple; bh=wy8iguslFVZzliXZzcb7u5HzE+VreSnr3UBebpFQFQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rn1m2vxufnlpKxS8vQvFhtQI3SevImcBmnhNKNjGqwlfjzbzEKa50/W0xcSPrv0sRQ60OrOrvcwSwF2vRSbP32NMpk/yjMJNO2Qpaq6DP0mzFkK5OQq7H7FchoZeJ19jFIpIdV6lVF0052P5qR1StvEsUM1q/+3YhjAcJIk5OYI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=endlessos.org; spf=pass smtp.mailfrom=endlessos.org; dkim=pass (2048-bit key) header.d=endlessos.org header.i=@endlessos.org header.b=uK0hMHep; arc=none smtp.client-ip=209.85.210.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=endlessos.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=endlessos.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=endlessos.org header.i=@endlessos.org header.b="uK0hMHep" Received: by mail-ot1-f50.google.com with SMTP id 46e09a7af769-710f388621fso2358453a34.1 for ; Mon, 30 Sep 2024 01:50:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=endlessos.org; s=google; t=1727686245; x=1728291045; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mLrW+tcCwGzFsdKdM1MlS8ifGjFaL9ZszhdYigwLq14=; b=uK0hMHepV9sqegixB0px2uspnWUQRxvkcRhaHvinybFjeJAjE6LUcVgj4zgEvtqTQK jE/jft8983KK+Ez/fxtqHgYePAt3xNJX+YH+j9ECraLXdNyZv7vDdtrWm+xgIdFbcIrt WjOp7VuPxuzkbC4IiyDBWwEeuNI/tnhrz/1DaNXaGtg5AvdEk6oCYh8HWIAXEyQErJfZ MCTmoYEL/pu7y9YEBEOLTw3oflJMoRZxHze3Rf2CuHNxbslz0Sb78WVciHBMjbpieITJ dFSJPHxkv3Znqek4nSA2XL7FHCf4nXVXR5oHwFRO23seiNp4PjTj8EM5vEPHrhsMGYKK fQkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727686245; x=1728291045; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mLrW+tcCwGzFsdKdM1MlS8ifGjFaL9ZszhdYigwLq14=; b=b9sD+pzNQjKYAEjrFJTDJZUzVLC82bbakg7okjRRpOihaawUnNrHGnvneKJsOjvUGS AK+uSz8gZGbu2aO0aVBCZ+c3y5LWscmWwb3e0nGvVlSPVGT3CMLmZmTd3TUZdaw6PC7L vIoxGawPJYoj3zYa0cqLOShQ4kBiOwrSxn0nyM4JjnJp8TV1Tcd483gCPy2rAUGq00rO M/ZpjsYugbrEa5MhDcQKHqB2ghUSxTKJ3qtCCL3QRALkD9ksW02HDWjN2EnK9EqV9Y/X NDJ684wjs21qvFDwNezj0t2ZUj0W4OgxsKxq5twgZnmK3Vt/os9OrKyqCA7bJZPeGhXg WhYA== X-Forwarded-Encrypted: i=1; AJvYcCWVhA8OuykMBdtAaf6qdlqnvfwx2j9tuYC9iteN0P6L68oCksY+/IJztxUI+we1sFKAsOaJnzTvJwlVGpw=@vger.kernel.org X-Gm-Message-State: AOJu0YyJAOzyNfV9oQD/Fz9fUSprSxjXRc5SJct6o3m65Mnc/aBJIdDo kURnrhAE/TsOeMMlzlAN9rw5JOuXP2QpbmiMSxAz6/6TMBCJkz0tvGreFu7DXjI= X-Google-Smtp-Source: AGHT+IFyyp6eFLEn3sXlZ0ElQTe1UiezE8XG1edMjtjXlT5v9Thax5iUWOArVnhiE0IP7SiSrq6/QQ== X-Received: by 2002:a05:6830:6009:b0:710:f200:eb55 with SMTP id 46e09a7af769-714fbe751a7mr7138673a34.1.1727686244777; Mon, 30 Sep 2024 01:50:44 -0700 (PDT) Received: from localhost.localdomain ([123.51.167.56]) by smtp.googlemail.com with ESMTPSA id d2e1a72fcca58-71b26498b26sm5734857b3a.9.2024.09.30.01.50.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Sep 2024 01:50:44 -0700 (PDT) From: Jian-Hong Pan To: Bjorn Helgaas Cc: Johan Hovold , David Box , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Kuppuswamy Sathyanarayanan , Nirmal Patel , Jonathan Derrick , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux@endlessos.org, Jian-Hong Pan Subject: [PATCH v11 3/3] PCI/ASPM: Make pci_save_aspm_l1ss_state save both child and parent's L1SS configuration Date: Mon, 30 Sep 2024 16:49:54 +0800 Message-ID: <20240930084953.13454-2-jhp@endlessos.org> X-Mailer: git-send-email 2.46.2 In-Reply-To: <20240930082530.12839-2-jhp@endlessos.org> References: <20240930082530.12839-2-jhp@endlessos.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable PCI devices' parameters on the VMD bus have been programmed properly originally. But, cleared after pci_reset_bus() and have not been restored correctly. This leads the link's L1.2 between PCIe Root Port and child device gets wrong configs. Here is a failed example on ASUS B1400CEAE with enabled VMD. Both PCIe bridge and NVMe device should have the same LTR1.2_Threshold value. However, they are configured as different values in this case: 10000:e0:06.0 PCI bridge [0604]: Intel Corporation 11th Gen Core Processor = PCIe Controller [8086:9a09] (rev 01) (prog-if 00 [Normal decode]) ... Capabilities: [200 v1] L1 PM Substates L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substat= es+ PortCommonModeRestoreTime=3D45us PortTPowerOnTime=3D50us L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- T_CommonMode=3D0us LTR1.2_Threshold=3D0ns L1SubCtl2: T_PwrOn=3D0us 10000:e1:00.0 Non-Volatile memory controller [0108]: Sandisk Corp WD Blue S= N550 NVMe SSD [15b7:5009] (rev 01) (prog-if 02 [NVM Express]) ... Capabilities: [900 v1] L1 PM Substates L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- L1_PM_Substat= es+ PortCommonModeRestoreTime=3D32us PortTPowerOnTime=3D10us L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- T_CommonMode=3D0us LTR1.2_Threshold=3D101376ns L1SubCtl2: T_PwrOn=3D50us Here is VMD mapped PCI device tree: -+-[0000:00]-+-00.0 Intel Corporation Device 9a04 | ... \-[10000:e0]-+-06.0-[e1]----00.0 Sandisk Corp WD Blue SN550 NVMe SSD \-17.0 Intel Corporation Tiger Lake-LP SATA Controller When pci_reset_bus() resets the bus [e1] of the NVMe, it only saves and restores NVMe's state before and after reset. The bus [e1] has only one NVMe device, so the NVMe's parent PCIe bridge is missed to be saved. However, when it restores the NVMe's state, ASPM code restores L1SS for both the parent bridge and the NVMe in pci_restore_aspm_l1ss_state(). Although the NVMe's L1SS is restored correctly, the parent bridge's L1SS is restored with a wrong value 0x0. Because, the parent bridge's L1SS was not saved by pci_save_aspm_l1ss_state() before reset. So, if the PCI device has a parent, make pci_save_aspm_l1ss_state() save the parent's L1SS configuration, too. This is symmetric on pci_restore_aspm_l1ss_state(). Link: https://lore.kernel.org/linux-pci/CAPpJ_eexU0gCHMbXw_z924WxXw0+B6SdS4= eG9oGpEX1wmnMLkQ@mail.gmail.com/ Closes: https://bugzilla.kernel.org/show_bug.cgi?id=3D218394 Fixes: 17423360a27a ("PCI/ASPM: Save L1 PM Substates Capability for suspend= /resume") Signed-off-by: Jian-Hong Pan Suggested-by: Ilpo J=C3=A4rvinen --- v9: - Drop the v8 fix about drivers/pci/pcie/aspm.c. Use this in VMD instead. v10: - Drop the v9 fix about drivers/pci/controller/vmd.c - Fix in PCIe ASPM to make it symmetric between pci_save_aspm_l1ss_state() and pci_restore_aspm_l1ss_state() v11: - Introduce __pci_save_aspm_l1ss_state as a resusable helper function which is same as the original pci_configure_aspm_l1ss - Make pci_save_aspm_l1ss_state invoke __pci_save_aspm_l1ss_state for both child and parent devices - Smooth the commit message drivers/pci/pcie/aspm.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index bd0a8a05647e..17cdf372f7e0 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -79,7 +79,7 @@ void pci_configure_aspm_l1ss(struct pci_dev *pdev) ERR_PTR(rc)); } =20 -void pci_save_aspm_l1ss_state(struct pci_dev *pdev) +static void __pci_save_aspm_l1ss_state(struct pci_dev *pdev) { struct pci_cap_saved_state *save_state; u16 l1ss =3D pdev->l1ss; @@ -101,6 +101,24 @@ void pci_save_aspm_l1ss_state(struct pci_dev *pdev) pci_read_config_dword(pdev, l1ss + PCI_L1SS_CTL1, cap++); } =20 +void pci_save_aspm_l1ss_state(struct pci_dev *pdev) +{ + struct pci_dev *parent; + + __pci_save_aspm_l1ss_state(pdev); + + /* + * To be symmetric on pci_restore_aspm_l1ss_state(), save parent's L1 + * substate configuration, if the parent has not saved state. + */ + if (!pdev->bus || !pdev->bus->self) + return; + + parent =3D pdev->bus->self; + if (!parent->state_saved) + __pci_save_aspm_l1ss_state(parent); +} + void pci_restore_aspm_l1ss_state(struct pci_dev *pdev) { struct pci_cap_saved_state *pl_save_state, *cl_save_state; --=20 2.46.2