Please do not fork.

Eric W. Biederman ebiederman at lnxi.com
Mon Jul 21 19:28:00 CEST 2003


Greg Watson <gwatson at lanl.gov> writes:

> 
> The issue for me is that I need to have static initialization working before I
> can continue, so my intention is build something that will hopefully be
> acceptable to everyone. I can probably merge the chip and device structures that
> 
> gives me a way forward without replicating what Eric is doing. However a single
> call to enumerate_static_devices, particularly at the current location, is NOT
> acceptable to me.

That is fine.  What I have right now in hardwaremain is just a first pass not 
a final solution to this problem.
 
> Here's my suggestion to move forward:
> 
> 1. I need to be able to enable/configure static devices at specific points in
> hardwaremain, particularly on entry,  after console_init and prior to pci
> enumeration. I suggest a routine called device_configure()  that is passed the
> root of the device tree and a pass flag:
> 
> void device_configure(struct device *, enum dev_pass)
> 
> enum dev_pass {
> 	DEV_PASS_PRE_CONSOLE,
> 	DEV_PASS_PRE_PCI,
> 	DEV_PASS_ENUMERATE,
> 	DEV_PASS_CONFIGURE,
> 	DEV_PASS_ENABLE,
> 	DEV_PASS_INITIALIZE
> };
> 
> Calls to device_configure() with the appropriate flag will be inserted in the
> appropriate locations in hardwaremain. More flags/calls call be added if
> necessary. Calls to dev_enumerate(), dev_configure(), etc. to probe and
> configure dynamic bus devices will be replaced with calls to device_configure()
> with the appropriate flag. Dynamic devices will be added to the device tree as
> appropriate.

I have nits to pick with a single device_configure().  After we have something
working I will start picking them.

> 2. New fields added to struct device, including a 'static' flag that is set for
> static devices, and something analogous to the chip structure for static device
> info.

Reasonable.
 
> 3. Continue use of the chip.h files in configuration directories (although the
> name could be changed to device.h) and the 'register' configuration directive.

I don't have a problem with that.
 
> 4. Removal of all device specific calls from hardwaremain, such as
> 'init_timer()' into static initialization files using (4) above.

OK.  I think.

In general timer services are a generic part of LinuxBIOS and just like
the console we may need an init routine.  We have avoided it many times
in the past by having a static variable and having the timer code magically
do something the very first time it is called.

When I built code that could be compiled with romcc I discovered that idiom
would not always work.
 
> 5. The configuration process will build a static device tree that will be called
> 
> device_{target}.c in the target build directory and linked with the linuxbios
> image.
> 
> My intention is to start coding this tomorrow, so if anyone has any major
> objections/suggestions, please let me know asap.

Long term I would like to see if we can get the cpus into this structure as
well.  But expressing the dependencies is an interesting process.

I plan on reviewing what you have when I get back from OLS.

Eric




More information about the coreboot mailing list