[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/