[PATCH 22/38] MIPS: SGI-IP27: recognize the PXBow crossbar

From: Imre Kaloz

Date: Thu Oct 01 2026 - 12:50:41 EST


A Tezro's crossbar is a PXBow, widget part number 0xd100. Without
recognizing it, xtalk_probe_node() logs the widget as unknown and never
calls xbow_probe(), leaving every IO widget behind it unenumerated.

Signed-off-by: Imre Kaloz <kaloz@xxxxxxxxxx>
---
arch/mips/include/asm/xtalk/xwidget.h | 7 +++++++
arch/mips/sgi-ip27/ip27-xtalk.c | 2 ++
2 files changed, 9 insertions(+)

diff --git a/arch/mips/include/asm/xtalk/xwidget.h b/arch/mips/include/asm/xtalk/xwidget.h
index 978877e8a090..6a98e87b4711 100644
--- a/arch/mips/include/asm/xtalk/xwidget.h
+++ b/arch/mips/include/asm/xtalk/xwidget.h
@@ -109,6 +109,7 @@
#define WIDGET_BDRCK_PART_NUM 0xc110
#define WIDGET_TPU_PART_NUM 0xc202
#define WIDGET_XXBOW_PART_NUM 0xd000
+#define WIDGET_PXBOW_PART_NUM 0xd100
#define WIDGET_XBRDG_PART_NUM 0xd002
#define WIDGET_NULL_PART_NUM -1

@@ -183,6 +184,12 @@ static const struct widget_ident widget_idents[] __initconst __maybe_unused = {
"xxbow",
{NULL, "1.0", "2.0", NULL},
},
+ {
+ WIDGET_XXBOW_MFGR_NUM,
+ WIDGET_PXBOW_PART_NUM,
+ "pxbow",
+ {NULL, "1.0", NULL},
+ },
{
WIDGET_XBRDG_MFGR_NUM,
WIDGET_XBRDG_PART_NUM,
diff --git a/arch/mips/sgi-ip27/ip27-xtalk.c b/arch/mips/sgi-ip27/ip27-xtalk.c
index bd2ac24452f5..105977316391 100644
--- a/arch/mips/sgi-ip27/ip27-xtalk.c
+++ b/arch/mips/sgi-ip27/ip27-xtalk.c
@@ -21,6 +21,7 @@

#define XBOW_WIDGET_PART_NUM 0x0
#define XXBOW_WIDGET_PART_NUM 0xd000 /* Xbow in Xbridge */
+#define PXBOW_WIDGET_PART_NUM 0xd100 /* PXbow */
#define BASE_XBOW_PORT 8 /* Lowest external port */

enum xtalk_bridge_type {
@@ -241,6 +242,7 @@ static void xtalk_probe_node(nasid_t nasid)
break;
case XBOW_WIDGET_PART_NUM:
case XXBOW_WIDGET_PART_NUM:
+ case PXBOW_WIDGET_PART_NUM:
pr_info("xtalk:n%d/0 xbow widget\n", nasid);
xbow_probe(nasid);
break;
--
2.47.3