xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/vboxvideo/vbox_ttm.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: MIT
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2013-2017 Oracle Corporation
4*4882a593Smuzhiyun  * This file is based on ast_ttm.c
5*4882a593Smuzhiyun  * Copyright 2012 Red Hat Inc.
6*4882a593Smuzhiyun  * Authors: Dave Airlie <airlied@redhat.com>
7*4882a593Smuzhiyun  *          Michael Thayer <michael.thayer@oracle.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #include <linux/pci.h>
10*4882a593Smuzhiyun #include <drm/drm_file.h>
11*4882a593Smuzhiyun #include "vbox_drv.h"
12*4882a593Smuzhiyun 
vbox_mm_init(struct vbox_private * vbox)13*4882a593Smuzhiyun int vbox_mm_init(struct vbox_private *vbox)
14*4882a593Smuzhiyun {
15*4882a593Smuzhiyun 	struct drm_vram_mm *vmm;
16*4882a593Smuzhiyun 	int ret;
17*4882a593Smuzhiyun 	struct drm_device *dev = &vbox->ddev;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 	vmm = drm_vram_helper_alloc_mm(dev, pci_resource_start(dev->pdev, 0),
20*4882a593Smuzhiyun 				       vbox->available_vram_size);
21*4882a593Smuzhiyun 	if (IS_ERR(vmm)) {
22*4882a593Smuzhiyun 		ret = PTR_ERR(vmm);
23*4882a593Smuzhiyun 		DRM_ERROR("Error initializing VRAM MM; %d\n", ret);
24*4882a593Smuzhiyun 		return ret;
25*4882a593Smuzhiyun 	}
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun 	vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
28*4882a593Smuzhiyun 					 pci_resource_len(dev->pdev, 0));
29*4882a593Smuzhiyun 	return 0;
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
vbox_mm_fini(struct vbox_private * vbox)32*4882a593Smuzhiyun void vbox_mm_fini(struct vbox_private *vbox)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	arch_phys_wc_del(vbox->fb_mtrr);
35*4882a593Smuzhiyun 	drm_vram_helper_release_mm(&vbox->ddev);
36*4882a593Smuzhiyun }
37