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: