Re: SiS 746FX AGP 3.0 problem

From: Oliver Schoett
Date: Sun Feb 22 2004 - 13:31:32 EST


"Hemmann, Volker Armin" <volker.hemmann@xxxxxxxxxxxxxxxxxxxxx> writes:

> [1] testgart first run, garbled output
> [2] testgart second run, immidiatly after the first one, 'repairs' output.
>
> After a first run of testgart, X will startup fine too.

Looks pretty much like the timing problem Oliver Heilmann observed on
the SiS 648FX and SiS 648 north bridge chips, which caused similar
problems on my SiS 648 system: modules would fail to initialise or
wedge the system on first use (see
<s23oerukbnp.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxx>), but work fine if the
card had been initialised some other way since boot.

It appears that the chips are electrically unstable for ca. 5ms after
switching them to AGP 3.0, and the effects vary depending on what your
driver does in that interval.

Try Oliver Heilmann's patch from the linux-kernel post

Date: Thu, 12 Feb 2004 00:10:08 +0100
Subject: [PATCH] AGP 648[FX] cleaned+fixed but still have problem. Plz help.
Message-ID: <1076540358.609.60.camel@cobra>

adjusting so that the 10ms timeout (see the call to schedule_timeout
in the patch) is done also in the case of your 746FX chip. It may
well be that the instability appears in a larger class of SiS chips
than we know so far.

Instead of patching the patch, it is perhaps easier for a first test
to just use the forced timeout shown in the patch below (apply to a
clean kernel with patch option -p1; patches fine into 2.6.3). That
already solved the problems on my machine and showed that my SiS 648
had the timing problem.

Regards,

Oliver Schoett


--- linux-2.6.2/drivers/char/agp/generic.c 2004-02-07 15:05:02.000000000 +0100
+++ linux-2.6.2-sis648/drivers/char/agp/generic.c 2004-02-07 15:19:16.000000000 +0100
@@ -524,6 +524,10 @@
printk(KERN_INFO PFX "Putting AGP V%d device at %s into %dx mode\n",
agp_v3 ? 3 : 2, pci_name(device), mode);
pci_write_config_dword(device, agp + PCI_AGP_COMMAND, command);
+
+ /* work around SIS648 instability by delaying a bit */
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout((HZ+99)/100); /* >= 1/100th of a second */
}
}
EXPORT_SYMBOL(agp_device_command);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/