
Hi Prafulla, hi Marvell engineers,
By default Auto Negotiation is enabled for interface speed but on some platforms like RD6281A it does not work. If you want to forced program it to desired speed, this patch helps-
do you have some information why auto negotiation doesn't work on RD6281A? I'm working on custom hardware and don't want to do the same mistake :)
Many thanks, Dieter
Through this patch Auto negotiation can be disabled and desired interface speed can be configured
This patch is tested on RD6281A Kirkwood board
Signed-off-by: Prafulla Wadaskar prafulla@marvell.com
drivers/net/kirkwood_egiga.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/drivers/net/kirkwood_egiga.c b/drivers/net/kirkwood_egiga.c index 3c5db19..1dfd567 100644 --- a/drivers/net/kirkwood_egiga.c +++ b/drivers/net/kirkwood_egiga.c @@ -415,7 +415,31 @@ static int kwgbe_init(struct eth_device *dev) /* Assign port configuration and command. */ KWGBEREG_WR(regs->pxc, PRT_CFG_VAL); KWGBEREG_WR(regs->pxcx, PORT_CFG_EXTEND_VALUE);
- /*
* Forced 10/100/1000BASE-T interface speed configuration
* By default Auto Negotiation of interface speed is enabled
* This can be forced disabled and desired speed can be configured
*/
+#ifdef CONFIG_DIS_AUTO_NEG_SPEED_GMII +#if (!defined (CONFIG_PHY_SPEED) || (CONFIG_PHY_SPEED == _1000BASET))
- KWGBEREG_WR(regs->psc0, PORT_SERIAL_CONTROL_VALUE
| KWGBE_DIS_AUTO_NEG_SPEED_GMII
| KWGBE_SET_GMII_SPEED_TO_1000);
+#elif (CONFIG_PHY_SPEED == _100BASET)
- KWGBEREG_WR(regs->psc0, PORT_SERIAL_CONTROL_VALUE
| KWGBE_DIS_AUTO_NEG_SPEED_GMII
| KWGBE_SET_GMII_SPEED_TO_10_100
| KWGBE_SET_MII_SPEED_TO_100);
+#elif (CONFIG_PHY_SPEED == _10BASET)
- KWGBEREG_WR(regs->psc0, PORT_SERIAL_CONTROL_VALUE
| KWGBE_DIS_AUTO_NEG_SPEED_GMII
| KWGBE_SET_GMII_SPEED_TO_10_100
| KWGBE_SET_MII_SPEED_TO_10);
+#endif /* CONFIG_PHY_SPEED == _10BASET */ +#else KWGBEREG_WR(regs->psc0, PORT_SERIAL_CONTROL_VALUE); +#endif /* CONFIG_DIS_AUTO_NEG_SPEED_GMII */
- /* Disable port initially */ KWGBEREG_BITS_SET(regs->psc0, KWGBE_SERIAL_PORT_EN);