[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[microblaze-uclinux] Petalinux v0.10-rc1, bug found
Hi,
I am using Petalinux v0.10 rc1, using a Microblaze CPU on a Xilinx
ML401 board. Generally working very well, but I have found a bug
that prevents the CPU reset button working correctly.
Before uClinux boots (e.g. in fs-boot and u-boot), the ML401 CPU
reset button works correctly. After uClinux boots, the reset button
causes the system to crash.
This is because fs-boot has been partially overwritten by
pingpong_vector_table() in
petalinux-v0.10-rc1/software/uClinux-2.4.x/arch/microblaze/platform/Xilinx-ML401/machine.c
When the interrupt vector table is replaced, memory addresses
between 0x4 and 0x68 are overwritten with the vectors. The highest
vector is dbtrap, which is installed at 0x60. Unfortunately, part of the
fs-boot loader is at 0x50:
(mb-objdump -d fs-boot/executable.elf)
00000050 <_start1>:
50: 31a01368 addik r13, r0, 4968 // 1368 <_SDA_BASE_>
54: 304012d0 addik r2, r0, 4816 // 12d0 <_SDA2_BASE_>
58: 30201648 addik r1, r0, 5704
5c: b9f40088 brlid r15, 136 // e4 <_crtinit>
60: 80000000 or r0, r0, r0
64: 20210010 addi r1, r1, 16
So when I press reset, fs-boot jumps to 0x50, falls through to 0x60,
and then runs the kernel dbtrap routine. Perhaps part of fs-boot
could be moved to a higher address?
Thanks,
--
Jack Whitham
jack@xxxxxxxxxxxxx
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/