WD Caviar problem

SONE Takeshi ts1 at tsn.or.jp
Tue Oct 28 12:26:01 CET 2003


On Tue, Oct 28, 2003 at 11:14:24AM -0600, Richard Smith wrote:
> 
> >I thought ERROR bit checking (reading status port) acts like a delay,
> >so I added a 400ns delay after pio_set_registers of the new driver.
> >The new driver finally worked.
> >
> >It works when once Linux is booted then reboot into FILO.
> >
> >Maybe I have to re-enable some commands in the initialization procedure.

I got it work just now, both for cold boot and warm boot cases.
The missing command was INITIALIZE PARAMETERS.
I wasted many hours to realize that I had done it wrong. :)

> >But I've made too many modifications to the new driver, I'm not sure
> >which is really needed.

This work is to be done.
I'll release 0.4.1 (bugfix-only release) when it's done.

>  The fact that you can boot linux and then reboot into FILO and it 
> works really suggests to me that you are working with a some sort of 
> flaky IDE interface.  So don't expect anything to be logical.  I've 
> worked with lots of embedded type devices that exhibit this symptom. 
> They just take a while to come out of a cold boot or even from a warm 
> reset.

I suspected everything and did whatever I could do.
In this case, after all, it was me that was flaky, not the drive or IF.

One thing I'll have to examine is the delay I had to insert between
issuing command and reading status.
It might be requirement of ATA spec. 

> Hard drives have a special problem in that they must calibrate for both 
> mechanical head drift and ambient temperature before they access the 
> disk _and_ its got to be pretty precise.  I'm always amazed at the 
> precision required by a HD.

> 
> What happens if you just do a 5 second delay on cold boot before you 
> access the drive?  My guess is that it will work.  If so then you just 
> need to find out what the minimum delay is before you can access the drive.

Did it. I access to the drive from the command prompt, so I can make
any delay before hitting Enter key. Once I waited for the drive to become
quiet completely, but it still failed, so I decided some initialization
was missing.

> You might lark onto a special init sequence that works but I suspect it 
> will be drive specific.  Your best bet to come up with a universial 
> solution is probally a user configurable delay for drives that don't 
> handle the BSY flag properly.

Eric had already added the delay option (#ifdef) to (the ancestor of)
the driver, though it is hardcoded 31 sec (following ATA spec).

-- 
Takeshi



More information about the coreboot mailing list