
Hi,
I've been trying to get a version of u-boot for OpenRD Ultimate that is willing to boot from all of NAND, USB, SD and SATA, and find that SD & SATA is still not possible with -rc1 as packaged for Debian (and it seems that nothing in the subsequent work in the master git would help, but if people tell me that it does, I'll give that a try).
SATA throws an error in ide_preinit in drivers/block/mvsata_ide.c, and having looked into it, the second call to mvsata_ide_initialize_port is what fails.
This is with a SATA drive plugged into the on-board SATA port, and with nothing plugged into the eSATA port.
If I #undef CONFIG_SYS_ATA_IDE1_OFFSET in include/configs/openrd.h then the second mvsata_ide_initialize_port call is disabled, and I can then boot from SATA, but I've not got an eSATA drive to test whether it would have worked if I had one plugged in.
I note that there is still something a little odd going on, since the drive seems to get detected twice:
Marvell>> ide reset Reset IDE: Bus 0: OK Bus 1: OK Device 0: Model: HITACHI HTS723216L9SA60 Firm: FC2ZC50B Ser#: 091005FC1220NCHXGPLG Type: Hard Disk Supports 48-bit addressing Capacity: 152627.8 MB = 149.0 GB (312581808 x 512) Device 1: Model: HITACHI HTS723216L9SA60 Firm: FC2ZC50B Ser#: 091005FC1220NCHXGPLG Type: Hard Disk Supports 48-bit addressing Capacity: 152627.8 MB = 149.0 GB (312581808 x 512)
but it seems to work OK anyway.
As for the SD -- it detects OK, but seems to be unable to read more than a small amount of data from the SD card, as seen here:
Marvell>> mmc init SDHC found. Card desciption is: Manufacturer: 0x1e, OEM "AB" Product name: "USD ", revision 1.0 Serial number: 93331321 Manufacturing date: 8/2010 CRC: 0x00, b0 = 0 mmc1 is available Marvell>> ext2ls mmc 0 <DIR> 1024 . <DIR> 1024 .. <DIR> 12288 lost+found 1433576 vmlinuz-2.6.32-5-kir
at which point it hangs.
If I take the same SD card, put it in an SD-to-USB adaptor and then access it via the USB, I can boot the kernel, whereas it just locks up when accessed as an SD, which also seems to point at it not being able to do more than a small read via SD.
Any suggestions on how to diagnose what's going on here would be most welcome. I've tried pointing gdb at it, but it seems not to be doing breakpoints as I'd expect, so hints on how to get gdb working as well would be helpful (yes, I am rather new to this :-)
Cheers, Phil.

-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Philip Hands Sent: Wednesday, June 15, 2011 3:24 PM To: u-boot@lists.denx.de Subject: [U-Boot] OpenRD Ultimate SATA & SD
Hi,
Hi Phil Thanks for the feedback.
I've been trying to get a version of u-boot for OpenRD Ultimate that is willing to boot from all of NAND, USB, SD and SATA, and find that SD & SATA is still not possible with -rc1 as packaged for Debian (and it seems that nothing in the subsequent work in the master git would help, but if people tell me that it does, I'll give that a try).
I don't know which u-boot version you are referring? Once packed with board or one from u-boot.git.
For other one, u-boot.git (mainlined) SATA is functional, SD not yet supported.
Regards.. Prafulla . .

