2002-02-03 04:40:57

by Steven Walter

[permalink] [raw]
Subject: VIA Northing workaround /causing/ problems

I recently upgraded my kernel from 2.4.10-pre6 to 2.4.18-pre2. After
doing so, X acted extremely weird; whenever just about anything
happened, lines would appear across the screen, almost like static.

After playing around with a few config options that I'd changed, with no
results, I noticed the message about the VIA northbridge bug in dmesg.
I commented out the line listing this chipset in pci-pc.c, recompiled,
and sure enough that fixed the problem!

This board is based on the KT33 chipset. If anyone would like more
information, email me.
--
-Steven
In a time of universal deceit, telling the truth is a revolutionary act.
-- George Orwell
He's alive. He's alive! Oh, that fellow at RadioShack said I was mad!
Well, who's mad now?
-- Montgomery C. Burns


2002-02-04 12:49:28

by Denis Vlasenko

[permalink] [raw]
Subject: Re: VIA Northing workaround /causing/ problems

On 3 February 2002 02:40, Steven Walter wrote:
> I recently upgraded my kernel from 2.4.10-pre6 to 2.4.18-pre2. After
> doing so, X acted extremely weird; whenever just about anything
> happened, lines would appear across the screen, almost like static.
>
> After playing around with a few config options that I'd changed, with no
> results, I noticed the message about the VIA northbridge bug in dmesg.
> I commented out the line listing this chipset in pci-pc.c, recompiled,
> and sure enough that fixed the problem!
>
> This board is based on the KT33 chipset. If anyone would like more
> information, email me.

Can you play with it a bit more?
Go to that file, uncomment it back, fiddle with
pci_fixup_via_northbridge_bug(): try to clear only bit 7,
then only 7 and 6 and see which cause it...
Make it print reg#, old, new contents:
...
printk("Trying to stomp on VIA Northbridge bug: [%02x] %02x->%02x\n", where, v, v & 0x1f);
...
etc.
Original function for your reference:

static void __init pci_fixup_via_northbridge_bug(struct pci_dev *d)
{
u8 v;
int where = 0x55;
if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
where = 0x95; /* the memory write queue timer register is
different for the kt266x's: 0x95 not 0x55 */
}
pci_read_config_byte(d, where, &v);
if (v & 0xe0) {
printk("Trying to stomp on VIA Northbridge bug...\n");
v &= 0x1f; /* clear bits 5, 6, 7 */
pci_write_config_byte(d, where, v);
}
}
--
vda

2002-02-04 15:11:57

by Calin A. Culianu

[permalink] [raw]
Subject: Re: VIA Northing workaround /causing/ problems

On Mon, 4 Feb 2002, Denis Vlasenko wrote:

> On 3 February 2002 02:40, Steven Walter wrote:
> > I recently upgraded my kernel from 2.4.10-pre6 to 2.4.18-pre2. After
> > doing so, X acted extremely weird; whenever just about anything
> > happened, lines would appear across the screen, almost like static.
> >
> > After playing around with a few config options that I'd changed, with no
> > results, I noticed the message about the VIA northbridge bug in dmesg.
> > I commented out the line listing this chipset in pci-pc.c, recompiled,
> > and sure enough that fixed the problem!
> >
> > This board is based on the KT33 chipset. If anyone would like more
> > information, email me.
>
> Can you play with it a bit more?
> Go to that file, uncomment it back, fiddle with
> pci_fixup_via_northbridge_bug(): try to clear only bit 7,
> then only 7 and 6 and see which cause it...
> Make it print reg#, old, new contents:

Yes, this is a good point. The via 'specs' (really they may not even be
from via.. but that's a different story) say that bits 5,6,7 are for the
MWQ Timer, but some people have reported really good results just clearing
bit 5 and leaving 6 and 7 alone (actually this was the original MWQ timer
patch). I would be interested to see what bits are on for this guy by
default from his bios and which one causes problems when touched...

-Calin

> ...
> printk("Trying to stomp on VIA Northbridge bug: [%02x] %02x->%02x\n", where, v, v & 0x1f);
> ...
> etc.
> Original function for your reference:
>
> static void __init pci_fixup_via_northbridge_bug(struct pci_dev *d)
> {
> u8 v;
> int where = 0x55;
> if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
> where = 0x95; /* the memory write queue timer register is
> different for the kt266x's: 0x95 not 0x55 */
> }
> pci_read_config_byte(d, where, &v);
> if (v & 0xe0) {
> printk("Trying to stomp on VIA Northbridge bug...\n");
> v &= 0x1f; /* clear bits 5, 6, 7 */
> pci_write_config_byte(d, where, v);
> }
> }
> --
> vda
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>