1 /* $NetBSD: vbox_ttm.c,v 1.2 2021/12/18 23:45:44 riastradh Exp $ */ 2 3 // SPDX-License-Identifier: MIT 4 /* 5 * Copyright (C) 2013-2017 Oracle Corporation 6 * This file is based on ast_ttm.c 7 * Copyright 2012 Red Hat Inc. 8 * Authors: Dave Airlie <airlied (at) redhat.com> 9 * Michael Thayer <michael.thayer (at) oracle.com> 10 */ 11 #include <sys/cdefs.h> 12 __KERNEL_RCSID(0, "$NetBSD: vbox_ttm.c,v 1.2 2021/12/18 23:45:44 riastradh Exp $"); 13 14 #include <linux/pci.h> 15 #include <drm/drm_file.h> 16 #include "vbox_drv.h" 17 18 int vbox_mm_init(struct vbox_private *vbox) 19 { 20 struct drm_vram_mm *vmm; 21 int ret; 22 struct drm_device *dev = &vbox->ddev; 23 24 vmm = drm_vram_helper_alloc_mm(dev, pci_resource_start(dev->pdev, 0), 25 vbox->available_vram_size); 26 if (IS_ERR(vmm)) { 27 ret = PTR_ERR(vmm); 28 DRM_ERROR("Error initializing VRAM MM; %d\n", ret); 29 return ret; 30 } 31 32 #ifdef DRM_MTRR_WC 33 vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0), 34 pci_resource_len(dev->pdev, 0), 35 DRM_MTRR_WC); 36 #else 37 vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0), 38 pci_resource_len(dev->pdev, 0)); 39 #endif 40 return 0; 41 } 42 43 void vbox_mm_fini(struct vbox_private *vbox) 44 { 45 #ifdef DRM_MTRR_WC 46 drm_mtrr_del(vbox->fb_mtrr, 47 pci_resource_start(vbox->ddev.pdev, 0), 48 pci_resource_len(vbox->ddev.pdev, 0), DRM_MTRR_WC); 49 #else 50 arch_phys_wc_del(vbox->fb_mtrr); 51 #endif 52 drm_vram_helper_release_mm(&vbox->ddev); 53 } 54