[U-Boot] OpenRD Ultimate SATA & SD

Albert ARIBAUD albert.u.boot at aribaud.net
Sat Jul 2 08:26:35 CEST 2011


Hi Alexei,

(sorry for missing that reply)

Le 20/06/2011 11:30, Alexei Ozhigov a écrit :
> 2011/6/18 Albert ARIBAUD<albert.u.boot at aribaud.net>:
>> Hi,
>>
>> Le 17/06/2011 10:29, Alexei Ozhigov a écrit :
>>>
>>> 2011/6/17 Prafulla Wadaskar<prafulla at marvell.com>:
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Philip Hands [mailto:phil at hands.com]
>>>>> Sent: Friday, June 17, 2011 1:33 AM
>>>>> To: Alexei Ozhigov
>>>>> Cc: Prafulla Wadaskar; u-boot at lists.denx.de; Prabhanjan Sarnaik; Ashish
>>>>> Karkare
>>>>> Subject: Re: [U-Boot] OpenRD Ultimate SATA&    SD
>>>>>
>>>>> On Thu, 16 Jun 2011 16:18:46 +0400, Alexei Ozhigov
>>>>> <alexei.ozhigov at gmail.com>    wrote:
>>>>> ...
>>>>>>
>>>>>> I am experiencing the same problem with SATA right now with
>>>>>> v2011.06-rc2 (tried also the latest master). If MVSATA_STATUS_TIMEOUT
>>>>>> in mvsata_ide_initialize_port is ignored, SATA drive is found on the
>>>>>> second port and I am able to read the drive's content.
>>>>>
>>>>> Inspired by what you say about timeouts, I thought perhaps increasing
>>>>> the timeout from 10ms to 1s might make a difference -- that worked!
>>>>>
>>>>> ... except that now, it's working regardless :-(
>>>>>
>>>>> So, I've no idea if that's really related to what's going on, because
>>>>> I've now gone as far as reducing the timeout to 5ms and it's _still_
>>>>> working fine, so perhaps some part of the SATA subsystem was in a state
>>>>> that was somehow reset by waiting a bit longer for the startup once, and
>>>>> that's somehow "fixed" it.
>>>>>
>>>>> It is still working despite powering down the machine for a while, so
>>>>> I'm guessing whatever changed is something to do with the state of the
>>>>> hard drive.
>>>>>
>>>>> Sadly that means that I've now lost the ability to test this, since
>>>>> trying any of the versions that were previously failing now work.
>>>>>
>>>>> Anyway, Alexei, try increasing the timeout (i.e. the value being
>>>>> assigned to timeleft) --- if that works for you too, it seems pretty
>>>>> harmless, so might be appropriate for wider adoption.
>>>
>>> I have already tried longer timeouts for timeleft and it does not help.
>>>
>>> Also with timeout circumvention the SATA flash card I was hoping to
>>> boot from (Transcend TS1GSDOM22V) is identified as follows:
>>>
>>> Bus 0: OK Bus 1: OK
>>>    Device 0: Model: TRANSCEND  Firm: 20080128 Ser#: 20080407    00000005
>>>              Type: Hard Disk
>>>              Capacity: 955.8 MB = 0.9 GB (1957536 x 512)
>>> IDE read: device 0 not ready
>>> IDE read: device 0 not ready
>>>    Device 1: Model:  Firm:  Ser#:
>>>              Type: Hard Disk
>>>              Capacity: not available
>>>
>>> And then the card cannot be read. First attempt shows "OK" although
>>> the data written to memory are wrong, next attempts result in "device
>>> 0 not ready". On the other hand, Linux (Debian ARM port) does not
>>> recognize the card either. So if this problem is not related to
>>> improper initialization, the question is how SATA flash differs from
>>> regular SATA drives with respect to SATA controller in 88F6281 and if
>>> it is actually possible to work with SATA flash on OpenRD.
>>
>> Can you #define DEBUG at the start of common/cmd_ide.c and rerun the test?
>>
>> Amicalement,
>> --
>> Albert.
>>
>
>
> That is what is printed with regular SATA drive:
>
> ================================================================
> Marvell>>  ide reset
>
> Reset IDE: MVSATA_STATUS_TIMEOUT
> ide_preinit failed
> Bus 0: ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> OK Bus 1: ide_outb (dev= 1, port= 0x118, val= 0xf0) : @ 0xf1082118
> ide_inb (dev= 1, port= 0x11c) : @ 0xf108211c ->  0x50
> OK
>    Device 0: ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_outb (dev= 0, port= 0x11c, val= 0xec) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd0
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x58
> in input data base for read is f1082100
> Model: TOSHIBA MK1637GSX  Firm: DL030G Ser#:  97FXT4OUT
>              Type: Hard Disk
>              Supports 48-bit addressing
>              Capacity: 152627.8 MB = 149.0 GB (312581808 x 512)
> ide_read dev 0 start 100000010, blocks 1FFBAC64 buffer at 10
> ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_outb (dev= 0, port= 0x11c, val= 0xe5) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_inb (dev= 0, port= 0x108) : @ 0xf1082108 ->  0xff
> Powersaving FF
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_outb (dev= 0, port= 0x108, val= 0x01) : @ 0xf1082108
> ide_outb (dev= 0, port= 0x10c, val= 0x10) : @ 0xf108210c
> ide_outb (dev= 0, port= 0x110, val= 0x00) : @ 0xf1082110
> ide_outb (dev= 0, port= 0x114, val= 0x00) : @ 0xf1082114
> ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_outb (dev= 0, port= 0x11c, val= 0x20) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd0
> ...
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd0
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x58
> in input data base for read is f1082100
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_read dev 0 start 100000000, blocks 1FE32A78 buffer at 0
> ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_outb (dev= 0, port= 0x11c, val= 0xe5) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd0
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_inb (dev= 0, port= 0x108) : @ 0xf1082108 ->  0xff
> Powersaving FF
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
> ide_outb (dev= 0, port= 0x108, val= 0x01) : @ 0xf1082108
> ide_outb (dev= 0, port= 0x10c, val= 0x00) : @ 0xf108210c
> ide_outb (dev= 0, port= 0x110, val= 0x00) : @ 0xf1082110
> ide_outb (dev= 0, port= 0x114, val= 0x00) : @ 0xf1082114
> ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_outb (dev= 0, port= 0x11c, val= 0x20) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd0
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x58
> in input data base for read is f1082100
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50
>    Device 1: ide_outb (dev= 1, port= 0x118, val= 0xf0) : @ 0xf1082118
> ide_outb (dev= 1, port= 0x11c, val= 0xec) : @ 0xf108211c
> ide_inb (dev= 1, port= 0x11c) : @ 0xf108211c ->  0xd0
> ide_inb (dev= 1, port= 0x11c) : @ 0xf108211c ->  0x00
> not available
> Marvell>>
> ====================================================
>
>
> Now with SATA flash:
>
> ====================================================
> Marvell>>  ide reset
>
> Reset IDE: MVSATA_STATUS_TIMEOUT
> ide_preinit failed

