
Dear Graeme Russ,
In message 1313670862-31216-1-git-send-email-graeme.russ@gmail.com you wrote:
NOTE: This is an x86 only patch - I didn't include x86 in the patch heading because it is a proof of concept for a global patch - Sorry for the blatant etiquette violation ;)
Don't worry. For an RFC tyhis is OK.
Replace the init_fnc_t *init_sequence[] style init sequence with one based on the Linux __initcall macros.
Functions are declared as initialisation functions by using the new INIT_FUNC() macro. The three parameters to INIT_FUNC() are:
- Type - f = pre-relocation (flash), r = post-relocation (RAM)
- Sequence - Lower numbers are run first
- Function - The function to call during the init sequence
For general remarks please see my previous comment to your older posting about this topic here: http://article.gmane.org/gmane.comp.boot-loaders.u-boot/105824
For a board to add an arbitrary initialisation function is trivial - simply add a INIT_FUNC() entry with an appropriate sequence number
This is actually hte biffest voncern I have: I cannot imagine how you will try to figure out the exact init sequence when writing the code (or, even worse, when reading somebody else's code).
I imagine the sequence numbers could be #defined, but I don't exactly now what the linker will do - I use leading zeros in the sequence numbers to ensure correct ordering.
This is another concern: what exactly will the linker do, and different versions of linkers with differen options and/or levels of optimization?
Best regards,
Wolfgang Denk