diff options
-rw-r--r-- | drivers/gpu/drm/vmwgfx/svga3d_reg.h | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 19 |
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 | ||
1950 | typedef enum { | 1951 | typedef 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 | ||
1958 | typedef | 1962 | typedef |
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) | |||
273 | out_unreserve: | 282 | out_unreserve: |
274 | ttm_bo_unreserve(dev_priv->otable_bo); | 283 | ttm_bo_unreserve(dev_priv->otable_bo); |
275 | out_no_setup: | 284 | out_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 | ||