Subject: Re: E250 support?
To: None <port-sparc64@netbsd.org>
From: Mark Blackman <mark.blackman@netscalibur.co.uk>
List: port-sparc64
Date: 02/12/2001 14:41:22
While booting finally succeeded, I've got a feeling some
interrrupts have gone astray.

I can't get NFS mounts to work (the ofwboot-controlled nfs works), but
the kernel based nfs seems to never acknowledge the bootparam responses.

Then after installing via Solaris, its take literally hours to finish
booting up (in NetBSD) with loads of "about to be processed" and 
".. in reset list" messages pertaining to the SCSI drives.

To me, this smacks of interrupts never being acknowledged or something
along those lines.

- Mark Blackman

> two thumbs up! Now I just have to set up the NFS partition.
> 
> I've got full-on debugging enabled and here's the output.
> ********
> {1} ok boot net netbsd -d
> Resetting ...
> 
> 
> Sun (TM) Enterprise 250 (2 X UltraSPARC-II 400MHz), Keyboard Present
> OpenBoot 3.16, 1024 MB memory installed, Serial #15128240.
> Ethernet address 8:0:20:e6:d6:b0, Host ID: 80e6d6b0.
> 
> 
> 
> Rebooting with command: boot net netbsd -d
> Boot device: /pci@1f,4000/network@1,1  File and args: netbsd -d
> 43800 >> NetBSD/sparc64 OpenFirmware Boot, Revision
> >> (eeh@nonplus.netbsd.org, Sat Jan 13 09:12:31 PST 2001)
> Using BOOTPARAMS protocol: ip address: 192.168.1.235, hostname: sunbox.ch.foo
> bar.net
> root addr=192.168.1.150 path=/tmp/export/sunbox/root
> main: Calling loadfile(fd, /pci@1f,4000/network@1,1/netbsd -d)
> loadfile: reading header
> elf64_exec: Booting /pci@1f,4000/network@1,1/netbsd
> 3301574@0x1000000+140336@0x1400000+538360@0x1422430
> symbols @ 0xfefa2300 74+248592+127951 start=0x1000000
> chain: calling OF_chain(800000, ee48, 1000000, fff89a80, 18)
> OF_chain: prom returned!
> Calling entry(0, 0xfff89a80, 18, f007601c, f007601c)
> [ using 377392 bytes of netbsd ELF symbol table ]
> prom_get_msgbuf: Cannot recover msgbuf on E250
> prom_get_msgbuf: allocated new buf at 00000000
> prom_get_msgbuf: claiming new buf at 00000000
> pmap_bootstrap: could not claim physical dseg extention at 3fca6000 size 35a0
> 00
> Setting DTLB entry 00000000 01000000 data e0000000 3f800076
> Setting DTLB entry 00000000 01400000 data e0000000 3f400076
> Setting ITLB entry 00000000 01000000 data e0000000 3f400076
> Setting TSB pointer 00000000 014b8000
> consinit()
> setting up stdin
> stdin instance = fff69760
> setting up stdout
> stdout instance = fff69d00
> stdout package = f006eca8
> console is unknown
> Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001
>     The NetBSD Foundation, Inc.  All rights reserved.
> Copyright (c) 1982, 1986, 1989, 1991, 1993
>     The Regents of the University of California.  All rights reserved.
> 
> NetBSD 1.5R (GENERIC) #24: Mon Feb 12 05:31:02 EST 2001
>     mrg@everglades.eterna.com.au:/orb/j/src/sys/arch/sparc64/compile/GENERIC
> total memory = 1024 MB
> avail memory = 942 MB
> using 6566 buffers containing 52528 KB of memory
> bootpath: /pci@1f,4000/network@1,1
> kdb breakpoint at 1266090
> 1 tt=1ff tstate=0 tpc=0x0 tnpc=0x0
> Stopped in pid 0 (swapper) at   cpu_Debugger+0x4:       nop
> db> x/x sparc_pci_debug
> sparc_pci_debug:        0
> db> w/l sparc_pci_debug=0x000000ff
> Nothing written.
> db> w/l sparc_pci_debug 0x000000ff
> sparc_pci_debug                  0 =       0xff
> db> w/l psycho_debug 0x000000ff
> psycho_debug                     0 =       0xff
> db> continue
> mainbus0 (root): SUNW,Ultra-250
> cpu0 at mainbus0: SUNW,UltraSPARC-II @ 400 MHz, version 0 FPU
> cpu0: physical 4K instruction (32 b/l), 4K data (32 b/l), 2048K external (64 
> b/l)
> psycho0 at mainbus0 addr 0xfffbc000
> psycho: impl 0, version 4: psycho debug: got `ranges' for node f006bf9c: 4 en
> tries
> psycho debug: got `bus-range' for node f006bf9c: 0 - 0
> bus range 0 to 0; PCI bus 0psycho debug: got `interupt-map' for node f006bf9c
> psycho debug: got `interrupt-map-mask' for node f006bf9c
> 
> DVMA map: fe002000 to ffffe000
> pci0 at psycho0
> pci_attach_hook:
>         node f006e48c name `ebus' devtype `':pci_conf_write: tag 0; reg 4; da
> ta 7; asi = 1d; readaddr = 1fe
> 01000004 (offset = 4)
> 
>         node f0084cf4 name `network' devtype `network': got interrupts got as
> signed-addresses got reg; bus
> 0 dev 1 fn 1pci_conf_read: tag 900; reg 3c; asi = 1d; readaddr = 1fe0100093c 
> (offset = 93c) ... returning 0
> 50a0000
>             ; read 50a0000 from intreg
>             ; gonna write 50a0021 to intreg
> pci_conf_write: tag 900; reg 3c; data 50a0021; asi = 1d; readaddr = 1fe010009
> 3c (offset = 93c)
>             ; reread 50a0021 from intreg
> pci_conf_write: tag 900; reg 4; data 7; asi = 1d; readaddr = 1fe01000904 (off
> set = 904)
> 
>         node f008cd00 name `scsi' devtype `scsi-2': got interrupts got assign
> ed-addresses got reg; bus 0 de
> v 3 fn 0pci_conf_read: tag 1800; reg 3c; asi = 1d; readaddr = 1fe0100183c (of
> fset = 183c) ... returning 401
> 10100
>             ; read 40110100 from intreg
>             ; gonna write 40110120 to intreg
> pci_conf_write: tag 1800; reg 3c; data 40110120; asi = 1d; readaddr = 1fe0100
> 183c (offset = 183c)
>             ; reread 40110120 from intreg
> pci_conf_write: tag 1800; reg 4; data 7; asi = 1d; readaddr = 1fe01001804 (of
> fset = 1804)
> 
>         node f0093f1c name `scsi' devtype `scsi-2': got interrupts got assign
> ed-addresses got reg; bus 0 de
> v 3 fn 1pci_conf_read: tag 1900; reg 3c; asi = 1d; readaddr = 1fe0100193c (of
> fset = 193c) ... returning 401
> 10200
>             ; read 40110200 from intreg
>             ; gonna write 40110226 to intreg
> pci_conf_write: tag 1900; reg 3c; data 40110226; asi = 1d; readaddr = 1fe0100
> 193c (offset = 193c)
>             ; reread 40110226 from intreg
> pci_conf_write: tag 1900; reg 4; data 7; asi = 1d; readaddr = 1fe01001904 (of
> fset = 1904)
> 
> 
> pci0: i/o space, memory space enabled
> pci_conf_read: tag 800; reg 0; asi = 1d; readaddr = 1fe01000800 (offset = 800
> ) ... returning 1000108e
> pci_conf_read: tag 800; reg 4; asi = 1d; readaddr = 1fe01000804 (offset = 804
> ) ... returning 02800146
> pci_conf_read: tag 800; reg 8; asi = 1d; readaddr = 1fe01000808 (offset = 808
> ) ... returning 06800001
> pci_conf_read: tag 800; reg 3c; asi = 1d; readaddr = 1fe0100083c (offset = 83
> c) ... returning 190a0000
> ebus0 at pci0 dev 1 function 0
> ebus0: Sun Microsystems PCIO Ebus2, revision 0x01
> auxio0 at ebus0 addr 726000-726003 addr 728000-728003 addr 72a000-72a003 addr
>  72c000-72c003 addr 72f000-72f
> 003
> power at ebus0 addr 724000-724003 not configured
> SUNW,pll at ebus0 addr 504000-504002 not configured
> sc at ebus0 addr 500000-500007 not configured
> se at ebus0 addr 400000-40007f ipl 43 not configured
> se at ebus0 addr 200000-20007f ipl 35 not configured
> com0 at ebus0 addr 3083f8-3083ff ipl 41_psycho_bus_map: type 4 off 713083f8 s
> z 8 flags 2 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 713083f8 paddr 1fff13083f8
> 
> psycho_intr_establish: ihandle 29 ino 29
> psycho: intr 29: 0x0
> Hunting for IRQ...
> - turning on OBIO intr 9; read intrmap = 00000000000007e9; addr of intrmapptr
>  = 0xfffad048; writing intrmap
>  = 00000000800007e9
> ; reread intrmap = 00000000800007e9; installing handler 0x102bed4 arg 0x2729a
> 00 with ino 41 pil 12
> : ns16550a, working fifo
> kbd0 at com0
> com1 at ebus0 addr 3062f8-3062ff ipl 42_psycho_bus_map: type 4 off 713062f8 s
> z 8 flags 2 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 713062f8 paddr 1fff13062f8
> 
> psycho_intr_establish: ihandle 2a ino 2a
> psycho: intr 2a: 0x0
> Hunting for IRQ...
> - turning on OBIO intr 10; read intrmap = 00000000000007ea; addr of intrmappt
> r = 0xfffad050; writing intrma
> p = 00000000800007ea
> ; reread intrmap = 00000000800007ea; installing handler 0x102bed4 arg 0x27298
> 00 with ino 42 pil 12
> : ns16550a, working fifo
> ms0 at com1
> lpt0 at ebus0 addr 3043bc-3043cb addr 300398-300399 addr 700000-70000f ipl 34
> _psycho_bus_map: type 4 off 71
> 3043bc sz 10 flags 2 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 713043bc paddr 1fff13043bc
> 
> psycho_intr_establish: ihandle 22 ino 22
> psycho: intr 22: 0x0
> Hunting for IRQ...
> - turning on OBIO intr 2; read intrmap = 00000000000007e2; addr of intrmapptr
>  = 0xfffad010; writing intrmap
>  = 00000000800007e2
> ; reread intrmap = 00000000800007e2; installing handler 0x1236da8 arg 0x26e59
> 00 with ino 34 pil 12
> 
> clock0 at ebus0 addr 0-1fff_psycho_bus_map: type 4 off 71000000 sz 2000 flags
>  2 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 71000000 paddr 1fff1000000
> : mk48t59: hostid 80e6d6b0
> flashprom at ebus0 addr 0-fffff addr 0-fffff not configured
> SUNW,envctrltwo at ebus0 addr 600000-600003 ipl 40 ipl 37 not configured
> pci_conf_read: tag 900; reg 0; asi = 1d; readaddr = 1fe01000900 (offset = 900
> ) ... returning 1001108e
> pci_conf_read: tag 900; reg 4; asi = 1d; readaddr = 1fe01000904 (offset = 904
> ) ... returning 02800006
> pci_conf_read: tag 900; reg 8; asi = 1d; readaddr = 1fe01000908 (offset = 908
> ) ... returning 02000001
> pci_conf_read: tag 900; reg 3c; asi = 1d; readaddr = 1fe0100093c (offset = 93
> c) ... returning 050a0021
> hme1 at pci0 dev 1 function 1pci_conf_read: tag 900; reg 4; asi = 1d; readadd
> r = 1fe01000904 (offset = 904)
>  ... returning 02800006
> pci_conf_write: tag 900; reg 4; data 2800006; asi = 1d; readaddr = 1fe0100090
> 4 (offset = 904)
> pci_conf_read: tag 900; reg 10; asi = 1d; readaddr = 1fe01000910 (offset = 91
> 0) ... returning 00008000
> pci_conf_write: tag 900; reg 10; data ffffffff; asi = 1d; readaddr = 1fe01000
> 910 (offset = 910)
> pci_conf_read: tag 900; reg 10; asi = 1d; readaddr = 1fe01000910 (offset = 91
> 0) ... returning ffff8000
> pci_conf_write: tag 900; reg 10; data 8000; asi = 1d; readaddr = 1fe01000910 
> (offset = 910)
> _psycho_bus_map: type 4 off 8000 sz 8000 flags 0 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 8000 paddr 1ff80008000
> : address 08:00:20:e6:d6:b0
> nsphy0 at hme1 phy 1: DP83840 10/100 media interface, rev. 1
> nsphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
> pci_intr_map: tag 900; pin 0; line 33; handle = 33; returning 0
> pci_intr_string: ih 33; returning vector 33
> pci_intr_establish: ih 33; level 6
> psycho_intr_establish: ihandle 21 ino 21
> psycho: intr 21: 0x0
> Hunting for IRQ...
> - turning on OBIO intr 1; read intrmap = 00000000000007e1; addr of intrmapptr
>  = 0xfffad008; writing intrmap
>  = 00000000800007e1
> ; reread intrmap = 00000000800007e1; installing handler 0x1022b58 arg 0x272f8
> 00 with ino 33 pil 6
> ; returning handle 0x2727b00
> hme1: using vector 33 for interrupt
> pci_conf_read: tag 1800; reg 0; asi = 1d; readaddr = 1fe01001800 (offset = 18
> 00) ... returning 000f1000
> pci_conf_read: tag 1800; reg 4; asi = 1d; readaddr = 1fe01001804 (offset = 18
> 04) ... returning 02000007
> pci_conf_read: tag 1800; reg 8; asi = 1d; readaddr = 1fe01001808 (offset = 18
> 08) ... returning 01000014
> pci_conf_read: tag 1800; reg 3c; asi = 1d; readaddr = 1fe0100183c (offset = 1
> 83c) ... returning 40110120
> siop0 at pci0 dev 3 function 0: Symbios Logic 53c875 (ultra-wide scsi)
> pci_conf_read: tag 1800; reg 14; asi = 1d; readaddr = 1fe01001814 (offset = 1
> 814) ... returning 00010000
> pci_conf_read: tag 1800; reg 14; asi = 1d; readaddr = 1fe01001814 (offset = 1
> 814) ... returning 00010000
> pci_conf_write: tag 1800; reg 14; data ffffffff; asi = 1d; readaddr = 1fe0100
> 1814 (offset = 1814)
> pci_conf_read: tag 1800; reg 14; asi = 1d; readaddr = 1fe01001814 (offset = 1
> 814) ... returning ffffff00
> pci_conf_write: tag 1800; reg 14; data 10000; asi = 1d; readaddr = 1fe0100181
> 4 (offset = 1814)
> _psycho_bus_map: type 4 off 10000 sz 100 flags 0 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 10000 paddr 1ff80010000
> pci_conf_read: tag 1800; reg 10; asi = 1d; readaddr = 1fe01001810 (offset = 1
> 810) ... returning 00000401
> pci_conf_write: tag 1800; reg 10; data ffffffff; asi = 1d; readaddr = 1fe0100
> 1810 (offset = 1810)
> pci_conf_read: tag 1800; reg 10; asi = 1d; readaddr = 1fe01001810 (offset = 1
> 810) ... returning ffffff01
> pci_conf_write: tag 1800; reg 10; data 401; asi = 1d; readaddr = 1fe01001810 
> (offset = 1810)
> _psycho_bus_map: type 3 off 400 sz 100 flags 0 va 0x0 cspace 1
> _psycho_bus_map: mapping paddr space 1 offset 400 paddr 1fe02010400
> pci_conf_read: tag 1800; reg 18; asi = 1d; readaddr = 1fe01001818 (offset = 1
> 818) ... returning 00012000
> pci_conf_write: tag 1800; reg 18; data ffffffff; asi = 1d; readaddr = 1fe0100
> 1818 (offset = 1818)
> pci_conf_read: tag 1800; reg 18; asi = 1d; readaddr = 1fe01001818 (offset = 1
> 818) ... returning fffff000
> pci_conf_write: tag 1800; reg 18; data 12000; asi = 1d; readaddr = 1fe0100181
> 8 (offset = 1818)
> _psycho_bus_map: type 4 off 12000 sz 1000 flags 0 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 12000 paddr 1ff80012000
> siop0: using on-board RAM
> pci_intr_map: tag 1800; pin 1; line 32; handle = 32; returning 0
> pci_intr_string: ih 32; returning vector 32
> pci_intr_establish: ih 32; level 5
> psycho_intr_establish: ihandle 20 ino 20
> psycho: intr 20: 0x0
> Hunting for IRQ...
> - turning on OBIO intr 0; read intrmap = 00000000000007e0; addr of intrmapptr
>  = 0xfffad000; writing intrmap
>  = 00000000800007e0
> ; reread intrmap = 00000000800007e0; installing handler 0x101a89c arg 0x272f4
> 00 with ino 32 pil 5
> ; returning handle 0x2727ac0
> siop0: interrupting at vector 32
> scsibus0 at siop0: 16 targets, 8 luns per target
> pci_conf_read: tag 1900; reg 0; asi = 1d; readaddr = 1fe01001900 (offset = 19
> 00) ... returning 000f1000
> pci_conf_read: tag 1900; reg 4; asi = 1d; readaddr = 1fe01001904 (offset = 19
> 04) ... returning 02000007
> pci_conf_read: tag 1900; reg 8; asi = 1d; readaddr = 1fe01001908 (offset = 19
> 08) ... returning 01000014
> pci_conf_read: tag 1900; reg 3c; asi = 1d; readaddr = 1fe0100193c (offset = 1
> 93c) ... returning 40110226
> siop1 at pci0 dev 3 function 1: Symbios Logic 53c875 (ultra-wide scsi)
> pci_conf_read: tag 1900; reg 14; asi = 1d; readaddr = 1fe01001914 (offset = 1
> 914) ... returning 00014000
> pci_conf_read: tag 1900; reg 14; asi = 1d; readaddr = 1fe01001914 (offset = 1
> 914) ... returning 00014000
> pci_conf_write: tag 1900; reg 14; data ffffffff; asi = 1d; readaddr = 1fe0100
> 1914 (offset = 1914)
> pci_conf_read: tag 1900; reg 14; asi = 1d; readaddr = 1fe01001914 (offset = 1
> 914) ... returning ffffff00
> pci_conf_write: tag 1900; reg 14; data 14000; asi = 1d; readaddr = 1fe0100191
> 4 (offset = 1914)
> _psycho_bus_map: type 4 off 14000 sz 100 flags 0 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 14000 paddr 1ff80014000
> pci_conf_read: tag 1900; reg 10; asi = 1d; readaddr = 1fe01001910 (offset = 1
> 910) ... returning 00000801
> pci_conf_write: tag 1900; reg 10; data ffffffff; asi = 1d; readaddr = 1fe0100
> 1910 (offset = 1910)
> pci_conf_read: tag 1900; reg 10; asi = 1d; readaddr = 1fe01001910 (offset = 1
> 910) ... returning ffffff01
> pci_conf_write: tag 1900; reg 10; data 801; asi = 1d; readaddr = 1fe01001910 
> (offset = 1910)
> _psycho_bus_map: type 3 off 800 sz 100 flags 0 va 0x0 cspace 1
> _psycho_bus_map: mapping paddr space 1 offset 800 paddr 1fe02010800
> pci_conf_read: tag 1900; reg 18; asi = 1d; readaddr = 1fe01001918 (offset = 1
> 918) ... returning 00016000
> pci_conf_write: tag 1900; reg 18; data ffffffff; asi = 1d; readaddr = 1fe0100
> 1918 (offset = 1918)
> pci_conf_read: tag 1900; reg 18; asi = 1d; readaddr = 1fe01001918 (offset = 1
> 918) ... returning fffff000
> pci_conf_write: tag 1900; reg 18; data 16000; asi = 1d; readaddr = 1fe0100191
> 8 (offset = 1918)
> _psycho_bus_map: type 4 off 16000 sz 1000 flags 0 va 0x0 cspace 2
> _psycho_bus_map: mapping paddr space 2 offset 16000 paddr 1ff80016000
> siop1: using on-board RAM
> pci_intr_map: tag 1900; pin 2; line 38; handle = 38; returning 0
> pci_intr_string: ih 38; returning vector 38
> pci_intr_establish: ih 38; level 5
> psycho_intr_establish: ihandle 26 ino 26
> psycho: intr 26: 0x0
> Hunting for IRQ...
> - turning on OBIO intr 6; read intrmap = 00000000000007e6; addr of intrmapptr
>  = 0xfffad030; writing intrmap
>  = 00000000800007e6
> ; reread intrmap = 00000000800007e6; installing handler 0x101a89c arg 0x272f0
> 00 with ino 38 pil 5
> ; returning handle 0x2727680
> siop1: interrupting at vector 38
> scsibus1 at siop1: 16 targets, 8 luns per target
> psycho1 at mainbus0 addr 0xfffce000
> psycho: impl 0, version 4: psycho debug: got `ranges' for node f006ccb4: 4 en
> tries
> psycho debug: got `bus-range' for node f006ccb4: 128 - 128
> bus range 128 to 128; PCI bus 128psycho debug: got `interupt-map' for node f0
> 06ccb4
> psycho debug: got `interrupt-map-mask' for node f006ccb4
> 
> pci1 at psycho1
> pci_attach_hook:
>         node f009b350 name `TSI,gfxp' devtype `display': got interrupts got a
> ssigned-addresses got reg; bus
>  128 dev 1 fn 0; tag 00800800
>         ; reg: hi 800800 mid 0 lo 0 intr 1
>         ; intmapmask: hi fff800 mid 0 lo 0 intr 7
>         ; after: hi 800800 mid 0 lo 0 intr 1
>                 matching for: hi 800800 mid 0 lo 0 intr 1 child_intr 0... BIN
> GO! found it in intr ...pci_co
> nf_read: tag 800800; reg 3c; asi = 1d; readaddr = 1fe0180083c (offset = 80083
> c) ... returning c0c00100
>             ; read c0c00100 from intreg
>             ; gonna write c0c00100 to intreg
> pci_conf_write: tag 800800; reg 3c; data c0c00100; asi = 1d; readaddr = 1fe01
> 80083c (offset = 80083c)
>             ; reread c0c00100 from intreg
> pci_conf_write: tag 800800; reg 4; data 7; asi = 1d; readaddr = 1fe01800804 (
> offset = 800804)
> 
> 
> pci1: i/o space, memory space enabled
> pci_conf_read: tag 800800; reg 0; asi = 1d; readaddr = 1fe01800800 (offset = 
> 800800) ... returning 00093d3d
> pci_conf_read: tag 800800; reg 4; asi = 1d; readaddr = 1fe01800804 (offset = 
> 800804) ... returning 02900006
> pci_conf_read: tag 800800; reg 8; asi = 1d; readaddr = 1fe01800808 (offset = 
> 800808) ... returning 03800001
> pci_conf_read: tag 800800; reg 3c; asi = 1d; readaddr = 1fe0180083c (offset =
>  80083c) ... returning c0c0010
> 0
> 3D Labs GLINT Permedia 2V (miscellaneous display, revision 0x01) at pci1 dev 
> 1 function 0 not configured
> timer0 at mainbus0 addr 0xfffa7c00 irq vectors 7ec and 7ed
> pcons0 at mainbus0
> scsibus0: waiting 2 seconds for devices to settle...
> siop0: alloc newcdb at PHY addr 0xfe01c000
> siop0: target 0 using tagged queuing
> sd0 at scsibus0 target 0 lun 0: <FUJITSU, MAJ3182M SUN18G, 0804> SCSI2 0/dire
> ct fixed
> siop0: target 0 using 16bit transfers
> siop0: target 0 now synchronous at 20.0Mhz, offset 16
> sd0: 17274 MB, 7508 cyl, 19 head, 248 sec, 512 bytes/sect x 35378533 sectors
> cd0 at scsibus0 target 6 lun 0: <TOSHIBA, DVD-ROM SD-M1401, 1007> SCSI2 5/cdr
> om removable
> siop0: target 6 now synchronous at 20.0Mhz, offset 16
> siop0: target 8 using tagged queuing
> sd1 at scsibus0 target 8 lun 0: <FUJITSU, MAJ3364MC, 0114> SCSI4 0/direct fix
> ed
> siop0: target 8 using 16bit transfers
> siop0: target 8 now synchronous at 20.0Mhz, offset 16
> sd1: 34858 MB, 14793 cyl, 10 head, 482 sec, 512 bytes/sect x 71390320 sectors
> siop0: target 9 using tagged queuing
> sd2 at scsibus0 target 9 lun 0: <FUJITSU, MAJ3364MC, 0114> SCSI4 0/direct fix
> ed
> siop0: target 9 using 16bit transfers
> siop0: target 9 now synchronous at 20.0Mhz, offset 16
> sd2: 34858 MB, 14793 cyl, 10 head, 482 sec, 512 bytes/sect x 71390320 sectors
> siop0: target 10 using tagged queuing
> sd3 at scsibus0 target 10 lun 0: <FUJITSU, MAJ3364MC, 0114> SCSI4 0/direct fi
> xed
> siop0: target 10 using 16bit transfers
> siop0: target 10 now synchronous at 20.0Mhz, offset 16
> sd3: 34858 MB, 14793 cyl, 10 head, 482 sec, 512 bytes/sect x 71390320 sectors
> scsibus1: waiting 2 seconds for devices to settle...
> siop1: alloc newcdb at PHY addr 0xfe01e000
> raidattach: Asked for 4 units
> Kernelized RAIDframe activated
> root on hme1
> mountroot: trying msdos...
> mountroot: trying cd9660...
> mountroot: trying lfs...
> mountroot: trying nfs...
> nfs_boot: trying RARP (and RPC/bootparam)
> nfs_boot: client_addr=192.168.1.235 (RARP from 192.168.1.150)
> nfs_boot: server_addr=192.168.1.150
> nfs_boot: hostname=sunbox.ch.foobar.net
> nfs_boot: timeout...
> 
> 
> 
> > 
> > 
> > try ftp.netbsd.org:/pub/NetBSD/arch/sparc64/kernels/NetBSD-1.5R-2
> > 
> > 
> > it was built with this patch:
> > 
> > 
> > Index: arch/sparc64/dev/simba.c
> > ===================================================================
> > RCS file: /cvsroot/syssrc/sys/arch/sparc64/dev/simba.c,v
> > retrieving revision 1.2
> > diff -p -p -u -r1.2 simba.c
> > --- arch/sparc64/dev/simba.c	2000/05/24 20:27:52	1.2
> > +++ arch/sparc64/dev/simba.c	2001/02/11 18:09:28
> > @@ -135,6 +135,9 @@ simba_attach(parent, self, aux)
> >  	pba.pba_bus = PPB_BUSINFO_SECONDARY(busdata);
> >  	pba.pba_intrswiz = pa->pa_intrswiz;
> >  	pba.pba_intrtag = pa->pa_intrtag;
> > +#ifdef __PCI_OFW_BINDING
> > +        pba.pba_node = pa->pa_node;
> > +#endif
> >  
> >  	config_found(self, &pba, simba_print);
> >  }
> > Index: arch/sparc64/dev/psycho.c
> > ===================================================================
> > RCS file: /cvsroot/syssrc/sys/arch/sparc64/dev/psycho.c,v
> > retrieving revision 1.28
> > diff -p -p -u -r1.28 psycho.c
> > --- arch/sparc64/dev/psycho.c	2000/12/04 20:29:34	1.28
> > +++ arch/sparc64/dev/psycho.c	2001/02/11 18:09:29
> @@ -209,6 +209,9 @@ psycho_attach(parent, self, aux)
> >  	pba.pba_dmat = sc->sc_psycho_this->pp_dmat;
> >  	pba.pba_iot = sc->sc_psycho_this->pp_iot;
> >  	pba.pba_memt = sc->sc_psycho_this->pp_memt;
> > +#ifdef __PCI_OFW_BINDING
> > +	pba.pba_node = sc->sc_node;
> > +#endif
> >  
> >  	config_found(self, &pba, psycho_print);
> >  }
> > Index: arch/sparc64/include/pci_machdep.h
> > ===================================================================
> > RCS file: /cvsroot/syssrc/sys/arch/sparc64/include/pci_machdep.h,v
> > retrieving revision 1.5
> > diff -p -p -u -r1.5 pci_machdep.h
> > --- arch/sparc64/include/pci_machdep.h	2000/12/28 22:59:10	1.5
> > +++ arch/sparc64/include/pci_machdep.h	2001/02/11 18:09:29
> > @@ -65,4 +65,7 @@ void		*pci_intr_establish(pci_chipset_ta
> >  					 int, int (*)(void *), void *);
> >  void		pci_intr_disestablish(pci_chipset_tag_t, void *);
> >  
> > +/* want pci_attach_args{}->pa_node */
> > +#define __PCI_OFW_BINDING
> > +
> >  #endif /* _MACHINE_PCI_MACHDEP_H_ */
> > Index: dev/pci/pci.c
> > ===================================================================
> > RCS file: /cvsroot/syssrc/sys/dev/pci/pci.c,v
> > retrieving revision 1.49
> > diff -p -p -u -r1.49 pci.c
> > --- dev/pci/pci.c	2000/06/28 16:08:48	1.49
> > +++ dev/pci/pci.c	2001/02/11 18:09:29
> > @@ -45,6 +45,11 @@
> >  #include <dev/pci/pcivar.h>
> >  #include <dev/pci/pcidevs.h>
> >  
> > +#ifdef __PCI_OFW_BINDING
> > +#include <dev/ofw/openfirm.h>
> > +#include <dev/ofw/ofw_pci.h>
> > +#endif
> > +
> >  #ifdef PCI_CONFIG_DUMP
> >  int pci_config_dump = 1;
> >  #else
> > @@ -72,11 +77,9 @@ struct cfattach pci_ca = {
> >  	sizeof(struct pci_softc), pcimatch, pciattach
> >  };
> >  
> > -#ifdef __PCI_OFW_BINDING
> > -void	pci_ofw_probe_bus __P((struct device *));
> > -#else
> > +void	pci_probe_function(struct device *, struct pci_attach_args *,
> > +			   pci_chipset_tag_t, int, int);
> >  void	pci_probe_bus __P((struct device *));
> > -#endif
> >  int	pciprint __P((void *, const char *));
> >  int	pcisubmatch __P((struct device *, struct cfdata *, void *));
> >  
> > @@ -133,16 +136,124 @@ pcimatch(parent, cf, aux)
> >  	return 1;
> >  }
> >  
> > -#ifdef __PCI_OFW_BINDING
> > +/*
> > + * Probe a single function.  Call by both the generic and OFW bus probe
> > + * routines.
> > + */
> >  void
> > -pci_ofw_probe_bus(self)
> > +pci_probe_function(self, pa, pc, device, function)
> >  	struct device *self;
> > +	struct pci_attach_args *pa;
> > +	pci_chipset_tag_t pc;
> > +	int device, function;
> >  {
> > +	pcireg_t tag, intr, csr, id, class;
> >  	struct pci_softc *sc = (struct pci_softc *)self;
> > +	int bus = sc->sc_bus;
> > +	int pin;
> > +
> > +	tag = pci_make_tag(pc, bus, device, function);
> > +	id = pci_conf_read(pc, tag, PCI_ID_REG);
> > +	csr = pci_conf_read(pc, tag, PCI_COMMAND_STATUS_REG);
> > +	class = pci_conf_read(pc, tag, PCI_CLASS_REG);
> > +	intr = pci_conf_read(pc, tag, PCI_INTERRUPT_REG);
> > +
> > +	/* Invalid vendor ID value? */
> > +	if (PCI_VENDOR(id) == PCI_VENDOR_INVALID)
> > +		return;
> > +	/* XXX Not invalid, but we've done this ~forever. */
> > +	if (PCI_VENDOR(id) == 0)
> > +		return;
> > +
> > +	pa->pa_iot = sc->sc_iot;
> > +	pa->pa_memt = sc->sc_memt;
> > +	pa->pa_dmat = sc->sc_dmat;
> > +	pa->pa_pc = pc;
> > +	pa->pa_device = device;
> > +	pa->pa_function = function;
> > +	pa->pa_tag = tag;
> > +	pa->pa_id = id;
> > +	pa->pa_class = class;
> > +
> > +	/* From here on is identical to non-OFW version */
> > +	/*
> > +	 * Set up memory, I/O enable, and PCI command flags
> > +	 * as appropriate.
> > +	 */
> > +	pa->pa_flags = sc->sc_flags;
> > +	if ((csr & PCI_COMMAND_IO_ENABLE) == 0)
> > +		pa->pa_flags &= ~PCI_FLAGS_IO_ENABLED;
> > +	if ((csr & PCI_COMMAND_MEM_ENABLE) == 0)
> > +		pa->pa_flags &= ~PCI_FLAGS_MEM_ENABLED;
> > +
> > +	if (bus == 0) {
> > +		pa->pa_intrswiz = 0;
> > +		pa->pa_intrtag = pa->pa_tag;
> > +	} else {
> > +		pa->pa_intrswiz = sc->sc_intrswiz + device;
> > +		pa->pa_intrtag = sc->sc_intrtag;
> > +	}
> > +	pin = PCI_INTERRUPT_PIN(intr);
> > +	if (pin == PCI_INTERRUPT_PIN_NONE) {
> > +		/* no interrupt */
> > +		pa->pa_intrpin = 0;
> > +	} else {
> > +		/*
> > +		 * swizzle it based on the number of
> > +		 * busses we're behind and our device
> > +		 * number.
> > +		 */
> > +		pa->pa_intrpin =			/* XXX */
> > +		    ((pin + pa->pa_intrswiz - 1) % 4) + 1;
> > +	}
> > +	pa->pa_intrline = PCI_INTERRUPT_LINE(intr);
> > +
> > +	config_found_sm(self, pa, pciprint, pcisubmatch);
> > +}
> > +
> > +#ifdef __PCI_OFW_BINDING
> > +static __inline pcireg_t pci_OF_getpropint(int node, char *prop);
> > +
> > +static __inline pcireg_t
> > +pci_OF_getpropint(node, prop)
> >  	int node;
> > +	char *prop;
> > +{
> > +	int it, len;
> > +
> > +	if ((len = OF_getproplen(node, prop)) != sizeof(it) ||
> > +	    OF_getprop(node, prop, &it, sizeof(it)) == 0)
> > +		return (pcireg_t)~0;
> > +
> > +	return (pcireg_t)it;
> > +
> > +}
> >  
> > +void
> > +pci_probe_bus(self)
> > +	struct device *self;
> > +{
> > +	struct pci_softc *sc = (struct pci_softc *)self;
> > +	struct ofw_pci_register reg0;
> > +	struct pci_attach_args pa;
> > +	int node, bus, device, function, len;
> > +	pci_chipset_tag_t pc;
> > +
> > +	bus = sc->sc_bus;
> > +	pc = sc->sc_pc;
> >  	for (node = OF_child(sc->sc_node); node; node = OF_peer(node)) {
> > +		len = OF_getproplen(node, "reg");
> > +		if (len <= 0)
> > +			continue;
> > +		if (OF_getprop(node, "reg", (void *)&reg0, sizeof(reg0)) != len
> > )
> > +			panic("pci_probe_bus: OF_getprop len botch");
> > +
> > +		device = OFW_PCI_PHYS_HI_DEVICE(reg0.phys_hi);
> > +		function = OFW_PCI_PHYS_HI_FUNCTION(reg0.phys_hi);
> > +
> > +		pa.pa_node = node;
> >  
> > +		pci_probe_function(self, &pa, pc, device, function);
> >  	}
> >  }
> >  #else
> > @@ -164,9 +275,8 @@ pci_probe_bus(self)
> >  
> >  	for (device = 0; device < maxndevs; device++) {
> >  		pcitag_t tag;
> > -		pcireg_t id, class, intr, bhlcr, csr;
> > +		pcireg_t id, bhlcr;
> >  		struct pci_attach_args pa;
> > -		int pin;
> >  
> >  		tag = pci_make_tag(pc, bus, device, 0);
> >  		id = pci_conf_read(pc, tag, PCI_ID_REG);
> > @@ -188,64 +298,8 @@ pci_probe_bus(self)
> >  		else
> >  			nfunctions = 1;
> >  
> > -		for (function = 0; function < nfunctions; function++) {
> > -			tag = pci_make_tag(pc, bus, device, function);
> > -			id = pci_conf_read(pc, tag, PCI_ID_REG);
> > -			csr = pci_conf_read(pc, tag, PCI_COMMAND_STATUS_REG);
> > -			class = pci_conf_read(pc, tag, PCI_CLASS_REG);
> > -			intr = pci_conf_read(pc, tag, PCI_INTERRUPT_REG);
> > -
> > -			/* Invalid vendor ID value? */
> > -			if (PCI_VENDOR(id) == PCI_VENDOR_INVALID)
> > -				continue;
> > -			/* XXX Not invalid, but we've done this ~forever. */
> > -			if (PCI_VENDOR(id) == 0)
> > -				continue;
> > -
> > -			pa.pa_iot = iot;
> > -			pa.pa_memt = memt;
> > -			pa.pa_dmat = sc->sc_dmat;
> > -			pa.pa_pc = pc;
> > -			pa.pa_device = device;
> > -			pa.pa_function = function;
> > -			pa.pa_tag = tag;
> > -			pa.pa_id = id;
> > -			pa.pa_class = class;
> > -
> > -			/*
> > -			 * Set up memory, I/O enable, and PCI command flags
> > -			 * as appropriate.
> > -			 */
> > -			pa.pa_flags = sc->sc_flags;
> > -			if ((csr & PCI_COMMAND_IO_ENABLE) == 0)
> > -				pa.pa_flags &= ~PCI_FLAGS_IO_ENABLED;
> > -			if ((csr & PCI_COMMAND_MEM_ENABLE) == 0)
> > -				pa.pa_flags &= ~PCI_FLAGS_MEM_ENABLED;
> > -
> > -			if (bus == 0) {
> > -				pa.pa_intrswiz = 0;
> > -				pa.pa_intrtag = tag;
> > -			} else {
> > -				pa.pa_intrswiz = sc->sc_intrswiz + device;
> > -				pa.pa_intrtag = sc->sc_intrtag;
> > -			}
> > -			pin = PCI_INTERRUPT_PIN(intr);
> > -			if (pin == PCI_INTERRUPT_PIN_NONE) {
> > -				/* no interrupt */
> > -				pa.pa_intrpin = 0;
> > -			} else {
> > -				/*
> > -				 * swizzle it based on the number of
> > -				 * busses we're behind and our device
> > -				 * number.
> > -				 */
> > -				pa.pa_intrpin =			/* XXX */
> > -				    ((pin + pa.pa_intrswiz - 1) % 4) + 1;
> > -			}
> > -			pa.pa_intrline = PCI_INTERRUPT_LINE(intr);
> > -
> > -			config_found_sm(self, &pa, pciprint, pcisubmatch);
> > -		}
> > +		for (function = 0; function < nfunctions; function++)
> > +			pci_probe_function(self, &pa, pc, device, function);
> >  	}
> >  }
> >  #endif
> > @@ -309,11 +363,8 @@ pciattach(parent, self, aux)
> >  	sc->sc_flags = pba->pba_flags;
> >  #ifdef __PCI_OFW_BINDING
> >  	sc->sc_node = pba->pba_node;
> > -
> > -	pci_ofw_probe_bus(self);
> > -#else
> > -	pci_probe_bus(self);
> >  #endif
> > +	pci_probe_bus(self);
> >  }
> >  
> >  int
> > Index: dev/pci/ppb.c
> > ===================================================================
> > RCS file: /cvsroot/syssrc/sys/dev/pci/ppb.c,v
> > retrieving revision 1.19
> > diff -p -p -u -r1.19 ppb.c
> > --- dev/pci/ppb.c	1999/11/04 19:04:04	1.19
> > +++ dev/pci/ppb.c	2001/02/11 18:09:29
> > @@ -117,6 +117,9 @@ ppbattach(parent, self, aux)
> >  	pba.pba_bus = PPB_BUSINFO_SECONDARY(busdata);
> >  	pba.pba_intrswiz = pa->pa_intrswiz;
> >  	pba.pba_intrtag = pa->pa_intrtag;
> > +#ifdef __PCI_OFW_BINDING
> > +        pba.pba_node = pa->pa_node;
> > +#endif
> >  
> >  	config_found(self, &pba, ppbprint);
> >  }
> > Index: dev/ofw/ofw_pci.h
> > ===================================================================
> > RCS file: /cvsroot/syssrc/sys/dev/ofw/ofw_pci.h,v
> > retrieving revision 1.2
> > diff -p -p -u -r1.2 ofw_pci.h
> > --- dev/ofw/ofw_pci.h	1999/05/05 08:09:34	1.2
> > +++ dev/ofw/ofw_pci.h	2001/02/11 18:09:30
> > @@ -87,4 +87,20 @@
> >  #define	OFW_PCI_PHYS_HI_SPACE_MEM32	0x02000000
> >  #define	OFW_PCI_PHYS_HI_SPACE_MEM64	0x03000000
> >  
> > +#define OFW_PCI_PHYS_HI_DEVICE(hi) \
> > +	(((hi) & OFW_PCI_PHYS_HI_DEVICEMASK) >> OFW_PCI_PHYS_HI_DEVICESHIFT)
> > +#define OFW_PCI_PHYS_HI_FUNCTION(hi) \
> > +	(((hi) & OFW_PCI_PHYS_HI_FUNCTIONMASK) >> OFW_PCI_PHYS_HI_FUNCTIONSHIFT
> > )
> > +
> > +/*
> > + * This has the 3 32bit cell values, plus 2 more to make up a 64-bit size.
> > + */
> > +struct ofw_pci_register {
> > +	u_int32_t	phys_hi;
> > +	u_int32_t	phys_mid;
> > +	u_int32_t	phys_lo;
> > +	u_int32_t	size_hi;
> > +	u_int32_t	size_lo;
> > +};
> > +
> >  #endif /* _DEV_OFW_OFW_PCI_H_ */