diff options
author | Russell Currey <ruscur@russell.cc> | 2015-10-23 16:15:26 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2015-11-09 14:13:25 +1100 |
commit | dd7980e6d9ffeaac4ae440e6d2f9e8aa88e7ebc7 (patch) | |
tree | 992948033fb395bcc24186fa8f76b295dfeaaf63 /core/platform.c | |
parent | a0be766f49e1161014f0a02dc3b2fa4800592e8f (diff) | |
download | skiboot-dd7980e6d9ffeaac4ae440e6d2f9e8aa88e7ebc7.zip skiboot-dd7980e6d9ffeaac4ae440e6d2f9e8aa88e7ebc7.tar.gz skiboot-dd7980e6d9ffeaac4ae440e6d2f9e8aa88e7ebc7.tar.bz2 |
console: Completely flush output buffer before power down and reboot
Completely flush the output buffer of the console driver before
power down and reboot. Implements the flushing function for uart
consoles, which includes the astbmc and rhesus platforms.
Adds a new function, flush(), to the con_ops struct that allows
each console driver to specify how their output buffers are flushed.
In the cec_power_down and cec_reboot functions, the flush function
of the driver is called if it exists.
This fixes an issue where some console output is sometimes lost before
power down or reboot in uart consoles. If this issue is also prevalent
in other console types then it can be fixed later by adding a .flush
to that driver's con_ops.
Signed-off-by: Russell Currey <ruscur@russell.cc>
[stewart@linux.vnet.ibm.com: reduce diff size, change flush function name]
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'core/platform.c')
-rw-r--r-- | core/platform.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/core/platform.c b/core/platform.c index 12c4ec2..865d5b2 100644 --- a/core/platform.c +++ b/core/platform.c @@ -37,6 +37,8 @@ static int64_t opal_cec_power_down(uint64_t request) { printf("OPAL: Shutdown request type 0x%llx...\n", request); + flush_console_driver(); + if (platform.cec_power_down) return platform.cec_power_down(request); @@ -48,6 +50,8 @@ static int64_t opal_cec_reboot(void) { printf("OPAL: Reboot request...\n"); + flush_console_driver(); + #ifdef ENABLE_FAST_RESET /* Try a fast reset first */ fast_reset(); |