The Ten64 networking platform is a product by Traverse Technologies and they kindly provided me with a full system. It's a NXP LS1088a based platform featuring DPAA2 (FreeBSD driver development) support with 8xGE + 2xSFP+, USB3, multiple mPCIe slots, .. See their excellent documentation for all the details.

insert nice photos of the machine here

Traverse Technologies recently published a FreeBSD preview for Ten64 image.

I am just jotting down my notes regarding FreeBSD support here.

Current status (20220921; slightly outdated probably but as of February 2024)

I need to go and see what else then. soctherm timeouts probably? That's WIP now. Review D35759 limits the number of sites to the values found in device-tree for the SoC as a first step. Next is to deal with the differences of the SoCs, Review D35764. commit 1 to main and commit 2 to main, commit to stable/13, commit to stable/13.

hw.temperature.core-cluster: 58.0C
hw.temperature.soc: 57.0C
root@ten64-01:~ # sysctl hw.temperature
hw.temperature.core-cluster: 55.0C
hw.temperature.soc: 55.0C

uart0: console (115131,n,8,1) - where does this odd value come from?

Here's a list of device compat strings, not disabled, with no driver attached:

   1  arm,mmu-500 (no driver attached)  -- iommu
   8  arm,sp805-wdt (no driver attached)
   1  fsl,dpaa2-ptp (no driver attached)
   1  fsl,ls1088a-ftm-alarm (no driver attached)
   1  fsl,ls1088a-rcpm (no driver attached)
   1  fsl,sec-v5.0 (no driver attached)
   1  gpio-keys (no driver attached)

How to switch between MDIO and FIXED for interfaces

If you want to make use of link-state and media information and be able to set it for the 8 GE ports you want to follow the documentation and do the following in the U-Boot console once:

env delete gbemode

You do not want to do the same for sfpmode just yet until FreeBSD grows FDT/SFP support.

How to netboot

I am not sure what the proper method is but I ended up adjusting the U-Boot menu and added a run setup_distroboot_efi &&  before the run dhcp which makes sure all the bits needed for DPAA2 are loaded.


While I do have trouble with the i2c implementation on FreeBSD (might be personal), while DmitrySalychev had patches for sfp support early 2023 I wrote a short script to name and check the GPIOs:

# dev.gpio.4.%pnpinfo: name=gpio@76 compat=ti,tca9539 
# dev.gpio.4.%desc: TCA6416 I/O expander

# gpioctl -f  /dev/gpioc4
# PIN 0 - 7

GC="gpioctl -f  /dev/gpioc4"

# # gpioctl -f /dev/gpioc4 -l
# pin 00: 0       gpio_P00<IN>
# pin 01: 1       gpio_P01<IN>
# pin 02: 0       gpio_P02<IN>          # present
# pin 03: 0       gpio_P03<IN>
# pin 04: 0       gpio_P04<IN>
# pin 05: 1       gpio_P05<IN>
# pin 06: 0       gpio_P06<IN>          # present
# pin 07: 0       gpio_P07<IN>
# pin 08: 0       gpio_P10<IN>
# pin 09: 0       gpio_P11<IN>
# pin 10: 0       gpio_P12<IN>
# pin 11: 0       gpio_P13<IN>
# pin 12: 0       gpio_P14<OUT>
# pin 13: 0       gpio_P15<OUT>
# pin 14: 1       gpio_P16<IN>
# pin 15: 0       gpio_P17<IN>

        local val spfs zeros ones

        case "${val}" in
        0)      s="${sfps}: ${zeros}" ;;
        1)      s="${sfps}: ${ones}" ;;
        *)      s="${sfps}: (invalid)" ;;

case "$1" in
        ${GC} -n 0 "Lower SFP+ TXFAULT"
        ${GC} -n 1 "Lower SFP+ TXDISABLE"
        ${GC} -n 2 "Lower SFP+ PRESENT"
        ${GC} -n 3 "Lower SFP+ LOS"
        ${GC} -n 4 "Upper SFP+ TXFAULT"
        ${GC} -n 5 "Upper SFP+ TXDISABLE"
        ${GC} -n 6 "Upper SFP+ PRESENT"
        ${GC} -n 7 "Upper SFP+ LOS"
        ${GC} -c 0 IN PU
        ${GC} -c 1 OUT PU
        ${GC} -c 2 IN
        ${GC} -c 3 IN
        ${GC} -c 4 IN PU
        ${GC} -c 5 OUT PU
        ${GC} -c 6 IN
        ${GC} -c 7 IN
        # Turn both SFP+ on
        ${GC} 1 1
        ${GC} 5 1
        for i in `jot 8 0`; do
                v=`${GC} ${i}`
                case ${i} in
                0)      check_name ${v} "Lower SFP+" "no transmitter fault" "transmitter Fault" ;;
                1)      check_name ${v} "Lower SFP+" "transmitter disabled" "transmitter enabled" ;;
                2)      check_name ${v} "Lower SFP+" "present" "not present" ;;
                3)      check_name ${v} "Lower SFP+" "lost signal" "has sginal" ;;
                4)      check_name ${v} "Upper SFP+" "no transmitter fault" "transmitter Fault" ;;
                5)      check_name ${v} "Upper SFP+" "transmitter disabled" "transmitter enabled" ;;
                6)      check_name ${v} "Upper SFP+" "present" "not present" ;;
                7)      check_name ${v} "Upper SFP+" "lost signal" "has sginal" ;;
                *)      s="(unknown)" ;;
                printf "%d\t%d\t%s\n" ${i} ${v} "${s}"
        printf "USAGE: invalid command '$1': [SET_NAMES|SET_IN_OUT|SET_ON|SHOW_STATUS]\n" >&2
        exit 1

# end

BjoernZeeb/Ten64 (last edited 2024-04-05T07:34:21+0000 by MarkLinimon)