Skip to contentSkip to conversation

register init

U-Boot-Users Hinko Kocevar 1 participant 2 messages May 1, 2005 – May 5, 2005

lore
Share & tools
lore
#0 lore raw

Hello @LL,

i've ported u-boot to trizeps2 cpu module. It can boot and use tftp when running under BDI debugger, so I guess basic parts are ported fine. When I try to run board standalone it kind of hangs there... no output on serial console.

After few days of debugging I established that lowlevel_init() won't set the GAFR0_x register(s) to defined value set in u-boot board config. Under BDI I can see that at this point PC jumps to some random address - or throws an exception that BDI intercepts, if I set 'VECTOR CATCH 0xde' directive in BDI config.

After exception caught by the BDI I can set PC back few instrucions and board would boot, console lives!

I've added few nop instructions* after ldr and str invocations that are setting GAFRx registers, but that just delays the data abort seen before (eg. it would happen when setting MSCx registers).

* As xscale manual suggests for imprecise data aborts.

Further, it is not always the same exception that occurs, it is data abort, undefined instruction, and sometimes prefetch aborts are seen also.

And more, when the board boots by itself, which happens once in a while, I can see it is looping inside serial - getc() code waiting for input. But there is nothing shown on terminal and nothing can be input, since GAFR1_L is not setup to provide FFUART function.

I've attached objdump and BDI output while single-stepping around critical section.

Any ideas?

reagrds,
hk

Signature · 9 lines
hinko <dot> kocevar <at> iskramedical <dot> si
Hinko Kocevar, embedded systems developer
Iskra Medical d.o.o., Stegne 23, 1k LJ, SLO-EU

	"A? r?n"	|	[Analects XII:22]
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: single_step-bdi_ML
Url: http://lists.denx.de/pipermail/u-boot/attachments/20050501/e4df42f6/attachment.txt 
#1 lore raw
Quoted 9 lines · Hinko Kocevar

After few days of debugging I established that lowlevel_init() won't set the GAFR0_x register(s) to defined value set in u-boot board config. Under BDI I can see that at this point PC jumps to some random address - or throws an exception that BDI intercepts, if I set 'VECTOR CATCH 0xde' directive in BDI config.

After exception caught by the BDI I can set PC back few instrucions and board would boot, console lives!

I've resolved the issue by moving GAFR register init ahead of GPSR,GPCR and GPDR register init... Although PXA datasheet suggests it should be done the other way around (as with other PXA based boards) it does not hold true for me.

I guess it is somekind of hardware perk, but I don't have cpu module schematics availaable to confirm...

Signature · 5 lines
hinko <dot> kocevar <at> iskramedical <dot> si
Hinko Kocevar, embedded systems developer
Iskra Medical d.o.o., Stegne 23, 1k LJ, SLO-EU

	"A? r?n"	|	[Analects XII:22]