search for: qxl_bo_physical_address

Displaying 20 results from an estimated 25 matches for "qxl_bo_physical_address".

2018 Nov 28
0
[PATCH 2/6] drm/qxl: drop unused offset parameter from qxl_io_create_primary()
...create_primary(struct qxl_device *qdev, struct qxl_bo *bo) { struct qxl_surface_create *create; @@ -387,9 +386,9 @@ void qxl_io_create_primary(struct qxl_device *qdev, create->height = bo->surf.height; create->stride = bo->surf.stride; if (bo->shadow) { - create->mem = qxl_bo_physical_address(qdev, bo->shadow, offset); + create->mem = qxl_bo_physical_address(qdev, bo->shadow, 0); } else { - create->mem = qxl_bo_physical_address(qdev, bo, offset); + create->mem = qxl_bo_physical_address(qdev, bo, 0); } DRM_DEBUG_DRIVER("mem = %llx, from %p\n", create-&...
2018 Dec 12
0
[PATCH v2 11/18] drm/qxl: drop unused offset parameter from qxl_io_create_primary()
...create_primary(struct qxl_device *qdev, struct qxl_bo *bo) { struct qxl_surface_create *create; @@ -387,9 +386,9 @@ void qxl_io_create_primary(struct qxl_device *qdev, create->height = bo->surf.height; create->stride = bo->surf.stride; if (bo->shadow) { - create->mem = qxl_bo_physical_address(qdev, bo->shadow, offset); + create->mem = qxl_bo_physical_address(qdev, bo->shadow, 0); } else { - create->mem = qxl_bo_physical_address(qdev, bo, offset); + create->mem = qxl_bo_physical_address(qdev, bo, 0); } DRM_DEBUG_DRIVER("mem = %llx, from %p\n", create-&...
2018 Apr 18
0
[PATCH 2/2] qxl: keep separate release_bo pointer
...0 +179,9 @@ qxl_push_command_ring_release(struct qxl_device *qdev, struct qxl_release *relea uint32_t type, bool interruptible) { struct qxl_command cmd; - struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head); cmd.type = type; - cmd.data = qxl_bo_physical_address(qdev, to_qxl_bo(entry->tv.bo), release->release_offset); + cmd.data = qxl_bo_physical_address(qdev, release->release_bo, release->release_offset); return qxl_ring_push(qdev->command_ring, &cmd, interruptible); } @@ -192,10 +191,9 @@ qxl_push_cursor_ring_release(struct qxl_de...
2018 Nov 28
0
[PATCH 4/6] drm/qxl: use shadow bo directly
...alse; qdev->primary_bo = NULL; } @@ -388,11 +389,7 @@ void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo) create->width = bo->surf.width; create->height = bo->surf.height; create->stride = bo->surf.stride; - if (bo->shadow) { - create->mem = qxl_bo_physical_address(qdev, bo->shadow, 0); - } else { - create->mem = qxl_bo_physical_address(qdev, bo, 0); - } + create->mem = qxl_bo_physical_address(qdev, bo, 0); DRM_DEBUG_DRIVER("mem = %llx, from %p\n", create->mem, bo->kptr); @@ -401,6 +398,7 @@ void qxl_io_create_primary(struct qx...
2018 Dec 12
0
[PATCH v2 13/18] drm/qxl: use shadow bo directly
...alse; qdev->primary_bo = NULL; } @@ -388,11 +389,7 @@ void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo) create->width = bo->surf.width; create->height = bo->surf.height; create->stride = bo->surf.stride; - if (bo->shadow) { - create->mem = qxl_bo_physical_address(qdev, bo->shadow, 0); - } else { - create->mem = qxl_bo_physical_address(qdev, bo, 0); - } + create->mem = qxl_bo_physical_address(qdev, bo, 0); DRM_DEBUG_DRIVER("mem = %llx, from %p\n", create->mem, bo->kptr); @@ -401,6 +398,7 @@ void qxl_io_create_primary(struct qx...
2018 Dec 12
0
[PATCH v2 01/18] drm/qxl: drop ttm_mem_reg arg from qxl_hw_surface_alloc()
...* TODO - need to hold one of the locks to read tbo.offset */ - cmd->u.surface_create.data = slot->high_bits; - - cmd->u.surface_create.data |= (new_mem->start << PAGE_SHIFT) + surf->tbo.bdev->man[new_mem->mem_type].gpu_offset; - } else - cmd->u.surface_create.data = qxl_bo_physical_address(qdev, surf, 0); + cmd->u.surface_create.data = qxl_bo_physical_address(qdev, surf, 0); cmd->surface_id = surf->surface_id; qxl_release_unmap(qdev, release, &cmd->release_info); diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c index 91f3bbc73e..3...
2020 Feb 18
5
[PATCH 8/8] drm/ttm: do not keep GPU dependent addresses
...ean for it is illegal to get the > GPU BO address if it is inaccessible (e.g. in the system domain). > > Could be that some driver relied on the behavior to get 0 for the > system domain here. I wonder how to verify that ? If I understand correctly: 1 qxl uses bo->offset only in qxl_bo_physical_address() which is not in? system domain. 2 unfortunately I can't say the same for bochs but it works with this patch series so I think bochs is fine as well. 3 vmwgfx uses bo->offset only when bo->mem.mem_type == TTM_PL_VRAM so vmwgfx should be fine. 4 amdgpu and radeon runs with 'bo-&...
2018 Dec 12
0
[PATCH v2 18/18] drm/qxl: remove dead qxl fbdev emulation code
...cdbe..4a0331b3ff 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -220,8 +220,6 @@ struct qxl_device { struct qxl_mman mman; struct qxl_gem gem; - struct drm_fb_helper fb_helper; - void *ram_physical; struct qxl_ring *release_ring; @@ -322,12 +320,6 @@ qxl_bo_physical_address(struct qxl_device *qdev, struct qxl_bo *bo, return slot->high_bits | (bo->tbo.offset - slot->gpu_offset + offset); } -/* qxl_fb.c */ -#define QXLFB_CONN_LIMIT 1 - -int qxl_fbdev_init(struct qxl_device *qdev); -void qxl_fbdev_fini(struct qxl_device *qdev); - /* qxl_display.c */ void...
2020 Feb 18
2
[PATCH 8/8] drm/ttm: do not keep GPU dependent addresses
...accessible (e.g. in the system domain). >>> >>> Could be that some driver relied on the behavior to get 0 for the >>> system domain here. >> I wonder how to verify that ? >> >> If I understand correctly: >> >> 1 qxl uses bo->offset only in qxl_bo_physical_address() which is not in >> system domain. >> >> 2 unfortunately I can't say the same for bochs but it works with this >> patch series so I think bochs is fine as well. >> >> 3 vmwgfx uses bo->offset only when bo->mem.mem_type == TTM_PL_VRAM so >> vmwgfx...
2020 Feb 18
2
[PATCH 8/8] drm/ttm: do not keep GPU dependent addresses
...;>>>> Could be that some driver relied on the behavior to get 0 for the >>>>> system domain here. >>>> I wonder how to verify that ? >>>> >>>> If I understand correctly: >>>> >>>> 1 qxl uses bo->offset only in qxl_bo_physical_address() which is not in >>>> system domain. >>>> >>>> 2 unfortunately I can't say the same for bochs but it works with this >>>> patch series so I think bochs is fine as well. >>>> >>>> 3 vmwgfx uses bo->offset only when bo-&g...
2018 Nov 28
0
[PATCH 6/6] drm/qxl: use qxl_num_crtc directly
...e = sizeof(struct qxl_monitors_config) + - max_allowed * sizeof(struct qxl_head); + qxl_num_crtc * sizeof(struct qxl_head); ret = qxl_gem_object_create(qdev, monitors_config_size, 0, QXL_GEM_DOMAIN_VRAM, @@ -1170,9 +1168,8 @@ int qxl_create_monitors_object(struct qxl_device *qdev) qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); memset(qdev->monitors_config, 0, monitors_config_size); - qdev->monitors_config->max_allowed = max_allowed; - - qdev->dumb_heads = kcalloc(max_allowed, sizeof(qdev->dumb_heads[0]), GFP_KERNEL); + qdev->dumb_heads = kcalloc(qxl_num_crtc, s...
2018 Dec 06
0
[PATCH] drm/qxl: use qxl_num_crtc directly
...e = sizeof(struct qxl_monitors_config) + - max_allowed * sizeof(struct qxl_head); + qxl_num_crtc * sizeof(struct qxl_head); ret = qxl_gem_object_create(qdev, monitors_config_size, 0, QXL_GEM_DOMAIN_VRAM, @@ -1121,7 +1119,6 @@ int qxl_create_monitors_object(struct qxl_device *qdev) qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); memset(qdev->monitors_config, 0, monitors_config_size); - qdev->monitors_config->max_allowed = max_allowed; return 0; } -- 2.9.3
2018 Dec 06
0
[PATCH v2] drm/qxl: use qxl_num_crtc directly
...e = sizeof(struct qxl_monitors_config) + - max_allowed * sizeof(struct qxl_head); + qxl_num_crtc * sizeof(struct qxl_head); ret = qxl_gem_object_create(qdev, monitors_config_size, 0, QXL_GEM_DOMAIN_VRAM, @@ -1121,7 +1119,6 @@ int qxl_create_monitors_object(struct qxl_device *qdev) qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); memset(qdev->monitors_config, 0, monitors_config_size); - qdev->monitors_config->max_allowed = max_allowed; return 0; } -- 2.9.3
2018 Dec 12
0
[PATCH v2 02/18] drm/qxl: drop unused qxl_fb_virtual_address
...void qxl_ring_init_hdr(struct qxl_ring *ring); int qxl_check_idle(struct qxl_ring *ring); -static inline void * -qxl_fb_virtual_address(struct qxl_device *qdev, unsigned long physical) -{ - DRM_DEBUG_DRIVER("not implemented (%lu)\n", physical); - return 0; -} - static inline uint64_t qxl_bo_physical_address(struct qxl_device *qdev, struct qxl_bo *bo, unsigned long offset) -- 2.9.3
2018 Dec 12
0
[PATCH v2 04/18] drm/qxl: change the way slot is detected
...m/qxl/qxl_drv.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index f9dddfe7d9..d015d4fff1 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -311,7 +311,8 @@ static inline uint64_t qxl_bo_physical_address(struct qxl_device *qdev, struct qxl_bo *bo, unsigned long offset) { - struct qxl_memslot *slot = bo->type == QXL_GEM_DOMAIN_VRAM + struct qxl_memslot *slot = + (bo->tbo.mem.mem_type == TTM_PL_VRAM) ? &qdev->main_slot : &qdev->surfaces_slot; /* TODO - need to hold on...
2018 Dec 12
0
[PATCH v2 15/18] drm/qxl: use qxl_num_crtc directly
...e = sizeof(struct qxl_monitors_config) + - max_allowed * sizeof(struct qxl_head); + qxl_num_crtc * sizeof(struct qxl_head); ret = qxl_gem_object_create(qdev, monitors_config_size, 0, QXL_GEM_DOMAIN_VRAM, @@ -1172,9 +1170,8 @@ int qxl_create_monitors_object(struct qxl_device *qdev) qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); memset(qdev->monitors_config, 0, monitors_config_size); - qdev->monitors_config->max_allowed = max_allowed; - - qdev->dumb_heads = kcalloc(max_allowed, sizeof(qdev->dumb_heads[0]), GFP_KERNEL); + qdev->dumb_heads = kcalloc(qxl_num_crtc, s...
2018 Dec 12
0
[PATCH v2 06/18] drm/qxl: use separate offset spaces for the two slots / ttm memory types.
.../drm/qxl/qxl_drv.h index 3ebe66abf2..27e0a3fc08 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h @@ -136,6 +136,7 @@ struct qxl_memslot { uint64_t start_phys_addr; uint64_t size; uint64_t high_bits; + uint64_t gpu_offset; }; enum { @@ -312,8 +313,10 @@ qxl_bo_physical_address(struct qxl_device *qdev, struct qxl_bo *bo, (bo->tbo.mem.mem_type == TTM_PL_VRAM) ? &qdev->main_slot : &qdev->surfaces_slot; + WARN_ON_ONCE((bo->tbo.offset & slot->gpu_offset) != slot->gpu_offset); + /* TODO - need to hold one of the locks to read tbo.offset...
2020 Feb 18
0
[PATCH 8/8] drm/ttm: do not keep GPU dependent addresses
...domain). >> >> Could be that some driver relied on the behavior to get 0 for the >> system domain here. > > I wonder how to verify that ? No idea, but I wouldn't worry to much about that. > > If I understand correctly: > > 1 qxl uses bo->offset only in qxl_bo_physical_address() which is not > in? system domain. > > 2 unfortunately I can't say the same for bochs but it works with this > patch series so I think bochs is fine as well. > > 3 vmwgfx uses bo->offset only when bo->mem.mem_type == TTM_PL_VRAM so > vmwgfx should be fine. > &g...
2020 Feb 18
0
[PATCH 8/8] drm/ttm: do not keep GPU dependent addresses
...U BO address if it is inaccessible (e.g. in the system domain). >> >> Could be that some driver relied on the behavior to get 0 for the >> system domain here. > > I wonder how to verify that ? > > If I understand correctly: > > 1 qxl uses bo->offset only in qxl_bo_physical_address() which is not in? > system domain. > > 2 unfortunately I can't say the same for bochs but it works with this > patch series so I think bochs is fine as well. > > 3 vmwgfx uses bo->offset only when bo->mem.mem_type == TTM_PL_VRAM so > vmwgfx should be fine. > &g...
2018 Dec 12
0
[PATCH v2 03/18] drm/qxl: simplify slot management
...truct qxl_memslot *mem_slots; - uint8_t n_mem_slots; - - uint8_t main_mem_slot; - uint8_t surfaces_mem_slot; + struct qxl_memslot main_slot; + struct qxl_memslot surfaces_slot; uint8_t slot_id_bits; uint8_t slot_gen_bits; uint64_t va_slot_mask; @@ -312,8 +311,8 @@ static inline uint64_t qxl_bo_physical_address(struct qxl_device *qdev, struct qxl_bo *bo, unsigned long offset) { - int slot_id = bo->type == QXL_GEM_DOMAIN_VRAM ? qdev->main_mem_slot : qdev->surfaces_mem_slot; - struct qxl_memslot *slot = &(qdev->mem_slots[slot_id]); + struct qxl_memslot *slot = bo->type == QXL_GEM_DOM...