On 18/02/2019 11:54, Robin Murphy wrote:
On 17/02/2019 15:19, David Summers wrote:
On 17/02/2019 14:00, Robin Murphy wrote:
Hi David,
On 2019-02-17 12:15 pm, David Summers wrote:
This patch makes some minor changes to how the sd card is
described in the device tree for the ASUS Tinker Board (S). In
particular on the Tinker Board S, when booted from the eMMC, and with
no card in the sd slot, and the log has endless messages about not
being able to detect the card.
Several methods to remove this error have been tried, the only one
that works is the broken-cd and so that is what is applied here.
I don't have a Tinker Board, but the symptom sounds instantly
familiar from hacking on another RK3288 box; have you tried adding
"regulator-always-on" to the vccio_sd regulator?
With the reference design (which I would assume the Tinker Board has
no reason to deviate from in this area), the CD pin is either wired
directly to the SoC with no external pull-up, or explicitly pulled
up to VCCIO_SD. Either way, when the dwmmc driver probes and
discovers there is no card present, it sets the
currently-unnecessary vqmmc-supply as inactive, and thus the
regulator core turns off VCCIO_SD entirely. Unfortunately, this
removes the voltage from the entire I/O domain including the
internal pull-up, which ends up leaving the CD pin floating and
generating spurious events.
Robin.
Hi Robin,
An interesting suggestion - no it hasn't been tried to always set the
vccio_sd regulator on. Will give it a go on ArchLinux Arm.
I guess this would explain why the Tinker Board booting from sd
doesn't see the error, as its enabled probably in uboot and then
keeps working.
IIRC though, if booting the TBS from eMMC, then inserting an sd card
and the errors stop. I guess this wouldn't happen if the power wasn't
applied?
That's the fun part of this scenario - the presence of a card is
unambiguous, it's only the absence of one which depends on the pull-up
state, so whenever as a card is inserted everything does work
correctly. Assuming they are the same errors I was seeing, they're
from the driver *thinking* a card is inserted due to CD floating low,
then failing to communicate with it, after which it powers down the
I/O interface again and the whole cycle begins anew.
I guess also that "regulator-always-on" is a quick test - but that
for submission to kernel it would be better done via
"mmc-pwrseq-simple"?
No, it's a valid description of the hardware to say "disabling this
regulator makes something fail to work as expected" if that is truly
the case. Besides, pwrseq is about how to initialise a detected
present card, not how to correctly detect that presence in the first
place.
Anyway I set up a test - so we can confirm this.
Great - there is of course still the possibility that the pin really
isn't wired up at all, in which case ignoring CD and taking the CPU
overhead of polling would be the only option, but the vendor DT
doesn't have any signs to suggest that's the case, and makes me lean
more towards the pull-up issue.
Robin.
Robin,
Heard back from the user on ArchLinux Arm who has a tinker Board S, he
tested your solution, and it worked.
Excellent, as it means the CPU won't have to poll the card!
I'll probably add both "regulator-always-on;" and "regulator-boot-on;",
as reading the regulator documentation, and the Tinker Board boots from
sd card, and the TinkerBoard S has the option of booting from the sd
card - we can be fairly sure that uboot has already enabled the power
supply.
So best to withdraw this patch. I'll do a fresh one, when I get time -
probably the weekend ...
Thanks for the help, I should have though of looking beyond sdmmc part
of device tree. So we are grateful that you remembered your solution
when you had the problem on another board.
Regards,
David