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

Commit c03ec7f9 authored by Marcin Slusarz's avatar Marcin Slusarz Committed by Dave Airlie
Browse files

drm/nouveau: create function for "dealing" with gpu lockup



It's mostly a cleanup, but in nv50_fbcon_accel_init gpu lockup
message was printed, but HWACCEL_DISBALED flag was not set.

Signed-off-by: default avatarMarcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent e9dd8e11
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -64,8 +64,7 @@ nouveau_fbcon_sync(struct fb_info *info)
		return 0;
		return 0;


	if (RING_SPACE(chan, 4)) {
	if (RING_SPACE(chan, 4)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
		return 0;
		return 0;
	}
	}


@@ -86,8 +85,7 @@ nouveau_fbcon_sync(struct fb_info *info)
	}
	}


	if (ret) {
	if (ret) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
		return 0;
		return 0;
	}
	}


@@ -380,3 +378,12 @@ nouveau_fbcon_remove(struct drm_device *dev, struct drm_framebuffer *fb)


	return 0;
	return 0;
}
}

void nouveau_fbcon_gpu_lockup(struct fb_info *info)
{
	struct nouveau_fbcon_par *par = info->par;
	struct drm_device *dev = par->dev;

	NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
	info->flags |= FBINFO_HWACCEL_DISABLED;
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -43,5 +43,6 @@ void nouveau_fbcon_zfill(struct drm_device *dev);
int nv04_fbcon_accel_init(struct fb_info *info);
int nv04_fbcon_accel_init(struct fb_info *info);
int nv50_fbcon_accel_init(struct fb_info *info);
int nv50_fbcon_accel_init(struct fb_info *info);


void nouveau_fbcon_gpu_lockup(struct fb_info *info);
#endif /* __NV50_FBCON_H__ */
#endif /* __NV50_FBCON_H__ */
+5 −10
Original line number Original line Diff line number Diff line
@@ -39,8 +39,7 @@ nv04_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)
		return;
		return;


	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 4)) {
	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 4)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
	}
	}


	if (info->flags & FBINFO_HWACCEL_DISABLED) {
	if (info->flags & FBINFO_HWACCEL_DISABLED) {
@@ -67,8 +66,7 @@ nv04_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
		return;
		return;


	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 7)) {
	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 7)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
	}
	}


	if (info->flags & FBINFO_HWACCEL_DISABLED) {
	if (info->flags & FBINFO_HWACCEL_DISABLED) {
@@ -112,8 +110,7 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
	}
	}


	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 8)) {
	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 8)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
	}
	}


	if (info->flags & FBINFO_HWACCEL_DISABLED) {
	if (info->flags & FBINFO_HWACCEL_DISABLED) {
@@ -147,8 +144,7 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
		int iter_len = dsize > 128 ? 128 : dsize;
		int iter_len = dsize > 128 ? 128 : dsize;


		if (RING_SPACE(chan, iter_len + 1)) {
		if (RING_SPACE(chan, iter_len + 1)) {
			NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
			nouveau_fbcon_gpu_lockup(info);
			info->flags |= FBINFO_HWACCEL_DISABLED;
			cfb_imageblit(info, image);
			cfb_imageblit(info, image);
			return;
			return;
		}
		}
@@ -246,8 +242,7 @@ nv04_fbcon_accel_init(struct fb_info *info)
		return ret;
		return ret;


	if (RING_SPACE(chan, 49)) {
	if (RING_SPACE(chan, 49)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
		return 0;
		return 0;
	}
	}


+5 −12
Original line number Original line Diff line number Diff line
@@ -16,9 +16,7 @@ nv50_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect)


	if (!(info->flags & FBINFO_HWACCEL_DISABLED) &&
	if (!(info->flags & FBINFO_HWACCEL_DISABLED) &&
	     RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11)) {
	     RING_SPACE(chan, rect->rop == ROP_COPY ? 7 : 11)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);

		info->flags |= FBINFO_HWACCEL_DISABLED;
	}
	}


	if (info->flags & FBINFO_HWACCEL_DISABLED) {
	if (info->flags & FBINFO_HWACCEL_DISABLED) {
@@ -60,9 +58,7 @@ nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region)
		return;
		return;


	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 12)) {
	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 12)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);

		info->flags |= FBINFO_HWACCEL_DISABLED;
	}
	}


	if (info->flags & FBINFO_HWACCEL_DISABLED) {
	if (info->flags & FBINFO_HWACCEL_DISABLED) {
@@ -105,8 +101,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
	}
	}


	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 11)) {
	if (!(info->flags & FBINFO_HWACCEL_DISABLED) && RING_SPACE(chan, 11)) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		info->flags |= FBINFO_HWACCEL_DISABLED;
	}
	}


	if (info->flags & FBINFO_HWACCEL_DISABLED) {
	if (info->flags & FBINFO_HWACCEL_DISABLED) {
@@ -139,9 +134,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
		int push = dwords > 2047 ? 2047 : dwords;
		int push = dwords > 2047 ? 2047 : dwords;


		if (RING_SPACE(chan, push + 1)) {
		if (RING_SPACE(chan, push + 1)) {
			NV_ERROR(dev,
			nouveau_fbcon_gpu_lockup(info);
				 "GPU lockup - switching to software fbcon\n");
			info->flags |= FBINFO_HWACCEL_DISABLED;
			cfb_imageblit(info, image);
			cfb_imageblit(info, image);
			return;
			return;
		}
		}
@@ -203,7 +196,7 @@ nv50_fbcon_accel_init(struct fb_info *info)


	ret = RING_SPACE(chan, 59);
	ret = RING_SPACE(chan, 59);
	if (ret) {
	if (ret) {
		NV_ERROR(dev, "GPU lockup - switching to software fbcon\n");
		nouveau_fbcon_gpu_lockup(info);
		return ret;
		return ret;
	}
	}