
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-
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);