January 19, 2025

Antminer S9 board - a first look at the U-boot SPL build

Here is what we see from the "brief" log of the SPL build. A lot to investigate and many things of interest. What I want to find out is what the very first instruction is, and in what file it is located.
  CC      spl/./lib/asm-offsets.s
  CC      spl/./arch/arm/lib/asm-offsets.s
  CC      spl/arch/arm/mach-zynq/cpu.o
  CC      spl/arch/arm/mach-zynq/ddrc.o
  CC      spl/arch/arm/mach-zynq/slcr.o
  CC      spl/arch/arm/mach-zynq/clk.o
  CC      spl/arch/arm/mach-zynq/spl.o
  CC      spl/arch/arm/mach-zynq/ps7_spl_init.o
  AR      spl/arch/arm/mach-zynq/built-in.o
  CC      spl/arch/arm/cpu/armv7/cache_v7.o
  CC      spl/arch/arm/cpu/armv7/cpu.o
  CC      spl/arch/arm/cpu/armv7/cp15.o
  CC      spl/arch/arm/cpu/armv7/syslib.o
  AR      spl/arch/arm/cpu/armv7/built-in.o
  CC      spl/arch/arm/lib/spl.o
  CC      spl/arch/arm/lib/zimage.o
  CC      spl/arch/arm/lib/bootm-fdt.o
  CC      spl/arch/arm/lib/bdinfo.o
  CC      spl/arch/arm/lib/sections.o
  CC      spl/arch/arm/lib/stack.o
  CC      spl/arch/arm/lib/interrupts.o
  CC      spl/arch/arm/lib/reset.o
  CC      spl/arch/arm/lib/cache.o
  CC      spl/arch/arm/lib/cache-cp15.o
  CC      spl/arch/arm/lib/psci-dt.o
  AR      spl/arch/arm/lib/built-in.o
  CC      spl/arch/arm/lib/eabi_compat.o
  CC      spl/arch/arm/lib/reloc_arm_efi.o
  CC      spl/board/xilinx/zynq/board.o
  AR      spl/board/xilinx/zynq/built-in.o
  CC      spl/board/xilinx/common/board.o
  AR      spl/board/xilinx/common/built-in.o
  CC      spl/common/spl/spl.o
  CC      spl/common/spl/spl_fit.o
  CC      spl/common/spl/spl_mmc.o
  CC      spl/common/spl/spl_fat.o
  CC      spl/common/spl/spl_spi.o
  CC      spl/common/spl/spl_ram.o
  AR      spl/common/spl/built-in.o
  CC      spl/common/init/board_init.o
  AR      spl/common/init/built-in.o
  CC      spl/boot/image.o
  CC      spl/boot/image-board.o
  CC      spl/boot/fdt_support.o
  CC      spl/boot/image-fdt.o
  CC      spl/boot/image-fit.o
  CC      spl/boot/common_fit.o
  AR      spl/boot/built-in.o
  CC      spl/common/console.o
  CC      spl/common/dlmalloc.o
  CC      spl/common/malloc_simple.o
  CC      spl/common/hash.o
  CC      spl/common/memsize.o
  CC      spl/common/stdio.o
  CC      spl/common/cli.o
  CC      spl/common/dfu.o
  CC      spl/common/command.o
  CC      spl/common/s_record.o
  CC      spl/common/xyzModem.o
  AR      spl/common/built-in.o
  CC      spl/cmd/nvedit.o
  AR      spl/cmd/built-in.o
  CC      spl/lib/libfdt/fdt.o
  CC      spl/lib/libfdt/fdt_ro.o
  CC      spl/lib/libfdt/fdt_wip.o
  CC      spl/lib/libfdt/fdt_strerror.o
  CC      spl/lib/libfdt/fdt_sw.o
  CC      spl/lib/libfdt/fdt_rw.o
  CC      spl/lib/libfdt/fdt_empty_tree.o
  CC      spl/lib/libfdt/fdt_addresses.o
  CC      spl/lib/libfdt/fdt_overlay.o
  AR      spl/lib/libfdt/built-in.o
  CC      spl/lib/zlib/zlib.o
  AR      spl/lib/zlib/built-in.o
  CC      spl/lib/hash-checksum.o
  CC      spl/lib/sha1.o
  CC      spl/lib/sha256.o
  CC      spl/lib/gunzip.o
  CC      spl/lib/fdtdec_common.o
  CC      spl/lib/fdtdec.o
  CC      spl/lib/crc16-ccitt.o
  CC      spl/lib/net_utils.o
  CC      spl/lib/qsort.o
  CC      spl/lib/hashtable.o
  CC      spl/lib/display_options.o
  CC      spl/lib/crc32.o
  CC      spl/lib/div64.o
  CC      spl/lib/hang.o
  CC      spl/lib/linux_compat.o
  CC      spl/lib/linux_string.o
  CC      spl/lib/lmb.o
  CC      spl/lib/membuff.o
  CC      spl/lib/slre.o
  CC      spl/lib/string.o
  CC      spl/lib/tables_csum.o
  CC      spl/lib/time.o
  CC      spl/lib/hexdump.o
  CC      spl/lib/uuid.o
  CC      spl/lib/rand.o
  CC      spl/lib/panic.o
  CC      spl/lib/tiny-printf.o
  CC      spl/lib/strto.o
  CC      spl/lib/abuf.o
  CC      spl/lib/date.o
  CC      spl/lib/rtc-lib.o
  CC      spl/lib/elf.o
  AR      spl/lib/built-in.o
  CC      spl/disk/part.o
  CC      spl/disk/disk-uclass.o
  CC      spl/disk/part_dos.o
  CC      spl/disk/part_efi.o
  AR      spl/disk/built-in.o
  CC      spl/drivers/block/blk-uclass.o
  AR      spl/drivers/block/built-in.o
  CC      spl/drivers/clk/clk-uclass.o
  CC      spl/drivers/clk/clk_fixed_rate.o
  CC      spl/drivers/clk/clk_fixed_factor.o
  CC      spl/drivers/clk/clk_zynq.o
  AR      spl/drivers/clk/built-in.o
  CC      spl/drivers/core/device.o
  CC      spl/drivers/core/fdtaddr.o
  CC      spl/drivers/core/lists.o
  CC      spl/drivers/core/root.o
  CC      spl/drivers/core/uclass.o
  CC      spl/drivers/core/util.o
  CC      spl/drivers/core/tag.o
  CC      spl/drivers/core/simple-bus.o
  CC      spl/drivers/core/dump.o
  CC      spl/drivers/core/of_extra.o
  CC      spl/drivers/core/ofnode.o
  CC      spl/drivers/core/read_extra.o
  AR      spl/drivers/core/built-in.o
  CC      spl/drivers/fpga/fpga.o
  CC      spl/drivers/fpga/zynqpl.o
  CC      spl/drivers/fpga/xilinx.o
  AR      spl/drivers/fpga/built-in.o
  CC      spl/drivers/mmc/mmc.o
  CC      spl/drivers/mmc/mmc-uclass.o
  CC      spl/drivers/mmc/sdhci.o
  CC      spl/drivers/mmc/zynq_sdhci.o
  AR      spl/drivers/mmc/built-in.o
  CC      spl/drivers/mtd/spi/sf-uclass.o
  CC      spl/drivers/mtd/spi/sf_probe.o
  CC      spl/drivers/mtd/spi/spi-nor-ids.o
  CC      spl/drivers/mtd/spi/spi-nor-core.o
  AR      spl/drivers/mtd/spi/spi-nor.o
  AR      spl/drivers/mtd/spi/built-in.o
  AR      spl/drivers/mtd/built-in.o
  CC      spl/drivers/serial/serial-uclass.o
  CC      spl/drivers/serial/arm_dcc.o
  CC      spl/drivers/serial/serial_zynq.o
  AR      spl/drivers/serial/built-in.o
  CC      spl/drivers/spi/spi-uclass.o
  CC      spl/drivers/spi/spi-mem.o
  CC      spl/drivers/spi/zynq_spi.o
  CC      spl/drivers/spi/zynq_qspi.o
  AR      spl/drivers/spi/built-in.o
  CC      spl/drivers/timer/timer-uclass.o
  CC      spl/drivers/timer/arm_twd_timer.o
  AR      spl/drivers/timer/built-in.o
  AR      spl/drivers/built-in.o
  CC      spl/fs/fat/fat.o
  AR      spl/fs/fat/built-in.o
  CC      spl/fs/fs_internal.o
  AR      spl/fs/built-in.o
  LD      spl/u-boot-spl
  OBJCOPY spl/u-boot-spl-nodtb.bin
