diff options
Diffstat (limited to 'drivers/gpu/drm/ast/ast_main.c')
| -rw-r--r-- | drivers/gpu/drm/ast/ast_main.c | 82 | 
1 files changed, 15 insertions, 67 deletions
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c index 4c7e31cb45ff..50de8e47659c 100644 --- a/drivers/gpu/drm/ast/ast_main.c +++ b/drivers/gpu/drm/ast/ast_main.c @@ -25,12 +25,17 @@  /*   * Authors: Dave Airlie <[email protected]>   */ -#include <drm/drmP.h> -#include "ast_drv.h" +#include <linux/pci.h> -#include <drm/drm_fb_helper.h>  #include <drm/drm_crtc_helper.h> +#include <drm/drm_fb_helper.h> +#include <drm/drm_gem.h> +#include <drm/drm_gem_framebuffer_helper.h> +#include <drm/drm_gem_vram_helper.h> +#include <drm/drm_vram_mm_helper.h> + +#include "ast_drv.h"  void ast_set_index_reg_mask(struct ast_private *ast,  			    uint32_t base, uint8_t index, @@ -131,8 +136,8 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)  	/* Enable extended register access */ -	ast_enable_mmio(dev);  	ast_open_key(ast); +	ast_enable_mmio(dev);  	/* Find out whether P2A works or whether to use device-tree */  	ast_detect_config_mode(dev, &scu_rev); @@ -383,67 +388,8 @@ static int ast_get_dram_info(struct drm_device *dev)  	return 0;  } -static void ast_user_framebuffer_destroy(struct drm_framebuffer *fb) -{ -	struct ast_framebuffer *ast_fb = to_ast_framebuffer(fb); - -	drm_gem_object_put_unlocked(ast_fb->obj); -	drm_framebuffer_cleanup(fb); -	kfree(ast_fb); -} - -static const struct drm_framebuffer_funcs ast_fb_funcs = { -	.destroy = ast_user_framebuffer_destroy, -}; - - -int ast_framebuffer_init(struct drm_device *dev, -			 struct ast_framebuffer *ast_fb, -			 const struct drm_mode_fb_cmd2 *mode_cmd, -			 struct drm_gem_object *obj) -{ -	int ret; - -	drm_helper_mode_fill_fb_struct(dev, &ast_fb->base, mode_cmd); -	ast_fb->obj = obj; -	ret = drm_framebuffer_init(dev, &ast_fb->base, &ast_fb_funcs); -	if (ret) { -		DRM_ERROR("framebuffer init failed %d\n", ret); -		return ret; -	} -	return 0; -} - -static struct drm_framebuffer * -ast_user_framebuffer_create(struct drm_device *dev, -	       struct drm_file *filp, -	       const struct drm_mode_fb_cmd2 *mode_cmd) -{ -	struct drm_gem_object *obj; -	struct ast_framebuffer *ast_fb; -	int ret; - -	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]); -	if (obj == NULL) -		return ERR_PTR(-ENOENT); - -	ast_fb = kzalloc(sizeof(*ast_fb), GFP_KERNEL); -	if (!ast_fb) { -		drm_gem_object_put_unlocked(obj); -		return ERR_PTR(-ENOMEM); -	} - -	ret = ast_framebuffer_init(dev, ast_fb, mode_cmd, obj); -	if (ret) { -		drm_gem_object_put_unlocked(obj); -		kfree(ast_fb); -		return ERR_PTR(ret); -	} -	return &ast_fb->base; -} -  static const struct drm_mode_config_funcs ast_mode_funcs = { -	.fb_create = ast_user_framebuffer_create, +	.fb_create = drm_gem_fb_create  };  static u32 ast_get_vram_info(struct drm_device *dev) @@ -561,7 +507,7 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)  	if (ret)  		goto out_free; -	ret = ast_fbdev_init(dev); +	ret = drm_fbdev_generic_setup(dev, 32);  	if (ret)  		goto out_free; @@ -576,10 +522,12 @@ void ast_driver_unload(struct drm_device *dev)  {  	struct ast_private *ast = dev->dev_private; +	/* enable standard VGA decode */ +	ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa1, 0x04); +  	ast_release_firmware(dev);  	kfree(ast->dp501_fw_addr);  	ast_mode_fini(dev); -	ast_fbdev_fini(dev);  	drm_mode_config_cleanup(dev);  	ast_mm_fini(ast); @@ -609,6 +557,6 @@ int ast_gem_create(struct drm_device *dev,  			DRM_ERROR("failed to allocate GEM object\n");  		return ret;  	} -	*obj = &gbo->gem; +	*obj = &gbo->bo.base;  	return 0;  }  |