[U-Boot-Users] U-boot Bus Fault Error while accessing NOR flash

Jerry Van Baren
2008-02-15T18:15:32Z

Nikhil Gautam wrote:
> Hi Everyone,
>
> I am try to use the u-boot to program the NOR flash on my proprietary
> board based on AMCC sequoia board. I can boot from 1Gb NAND flash ok
> but everytime I try access the last 4K of NOR flash, U-boot gives me
> following error and reboots:-
>
> {{{
> U-Boot$ md 0xFFFFF000
> fffff000:Bus Fault @ 0x00000000, fixup 0x00000000
> Machine check in kernel mode.
> Caused by (from msr): regs 0fe8fca8 Unknown values in msr
> NIP: 00000000 XER: 20000000 LR: 0FF6412C REGS: 0fe8fca8 TRAP: 0200 DAR:
> 041F0000
> MSR: 00000000 EE: 0 PR: 0 FP: 0 ME: 0 IR/DR: 00
>
> GPR00: 0FF6412C 0FE8FD98 7FFFFFFF EF600300 00000000 00000001 00000001 C838AE89
> GPR08: 0FF5145C 00000000 01FCA055 03F940AB 0FE8FB50 041F0000 0FFACD00 0EED0000
> GPR16: 00000000 00000000 00000000 00000000 0FE8FDA0 00000040 0FE8FDA0 0FE8FDA0
> GPR24: 00000000 00000100 00000010 00000004 FFFFF000 0FE8FF40 0FFADB58 0FE8FDA0
> Call backtrace:
> machine check
> }}}
>
> I get the same error if I press "ENTER" after u-boot gives me the
> prompt. If I type some command its ok and then its fine thereafter.
>
> I know the NOR flash is ok because I used BDI to program it and also I
> can access this address when I boot from NOR flash.
>
> Any Clue?
>
> Thanks In Advance!
>
> Nikhil Gautam

Hi Nikhil,

If I understand you correctly, this sounds like improperly initialized
variables in your build. This is very likely a (build | link |
initialization | relocation) issue (pick any combination).

The "md 0xFFFFF000" command is using the default value for the number of
objects, which comes from a static variable dp_last_length that is
initialized to 0x40 (see common/cmd_mem.c):
uint dp_last_length = 0x40;

If dp_last_length is not initialized properly to 0x40 on start up,
unexpected things are going to happen. I don't see an obvious path to
an illegal access to location 0x00000000, but it could be.

In addition, if you hit <enter> with no command the first time your
board boots, the command parser tries to run the last command you
executed. Of course, there *is no* "last command", which ties into my
theory of uninitialized static/global variables.

I would suspect your link control isn't linking the static variable
initialization in the right section or your (compiler's) initialization
of the static variables isn't working as expected.

HTH,
gvb