I have rpi3.
This situation is under the embedded system. The RPI reference shows how to boot Ubuntu.
It shows the way that u-boot calls grub and grub calls Linux...
and I have tried this chain loading.
In that situation, I wonder why u-boot calls grub? not directly calls Linux? Is it possible that grub calls Linux without u-boot?
GRUB requires a firmware to load it. U-Boot is one embodiment of such a firmware. For the Raspberry 3 you could use EDK2 [1] or barebox [3] instead.
Linux can be loaded directly from U-Boot. Either using the Linux EFI stub via the bootefi command or via the booti (64 bit) or bootm (32 bit) command.
Some distributions (Suse, Fedora [2]) have decided that it will make maintenance easier if all supported systems are booted in the same way, i.e. via GRUB. Debian Buster is also moving to GRUB on ARMv8 with the Buster release.
[1] https://github.com/tianocore/edk2-platforms/tree/master/Platform/RaspberryPi/RPi3