diff --git a/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c b/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c
index 20510724c5dd7f714e42769bde5054e0f73d3191..fe1659133324cf48bacacaf9bbe9292a58919c03 100644
--- a/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c
+++ b/target/linux/ar71xx/files/drivers/net/phy/rtl8366_smi.c
@@ -1275,71 +1275,52 @@ static int rtl8366_set_vlan(struct switch_dev *dev,
 		return rtl8366_vlan_set_4ktable(smi, val->value.i);
 }
 
+static const char *rtl8366_speed_str(unsigned speed)
+{
+	switch (speed) {
+	case 0:
+		return "10baseT";
+	case 1:
+		return "100baseT";
+	case 2:
+		return "1000baseT";
+	}
+
+	return "unknown";
+}
+
 static int rtl8366_attr_get_port_link(struct switch_dev *dev,
 				      const struct switch_attr *attr,
 				      struct switch_val *val)
 {
-	u32 len = 0, data = 0;
-	int speed, duplex, link, txpause, rxpause, nway;
 	struct rtl8366_smi *smi = sw_to_rtl8366(dev);
-	char *buf = smi->buf;
+	u32 len = 0, data = 0;
 
 	if (val->port_vlan >= RTL8366_NUM_PORTS)
 		return -EINVAL;
 
-	memset(buf, '\0', sizeof(smi->buf));
+	memset(smi->buf, '\0', sizeof(smi->buf));
 	rtl8366_smi_read_reg(smi, RTL8366S_PORT_LINK_STATUS_BASE +
-			     (val->port_vlan >> 1),
-			     &data);
+			     (val->port_vlan / 2), &data);
 
-	if (val->port_vlan & 0x1)
+	if (val->port_vlan % 2)
 		data = data >> 8;
 
-	speed = (data & RTL8366S_PORT_STATUS_SPEED_MASK);
-	duplex = (data & RTL8366S_PORT_STATUS_DUPLEX_MASK) >> 2;
-	link = (data & RTL8366S_PORT_STATUS_LINK_MASK) >> 4;
-	txpause = (data & RTL8366S_PORT_STATUS_TXPAUSE_MASK) >> 5;
-	rxpause = (data & RTL8366S_PORT_STATUS_RXPAUSE_MASK) >> 6;
-	nway = (data & RTL8366S_PORT_STATUS_AN_MASK) >> 7;
-
-	len += snprintf(buf + len, sizeof(smi->buf) - len, "Port %d: ",
-			val->port_vlan);
-
-	if (link)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"Link UP, Speed: ");
-	else
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"Link DOWN, Speed: ");
-
-	if (speed == 0)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"10Base-TX ");
-	else if (speed == 1)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"100Base-TX ");
-	else if (speed == 2)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"1000Base-TX ");
-
-	if (duplex)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"Full-Duplex, ");
-	else
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"Half-Duplex, ");
-
-	if (txpause)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"TX-Pause ");
-	if (rxpause)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"RX-Pause ");
-	if (nway)
-		len += snprintf(buf + len, sizeof(smi->buf) - len,
-				"nway ");
-
-	val->value.s = buf;
+	len = snprintf(smi->buf, sizeof(smi->buf),
+			"port:%d link:%s speed:%s %s-duplex %s%s%s",
+			val->port_vlan,
+			(data & RTL8366S_PORT_STATUS_LINK_MASK) ? "up" : "down",
+			rtl8366_speed_str(data &
+					  RTL8366S_PORT_STATUS_SPEED_MASK),
+			(data & RTL8366S_PORT_STATUS_DUPLEX_MASK) ?
+				"full" : "half",
+			(data & RTL8366S_PORT_STATUS_TXPAUSE_MASK) ?
+				"tx-pause ": "",
+			(data & RTL8366S_PORT_STATUS_RXPAUSE_MASK) ?
+				"rx-pause " : "",
+			(data & RTL8366S_PORT_STATUS_AN_MASK) ? "nway ": "");
+
+	val->value.s = smi->buf;
 	val->len = len;
 
 	return 0;