There is some instablity with some eMMC modules on ROCK Pi 4 SBCs running
in HS400 mode. This ends up resulting in some block errors after a while
or after a "heavy" operation utilising the eMMC (e.g. resizing a
filesystem). An example of these errors is as follows:
[ 289.171014] mmc1: running CQE recovery
[ 290.048972] mmc1: running CQE recovery
[ 290.054834] mmc1: running CQE recovery
[ 290.060817] mmc1: running CQE recovery
[ 290.061337] blk_update_request: I/O error, dev mmcblk1, sector 1411072 op 0x1:(WRITE) flags 0x800 phys_seg 36 prio class 0
[ 290.061370] EXT4-fs warning (device mmcblk1p1): ext4_end_bio:348: I/O error 10 writing to inode 29547 starting block 176466)
[ 290.061484] Buffer I/O error on device mmcblk1p1, logical block 172288
[ 290.061531] Buffer I/O error on device mmcblk1p1, logical block 172289
[ 290.061551] Buffer I/O error on device mmcblk1p1, logical block 172290
[ 290.061574] Buffer I/O error on device mmcblk1p1, logical block 172291
[ 290.061592] Buffer I/O error on device mmcblk1p1, logical block 172292
[ 290.061615] Buffer I/O error on device mmcblk1p1, logical block 172293
[ 290.061632] Buffer I/O error on device mmcblk1p1, logical block 172294
[ 290.061654] Buffer I/O error on device mmcblk1p1, logical block 172295
[ 290.061673] Buffer I/O error on device mmcblk1p1, logical block 172296
[ 290.061695] Buffer I/O error on device mmcblk1p1, logical block 172297
Disabling the Command Queue seems to stop the CQE recovery from running,
but doesn't seem to improve the I/O errors. Until this can be investigated
further, disable HS400 mode on the ROCK Pi 4 SBCs to at least stop I/O
errors from occurring.
Christopher Obbard (2):
arm64: dts: rockchip: Disable HS400 for eMMC on ROCK Pi 4
arm64: dts: rockchip: Disable HS400 for eMMC on ROCK 4C+
arch/arm64/boot/dts/rockchip/rk3399-rock-4c-plus.dts | 3 +--
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi | 4 ++--
2 files changed, 3 insertions(+), 4 deletions(-)
--
2.40.1
Hi,
On Wed Jul 5, 2023 at 4:42 PM CEST, Christopher Obbard wrote:
> There is some instablity with some eMMC modules on ROCK Pi 4 SBCs running
> in HS400 mode. This ends up resulting in some block errors after a while
> or after a "heavy" operation utilising the eMMC (e.g. resizing a
> filesystem). An example of these errors is as follows:
>
> [ 289.171014] mmc1: running CQE recovery
> [ 290.048972] mmc1: running CQE recovery
> [ 290.054834] mmc1: running CQE recovery
> [ 290.060817] mmc1: running CQE recovery
> [ 290.061337] blk_update_request: I/O error, dev mmcblk1, sector 1411072 op 0x1:(WRITE) flags 0x800 phys_seg 36 prio class 0
> [ 290.061370] EXT4-fs warning (device mmcblk1p1): ext4_end_bio:348: I/O error 10 writing to inode 29547 starting block 176466)
> [ 290.061484] Buffer I/O error on device mmcblk1p1, logical block 172288
> [ 290.061531] Buffer I/O error on device mmcblk1p1, logical block 172289
> [ 290.061551] Buffer I/O error on device mmcblk1p1, logical block 172290
> [ 290.061574] Buffer I/O error on device mmcblk1p1, logical block 172291
> [ 290.061592] Buffer I/O error on device mmcblk1p1, logical block 172292
> [ 290.061615] Buffer I/O error on device mmcblk1p1, logical block 172293
> [ 290.061632] Buffer I/O error on device mmcblk1p1, logical block 172294
> [ 290.061654] Buffer I/O error on device mmcblk1p1, logical block 172295
> [ 290.061673] Buffer I/O error on device mmcblk1p1, logical block 172296
> [ 290.061695] Buffer I/O error on device mmcblk1p1, logical block 172297
>
> Disabling the Command Queue seems to stop the CQE recovery from running,
> but doesn't seem to improve the I/O errors. Until this can be investigated
> further, disable HS400 mode on the ROCK Pi 4 SBCs to at least stop I/O
> errors from occurring.
Thanks for the patches! This issue lately got some attention on the
Radxa forums so thanks for bringing it to the kernel lists.
As a user who was hitting this issue some time ago I'd like to share the
observations I made during my testing:
I've seen these EMMC issues on several RockPi4 boards (4b v1.4, 4b v1.5,
4SE and 4b+ v1.73), with different EMMC modules (3 Foresee, 1 Samsung)
and throughout different kernels (v6.1.8 through 6.1.37, 6.3,
6.3.0-rc7-next-20230421).
However, with this vendor image [1] that uses kernel
4.4.154-116-rockchip-g86a614bc15b3 all of the EMMC modules work just fine.
The same holds true for another vendor image with kernel
4.4.154-00039-g00fccd37c63c-dirty.
The interesting thing here is, that both 4.4 kernels have HS400 enabled
(and max-frequency=<150000000> set) in their respective device-trees.
This can be checked in the vendor kernel repo for
4.4.154-116-rockchip-g86a614bc15b3 [2] and for
4.4.154-00039-g00fccd37c63c [3].
Kind regards
Folker
[1]: https://github.com/radxa-build/rock-pi-4b/releases/download/main-df04b3af/rockpi-4b-debian-buster-xfce4-arm64-20220401-0335-gpt.img.xz
[2]: https://github.com/radxa/kernel/blob/86a614bc15b3b1aeb3a9a9e395aedd088c70e35e/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
[3]: https://github.com/radxa/kernel/blob/00fccd37c63cd51b2ae9b3af965f975c561674b1/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
>
> Christopher Obbard (2):
> arm64: dts: rockchip: Disable HS400 for eMMC on ROCK Pi 4
> arm64: dts: rockchip: Disable HS400 for eMMC on ROCK 4C+
>
> arch/arm64/boot/dts/rockchip/rk3399-rock-4c-plus.dts | 3 +--
> arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi | 4 ++--
> 2 files changed, 3 insertions(+), 4 deletions(-)
On Wed, 5 Jul 2023 15:42:53 +0100, Christopher Obbard wrote:
> There is some instablity with some eMMC modules on ROCK Pi 4 SBCs running
> in HS400 mode. This ends up resulting in some block errors after a while
> or after a "heavy" operation utilising the eMMC (e.g. resizing a
> filesystem). An example of these errors is as follows:
>
> [ 289.171014] mmc1: running CQE recovery
> [ 290.048972] mmc1: running CQE recovery
> [ 290.054834] mmc1: running CQE recovery
> [ 290.060817] mmc1: running CQE recovery
> [ 290.061337] blk_update_request: I/O error, dev mmcblk1, sector 1411072 op 0x1:(WRITE) flags 0x800 phys_seg 36 prio class 0
> [ 290.061370] EXT4-fs warning (device mmcblk1p1): ext4_end_bio:348: I/O error 10 writing to inode 29547 starting block 176466)
> [ 290.061484] Buffer I/O error on device mmcblk1p1, logical block 172288
> [ 290.061531] Buffer I/O error on device mmcblk1p1, logical block 172289
> [ 290.061551] Buffer I/O error on device mmcblk1p1, logical block 172290
> [ 290.061574] Buffer I/O error on device mmcblk1p1, logical block 172291
> [ 290.061592] Buffer I/O error on device mmcblk1p1, logical block 172292
> [ 290.061615] Buffer I/O error on device mmcblk1p1, logical block 172293
> [ 290.061632] Buffer I/O error on device mmcblk1p1, logical block 172294
> [ 290.061654] Buffer I/O error on device mmcblk1p1, logical block 172295
> [ 290.061673] Buffer I/O error on device mmcblk1p1, logical block 172296
> [ 290.061695] Buffer I/O error on device mmcblk1p1, logical block 172297
>
> [...]
Applied, thanks!
[1/2] arm64: dts: rockchip: Disable HS400 for eMMC on ROCK Pi 4
commit: cee572756aa2cb46e959e9797ad4b730b78a050b
[2/2] arm64: dts: rockchip: Disable HS400 for eMMC on ROCK 4C+
commit: 2bd1d2dd808c60532283e9cf05110bf1bf2f9079
Best regards,
--
Heiko Stuebner <[email protected]>