The significant problem is that the system seems to freeze after U-Boot displays text
Starting kernel ...
If the uncompressed kernel Image is loaded, then the actual kernel launch code will be run.
But if a uImage or zImage file has been loaded (which also appears as "uncompressed" because it is self-extracting), then the next code executed will be decompression that is bound to the zImage file. Typically, this decompression procedure displays text, for example
Uncompressing Linux............ done, booting the kernel.
before the actual kernel start code is run before any processing of the kernel command line before any processing of the device block tree and before any console leaves the kernel (including earlyprintk).
There is a discrepancy between the kernel load and the start addresses indicated in the image header
Load Address: 0x00000000 Entry Point: 0x00000000
in comparison with what is indicated in the DT:
load = <0x81008000>; entry = <0x81008000>;
Since the kernel image is temporarily loaded in
#
the addresses in the DT look correct, and the addresses in the image header are dummy.
Assuming that there is no physical RAM at 0x00000000, the result is that the kernel image will be copied (or unpacked) to the fictitious boot address 0, and then the kernel image will be executed by branching to the fictitious entry point 0. The CPU will probably hang, trying to execute garbage from non-existent memory, and this is perfectly consistent with what you are reporting.
Solution (1) confirms that the kernel is associated with the correct address and (2) to specify the correct addresses in the mkimage command using the -a and -e command options.
This correction should at least pass this point.