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

Commit 71d06186 authored by Francisco Jerez's avatar Francisco Jerez Committed by Ben Skeggs
Browse files

drm/nouveau: Don't enable AGP FW on nv18.



FW seems to be broken on nv18, it causes random lockups and breaks
suspend/resume even with the blob.

Signed-off-by: default avatarFrancisco Jerez <currojerez@riseup.net>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 3bc14b4d
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -417,6 +417,23 @@ nouveau_mem_detect(struct drm_device *dev)
	return -ENOMEM;
}

#if __OS_HAS_AGP
static unsigned long
get_agp_mode(struct drm_device *dev, unsigned long mode)
{
	struct drm_nouveau_private *dev_priv = dev->dev_private;

	/*
	 * FW seems to be broken on nv18, it makes the card lock up
	 * randomly.
	 */
	if (dev_priv->chipset == 0x18)
		mode &= ~PCI_AGP_COMMAND_FW;

	return mode;
}
#endif

int
nouveau_mem_reset_agp(struct drm_device *dev)
{
@@ -436,7 +453,7 @@ nouveau_mem_reset_agp(struct drm_device *dev)
		if (ret)
			return ret;

		mode.mode = info.mode & ~PCI_AGP_COMMAND_FW;
		mode.mode = get_agp_mode(dev, info.mode) & ~PCI_AGP_COMMAND_FW;
		ret = drm_agp_enable(dev, mode);
		if (ret)
			return ret;
@@ -491,7 +508,7 @@ nouveau_mem_init_agp(struct drm_device *dev)
	}

	/* see agp.h for the AGPSTAT_* modes available */
	mode.mode = info.mode;
	mode.mode = get_agp_mode(dev, info.mode);
	ret = drm_agp_enable(dev, mode);
	if (ret) {
		NV_ERROR(dev, "Unable to enable AGP: %d\n", ret);