>>{The imx-boot patch noted in my first post is still in place, but since everything works when UBOOT_DTB_NAME is set to the original file, I'm assuming the patch doesn't break anything. }
Yeah, not so much. Apparently, UBOOT_DTB_NAME is not defined or somehow not available to soc.mak at the compile stage of imx-boot, so the mkimage_fit_atf.sh script was being fed an empty command line instead of the name of the dtb file. It didn't complain, but would result in the original error on boot. Changed the patch to instead directly feed it my .dtb filename, and it now boots.
There's probably a much easier way to do this, but to summarize what worked for me and while preserving the originals...
* created my own layer and copied meta-fsl-bsp-release/imx/meta-bsp into mylayer/imx/meta-bsp. Added my layer to bblayers.conf and commented out the meta-fsl-bsp-release/imx/meta-bsp inclusion
* added my own mymachine.conf to meta-bsp/conf/machine. In it, I commented out the -evk.dtb and added my own dtb file name, changed UBOOT_CONFIG[sd] to point at my defconfig, and changed UBOOT_DTB_NAME to point to my own uboot dtb
* in the imx-boot recipe, I add a patch that changes soc.mak to use my uboot dtb
* in the u-boot-imx recipe, add my defconfig file (with DEVICE_TREE set to my file), add my u-boot dts, and a modified imx8mq_evk.h file (so the u-boot params are changed). All these get copied to the appropriate ${S} directory in a do_compile_prepend task.
* in the linux-imx recipe, add my linux dts (not the same as u-boot dts, u-boot doesn't like the syntax of everything in the linux dts (?)), and copy it to the appropriate source directory in a do_compile_prepend task. add my dtb to the KERNEL_DEVICETREE variable here
*in the optee-os-imx recipe, add my machine name flavor (PLATFORM_FLAVOR_mymachine = "mx8mqevk")
* I didn't bother trying to modify the sdcard builder, so the dtb file has to be manually copied to the FAT partition from the deploy directory.
Hope this is helpful...
John