arm/vexpress: Add proper display connector emulation

This adds the SiI9022 (and implicitly EDID I2C) device to the ARM
Versatile Express machine, and selects the two I2C devices necessary
in the arm-softmmu.mak configuration so everything will build
smoothly.

I am implementing proper handling of the graphics in the Linux
kernel and adding proper emulation of SiI9022 and EDID makes the
driver probe as nicely as before, retrieving the resolutions
supported by the "QEMU monitor" and overall just working nice.

Cc: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Message-id: 20180227104903.21353-6-linus.walleij@linaro.org
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Linus Walleij 2018-03-01 11:05:46 +00:00 committed by Peter Maydell
parent a643bd7749
commit 0b72476810
2 changed files with 7 additions and 1 deletions

View File

@ -21,6 +21,8 @@ CONFIG_STELLARIS_INPUT=y
CONFIG_STELLARIS_ENET=y CONFIG_STELLARIS_ENET=y
CONFIG_SSD0303=y CONFIG_SSD0303=y
CONFIG_SSD0323=y CONFIG_SSD0323=y
CONFIG_DDC=y
CONFIG_SII9022=y
CONFIG_ADS7846=y CONFIG_ADS7846=y
CONFIG_MAX111X=y CONFIG_MAX111X=y
CONFIG_SSI=y CONFIG_SSI=y

View File

@ -29,6 +29,7 @@
#include "hw/arm/arm.h" #include "hw/arm/arm.h"
#include "hw/arm/primecell.h" #include "hw/arm/primecell.h"
#include "hw/devices.h" #include "hw/devices.h"
#include "hw/i2c/i2c.h"
#include "net/net.h" #include "net/net.h"
#include "sysemu/sysemu.h" #include "sysemu/sysemu.h"
#include "hw/boards.h" #include "hw/boards.h"
@ -537,6 +538,7 @@ static void vexpress_common_init(MachineState *machine)
uint32_t sys_id; uint32_t sys_id;
DriveInfo *dinfo; DriveInfo *dinfo;
pflash_t *pflash0; pflash_t *pflash0;
I2CBus *i2c;
ram_addr_t vram_size, sram_size; ram_addr_t vram_size, sram_size;
MemoryRegion *sysmem = get_system_memory(); MemoryRegion *sysmem = get_system_memory();
MemoryRegion *vram = g_new(MemoryRegion, 1); MemoryRegion *vram = g_new(MemoryRegion, 1);
@ -628,7 +630,9 @@ static void vexpress_common_init(MachineState *machine)
sysbus_create_simple("sp804", map[VE_TIMER01], pic[2]); sysbus_create_simple("sp804", map[VE_TIMER01], pic[2]);
sysbus_create_simple("sp804", map[VE_TIMER23], pic[3]); sysbus_create_simple("sp804", map[VE_TIMER23], pic[3]);
/* VE_SERIALDVI: not modelled */ dev = sysbus_create_simple("versatile_i2c", map[VE_SERIALDVI], NULL);
i2c = (I2CBus *)qdev_get_child_bus(dev, "i2c");
i2c_create_slave(i2c, "sii9022", 0x39);
sysbus_create_simple("pl031", map[VE_RTC], pic[4]); /* RTC */ sysbus_create_simple("pl031", map[VE_RTC], pic[4]); /* RTC */