Fix data loss bug in large SDHOST transfers
When reading a file fragment that was just a shade over a natural-number of DMA bounce buffers in length (256 KiB), it was possible for the code that copies the data from the DMA buffer to the scatter list to merge the distinct events of the completion of the final two DMA buffers, leading to the part of the destination memory corresponding to the final partial DMA buffer being left uninitialised.
Also spotted in passing: the code that detects DMA buffer overrun had an exception for when two DMA buffers or less remained to be copied. This should only have applied to read transfers; for a write transfer, the DMA controller should only ever be allowed to get close to the scatterlist-to-bounce-buffer copying process if zero bytes remain to be copied in software.
Note, as this only applies to the SDHOST controller, the affected platforms were 3B, 3B+, 3A+, Zero W, Zero 2W, or the HAT on a generation-4 Pi.
Also apply workaround for Cortex-A53 errata
Cortex-A53 errata 819472, 824069, 826319 and 855873 all relate to the CP15 DCCMVAC operation (Data Cache Clean by (Modified) Virtual Address to PoC) and advocate for replacing it by the equivalent clean-and-invalidate operation, DCCIMVAC.