mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
05b8e84362
Manually merged: backport-5.4 011-kbuild-export-SUBARCH.patch layerscape 701-net-0262-net-dsa-ocelot-add-tagger-for-Ocelot-Felix-switches.patch All other modifications made by update_kernel.sh Build-tested: x86/64, lantiq/xrx200, ramips/mt7621 Run-tested: ipq806x (R7800), lantiq/xrx200, x86/64, ramips (RT-AC57U) No dmesg regressions, everything functional Signed-off-by: John Audia <graysky@archlinux.us> [minor commit message adjustments] Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
165 lines
4.4 KiB
Diff
165 lines
4.4 KiB
Diff
From 58d058f1fe1cc5981c57be8b48d3b2f74f25c0d6 Mon Sep 17 00:00:00 2001
|
|
From: Jan Kiszka <jan.kiszka@siemens.com>
|
|
Date: Sun, 11 Sep 2016 23:30:04 +0200
|
|
Subject: [PATCH] jailhouse: Add simple debug console via the hypervisor
|
|
|
|
Jailhouse allows explicitly enabled cells to write character-wise
|
|
messages to the hypervisor debug console. Make use of this for a
|
|
platform-agnostic boot diagnosis channel, specifically for non-root
|
|
cells. This also comes with earlycon support.
|
|
|
|
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
|
|
(cherry picked from commit 60685bd589aef4972d20724863079edf2039eaa2)
|
|
From http://git.kiszka.org/?p=linux.git;a=shortlog;h=refs/heads/queues/jailhouse
|
|
---
|
|
MAINTAINERS | 1 +
|
|
drivers/virt/Kconfig | 11 +++++
|
|
drivers/virt/Makefile | 1 +
|
|
drivers/virt/jailhouse_dbgcon.c | 103 ++++++++++++++++++++++++++++++++++++++++
|
|
4 files changed, 116 insertions(+)
|
|
create mode 100644 drivers/virt/jailhouse_dbgcon.c
|
|
|
|
--- a/MAINTAINERS
|
|
+++ b/MAINTAINERS
|
|
@@ -8773,6 +8773,7 @@ L: jailhouse-dev@googlegroups.com
|
|
S: Maintained
|
|
F: arch/x86/kernel/jailhouse.c
|
|
F: arch/x86/include/asm/jailhouse_para.h
|
|
+F: drivers/virt/jailhouse_dbgcon.c
|
|
|
|
JC42.4 TEMPERATURE SENSOR DRIVER
|
|
M: Guenter Roeck <linux@roeck-us.net>
|
|
--- a/drivers/virt/Kconfig
|
|
+++ b/drivers/virt/Kconfig
|
|
@@ -31,5 +31,16 @@ config FSL_HV_MANAGER
|
|
4) A kernel interface for receiving callbacks when a managed
|
|
partition shuts down.
|
|
|
|
+config JAILHOUSE_DBGCON
|
|
+ tristate "Jailhouse console driver"
|
|
+ depends on X86 || ARM || ARM64
|
|
+ help
|
|
+ The Jailhouse hypervisor provides a simple write-only console for
|
|
+ debugging the bootstrap process of its cells. This driver registers
|
|
+ a console with the kernel to make use of it.
|
|
+
|
|
+ Note that Jailhouse has to be configured to permit a cell the usage
|
|
+ of the console interface.
|
|
+
|
|
source "drivers/virt/vboxguest/Kconfig"
|
|
endif
|
|
--- a/drivers/virt/Makefile
|
|
+++ b/drivers/virt/Makefile
|
|
@@ -4,4 +4,5 @@
|
|
#
|
|
|
|
obj-$(CONFIG_FSL_HV_MANAGER) += fsl_hypervisor.o
|
|
+obj-$(CONFIG_JAILHOUSE_DBGCON) += jailhouse_dbgcon.o
|
|
obj-y += vboxguest/
|
|
--- /dev/null
|
|
+++ b/drivers/virt/jailhouse_dbgcon.c
|
|
@@ -0,0 +1,103 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
+/*
|
|
+ * Console driver for running over the Jailhouse partitioning hypervisor
|
|
+ *
|
|
+ * Copyright (c) Siemens AG, 2016-2018
|
|
+ *
|
|
+ * Authors:
|
|
+ * Jan Kiszka <jan.kiszka@siemens.com>
|
|
+ */
|
|
+
|
|
+#include <linux/console.h>
|
|
+#include <linux/hypervisor.h>
|
|
+#include <linux/module.h>
|
|
+#include <linux/serial_core.h>
|
|
+#ifdef CONFIG_X86
|
|
+#include <asm/alternative.h>
|
|
+#endif
|
|
+#ifdef CONFIG_ARM
|
|
+#include <asm/opcodes-virt.h>
|
|
+#endif
|
|
+
|
|
+#define JAILHOUSE_HC_DEBUG_CONSOLE_PUTC 8
|
|
+
|
|
+static void hypervisor_putc(char c)
|
|
+{
|
|
+#if defined(CONFIG_X86)
|
|
+ int result;
|
|
+
|
|
+ asm volatile(
|
|
+ ALTERNATIVE(".byte 0x0f,0x01,0xc1", ".byte 0x0f,0x01,0xd9",
|
|
+ X86_FEATURE_VMMCALL)
|
|
+ : "=a" (result)
|
|
+ : "a" (JAILHOUSE_HC_DEBUG_CONSOLE_PUTC), "D" (c)
|
|
+ : "memory");
|
|
+#elif defined(CONFIG_ARM)
|
|
+ register u32 num_res asm("r0") = JAILHOUSE_HC_DEBUG_CONSOLE_PUTC;
|
|
+ register u32 arg1 asm("r1") = c;
|
|
+
|
|
+ asm volatile(
|
|
+ __HVC(0x4a48)
|
|
+ : "=r" (num_res)
|
|
+ : "r" (num_res), "r" (arg1)
|
|
+ : "memory");
|
|
+#elif defined(CONFIG_ARM64)
|
|
+ register u64 num_res asm("x0") = JAILHOUSE_HC_DEBUG_CONSOLE_PUTC;
|
|
+ register u64 arg1 asm("x1") = c;
|
|
+
|
|
+ asm volatile(
|
|
+ "hvc #0x4a48\n\t"
|
|
+ : "=r" (num_res)
|
|
+ : "r" (num_res), "r" (arg1)
|
|
+ : "memory");
|
|
+#else
|
|
+#error Unsupported architecture.
|
|
+#endif
|
|
+}
|
|
+
|
|
+static void jailhouse_dbgcon_write(struct console *con, const char *s,
|
|
+ unsigned count)
|
|
+{
|
|
+ while (count > 0) {
|
|
+ hypervisor_putc(*s);
|
|
+ count--;
|
|
+ s++;
|
|
+ }
|
|
+}
|
|
+
|
|
+static int __init early_jailhouse_dbgcon_setup(struct earlycon_device *device,
|
|
+ const char *options)
|
|
+{
|
|
+ device->con->write = jailhouse_dbgcon_write;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+EARLYCON_DECLARE(jailhouse, early_jailhouse_dbgcon_setup);
|
|
+
|
|
+static struct console jailhouse_dbgcon = {
|
|
+ .name = "jailhouse",
|
|
+ .write = jailhouse_dbgcon_write,
|
|
+ .flags = CON_PRINTBUFFER | CON_ANYTIME,
|
|
+ .index = -1,
|
|
+};
|
|
+
|
|
+static int __init jailhouse_dbgcon_init(void)
|
|
+{
|
|
+ if (!jailhouse_paravirt())
|
|
+ return -ENODEV;
|
|
+
|
|
+ register_console(&jailhouse_dbgcon);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static void __exit jailhouse_dbgcon_exit(void)
|
|
+{
|
|
+ unregister_console(&jailhouse_dbgcon);
|
|
+}
|
|
+
|
|
+module_init(jailhouse_dbgcon_init);
|
|
+module_exit(jailhouse_dbgcon_exit);
|
|
+
|
|
+MODULE_LICENSE("GPL v2");
|
|
+MODULE_DESCRIPTION("Jailhouse debug console driver");
|
|
+MODULE_AUTHOR("Jan Kiszka <jan.kiszka@siemens.com>");
|