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