Post Go back to editing

Linux 4.19 does not boot when using uart other than uart0

Hello,

on our board we using uart2 for serial port. Both U-Boot and Linux is configured that way. We used Linux 4.0 before (from addin 1.3.0), now I ported it to your kernel 4.19 (this repo). But with 4.19 Linux stopped booting. I figured out that it is because it tries to write string "Uncompressing Linux..." in arch/arm/boot/compressed/misc.c:decompress_kernel() using arch/arm/mach-sc58x/include/mach/uncompress.h:putc(). Between your 4.0 and 4.19 releases you changed loop condition from

while (AMBA_UART_FR & (1 << 5))

to

while (!(AMBA_UART_FR & (1 << 5)))

As I noticed before, with the kernel 4.0 it does not print string "Uncompressing Linux...", while it does with 4.19 if both U-Boot/Linux are using uart0. But with uart2, it hangs before printing.

I do not mind that uart0 is hardcoded in uncompress.h and therefore I will not see this message when using uart2, but there is a problem that kernel will not boot up if both kernel and u-boot are using uart2 and not uart0. I guess putc() somehow expects that uart0 is configured by U-Boot (and it works, if U-Boot uses uart0), but it should not stop Linux from booting if it is not.

Is there any fix on it except removing content of putc() in uncompress.h? The fix in loop condition above seems correct for me, but why it stopped working with 4.19, in other words, how it could even work in 4.0 (it DID NOT work in 4.0 - it did not print anything - but at least the kernel booted)?

Thank you,

Jan Havran