--- /dev/null
+diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c
+index 39aa949..12ac806 100644
+--- a/tools/firmware/hvmloader/hvmloader.c
++++ b/tools/firmware/hvmloader/hvmloader.c
+@@ -672,6 +672,7 @@ int main(void)
+ break;
+ default:
+ printf("No emulated VGA adaptor ...\n");
++ vgabios_sz = round_option_rom((*(uint8_t *)(VGABIOS_PHYSICAL_ADDRESS+2)) * 512);
+ break;
+ }
+
+diff --git a/tools/libxc/xc_hvm_build.c b/tools/libxc/xc_hvm_build.c
+index 0ba8c44..787f4ec 100644
+--- a/tools/libxc/xc_hvm_build.c
++++ b/tools/libxc/xc_hvm_build.c
+@@ -66,14 +66,35 @@ static void build_hvm_info(void *hvm_info_page, uint64_t mem_size)
+ hvm_info->checksum = -sum;
+ }
+
++static int init_vgabios(int xc_handle, uint32_t dom, unsigned char *buffer, uint32_t bios_size)
++{
++ char *va_bios = NULL;
++ uint32_t va_size = 0;
++
++ va_size = bios_size + bios_size % XC_PAGE_SIZE;
++ va_bios = xc_map_foreign_range(xc_handle, dom, va_size,
++ PROT_READ | PROT_WRITE, 0xC0);
++ if ( !va_bios )
++ {
++ IPRINTF("Unable to map vga bios!\n");
++ return -1;
++ }
++
++ if ( buffer != NULL )
++ memcpy(va_bios, buffer, bios_size);
++ else
++ memset(va_bios, 0, bios_size);
++
++ munmap(va_bios, va_size);
++ return 0;
++}
++
+ static int setup_vga_pt(int xc_handle,
+ uint32_t dom)
+ {
+ int rc = 0;
+ unsigned char *bios = NULL;
+ int bios_size = 0;
+- char *va_bios = NULL;
+- uint32_t va_size = 0;
+ char *c = NULL;
+ char checksum = 0;
+
+@@ -87,16 +108,9 @@ static int setup_vga_pt(int xc_handle,
+ bios_size = 0;
+ #endif /* __linux__ */
+
+- va_size = bios_size + bios_size % XC_PAGE_SIZE;
+ if (bios_size == 0)
+ {
+- rc = -1;
+- goto error;
+- }
+- va_bios = xc_map_foreign_range(xc_handle, dom, va_size,
+- PROT_READ | PROT_WRITE, 0xC0);
+- if (!va_bios)
+- {
++ IPRINTF("vga bios size is 0!\n");
+ rc = -1;
+ goto error;
+ }
+@@ -107,8 +121,7 @@ static int setup_vga_pt(int xc_handle,
+ if (checksum)
+ bios[bios_size - 1] -= checksum;
+
+- memcpy(va_bios, bios, bios_size);
+- munmap(va_bios, va_size);
++ init_vgabios(xc_handle, dom, bios, bios_size);
+ error:
+ free(bios);
+ return rc;
+@@ -416,6 +429,8 @@ int xc_hvm_build(int xc_handle,
+ sts = xc_hvm_build_internal(xc_handle, domid, memsize, memsize, image, image_size);
+ if ( vga_pt_enabled )
+ sts |= setup_vga_pt(xc_handle, domid);
++ else
++ sts |= init_vgabios(xc_handle, domid, NULL, 0x800);
+
+ free(image);
+