mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-20 22:21:41 +00:00
dm: net: macb: Implement link speed change callback
At present the link speed change callback is a nop. According to macb device tree bindings, an optional "tx_clk" is used to clock the ethernet controller's TX_CLK under different link speed. In 10/100 MII mode, transmit logic must be clocked from a free running clock generated by the external PHY. In gigabit GMII mode, the controller, not the external PHY, must generate the 125 MHz transmit clock towards the PHY. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Lukas Auer <lukas.auer@aisec.fraunhofer.de> Tested-by: Lukas Auer <lukas.auer@aisec.fraunhofer.de> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
a5e3d2350b
commit
3ef64444de
1 changed files with 35 additions and 0 deletions
|
@ -497,6 +497,41 @@ static int macb_phy_find(struct macb_device *macb, const char *name)
|
||||||
#ifdef CONFIG_DM_ETH
|
#ifdef CONFIG_DM_ETH
|
||||||
int __weak macb_linkspd_cb(struct udevice *dev, unsigned int speed)
|
int __weak macb_linkspd_cb(struct udevice *dev, unsigned int speed)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_CLK
|
||||||
|
struct clk tx_clk;
|
||||||
|
ulong rate;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "tx_clk" is an optional clock source for MACB.
|
||||||
|
* Ignore if it does not exist in DT.
|
||||||
|
*/
|
||||||
|
ret = clk_get_by_name(dev, "tx_clk", &tx_clk);
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
switch (speed) {
|
||||||
|
case _10BASET:
|
||||||
|
rate = 2500000; /* 2.5 MHz */
|
||||||
|
break;
|
||||||
|
case _100BASET:
|
||||||
|
rate = 25000000; /* 25 MHz */
|
||||||
|
break;
|
||||||
|
case _1000BASET:
|
||||||
|
rate = 125000000; /* 125 MHz */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* does not change anything */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx_clk.dev) {
|
||||||
|
ret = clk_set_rate(&tx_clk, rate);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Add table
Reference in a new issue