From: Gerd Hoffmann <kraxel@redhat.com> To: dri-devel@lists.freedesktop.org, David Airlie <airlied@redhat.com> Cc: andr2000@gmail.com, noralf@tronnes.org, Gerd Hoffmann <kraxel@redhat.com>, David Airlie <airlied@linux.ie>, virtualization@lists.linux-foundation.org (open list:DRM DRIVER FOR BOCHS VIRTUAL GPU), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 13/16] drm/bochs: add basic prime support Date: Fri, 11 Jan 2019 06:37:49 +0100 [thread overview] Message-ID: <20190111053752.4004-14-kraxel@redhat.com> (raw) In-Reply-To: <20190111053752.4004-1-kraxel@redhat.com> Just enough to make the generic framebuffer emulation happy. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> --- drivers/gpu/drm/bochs/bochs.h | 7 ++++++ drivers/gpu/drm/bochs/bochs_drv.c | 11 ++++++++- drivers/gpu/drm/bochs/bochs_mm.c | 49 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bochs/bochs.h b/drivers/gpu/drm/bochs/bochs.h index d0d474e06f..ede22beb85 100644 --- a/drivers/gpu/drm/bochs/bochs.h +++ b/drivers/gpu/drm/bochs/bochs.h @@ -145,6 +145,13 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, int bochs_bo_pin(struct bochs_bo *bo, u32 pl_flag); int bochs_bo_unpin(struct bochs_bo *bo); +int bochs_gem_prime_pin(struct drm_gem_object *obj); +void bochs_gem_prime_unpin(struct drm_gem_object *obj); +void *bochs_gem_prime_vmap(struct drm_gem_object *obj); +void bochs_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); +int bochs_gem_prime_mmap(struct drm_gem_object *obj, + struct vm_area_struct *vma); + /* bochs_kms.c */ int bochs_kms_init(struct bochs_device *bochs); void bochs_kms_fini(struct bochs_device *bochs); diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c index a8cb22cffe..a3f4e21078 100644 --- a/drivers/gpu/drm/bochs/bochs_drv.c +++ b/drivers/gpu/drm/bochs/bochs_drv.c @@ -81,7 +81,8 @@ static const struct file_operations bochs_fops = { }; static struct drm_driver bochs_driver = { - .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC, + .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC | + DRIVER_PRIME, .fops = &bochs_fops, .name = "bochs-drm", .desc = "bochs dispi vga interface (qemu stdvga)", @@ -91,6 +92,14 @@ static struct drm_driver bochs_driver = { .gem_free_object_unlocked = bochs_gem_free_object, .dumb_create = bochs_dumb_create, .dumb_map_offset = bochs_dumb_mmap_offset, + + .gem_prime_export = drm_gem_prime_export, + .gem_prime_import = drm_gem_prime_import, + .gem_prime_pin = bochs_gem_prime_pin, + .gem_prime_unpin = bochs_gem_prime_unpin, + .gem_prime_vmap = bochs_gem_prime_vmap, + .gem_prime_vunmap = bochs_gem_prime_vunmap, + .gem_prime_mmap = bochs_gem_prime_mmap, }; /* ---------------------------------------------------------------------- */ diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c index fcbf35456d..641a33f134 100644 --- a/drivers/gpu/drm/bochs/bochs_mm.c +++ b/drivers/gpu/drm/bochs/bochs_mm.c @@ -395,3 +395,52 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, drm_gem_object_put_unlocked(obj); return 0; } + +/* ---------------------------------------------------------------------- */ + +int bochs_gem_prime_pin(struct drm_gem_object *obj) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + return bochs_bo_pin(bo, TTM_PL_FLAG_VRAM); +} + +void bochs_gem_prime_unpin(struct drm_gem_object *obj) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + bochs_bo_unpin(bo); +} + +void *bochs_gem_prime_vmap(struct drm_gem_object *obj) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + bool is_iomem; + int ret; + + ret = bochs_bo_pin(bo, TTM_PL_FLAG_VRAM); + if (ret) + return NULL; + ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); + if (ret) { + bochs_bo_unpin(bo); + return NULL; + } + return ttm_kmap_obj_virtual(&bo->kmap, &is_iomem); +} + +void bochs_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + ttm_bo_kunmap(&bo->kmap); + bochs_bo_unpin(bo); +} + +int bochs_gem_prime_mmap(struct drm_gem_object *obj, + struct vm_area_struct *vma) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + return ttm_fbdev_mmap(vma, &bo->bo); +} -- 2.9.3
WARNING: multiple messages have this Message-ID (diff)
From: Gerd Hoffmann <kraxel@redhat.com> To: dri-devel@lists.freedesktop.org, David Airlie <airlied@redhat.com> Cc: andr2000@gmail.com, open list <linux-kernel@vger.kernel.org>, "open list:DRM DRIVER FOR BOCHS VIRTUAL GPU" <virtualization@lists.linux-foundation.org>, David Airlie <airlied@linux.ie>, Gerd Hoffmann <kraxel@redhat.com> Subject: [PATCH v4 13/16] drm/bochs: add basic prime support Date: Fri, 11 Jan 2019 06:37:49 +0100 [thread overview] Message-ID: <20190111053752.4004-14-kraxel@redhat.com> (raw) In-Reply-To: <20190111053752.4004-1-kraxel@redhat.com> Just enough to make the generic framebuffer emulation happy. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> --- drivers/gpu/drm/bochs/bochs.h | 7 ++++++ drivers/gpu/drm/bochs/bochs_drv.c | 11 ++++++++- drivers/gpu/drm/bochs/bochs_mm.c | 49 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bochs/bochs.h b/drivers/gpu/drm/bochs/bochs.h index d0d474e06f..ede22beb85 100644 --- a/drivers/gpu/drm/bochs/bochs.h +++ b/drivers/gpu/drm/bochs/bochs.h @@ -145,6 +145,13 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, int bochs_bo_pin(struct bochs_bo *bo, u32 pl_flag); int bochs_bo_unpin(struct bochs_bo *bo); +int bochs_gem_prime_pin(struct drm_gem_object *obj); +void bochs_gem_prime_unpin(struct drm_gem_object *obj); +void *bochs_gem_prime_vmap(struct drm_gem_object *obj); +void bochs_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); +int bochs_gem_prime_mmap(struct drm_gem_object *obj, + struct vm_area_struct *vma); + /* bochs_kms.c */ int bochs_kms_init(struct bochs_device *bochs); void bochs_kms_fini(struct bochs_device *bochs); diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c index a8cb22cffe..a3f4e21078 100644 --- a/drivers/gpu/drm/bochs/bochs_drv.c +++ b/drivers/gpu/drm/bochs/bochs_drv.c @@ -81,7 +81,8 @@ static const struct file_operations bochs_fops = { }; static struct drm_driver bochs_driver = { - .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC, + .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC | + DRIVER_PRIME, .fops = &bochs_fops, .name = "bochs-drm", .desc = "bochs dispi vga interface (qemu stdvga)", @@ -91,6 +92,14 @@ static struct drm_driver bochs_driver = { .gem_free_object_unlocked = bochs_gem_free_object, .dumb_create = bochs_dumb_create, .dumb_map_offset = bochs_dumb_mmap_offset, + + .gem_prime_export = drm_gem_prime_export, + .gem_prime_import = drm_gem_prime_import, + .gem_prime_pin = bochs_gem_prime_pin, + .gem_prime_unpin = bochs_gem_prime_unpin, + .gem_prime_vmap = bochs_gem_prime_vmap, + .gem_prime_vunmap = bochs_gem_prime_vunmap, + .gem_prime_mmap = bochs_gem_prime_mmap, }; /* ---------------------------------------------------------------------- */ diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c index fcbf35456d..641a33f134 100644 --- a/drivers/gpu/drm/bochs/bochs_mm.c +++ b/drivers/gpu/drm/bochs/bochs_mm.c @@ -395,3 +395,52 @@ int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, drm_gem_object_put_unlocked(obj); return 0; } + +/* ---------------------------------------------------------------------- */ + +int bochs_gem_prime_pin(struct drm_gem_object *obj) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + return bochs_bo_pin(bo, TTM_PL_FLAG_VRAM); +} + +void bochs_gem_prime_unpin(struct drm_gem_object *obj) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + bochs_bo_unpin(bo); +} + +void *bochs_gem_prime_vmap(struct drm_gem_object *obj) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + bool is_iomem; + int ret; + + ret = bochs_bo_pin(bo, TTM_PL_FLAG_VRAM); + if (ret) + return NULL; + ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); + if (ret) { + bochs_bo_unpin(bo); + return NULL; + } + return ttm_kmap_obj_virtual(&bo->kmap, &is_iomem); +} + +void bochs_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + ttm_bo_kunmap(&bo->kmap); + bochs_bo_unpin(bo); +} + +int bochs_gem_prime_mmap(struct drm_gem_object *obj, + struct vm_area_struct *vma) +{ + struct bochs_bo *bo = gem_to_bochs_bo(obj); + + return ttm_fbdev_mmap(vma, &bo->bo); +} -- 2.9.3 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-01-11 5:38 UTC|newest] Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-11 5:37 [PATCH v4 00/16] drm/bochs: cleanups, atomic modesetting, generic fbdev Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 01/16] drm/bochs: encoder cleanup Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 02/16] drm/bochs: split bochs_hw_setmode Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 03/16] drm/bochs: atomic: add atomic_flush+atomic_enable callbacks Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 04/16] drm/bochs: atomic: add mode_set_nofb callback Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 05/16] drm/bochs: atomic: switch planes to atomic, wire up helpers Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 06/16] drm/bochs: atomic: use atomic set_config helper Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 07/16] drm/bochs: atomic: use atomic page_flip helper Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 08/16] drm/bochs: atomic: use suspend/resume helpers Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 11:08 ` Oleksandr Andrushchenko 2019-01-11 11:08 ` Oleksandr Andrushchenko 2019-01-11 5:37 ` [PATCH v4 09/16] drm/bochs: atomic: set DRIVER_ATOMIC Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 10/16] drm/bochs: remove old bochs_crtc_* functions Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 11/16] drm/bochs: drop unused gpu_addr arg from bochs_bo_pin() Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 12/16] drm/bochs: move ttm_bo_(un)reserve calls into bochs_bo_{pin, unpin} Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 12/16] drm/bochs: move ttm_bo_(un)reserve calls into bochs_bo_{pin,unpin} Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 12/16] drm/bochs: move ttm_bo_(un)reserve calls into bochs_bo_{pin, unpin} Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 13/16] drm/bochs: add basic prime support Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann [this message] 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 14/16] drm/bochs: switch to generic drm fbdev emulation Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 15/16] drm/bochs: drop old fbdev emulation code Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` [PATCH v4 16/16] drm/bochs: move remaining fb bits to kms Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann 2019-01-11 5:37 ` Gerd Hoffmann
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190111053752.4004-14-kraxel@redhat.com \ --to=kraxel@redhat.com \ --cc=airlied@linux.ie \ --cc=airlied@redhat.com \ --cc=andr2000@gmail.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=linux-kernel@vger.kernel.org \ --cc=noralf@tronnes.org \ --cc=virtualization@lists.linux-foundation.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.