Skip to contentSkip to conversation

environment access before relocation does not work on (some) arm

U-Boot Matthias Fuchs 2 participants 4 messages Jun 29, 2012 – Jul 3, 2012

lore
Share & tools
lore
#0 lore raw

Hi,

I just noticed that using getenv (and friends) does not work on ARM (namely i.MX28) from board_init_f() after running through the init_sequence.

So getenv_ulong() always returns the given default.
So the baudrate on affected boards is always set by CONFIG_BAUDRATE and cannot be adjusted by the baudrate env variable and so on. Environment access before relocation is required for some functions:
pram, fdtcontroladdr, baudrate, ...

Env access does not work before env_relocate() in board_init_r().

Didn't this behave different sometimes before? Even after the big env rework?

Matthias

#1 lore raw

Dear Matthias Fuchs,

Quoted 4 lines · In message <[email protected]> you wrote:

I just noticed that using getenv (and friends) does not work on ARM (namely i.MX28) from board_init_f() after running through the init_sequence.

This is normal, and documented. Before relocation, you must not use getenv().

Quoted 1 line

Env access does not work before env_relocate() in board_init_r().

It does, but you have to play by the rules, i. e. use getenv_f() instead.

Quoted 2 lines

Didn't this behave different sometimes before? Even after the big env rework?

No. The use of getenv() before relocation has never been supported. It may have worked (by pure chance) on some systems, but that's all.

Best regards,

Wolfgang Denk

Signature · 4 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Time is an illusion perpetrated by the manufacturers of space.
#2 lore raw

Hi,

Quoted 10 lines · Wolfgang Denk

Dear Matthias Fuchs,

Quoted 4 lines · In message <[email protected]> you wrote:

I just noticed that using getenv (and friends) does not work on ARM (namely i.MX28) from board_init_f() after running through the init_sequence.

This is normal, and documented. Before relocation, you must not use getenv().

Yes, I am aware of this. I even think that the getenv() implementation falls back to getenv_f() before relocation.

Quoted 5 lines
Quoted 2 lines

Env access does not work before env_relocate() in board_init_r().

It does, but you have to play by the rules, i. e. use getenv_f() instead.

Yes, I did not care about where my env comes from :-) So env_sf.c does not support an early env at all. Running on an i.MX28 with env in a SPI flash I probably need SPI support in my SPL and an improved env_sf.c.

... and all this to get CONFIG_PRAM working in arch/arm/lib/board.c. So I will stuck at using a constant pram value for the moment. This works.

Quoted 6 lines
Quoted 3 lines

Didn't this behave different sometimes before? Even after the big env rework?

No. The use of getenv() before relocation has never been supported. It may have worked (by pure chance) on some systems, but that's all.

Of course. My question was not very precise.

Matthias

Quoted 5 lines

Best regards,

Wolfgang Denk

#3 lore raw

Dear Matthias Fuchs,

Quoted 5 lines · In message <[email protected]> you wrote:
Quoted 3 lines

This is normal, and documented. Before relocation, you must not use getenv().

Yes, I am aware of this. I even think that the getenv() implementation falls back to getenv_f() before relocation.

This is not guaranteed to work.

Quoted 3 lines

Yes, I did not care about where my env comes from :-) So env_sf.c does not support an early env at all. Running on an i.MX28 with env in a SPI flash I probably need SPI support in my SPL and an improved env_sf.c.

This is a bigger topic. We all wait anxiously for Mareks group to implement a clean device driver model, so we can clean up and unify all this code. I am aware that it needs it.

Best regards,

Wolfgang Denk

Signature · 6 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Remember, Information is not knowledge;  Knowledge  is  not  Wisdom;
Wisdom is not truth; Truth is not beauty; Beauty is not love; Love is
not music; Music is the best."                          - Frank Zappa