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