Ever since the introduction of the [[ https://github.com/raspberrypi/firmware/commit/68ec48189c5256b365c9232909180cb56c8820bc | 2019.11.18 version of `start4.elf` ]] by the Pi Foundation, the baudrate set by TF-A for the rpi4 platform is incorrect.
Our testing shows that all the [[ https://github.com/ARM-software/arm-trusted-firmware/blob/87b582ef5b31c5893a470b61c217931fc7602da3/plat/rpi/rpi4/rpi4_bl31_setup.c#L137-L148 |serial divisors we read ]] have doubled compared to the values that we read with a pre-2019.11.18 version of `start4.elf`, which indicates that the internal clock base that these divisors are meant to apply on (a.k.a. [[ https://github.com/ARM-software/arm-trusted-firmware/blob/87b582ef5b31c5893a470b61c217931fc7602da3/plat/rpi/rpi4/include/rpi_hw.h#L91 | `PLAT_RPI4_VPU_CLK_RATE` in the TF-A repo ]]) has also doubled.
I am planning to submit a patch that fixes this shortly.
Since this is also relevant, the patch I will be submitting fixes another baudrate issue that we have which is that, unless you have `core_freq` set to exact dividers of `500` (default) in your Raspberry Pi's `config.txt`, then the baudrate is not set correctly due to the decimal part of the divisor being ignored. For instance, regardless of the `start4.elf` you use, you will find that the baudrate is not set to its expected 115200 if you set `core_freq=400` or `core_freq=300` in `config.txt`.