Beaglebone missing default u-boot environment in MMC

Perhaps we should remove “For U-Boot-based boards, the integration checklist has been verified.” from the Beaglebone Black integration page?

From a freshly-flashed Beaglebone (using .sdimg file) I observe

U-Boot SPL 2019.01 (Feb 05 2020 - 16:04:48 +0000)
Trying to boot from MMC2
Loading Environment from FAT... Card did not respond to voltage select!
Loading Environment from MMC... *** Warning - bad CRC, using default environment



U-Boot 2019.01 (Feb 05 2020 - 16:04:48 +0000)

CPU  : AM335X-GP rev 2.1
I2C:   ready
DRAM:  512 MiB
No match for driver 'omap_hsmmc'
No match for driver 'omap_hsmmc'
Some drivers were not found
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from FAT... Card did not respond to voltage select!
Loading Environment from MMC... *** Warning - bad CRC, using default environment

<ethaddr> not set. Validating first E-fuse MAC
Net:   cpsw, usb_ether
Press SPACE to abort autoboot in 2 seconds

So we see that it cannot load the environment from MMC due to bad CRC, and that it uses the default env instead. (as expected)

So I experimented with manually running mender_setup:

=> printenv bootcmd
bootcmd=run mender_setup; setenv bootargs root=${mender_kernel_root} ${bootargs}; if test "${fdt_addr_r}" != ""; then load ${mender_uboot_root} ${fdt_addr_r} /boot/${mender_dtb_name}; fi; load ${mender_uboot_root} ${kernel_addr_r} /boot/${mender_kernel_name}; ${mender_boot_kernel_type} ${kernel_addr_r} - ${fdt_addr_r}; run mender_try_to_recover

=> printenv mender_setup
mender_setup=if test "${mender_saveenv_canary}" != "1"; then setenv mender_saveenv_canary 1; saveenv; fi; if test "${mender_pre_setup_commands}" != ""; then run mender_pre_setup_commands; fi; if test "${mender_systemd_machine_id}" != ""; then setenv bootargs systemd.machine_id=${mender_systemd_machine_id} ${bootargs}; fi; setenv mender_kernel_root /dev/mmcblk1p${mender_boot_part}; if test ${mender_boot_part} = 2; then setenv mender_boot_part_name /dev/mmcblk1p2; else setenv mender_boot_part_name /dev/mmcblk1p3; fi; setenv mender_kernel_root_name ${mender_boot_part_name}; setenv mender_uboot_root mmc 1:${mender_boot_part_hex}; setenv mender_uboot_root_name ${mender_boot_part_name}; setenv expand_bootargs "setenv bootargs \"${bootargs}\""; run expand_bootargs; setenv expand_bootargs; if test "${mender_post_setup_commands}" != ""; then run mender_post_setup_commands; fi

=> print mender_saveenv_canary
## Error: "mender_saveenv_canary" not defined

=> run mender_setup
Saving Environment to FAT... Card did not respond to voltage select!
Failed (1)

=> print mender_saveenv_canary
mender_saveenv_canary=1

=> reset
resetting ...

U-Boot SPL 2019.01 (Feb 05 2020 - 16:04:48 +0000)
Trying to boot from MMC2
Loading Environment from FAT... Card did not respond to voltage select!
Loading Environment from MMC... *** Warning - bad CRC, using default environment



U-Boot 2019.01 (Feb 05 2020 - 16:04:48 +0000)

CPU  : AM335X-GP rev 2.1
I2C:   ready
DRAM:  512 MiB
No match for driver 'omap_hsmmc'
No match for driver 'omap_hsmmc'
Some drivers were not found
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from FAT... Card did not respond to voltage select!
Loading Environment from MMC... *** Warning - bad CRC, using default environment

<ethaddr> not set. Validating first E-fuse MAC
Net:   cpsw, usb_ether
Press SPACE to abort autoboot in 2 seconds
=> printenv mender_saveenv_canary
## Error: "mender_saveenv_canary" not defined

So it appears that the saveenv inside the mender_setup command did not actually save the env to MMC flash?

Perhaps I should configure u-boot to disable env FAT support, as it should only be using MMC for my environment? Perhaps that is what is causing the problem with saveenv?

Or maybe I should just switch to GRUB as that seems to be the favored approach going forward.

Thanks for your help!