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

Commit 8efe82ca authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/radeon: make sure mode init is complete in bandwidth_update

The power management code calls into the display code for
certain things.  If certain power management sysfs attributes
are called before the driver has finished initializing all of
the hardware we can run into problems with uninitialized
modesetting state.  Add a check to make sure modesetting
init has completed to the bandwidth update callbacks to
fix this.  Can be triggered by the tlp and laptop start
up scripts depending on the timing.

bugs:
https://bugzilla.kernel.org/show_bug.cgi?id=83611
https://bugs.freedesktop.org/show_bug.cgi?id=85771



Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent dc4edad6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -9447,6 +9447,9 @@ void dce8_bandwidth_update(struct radeon_device *rdev)
	u32 num_heads = 0, lb_size;
	int i;

	if (!rdev->mode_info.mode_config_initialized)
		return;

	radeon_update_display_priority(rdev);

	for (i = 0; i < rdev->num_crtc; i++) {
+3 −0
Original line number Diff line number Diff line
@@ -2345,6 +2345,9 @@ void evergreen_bandwidth_update(struct radeon_device *rdev)
	u32 num_heads = 0, lb_size;
	int i;

	if (!rdev->mode_info.mode_config_initialized)
		return;

	radeon_update_display_priority(rdev);

	for (i = 0; i < rdev->num_crtc; i++) {
+3 −0
Original line number Diff line number Diff line
@@ -3207,6 +3207,9 @@ void r100_bandwidth_update(struct radeon_device *rdev)
	uint32_t pixel_bytes1 = 0;
	uint32_t pixel_bytes2 = 0;

	if (!rdev->mode_info.mode_config_initialized)
		return;

	radeon_update_display_priority(rdev);

	if (rdev->mode_info.crtcs[0]->base.enabled) {
+3 −0
Original line number Diff line number Diff line
@@ -879,6 +879,9 @@ void rs600_bandwidth_update(struct radeon_device *rdev)
	u32 d1mode_priority_a_cnt, d2mode_priority_a_cnt;
	/* FIXME: implement full support */

	if (!rdev->mode_info.mode_config_initialized)
		return;

	radeon_update_display_priority(rdev);

	if (rdev->mode_info.crtcs[0]->base.enabled)
+3 −0
Original line number Diff line number Diff line
@@ -579,6 +579,9 @@ void rs690_bandwidth_update(struct radeon_device *rdev)
	u32 d1mode_priority_a_cnt, d1mode_priority_b_cnt;
	u32 d2mode_priority_a_cnt, d2mode_priority_b_cnt;

	if (!rdev->mode_info.mode_config_initialized)
		return;

	radeon_update_display_priority(rdev);

	if (rdev->mode_info.crtcs[0]->base.enabled)
Loading