summaryrefslogtreecommitdiffstats
path: root/board/google
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-11-12 22:42:09 -0700
committerSimon Glass <sjg@chromium.org>2014-11-21 07:34:11 +0100
commitd1cd045982b1e1e4db2c1cc2b2b932f739b78a11 (patch)
tree042be9d3ac848c6799756f5e7fc6c1a6391d1d2a /board/google
parentfce7b2768364366bd4c4af9188186f6b3f9c2fe8 (diff)
downloadtalos-obmc-uboot-d1cd045982b1e1e4db2c1cc2b2b932f739b78a11.tar.gz
talos-obmc-uboot-d1cd045982b1e1e4db2c1cc2b2b932f739b78a11.zip
x86: Emit post codes in startup code for Chromebooks
On x86 it is common to use 'post codes' which are 8-bit hex values emitted from the code and visible to the user. Traditionally two 7-segment displays were made available on the motherboard to show the last post code that was emitted. This allows diagnosis of a boot problem since it is possible to see where the code got to before it died. On modern hardware these codes are not normally visible. On Chromebooks they are displayed by the Embedded Controller (EC), so it is useful to emit them. We must enable this feature for the EC to see the codes, so add an option for this. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'board/google')
-rw-r--r--board/google/chromebook_link/Kconfig4
-rw-r--r--board/google/common/early_init.S21
2 files changed, 24 insertions, 1 deletions
diff --git a/board/google/chromebook_link/Kconfig b/board/google/chromebook_link/Kconfig
index 975d557e1c..9c715ba765 100644
--- a/board/google/chromebook_link/Kconfig
+++ b/board/google/chromebook_link/Kconfig
@@ -12,4 +12,8 @@ config SYS_SOC
config SYS_CONFIG_NAME
default "chromebook_link"
+config EARLY_POST_CROS_EC
+ bool "Enable early post to Chrome OS EC"
+ default y
+
endif
diff --git a/board/google/common/early_init.S b/board/google/common/early_init.S
index cf70ae40c6..7017185d06 100644
--- a/board/google/common/early_init.S
+++ b/board/google/common/early_init.S
@@ -6,5 +6,24 @@
.globl early_board_init
early_board_init:
- /* No 32-bit board specific initialisation */
+ /* Enable post codes to EC */
+#ifdef CONFIG_EARLY_POST_CROS_EC
+ mov $0x1b, %ecx
+ rdmsr
+ and $0x100, %eax
+ test %eax, %eax
+ je 1f
+
+ mov $0x8000f8f0, %eax
+ mov $0xcf8, %dx
+ out %eax, (%dx)
+ mov $0xfed1c001, %eax
+ mov $0xcfc, %dx
+ out %eax, (%dx)
+ mov $0xfed1f410, %esp
+ mov (%esp), %eax
+ and $0xfffffffb, %eax
+ mov %eax, (%esp)
+1:
+#endif
jmp early_board_init_ret
OpenPOWER on IntegriCloud