|
@@ -116,6 +116,8 @@ static char mv643xx_eth_driver_version[] = "1.4";
|
|
|
#define LINK_UP 0x00000002
|
|
|
#define TXQ_COMMAND 0x0048
|
|
|
#define TXQ_FIX_PRIO_CONF 0x004c
|
|
|
+#define PORT_SERIAL_CONTROL1 0x004c
|
|
|
+#define CLK125_BYPASS_EN 0x00000010
|
|
|
#define TX_BW_RATE 0x0050
|
|
|
#define TX_BW_MTU 0x0058
|
|
|
#define TX_BW_BURST 0x005c
|
|
@@ -2701,6 +2703,15 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
|
|
|
|
|
|
mp->dev = dev;
|
|
|
|
|
|
+ /* Kirkwood resets some registers on gated clocks. Especially
|
|
|
+ * CLK125_BYPASS_EN must be cleared but is not available on
|
|
|
+ * all other SoCs/System Controllers using this driver.
|
|
|
+ */
|
|
|
+ if (of_device_is_compatible(pdev->dev.of_node,
|
|
|
+ "marvell,kirkwood-eth-port"))
|
|
|
+ wrlp(mp, PORT_SERIAL_CONTROL1,
|
|
|
+ rdlp(mp, PORT_SERIAL_CONTROL1) & ~CLK125_BYPASS_EN);
|
|
|
+
|
|
|
/*
|
|
|
* Start with a default rate, and if there is a clock, allow
|
|
|
* it to override the default.
|