Re: sym/ncr53c8xx phase error: Some progress

Gerard Roudier (groudier@club-internet.fr)
Fri, 7 May 1999 22:46:18 +0200 (MET DST)


On Fri, 7 May 1999, Shaw Carruthers wrote:

> Looking at the source code of ncr53c8xx.c at line 7525 I see:
>
> #if 0
> case 3: /* STATUS phase */
> nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
> break;
> #endif
> case 6: /* MSG OUT phase */
> np->scripth->nxtdsp_go_on[0] = cpu_to_scr(dsp + 8);
> if (dsp == NCB_SCRIPT_PHYS (np, send_ident)) {
> cp->host_status = HS_BUSY;
> nxtdsp = NCB_SCRIPTH_PHYS (np, clratn_go_on);
> }
> else if (dsp == NCB_SCRIPTH_PHYS (np, send_wdtr) ||
> dsp == NCB_SCRIPTH_PHYS (np, send_sdtr)) {
> nxtdsp = NCB_SCRIPTH_PHYS (np, nego_bad_phase);
> }
> break;
> #if 0
> case 7: /* MSG IN phase */
> nxtdsp = NCB_SCRIPT_PHYS (np, clrack);
> break;
> #endif
>
>
> So code to handle these errors seems to be disabled. I tried enabling it
> but I still got the problem.

No, it is not.

The PHASE number is the _interrupted_ phase, so you should have read:

case 2: /* COMMAND phase */
nxtdsp = NCB_SCRIPT_PHYS (np, dispatch);
break;

If you want the driver to handle your problem as an unrecoverable error
and then reset the SCSI BUS, you just have to #if 0 'case 2'.

The driver resets if STATUS phase is interrupted (#ifed 0) because the
status is 1 byte long and this should only happen on SCSI parity error and
so should never happen since this error is handled separately.

For the MSG IN phase (also #ifded 0), this also should never happen
excepted on SCSI parity error, since the actual size of a message can be
guessed by the driver, based on the first message byte value and on the
message size transmitted by the target when the message is EXTENDED type.

So no phase mismatch without SCSI parity error should occur in
either STATUS phase or MESSAGE IN phase, and then resetting the
BUS if such situations is the better thing to do.

Gérard.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/