Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5f243bd authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/radeon: rework fbdev handling on chips with no connectors

Move all the logic to radeon_fb.c and add checks to functions
called frome elsewhere.

bug:
https://bugzilla.kernel.org/show_bug.cgi?id=112781



Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 00b7c4ff
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -1670,10 +1670,8 @@ int radeon_modeset_init(struct radeon_device *rdev)
	/* setup afmt */
	radeon_afmt_init(rdev);

	if (!list_empty(&rdev->ddev->mode_config.connector_list)) {
	radeon_fbdev_init(rdev);
	drm_kms_helper_poll_init(rdev->ddev);
	}

	/* do pm late init */
	ret = radeon_pm_late_init(rdev);
+15 −4
Original line number Diff line number Diff line
@@ -292,6 +292,7 @@ static int radeonfb_create(struct drm_fb_helper *helper,

void radeon_fb_output_poll_changed(struct radeon_device *rdev)
{
	if (rdev->mode_info.rfbdev)
		drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
}

@@ -325,6 +326,10 @@ int radeon_fbdev_init(struct radeon_device *rdev)
	int bpp_sel = 32;
	int ret;

	/* don't enable fbdev if no connectors */
	if (list_empty(&rdev->ddev->mode_config.connector_list))
		return 0;

	/* select 8 bpp console on RN50 or 16MB cards */
	if (ASIC_IS_RN50(rdev) || rdev->mc.real_vram_size <= (32*1024*1024))
		bpp_sel = 8;
@@ -377,11 +382,15 @@ void radeon_fbdev_fini(struct radeon_device *rdev)

void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state)
{
	if (rdev->mode_info.rfbdev)
		fb_set_suspend(rdev->mode_info.rfbdev->helper.fbdev, state);
}

bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj)
{
	if (!rdev->mode_info.rfbdev)
		return false;

	if (robj == gem_to_radeon_bo(rdev->mode_info.rfbdev->rfb.obj))
		return true;
	return false;
@@ -389,11 +398,13 @@ bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj)

void radeon_fb_add_connector(struct radeon_device *rdev, struct drm_connector *connector)
{
	if (rdev->mode_info.rfbdev)
		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)
{
	if (rdev->mode_info.rfbdev)
		drm_fb_helper_remove_one_connector(&rdev->mode_info.rfbdev->helper, connector);
}