summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2013-06-10 10:41:04 -0700
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-11-26 19:10:38 +0100
commitcb73a8410cb80c8ff86e3d860ac3c8ae458b19ac (patch)
tree1172582fd4fb0835597dfdccceb581113cd30b68 /src/lib
parent8adf7a2c50dcb3a7f09b66c1f3918ab195d8c5ec (diff)
Clean up POST codes for Boot State machine
Now that there is a clearly defined boot state machine we can add some useful post codes to indicate the current point in the state machine by having it log a post code before the execution of each state. This removes the currently defined POST codes that were used by hardwaremain in favor of a new contiguous range that are defined for each boot state. The reason for this is that the existing codes are mostly used to indicate when something is done, which is confusing for actual debug because POST code debugging relies on knowing what is about to happen (to know what may be at fault) rather than what has just finished. One additonal change is added during device init step as this step often does the bulk of the work, and frequently logs POST codes itself. Therefore in order to keep better track of what device is being initialized POST_BS_DEV_INIT is logged before each device is initialized. interrupted boot with reset button and gathered the eventlog. Mosys has been extended to decode the well-known POST codes: 26 | 2013-06-10 10:32:48 | System boot | 120 27 | 2013-06-10 10:32:48 | Last post code in previous boot | 0x75 | Device Initialize 28 | 2013-06-10 10:32:48 | Extra info from previous boot | PCI | 00:16.0 29 | 2013-06-10 10:32:48 | Reset Button 30 | 2013-06-10 10:32:48 | System Reset Change-Id: Ida1e1129d274d28cbe8e49e4a01483e335a03d96 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/58106 Reviewed-on: http://review.coreboot.org/4231 Tested-by: build bot (Jenkins) Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/hardwaremain.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c
index 501591f114..fed153be48 100644
--- a/src/lib/hardwaremain.c
+++ b/src/lib/hardwaremain.c
@@ -24,6 +24,7 @@
#include <bootstate.h>
#include <console/console.h>
+#include <console/post_codes.h>
#include <version.h>
#include <device/device.h>
#include <device/pci.h>
@@ -83,6 +84,7 @@ struct boot_phase {
struct boot_state {
const char *name;
boot_state_t id;
+ u8 post_code;
struct boot_phase phases[2];
boot_state_t (*run_state)(void *arg);
void *arg;
@@ -96,6 +98,7 @@ struct boot_state {
{ \
.name = #state_, \
.id = state_, \
+ .post_code = POST_ ## state_, \
.phases = { { NULL, 0 }, { NULL, 0 } }, \
.run_state = run_func_, \
.arg = NULL, \
@@ -138,7 +141,6 @@ static boot_state_t bs_dev_enumerate(void *arg)
{
/* Find the devices we don't have hard coded knowledge about. */
dev_enumerate();
- post_code(POST_DEVICE_ENUMERATION_COMPLETE);
return BS_DEV_RESOURCES;
}
@@ -146,9 +148,9 @@ static boot_state_t bs_dev_enumerate(void *arg)
static boot_state_t bs_dev_resources(void *arg)
{
timestamp_add_now(TS_DEVICE_CONFIGURE);
+
/* Now compute and assign the bus resources. */
dev_configure();
- post_code(POST_DEVICE_CONFIGURATION_COMPLETE);
return BS_DEV_ENABLE;
}
@@ -156,9 +158,9 @@ static boot_state_t bs_dev_resources(void *arg)
static boot_state_t bs_dev_enable(void *arg)
{
timestamp_add_now(TS_DEVICE_ENABLE);
+
/* Now actually enable devices on the bus */
dev_enable();
- post_code(POST_DEVICES_ENABLED);
return BS_DEV_INIT;
}
@@ -166,9 +168,9 @@ static boot_state_t bs_dev_enable(void *arg)
static boot_state_t bs_dev_init(void *arg)
{
timestamp_add_now(TS_DEVICE_INITIALIZE);
+
/* And of course initialize devices on the bus */
dev_initialize();
- post_code(POST_DEVICES_INITIALIZED);
return BS_POST_DEVICE;
}
@@ -194,7 +196,6 @@ static boot_state_t bs_os_resume_check(void *arg)
boot_states[BS_OS_RESUME].arg = wake_vector;
return BS_OS_RESUME;
}
- post_code(0x8a);
#endif
timestamp_add_now(TS_CBMEM_POST);
@@ -376,6 +377,8 @@ static void bs_walk_state_machine(void)
bs_sample_time(state);
+ post_code(state->post_code);
+
next_id = state->run_state(state->arg);
printk(BS_DEBUG_LVL, "BS: Exiting %s state.\n", state->name);