Subject: port-sparc64/17977: FAS on ultra1 doesn't recognize more than 8 targets
To: None <gnats-bugs@gnats.netbsd.org>
From: None <swchung7@hotmail.com>
List: netbsd-bugs
Date: 08/18/2002 10:11:37
>Number: 17977
>Category: port-sparc64
>Synopsis: FAS on ultra1 doesn't recognize more than 8 targets
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: port-sparc64-maintainer
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat Aug 17 18:17:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Sung-Won Chung
>Release: NetBSD 1.6_RC1 15 Aug, 2002
>Organization:
ECE, Pusan National University
>Environment:
System: NetBSD ultra1 1.6_RC1 NetBSD 1.6_RC1 (GENERIC) #0: Thu Aug 15 12:34:51 UTC 2002 autobuild@cs20.apochromatic.org:/autobuilder/build/sparc64/OBJ/autobuilder/build/src/sys/arch/sparc64/compile/GENERIC sparc64
Architecture: sparc64
Machine: sparc64
>Description:
I attached external SCSI devices with SCSI ID greater than 8.
However, they couldn't be probed.
FAS SCSI device driver tried to probe only 8 targets.
Here is a copy of dmesg.
esp0 at sbus0 slot 14 offset 0x8800000 vector 20 ipl 3: dma rev fas
: FAS366/HME, 40MHz, SCSI ID 7
scsibus0 at esp0: 8 targets, 8 luns per target
>How-To-Repeat:
Boot after attaching external SCSI devices
with SCSI ID greater than 8.
>Fix:
The following patch solved this problem on Ultra 1/170E.
Index: ncr53c9xvar.h
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/ic/ncr53c9xvar.h,v
retrieving revision 1.35
diff -r1.35 ncr53c9xvar.h
73c73
< #define NCR_NTARG 8
---
> #define NCR_NTARG 16
Index: ncr53c9x.c
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/ic/ncr53c9x.c,v
retrieving revision 1.94
diff -r1.94 ncr53c9x.c
280c280,283
< chan->chan_ntargets = 8; /* XXX fas has 16(not supported) */
---
> if (sc->sc_rev == NCR_VARIANT_FAS366)
> chan->chan_ntargets = 16; /* FAS366 supports 16 targets */
> else
> chan->chan_ntargets = 8;
430a434
> struct scsipi_channel *chan = &sc->sc_channel;
448c452
< for (r = 0; r < NCR_NTARG; r++) {
---
> for (r = 0; r < chan->chan_ntargets; r++) {
460c464
< for (r = 0; r < 8; r++) {
---
> for (r = 0; r < chan->chan_ntargets; r++) {
491c495
< for (r = 0; r < 8; r++) {
---
> for (r = 0; r < chan->chan_ntargets; r++) {
495,498c499,510
< ti->flags = ((sc->sc_minsync && !(sc->sc_cfflags & (1<<(r+8))))
< ? 0 : T_SYNCHOFF) |
< ((sc->sc_cfflags & (1<<r)) ? T_RSELECTOFF : 0) |
< T_NEED_TO_RESET;
---
> if ((sc->sc_rev == NCR_VARIANT_FAS366) && (r >= 8))
> ti->flags =
> ((sc->sc_minsync && !(sc->sc_cfflags & (1<<(r+16))))
> ? 0 : T_SYNCHOFF) |
> ((sc->sc_cfflags & (1<<(r+8))) ? T_RSELECTOFF : 0) |
> T_NEED_TO_RESET;
> else
> ti->flags =
> ((sc->sc_minsync && !(sc->sc_cfflags & (1<<(r+8))))
> ? 0 : T_SYNCHOFF) |
> ((sc->sc_cfflags & (1<<r)) ? T_RSELECTOFF : 0) |
> T_NEED_TO_RESET;
2926a2939
> struct scsipi_channel *chan = &sc->sc_channel;
2932c2945
< for (t = 0; t < NCR_NTARG; t++) {
---
> for (t = 0; t < chan->chan_ntargets; t++) {
>Release-Note:
>Audit-Trail:
>Unformatted: