2016-05-13 22:13:15 +00:00
|
|
|
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
|
|
Date: Fri, 13 May 2016 21:01:19 +0200
|
|
|
|
Subject: ar71xx: fix qca956x ethernet initialization
|
|
|
|
|
|
|
|
Complete internal switch initialization for QCA956X.
|
|
|
|
Set default mdio device if the interface mode of GE0 is not SGMII (fix ticket #21520).
|
|
|
|
|
|
|
|
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
|
|
|
|
|
|
|
|
Backport of OpenWrt r48937
|
|
|
|
|
|
|
|
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
2016-12-20 00:09:53 +00:00
|
|
|
index 12a376e1322ae14dd714297ed5f8319ae09eeb64..b43c80a3762ddebe46d8443660714922165a2287 100644
|
2016-05-13 22:13:15 +00:00
|
|
|
--- a/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
|
|
|
+++ b/target/linux/ar71xx/files/arch/mips/ath79/dev-eth.c
|
|
|
|
@@ -271,6 +271,7 @@ void __init ath79_register_mdio(unsigned int id, u32 phy_mask)
|
|
|
|
case ATH79_SOC_QCA956X:
|
|
|
|
if (id == 1)
|
|
|
|
mdio_data->builtin_switch = 1;
|
|
|
|
+ mdio_data->is_ar934x = 1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
@@ -1123,16 +1124,25 @@ void __init ath79_register_eth(unsigned int id)
|
|
|
|
if (id == 0) {
|
|
|
|
pdata->reset_bit = QCA955X_RESET_GE0_MAC |
|
|
|
|
QCA955X_RESET_GE0_MDIO;
|
|
|
|
+
|
|
|
|
if (pdata->phy_if_mode == PHY_INTERFACE_MODE_SGMII)
|
|
|
|
pdata->set_speed = qca956x_set_speed_sgmii;
|
|
|
|
else
|
|
|
|
- /* FIXME */
|
|
|
|
- pdata->set_speed = ath79_set_speed_dummy;
|
|
|
|
+ pdata->set_speed = ath79_set_speed_ge0;
|
|
|
|
} else {
|
|
|
|
pdata->reset_bit = QCA955X_RESET_GE1_MAC |
|
|
|
|
QCA955X_RESET_GE1_MDIO;
|
|
|
|
- /* FIXME */
|
|
|
|
+
|
|
|
|
pdata->set_speed = ath79_set_speed_dummy;
|
|
|
|
+
|
|
|
|
+ pdata->switch_data = &ath79_switch_data;
|
|
|
|
+
|
|
|
|
+ pdata->speed = SPEED_1000;
|
|
|
|
+ pdata->duplex = DUPLEX_FULL;
|
|
|
|
+
|
|
|
|
+ /* reset the built-in switch */
|
|
|
|
+ ath79_device_reset_set(AR934X_RESET_ETH_SWITCH);
|
|
|
|
+ ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH);
|
|
|
|
}
|
|
|
|
|
|
|
|
pdata->ddr_flush = ath79_ddr_no_flush;
|
|
|
|
@@ -1196,6 +1206,11 @@ void __init ath79_register_eth(unsigned int id)
|
|
|
|
/* don't assign any MDIO device by default */
|
|
|
|
break;
|
|
|
|
|
|
|
|
+ case ATH79_SOC_QCA956X:
|
|
|
|
+ if (pdata->phy_if_mode != PHY_INTERFACE_MODE_SGMII)
|
|
|
|
+ pdata->mii_bus_dev = &ath79_mdio1_device.dev;
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
default:
|
|
|
|
pdata->mii_bus_dev = &ath79_mdio0_device.dev;
|
|
|
|
break;
|