@tom-elliott (I work with Sbergeron) We have cross compiled ipxe, and the arm host can successfully chainload to ipxe. ipxe runs the default.ipxe script and from there tries to grab the bzImage32 kernel. The problem is that the bzImage kernels provided are built for x86 / x86_64. We would be happy to work with you in cross compiling these kernels so that there is a kernel and initrd image that works on arm.
There is also the issue of being able to dynamically detect for arm hosts. From preliminary testing, this seems to be a good solution (at the beginning of default.ipxe):
Before:
cpuid --ext 29 && set arch x86_64 || set arch i386
After:
cpuid --ext 29 && set arch x86_64 || set arch ${buildarch}
So, if the cpu does not support x86_64 instructions, we use the buildarch which will either be i386 or arm64. Although, I am ultimately not sure if this is needed. Our DHCP server tells the arm host to boot from the arm-compiled ipxe image, and we can configure fog to make the host to boot from an arm specific kernel once we build one.
Many thanks!