All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] PCI/TPH: treat reserved 0b10 completer encoding as unsupported
@ 2026-07-20 17:22 Zhiping Zhang
  2026-07-20 17:30 ` sashiko-bot
  2026-07-20 23:42 ` fengchengwen
  0 siblings, 2 replies; 3+ messages in thread
From: Zhiping Zhang @ 2026-07-20 17:22 UTC (permalink / raw)
  To: Bjorn Helgaas, Wei Huang, linux-pci
  Cc: Christian Konig, Alex Williamson, linux-rdma, Zhiping Zhang

get_rp_completer_type() returns the Root Port's "TPH Completer
Supported" field (bits 13:12 of Device Capabilities 2) verbatim. The
0b10 encoding is reserved, but pcie_enable_tph() feeds the raw value
into the requester type:

	pdev->tph_req_type = min(pdev->tph_req_type, rp_req_type);

and later writes tph_req_type to the TPH Requester Enable field, which
only defines 0b00 (disable), 0b01 (TPH only) and 0b11 (extended TPH).

No known hardware presents the reserved 0b10 in this field, so this is
defensive hardening rather than a fix for observed silicon: fold the
reserved encoding into "not supported" so only the three architected
values can ever reach the Requester Enable field.

Fixes: f69767a1ada3 ("PCI: Add TLP Processing Hints (TPH) support")
Signed-off-by: Zhiping Zhang <zhipingz@meta.com>
---
 drivers/pci/tph.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/pci/tph.c b/drivers/pci/tph.c
index 655ffd60e62f..5cbb381e2a02 100644
--- a/drivers/pci/tph.c
+++ b/drivers/pci/tph.c
@@ -200,6 +200,7 @@ EXPORT_SYMBOL(pcie_tph_get_st_table_size);
 static u8 get_rp_completer_type(struct pci_dev *pdev)
 {
 	struct pci_dev *rp;
+	u8 tph_comp;
 	u32 reg;
 	int ret;
 
@@ -211,7 +212,15 @@ static u8 get_rp_completer_type(struct pci_dev *pdev)
 	if (ret)
 		return 0;
 
-	return FIELD_GET(PCI_EXP_DEVCAP2_TPH_COMP_MASK, reg);
+	/*
+	 * 0b10 is reserved; treat it as "not supported" so only the
+	 * architected encodings reach the Requester Enable field.
+	 */
+	tph_comp = FIELD_GET(PCI_EXP_DEVCAP2_TPH_COMP_MASK, reg);
+	if (tph_comp == PCI_EXP_DEVCAP2_TPH_COMP_TPH_ONLY ||
+	    tph_comp == PCI_EXP_DEVCAP2_TPH_COMP_EXT_TPH)
+		return tph_comp;
+	return PCI_EXP_DEVCAP2_TPH_COMP_NONE;
 }
 
 /* Write tag to ST table - Return 0 if OK, otherwise -errno */
-- 
2.53.0-Meta


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

* Re: [PATCH v3] PCI/TPH: treat reserved 0b10 completer encoding as unsupported
  2026-07-20 17:22 [PATCH v3] PCI/TPH: treat reserved 0b10 completer encoding as unsupported Zhiping Zhang
@ 2026-07-20 17:30 ` sashiko-bot
  2026-07-20 23:42 ` fengchengwen
  1 sibling, 0 replies; 3+ messages in thread
From: sashiko-bot @ 2026-07-20 17:30 UTC (permalink / raw)
  To: Zhiping Zhang; +Cc: linux-pci

> get_rp_completer_type() returns the Root Port's "TPH Completer
> Supported" field (bits 13:12 of Device Capabilities 2) verbatim. The
> 0b10 encoding is reserved, but pcie_enable_tph() feeds the raw value
> into the requester type:
> 
> 	pdev->tph_req_type = min(pdev->tph_req_type, rp_req_type);
> 
> and later writes tph_req_type to the TPH Requester Enable field, which
> only defines 0b00 (disable), 0b01 (TPH only) and 0b11 (extended TPH).
> 
> No known hardware presents the reserved 0b10 in this field, so this is
> defensive hardening rather than a fix for observed silicon: fold the
> reserved encoding into "not supported" so only the three architected
> values can ever reach the Requester Enable field.
> 
> Fixes: f69767a1ada3 ("PCI: Add TLP Processing Hints (TPH) support")
> Signed-off-by: Zhiping Zhang <zhipingz@meta.com>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260720172304.117134-1-zhipingz@meta.com?part=1


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

* Re: [PATCH v3] PCI/TPH: treat reserved 0b10 completer encoding as unsupported
  2026-07-20 17:22 [PATCH v3] PCI/TPH: treat reserved 0b10 completer encoding as unsupported Zhiping Zhang
  2026-07-20 17:30 ` sashiko-bot
@ 2026-07-20 23:42 ` fengchengwen
  1 sibling, 0 replies; 3+ messages in thread
From: fengchengwen @ 2026-07-20 23:42 UTC (permalink / raw)
  To: Zhiping Zhang, Bjorn Helgaas, Wei Huang, linux-pci
  Cc: Christian Konig, Alex Williamson, linux-rdma

Acked-by: Chengwen Feng <fengchengwen@huawei.com>

On 7/21/2026 1:22 AM, Zhiping Zhang wrote:
> get_rp_completer_type() returns the Root Port's "TPH Completer
> Supported" field (bits 13:12 of Device Capabilities 2) verbatim. The
> 0b10 encoding is reserved, but pcie_enable_tph() feeds the raw value
> into the requester type:
> 
> 	pdev->tph_req_type = min(pdev->tph_req_type, rp_req_type);
> 
> and later writes tph_req_type to the TPH Requester Enable field, which
> only defines 0b00 (disable), 0b01 (TPH only) and 0b11 (extended TPH).
> 
> No known hardware presents the reserved 0b10 in this field, so this is
> defensive hardening rather than a fix for observed silicon: fold the
> reserved encoding into "not supported" so only the three architected
> values can ever reach the Requester Enable field.
> 
> Fixes: f69767a1ada3 ("PCI: Add TLP Processing Hints (TPH) support")
> Signed-off-by: Zhiping Zhang <zhipingz@meta.com>


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

end of thread, other threads:[~2026-07-20 23:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-20 17:22 [PATCH v3] PCI/TPH: treat reserved 0b10 completer encoding as unsupported Zhiping Zhang
2026-07-20 17:30 ` sashiko-bot
2026-07-20 23:42 ` fengchengwen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.