[U-Boot] [PATCH 3/4] dm: net: macb: Implement link speed change callback
Auer, Lukas
lukas.auer at aisec.fraunhofer.de
Mon May 20 11:29:54 UTC 2019
Hi Bin,
On Thu, 2019-05-16 at 02:12 -0700, Bin Meng wrote:
> 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 at gmail.com>
> ---
>
> drivers/net/macb.c | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> index b7f404e..7d86fa1 100644
> --- a/drivers/net/macb.c
> +++ b/drivers/net/macb.c
> @@ -497,6 +497,32 @@ static int macb_phy_find(struct macb_device *macb, const char *name)
> #ifdef CONFIG_DM_ETH
> int __weak macb_linkspd_cb(struct udevice *dev, unsigned int speed)
> {
> +#ifdef CONFIG_CLK
> + struct clk tx_clk;
> + ulong rate;
> + int ret;
> +
> + ret = clk_get_by_name(dev, "tx_clk", &tx_clk);
> + if (ret)
> + return 0;
Can you return errors in ret here?
> +
> + switch (speed) {
> + case _10BASET:
> + rate = 2500000;
> + break;
> + case _100BASET:
> + rate = 25000000;
> + break;
> + case _1000BASET:
> + default:
> + rate = 125000000;
> + break;
The Linux driver simply returns in the default case, without changing
tx_clk. I am wondering if we should do the same in U-Boot?
> + }
> +
> + if (tx_clk.dev)
> + clk_set_rate(&tx_clk, rate);
Can you also check the return value of clk_set_rate() here?
Thanks,
Lukas
> +#endif
> +
> return 0;
> }
> #else
More information about the U-Boot
mailing list