Raspberry Pi No Login
Oleksandr Tymoshenko
gonzo at bluezbox.com
Mon Feb 11 18:19:33 UTC 2013
On 2013-02-11, at 7:51 AM, Ian Lepore <ian at FreeBSD.org> wrote:
> On Sat, 2013-02-09 at 17:04 -0800, Oleksandr Tymoshenko wrote:
>> On 1/30/2013 2:51 PM, Oleksandr Tymoshenko wrote:
>>> On 1/30/2013 2:25 PM, hiren panchasara wrote:
>>>> On Wed, Jan 30, 2013 at 9:15 AM, Tim Kientzle <tim at kientzle.com> wrote:
>>>>> On Jan 30, 2013, at 7:42 AM, Neal Nelson wrote:
>>>>>
>>>>>> HI.
>>>>>>
>>>>>> I'm able to build a bootable FreeBSD image using the beaglebone
>>>>>> scripts, which I understand is the accepted way at the moment.
>>>>>>
>>>>>> The problem I have is that everything seems to be going nicely, but
>>>>>> I never get a login prompt. The last thing I see, after the ssh key
>>>>>> generation stuff, is a line showing the date, then nothing. This is
>>>>>> true using Current as of today (2012-01-30).
>>>>>>
>>>>>> I've had this problem for some time now as every image I build
>>>>>> using this process has the same problem. If anyone has an idea as
>>>>>> to what I'm doing wrong, I'd be very grateful.
>>>>> Look at the kernel boot messages for the SD card
>>>>> check.
>>>>>
>>>>> Is it probing at 25MHz or 50MHz?
>>>>>
>>>>> I haven't tried RPi in a little while, but last time I did
>>>>> there was an erratic bug which caused the SD card
>>>>> to sometimes get probed at 50MHz and be non-functional.
>>>>>
>>>>> I believe some people worked around this by trying
>>>>> different cards or maybe it's been fixed in the
>>>>> SD driver by now?
>>>> Not sure if its fixed in the driver now but I got around the frequency
>>>> problem by the patch available at:
>>>> http://www.peach.ne.jp/archives/rpi/patch/
>>>>
>>>> Basically its setting freq to 25MHz instead of default 50MHz in
>>>> bcm2835_sdhci.c
>>>
>>> The patch works around the issue although it does address several
>>> issues with FreeBSD's
>>> generic mmc driver. Namely: driver does not check for return value for
>>> functions that read
>>> card's CSD, SCR or the result of switch command. CSD and SCR register
>>> contain card-specific
>>> information drivers uses to tune its operations. So when register read
>>> command silently
>>> fails driver uses partially valid data and hence its behavior might or
>>> might not manifest
>>> problems.
>>>
>>> Now the interesting part is why these commands fail. SDHCI controller
>>> returns Data CRC
>>> errors when executing them. It happens fairly early in initialization
>>> sequence so at that point
>>> card operates at 400KHz and should not have problem like this.
>>
>> Today I went all scientific on this issue and plugged logic analyzer
>> to SD card using SparkFun's SD Sniffer[1]. What I found was that on
>> power up SDHCI controller starts operating at frequency of 190KHz but
>> shortly after it, before any data is read via DATA line, it switches to
>> 8MHz. So I capped minimum frequency for SDHCI driver at 8MHz and got
>> RPi into endless reboot cycle. Lo and behold: it's been almost two
>> hours and so far no Data CRC Error interrupts.
>>
>> Patch: http://people.freebsd.org/~gonzo/arm/patches/rpi-sdhci.diff
>>
>> Description:
>> - Do not silently ignore failure of "Read CSD" and "Read SCR"
>> commands since data returned by them is essential for further
>> initialization
>> - Properly calculate minimum frequency for SDHCI 3.00 and higher
>> - Add new method to SDHCI interface for setting driver-specific
>> minimum frequency. Provide default implementation.
>> - Cap minimum frequency at 8MHz for Raspberry Pi's SDHC
>>
>> I'd appreciate reviews and testing. There is one debug printf that
>> will be removed from final version.
>>
>> [1] https://www.sparkfun.com/products/11468
>>
>
> I may not be understanding what you mean about the 8mhz clock, but if
> that refers to the speed on the sd/mmc bus itself, that sounds like a
> violation of the protocol. The bus is supposed to be run at no more
> than 400khz until the card identification procedure is completed. (I
> suspect most modern card can run the ID sequence at full speed.)
>
> I wonder if the real problem is a violation of a rule about switching
> speed after the ID sequence... I vaguely remember there are some rules
> about that, like after sending commands that change the bus config you
> have to wait a certain number of cycles for the card to adjust.
Yes, I was talking about SD/MMC bus speed. I understand that it's
violation of ID sequence but Data CRC errors at low frequencies
looks like silicon quirk. I failed to find any errata for chip so
it's guesswork but I do not think it's our SDHCI/MMC driver bug.
The Linux driver struggles from the same issues.
Our options here are:
- Increase retry attempts number in generic SDHCI and MMC drivers.
for Read CSD and Read SCR commands. It will only increase
chances but will not guarantee success.
- Cap minimum frequency which seems to help but leaves out older
MMC cards.
More information about the freebsd-arm
mailing list