Comment 3 for bug 1852510

Revision history for this message
Hui Wang (hui.wang) wrote : Re: IO errors when writing large amounts of data to USB storage in eoan on RPI

I reproduced this problem on the rpi3B+ and rpi2Bv1.1 with armhf kernel.

This problem is introduced by enabling two kernel configs for arm32 kernel, they are HIGHMEM and VMSPLIT_3G.

We need to use a single arm32 kernel to support rpi2/3/4, while rpi4 has 1G/2G/4G ram, to support 2G and 4G ram, we have to enable HIGHMEM and VMSPLIT_3G, otherwise we can't get 2G/4G memory in the system.

The upstream kernel of https://github.com/raspberrypi/linux.git also has this issue.

some explanation:
These two configs are specific to 32bit kernel, so we can't reproduce this issue on arm64 kernel.
The usb ports on rpi4 are routed to xhci host controller instead of dwc_otg host controller, so we can't reproduce this issue on rpi4 even with armhf kernel.
On rpi3A+ board, there are only 512M physical memory, there is no ram to map to highmemory region, so we can't reproduce this problem on rpi3A+.

I guess the problem is in the dwc_otg usb host driver, it depends on dma to work, but dma gets a highmem buffer then it can't work normally anymore. I will report this issue to rpi community and try a find a fix asap.

so far, the workaround is to set total_mem=512 in the config.txt for rpi2/3 working with 32bit kernel , then there is no memory mapped to highmem region.