[3296] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Re: scsi : aborting command due to timeout

daemon@ATHENA.MIT.EDU (Umesh Soni)
Wed Feb 11 21:22:20 1998

To: linux-scsi@vger.rutgers.edu
Date: 	Wed, 11 Feb 1998 20:01:32 +0000
From: Umesh Soni <U.Soni@cs.ucl.ac.uk>



 >
 >> I am getting lots of these errors when running 4 consecutive bonnies
 >> (two bonnies on each hd -on seperate partitions) on my system,
 >> occasionally the system will completely hang when subjected to this
 >> torture test.
 >
 >Well finally someone else has the same problem. Mine however is timeouts
 >during a tape backup and not hard disk time outs. My hard drives seem to
 >be fine. No one has yet to answer my question however:
 >


I have tried to pin this issue down a little. I've looked at a another
similar vintage Gigabyte GA-586DX dual pentium motherboard -exactly the
same thing ie. aic7xxx driver cannot detect a change in the high byte
scsi termination (via the motherboard jumper).

Now, unlesss the GA586DX/AIC7880 combination is broken, this looks
like a driver issue. 

Looking into Doug Ledford's patched 5.0.5 aic7xxx driver I have made
the following rather crude changes to force the AIC7880's high byte
termination ON ... (I am of course assuming that the jumper is a
mechanism for informing the driver to turn on high byte termination
and that it does not in itself directly turn termination no/off)

Can someone in the KNOW tell me if this is correct ?  If so, perhaps
the driver maintainers can look into this issue and provide a more
elegant solution (ie have the driver correctly identify the state of
the mobo jumper)  :-)




/*+F*************************************************************************
 * Function:
 *   configure_termination
 *
 * Description:
 *   Configures the termination settings on PCI adapters that have
 *   SEEPROMs available.
 *-F*************************************************************************/


added...

  int aic7xxx_force_highterm;



changed... (with debugging printks to see what is going on)

    else
    {

      printk(KERN_INFO "aic7xxx: Setting Termination.\n");

      if (adapter_control & CFSTERM)
      {
      printk(KERN_INFO "aic7xxx: Setting low terminator.\n");
        *sxfrctl1 |= STPWEN;
      }
      outb(SEEMS | SEECS, p->base + SEECTL);
      /*
       * Configure high byte termination.
       */
      if (adapter_control & CFWSTERM)
      {
        printk(KERN_INFO "aic7xxx: Setting high terminator ON.\n");
        write_brdctl(p, BRDDAT6);
      }
      else
      {
        printk(KERN_INFO "aic7xxx: Setting high terminator OFF.\n");
        write_brdctl(p, 0);
      }

      if (TRUE)
      {
          printk(KERN_INFO "aic7xxx: Forcing high terminator ON.\n");
          write_brdctl(p, BRDDAT6);
          aic7xxx_force_highterm=1;
      }
      else
      {
          printk(KERN_INFO "aic7xxx: Forcing high terminator OFF.\n");
          write_brdctl(p, 0);
          aic7xxx_force_highterm=0;          
      }

      if (aic7xxx_verbose)
      {
        printk(KERN_INFO "aic7xxx: Termination (Low %s, High %s)\n",
               (adapter_control & CFSTERM) ? "ON" : "OFF",
               /*
               (adapter_control & CFWSTERM) ? "ON" : "OFF");
               */
               (aic7xxx_force_highterm) ? "ON" : "OFF");
      }
    }


Cheers.

Umesh Soni.


home help back first fref pref prev next nref lref last post