Here is a helpful note in case anyone else would like to know the layout of images on the sdcard.
Yes, you can program the FMAN code to sdcard. The documentation is not as clear as for writing to the on-board flash (via QSPI), for which there are multiple instances of explicit QSPI memory maps showing the placement of RCW, u-boot, u-boot environment, and FMAN microcode. There is no place in the 1328 page BSP documentation for the LS1046ardb that lays out the sdcard memory map but you can work out the layout of the sdcard from scattered examples.
At the top of page 40 it says:
Program a new microcode to SD Card:
=>tftp <ucode_image_addr> <ucode_file_name>.bin
=>mmc write <ucode_image_addr> 820 50
Remember that this is a uboot command so the block count 820 is in hex.
The equivalent command on ubuntu would be:
dd if=fsl_fman_ucode_t2080_r1.1_106_4_18.bin of=/dev/sdcard bs=512 seek=2080
This is the table that SHOULD be in the documentation.
This one was taken from the README for the T2080RDB board support, but it is largely applicable to the LS1046A
Micro SD Card memory Map on LS1046A (blocksize 512 bytes)
----------------------------------------------------
Block #blocks Definition Size
x8 2048 RCW+PBI+SPL+u-boot img 1MB
x800 16 u-boot env 8KB
x820 128 FMAN ucode 64KB
For sdcard, the RCW is combined with the preboot load instructions (PBI), the uboot secondary program loader (SPL), and the main uboot executable. There are probably some alignment constraints on those images as well but I'm too lazy to go figure it out. Basically the `mkimage` tool in the uboot build tree is used to put all those together into a single image that you can write to you sdcard starting at block 8.
The uboot environment block is made with the `mkenvimage` tool that is included in the uboot build tree. You will need to include a size parameter when building your own environments.
mkenvimage -s 8192 -o input.txt output.bin
The FMAN microcode is NOT included in the u-boot tree. You'll have to get that from the LS1046ARDB SDK.