(Too little info in the driver I guess...)

> Bus 0: ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x80
>
> ... (previous string repeated about 15 times)
>
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50

Looks like the SATA flash is really slow to respond.

> OK Bus 1: ide_outb (dev= 1, port= 0x118, val= 0xf0) : @ 0xf1082118
> ide_inb (dev= 1, port= 0x11c) : @ 0xf108211c ->  0x50
> OK
>    Device 0: ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_outb (dev= 0, port= 0x11c, val= 0xec) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd0
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x58
> in input data base for read is f1082100
> Model: TRANSCEND  Firm: 20080128 Ser#: 20080407    00000005
>              Type: Hard Disk
>              Capacity: 955.8 MB = 0.9 GB (1957536 x 512)
> ide_read dev 0 start 100000010, blocks 1FFBAC64 buffer at 10
> ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x58
> ide_outb (dev= 0, port= 0x11c, val= 0xe5) : @ 0xf108211c
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd8
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd8
>
> ... (repeated for about 1 min.)

Really looks like SATA flash is slow...

> IDE read: device 0 not ready
> ide_read dev 0 start 100000000, blocks 1FE32A78 buffer at 0
> ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0xd8
>
> ... (repeated for about 1 min.)
>
> IDE read: device 0 not ready
>    Device 1: ide_outb (dev= 1, port= 0x118, val= 0xf0) : @ 0xf1082118
> ide_outb (dev= 1, port= 0x11c, val= 0xec) : @ 0xf108211c
> ide_inb (dev= 1, port= 0x11c) : @ 0xf108211c ->  0xd8
>
> ... (repeated for about 1 min.)
>
> in input data base for read is f1082100
> Model:  Firm:  Ser#:
>              Type: Hard Disk
>              Capacity: not available
> Marvell>>

(I assume this is you hitting ENTER to repeat last command)

> Reset IDE: MVSATA_STATUS_TIMEOUT
> ide_preinit failed
> Bus 0: ide_outb (dev= 0, port= 0x118, val= 0xe0) : @ 0xf1082118
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x80
>
> ... (repeated about 15 times)
>
> ide_inb (dev= 0, port= 0x11c) : @ 0xf108211c ->  0x50

Then it answers again, but slow.

I would have thought of time-out values in the IDE code which would be 
ok for actual disks and too short for Flash disks, but it seems that 
later the Flash is completely unresponsive until it is reset -- I wonder 
if the issue is not with the SATA flash firmware itself. Can you test 
with different SATA flash devices, or test the SATA flash with some 
other system?

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list