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

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
Loading
Loading
Loading
Loading
+34 −9
Original line number Diff line number Diff line
@@ -25,10 +25,13 @@
 *
 **************************************************************************/

#include <linux/dma-mapping.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/cc_platform.h>

#include "vmwgfx_drv.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_drv.h>
@@ -41,11 +44,11 @@
#include <drm/ttm/ttm_placement.h>
#include <generated/utsrelease.h>

#include "ttm_object.h"
#include "vmwgfx_binding.h"
#include "vmwgfx_devcaps.h"
#include "vmwgfx_drv.h"
#include "vmwgfx_mksstat.h"
#include <linux/cc_platform.h>
#include <linux/dma-mapping.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/version.h>

#define VMWGFX_DRIVER_DESC "Linux drm driver for VMware graphics devices"

@@ -806,6 +809,27 @@ static int vmw_detect_version(struct vmw_private *dev)
	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)
{
	int ret;
@@ -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)",
			VMWGFX_DRIVER_MAJOR, VMWGFX_DRIVER_MINOR,
			VMWGFX_DRIVER_PATCHLEVEL, UTS_RELEASE);
	vmw_write_driver_id(dev_priv);

	if (dev_priv->enable_fb) {
		vmw_fifo_resource_inc(dev_priv);