On Wed, 15 Jun 2011 22:10:30 -0700, Prafulla Wadaskar prafulla@marvell.com wrote:
-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Philip Hands Sent: Wednesday, June 15, 2011 3:24 PM To: u-boot@lists.denx.de Subject: [U-Boot] OpenRD Ultimate SATA & SD
Hi,
Hi Phil Thanks for the feedback.
I've been trying to get a version of u-boot for OpenRD Ultimate that is willing to boot from all of NAND, USB, SD and SATA, and find that SD & SATA is still not possible with -rc1 as packaged for Debian (and it seems that nothing in the subsequent work in the master git would help, but if people tell me that it does, I'll give that a try).
I don't know which u-boot version you are referring? Once packed with board or one from u-boot.git.
What I'm using is very close to this:
http://anonscm.debian.org/gitweb/?p=collab-maint/u-boot.git;a=summary
which is, as mentioned, the upstream (i.e. as available from denx.de) with debian patches added, the main effect of the patches being that one can then build them as a package -- this used to make more of a difference when we had a diff aimed at the OpenRD, but as you can see that was dropped by Clint on 2011-05-21 when it was merged into the upstream tree:
Drop openrd-client-and-ultimate.diff (merged).
I've since pulled from git://git.denx.de/u-boot.git, and rebased the Debian stuff, with my tiny patch added, as seen here:
the Debian build system applies the quilt patches (that are in ./debian/patches) so to see what actually gets built, see:
http://git.hands.com/?p=u-boot.git;a=shortlog;h=refs/heads/patch-queue/maste...
which has a commit for each of those patches, as applied, tacked on after the master branch.
Just to make sure it's not been fixed somehow, I've just recompiled that without the last "fil-sata-kludge.diff" patch applied (my IRC nick is 'fil' BTW) and now it has now reverted to telling me this:
=-=-=-=- Marvell>> ide reset
Reset IDE: ide_preinit failed =-=-=-=-
so that diff is required to make SATA work in the setup I have on the OpenRD Ultimate (internal SATA, no eSATA).
For other one, u-boot.git (mainlined) SATA is functional, SD not yet supported.
OK, so as I said, SATA only works for me if I disable the probing of the second SATA port in ide_preinit, as described here:
http://git.hands.com/?p=u-boot.git;a=commit;h=142f614593c4738fdd9c466d33eb41...
As for SD, well, it claims to initialise:
Marvell>> mmc init SDHC found. Card desciption is: Manufacturer: 0x1e, OEM "AB" Product name: "USD ", revision 1.0 Serial number: 93331321 Manufacturing date: 8/2010 CRC: 0x00, b0 = 0 mmc1 is available
and then in the past, doing any reading would make it lock up, but I notice that the version I just built actually lets me boot from SD, so it might be unsupported, but it works some of the time, at least.
I'll see if I can narrow down when it works for me, or not.
Cheers, Phil.

2011/6/16 Philip Hands phil@hands.com:
On Wed, 15 Jun 2011 22:10:30 -0700, Prafulla Wadaskar prafulla@marvell.com wrote:
-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Philip Hands Sent: Wednesday, June 15, 2011 3:24 PM To: u-boot@lists.denx.de Subject: [U-Boot] OpenRD Ultimate SATA & SD
Hi,
Hi Phil Thanks for the feedback.
I've been trying to get a version of u-boot for OpenRD Ultimate that is willing to boot from all of NAND, USB, SD and SATA, and find that SD & SATA is still not possible with -rc1 as packaged for Debian (and it seems that nothing in the subsequent work in the master git would help, but if people tell me that it does, I'll give that a try).
I don't know which u-boot version you are referring? Once packed with board or one from u-boot.git.
What I'm using is very close to this:
http://anonscm.debian.org/gitweb/?p=collab-maint/u-boot.git;a=summary
which is, as mentioned, the upstream (i.e. as available from denx.de) with debian patches added, the main effect of the patches being that one can then build them as a package -- this used to make more of a difference when we had a diff aimed at the OpenRD, but as you can see that was dropped by Clint on 2011-05-21 when it was merged into the upstream tree:
Drop openrd-client-and-ultimate.diff (merged).
I've since pulled from git://git.denx.de/u-boot.git, and rebased the Debian stuff, with my tiny patch added, as seen here:
the Debian build system applies the quilt patches (that are in ./debian/patches) so to see what actually gets built, see:
http://git.hands.com/?p=u-boot.git;a=shortlog;h=refs/heads/patch-queue/maste...
which has a commit for each of those patches, as applied, tacked on after the master branch.
Just to make sure it's not been fixed somehow, I've just recompiled that without the last "fil-sata-kludge.diff" patch applied (my IRC nick is 'fil' BTW) and now it has now reverted to telling me this:
=-=-=-=- Marvell>> ide reset
Reset IDE: ide_preinit failed
so that diff is required to make SATA work in the setup I have on the OpenRD Ultimate (internal SATA, no eSATA).
For other one, u-boot.git (mainlined) SATA is functional, SD not yet supported.
OK, so as I said, SATA only works for me if I disable the probing of the second SATA port in ide_preinit, as described here:
http://git.hands.com/?p=u-boot.git;a=commit;h=142f614593c4738fdd9c466d33eb41...
As for SD, well, it claims to initialise:
Marvell>> mmc init SDHC found. Card desciption is: Manufacturer: 0x1e, OEM "AB" Product name: "USD ", revision 1.0 Serial number: 93331321 Manufacturing date: 8/2010 CRC: 0x00, b0 = 0 mmc1 is available
and then in the past, doing any reading would make it lock up, but I notice that the version I just built actually lets me boot from SD, so it might be unsupported, but it works some of the time, at least.
I'll see if I can narrow down when it works for me, or not.
Cheers, Phil.
|)| Philip Hands [+44 (0)20 8530 9560] http://www.hands.com/ |-| HANDS.COM Ltd. http://www.uk.debian.org/ |(| 10 Onslow Gardens, South Woodford, London E18 1NE ENGLAND
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
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.
Best regards Alexey Ozhigov

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.
=-=-=-=-
Meanwhile, the SD has reverted to being broken, so that ext2ls just hangs in the read, by the looks of it :-/
Cheers, Phil.

