From: Wei Liu <wei.liu2@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
Cc: wei.liu2@citrix.com
Subject: [PATCH v2 40/62] xen/x86: make VGA support selectable
Date: Fri, 12 Jan 2018 11:28:48 +0000 [thread overview]
Message-ID: <20180112112910.16762-41-wei.liu2@citrix.com> (raw)
In-Reply-To: <20180112112910.16762-1-wei.liu2@citrix.com>
From: Roger Pau Monne <roger.pau@citrix.com>
Through a Kconfig option. Enable it by default, and disable it for the
PV-in-PVH shim.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
tools/firmware/xen-dir/shim.config | 2 --
xen/arch/x86/Kconfig | 1 -
xen/arch/x86/boot/build32.mk | 1 +
xen/arch/x86/boot/cmdline.c | 5 ++++-
xen/arch/x86/boot/trampoline.S | 7 +++++++
xen/arch/x86/efi/efi-boot.h | 4 ++++
xen/arch/x86/platform_hypercall.c | 2 ++
xen/arch/x86/pv/dom0_build.c | 2 ++
xen/arch/x86/setup.c | 6 ++++++
xen/drivers/video/Kconfig | 8 +++++++-
xen/include/asm-x86/setup.h | 6 ++++++
11 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/tools/firmware/xen-dir/shim.config b/tools/firmware/xen-dir/shim.config
index 227a12fb4c..d5bd516632 100644
--- a/tools/firmware/xen-dir/shim.config
+++ b/tools/firmware/xen-dir/shim.config
@@ -68,8 +68,6 @@ CONFIG_HAS_EHCI=y
CONFIG_HAS_CPUFREQ=y
CONFIG_HAS_PASSTHROUGH=y
CONFIG_HAS_PCI=y
-CONFIG_VIDEO=y
-CONFIG_VGA=y
CONFIG_DEFCONFIG_LIST="$ARCH_DEFCONFIG"
CONFIG_ARCH_SUPPORTS_INT128=y
diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
index 4953533f16..f621e799ed 100644
--- a/xen/arch/x86/Kconfig
+++ b/xen/arch/x86/Kconfig
@@ -24,7 +24,6 @@ config X86
select HAS_PDX
select HAS_UBSAN
select NUMA
- select VGA
config ARCH_DEFCONFIG
string
diff --git a/xen/arch/x86/boot/build32.mk b/xen/arch/x86/boot/build32.mk
index f7e8ebe67d..48c7407c00 100644
--- a/xen/arch/x86/boot/build32.mk
+++ b/xen/arch/x86/boot/build32.mk
@@ -5,6 +5,7 @@ include $(XEN_ROOT)/Config.mk
$(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
CFLAGS += -Werror -fno-asynchronous-unwind-tables -fno-builtin -g0 -msoft-float
+CFLAGS += -I$(XEN_ROOT)/xen/include
CFLAGS := $(filter-out -flto,$(CFLAGS))
# NB. awk invocation is a portable alternative to 'head -n -1'
diff --git a/xen/arch/x86/boot/cmdline.c b/xen/arch/x86/boot/cmdline.c
index 06aa064e72..51b0659a04 100644
--- a/xen/arch/x86/boot/cmdline.c
+++ b/xen/arch/x86/boot/cmdline.c
@@ -30,6 +30,7 @@ asm (
" jmp cmdline_parse_early \n"
);
+#include <xen/kconfig.h>
#include "defs.h"
#include "video.h"
@@ -336,5 +337,7 @@ void __stdcall cmdline_parse_early(const char *cmdline, early_boot_opts_t *ebo)
ebo->skip_realmode = skip_realmode(cmdline);
ebo->opt_edd = edd_parse(cmdline);
ebo->opt_edid = edid_parse(cmdline);
- vga_parse(cmdline, ebo);
+
+ if ( IS_ENABLED(CONFIG_VIDEO) )
+ vga_parse(cmdline, ebo);
}
diff --git a/xen/arch/x86/boot/trampoline.S b/xen/arch/x86/boot/trampoline.S
index 4d640f3fcd..a17a90df5e 100644
--- a/xen/arch/x86/boot/trampoline.S
+++ b/xen/arch/x86/boot/trampoline.S
@@ -219,7 +219,9 @@ trampoline_boot_cpu_entry:
*/
call get_memory_map
call get_edd
+#ifdef CONFIG_VIDEO
call video
+#endif
mov $0x0200,%ax
int $0x16
@@ -267,10 +269,13 @@ opt_edid:
.byte 0 /* EDID parsing option (force/no/default). */
/* Padding. */
.byte 0
+
+#ifdef CONFIG_VIDEO
GLOBAL(boot_vid_mode)
.word VIDEO_80x25 /* If we don't run at all, assume basic video mode 3 at 80x25. */
vesa_size:
.word 0,0,0 /* width x depth x height */
+#endif
GLOBAL(kbd_shift_flags)
.byte 0
@@ -279,4 +284,6 @@ rm_idt: .word 256*4-1, 0, 0
#include "mem.S"
#include "edd.S"
+#ifdef CONFIG_VIDEO
#include "video.S"
+#endif
diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
index d30f688a5a..5789d2cb70 100644
--- a/xen/arch/x86/efi/efi-boot.h
+++ b/xen/arch/x86/efi/efi-boot.h
@@ -479,16 +479,19 @@ static void __init efi_arch_edd(void)
static void __init efi_arch_console_init(UINTN cols, UINTN rows)
{
+#ifdef CONFIG_VIDEO
vga_console_info.video_type = XEN_VGATYPE_TEXT_MODE_3;
vga_console_info.u.text_mode_3.columns = cols;
vga_console_info.u.text_mode_3.rows = rows;
vga_console_info.u.text_mode_3.font_height = 16;
+#endif
}
static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop,
UINTN info_size,
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info)
{
+#ifdef CONFIG_VIDEO
int bpp = 0;
switch ( mode_info->PixelFormat )
@@ -550,6 +553,7 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop,
vga_console_info.u.vesa_lfb.lfb_size =
(gop->Mode->FrameBufferSize + 0xffff) >> 16;
}
+#endif
}
static void __init efi_arch_memory_setup(void)
diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c
index ebc2f394ee..ea18c3215a 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -388,6 +388,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
}
case XEN_FW_VBEDDC_INFO:
ret = -ESRCH;
+#ifdef CONFIG_VIDEO
if ( op->u.firmware_info.index != 0 )
break;
if ( *(u32 *)bootsym(boot_edid_info) == 0x13131313 )
@@ -406,6 +407,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
copy_to_compat(op->u.firmware_info.u.vbeddc_info.edid,
bootsym(boot_edid_info), 128) )
ret = -EFAULT;
+#endif
break;
case XEN_FW_EFI_INFO:
ret = efi_get_info(op->u.firmware_info.index,
diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c
index 8fd40b5254..50a423e35d 100644
--- a/xen/arch/x86/pv/dom0_build.c
+++ b/xen/arch/x86/pv/dom0_build.c
@@ -827,11 +827,13 @@ int __init dom0_construct_pv(struct domain *d,
if ( cmdline != NULL )
strlcpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line));
+#ifdef CONFIG_VIDEO
if ( fill_console_start_info((void *)(si + 1)) )
{
si->console.dom0.info_off = sizeof(struct start_info);
si->console.dom0.info_size = sizeof(struct dom0_vga_console_info);
}
+#endif
if ( is_pv_32bit_domain(d) )
xlat_start_info(si, XLAT_start_info_console_dom0);
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 0c9b55ff71..b2abcaa278 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -456,6 +456,7 @@ static void __init setup_max_pdx(unsigned long top_page)
/* A temporary copy of the e820 map that we can mess with during bootstrap. */
static struct e820map __initdata boot_e820;
+#ifdef CONFIG_VIDEO
struct boot_video_info {
u8 orig_x; /* 0x00 */
u8 orig_y; /* 0x01 */
@@ -486,9 +487,11 @@ struct boot_video_info {
u16 vesa_attrib; /* 0x28 */
};
extern struct boot_video_info boot_vid_info;
+#endif
static void __init parse_video_info(void)
{
+#ifdef CONFIG_VIDEO
struct boot_video_info *bvi = &bootsym(boot_vid_info);
/* vga_console_info is filled directly on EFI platform. */
@@ -524,6 +527,7 @@ static void __init parse_video_info(void)
vga_console_info.u.vesa_lfb.gbl_caps = bvi->capabilities;
vga_console_info.u.vesa_lfb.mode_attrs = bvi->vesa_attrib;
}
+#endif
}
static void __init kexec_reserve_area(struct e820map *e820)
@@ -741,6 +745,7 @@ void __init noreturn __start_xen(unsigned long mbi_p)
printk("Xen image load base address: %#lx\n", xen_phys_start);
+#ifdef CONFIG_VIDEO
printk("Video information:\n");
/* Print VGA display mode information. */
@@ -784,6 +789,7 @@ void __init noreturn __start_xen(unsigned long mbi_p)
printk("of reasons unknown\n");
}
}
+#endif
printk("Disc information:\n");
printk(" Found %d MBR signatures\n",
diff --git a/xen/drivers/video/Kconfig b/xen/drivers/video/Kconfig
index 0ffbbd9a88..52e8ce6c15 100644
--- a/xen/drivers/video/Kconfig
+++ b/xen/drivers/video/Kconfig
@@ -3,8 +3,14 @@ config VIDEO
bool
config VGA
- bool
+ bool "VGA support" if !PV_SHIM_EXCLUSIVE
select VIDEO
+ depends on X86
+ default y if !PV_SHIM_EXCLUSIVE
+ ---help---
+ Enable VGA output for the Xen hypervisor.
+
+ If unsure, say Y.
config HAS_ARM_HDLCD
bool
diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h
index 05d647d02e..19232afa01 100644
--- a/xen/include/asm-x86/setup.h
+++ b/xen/include/asm-x86/setup.h
@@ -31,8 +31,14 @@ void arch_init_memory(void);
void subarch_init_memory(void);
void init_IRQ(void);
+
+#ifdef CONFIG_VIDEO
void vesa_init(void);
void vesa_mtrr_init(void);
+#else
+static inline void vesa_init(void) {};
+static inline void vesa_mtrr_init(void) {};
+#endif
int construct_dom0(
struct domain *d,
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-01-12 12:00 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-12 11:28 [PATCH v2 00/62] Comet: Run PV in PVH container Wei Liu
2018-01-12 11:28 ` [PATCH v2 01/62] x86/svm: Offer CPUID Faulting to AMD HVM guests as well Wei Liu
2018-01-12 11:28 ` [PATCH v2 02/62] xen/x86: report domain id on cpuid Wei Liu
2018-01-12 11:28 ` [PATCH v2 03/62] tools/libxc: remove extraneous newline in xc_dom_load_acpi Wei Liu
2018-01-12 11:28 ` [PATCH v2 04/62] tools/libelf: fix elf notes check for PVH guest Wei Liu
2018-01-12 11:28 ` [PATCH v2 05/62] tools/libxc: Multi modules support Wei Liu
2018-01-12 11:28 ` [PATCH v2 06/62] xen/common: Widen the guest logging buffer slightly Wei Liu
2018-01-12 11:28 ` [PATCH v2 07/62] x86/time: Print a more helpful error when a platform timer can't be found Wei Liu
2018-01-12 11:28 ` [PATCH v2 08/62] x86/link: Introduce and use SECTION_ALIGN Wei Liu
2018-01-12 11:28 ` [PATCH v2 09/62] ACPICA: Make ACPI Power Management Timer (PM Timer) optional Wei Liu
2018-01-12 11:28 ` [PATCH v2 10/62] xen/domctl: Return arch_config via getdomaininfo Wei Liu
2018-01-12 11:28 ` [PATCH v2 11/62] tools/ocaml: Expose arch_config in domaininfo Wei Liu
2018-01-12 11:28 ` [PATCH v2 12/62] tools/ocaml: Extend domain_create() to take arch_domainconfig Wei Liu
2018-01-12 11:28 ` [PATCH v2 13/62] x86/fixmap: Modify fix_to_virt() to return a void pointer Wei Liu
2018-01-12 11:28 ` [PATCH v2 14/62] x86: Common cpuid faulting support Wei Liu
2018-01-12 11:28 ` [PATCH v2 15/62] x86/Kconfig: Options for Xen and PVH support Wei Liu
2018-01-12 11:28 ` [PATCH v2 16/62] x86/link: Relocate program headers Wei Liu
2018-01-12 11:28 ` [PATCH v2 17/62] x86: introduce ELFNOTE macro Wei Liu
2018-01-12 11:28 ` [PATCH v2 18/62] x86: produce a binary that can be booted as PVH Wei Liu
2018-01-12 11:28 ` [PATCH v2 19/62] x86/entry: Early PVH boot code Wei Liu
2018-01-12 11:28 ` [PATCH v2 20/62] x86/boot: Map more than the first 16MB Wei Liu
2018-01-12 11:28 ` [PATCH v2 21/62] x86/entry: Probe for Xen early during boot Wei Liu
2018-01-12 11:28 ` [PATCH v2 22/62] x86/guest: Hypercall support Wei Liu
2018-01-12 11:28 ` [PATCH v2 23/62] x86/shutdown: Support for using SCHEDOP_{shutdown, reboot} Wei Liu
2018-01-12 11:28 ` [PATCH v2 24/62] x86/pvh: Retrieve memory map from Xen Wei Liu
2018-01-12 11:28 ` [PATCH v2 25/62] xen/console: Introduce console=xen Wei Liu
2018-01-12 11:28 ` [PATCH v2 26/62] xen: introduce rangeset_claim_range Wei Liu
2018-01-12 11:28 ` [PATCH v2 27/62] xen/pvshim: keep track of used PFN ranges Wei Liu
2018-01-12 11:28 ` [PATCH v2 28/62] x86/guest: map shared_info page Wei Liu
2018-01-12 11:28 ` [PATCH v2 29/62] xen/guest: fetch vCPU ID from Xen Wei Liu
2018-01-12 11:28 ` [PATCH v2 30/62] x86/guest: map per-cpu vcpu_info area Wei Liu
2018-01-12 11:28 ` [PATCH v2 31/62] x86: xen pv clock time source Wei Liu
2018-01-12 20:45 ` Joao Martins
2018-01-16 12:22 ` Wei Liu
2018-01-12 11:28 ` [PATCH v2 32/62] x86: APIC timer calibration when running as a guest Wei Liu
2018-01-12 11:28 ` [PATCH v2 33/62] x86: read wallclock from Xen when running in pvh mode Wei Liu
2018-01-12 11:28 ` [PATCH v2 34/62] x86: don't swallow the first command line item in guest mode Wei Liu
2018-01-12 11:28 ` [PATCH v2 35/62] x86/guest: setup event channel upcall vector Wei Liu
2018-01-12 11:28 ` [PATCH v2 36/62] x86/guest: add PV console code Wei Liu
2018-01-12 11:28 ` [PATCH v2 37/62] x86/guest: use PV console for Xen/Dom0 I/O Wei Liu
2018-01-12 11:28 ` [PATCH v2 38/62] x86/shim: Kconfig and command line options Wei Liu
2018-01-12 11:28 ` [PATCH v2 39/62] tools/firmware: Build and install xen-shim Wei Liu
2018-01-12 11:28 ` Wei Liu [this message]
2018-01-12 11:28 ` [PATCH v2 41/62] xen/pvh: do not mark the low 1MB as IO mem Wei Liu
2018-01-12 11:28 ` [PATCH v2 42/62] sched/null: skip vCPUs on the waitqueue that are blocked Wei Liu
2018-01-12 11:28 ` [PATCH v2 43/62] xen/pvshim: skip Dom0-only domain builder parts Wei Liu
2018-01-12 11:28 ` [PATCH v2 44/62] xen: mark xenstore/console pages as RAM Wei Liu
2018-01-12 11:28 ` [PATCH v2 45/62] xen/pvshim: modify Dom0 builder in order to build a DomU Wei Liu
2018-01-12 11:28 ` [PATCH v2 46/62] xen/pvshim: set correct domid value Wei Liu
2018-01-12 11:28 ` [PATCH v2 47/62] xen/pvshim: forward evtchn ops between L0 Xen and L2 DomU Wei Liu
2018-01-12 11:28 ` [PATCH v2 48/62] xen/pvshim: add grant table operations Wei Liu
2018-01-12 11:28 ` [PATCH v2 49/62] x86/pv-shim: shadow PV console's page for L2 DomU Wei Liu
2018-01-12 11:28 ` [PATCH v2 50/62] xen/pvshim: add migration support Wei Liu
2018-01-12 11:28 ` [PATCH v2 51/62] xen/pvshim: add shim_mem cmdline parameter Wei Liu
2018-01-12 11:29 ` [PATCH v2 52/62] xen/pvshim: set max_pages to the value of tot_pages Wei Liu
2018-01-12 11:29 ` [PATCH v2 53/62] xen/pvshim: support vCPU hotplug Wei Liu
2018-01-12 11:29 ` [PATCH v2 54/62] xen/pvshim: memory hotplug Wei Liu
2018-01-12 11:29 ` [PATCH v2 55/62] xen/shim: modify shim_mem parameter behaviour Wei Liu
2018-01-12 11:29 ` [PATCH v2 56/62] xen/pvshim: use default position for the m2p mappings Wei Liu
2018-01-12 11:29 ` [PATCH v2 57/62] xen/shim: crash instead of reboot in shim mode Wei Liu
2018-01-12 11:29 ` [PATCH v2 58/62] xen/shim: allow DomU to have as many vcpus as available Wei Liu
2018-01-12 11:29 ` [PATCH v2 59/62] libxl: pvshim: Provide first-class config settings to enable shim mode Wei Liu
2018-01-12 14:45 ` [PATCH] fixup! " Ian Jackson
2018-01-12 11:29 ` [PATCH v2 60/62] libxl: pvshim: Introduce pvshim_extra Wei Liu
2018-01-12 11:29 ` [PATCH v2 61/62] xl: pvshim: Provide and document xl config Wei Liu
2018-01-12 11:29 ` [PATCH v2 62/62] xl: Default guest mode changed from PV to PVH with PV shim Wei Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180112112910.16762-41-wei.liu2@citrix.com \
--to=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).