Very interesting. The controller inside the disk is a Sandforce SF-1200. The controller on the E350M1 is an AMD SB800.
Quoting Kevin O'Connor kevin@koconnor.net:
On Fri, Jun 03, 2011 at 11:55:47PM -0500, mbuschman@lucidmachines.com wrote:
Thanks for the reply. I've spent the last week getting Coreboot under my control with help from CareBear. I'm running a patched Coreboot (latest, as of 6/3/11), and SeaBIOS master (as of 6/3/11).
Coreboot is presenting the drives as IDE.
I've attached the logs of a successful and an unsuccessful boot, as well as my SeaBIOS configuration - the debug level has been set to 8
The key part of the log is:
bad: |1efd0000| powerup iobase=1420 st=7f |1efd0000| powerup iobase=1420 st=7f |1efd0000| ata_detect ata0-0: sc=ff sn=ff dh=ff
good: |1efd0000| powerup iobase=1420 st=50 |1efd0000| powerup iobase=1420 st=50 |1efd0000| ata_detect ata0-0: sc=55 sn=aa dh=a0
The drive/controller is stating that the drive is not busy, but then the drive does not respond to register reads/writes. Thus SeaBIOS concludes that there is no drive present. Under normal circumstances, the drive will report busy until it is ready to respond to register accesses.
-- debug output from Coreboot has been disabled, as this increases the overall boot time substantially.
Can the failures be correlated to boot time? For example, if you enable/disable debugging in coreboot+seabios, can you get it to reliably fail or succeed?
Also, what time of controller chip is this on?
Another test - if you boot from another medium, does Linux detect your drive even when SeaBIOS doesn't?
I'm not sure what can be done to handle a drive/controller that states it is ready but is not. I don't know how to distinguish that from a drive that isn't present.
-Kevin