diff options
author | Marc Jones <marc.jones@se-eng.com> | 2013-10-29 17:32:00 -0600 |
---|---|---|
committer | Marc Jones <marc.jones@se-eng.com> | 2013-11-08 19:55:17 +0100 |
commit | 2a58ecde78350902ac47145a3f2dba063bce3375 (patch) | |
tree | 346baf64bf874418a0a1a8d242bfed89959ff1d7 /src/include/device/device.h | |
parent | 86655cf835900d54569a867de05e56ccd71db879 (diff) | |
download | coreboot-2a58ecde78350902ac47145a3f2dba063bce3375.tar.xz |
Add new finalize functions for devices and chips
Many chipset devices require additional configuration after
device init. It is not uncommmon for a device early in the devicetree
list to need to change a setting after a device later in the tree does
PCI init. A final function call has been added to device ops to handle
this case. It is called prior to coreboot table setup.
Another problem that is often seen is that the chipset or mainboard
need to do some final cleanup just before loading the OS. The chip
finalize has been added for this case. It is call after all coreboot
tables are setup and the payload is ready to be called.
Similar functionality could be implemented with the hardwaremain
states, but those don't fit well in the device tree function pointer
structure and should be used sparingly.
Change-Id: Ib37cce104ae41ec225a8502942d85e54d99ea75f
Signed-off-by: Marc Jones <marc.jones@se-eng.com>
Reviewed-on: http://review.coreboot.org/4012
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@google.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/include/device/device.h')
-rw-r--r-- | src/include/device/device.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/include/device/device.h b/src/include/device/device.h index c0e6e0f6c6..fec0497508 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -22,7 +22,9 @@ struct pnp_mode_ops; struct chip_operations { void (*enable_dev)(struct device *dev); void (*init)(void *chip_info); + void (*final)(void *chip_info); unsigned int initialized : 1; + unsigned int finalized : 1; const char *name; }; @@ -35,6 +37,7 @@ struct device_operations { void (*set_resources)(device_t dev); void (*enable_resources)(device_t dev); void (*init)(device_t dev); + void (*final)(device_t dev); unsigned int (*scan_bus)(device_t bus, unsigned int max); void (*enable)(device_t dev); void (*disable)(device_t dev); @@ -140,6 +143,8 @@ void dev_configure(void); void dev_enable(void); void dev_initialize(void); void dev_optimize(void); +void dev_finalize(void); +void dev_finalize_chips(void); /* Generic device helper functions */ int reset_bus(struct bus *bus); |