192,7 → 192,6 |
struct drm_mode_fb_cmd2 mode_cmd; |
struct drm_gem_object *gobj = NULL; |
struct radeon_bo *rbo = NULL; |
struct device *device = &rdev->pdev->dev; |
int ret; |
unsigned long tmp; |
|
215,18 → 214,19 |
rbo = gem_to_radeon_bo(gobj); |
|
/* okay we have an object now allocate the framebuffer */ |
info = framebuffer_alloc(0, device); |
if (info == NULL) { |
ret = -ENOMEM; |
info = drm_fb_helper_alloc_fbi(helper); |
if (IS_ERR(info)) { |
ret = PTR_ERR(info); |
goto out_unref; |
} |
|
info->par = rfbdev; |
info->skip_vt_switch = true; |
|
ret = radeon_framebuffer_init(rdev->ddev, &rfbdev->rfb, &mode_cmd, gobj); |
if (ret) { |
DRM_ERROR("failed to initialize framebuffer %d\n", ret); |
goto out_unref; |
goto out_destroy_fbi; |
} |
|
fb = &rfbdev->rfb.base; |
233,7 → 233,6 |
|
/* setup helper */ |
rfbdev->helper.fb = fb; |
rfbdev->helper.fbdev = info; |
|
// memset_io(rbo->kptr, 0x0, radeon_bo_size(rbo)); |
|
253,11 → 252,6 |
drm_fb_helper_fill_var(info, &rfbdev->helper, sizes->fb_width, sizes->fb_height); |
|
/* setup aperture base/size for vesafb takeover */ |
info->apertures = alloc_apertures(1); |
if (!info->apertures) { |
ret = -ENOMEM; |
goto out_unref; |
} |
info->apertures->ranges[0].base = rdev->ddev->mode_config.fb_base; |
info->apertures->ranges[0].size = rdev->mc.aper_size; |
|
275,6 → 269,8 |
|
return 0; |
|
out_destroy_fbi: |
// drm_fb_helper_release_fbi(helper); |
out_unref: |
if (rbo) { |
|
288,16 → 284,11 |
|
static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfbdev) |
{ |
struct fb_info *info; |
struct radeon_framebuffer *rfb = &rfbdev->rfb; |
|
if (rfbdev->helper.fbdev) { |
info = rfbdev->helper.fbdev; |
// drm_fb_helper_unregister_fbi(&rfbdev->helper); |
// drm_fb_helper_release_fbi(&rfbdev->helper); |
|
// unregister_framebuffer(info); |
// framebuffer_release(info); |
} |
|
if (rfb->obj) { |
rfb->obj = NULL; |
} |
318,7 → 309,6 |
struct radeon_fbdev *rfbdev; |
int bpp_sel = 32; |
int ret; |
ENTER(); |
|
/* select 8 bpp console on RN50 or 16MB cards */ |
if (ASIC_IS_RN50(rdev) || rdev->mc.real_vram_size <= (32*1024*1024)) |
337,20 → 327,27 |
ret = drm_fb_helper_init(rdev->ddev, &rfbdev->helper, |
rdev->num_crtc, |
RADEONFB_CONN_LIMIT); |
if (ret) { |
kfree(rfbdev); |
return ret; |
} |
if (ret) |
goto free; |
|
drm_fb_helper_single_add_all_connectors(&rfbdev->helper); |
ret = drm_fb_helper_single_add_all_connectors(&rfbdev->helper); |
if (ret) |
goto fini; |
|
/* disable all the possible outputs/crtcs before entering KMS mode */ |
drm_helper_disable_unused_functions(rdev->ddev); |
|
drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel); |
LEAVE(); |
ret = drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel); |
if (ret) |
goto fini; |
|
return 0; |
|
fini: |
// drm_fb_helper_fini(&rfbdev->helper); |
free: |
kfree(rfbdev); |
return ret; |
} |
|
void radeon_fbdev_fini(struct radeon_device *rdev) |
363,17 → 360,6 |
rdev->mode_info.rfbdev = NULL; |
} |
|
|
int radeon_fbdev_total_size(struct radeon_device *rdev) |
{ |
struct radeon_bo *robj; |
int size = 0; |
|
robj = gem_to_radeon_bo(rdev->mode_info.rfbdev->rfb.obj); |
size += radeon_bo_size(robj); |
return size; |
} |
|
bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj) |
{ |
if (robj == gem_to_radeon_bo(rdev->mode_info.rfbdev->rfb.obj)) |
380,3 → 366,13 |
return true; |
return false; |
} |
|
void radeon_fb_add_connector(struct radeon_device *rdev, struct drm_connector *connector) |
{ |
drm_fb_helper_add_one_connector(&rdev->mode_info.rfbdev->helper, connector); |
} |
|
void radeon_fb_remove_connector(struct radeon_device *rdev, struct drm_connector *connector) |
{ |
drm_fb_helper_remove_one_connector(&rdev->mode_info.rfbdev->helper, connector); |
} |