summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2011-11-10 19:57:04 +0100
committerThomas Hellstrom <thellstrom@vmware.com>2011-11-28 13:49:09 +0100
commit6ff96bcb5efce43c22fa661f3c2ba4b9faf66fcf (patch)
tree6da49353a2faf9d170f232d7a9880d3bae3b49d5
parentdaf229150e03a6ac7a8d95ff1144bc9a85aa61da (diff)
vmwgfx: Use the revised fifo hw version register when present
The driver implements the needed resource management required to use that register. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
-rw-r--r--vmwgfx_fifo.c8
-rw-r--r--vmwgfx_ioctl.c10
2 files changed, 15 insertions, 3 deletions
diff --git a/vmwgfx_fifo.c b/vmwgfx_fifo.c
index 78740ef..1ada182 100644
--- a/vmwgfx_fifo.c
+++ b/vmwgfx_fifo.c
@@ -33,6 +33,7 @@ bool vmw_fifo_have_3d(struct vmw_private *dev_priv)
{
__le32 __iomem *fifo_mem = dev_priv->mmio_virt;
uint32_t fifo_min, hwversion;
+ const struct vmw_fifo_state *fifo = &dev_priv->fifo;
#ifdef VMWGFX_STANDALONE
extern int force_no_3d;
@@ -48,7 +49,12 @@ bool vmw_fifo_have_3d(struct vmw_private *dev_priv)
if (fifo_min <= SVGA_FIFO_3D_HWVERSION * sizeof(unsigned int))
return false;
- hwversion = ioread32(fifo_mem + SVGA_FIFO_3D_HWVERSION);
+ hwversion = ioread32(fifo_mem +
+ ((fifo->capabilities &
+ SVGA_FIFO_CAP_3D_HWVERSION_REVISED) ?
+ SVGA_FIFO_3D_HWVERSION_REVISED :
+ SVGA_FIFO_3D_HWVERSION));
+
if (hwversion == 0)
return false;
diff --git a/vmwgfx_ioctl.c b/vmwgfx_ioctl.c
index 3f63435..a9e2193 100644
--- a/vmwgfx_ioctl.c
+++ b/vmwgfx_ioctl.c
@@ -58,8 +58,14 @@ int vmw_getparam_ioctl(struct drm_device *dev, void *data,
case DRM_VMW_PARAM_FIFO_HW_VERSION:
{
__le32 __iomem *fifo_mem = dev_priv->mmio_virt;
-
- param->value = ioread32(fifo_mem + SVGA_FIFO_3D_HWVERSION);
+ const struct vmw_fifo_state *fifo = &dev_priv->fifo;
+
+ param->value =
+ ioread32(fifo_mem +
+ ((fifo->capabilities &
+ SVGA_FIFO_CAP_3D_HWVERSION_REVISED) ?
+ SVGA_FIFO_3D_HWVERSION_REVISED :
+ SVGA_FIFO_3D_HWVERSION));
break;
}
default: