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