epia800

Steve Gehlbach steve at nexpath.com
Thu Sep 25 11:47:00 CEST 2003


Eric W. Biederman wrote:

>>I was going to force it to use ide_read_sector_chs but did not have time.
>>
>>I switched to using my CF drive and it worked fine, so I don't think it was
>>cockpit trouble.
> 
> 
> Right.  My only other guess is that some of the lba48 support my be interacting
> in a strange way and causing problems.  We always write the lba48 high
> registers but we don't set them in the lba case.  It should not cause a problem.
> 
> But drives are diverse enough we might find some strange bugs.
> 
> At least we have not yet found a drive that we have spin up problems with yet.

I did some more testing.  Forcing CHS mode did not help.  I looked at 
the older LB code, and started to cut and paste some of its init code 
into the new code just as an experiment.  So far no help.

I noticed the busy/wait loop in the original LB code looks at the error 
register.  I also notice in the new code the pio_data_in routine does 
not check the error bit, matter of fact, the error bit is never checked 
anywhere AFAICT.  Interestingly, if you check the error bit in the 
status register (bit 0), it is set after the pio_set_registers() command 
for my 1.2G WD (in pio_data_in for READ SECTOR(S) ), but not for another 
drive that works (7.5G WD).  I looked at the ATA-2 and ATA-5 specs and 
the error stuff seems to have changed a little.  I have not had a chance 
to put in code to see just where the error bit gets set, but it seems 
that once it is set you cannot go on without clearing it or something.

(The original LB code looks at the error register without checking the 
error bit in the status register.  The later ATA specs seem to indicate 
the error register bits are not valid unless the error bit is set in the 
status register.)

-Steve




More information about the coreboot mailing list