diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_mob.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c index 0a8cc28d6606..7055cbefc768 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 OR MIT /************************************************************************** * - * Copyright 2012-2021 VMware, Inc., Palo Alto, CA., USA + * Copyright 2012-2023 VMware, Inc., Palo Alto, CA., USA * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the @@ -25,10 +25,11 @@ * **************************************************************************/ -#include <linux/highmem.h> - +#include "vmwgfx_bo.h" #include "vmwgfx_drv.h" +#include <linux/highmem.h> + #ifdef CONFIG_64BIT #define VMW_PPN_SIZE 8 #define VMW_MOBFMT_PTDEPTH_0 SVGA3D_MOBFMT_PT64_0 @@ -50,7 +51,7 @@ * @pt_root_page DMA address of the level 0 page of the page table. */ struct vmw_mob { - struct ttm_buffer_object *pt_bo; + struct vmw_bo *pt_bo; unsigned long num_pages; unsigned pt_level; dma_addr_t pt_root_page; @@ -203,7 +204,7 @@ static void vmw_takedown_otable_base(struct vmw_private *dev_priv, if (otable->page_table == NULL) return; - bo = otable->page_table->pt_bo; + bo = &otable->page_table->pt_bo->tbo; cmd = VMW_CMD_RESERVE(dev_priv, sizeof(*cmd)); if (unlikely(cmd == NULL)) return; @@ -251,7 +252,9 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, bo_size += otables[i].size; } - ret = vmw_bo_create_and_populate(dev_priv, bo_size, &batch->otable_bo); + ret = vmw_bo_create_and_populate(dev_priv, bo_size, + VMW_BO_DOMAIN_WAITABLE_SYS, + &batch->otable_bo); if (unlikely(ret != 0)) return ret; @@ -260,7 +263,8 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, if (!batch->otables[i].enabled) continue; - ret = vmw_setup_otable_base(dev_priv, i, batch->otable_bo, + ret = vmw_setup_otable_base(dev_priv, i, + &batch->otable_bo->tbo, offset, &otables[i]); if (unlikely(ret != 0)) @@ -277,8 +281,8 @@ out_no_setup: &batch->otables[i]); } - vmw_bo_unpin_unlocked(batch->otable_bo); - ttm_bo_put(batch->otable_bo); + vmw_bo_unpin_unlocked(&batch->otable_bo->tbo); + ttm_bo_put(&batch->otable_bo->tbo); batch->otable_bo = NULL; return ret; } @@ -329,7 +333,7 @@ static void vmw_otable_batch_takedown(struct vmw_private *dev_priv, struct vmw_otable_batch *batch) { SVGAOTableType i; - struct ttm_buffer_object *bo = batch->otable_bo; + struct ttm_buffer_object *bo = &batch->otable_bo->tbo; int ret; for (i = 0; i < batch->num_otables; ++i) @@ -344,8 +348,7 @@ static void vmw_otable_batch_takedown(struct vmw_private *dev_priv, ttm_bo_unpin(bo); ttm_bo_unreserve(bo); - ttm_bo_put(batch->otable_bo); - batch->otable_bo = NULL; + vmw_bo_unreference(&batch->otable_bo); } /* @@ -413,7 +416,9 @@ static int vmw_mob_pt_populate(struct vmw_private *dev_priv, { BUG_ON(mob->pt_bo != NULL); - return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE, &mob->pt_bo); + return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE, + VMW_BO_DOMAIN_WAITABLE_SYS, + &mob->pt_bo); } /** @@ -494,7 +499,7 @@ static void vmw_mob_pt_setup(struct vmw_mob *mob, unsigned long num_data_pages) { unsigned long num_pt_pages = 0; - struct ttm_buffer_object *bo = mob->pt_bo; + struct ttm_buffer_object *bo = &mob->pt_bo->tbo; struct vmw_piter save_pt_iter = {0}; struct vmw_piter pt_iter; const struct vmw_sg_table *vsgt; @@ -531,9 +536,8 @@ static void vmw_mob_pt_setup(struct vmw_mob *mob, void vmw_mob_destroy(struct vmw_mob *mob) { if (mob->pt_bo) { - vmw_bo_unpin_unlocked(mob->pt_bo); - ttm_bo_put(mob->pt_bo); - mob->pt_bo = NULL; + vmw_bo_unpin_unlocked(&mob->pt_bo->tbo); + vmw_bo_unreference(&mob->pt_bo); } kfree(mob); } @@ -552,7 +556,7 @@ void vmw_mob_unbind(struct vmw_private *dev_priv, SVGA3dCmdDestroyGBMob body; } *cmd; int ret; - struct ttm_buffer_object *bo = mob->pt_bo; + struct ttm_buffer_object *bo = &mob->pt_bo->tbo; if (bo) { ret = ttm_bo_reserve(bo, false, true, NULL); @@ -644,9 +648,8 @@ int vmw_mob_bind(struct vmw_private *dev_priv, out_no_cmd_space: vmw_fifo_resource_dec(dev_priv); if (pt_set_up) { - vmw_bo_unpin_unlocked(mob->pt_bo); - ttm_bo_put(mob->pt_bo); - mob->pt_bo = NULL; + vmw_bo_unpin_unlocked(&mob->pt_bo->tbo); + vmw_bo_unreference(&mob->pt_bo); } return -ENOMEM; |