Subject: Re: panic trying to add missing SDRAM to tsarm kernel.
To: None <port-arm@NetBSD.org>
From: Anders Lindgren <ali@df.lth.se>
List: port-arm
Date: 04/09/2007 16:38:16
Some more tidbits of information.
This is insane; I now reliably get the same Mutex error booting an
*unmodified* kernel. The unmodified kernel worked before I started playing
with the startup code, but now I consistently get a "locking against
myself" panic, despite having reverted all my changes and rebuilt the
kernel from scratch.
Before reverting my changes, I had some weird results; In an attempt to
verify that the SDRAM behaves as expected, I tried to add a second mapping
for the first nSDCE2 bank in tsarm_start.S; VA 0xc0800000..c0ffffff => PA
0xe0000000..0xe07fffff, by entering it into the bootstrap page table just
after the lowest 8MB gets mapped.
I then did some printfs right after consinit() in initarm to verify I
could read and write to the memory, which succeeded. To make sure I wasn't
just seeing D$ data, I moved my test to right after set_cpufuncs and did a
cpu_dcache_wbinv_range on the address after the write, to make sure it was
cleaned out, and after that I get 0xe59fe59f back instead of the pattern I
wrote (one unsigned long).
Anyone else tried -current on TS72xx boards?
Fumbling pretty much in blind here, so any help is appreciated.
Best regards,
ali:)
On Sat, 7 Apr 2007, Anders Lindgren wrote:
> As mentioned in my previous post, I am trying to make my TS7250 board utilise
> all its 64MB SDRAM. The current NetBSD code has a physical memory size of
> 32MB hardcoded in.
>
> I've successfully booted NetBSD 4.99.16 (TS7200) on it and now I am trying to
> change its opinion on the amount of available SDRAM.
>
> The first 32MB show up at PA 0x0, 0x16MB, 0x64MB and 0x80MB. The banks I am
> trying to add are located on the EP9302 nSDCE2 starting at PA 0xE0000000,
> with the same bank layout.
>
> I made the following changes:
>
> - Added additional banks to the bootconfig.dram[] array at
> <sys/arch/evbarm/tsarm/tsarm_machdep.c:454>, changing dramblocks to 8 and
> adding the additional ranges.
>
> - Updated the size of the tsarm_dma_ranges[] array from 4 to 8 at
> <sys/arch/evbarm/tsarm/tsarm_machdep.c:181>.
>
> - Added uvm_page_physload() calls for the additional banks at
> <sys/arch/evbarm/tsarm/tsarm_machdep.c:777>, and updated physmem accordingly.
>
> This looked like it should be pretty much it; it's just some more RAM, after
> all. Rebuild kernel and reboot. It looks promising, the kernel boots, finding
> 64MB:
>
> :
> :
> total memory = 65536 KB
> avail memory = 60156 KB
> :
> :
>
> ..but shortly after mounting the NFS root filesystem, I get a "locking
> against myself" kernel panic from a pipe_read syscall. Obviously I'm missing
> something, since the default kernel works fine, but this is my first venture
> into NetBSD kernel programming so I am pretty much fumbling in the dark here.
> Any ideas?
>
> This is the backtrace I get from ddb:
>
> ----8<----8<----
> root on 192.168.1.6:/export/tsarm
> Sat Apr 7 15:52:51 CEST 2007
> Mutex error: mutex_vector_enter: locking against myself
>
> lock address : 0x00000000c051ee0c
> current cpu : 0
> current lwp : 0x00000000c2511c80
> owner field : 0x0000000000010c00 wait/spin: 0/1
>
> panic: lock error
> Stopped in pid 13.1 (sh) at netbsd:cpu_Debugger+0x4: mov r15, r14
>
> db> bt
> netbsd:panic+0x14
> scp=0xc03674c0 rlv=0xc0362134 (netbsd:lockdebug_abort+0x5c)
> rsp=0xc2d87d5c rfp=0xc2d87d7c
> netbsd:lockdebug_abort+0x10
> scp=0xc03620e8 rlv=0xc0346960 (netbsd:mutex_abort+0x3c)
> rsp=0xc2d87d80 rfp=0xc2d87d90
> r5=0xc051ee0c r4=0xffffffff
> netbsd:mutex_abort+0x10
> scp=0xc0346934 rlv=0xc0346ad8 (netbsd:mutex_vector_enter+0x110)
> rsp=0xc2d87d94 rfp=0xc2d87db4
> netbsd:mutex_vector_enter+0x10
> scp=0xc03469d8 rlv=0xc035a3a8 (netbsd:turnstile_lookup+0x28)
> rsp=0xc2d87db8 rfp=0xc2d87dcc
> r8=0xc2511c80 r7=0xc2da2f00
> r6=0xc2da2f08 r5=0xc2da2f00 r4=0xc051f840
> netbsd:turnstile_lookup+0x10
> scp=0xc035a390 rlv=0xc0346c2c (netbsd:mutex_vector_exit+0x8c)
> rsp=0xc2d87dd0 rfp=0xc2d87de4
> r5=0x00000000 r4=0xc2da2f00
> netbsd:mutex_vector_exit+0x10
> scp=0xc0346bb0 rlv=0xc0337950 (netbsd:cv_wait_sig+0xa0)
> rsp=0xc2d87de8 rfp=0xc2d87e14
> r5=0x00000000 r4=0xc051e8f0
> netbsd:cv_wait_sig+0x10
> scp=0xc03378c0 rlv=0xc036e780 (netbsd:pipe_read+0x348)
> rsp=0xc2d87e18 rfp=0xc2d87e48
> r8=0xc2d87e54 r7=0xc2da2f18
> r6=0xc2da2f00 r5=0xc2da2f08 r4=0xc2519f00
> netbsd:pipe_read+0x10
> scp=0xc036e448 rlv=0xc036b678 (netbsd:dofileread+0xb0)
> rsp=0xc2d87e4c rfp=0xc2d87eac
> r10=0xc2511c80 r9=0x00000003
> r8=0x00000000 r7=0x00000080 r6=0xc251089c r5=0xbfffeaa8
> r4=0xc2519f00
> netbsd:dofileread+0x10
> scp=0xc036b5d8 rlv=0xc036b7dc (netbsd:sys_read+0x84)
> rsp=0xc2d87eb0 rfp=0xc2d87edc
> r10=0x0002fd28 r9=0x00000004
> r8=0xc2511c80 r7=0xc2d87f30 r6=0xc2511c80 r5=0x00000003
> r4=0xc2d87fb8
> netbsd:sys_read+0x10
> scp=0xc036b768 rlv=0xc03ba244 (netbsd:syscall_plain+0x118)
> rsp=0xc2d87ee0 rfp=0xc2d87f60
> r7=0xc0463b38 r6=0xc2d87fb4
> r5=0x00000003 r4=0xefa00003
> netbsd:syscall_plain+0x10
> scp=0xc03ba13c rlv=0xc03ba710 (netbsd:swi_handler+0xa4)
> rsp=0xc2d87f64 rfp=0xc2d87fb0
> r10=0x0002fd28 r9=0x0002fdfe
> r8=0x00000000 r7=0xc251089c r6=0xefa00003 r5=0xc2d87fb4
> r4=0xc2511c80
> netbsd:swi_handler+0x10
> scp=0xc03ba67c rlv=0xc03bd744 (netbsd:swi_entry+0x64)
> rsp=0xc2d87fb4 rfp=0xbfffeb70
> r7=0x0002fe20 r6=0x00000000
> r5=0xffffffff r4=0x0002f76c
> ----8<----8<----
>
> Best regards,
> ali:)
>