aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/vmwgfx/svga3d_reg.h14
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.h5
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_mob.c19
3 files changed, 27 insertions, 11 deletions
diff --git a/drivers/gpu/drm/vmwgfx/svga3d_reg.h b/drivers/gpu/drm/vmwgfx/svga3d_reg.h
index b8fca2bef4ec..fce351b7d37c 100644
--- a/drivers/gpu/drm/vmwgfx/svga3d_reg.h
+++ b/drivers/gpu/drm/vmwgfx/svga3d_reg.h
@@ -1938,6 +1938,7 @@ typedef enum SVGAMobFormat {
1938#define SVGA3D_OTABLE_CONTEXT_ENTRY_SIZE 8 1938#define SVGA3D_OTABLE_CONTEXT_ENTRY_SIZE 8
1939#define SVGA3D_OTABLE_SURFACE_ENTRY_SIZE 64 1939#define SVGA3D_OTABLE_SURFACE_ENTRY_SIZE 64
1940#define SVGA3D_OTABLE_SHADER_ENTRY_SIZE 16 1940#define SVGA3D_OTABLE_SHADER_ENTRY_SIZE 16
1941#define SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE 64
1941#define SVGA3D_CONTEXT_DATA_SIZE 16384 1942#define SVGA3D_CONTEXT_DATA_SIZE 16384
1942 1943
1943/* 1944/*
@@ -1948,11 +1949,14 @@ typedef enum SVGAMobFormat {
1948 */ 1949 */
1949 1950
1950typedef enum { 1951typedef enum {
1951 SVGA_OTABLE_MOB = 0, 1952 SVGA_OTABLE_MOB = 0,
1952 SVGA_OTABLE_SURFACE = 1, 1953 SVGA_OTABLE_MIN = 0,
1953 SVGA_OTABLE_CONTEXT = 2, 1954 SVGA_OTABLE_SURFACE = 1,
1954 SVGA_OTABLE_SHADER = 3, 1955 SVGA_OTABLE_CONTEXT = 2,
1955 SVGA_OTABLE_COUNT = 4, 1956 SVGA_OTABLE_SHADER = 3,
1957 SVGA_OTABLE_SCREEN_TARGET = 4,
1958 SVGA_OTABLE_DX9_MAX = 5,
1959 SVGA_OTABLE_MAX = 8
1956} SVGAOTableType; 1960} SVGAOTableType;
1957 1961
1958typedef 1962typedef
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index 2fe0acba77ab..554e7fa33082 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -50,6 +50,7 @@
50#define VMWGFX_MAX_VALIDATIONS 2048 50#define VMWGFX_MAX_VALIDATIONS 2048
51#define VMWGFX_MAX_DISPLAYS 16 51#define VMWGFX_MAX_DISPLAYS 16
52#define VMWGFX_CMD_BOUNCE_INIT_SIZE 32768 52#define VMWGFX_CMD_BOUNCE_INIT_SIZE 32768
53#define VMWGFX_ENABLE_SCREEN_TARGET_OTABLE 0
53 54
54/* 55/*
55 * Perhaps we should have sysfs entries for these. 56 * Perhaps we should have sysfs entries for these.
@@ -57,9 +58,11 @@
57#define VMWGFX_NUM_GB_CONTEXT 256 58#define VMWGFX_NUM_GB_CONTEXT 256
58#define VMWGFX_NUM_GB_SHADER 20000 59#define VMWGFX_NUM_GB_SHADER 20000
59#define VMWGFX_NUM_GB_SURFACE 32768 60#define VMWGFX_NUM_GB_SURFACE 32768
61#define VMWGFX_NUM_GB_SCREEN_TARGET VMWGFX_MAX_DISPLAYS
60#define VMWGFX_NUM_MOB (VMWGFX_NUM_GB_CONTEXT +\ 62#define VMWGFX_NUM_MOB (VMWGFX_NUM_GB_CONTEXT +\
61 VMWGFX_NUM_GB_SHADER +\ 63 VMWGFX_NUM_GB_SHADER +\
62 VMWGFX_NUM_GB_SURFACE) 64 VMWGFX_NUM_GB_SURFACE +\
65 VMWGFX_NUM_GB_SCREEN_TARGET)
63 66
64#define VMW_PL_GMR TTM_PL_PRIV0 67#define VMW_PL_GMR TTM_PL_PRIV0
65#define VMW_PL_FLAG_GMR TTM_PL_FLAG_PRIV0 68#define VMW_PL_FLAG_GMR TTM_PL_FLAG_PRIV0
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
index db03527b0b2f..388b64d9752f 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c
@@ -28,6 +28,12 @@
28#include "vmwgfx_drv.h" 28#include "vmwgfx_drv.h"
29 29
30/* 30/*
31 * If we set up the screen target otable, screen objects stop working.
32 */
33
34#define VMW_OTABLE_SETUP_SUB ((VMWGFX_ENABLE_SCREEN_TARGET_OTABLE) ? 0 : 1)
35
36/*
31 * Currently the MOB interface does not support 64-bit page frame numbers. 37 * Currently the MOB interface does not support 64-bit page frame numbers.
32 * This might change in the future to be similar to the GMR2 interface 38 * This might change in the future to be similar to the GMR2 interface
33 * when virtual machines support memory beyond 16TB. 39 * when virtual machines support memory beyond 16TB.
@@ -214,7 +220,7 @@ int vmw_otables_setup(struct vmw_private *dev_priv)
214 SVGAOTableType i; 220 SVGAOTableType i;
215 int ret; 221 int ret;
216 222
217 otables = kzalloc(SVGA_OTABLE_COUNT * sizeof(*otables), 223 otables = kzalloc(SVGA_OTABLE_DX9_MAX * sizeof(*otables),
218 GFP_KERNEL); 224 GFP_KERNEL);
219 if (unlikely(otables == NULL)) { 225 if (unlikely(otables == NULL)) {
220 DRM_ERROR("Failed to allocate space for otable " 226 DRM_ERROR("Failed to allocate space for otable "
@@ -230,9 +236,12 @@ int vmw_otables_setup(struct vmw_private *dev_priv)
230 VMWGFX_NUM_GB_CONTEXT * SVGA3D_OTABLE_CONTEXT_ENTRY_SIZE; 236 VMWGFX_NUM_GB_CONTEXT * SVGA3D_OTABLE_CONTEXT_ENTRY_SIZE;
231 otables[SVGA_OTABLE_SHADER].size = 237 otables[SVGA_OTABLE_SHADER].size =
232 VMWGFX_NUM_GB_SHADER * SVGA3D_OTABLE_SHADER_ENTRY_SIZE; 238 VMWGFX_NUM_GB_SHADER * SVGA3D_OTABLE_SHADER_ENTRY_SIZE;
239 otables[SVGA_OTABLE_SCREEN_TARGET].size =
240 VMWGFX_NUM_GB_SCREEN_TARGET *
241 SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE;
233 242
234 bo_size = 0; 243 bo_size = 0;
235 for (i = 0; i < SVGA_OTABLE_COUNT; ++i) { 244 for (i = 0; i < SVGA_OTABLE_DX9_MAX; ++i) {
236 otables[i].size = 245 otables[i].size =
237 (otables[i].size + PAGE_SIZE - 1) & PAGE_MASK; 246 (otables[i].size + PAGE_SIZE - 1) & PAGE_MASK;
238 bo_size += otables[i].size; 247 bo_size += otables[i].size;
@@ -259,7 +268,7 @@ int vmw_otables_setup(struct vmw_private *dev_priv)
259 ttm_bo_unreserve(dev_priv->otable_bo); 268 ttm_bo_unreserve(dev_priv->otable_bo);
260 269
261 offset = 0; 270 offset = 0;
262 for (i = 0; i < SVGA_OTABLE_COUNT; ++i) { 271 for (i = 0; i < SVGA_OTABLE_DX9_MAX - VMW_OTABLE_SETUP_SUB; ++i) {
263 ret = vmw_setup_otable_base(dev_priv, i, offset, 272 ret = vmw_setup_otable_base(dev_priv, i, offset,
264 &otables[i]); 273 &otables[i]);
265 if (unlikely(ret != 0)) 274 if (unlikely(ret != 0))
@@ -273,7 +282,7 @@ int vmw_otables_setup(struct vmw_private *dev_priv)
273out_unreserve: 282out_unreserve:
274 ttm_bo_unreserve(dev_priv->otable_bo); 283 ttm_bo_unreserve(dev_priv->otable_bo);
275out_no_setup: 284out_no_setup:
276 for (i = 0; i < SVGA_OTABLE_COUNT; ++i) 285 for (i = 0; i < SVGA_OTABLE_DX9_MAX - VMW_OTABLE_SETUP_SUB; ++i)
277 vmw_takedown_otable_base(dev_priv, i, &otables[i]); 286 vmw_takedown_otable_base(dev_priv, i, &otables[i]);
278 287
279 ttm_bo_unref(&dev_priv->otable_bo); 288 ttm_bo_unref(&dev_priv->otable_bo);
@@ -296,7 +305,7 @@ void vmw_otables_takedown(struct vmw_private *dev_priv)
296 struct ttm_buffer_object *bo = dev_priv->otable_bo; 305 struct ttm_buffer_object *bo = dev_priv->otable_bo;
297 int ret; 306 int ret;
298 307
299 for (i = 0; i < SVGA_OTABLE_COUNT; ++i) 308 for (i = 0; i < SVGA_OTABLE_DX9_MAX - VMW_OTABLE_SETUP_SUB; ++i)
300 vmw_takedown_otable_base(dev_priv, i, 309 vmw_takedown_otable_base(dev_priv, i,
301 &dev_priv->otables[i]); 310 &dev_priv->otables[i]);
302 311