[PATCH] net: gem: ignore tx_clk if MII is used

Martin Kaistra martin.kaistra at linutronix.de
Wed Apr 23 09:17:37 CEST 2025


Hi Harini,

Am 22.04.25 um 18:17 schrieb Katakam, Harini:
> [AMD Official Use Only - AMD Internal Distribution Only]
> 
> Hi Martin
> 
>> -----Original Message-----
>> From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Martin Kaistra
>> Sent: Tuesday, April 15, 2025 8:34 PM
>> To: u-boot at lists.denx.de
>> Cc: joe.hershberger at ni.com; rfried.dev at gmail.com; Simek, Michal
>> <michal.simek at amd.com>
>> Subject: [PATCH] net: gem: ignore tx_clk if MII is used
>>
>> If the MII interface is used, the PHY is the clock master, thus don't set the clock
> 
> Can you please describe your HW configuration?

on my HW the PS GEM is connected to a MII-to-RMII converter which is then 
connected via RMII to the PHY.

The linux driver (drivers/net/ethernet/cadence/macb_main.c) has a similar 
exception for MII mode in macb_set_tx_clk().

Thanks,
Martin

> Based on the spec,
> 1. In 10/100 GMII mode, tx_clk will run at either 2.5 MHz or 25 MHz as
> determined by the external PHY MII clock input.
> 2. When using gigabit mode, the transmit clock must be sourced from a
> 125 MHz reference clock.
> 3. In RMII mode, tx_clk should be connected to the rmii_tx_clk outputs.
> In both cases 2 and 3, the MAC is the clock master.
> 
> If you are using a HW connection such as Zynq:
> PS GEM - GMII to RGMII/SGMII shim - External PHY,
> then the I understand that you'll get such an error message and that should
> be removed. But I'm not sure if this applies to MII type.
> 
> Regards,
> Harini
> 
>> rate. On Zynq-7000, this will prevent the following
>> error:
>>    zynq_gem ethernet at e000b000: failed to set tx clock rate 25000000
>>
>> Signed-off-by: Martin Kaistra <martin.kaistra at linutronix.de>
>> ---
>>   drivers/net/zynq_gem.c | 14 ++++++++------
>>   1 file changed, 8 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c index
>> 461805ae53f..703e22479d2 100644
>> --- a/drivers/net/zynq_gem.c
>> +++ b/drivers/net/zynq_gem.c
>> @@ -567,12 +567,14 @@ static int zynq_gem_init(struct udevice *dev)
>>        }
>>   #endif
>>
>> -     ret = clk_get_rate(&priv->tx_clk);
>> -     if (ret != clk_rate) {
>> -             ret = clk_set_rate(&priv->tx_clk, clk_rate);
>> -             if (IS_ERR_VALUE(ret)) {
>> -                     dev_err(dev, "failed to set tx clock rate %ld\n", clk_rate);
>> -                     return ret;
>> +     if (priv->interface != PHY_INTERFACE_MODE_MII) {
>> +             ret = clk_get_rate(&priv->tx_clk);
>> +             if (ret != clk_rate) {
>> +                     ret = clk_set_rate(&priv->tx_clk, clk_rate);
>> +                     if (IS_ERR_VALUE(ret)) {
>> +                             dev_err(dev, "failed to set tx clock rate %ld\n",
>> clk_rate);
>> +                             return ret;
>> +                     }
>>                }
>>        }
>>
>> --
>> 2.39.5
> 




More information about the U-Boot mailing list