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;  |