
Hi Alexei,
(sorry for missing that reply)
Le 20/06/2011 11:30, Alexei Ozhigov a écrit :
2011/6/18 Albert ARIBAUDalbert.u.boot@aribaud.net:
Hi,
Le 17/06/2011 10:29, Alexei Ozhigov a écrit :
2011/6/17 Prafulla Wadaskarprafulla@marvell.com:
-----Original Message----- From: Philip Hands [mailto:phil@hands.com] Sent: Friday, June 17, 2011 1:33 AM To: Alexei Ozhigov Cc: Prafulla Wadaskar; u-boot@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@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,