mkdir -p spl/dts/
  FDTGREP spl/dts/dt-spl.dtb
  COPY    spl/u-boot-spl.dtb
  CAT     spl/u-boot-spl-dtb.bin
  COPY    spl/u-boot-spl.bin
  SYM     spl/u-boot-spl.sym
  MKIMAGE spl/boot.bin
  MKIMAGE u-boot.img
  COPY    u-boot.dtb
  MKIMAGE u-boot-dtb.img
  LD      u-boot.elf
  OFCHK   .config
Here are 3 interesting lines that correspond to the LD and OBJCOPY lines in the above. It looks like arch/arm/cpu/armv7/start.o is what starts the show.
The source for this would be -- u-boot-xlnx/arch/arm/cpu/armv7/start.S
  arm-none-eabi-gcc -E -Wp,-MD,spl/.u-boot-spl.lds.d -D__KERNEL__ -D__UBOOT__ -DCONFIG_SPL_BUILD -D__ARM__ -marm -mno-thumb-interwork  -mabi=aapcs-linux  -mno-unaligned-access -ffunction-sections -fdata-sections -fno-common -ffixed-r9  -msoft-float -mgeneral-regs-only    -pipe  -march=armv7-a -D__LINUX_ARM_ARCH__=7 -mtune=generic-armv7-a -I./arch/arm/mach-zynq/include -Ispl/include -Iinclude   -I./arch/arm/include -include ./include/linux/kconfig.h -nostdinc -isystem /usr/lib/gcc/arm-none-eabi/14.1.0/include -include ./include/u-boot/u-boot.lds.h -include ./include/config.h -DCPUDIR=arch/arm/cpu/armv7  -DIMAGE_MAX_SIZE=0x30000 -DIMAGE_TEXT_BASE=0x0 -ansi -D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o spl/u-boot-spl.lds arch/arm/mach-zynq/u-boot-spl.lds

  ( cd spl && arm-none-eabi-ld.bfd -z noexecstack --no-warn-rwx-segments -T u-boot-spl.lds --gc-sections -Bstatic --gc-sections  --no-dynamic-linker --build-id=none -Ttext 0x0 arch/arm/cpu/armv7/start.o --whole-archive arch/arm/mach-zynq/built-in.o arch/arm/cpu/armv7/built-in.o arch/arm/cpu/built-in.o arch/arm/lib/built-in.o board/xilinx/zynq/built-in.o board/xilinx/common/built-in.o common/spl/built-in.o common/init/built-in.o boot/built-in.o common/built-in.o cmd/built-in.o env/built-in.o lib/built-in.o disk/built-in.o drivers/built-in.o dts/built-in.o fs/built-in.o  --no-whole-archive arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot-spl.map -o u-boot-spl )

  arm-none-eabi-objcopy -j .text -j .secure_text -j .secure_data -j .rodata -j .hash -j .data -j .got -j .got.plt -j __u_boot_list -j .rel.dyn -j .binman_sym_table -j .text_rest -j .dtb.init.rodata -j .efi_runtime -j .efi_runtime_rel  -O binary  spl/u-boot-spl spl/u-boot-spl-nodtb.bin

The end product in all of this is:
131256 Jan 19 22:15 u-boot-spl-nodtb.bin

Feedback? Questions? Drop me a line!

Tom's Computer Info / tom@mmto.org