Problem with ATA driver on pc386

Angelo Fraietta afraiett at bigpond.net.au
Tue Jul 6 23:54:20 UTC 2004



Eugeny S. Mints wrote:

> Hi Angelo!
> 
> Ok, let start from the beginning. I developed the the code based on ATA 
> spec revision mentioned in the header in ata.c file. The revision is 
> quite old.
> 
> First command executed for a IDE controller is DEVICE DIAGNOSTIC 
> command. Return codes other then 0x81 or 0x01 are vendor specific and 
> probably are not handled properly by the current ata.c driver. There is 
> no special return code for "master (device 0) not present". THere is 
> "device 0 failed" only. One potential is that your IDE controller uses 
> some vendor specific code for "master not present". Other is that your 
> IDE controller cann't handle "no master" case and doesn't set BSY bit 
> properly and DIAGNOSTIC command never terminates.
> 
> I would like to help you with the issue but I need more details on the 
> failure. Could you please check first that:
> 
I changed the conditionals on the 2 do - while loops to include

ata_process_request_on_init_phase(rtems_device_minor_number  ctrl_minor,
                                   ata_req_t                 *areq)
{
     unsigned16         byte;/* emphasize that only 8 low bits is 
meaningful */
	<snip>
     do {
         ide_controller_read_register(ctrl_minor, IDE_REGISTER_STATUS, 
&byte);
				printk("Start ide_controller_read_register 1 Byte = %x\r\n", byte);
     } while (((byte & IDE_REGISTER_STATUS_BSY) ||
              (!(byte & IDE_REGISTER_STATUS_DRDY))) && !(byte & 
IDE_REGISTER_STATUS_DRDY));
	<snip>
     do {
         ide_controller_read_register(ctrl_minor, IDE_REGISTER_STATUS, 
&byte);
				printk("Start ide_controller_read_register 2 Byte = %x\r\n", byte);
     } while ((byte & IDE_REGISTER_STATUS_BSY)&& !(byte & 
IDE_REGISTER_STATUS_DRDY));

This stopped from freezing. This however, was on the DIMMPC with the On 
Board IDE enabled. When I plugged the PC104 in, the first one looped 
indefinately with a byte value of 0. I disabled the primary IDE port in 
the bios, which gave me the result as per the DIMMPC - Byte returns zero.

In performing theses tests, I beliee that the secondary IDE port is not 
tested. Am I correct? If so, what would I need to do to test and mount it?

-- 
Angelo Fraietta

PO Box 859
Hamilton NSW 2303

Home Page


http://www.users.bigpond.com/angelo_f/

There are those who seek knowledge for the sake of knowledge - that is 
CURIOSITY
There are those who seek knowledge to be known by others - that is VANITY
There are those who seek knowledge in order to serve - that is LOVE
     Bernard of Clairvaux (1090 - 1153)





More information about the users mailing list