i.MX28 FEC Ethernet on DeviceTree with RMII PHY

Stuart Longland VK4MSL me at vk4msl.com
Fri Jun 5 06:47:06 CEST 2026


Hi all,

I'm re-visiting some old work I did back around 2015 or so, where I 
ported U-Boot to a Technologic Systems TS-7670 single-board computer.

Schematics are online at 
https://www.embeddedts.com/documentation/ts-7670-schematic.pdf and my 
code is at https://github.com/sjlongland/u-boot-ts7670/

I managed to drag U-Boot 2014.10 kicking and screaming into this world, 
and can build it with a GCC-5 based toolchain, but I'd like something 
that builds with the same toolchain as the kernel.

So far I have U-Boot 2026.04 booting the device, loading from eMMC or SD 
card and storing its environment in an EXT4 partition.  There's an issue 
with the watchdog in that `wdt-uclass.c` thinks the watchdog "isn't 
activated" (but it is) and refuses to reset it; but if I set the timeout 
long, I can work-around that.  (No I can't turn the watchdog off.  Not 
without replacing the firmware in the MCU that implements it, and I 
don't have that code.)

The issue that's causing me the most pain is Ethernet not being 
initialised, and so Linux changes the MAC address every boot.  My 
work-around for now is to read the fuses and set `enetaddr` myself, but 
it'd be nice to have U-Boot do this the way it was intended (and have 
working Ethernet for network booting).

The device shares a lot of similarities with the Freescale MX28EVK 
development board, particularly regarding the arrangement of the 
Ethernet.  In the case of the TS-7670 there's a SMSC LAN8710Ai PHY wired 
up to MAC0 with MDIO, MDC, RXD0, RXD1, RX_EN, TXD0, TXD1, TX_EN and 
ENET_CLK wired.  Not sure if it's the same PHY on the MX28EVK, but it's 
a similar wiring arrangement.

There's power controlled from GPIO 1.10 (LCD_D10) and a reset line from 
GPIO 2.9 (SSP0_DETECT).  Details of how to describe this in Device Tree 
are scarce, but I think I have it right here:

https://github.com/sjlongland/u-boot-ts7670/blob/f5cea6747cc5a35e7e0822cb7349f7afdccb595c/arch/arm/dts/imx28-ts7670d.dts#L379-L399

It's worth noting that I do not need to go to this level of detail to 
get Linux successfully on the network.

One contributing factor I suspect is the fact that the Ethernet operates 
in RMII mode.  I see deep in the code base, the clock output I need is 
enabled here:

https://github.com/sjlongland/u-boot-ts7670/blob/f5cea6747cc5a35e7e0822cb7349f7afdccb595c/arch/arm/cpu/arm926ejs/mxs/mxs.c#L231

…but in the original 2015-era code, we did this…

https://github.com/sjlongland/u-boot-ts7670/blob/ts7670-2014.10/board/freescale/mx28evk/mx28evk.c#L110-L111

`board_eth_init` is no more now, I see support for that is gone even 
though headers still hint at its existence, it is never called.  I 
suspect this difference is a major contributing factor, I'm not sure 
what replaces it.

I did try modifying that call (in mxs.c) to set 
`CLKCTRL_ENET_TIME_SEL_RMII_CLK` as well, but to no avail.

Has anyone gotten a i.MX28 machine with RMII PHY talking on the network 
with current U-Boot and have some insights to share?

Regards,
-- 
Stuart Longland (aka Redhatter, VK4MSL)

I haven't lost my mind...
   ...it's backed up on a tape somewhere.



More information about the U-Boot mailing list