2009-09-24 STR9105その3
どうも不安定なのはキャッシュまわりと思ったら、違うようだ。キャッシュも怪しいけど。
コンソールから何度も dmesg してると、たまにピタっと止まってしまう。一度この状態になるとBREAK信号も受けつけない。
イーサのドライバに仕込んでおいた特殊パケット受信でDebugger()を呼ぶ機能を使って ddb に落としてから c すると、何故か復活する。うーん。。。
どうも割込みまわりか、UARTの挙動が怪しい。
幸いこの状態になってもEtherやその他諸々はは生きていてpingにも答えるし、sshdを上げておけばリモートログインできるので、リモートで入って観測。
# gdb --write /netbsd (gdb) target kvm (gdb) p/x star_intr_enabled $1 = 0x19c041b (gdb) p/x star_intr_pending $2 = 0x0
0x19c041b = 0000_0001_1001_1100_0000_0100_0001_1011 (b) で、UART は IRQ10 なのでちゃんと enable になっている。
にもかかわらず star_intr_pending も 0 ってことはそもそも割込みが入ってきてない感じ。
UARTもSTR8100とSTR9100で微妙に制御ビットが追加されたりするので、そのへんの違いか。どちらにせよなんちゃって16550互換なので、また場合分けを入れなきゃならないのか…
いろいろ調べてると、現象が起きた状態で cnputc すると復活することがわかった。ddb に落とすと復活するのはこのせいか。どう考えてもcomだなぁ。
回避方法がわかったので特殊パケット受信でcnputcするように仕組んでおくと、止まりつつも(パケット投げれば)進むようになった。
なんかdev_mkdbが数分かかってて変だけど、とりあえずマルチユーザまで上がった。
NetBSD/evbarm STR8100/9100
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009
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 5.99.18 (STR91xx) #184: Thu Sep 24 04:48:06 JST 2009
ryo@falsie:/src/cvs/NetBSD/sys/arch/evbarm/compile/STR91xx
total memory = 32768 KB
avail memory = 28164 KB
mainbus0 (root)
cpu0 at mainbus0: FA526 rev 1 (ARMv4 core)
cpu0: DC enabled IC enabled WB enabled LABT
cpu0: 16KB/16B 2-way Instruction cache
cpu0: 16KB/16B 2-way write-back-locking-B Data cache
star0 at mainbus0: Star Orion Family SoC: STR9100, 200MHz
starclk0 at star0 addr 0x79000000-0x79000047 irq 0: Programmable Timer
com0 at star0 addr 0x78000000-0x7800001f irq 10: ns16550a, working fifo
com0: console
ohci0 at star0 addr 0xc4000000-0xc400005b irq 23: USB1.1 Host Controller
ohci0: OHCI version 1.0, legacy support
usb0 at ohci0: USB revision 1.0
ehci0 at star0 addr 0xcc000000-0xcc00006b irq 24: USB2.0 Host Controller
ehci0: ohci or uhci probably not configured
usb1 at ehci0: USB revision 2.0
starrtc0 at star0 addr 0x7b000000-0x7b000037 irq 14: Real-time Clock
starwdog0 at star0 addr 0x7a000000-0x7a00001b irq 3: Watch Dog Timer
stargpio0 at star0 addr 0x7c000000-0x7c000047 irq 4: GPIO
gpio0 at stargpio0: 32 pins
gsec0 at star0 addr 0x70000000-0x7000029b irq 18: Gigabit Switch Engine
gse0 at gsec0 port0
gse0: Ethernet address 00:08:a1:c0:45:7e
ukphy0 at gse0 phy 0: OUI 0x0009c3, model 0x0005, rev. 4
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
gse1 at gsec0 port1
gse1: Ethernet address 00:08:a1:c0:45:7f
ukphy1 at gse1 phy 1: OUI 0x0009c3, model 0x0005, rev. 4
ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
uhub0 at usb0: Star OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub1 at usb1: Star EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
boot device: <unknown>
root on gse0
nfs_boot: trying static
nfs_boot: client_addr=192.168.185.87
nfs_boot: gateway=192.168.185.65
nfs_boot: netmask=255.255.254.0
nfs_boot: server=192.168.185.65
nfs_boot: root=192.168.185.65:/src/boot/str9100
root on 192.168.185.65:/src/boot/str9100
WARNING: preposterous TOD clock time
WARNING: using filesystem time
WARNING: CHECK AND RESET THE DATE!
WARNING: negative runtime; monotonic clock has gone backwards
Thu Sep 24 05:13:54 JST 2009
Not checking /: nfs mounted
Starting file system checks:
Setting tty flags.
Setting sysctl variables:
Starting network.
Hostname: str9100
IPv6 mode: host
Configuring network interfaces:.
Adding interface aliases:.
Building databases: dev, utmp, utmpx done
Starting syslogd.
Setting date via ntp.
Checking for core dump...
savecore - - - no core dump (no dumpdev)
Starting rpcbind.
Mounting all filesystems...
Clearing temporary files.
Creating a.out runtime link editor directory cache.
Starting statd.
Starting lockd.
swapctl: adding /var/swapfile as swap device at priority 0
Starting virecover.
Starting local daemons:.
Updating motd.
Starting ntpd.
Starting sshd.
Starting inetd.
Starting cron.
Thu Sep 24 05:22:09 JST 2009
NetBSD/evbarm (str9100) (console)
login:
NetBSD/evbarm (str9100) (console)
login:
NetBSD/evbarm (str9100) (console)
login: root
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009
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 5.99.18 (STR91xx) #184: Thu Sep 24 04:48:06 JST 2009
STR9105
Terminal type is vt100.
We recommend that you create a non-root account and use su(1) for root access.
str9100# ifconfig -a
gse0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
address: 00:08:a1:c0:45:7e
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 192.168.185.87 netmask 0xfffffe00 broadcast 192.168.185.255
inet6 fe80::208:a1ff:fec0:457e%gse0 prefixlen 64 scopeid 0x1
gse1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
address: 00:08:a1:c0:45:7f
media: Ethernet autoselect (none)
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33192
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
str9100# uname -a
NetBSD str9100 5.99.18 NetBSD 5.99.18 (STR91xx) #184: Thu Sep 24 04:48:06 JST 2009 ryo@falsie:/src/cvs/NetBSD/sys/arch/evbarm/compile/STR91xx evbarm
str9100# df
Filesystem 1K-blocks Used Avail %Cap Mounted on
192.168.185.65:/src/boot/str9100 479777102 144965034 310823214 31% /
mfs:150 7647 0 7265 0% /tmp
procfs 4 4 0 100% /proc
kernfs 1 1 0 100% /kern
192.168.185.65:/home 479777102 144965034 310823214 31% /home
192.168.185.65:/src 479777102 144965034 310823214 31% /src
str9100#
遅いのはたぶんEtherが適当だからな気がする。もっとちゃんと作らなきゃダメだな。
あとはUARTの非互換部分を調べて止まらないようにしなければ。
STR9100対応程度サクサクできると思ったらそうもいかないな。
arm/starは終わらせて早くimx515をいじりたいものだ…
EOF