NetGate SG-1000 support

Hello everyone,

I'm looking to see if I can get some assistance porting OpenWRT to a new device. The NetGate (not Netgear!) SG-1000 https://www.netgate.com/solutions/pfsense/sg-1000.html

The device was originally a PFsense appliance, but never really worked particularly well and was very quickly end-of-lifed unfortunately.

So far I've managed to get both the upstream Linux 4.19 LTS kernel and Kernel 5.4 booting on the device with (mostly) complete hardware support. Admittedly I'm very new to ARM DeviceTree so I'm a bit out of my depth on some of it. I'm able to get a "full" Linux installation running via an NFS root, so I'm able to poke at hardware reasonably easily

The device itself seems to be heavily based upon the Ti TMDSSK3358 AM335x "Starter Kit"

Right now everything works, except for

  • No USB or USB OTG support

  • No SD card support. Only internal eMMC chip is detected

  • Ethernet only works if both NIC's are connected to active devices. If either device is unplugged, both NIC's stop responding until both are reconnected

A NetGate developer did provide me with an old "Yocto Linux" build based on LTS kernel 4.4.3-yocto https://intelminer.com/pflin.zip

The build does seem to work and boots to a minimal ramdisk. The DeviceTree image in it also (mostly) works all the way up to Kernel 4.19 with minimal patching. Unfortunately 5.x appears to have significantly refactored the DeviceTree layout and does not work with it

If anyone smarter than me with this stuff would be able to give me some tips on where or what to look for, I'd love to do everything I can to get this device included in the project

Disclaimer: I do not own this device or any device with this SoC, so part of advices may be misdirecting.

Seems the old Yocto build contains dtb for Your device. What is suspicious that the one in root directory differs from the one in rootfs.tar.xz. Both can be easily de-compiled with dtc. After de-compiling You can see what devices or regulators were enabled or disabled, and other bits, that differ from TMDSSK3358. Be aware that dtc will spill numeric values as hex, which usually are specified as decimal, for example frequencies.

The easiest method to see what changed in dts between kernel versions, is to inspect kernel git change log: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/arch/arm/boot/dts?qt=grep&q=am335x. Usually if the syntax changed, they are done in bulk, so easy to spot.

Regarding network interfaces. NetGate has published git tree of U-Boot for this board (https://github.com/Netgate/u-boot-sg1000), which not only changes some configuration bits but also fiddles with RGMII. Maybe that's what is necessary. After understanding what it does, it might be needed on the kernel side in dts or some patch to relevant driver.

Next step would be integrating all of Your changes in OpenWrt tree which has already omap target for this SoC. So adding support for this device would go to target/linux/omap and corresponding U-Boot package packages/boot/uboot-omap. Good luck.