linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] [RFC PATCH] PCI: Update LTR threshold based on LTRME bit
@ 2022-03-07 18:59 Prasad Malisetty
  2022-03-17 19:07 ` Stephen Boyd
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Prasad Malisetty @ 2022-03-07 18:59 UTC (permalink / raw)
  To: agross, bjorn.andersson, lorenzo.pieralisi, robh, kw, bhelgaas,
	linux-pci, linux-arm-msm, linux-kernel, rajatja, refactormyself
  Cc: quic_vbadigan, quic_ramkri, manivannan.sadhasivam, swboyd,
	Prasad Malisetty

Update LTR threshold scale and value based on LTRME (Latency
Tolenrance Reporting Mechanism) from device capabilities.

In ASPM driver, LTR threshold scale and value is updating
based on tcommon_mode and t_poweron values. In kioxia NVMe,
L1.2 is failing due to LTR threshold scale and value is
greater values than max snoop/non snoop value.

In general, updated LTR threshold scale and value should be
less than max snoop/non snoop value to enter the device
into L1.2 state.

Signed-off-by: Prasad Malisetty <quic_pmaliset@quicinc.com>

---
Changes since v1:
	- Added missing variable declaration in v1 patch.
---
 drivers/pci/pcie/aspm.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index a96b742..a67746c 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -463,6 +463,7 @@ static void aspm_calc_l1ss_info(struct pcie_link_state *link,
 	u32 val1, val2, scale1, scale2;
 	u32 t_common_mode, t_power_on, l1_2_threshold, scale, value;
 	u32 ctl1 = 0, ctl2 = 0;
+	u32 cap;
 	u32 pctl1, pctl2, cctl1, cctl2;
 	u32 pl1_2_enables, cl1_2_enables;
 
@@ -499,9 +500,14 @@ static void aspm_calc_l1ss_info(struct pcie_link_state *link,
 	 * Table 5-11.  T(POWER_OFF) is at most 2us and T(L1.2) is at
 	 * least 4us.
 	 */
-	l1_2_threshold = 2 + 4 + t_common_mode + t_power_on;
-	encode_l12_threshold(l1_2_threshold, &scale, &value);
-	ctl1 |= t_common_mode << 8 | scale << 29 | value << 16;
+	pcie_capability_read_dword(child, PCI_EXP_DEVCAP2, &cap);
+	if (!(cap & PCI_EXP_DEVCAP2_LTR)) {
+		l1_2_threshold = 2 + 4 + t_common_mode + t_power_on;
+		encode_l12_threshold(l1_2_threshold, &scale, &value);
+		ctl1 |= scale << 29 | value << 16;
+	}
+
+	ctl1 |= t_common_mode;
 
 	/* Some broken devices only support dword access to L1 SS */
 	pci_read_config_dword(parent, parent->l1ss + PCI_L1SS_CTL1, &pctl1);
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation


^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2022-07-15 11:29 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-07 18:59 [PATCH v2] [RFC PATCH] PCI: Update LTR threshold based on LTRME bit Prasad Malisetty
2022-03-17 19:07 ` Stephen Boyd
2022-04-05  6:24   ` Prasad Malisetty (Temp)
2022-04-05 18:57     ` Stephen Boyd
2022-04-05 16:08 ` Bjorn Helgaas
2022-04-12 22:46 ` Bjorn Helgaas
2022-06-01 12:23 ` [PATCH v3] PCI/ASPM: Update LTR threshold based upon reported max latencies Krishna chaitanya chundru
2022-06-01 12:27   ` Krishna Chaitanya Chundru
2022-06-02  8:29     ` Manivannan Sadhasivam
2022-06-02  9:59       ` Krishna Chaitanya Chundru
2022-06-03  7:54 ` [PATCH v4] " Krishna chaitanya chundru
2022-06-08 22:22   ` Stephen Boyd
2022-06-10  5:08   ` [PATCH v5] " Krishna chaitanya chundru
2022-06-15 13:23     ` Krishna Chaitanya Chundru
2022-07-15  8:28       ` Manivannan Sadhasivam
2022-07-15 11:28         ` Krishna Chaitanya Chundru
2022-06-15 17:39     ` Manivannan Sadhasivam

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).