virtio-gpu: hostmem
Use VIRTIO_GPU_SHM_ID_HOST_VISIBLE as id for virtio-gpu. Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com> Tested-by: Alyssa Ross <hi@alyssa.is> Tested-by: Akihiko Odaki <akihiko.odaki@daynix.com> Tested-by: Huang Rui <ray.huang@amd.com> Acked-by: Huang Rui <ray.huang@amd.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com>
This commit is contained in:
parent
17b98f46b9
commit
ba62dfa707
@ -33,6 +33,20 @@ static void virtio_gpu_pci_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||
DeviceState *vdev = DEVICE(g);
|
||||
int i;
|
||||
|
||||
if (virtio_gpu_hostmem_enabled(g->conf)) {
|
||||
vpci_dev->msix_bar_idx = 1;
|
||||
vpci_dev->modern_mem_bar_idx = 2;
|
||||
memory_region_init(&g->hostmem, OBJECT(g), "virtio-gpu-hostmem",
|
||||
g->conf.hostmem);
|
||||
pci_register_bar(&vpci_dev->pci_dev, 4,
|
||||
PCI_BASE_ADDRESS_SPACE_MEMORY |
|
||||
PCI_BASE_ADDRESS_MEM_PREFETCH |
|
||||
PCI_BASE_ADDRESS_MEM_TYPE_64,
|
||||
&g->hostmem);
|
||||
virtio_pci_add_shm_cap(vpci_dev, 4, 0, g->conf.hostmem,
|
||||
VIRTIO_GPU_SHM_ID_HOST_VISIBLE);
|
||||
}
|
||||
|
||||
virtio_pci_force_virtio_1(vpci_dev);
|
||||
if (!qdev_realize(vdev, BUS(&vpci_dev->bus), errp)) {
|
||||
return;
|
||||
|
@ -1511,6 +1511,7 @@ static Property virtio_gpu_properties[] = {
|
||||
256 * MiB),
|
||||
DEFINE_PROP_BIT("blob", VirtIOGPU, parent_obj.conf.flags,
|
||||
VIRTIO_GPU_FLAG_BLOB_ENABLED, false),
|
||||
DEFINE_PROP_SIZE("hostmem", VirtIOGPU, parent_obj.conf.hostmem, 0),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
@ -115,17 +115,32 @@ static void virtio_vga_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||
pci_register_bar(&vpci_dev->pci_dev, 0,
|
||||
PCI_BASE_ADDRESS_MEM_PREFETCH, &vga->vram);
|
||||
|
||||
/*
|
||||
* Configure virtio bar and regions
|
||||
*
|
||||
* We use bar #2 for the mmio regions, to be compatible with stdvga.
|
||||
* virtio regions are moved to the end of bar #2, to make room for
|
||||
* the stdvga mmio registers at the start of bar #2.
|
||||
*/
|
||||
vpci_dev->modern_mem_bar_idx = 2;
|
||||
vpci_dev->msix_bar_idx = 4;
|
||||
vpci_dev->modern_io_bar_idx = 5;
|
||||
|
||||
if (!virtio_gpu_hostmem_enabled(g->conf)) {
|
||||
/*
|
||||
* Configure virtio bar and regions
|
||||
*
|
||||
* We use bar #2 for the mmio regions, to be compatible with stdvga.
|
||||
* virtio regions are moved to the end of bar #2, to make room for
|
||||
* the stdvga mmio registers at the start of bar #2.
|
||||
*/
|
||||
vpci_dev->modern_mem_bar_idx = 2;
|
||||
vpci_dev->msix_bar_idx = 4;
|
||||
} else {
|
||||
vpci_dev->msix_bar_idx = 1;
|
||||
vpci_dev->modern_mem_bar_idx = 2;
|
||||
memory_region_init(&g->hostmem, OBJECT(g), "virtio-gpu-hostmem",
|
||||
g->conf.hostmem);
|
||||
pci_register_bar(&vpci_dev->pci_dev, 4,
|
||||
PCI_BASE_ADDRESS_SPACE_MEMORY |
|
||||
PCI_BASE_ADDRESS_MEM_PREFETCH |
|
||||
PCI_BASE_ADDRESS_MEM_TYPE_64,
|
||||
&g->hostmem);
|
||||
virtio_pci_add_shm_cap(vpci_dev, 4, 0, g->conf.hostmem,
|
||||
VIRTIO_GPU_SHM_ID_HOST_VISIBLE);
|
||||
}
|
||||
|
||||
if (!(vpci_dev->flags & VIRTIO_PCI_FLAG_PAGE_PER_VQ)) {
|
||||
/*
|
||||
* with page-per-vq=off there is no padding space we can use
|
||||
|
@ -108,12 +108,15 @@ enum virtio_gpu_base_conf_flags {
|
||||
(_cfg.flags & (1 << VIRTIO_GPU_FLAG_BLOB_ENABLED))
|
||||
#define virtio_gpu_context_init_enabled(_cfg) \
|
||||
(_cfg.flags & (1 << VIRTIO_GPU_FLAG_CONTEXT_INIT_ENABLED))
|
||||
#define virtio_gpu_hostmem_enabled(_cfg) \
|
||||
(_cfg.hostmem > 0)
|
||||
|
||||
struct virtio_gpu_base_conf {
|
||||
uint32_t max_outputs;
|
||||
uint32_t flags;
|
||||
uint32_t xres;
|
||||
uint32_t yres;
|
||||
uint64_t hostmem;
|
||||
};
|
||||
|
||||
struct virtio_gpu_ctrl_command {
|
||||
@ -137,6 +140,8 @@ struct VirtIOGPUBase {
|
||||
int renderer_blocked;
|
||||
int enable;
|
||||
|
||||
MemoryRegion hostmem;
|
||||
|
||||
struct virtio_gpu_scanout scanout[VIRTIO_GPU_MAX_SCANOUTS];
|
||||
|
||||
int enabled_output_bitmask;
|
||||
|
Loading…
Reference in New Issue
Block a user