diff options
| author | Jakob Bornecrantz <jakob@vmware.com> | 2010-01-29 22:38:06 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-01-31 20:29:03 -0500 |
| commit | 8e19a951774a16cf2626292ae06fd2b62630e67e (patch) | |
| tree | b1abc1cf6c493200d45663f71b1ff59ab3cd9477 | |
| parent | 110b20c3ddcfa98cc932aef3af2d59b4e0841f08 (diff) | |
drm/vmwgfx: Correctly detect 3D
Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c | 19 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c | 2 |
4 files changed, 23 insertions, 1 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index dedd121d8fe7..f47ff2c05466 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | |||
| @@ -357,6 +357,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) | |||
| 357 | dev_priv->pm_nb.notifier_call = vmwgfx_pm_notifier; | 357 | dev_priv->pm_nb.notifier_call = vmwgfx_pm_notifier; |
| 358 | register_pm_notifier(&dev_priv->pm_nb); | 358 | register_pm_notifier(&dev_priv->pm_nb); |
| 359 | 359 | ||
| 360 | DRM_INFO("%s", vmw_fifo_have_3d(dev_priv) ? "Have 3D\n" : "No 3D\n"); | ||
| 361 | |||
| 360 | return 0; | 362 | return 0; |
| 361 | 363 | ||
| 362 | out_no_device: | 364 | out_no_device: |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 50529a7f06fb..59acc51993f6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | |||
| @@ -389,6 +389,7 @@ extern int vmw_fifo_send_fence(struct vmw_private *dev_priv, | |||
| 389 | uint32_t *sequence); | 389 | uint32_t *sequence); |
| 390 | extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason); | 390 | extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason); |
| 391 | extern int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma); | 391 | extern int vmw_fifo_mmap(struct file *filp, struct vm_area_struct *vma); |
| 392 | extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv); | ||
| 392 | 393 | ||
| 393 | /** | 394 | /** |
| 394 | * TTM glue - vmwgfx_ttm_glue.c | 395 | * TTM glue - vmwgfx_ttm_glue.c |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c index f7d5f70b52dd..4157547cc6e4 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c | |||
| @@ -29,6 +29,25 @@ | |||
| 29 | #include "drmP.h" | 29 | #include "drmP.h" |
| 30 | #include "ttm/ttm_placement.h" | 30 | #include "ttm/ttm_placement.h" |
| 31 | 31 | ||
| 32 | bool vmw_fifo_have_3d(struct vmw_private *dev_priv) | ||
| 33 | { | ||
| 34 | __le32 __iomem *fifo_mem = dev_priv->mmio_virt; | ||
| 35 | uint32_t fifo_min, hwversion; | ||
| 36 | |||
| 37 | fifo_min = ioread32(fifo_mem + SVGA_FIFO_MIN); | ||
| 38 | if (fifo_min <= SVGA_FIFO_3D_HWVERSION * sizeof(unsigned int)) | ||
| 39 | return false; | ||
| 40 | |||
| 41 | hwversion = ioread32(fifo_mem + SVGA_FIFO_3D_HWVERSION); | ||
| 42 | if (hwversion == 0) | ||
| 43 | return false; | ||
| 44 | |||
| 45 | if (hwversion < SVGA3D_HWVERSION_WS65_B1) | ||
| 46 | return false; | ||
| 47 | |||
| 48 | return true; | ||
| 49 | } | ||
| 50 | |||
| 32 | int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo) | 51 | int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo) |
| 33 | { | 52 | { |
| 34 | __le32 __iomem *fifo_mem = dev_priv->mmio_virt; | 53 | __le32 __iomem *fifo_mem = dev_priv->mmio_virt; |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c index 5fa6a4ed238a..778851f9f1d6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c | |||
| @@ -43,7 +43,7 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data, | |||
| 43 | param->value = vmw_overlay_num_free_overlays(dev_priv); | 43 | param->value = vmw_overlay_num_free_overlays(dev_priv); |
| 44 | break; | 44 | break; |
| 45 | case DRM_VMW_PARAM_3D: | 45 | case DRM_VMW_PARAM_3D: |
| 46 | param->value = dev_priv->capabilities & SVGA_CAP_3D ? 1 : 0; | 46 | param->value = vmw_fifo_have_3d(dev_priv) ? 1 : 0; |
| 47 | break; | 47 | break; |
| 48 | case DRM_VMW_PARAM_FIFO_OFFSET: | 48 | case DRM_VMW_PARAM_FIFO_OFFSET: |
| 49 | param->value = dev_priv->mmio_start; | 49 | param->value = dev_priv->mmio_start; |
