18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: MIT 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2013-2017 Oracle Corporation 48c2ecf20Sopenharmony_ci * This file is based on ast_ttm.c 58c2ecf20Sopenharmony_ci * Copyright 2012 Red Hat Inc. 68c2ecf20Sopenharmony_ci * Authors: Dave Airlie <airlied@redhat.com> 78c2ecf20Sopenharmony_ci * Michael Thayer <michael.thayer@oracle.com> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci#include <linux/pci.h> 108c2ecf20Sopenharmony_ci#include <drm/drm_file.h> 118c2ecf20Sopenharmony_ci#include "vbox_drv.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ciint vbox_mm_init(struct vbox_private *vbox) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci struct drm_vram_mm *vmm; 168c2ecf20Sopenharmony_ci int ret; 178c2ecf20Sopenharmony_ci struct drm_device *dev = &vbox->ddev; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci vmm = drm_vram_helper_alloc_mm(dev, pci_resource_start(dev->pdev, 0), 208c2ecf20Sopenharmony_ci vbox->available_vram_size); 218c2ecf20Sopenharmony_ci if (IS_ERR(vmm)) { 228c2ecf20Sopenharmony_ci ret = PTR_ERR(vmm); 238c2ecf20Sopenharmony_ci DRM_ERROR("Error initializing VRAM MM; %d\n", ret); 248c2ecf20Sopenharmony_ci return ret; 258c2ecf20Sopenharmony_ci } 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0), 288c2ecf20Sopenharmony_ci pci_resource_len(dev->pdev, 0)); 298c2ecf20Sopenharmony_ci return 0; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_civoid vbox_mm_fini(struct vbox_private *vbox) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci arch_phys_wc_del(vbox->fb_mtrr); 358c2ecf20Sopenharmony_ci drm_vram_helper_release_mm(&vbox->ddev); 368c2ecf20Sopenharmony_ci} 37