meta-bletchley: add switch diagnostics script

Add a switch diagnostics script to dump port register via mdio bus.

Tested:

root@bletchley:~# /usr/libexec/bletchley-switch-diag
========================================
Port 10 (BMC)
****************************************
[00]: 0E07 (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07FE (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0001 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0000 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 001B (Debug Counters)
========================================

========================================
Port 3 (SLED1)
****************************************
[00]: 100F (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07FD (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0002 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0033 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 0000 (Debug Counters)
========================================

========================================
Port 2 (SLED2)
****************************************
[00]: 100F (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07FB (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0004 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0033 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 0000 (Debug Counters)
========================================

========================================
Port 1 (SLED3)
****************************************
[00]: 100F (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07F7 (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0008 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0033 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 0000 (Debug Counters)
========================================

========================================
Port 7 (SLED4)
****************************************
[00]: 100F (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07EF (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0010 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0033 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 0000 (Debug Counters)
========================================

========================================
Port 6 (SLED5)
****************************************
[00]: 1D4F (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07DF (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0020 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0033 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 0075 (Debug Counters)
========================================

========================================
Port 5 (SLED6)
****************************************
[00]: 1D4F (Port Status)
[01]: 0003 (Physical Control)
[02]: 0000 (Flow Control)
[03]: 1920 (Switch Identifier)
[04]: 007F (Port Control 0)
[05]: 0000 (Port Control 1)
[06]: 07BF (Port Based VLAN Map)
[07]: 0001 (Default VLAN ID & Priority)
[08]: 2080 (Port Control 2)
[09]: 0001 (Egress Rate Control)
[0A]: 8000 (Egress Rate Control 2)
[0B]: 0040 (Port Association Vector)
[0C]: 0000 (Port ATU Control)
[0D]: 0000 (Override)
[0E]: 0000 (Policy & MGMT Control)
[10]: 0000 (Extended Port Control Operation)
[11]: 0000 (Extended Port Control Data)
[16]: 0033 (LED Control)
[17]: 0000 (IP Priority Mapping Table)
[18]: 0000 (IEEE Priority Mapping Table)
[19]: 0000 (Port Control 3)
[1B]: 8000 (Queue Counters)
[1C]: 0000 (Queue Control)
[1D]: 0000 (Queue Control 2)
[1E]: 0000 (Enable & Cut Through)
[1F]: 0058 (Debug Counters)
========================================

Signed-off-by: Potin Lai <potin.lai@quantatw.com>
Change-Id: I3915e0747beeb8f8a3d06d3409ac55ed0cd50b41
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/bletchley-common-tool_0.1.bb b/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/bletchley-common-tool_0.1.bb
index 170463f..081d740 100644
--- a/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/bletchley-common-tool_0.1.bb
+++ b/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/bletchley-common-tool_0.1.bb
@@ -4,15 +4,18 @@
 inherit obmc-phosphor-systemd
 
 RDEPENDS:${PN} += " bash motor-ctrl"
+RDEPENDS:${PN} += " mdio-tools"
 
 SRC_URI += " \
     file://bletchley-system-state-init \
     file://bletchley-system-state-init@.service \
+    file://bletchley-switch-diag \
     "
 
 do_install() {
     install -d ${D}${libexecdir}
     install -m 0755 ${WORKDIR}/bletchley-system-state-init ${D}${libexecdir}
+    install -m 0755 ${WORKDIR}/bletchley-switch-diag ${D}${libexecdir}
 }
 
 
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/files/bletchley-switch-diag b/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/files/bletchley-switch-diag
new file mode 100644
index 0000000..5fea8ac
--- /dev/null
+++ b/meta-facebook/meta-bletchley/recipes-bletchley/plat-tools/files/bletchley-switch-diag
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+declare -a PORT_NUM_MAP=(10 3 2 1 7 6 5)
+declare -a PORT_NAME_MAP=(BMC SLED1 SLED2 SLED3 SLED4 SLED5 SLED6)
+SWITCH_MDIO_BUS="1e650000.mdio-1"
+
+for port_phy in {0..6}
+do
+    printf "========================================\n"
+    printf "Port %d (%s)\n" "${PORT_NUM_MAP[port_phy]}" "${PORT_NAME_MAP[port_phy]}"
+    printf "****************************************\n"
+    printf "[%02X]: %04X (%s)\n" 0x00 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x00)" "Port Status"
+    printf "[%02X]: %04X (%s)\n" 0x01 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x01)" "Physical Control"
+    printf "[%02X]: %04X (%s)\n" 0x02 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x02)" "Flow Control"
+    printf "[%02X]: %04X (%s)\n" 0x03 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x03)" "Switch Identifier"
+    printf "[%02X]: %04X (%s)\n" 0x04 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x04)" "Port Control 0"
+    printf "[%02X]: %04X (%s)\n" 0x05 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x05)" "Port Control 1"
+    printf "[%02X]: %04X (%s)\n" 0x06 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x06)" "Port Based VLAN Map"
+    printf "[%02X]: %04X (%s)\n" 0x07 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x07)" "Default VLAN ID & Priority"
+    printf "[%02X]: %04X (%s)\n" 0x08 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x08)" "Port Control 2"
+    printf "[%02X]: %04X (%s)\n" 0x09 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x09)" "Egress Rate Control"
+    printf "[%02X]: %04X (%s)\n" 0x0A "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x0A)" "Egress Rate Control 2"
+    printf "[%02X]: %04X (%s)\n" 0x0B "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x0B)" "Port Association Vector"
+    printf "[%02X]: %04X (%s)\n" 0x0C "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x0C)" "Port ATU Control"
+    printf "[%02X]: %04X (%s)\n" 0x0D "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x0D)" "Override"
+    printf "[%02X]: %04X (%s)\n" 0x0E "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x0E)" "Policy & MGMT Control"
+    printf "[%02X]: %04X (%s)\n" 0x10 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x10)" "Extended Port Control Operation"
+    printf "[%02X]: %04X (%s)\n" 0x11 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x11)" "Extended Port Control Data"
+    printf "[%02X]: %04X (%s)\n" 0x16 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x16)" "LED Control"
+    printf "[%02X]: %04X (%s)\n" 0x17 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x17)" "IP Priority Mapping Table"
+    printf "[%02X]: %04X (%s)\n" 0x18 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x18)" "IEEE Priority Mapping Table"
+    printf "[%02X]: %04X (%s)\n" 0x19 "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x19)" "Port Control 3"
+    printf "[%02X]: %04X (%s)\n" 0x1B "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x1B)" "Queue Counters"
+    printf "[%02X]: %04X (%s)\n" 0x1C "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x1C)" "Queue Control"
+    printf "[%02X]: %04X (%s)\n" 0x1D "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x1D)" "Queue Control 2"
+    printf "[%02X]: %04X (%s)\n" 0x1E "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x1E)" "Enable & Cut Through"
+    printf "[%02X]: %04X (%s)\n" 0x1F "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" 0x1F)" "Debug Counters"
+    printf "========================================\n\n"
+done