Commit 7f4c3377 authored by Zack Rusin's avatar Zack Rusin

drm/vmwgfx: Write the driver id registers

Driver id registers are a new mechanism in the svga device to hint to the
device which driver is running. This should not change device behavior
in any way, but might be convenient to work-around specific bugs
in guest drivers.
Signed-off-by: default avatarZack Rusin <zackr@vmware.com>
Reviewed-by: default avatarMartin Krastev <krastevm@vmware.com>
Reviewed-by: default avatarMaaz Mombasawala <mombasawalam@vmware.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221022040236.616490-2-zack@kde.org
parent 977d97f1
...@@ -25,10 +25,13 @@ ...@@ -25,10 +25,13 @@
* *
**************************************************************************/ **************************************************************************/
#include <linux/dma-mapping.h>
#include <linux/module.h> #include "vmwgfx_drv.h"
#include <linux/pci.h>
#include <linux/cc_platform.h> #include "vmwgfx_devcaps.h"
#include "vmwgfx_mksstat.h"
#include "vmwgfx_binding.h"
#include "ttm_object.h"
#include <drm/drm_aperture.h> #include <drm/drm_aperture.h>
#include <drm/drm_drv.h> #include <drm/drm_drv.h>
...@@ -41,11 +44,11 @@ ...@@ -41,11 +44,11 @@
#include <drm/ttm/ttm_placement.h> #include <drm/ttm/ttm_placement.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include "ttm_object.h" #include <linux/cc_platform.h>
#include "vmwgfx_binding.h" #include <linux/dma-mapping.h>
#include "vmwgfx_devcaps.h" #include <linux/module.h>
#include "vmwgfx_drv.h" #include <linux/pci.h>
#include "vmwgfx_mksstat.h" #include <linux/version.h>
#define VMWGFX_DRIVER_DESC "Linux drm driver for VMware graphics devices" #define VMWGFX_DRIVER_DESC "Linux drm driver for VMware graphics devices"
...@@ -806,6 +809,27 @@ static int vmw_detect_version(struct vmw_private *dev) ...@@ -806,6 +809,27 @@ static int vmw_detect_version(struct vmw_private *dev)
return 0; return 0;
} }
static void vmw_write_driver_id(struct vmw_private *dev)
{
if ((dev->capabilities2 & SVGA_CAP2_DX2) != 0) {
vmw_write(dev, SVGA_REG_GUEST_DRIVER_ID,
SVGA_REG_GUEST_DRIVER_ID_LINUX);
vmw_write(dev, SVGA_REG_GUEST_DRIVER_VERSION1,
LINUX_VERSION_MAJOR << 24 |
LINUX_VERSION_PATCHLEVEL << 16 |
LINUX_VERSION_SUBLEVEL);
vmw_write(dev, SVGA_REG_GUEST_DRIVER_VERSION2,
VMWGFX_DRIVER_MAJOR << 24 |
VMWGFX_DRIVER_MINOR << 16 |
VMWGFX_DRIVER_PATCHLEVEL);
vmw_write(dev, SVGA_REG_GUEST_DRIVER_VERSION3, 0);
vmw_write(dev, SVGA_REG_GUEST_DRIVER_ID,
SVGA_REG_GUEST_DRIVER_ID_SUBMIT);
}
}
static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id) static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
{ {
int ret; int ret;
...@@ -1091,6 +1115,7 @@ static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id) ...@@ -1091,6 +1115,7 @@ static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
vmw_host_printf("vmwgfx: Module Version: %d.%d.%d (kernel: %s)", vmw_host_printf("vmwgfx: Module Version: %d.%d.%d (kernel: %s)",
VMWGFX_DRIVER_MAJOR, VMWGFX_DRIVER_MINOR, VMWGFX_DRIVER_MAJOR, VMWGFX_DRIVER_MINOR,
VMWGFX_DRIVER_PATCHLEVEL, UTS_RELEASE); VMWGFX_DRIVER_PATCHLEVEL, UTS_RELEASE);
vmw_write_driver_id(dev_priv);
if (dev_priv->enable_fb) { if (dev_priv->enable_fb) {
vmw_fifo_resource_inc(dev_priv); vmw_fifo_resource_inc(dev_priv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment