From: nicolas.ferre@atmel.com (Nicolas Ferre)
To: linux-arm-kernel@lists.infradead.org
Subject: Kernel oops with undefined instruction when accessing memory on an AT91 custom system
Date: Sat, 14 May 2011 22:43:53 +0200 [thread overview]
Message-ID: <4DCEE989.4000401@atmel.com> (raw)
In-Reply-To: <4DCEADB5.9010905@usask.ca>
Nicholas Kinar a ?crit :
> Hello,
>
> I've recently designed an embedded system with an AT91SAM9RL processor.
> This is an ARM9 processor. The hardware of the embedded system is
> similar to the AT91SAM9RL-EK evaluation kit with board support already
> in the Linux kernel
> (linux-kernel/linux-2.6.37/arch/arm/mach-at91/board-sam9rlek.c). There
> is 64 MB of physical memory. I've used AT91bootstrap to bypass the
> crystals and I've provided an external clock signal (12.0 MHz) as the
> main input clock. The external clock signal is fine, and is the same
> frequency as the crystal on the AT91SAM9RL-EK board.
>
> I've downloaded and built the memtest suite found here
> (http://www.arm.linux.org.uk/developer/stresstests.php). I've been
> building both the Linux kernel (linux-2.6.37) and the memtest suite
> using the arm-linux-gcc compiler shipped with buildroot.2011.02. The
> specs of this particular compiler can be found below:
>
> arm-linux-gcc -v
> Using built-in specs.
> Target: arm-unknown-linux-uclibcgnueabi
> Configured with:
> /media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/toolchain/gcc-4.3.5/configure
> --prefix=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr
> --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu
> --target=arm-unknown-linux-uclibcgnueabi --enable-languages=c,c++
> --with-sysroot=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr/arm-unknown-linux-uclibcgnueabi/sysroot
> --with-build-time-tools=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr/arm-unknown-linux-uclibcgnueabi/bin
> --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld
> --disable-libssp --disable-multilib --disable-tls --disable-shared
> --with-gmp=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr
> --with-mpfr=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr
> --enable-threads --disable-decimal-float --with-float=soft
> --with-abi=aapcs-linux --with-arch=armv5te --with-tune=arm926ej-s
> --with-pkgversion='Buildroot 2011.02'
> --with-bugurl=http://bugs.buildroot.net/ : (reconfigured)
> /media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/toolchain/gcc-4.3.5/configure
> --prefix=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr
> --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu
> --target=arm-unknown-linux-uclibcgnueabi --enable-languages=c,c++
> --with-sysroot=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr/arm-unknown-linux-uclibcgnueabi/sysroot
> --with-build-time-tools=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr/arm-unknown-linux-uclibcgnueabi/bin
> --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld
> --disable-libssp --disable-multilib --disable-tls --disable-shared
> --with-gmp=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr
> --with-mpfr=/media/RESEARCH/DEVICE-CODE/buildroot-heat-probe/buildroot-2011.02/output/host/usr
> --enable-threads --disable-decimal-float --with-float=soft
> --with-abi=aapcs-linux --with-arch=armv5te --with-tune=arm926ej-s
> --with-pkgversion='Buildroot 2011.02'
> --with-bugurl=http://bugs.buildroot.net/
> Thread model: posix
> gcc version 4.3.5 (Buildroot 2011.02)
>
>
> When running the memtest program on the embedded ARM system, I receive
> the following kernel oops that complains about an undefined
> instruction. I've tested SDRAM memory using "bare-metal" non-Linux
> programs loaded over JTAG, and it seems that I can successfully write
> and read any values into all memory addresses.
>
> I've had a number of random kernel oops when trying to use the AT91 mmc
> driver with an SD card, but when running the memtest program, I receive
> the following undefined instruction (that often repeats in a similar and
> continuous fashion):
>
> # ./mtest
> Starting test run with 8 megabyte heap.
> Setting up 2048 4096kB pages for test...Internal error: Oops - undefined
> instruction: 0 [#1]
> last sysfs file: /sys/devices/virtual/vc/vcsa1/dev
> Modules linked in:
> CPU: 0 Not tainted (2.6.37 #15)
> PC is at v5tj_early_abort+0x0/0x38
> LR is at __dabt_usr+0x38/0x60
> pc : [<c0028d20>] lr : [<c0021c58>] psr: 00000093
> sp : c3ae5fb0 ip : 00012008 fp : 00011664
> r10: 00011638 r9 : 00011630 r8 : 00011644
> r7 : 00011634 r6 : 00011678 r5 : 00011670 r4 : ffffffff
> r3 : 80000010 r2 : 00008e78 r1 : 4019a008 r0 : 00053177
> Flags: nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
> Control: 0005317f Table: 23090000 DAC: 00000015
> Process mtest (pid: 873, stack limit = 0xc3ae4270)
> Stack: (0xc3ae5fb0 to 0xc3ae6000)
> 5fa0: 4019a008 000002a8 002a8000
> 00001000
> 5fc0: 0001166c 00011670 00011678 00011634 00011644 00011630 00011638
> 00011664
> 5fe0: 00012008 bec59d10 40178a64 00008e78 80000010 ffffffff 238633c4
> 94cc31cc
> [<c0028d20>] (v5tj_early_abort+0x0/0x38) from [<00011664>] (0x11664)
> Code: 00000000 00000000 00000000 00000000 (ee150000)
> ---[ end trace 88c1fe1db84a9172 ]---
>
> Here is my attempt at deciphering the oops file:
>
> nkinar at matilda:/media/RESEARCH/DEVICE-CODE/oops-reports$ ksymoops -k
> ./kallsyms -l ./modules --no-object -m ./System.map < oops.txt
> ksymoops 2.4.11 on x86_64 2.6.32-31-generic. Options used
> -V (default)
> -k ./kallsyms (specified)
> -l ./modules (specified)
> -O (specified)
> -m ./System.map (specified)
>
> Warning (read_ksyms): no kernel symbols in ksyms, is ./kallsyms a valid
> ksyms file?
> No ksyms, skipping lsmod
> CPU: 0 Not tainted (2.6.37 #15)
> pc : [<c0028d20>] lr : [<c0021c58>] psr: 00000093
> Using defaults from ksymoops -t elf64-x86-64 -a i386:x86-64
> sp : c3ae5fb0 ip : 00012008 fp : 00011664
> r10: 00011638 r9 : 00011630 r8 : 00011644
> r7 : 00011634 r6 : 00011678 r5 : 00011670 r4 : ffffffff
> r3 : 80000010 r2 : 00008e78 r1 : 4019a008 r0 : 00053177
> Flags: nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
> Control: 0005317f Table: 23090000 DAC: 00000015
> Stack: (0xc3ae5fb0 to 0xc3ae6000)
> 5fa0: 4019a008 000002a8 002a8000
> 00001000
> 5fc0: 0001166c 00011670 00011678 00011634 00011644 00011630 00011638
> 00011664
> 5fe0: 00012008 bec59d10 40178a64 00008e78 80000010 ffffffff 238633c4
> 94cc31cc
> [<c0028d20>] (v5tj_early_abort+0x0/0x38) from [<00011664>] (0x11664)
> Code: 00000000 00000000 00000000 00000000 (ee150000)
>
>
> >>LR; 00000000c0021c58 <__dabt_usr+38/60>
>
> >>RIP; 00000000c0028d20 <v5tj_early_abort+0/38> <=====
>
> Code; 00000000c0028d10 <do_alignment_ldmstm+228/238>
> 0000000000000000 <_RIP>:
> Code; 00000000c0028d20 <v5tj_early_abort+0/38> <=====
> 10: 00 00 add %al,(%rax) <=====
> Code; 00000000c0028d22 <v5tj_early_abort+2/38>
> 12: 15 ee 00 00 00 adc $0xee,%eax
>
>
> 1 warning issued. Results may not be reliable.
>
>
> Looking at the source code of the mtest program, it appears that the
> oops occurs around lines 134-135 of memtest.c when safe_malloc() is called.
>
> What could be the problem here, and is there anything that I can do to
> rectify it? Is there a possibility of changing anything in the Linux
> kernel config to stop (or at least minimize) the problem from
> occurring? Alternately, is there a "known-good" configuration that I
> can use to rectify what is happening?
Just a piece of advice about the hardware :
0/ can you tell us if the very same kernel revision and memtest goes
smoothly on an Atmel at91sam9rl-ek board (the Evaluation Kit): if you
have one...
1/ try to test the same condition with another hardware. If you built
several of your custom hardware, running on another chip / board can
give clues
2/ try the same test with caches disabled (kernel configuration option).
That can also give you an idea about the software/hardware location of
the issue: be aware that a cache enabled ARM9 does more demanding
accesses to the external SDRAM: that can highlight some routing / noise
issues.
> I've tried a number of different kernels, including linux-2.6.39-rc6 and
> the official ARM kernel pulled from git. I've also tried building with
> the arm-none-linux-gnueabi-gcc from CodeSourcery, but similar problems
> still arise.
You can test a proven kernel going to www.linux4sam.org: but you will
need the at91sam9rl-ek to use the binary provided there (sources
available also of course).
Best regards,
--
Nicolas Ferre
next prev parent reply other threads:[~2011-05-14 20:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-14 16:28 Kernel oops with undefined instruction when accessing memory on an AT91 custom system Nicholas Kinar
2011-05-14 20:43 ` Nicolas Ferre [this message]
2011-05-15 3:48 ` Nicholas Kinar
2011-05-15 7:33 ` Russell King - ARM Linux
2011-05-15 14:24 ` Nicholas Kinar
2011-05-14 21:41 ` Detlef Vollmann
2011-05-15 3:52 ` Nicholas Kinar
2011-05-15 15:08 ` Detlef Vollmann
2011-05-15 15:15 ` Nicholas Kinar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4DCEE989.4000401@atmel.com \
--to=nicolas.ferre@atmel.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.