[U-Boot] arm: timer_init() and bss (relocation)

Hello,
because I still have problems where I think the problem is the relocation, I've had a look at some timer code.
E.g. in arch/arm/cpu/arm926ejs/kirkwood/timer.c on top there is
struct kwtmr_registers *kwtmr_regs = (struct kwtmr_registers *)KW_TIMER_BASE;
which is used in timer_init().
In arch/arm/cpu/armv7/omap-common/timer.c we have
static struct gptimer *timer_base = (struct gptimer *)CONFIG_SYS_TIMERBASE;
which is used in timer_init() too.
(I assume similiar code is used in more files, I've just had a look at those two.)
timer_init() is called in board_init_f() through init_sequence, that means before relocation.
Did I miss something, or I'm right that this is a problem because those two variables are stored in bss but are accessed before relocation?
Regards,
Alexander

On Fri, Jan 21, 2011 at 11:07 PM, Alexander Holler holler@ahsoftware.de wrote:
Hello,
because I still have problems where I think the problem is the relocation, I've had a look at some timer code.
E.g. in arch/arm/cpu/arm926ejs/kirkwood/timer.c on top there is
struct kwtmr_registers *kwtmr_regs = (struct kwtmr_registers *)KW_TIMER_BASE;
which is used in timer_init().
In arch/arm/cpu/armv7/omap-common/timer.c we have
static struct gptimer *timer_base = (struct gptimer *)CONFIG_SYS_TIMERBASE;
which is used in timer_init() too.
(I assume similiar code is used in more files, I've just had a look at those two.)
timer_init() is called in board_init_f() through init_sequence, that means before relocation.
Did I miss something, or I'm right that this is a problem because those two variables are stored in bss but are accessed before relocation?
These are both initialized data so they do not go in bss.
Regards,
Alexander _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

Am 22.01.2011 07:38, schrieb John Rigby:
On Fri, Jan 21, 2011 at 11:07 PM, Alexander Hollerholler@ahsoftware.de wrote:
Hello,
because I still have problems where I think the problem is the relocation, I've had a look at some timer code.
E.g. in arch/arm/cpu/arm926ejs/kirkwood/timer.c on top there is
struct kwtmr_registers *kwtmr_regs = (struct kwtmr_registers *)KW_TIMER_BASE;
which is used in timer_init().
In arch/arm/cpu/armv7/omap-common/timer.c we have
static struct gptimer *timer_base = (struct gptimer *)CONFIG_SYS_TIMERBASE;
which is used in timer_init() too.
(I assume similiar code is used in more files, I've just had a look at those two.)
timer_init() is called in board_init_f() through init_sequence, that means before relocation.
Did I miss something, or I'm right that this is a problem because those two variables are stored in bss but are accessed before relocation?
These are both initialized data so they do not go in bss.
Correct, I should have a look into u-boot.map before writing this mail. Thanks for the pointer.
But this leads me to the question what happens with the stuff in the data section. Seems I should have again a look at the lowlevel stuff to understand that.
Thanks,
Alexander

Dear Alexander Holler,
Am 22.01.2011 07:38, schrieb John Rigby:
On Fri, Jan 21, 2011 at 11:07 PM, Alexander Hollerholler@ahsoftware.de wrote:
Hello,
because I still have problems where I think the problem is the relocation, I've had a look at some timer code.
E.g. in arch/arm/cpu/arm926ejs/kirkwood/timer.c on top there is
struct kwtmr_registers *kwtmr_regs = (struct kwtmr_registers *)KW_TIMER_BASE;
which is used in timer_init().
In arch/arm/cpu/armv7/omap-common/timer.c we have
static struct gptimer *timer_base = (struct gptimer *)CONFIG_SYS_TIMERBASE;
which is used in timer_init() too.
(I assume similiar code is used in more files, I've just had a look at those two.)
timer_init() is called in board_init_f() through init_sequence, that means before relocation.
Did I miss something, or I'm right that this is a problem because those two variables are stored in bss but are accessed before relocation?
These are both initialized data so they do not go in bss.
Correct, I should have a look into u-boot.map before writing this mail. Thanks for the pointer.
But this leads me to the question what happens with the stuff in the data section. Seems I should have again a look at the lowlevel stuff to understand that.
Intuitively (without looking at the code) I would think that CONST DATA is ok, but non const, initialized data cannot work because it is not initialized before relocation...
Best Regards, Reinhard

Le 22/01/2011 08:21, Reinhard Meyer a écrit :
But this leads me to the question what happens with the stuff in the data section. Seems I should have again a look at the lowlevel stuff to understand that.
Intuitively (without looking at the code) I would think that CONST DATA is ok, but non const, initialized data cannot work because it is not initialized before relocation...
To be precise:
1. const data are readable before and after relocation.
2. non-const initialized data are readable only until relocated, and then writable as well.
3. BSS data cannot and must not be used at all until relocated, and are then zeroed out before board_init_r() starts.
Best Regards, Reinhard
Amicalement,
participants (4)
-
Albert ARIBAUD
-
Alexander Holler
-
John Rigby
-
Reinhard Meyer