summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/lib/cpu.c3
-rw-r--r--src/console/post.c16
-rw-r--r--src/device/device.c17
-rw-r--r--src/include/console/console.h5
-rw-r--r--src/include/pc80/mc146818rtc.h2
5 files changed, 41 insertions, 2 deletions
diff --git a/src/arch/x86/lib/cpu.c b/src/arch/x86/lib/cpu.c
index bddfe1ae12..4a3bd964cd 100644
--- a/src/arch/x86/lib/cpu.c
+++ b/src/arch/x86/lib/cpu.c
@@ -256,6 +256,8 @@ void cpu_initialize(unsigned int index)
die("CPU: missing cpu device structure");
}
+ post_log_path(cpu);
+
/* Find what type of cpu we are dealing with */
identify_cpu(cpu);
printk(BIOS_DEBUG, "CPU: vendor %s device %x\n",
@@ -285,6 +287,7 @@ void cpu_initialize(unsigned int index)
cpu->initialized = 1;
cpu->ops->init(cpu);
}
+ post_log_clear();
printk(BIOS_INFO, "CPU #%d initialized\n", index);
diff --git a/src/console/post.c b/src/console/post.c
index 74886834ce..35cc0e85e1 100644
--- a/src/console/post.c
+++ b/src/console/post.c
@@ -114,6 +114,22 @@ void post_log_extra(u32 value)
spin_unlock(&cmos_post_lock);
}
+
+void post_log_path(struct device *dev)
+{
+ if (dev) {
+ /* Encode path into lower 3 bytes */
+ u32 path = dev_path_encode(dev);
+ /* Upper byte contains the log type */
+ path |= CMOS_POST_EXTRA_DEV_PATH << 24;
+ post_log_extra(path);
+ }
+}
+
+void post_log_clear(void)
+{
+ post_log_extra(0);
+}
#endif /* CONFIG_CMOS_POST_EXTRA */
#endif /* !__PRE_RAM__ */
diff --git a/src/device/device.c b/src/device/device.c
index a2a64b2cae..dee797ed35 100644
--- a/src/device/device.c
+++ b/src/device/device.c
@@ -66,10 +66,12 @@ void dev_initialize_chips(void)
/* Initialize chip if we haven't yet. */
if (dev->chip_ops && dev->chip_ops->init &&
!dev->chip_ops->initialized) {
+ post_log_path(dev);
dev->chip_ops->init(dev->chip_info);
dev->chip_ops->initialized = 1;
}
}
+ post_log_clear();
}
/**
@@ -841,8 +843,10 @@ void assign_resources(struct bus *bus)
dev_path(curdev));
continue;
}
+ post_log_path(curdev);
curdev->ops->set_resources(curdev);
}
+ post_log_clear();
printk(BIOS_SPEW, "%s assign_resources, bus %d link: %d\n",
dev_path(bus->dev), bus->secondary, bus->link_num);
}
@@ -865,14 +869,17 @@ static void enable_resources(struct bus *link)
struct bus *c_link;
for (dev = link->children; dev; dev = dev->sibling) {
- if (dev->enabled && dev->ops && dev->ops->enable_resources)
+ if (dev->enabled && dev->ops && dev->ops->enable_resources) {
+ post_log_path(dev);
dev->ops->enable_resources(dev);
+ }
}
for (dev = link->children; dev; dev = dev->sibling) {
for (c_link = dev->link_list; c_link; c_link = c_link->next)
enable_resources(c_link);
}
+ post_log_clear();
}
/**
@@ -912,6 +919,8 @@ unsigned int scan_bus(struct device *busdev, unsigned int max)
return max;
}
+ post_log_path(busdev);
+
do_scan_bus = 1;
while (do_scan_bus) {
struct bus *link;
@@ -971,6 +980,7 @@ void dev_enumerate(void)
return;
}
scan_bus(root, 0);
+ post_log_clear();
printk(BIOS_INFO, "done\n");
}
@@ -1151,8 +1161,10 @@ static void init_link(struct bus *link)
struct device *dev;
struct bus *c_link;
- for (dev = link->children; dev; dev = dev->sibling)
+ for (dev = link->children; dev; dev = dev->sibling) {
+ post_log_path(dev);
init_dev(dev);
+ }
for (dev = link->children; dev; dev = dev->sibling) {
for (c_link = dev->link_list; c_link; c_link = c_link->next)
@@ -1183,6 +1195,7 @@ void dev_initialize(void)
/* Now initialize everything. */
for (link = dev_root.link_list; link; link = link->next)
init_link(link);
+ post_log_clear();
printk(BIOS_INFO, "Devices initialized\n");
show_all_devs(BIOS_SPEW, "After init.");
diff --git a/src/include/console/console.h b/src/include/console/console.h
index e6962cc69d..5750b4a525 100644
--- a/src/include/console/console.h
+++ b/src/include/console/console.h
@@ -74,8 +74,13 @@ void console_tx_flush(void);
void post_code(u8 value);
#if CONFIG_CMOS_POST_EXTRA
void post_log_extra(u32 value);
+struct device;
+void post_log_path(struct device *dev);
+void post_log_clear(void);
#else
#define post_log_extra(x) do {} while (0)
+#define post_log_path(x) do {} while (0)
+#define post_log_clear() do {} while (0)
#endif
/* this function is weak and can be overridden by a mainboard function. */
void mainboard_post(u8 value);
diff --git a/src/include/pc80/mc146818rtc.h b/src/include/pc80/mc146818rtc.h
index b0e9f2cc03..fd403087a6 100644
--- a/src/include/pc80/mc146818rtc.h
+++ b/src/include/pc80/mc146818rtc.h
@@ -217,6 +217,8 @@ static inline enum cb_err get_option(void *dest __attribute__((unused)),
#define CMOS_POST_BANK_1_OFFSET (CMOS_POST_OFFSET + 2)
#define CMOS_POST_BANK_1_EXTRA (CMOS_POST_OFFSET + 7)
+#define CMOS_POST_EXTRA_DEV_PATH 0x01
+
void cmos_post_log(void);
#endif /* CONFIG_CMOS_POST */