lkml.org 
[lkml]   [2000]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: ide-scsi + /dev/dsp == solid lockup
On Sat, Oct 14, 2000 at 05:14:41PM -0400, Leigh Orf wrote:
> I tried what he did, adding the line with the + in
> /usr/src/linux/drivers/pci/quirks.c, but changing the second argument to
> PCI_DEVICE_ID_INTEL_82430 since that describes my board:
>
> >From his post (a link to the full patch is above):
>
> > { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_isa_dma_hangs, 0x00 },
> > { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596_0, quirk_isa_dma_hangs, 0x00 },
> > + { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, quirk_isa_dma_hangs, 0x00 },
> > };
>
> I rebuilt the kernel, and it still locked up faithfully as before under
> the same conditions.

You did enable 'pci quirks' (CONFIG_PCI_QUIRKS) when compiling that new kernel
I presume? Also, your chipset is listed under the (experimental)
CONFIG_PCI_OPTIMIZE option. Maybe that helps as well...

If your BIOS does not allow you to disable streaming and peer concurrency (mine
does't...), maybe it is possible to turn it off in the kernel by adding a small
patch. I have not tried this since my fix fixes my problems :-), but something
in the lines of the stuff done in drivers/char/bttv.c before they enabled the
Bt878 hardware workaround for these problems. I made a small patch for
drivers/pci/quirks.c which implements a new quirk (quirk_triton_1_pcon) which
should implement something like this. I have not tested it, since I don't have
your mobo handy. It seems to satisfy gcc, it compiles, so it might even work...
Try it I'd say... But make sure you see those printk-messages when you boot. If
you don't, either you did not enable PCI quirks or the chipset is not specified
correctly. This also goes for my original 'fix', when I boot I see the message
'Work around ISA DMA hangs' flying past. You should too...

Again, I did NOT test this in real life. It compiles, so certain big companies
would deem it fit to ship, but that does not mean it performs at it should....

Oh, the patch is against a stock linux 2.2.17 installation, so WITHOUT my
previous patch...

Cheers//Frank
--
WWWWW _______________________
## o o\ / Frank de Lange \
}# \| / \
##---# _/ <Hacker for Hire> \
#### \ +31-320-252965 /
\ frank@unternet.org /
-------------------------
[ Hacker: http://www.jargon.org/html/entry/hacker.html ]
diff -c --recursive linux.org/drivers/pci/quirks.c linux/drivers/pci/quirks.c
*** linux.org/drivers/pci/quirks.c Sun Oct 15 01:13:23 2000
--- linux/drivers/pci/quirks.c Sun Oct 15 01:13:37 2000
***************
*** 144,149 ****
--- 144,189 ----
}
}

+ #define TRITON_PCON 0x50
+ #define TRITON_BUS_CONCURRENCY (1<<0)
+ #define TRITON_STREAMING (1<<1)
+ #define TRITON_WRITE_BURST (1<<2)
+ #define TRITON_PEER_CONCURRENCY (1<<3)
+
+ __initfunc(static void quirk_triton_1_pcon(struct pci_dev *dev, int arg))
+ {
+ while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, dev)) ||
+ (dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82430, dev)))
+ {
+ unsigned char b;
+ unsigned char bo;
+ printk(KERN_INFO "Host bridge 82430FX/82437FX Triton PIIX\n");
+ /* 430FX and 437FX(Triton I) freeze with bus concurrency on, so switch it off */
+ pci_read_config_byte(dev, TRITON_PCON, &b);
+ bo=b;
+ if(!(b & TRITON_BUS_CONCURRENCY))
+ {
+ printk(KERN_WARNING "82430FX: disabling bus concurrency\n");
+ b |= TRITON_BUS_CONCURRENCY;
+ }
+ if(b & TRITON_PEER_CONCURRENCY)
+ {
+ printk(KERN_WARNING "82430FX: disabling peer concurrency\n");
+ b &= ~TRITON_PEER_CONCURRENCY;
+ }
+ if(!(b & TRITON_STREAMING))
+ {
+ printk(KERN_WARNING "82430FX: disabling streaming\n");
+ b |= TRITON_STREAMING;
+ }
+ if (b!=bo)
+ {
+ pci_write_config_byte(dev, TRITON_PCON, b);
+ printk(KERN_INFO "8243xFX: PCON changed to: 0x%x\n",b);
+ }
+ }
+ }
+

typedef void (*quirk_handler)(struct pci_dev *, int);

***************
*** 162,167 ****
--- 202,208 ----
#endif
{ quirk_passive_release,"Passive release enable" },
{ quirk_isa_dma_hangs, "Work around ISA DMA hangs" },
+ { quirk_triton_1_pcon, "Disable streaming and peer concurrency on Triton 1" },
};


***************
*** 202,207 ****
--- 243,249 ----
*/
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_isa_dma_hangs, 0x00 },
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596_0, quirk_isa_dma_hangs, 0x00 },
+ { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82430, quirk_triton_1_pcon, 0x00 },
};

__initfunc(void pci_quirks_init(void))
\
 
 \ /
  Last update: 2005-03-22 12:45    [W:0.067 / U:4.228 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site