Here's something I found at random, I wonder if anyone else saw this in testing any kind of common variables or load addresses?
Basically booting a uImage kernel and uImage ramdisk everything is fine.
But a zImage and a raw ramdisk, sometimes the kernel decompresses over the ramdisk; the net effect being that the kernel disables initramfs support pretty early and on distros with ramdisks doing the grunt work before rootfs mount, all you'll get after that is some kind of panic and non-bootable system.
I am assuming that if the ramdisk is loaded via uImage the header has a length in it, but raw, there is no length for the ramdisk known to U-Boot. This affects properties inserted into the /chosen node. But I can't see anywhere in the Linux decompression code that even bothers to check, so I can't figure out why it would even matter that linux,initrd-end isn't set to the actual last byte of the ramdisk load.. (if that is indeed the case). I would have thought it would have been in the kernel's best interest to not decompress over any memory regions passed in the DT, and all I can really find is conversion from ATAGS to DT entries.
Anyway, shouldn't the kernel make sure for complete safety that it not only won't decompress over it's compressed image, but won't decompress over a supplied ramdisk, and how would we inform the kernel of the size if it's just a file loaded into memory at an arbitrary address with no header or otherwise-supplied length?