aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEva Huang <evahuang@google.com>2018-12-21 15:38:10 +0800
committerEva Huang <evahuang@google.com>2019-01-31 06:05:03 +0000
commitcdf5d6c38174a197862b9fa2688bac3d8849b601 (patch)
tree112c82f5f58842069d0c01da0ffbc01dc2d6f97e
parentc0b9eff44daa057b38561020665ddc76c3ed381b (diff)
fs/pstore: Append UART on status to console-ramoopsandroid-q-preview-1_r0.1
Show "Console is ENABLED" or "Console is DISABLED" at the end of console-ramoops. Bug: 117803902 Test: verify contents of below files: /data/system/dropbox/SYSTEM_LAST_KMSG /sys/fs/pstore/console-ramoops Change-Id: I39b800dcf44b8a50c931e95387b09fe495738d29 Signed-off-by: Eva Huang <evahuang@google.com>
-rwxr-xr-xdrivers/htc_debug/stability/htc_bootloader_log.c53
1 files changed, 49 insertions, 4 deletions
diff --git a/drivers/htc_debug/stability/htc_bootloader_log.c b/drivers/htc_debug/stability/htc_bootloader_log.c
index d4e10b7931e0..7216e14fffb0 100755
--- a/drivers/htc_debug/stability/htc_bootloader_log.c
+++ b/drivers/htc_debug/stability/htc_bootloader_log.c
@@ -39,9 +39,12 @@ struct bldr_log_header {
};
char *bl_last_log_buf, *bl_cur_log_buf;
-char *bl_last_tz_log_buf;
+char *bl_last_tz_log_buf, *uart_status_buf;
unsigned long bl_last_log_buf_size, bl_cur_log_buf_size;
-size_t bl_last_tz_log_buf_size;
+size_t bl_last_tz_log_buf_size, uart_status_buf_size;
+bool uart_on = false;
+static const char *uart_on_str ="\nConsole is ENABLED";
+static const char *uart_off_str ="\nConsole is DISABLED";
static int bldr_log_check_header(struct bldr_log_header *header, unsigned long bldr_log_size)
{
@@ -122,8 +125,45 @@ ssize_t bldr_log_read_once(char __user *userbuf, ssize_t klog_size)
}
/**
+ * Update uart_on flag when finding "uart=1" in kernel command line
+ */
+static int __init uarton_status(char *str)
+{
+ uart_on = true;
+ return 1;
+}
+__setup("uart=1", uarton_status);
+
+/**
+ * Init the value of uart_status_buf.
+ *
+ * uart on, set "Console is ENABLED"
+ * uart off, set "Console is DISABLED"
+ */
+static int uart_status_setup(void)
+{
+ const char *uart_status_str;
+
+ if (uart_on) {
+ uart_status_str = uart_on_str;
+ } else {
+ uart_status_str = uart_off_str;
+ }
+
+ uart_status_buf_size = strlen(uart_status_str) + 1;
+ uart_status_buf = kmalloc(uart_status_buf_size, GFP_KERNEL);
+ if (!uart_status_buf) {
+ uart_status_buf_size = 0;
+ pr_warn("%s: failed to alloc uart status buffer\n", __func__);
+ return -ENOMEM;
+ }
+ memcpy(uart_status_buf, uart_status_str, uart_status_buf_size);
+ return 0;
+}
+
+/**
* Read last bootloader logs, current bootloader logs, kernel logs,
- * last bootloader TZ logs in that order.
+ * last bootloader TZ logs, uart status in that order.
*
* Handle reads that overlap different regions so the file appears like one
* file to the reader.
@@ -143,7 +183,8 @@ ssize_t bldr_log_read(const void *lastk_buf, ssize_t lastk_size, char __user *us
{ .buf = bl_last_log_buf, .size = bl_last_log_buf_size },
{ .buf = bl_cur_log_buf, .size = bl_cur_log_buf_size, },
{ .buf = lastk_buf, .size = lastk_size },
- { .buf = bl_last_tz_log_buf, .size = bl_last_tz_log_buf_size }
+ { .buf = bl_last_tz_log_buf, .size = bl_last_tz_log_buf_size },
+ { .buf = uart_status_buf, .size = uart_status_buf_size }
};
pos = *ppos;
@@ -265,6 +306,8 @@ int bldr_log_init(void)
}
if (!num_reg)
pr_warn("%s: can't find address resource\n", __func__);
+
+ uart_status_setup();
} else
pr_warn("%s: can't find compatible '%s'\n", __func__, RAMLOG_COMPATIBLE_NAME);
@@ -278,4 +321,6 @@ void bldr_log_release(void)
if (bl_cur_log_buf)
kfree(bl_cur_log_buf);
+
+ kfree(uart_status_buf);
}