[U-Boot] u-boot on mcf5307

Angelo Dureghello angelo70 at gmail.com
Mon Aug 1 01:12:07 CEST 2011


On 29/07/2011 00:08, Angelo Dureghello wrote:
> Dear all,
> 
> i succesfully added support for mcf5307, was quite easy, as you suggested i started from a m68k/cpu model with a very similar memory map.
> 
> I am trying now to have the bootloader running in a custom board i developed:
> MCF5307
> SDRAM 16M, mapped at 0x00000000
> FLASH  4M, mapped at 0xffc00000
> 
> The bootloader works great only if i don't enable timer2 for the clock/timestamp.
> If timer2 is enabled i get the following error:
> 
> 
> U-Boot 2011.06-rc2-dirty (Jul 28 2011 - 23:55:16)
> 
> CPU:   Freescale Coldfire MCF5307 at 90 MHz
> Board: AMCORE v.001(alpha)
> DRAM:  16 MiB
> SDRAM test:
> testing MB 01 ...
> testing MB 02 ...
> testing MB 03 ...
> testing MB 04 ...
> testing MB 05 ...
> testing MB 06 ...
> testing MB 07 ...
> testing MB 08 ...
> testing MB 09 ...
> testing MB 10 ...
> testing MB 11 ...
> testing MB 12 ...
> testing MB 13 ...
> testing MB 14 ...
> testing MB 15 ...
> testing MB 16 ...
> test passed !
> Flash: 4 MiB
> 
> amcore$
> 
> *** Unexpected exception ***
> Vector Number: 3  Format: 04  Fault Status: 4
> 
> PC: 00fe910a    SR: 00002000    SP: 00ed8af0
> D0: 00002c1b    D1: 0000001b    D2: 00400000    D3: 00ee8b76
> D4: ffc12d08    D5: ffffffff    D6: 00ffad57    D7: 00ee8b76
> A0: 00ee8b76    A1: 00fe9604    A2: 00ee8bc6    A3: 00ffd400
> A4: 00ff8167    A5: 00ffbb00    A6: 00ed8b48
> 
> *** Please Reset Board! ***
> 
> 
> Debugging seems that the issue is returning from the timer interrupt handler, exactly here:
> 
> 
> #define RESTORE_ALL						\
> 	moveml	%sp@,%d0-%d7/%a0-%a6;				\
> 	addl	#60,%sp;		/* space for 15 regs */ \
> 	rte  <<< ---- HERE , returning
> 
> _int_handler:
> 	SAVE_ALL
> 	movel	%sp,%sp at -
> 	bsr int_handler
> 	addql	#4,%sp
> 	RESTORE_ALL
> 
> 
> The issue is very strange, everything works well, relocation to ram included, i test the SDRAM with cache disabled (then re-enabled), so there must be no issues on the memory. Calls and returning from C functions called in board_init_r also works fine, exception happen only returning from the interrupt.
> 
> I am working on the issue, but every help is really appreciated.
> 
> Regards,
> angelo dureghello
> 
> 

Hello,

finally, i solved it.

When a cpu behavior is strangely different from what the datasheet says (after reading it carefully many time), it worth a try to see the chip ERRATA:

MCF5307ER.pdf says:

35 : Corrupted Return PC in Exception Stack Frame

Using the workaround suggested (setting C/I bit of CS MASK register) solve the issue.

This explain why all other coldfire models works with the same u-boot code without issues.
Really hope this can help for who will have the same issue.

I would be happy to share the m530x /cpu files, but i don't know the exact procedure used here.
Let me know if and how i can contribute.

regards

 
Angelo D.



More information about the U-Boot mailing list