summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2015-09-09 23:20:26 -0700
committerSimon Glass <sjg@chromium.org>2015-09-16 19:53:53 -0600
commit693b5f6c71c870276f5c370254fafcb10ee43cb1 (patch)
treecdf994bd06c48bc14ee4699e83c14ef3fac4ee8e
parent8e3683029ee4e828cdecf53d4f05c746b4227e4e (diff)
downloadu-boot-imx-693b5f6c71c870276f5c370254fafcb10ee43cb1.zip
u-boot-imx-693b5f6c71c870276f5c370254fafcb10ee43cb1.tar.gz
u-boot-imx-693b5f6c71c870276f5c370254fafcb10ee43cb1.tar.bz2
x86: quark: Lock HMBOUND register before jumping to kernel
When Linux kernel boots, it hangs at: [ 0.829408] Intel Quark side-band driver registered This happens when Quark kernel Isolated Memory Region (IMR) driver tries to lock an IMR register to protect kernel's text and rodata sections. However in order to have IMR function correctly, HMBOUND register must be locked otherwise the system just hangs. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
-rw-r--r--arch/x86/cpu/quark/quark.c3
-rw-r--r--arch/x86/include/asm/arch-quark/quark.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/cpu/quark/quark.c b/arch/x86/cpu/quark/quark.c
index 8d53fe3..3ddf079 100644
--- a/arch/x86/cpu/quark/quark.c
+++ b/arch/x86/cpu/quark/quark.c
@@ -288,5 +288,8 @@ void board_final_cleanup(void)
val &= ~0xff0000;
writel(val, &rcba->esd);
+ /* Lock HMBOUND for security */
+ msg_port_setbits(MSG_PORT_HOST_BRIDGE, HM_BOUND, HM_BOUND_LOCK);
+
return;
}
diff --git a/arch/x86/include/asm/arch-quark/quark.h b/arch/x86/include/asm/arch-quark/quark.h
index eb3afbf..338c896 100644
--- a/arch/x86/include/asm/arch-quark/quark.h
+++ b/arch/x86/include/asm/arch-quark/quark.h
@@ -32,6 +32,7 @@
/* Host Memory I/O Boundary */
#define HM_BOUND 0x08
+#define HM_BOUND_LOCK 0x00000001
/* Extended Configuration Space */
#define HEC_REG 0x09