2012-04-17 15:01:25 +01:00
/*
* Copyright 2012 Red Hat Inc .
*
* Permission is hereby granted , free of charge , to any person obtaining a
* copy of this software and associated documentation files ( the
* " Software " ) , to deal in the Software without restriction , including
* without limitation the rights to use , copy , modify , merge , publish ,
* distribute , sub license , and / or sell copies of the Software , and to
* permit persons to whom the Software is furnished to do so , subject to
* the following conditions :
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NON - INFRINGEMENT . IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS , AUTHORS AND / OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM ,
* DAMAGES OR OTHER LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR
* OTHERWISE , ARISING FROM , OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE .
*
* The above copyright notice and this permission notice ( including the
* next paragraph ) shall be included in all copies or substantial portions
* of the Software .
*
*/
/*
* Authors : Dave Airlie < airlied @ redhat . com >
*/
2019-06-23 12:35:42 +02:00
2019-12-03 11:04:00 +01:00
# include <linux/pci.h>
2017-04-24 13:50:27 +09:00
2012-04-17 15:01:25 +01:00
# include "mgag200_drv.h"
int mgag200_mm_init ( struct mga_device * mdev )
{
2019-05-08 10:26:25 +02:00
struct drm_vram_mm * vmm ;
2012-04-17 15:01:25 +01:00
int ret ;
struct drm_device * dev = mdev - > dev ;
2019-05-08 10:26:25 +02:00
vmm = drm_vram_helper_alloc_mm ( dev , pci_resource_start ( dev - > pdev , 0 ) ,
2019-09-11 13:09:08 +02:00
mdev - > mc . vram_size ) ;
2019-05-08 10:26:25 +02:00
if ( IS_ERR ( vmm ) ) {
ret = PTR_ERR ( vmm ) ;
DRM_ERROR ( " Error initializing VRAM MM; %d \n " , ret ) ;
2012-04-17 15:01:25 +01:00
return ret ;
}
2016-10-24 15:37:48 +10:00
arch_io_reserve_memtype_wc ( pci_resource_start ( dev - > pdev , 0 ) ,
pci_resource_len ( dev - > pdev , 0 ) ) ;
2013-05-13 23:58:41 +00:00
mdev - > fb_mtrr = arch_phys_wc_add ( pci_resource_start ( dev - > pdev , 0 ) ,
pci_resource_len ( dev - > pdev , 0 ) ) ;
2012-04-17 15:01:25 +01:00
2019-09-27 11:13:00 +02:00
mdev - > vram_fb_available = mdev - > mc . vram_size ;
2012-04-17 15:01:25 +01:00
return 0 ;
}
void mgag200_mm_fini ( struct mga_device * mdev )
{
2016-10-24 15:37:48 +10:00
struct drm_device * dev = mdev - > dev ;
2019-09-27 11:13:00 +02:00
mdev - > vram_fb_available = 0 ;
2019-05-08 10:26:25 +02:00
drm_vram_helper_release_mm ( dev ) ;
2012-04-17 15:01:25 +01:00
2016-10-24 15:37:48 +10:00
arch_io_free_memtype_wc ( pci_resource_start ( dev - > pdev , 0 ) ,
pci_resource_len ( dev - > pdev , 0 ) ) ;
2013-05-13 23:58:41 +00:00
arch_phys_wc_del ( mdev - > fb_mtrr ) ;
mdev - > fb_mtrr = 0 ;
2012-04-17 15:01:25 +01:00
}