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