Re: [RFC 0/2] sdhci-iproc CMD timeouts
From: Ulf Hansson <hidden>
Date: 2021-03-09 08:16:25
Also in:
linux-devicetree, linux-mmc, lkml
On Thu, 25 Feb 2021 at 10:53, Nicolas Saenz Julienne [off-list ref] wrote:
I'm seeing a rather odd behavior from sdhci-iproc's integration in BCM2711 (Raspberry Pi 4's SoC), and would appreciate some opinions. The controller will timeout on SDHCI CMDs under the following conditions: - No SD card plugged in (the card polling thread is running, CD irq disabled). - BCM2711's VPU clock[1] configured at 500MHz or more, lower clocks are OK. There is no specific command that will time out, it seems random. Here's what I found out. The SDHCI controller runs at 100MHz, by bumping the frequency to 150MHz the issue disapears. Might be pure luck, or maybe I hit the nail and it's proper interference. Can't say.
As you probably know, I don't have the in-depth knowledge about this HW. Although, let me provide a very vague guess. Could be that the controller needs a higher clock rate to stay within some spec, for an OPP/voltage domain for example? In any case, assuming you get some confirmation from the Broadcom folkz that this makes sense, you need to update the DT doc bindings to add the clock-frequency property. In regards to this, please take the opportunity to convert from legacy DT doc format (brcm,sdhci-iproc.txt) into the new yaml format. Kind regards Uffe
Regards,
Nicolas
---
[1] For those who are not aware, here's the relationship between VPU's clock
and emmc2's:
osc 54000000
plld 3000000091
plld_per 750000023
emmc2 149882908
pllc 2999999988
pllc_core0 999999996
vpu 499999998
Nicolas Saenz Julienne (2):
ARM: dts: Fix-up EMMC2 controller's frequency
mmc: sdhci-iproc: Set clock frequency as per DT
arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 6 ++++++
drivers/mmc/host/sdhci-iproc.c | 10 ++++++++++
2 files changed, 16 insertions(+)
--
2.30.1_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel