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

_______________________________________________
Linuxbios mailing list
[EMAIL PROTECTED]
http://www.clustermatic.org/mailman/listinfo/linuxbios

Reply via email to