RE: [PATCH 70/73] ACPICA: Fix to disable unknown spurious GPEs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>For bug 6217, we should do the following for stray GPEs:
>1. get the current value of GPE_ENABLE register
>2. clear the stray GPE bit of GPE_ENABLE register
>3. write the value back

I think we will give this a go.



>-----Original Message-----
>From: Zhang, Rui
>Sent: Wednesday, May 21, 2008 9:56 AM
>To: Moore, Robert
>Cc: Len Brown; Alexey Starikovskiy; linux-acpi@xxxxxxxxxxxxxxx; Zhao,
Yakui
>Subject: RE: [PATCH 70/73] ACPICA: Fix to disable unknown spurious GPEs
>
>
>On Wed, 2008-05-21 at 16:28 +0800, Zhang, Rui wrote:
>> Hi, all,
>>
>> With Yakui's help, we've root caused this problem.
>>
>> For the GPEs with _Lxx/_Exx methods, Linux updates the enable mask
but
>> doesn't enable them in HW in acpi_ev_gpe_initialize.
>> And in acpi_ev_install_fadt_gpes, the GPEs that are shown in _PRW
>> methods but don't have _Lxx/_Exx methods are disabled in
>> acpi_ev_set_type, before 6217 is applied, the acpi_ev_disable_gpe
won't
>> write the GPE enable register and everything goes well.
>> But with 6217 applied, acpi_ev_disable_gpe will write the GPE enable
>> register and enable all the _Lxx/_Exx GPEs as a side effect.
>>
>> And the error message is printed out if a _Lxx/_Exx GPE is fired and
try
>> to access EC address space.
>>
>> Of cource this can be solved by Alexey's patch which installs the EC
>> address space handler before any GPE is enabled in HW.
>>
>> But there is still one problem with both 6217 and 9916 applied which
>> I'll talk about in the next email. :)
>Please refer to bug 9781 and 10224, where a GPE is used as a wake GPE
>and a RUN_WAKE GPE at the same time,
>
>Before 6217 and 9916 are applied, Linux disable the wake GPEs in
>acpi_ev_install_fadt_gpes, call _PSW to disable the device's wakeup
>ability in acpi_scan_init, and re-enable the GPE as a RUN_WAKE GPE in
>acpi_button_add.
>
>But with both 6217 and 9916 applied, Linux enable all the _Lxx/_Exx
GPEs
>in acpi_ec_ecdt_probe, and won't disable it until
>acpi_ev_install_fadt_gpes. And this may bring an interrupt storm
because
>the _PSW is not called and the wakeup GPE keeps on firing.
>
>IMO, we should revert the 9916 patch because Yakui reproduced the
>problem on T61 and confirm it's fixed by a BIOS update, maybe we should
>ask the bug reporter to test the new BIOS as well. :)
>
>For bug 6217, we should do the following for stray GPEs:
>1. get the current value of GPE_ENABLE register
>2. clear the stray GPE bit of GPE_ENABLE register
>3. write the value back
>
>Any comments on this?
>
>thanks,
>rui
>
>>
>> Thanks,
>> Rui
>>
>> >-----Original Message-----
>> >From: Moore, Robert
>> >Sent: Friday, April 25, 2008 9:57 AM
>> >To: Zhang, Rui; Len Brown
>> >Cc: Alexey Starikovskiy; linux-acpi@xxxxxxxxxxxxxxx
>> >Subject: RE: [PATCH 70/73] ACPICA: Fix to disable unknown spurious
GPEs
>> >
>> >Yes, this is my question also.
>> >
>> >I hope Alexey can help with this. I'm very nervous about any code
that
>> works
>> >or does not work for reasons unknown. When this happens in the GPE
>> code, I get
>> >more than nervous.
>> >
>> >Bob
>> >
>> >
>> >-----Original Message-----
>> >From: Zhang, Rui
>> >Sent: Thursday, April 24, 2008 6:53 PM
>> >To: Len Brown
>> >Cc: Moore, Robert; Alexey Starikovskiy; linux-acpi@xxxxxxxxxxxxxxx
>> >Subject: Re: [PATCH 70/73] ACPICA: Fix to disable unknown spurious
GPEs
>> >
>> >
>> >On Fri, 2008-04-25 at 09:40 +0800, Len Brown wrote:
>> >> oh goody, i thought this one rang a bell...
>> >>
>> >> I'll apply 6217 on top of 9916 (which was already in the test
tree,
>> >> but not on the acpica branch)
>> >>
>> >> the error goes away with both applied.
>> >
>> >I still don't see why the error messages pop up if 6217 is applied.
>> >IMO, 6217 won't enable the EC GPE. :(
>> >
>> >thanks,
>> >rui
>> >
>> >> On Wednesday 23 April 2008, Moore, Robert wrote:
>> >> > Alexey,
>> >> >
>> >> > I remember there was some discussion on this, but I'm still not
>> sure
>> >> why
>> >> > the patch for 6217 (Ignore GPE if valid and not enabled) makes
the
>> >> other
>> >> > problem (too early enabling of GPEs) apparent. Please explain.
>> >> >
>> >> > Thanks,
>> >> > Bob
>> >> >
>> >> >
>> >> > >-----Original Message-----
>> >> > >From: Alexey Starikovskiy [mailto:astarikovskiy@xxxxxxx]
>> >> > >Sent: Tuesday, April 22, 2008 10:29 PM
>> >> > >To: Len Brown
>> >> > >Cc: linux-acpi@xxxxxxxxxxxxxxx; Moore, Robert; Zhang, Rui
>> >> > >Subject: Re: [PATCH 70/73] ACPICA: Fix to disable unknown
spurious
>> >> GPEs
>> >> > >
>> >> > >Len Brown wrote:
>> >> > >> On Saturday 12 April 2008, Len Brown wrote:
>> >> > >>> From: Bob Moore <robert.moore@xxxxxxxxx>
>> >> > >>>
>> >> > >>> Implemented another change to eliminate/suppress spurious or
>> >> > >>> stray GPEs. The AcpiEvDisableGpe function will now disable
GPEs
>> >> > >>> that are neither enabled nor disabled -- meaning that the
GPE
>> is
>> >> > >>> unknown to the system. This will prevent future interrupts
from
>> >> > >>> that GPE. (Zhang Rui) BZ 6217
>> >> > >>>
>> >> > >>> Signed-off-by: Bob Moore <robert.moore@xxxxxxxxx>
>> >> > >>> Signed-off-by: Alexey Starikovskiy <astarikovskiy@xxxxxxx>
>> >> > >>> Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
>> >> > >>> ---
>> >> > >>>  drivers/acpi/events/evgpe.c |    9 ++++++++-
>> >> > >>>  1 files changed, 8 insertions(+), 1 deletions(-)
>> >> > >>>
>> >> > >>> diff --git a/drivers/acpi/events/evgpe.c
>> >> > b/drivers/acpi/events/evgpe.c
>> >> > >>> index 897baed..6940f5d 100644
>> >> > >>> --- a/drivers/acpi/events/evgpe.c
>> >> > >>> +++ b/drivers/acpi/events/evgpe.c
>> >> > >>> @@ -250,7 +250,14 @@ acpi_status acpi_ev_disable_gpe(struct
>> >> > >acpi_gpe_event_info *gpe_event_info)
>> >> > >>>
>> >> > >>>   ACPI_FUNCTION_TRACE(ev_disable_gpe);
>> >> > >>>
>> >> > >>> - if (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK)) {
>> >> > >>> + /*
>> >> > >>> +  * Ignore this if the GPE is valid and not enabled.
>> >> > >>> +  *
>> >> > >>> +  * Flags is only zero if GPE is neither enabled or
disabled
>> --
>> >> > it may
>> >> > >>> +  * be a spurious or stray GPE -- disable it in the default
>> >> case
>> >> > >below.
>> >> > >>> +  */
>> >> > >>> + if (gpe_event_info->flags &&
>> >> > >>> +     (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK))) {
>> >> > >>>           return_ACPI_STATUS(AE_OK);
>> >> > >>>   }
>> >> > >>>
>> >> > >>
>> >> > >>
>> >> > >> When applied to 2.6.25, the patch above causes ACPI Error
>> >> messages
>> >> > below
>> >> > >on my T61.
>> >> > >> Certainly this is a case of the EC getting an interrupt (GPE
>> x02)
>> >> > before
>> >> > >it has initialized.
>> >> > >>
>> >> > >> Perhaps it breaks the call of acpi_install_gpe_handler() to
>> >> > >acpi_ev_disable_gpe()?
>> >> > >Congratulations, now you too hit this one, patch is already
>> >> there...
>> >> > >It is wroong to enable GPE before handler for it is
installed...
>> >> > >http://bugzilla.kernel.org/show_bug.cgi?id=9916
>> >> > >
>> >> > >>
>> >> > >> -Len
>> >> > >>
>> >> > >>
>> >> > >>  PCI: Using MMCONFIG at f0000000 - f3ffffff
>> >> > >>  PCI: Using configuration type 1
>> >> > >>  evgpeblk-0956 [00] ev_create_gpe_block   : GPE 00 to 1F
[_GPE]
>> 4
>> >> > regs on
>> >> > >int 0x9
>> >> > >> +ACPI Error (evregion-0316): No handler for Region [ECOR]
>> >> > >(ffff81007d35dda0) [EmbeddedControl] [20070126]
>> >> > >> +ACPI Error (exfldio-0289): Region EmbeddedControl(3) has no
>> >> handler
>> >> > >[20070126]
>> >> > >> +ACPI Error (psparse-0537): Method parse/execution failed
>> >> > >[\_SB_.PCI0.LPC_.EC__.AC__._PSR] (Node ffff81007d364ab0),
>> >> AE_NOT_EXIST
>> >> > >> +ACPI Error (psparse-0537): Method parse/execution failed
>> >> > >[\_SB_.PCI0.LPC_.EC__.HKEY.CKC4] (Node ffff81007d364f48),
>> >> AE_NOT_EXIST
>> >> > >> +ACPI Error (psparse-0537): Method parse/execution failed
>> >> > [\_GPE._L02]
>> >> > >(Node ffff81007d376420), AE_NOT_EXIST
>> >> > >> +ACPI Exception (evgpe-0584): AE_NOT_EXIST, while evaluating
GPE
>> >> > method
>> >> > >[_L02] [20070126]
>> >> > >>  evgpeblk-1052 [00] ev_initialize_gpe_bloc: Found 9 Wake,
>> Enabled
>> >> 3
>> >> > >Runtime GPEs in this block
>> >> > >>  ACPI: EC: EC description table is found, configuring boot EC
>> >> > >> -ACPI: EC: non-query interrupt received, switching to
interrupt
>> >> mode
>> >> > >> -Completing Region/Field/Buffer/Package
>> >> >
>> >>
>>
>initialization:........................................................
>> >> > ....
>> >> > >............................................................
>> >> > >>
>> >> >
>> >>
>>
>.......................................................................
>> >> > ....
>> >> >
>> >>
>>
>.......................................................................
>> >> > ....
>> >> > >................
>> >> > >> -Initialized 29/33 Regions 138/138 Fields 64/64 Buffers 55/72
>> >> > Packages
>> >> > >(1888 nodes)
>> >> > >> +Completing Region/Field/Buffer/Package
>> >> >
>> >>
>>
>initialization:........................................................
>> >> > ....
>> >> > >............................................................
>> >> > >>
>> >> >
>> >>
>>
>.......................................................................
>> >> > ....
>> >> >
>> >>
>>
>.......................................................................
>> >> > ....
>> >> > >.................
>> >> > >> +Initialized 30/33 Regions 138/138 Fields 64/64 Buffers 55/72
>> >> > Packages
>> >> > >(1888 nodes)
>> >> > >>  Initializing Device/Processor/Thermal objects by executing
_INI
>> >> > >methods:.<5>ACPI: BIOS _OSI(Linux) query honored via DMI
>> >> > >> +ACPI: EC: non-query interrupt received, switching to
interrupt
>> >> mode
>> >> > >>  .......
>> >> > >>  Executed 8 _INI methods requiring 2 _STA executions
(examined
>> 88
>> >> > >objects)
>> >> > >>  ACPI: Interpreter enabled
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-acpi"
in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux