diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/display/qxl.c | 8 | ||||
-rw-r--r-- | hw/display/vga.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/hw/display/qxl.c b/hw/display/qxl.c index 6e9079783e..92f2d5025d 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -370,6 +370,8 @@ static void init_qxl_rom(PCIQXLDevice *d) num_pages -= surface0_area_size; num_pages = num_pages / QXL_PAGE_SIZE; + assert(ram_header_size + surface0_area_size <= d->vga.vram_size); + rom->draw_area_offset = cpu_to_le32(0); rom->surface0_area_size = cpu_to_le32(surface0_area_size); rom->pages_offset = cpu_to_le32(surface0_area_size); @@ -1883,6 +1885,12 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) if (qxl->vgamem_size_mb < 8) { qxl->vgamem_size_mb = 8; } + /* XXX: we round vgamem_size_mb up to a nearest power of two and it must be + * less than vga_common_init()'s maximum on qxl->vga.vram_size (512 now). + */ + if (qxl->vgamem_size_mb > 256) { + qxl->vgamem_size_mb = 256; + } qxl->vgamem_size = qxl->vgamem_size_mb * 1024 * 1024; /* vga ram (bar 0, total) */ diff --git a/hw/display/vga.c b/hw/display/vga.c index c8c49abc6e..6e4ca7e9ab 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -2121,10 +2121,10 @@ void vga_common_init(VGACommonState *s, Object *obj, bool global_vmstate) expand4to8[i] = v; } - /* valid range: 1 MB -> 256 MB */ + /* valid range: 1 MB -> 512 MB */ s->vram_size = 1024 * 1024; while (s->vram_size < (s->vram_size_mb << 20) && - s->vram_size < (256 << 20)) { + s->vram_size < (512 << 20)) { s->vram_size <<= 1; } s->vram_size_mb = s->vram_size >> 20; |