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