linux/drivers/gpu/drm/ast/ast_ttm.c
<<
>>
Prefs
   1/*
   2 * Copyright 2012 Red Hat Inc.
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the
   6 * "Software"), to deal in the Software without restriction, including
   7 * without limitation the rights to use, copy, modify, merge, publish,
   8 * distribute, sub license, and/or sell copies of the Software, and to
   9 * permit persons to whom the Software is furnished to do so, subject to
  10 * the following conditions:
  11 *
  12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  14 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  15 * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
  16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  17 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  18 * USE OR OTHER DEALINGS IN THE SOFTWARE.
  19 *
  20 * The above copyright notice and this permission notice (including the
  21 * next paragraph) shall be included in all copies or substantial portions
  22 * of the Software.
  23 *
  24 */
  25/*
  26 * Authors: Dave Airlie <airlied@redhat.com>
  27 */
  28
  29#include <linux/pci.h>
  30
  31#include <drm/drm_print.h>
  32#include <drm/drm_gem_vram_helper.h>
  33
  34#include "ast_drv.h"
  35
  36int ast_mm_init(struct ast_private *ast)
  37{
  38        struct drm_vram_mm *vmm;
  39        int ret;
  40        struct drm_device *dev = ast->dev;
  41
  42        vmm = drm_vram_helper_alloc_mm(
  43                dev, pci_resource_start(dev->pdev, 0),
  44                ast->vram_size);
  45        if (IS_ERR(vmm)) {
  46                ret = PTR_ERR(vmm);
  47                DRM_ERROR("Error initializing VRAM MM; %d\n", ret);
  48                return ret;
  49        }
  50
  51        arch_io_reserve_memtype_wc(pci_resource_start(dev->pdev, 0),
  52                                   pci_resource_len(dev->pdev, 0));
  53        ast->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
  54                                        pci_resource_len(dev->pdev, 0));
  55
  56        return 0;
  57}
  58
  59void ast_mm_fini(struct ast_private *ast)
  60{
  61        struct drm_device *dev = ast->dev;
  62
  63        drm_vram_helper_release_mm(dev);
  64
  65        arch_phys_wc_del(ast->fb_mtrr);
  66        arch_io_free_memtype_wc(pci_resource_start(dev->pdev, 0),
  67                                pci_resource_len(dev->pdev, 0));
  68}
  69