-----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.
Copying to Albert and Michael the contributor for mvsata code.
Regards.. Prafulla . .

2011/6/17 Prafulla Wadaskar prafulla@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.

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,

2011/6/18 Albert ARIBAUD albert.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 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 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.)
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>>
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 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
... (repeated for about 1 min.)
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>>
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 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
... (repeated for about 1 min.)
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
... (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
... (repeated for about 1 min.)
in input data base for read is f1082100 Model: Firm: Ser#: Type: Hard Disk Capacity: not available Marvell>> ================================================================

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,

On Thu, 16 Jun 2011 21:03:01 +0100, Philip Hands phil@hands.com wrote:
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 :-(
OK, so now I have a new OpenRD, and the timeout is now making no difference -- this is perhaps because I've not written anything to the new internal SATA drive yet, so it's factory fresh (I'll see if things change once it's bootable).
So, at the moment I can get ide reset to work by ignoring the status of the second SATA in ide_preinit(), thus:
=-=-=-=- diff --git a/drivers/block/mvsata_ide.c b/drivers/block/mvsata_ide.c index 1be395f..20fc980 100644 --- a/drivers/block/mvsata_ide.c +++ b/drivers/block/mvsata_ide.c @@ -164,8 +164,8 @@ int ide_preinit(void) status = mvsata_ide_initialize_port( (struct mvsata_port_registers *) (CONFIG_SYS_ATA_BASE_ADDR + CONFIG_SYS_ATA_IDE1_OFFSET)); - if (status) - return status; +/* if (status) + return status; */ #endif /* return success if all ports initializations succeeded */ return MVSATA_STATUS_OK; =-=-=-=-
It's possible that the second check would work if I had an eSATA drive plugged in -- I will attempt to borrow one to test this theory.
It seems fair enough to me that one should be allowed to run ide reset and have it succeed, even if one of the interfaces fails, since one wants the controller/disk that exists to get initialised, even if the other one is absent, but perhaps I'm missing the point somehow.
Of course, the hack that I'm using probably doesn't help in the case where one only has an eSATA drive plugged in. I suppose one could store the return from each mvsata_ide_initialize_port call, and return success if any of them succeeded, or the status of the first one otherwise, say.
Cheers, Phil.
participants (4)
-
Albert ARIBAUD
-
Alexei Ozhigov
-
Philip Hands
-
Prafulla Wadaskar