From: Len B. <len...@in...> - 2003-10-23 04:10:35
|
Ducrot, I've found at least 1 system where hardcoding the PIC SCI to Level-Triggered fails, while leaving it as Edge Triggered succeeds. The Intel SE7505VB2 "Vero Beach" when booted with "noapic" leaves IRQ9 as edge triggered. When we force it to level triggered, we get no ACPI events. If we leave it as edge triggered, we do get ACPI events. The other systems in my office leave the PIC SCI in Level Triggered mode, so Linux need do nothing to the trigger. Today's patch prints a warning when the mode changes: printk(KERN_WARNING PREFIX "IRQ %d was Edge Triggered, " "setting to Level Triggerd\n", irq); But I'm thinking that by default we should _not_ change the trigger. Instead we should do so only upon, say acpi=sci_level_trigger or some such. If there is a popular model that leaves SCI as edge and requires level to work, then we can use DMI to set this param for it. thanks, -Len On Fri, 2003-10-17 at 13:28, Len Brown wrote: > On Fri, 2003-10-17 at 11:41, Ducrot Bruno wrote: > > On Wed, Oct 15, 2003 at 05:48:04PM -0400, Len Brown wrote: > > > What does eisa_set_level_irq() do for us? > > > > > > As its presence breaks the !CONFIG_PCI build, I deleted it and found > > > that ACPI in PIC mode seems to work just fine without it (at least on 2 > > > of 2 systems tested so far) > > > > > > > This ensure SCI interrupt is correctly initialized for (poorly) written > > BIOS. Without it, this break one of my laptop, and certainly others as well. > > Do ACPI interrupt work on this latop? What happens on that system if > you delete the call to eisa_set_level_irq()? > > If we blindly program the PIC to be level senstive when the hardware is > designed to be edge triggered, then we'll probably get no ACPI events on > those systems, as the pulse may not be asserted long enough to provoke > an interrupt. > > We used to blindly program the APIC assuming the SCI was ACPI compliant, > but we got burnt when we discovered that a significant set of system do > _not_ have a level-triggered active-low SCI. Most of those specified > their deviation with an SCI-over-ride in the MADT, but some did not: > http://bugzilla.kernel.org/show_bug.cgi?id=774 > > The APIC solution was to > 1. don't hard-code level-triggered active-low > 2. do whatever the SCI over-ride says > 3. if no SCI over-ride, leave the interrupt trigger/polarity as the BIOS > programmed it. > > thanks, > -Len > > ps. this routine is mis-named, it it not EISA specific. Further, it is > mis-located in a PCI-specific file but is not PCI specific. It should > be in an X86 specific interrupt file and be named pic_something. I'm > thinking I'll clone it into our x86 acpi code and add a warning when we > find that it actually _changes_ the polarity. > > > > |