RE: ACPI module-level code (MLC) not working?

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

 



Hi,

> -----Original Message-----
> From: Peter Wu [mailto:peter@xxxxxxxxxxxxx]
> Sent: Tuesday, November 8, 2016 4:33 PM
> To: Zheng, Lv <lv.zheng@xxxxxxxxx>
> Cc: Rick Kerkhof <rick.2889@xxxxxxxxx>; Bartosz Skrzypczak <barteks2x@xxxxxxxxx>; Moore, Robert
> <robert.moore@xxxxxxxxx>; linux-acpi@xxxxxxxxxxxxxxx
> Subject: Re: ACPI module-level code (MLC) not working?
> 
> On Wed, Nov 09, 2016 at 12:07:47AM +0000, Zheng, Lv wrote:
> > Hi,
> >
> > > From: Peter Wu [mailto:peter@xxxxxxxxxxxxx]
> > > Subject: Re: ACPI module-level code (MLC) not working?
> > >
> > > On Tue, Nov 08, 2016 at 05:35:07PM +0000, Zheng, Lv wrote:
> > > > Hi,
> > > >
> > > > > From: Peter Wu [mailto:peter@xxxxxxxxxxxxx]
> > > > > Subject: ACPI module-level code (MLC) not working?
> > > > >
> > > > > Hi Lv,
> > > > >
> > > > > According to some tests, setting acpi_gbl_parse_table_as_term_list to
> > > > > TRUE does is not effective. The code within the If-block is still not
> > > > > executed early enough or something else is wrong.
> > > > >
> > > > > Previously Rick had an issue with an Acer Aspire V7-582PG where the dGPU
> > > > > could not be powered off and I demonstrated an isolated test case in
> > > > > http://www.spinics.net/lists/linux-acpi/msg70069.html
> > > > >
> > > > > In Bartosz's case, the dGPU cannot be powered on (also using nouveau),
> > > > > preventing suspend from working. Situation is as follows (tested with
> > > > > Linux 3.16, 4.8.4, 4.9-rc2, 4.9-rc4):
> > > > >
> > > > > His Lenovo IdeaPad Z510 laptop (BIOS date 2014) enables power resources
> > > > > and related _PR3 objects under the conditional If(_OSI("Windows 2013")).
> > > > > Both with and without acpi_gbl_parse_table_as_term_list set to TRUE, the
> > > > > module-level code is not loaded properly. Via a SSDT override, it was
> > > > > confirmed that removing the If conditional results in the expected
> > > > > behavior.
> > > > >
> > > > > Various details are given in https://github.com/Bumblebee-Project/bbswitch/issues/142
> > > > > including lots of dmesg logs (see posts at the bottom).
> > > > > With above MLC flag set (v4.9-rc4): https://pastebin.com/raw/vCEPGezX
> > > > > With SSDT override (v4.9-rc2): https://pastebin.com/raw/3Fsf2VPU
> > > >
> > > > I checked the post.
> > > > It seems the current working way is: disabling _OSI(Windows 2013) which disables power resources.
> > >
> > > That is how Lenovo probably intended to use it (only add Power Resources
> > > when Windows 8 is detected).
> > >
> > > > I have several questions related to this issue:
> > > > 1. The following messages are prompt up when "acpi_gbl_parse_table_as_term_list = TRUE":
> > > > [    2.519113] ACPI Error: [\_SB_.PCI0.GFX0.DD02._BCL] Namespace lookup failure, AE_NOT_FOUND
> > > (20160831/psargs-359)
> > > > [    2.519121] ACPI Error: Method parse/execution failed [\_SB.PCI0.PEG1.PEGP.DD02._BCL] (Node
> > > ffff8802568d3cf8), AE_NOT_FOUND (20160831/psparse-543)
> > > > How was this triggered?
> > >
> > > This comes from acpi_video.c, ssdt4.dsl contains a \_SB.PCI0.GFX0.DD02
> > > device with an _ADR method, but no _BCL one. It is not a regression
> > > though, let's ignore this for now.
> > >
> > > > 2. I noticed the following statement:
> > > >    So, for some reason Lenovo has decided to give all tables the same name.
> > > >    The ACPI table override functionality matches possible candidates by signature, OEM ID and
> OEM
> > > Revision ID which are all the same.
> > > >    As a result, the wrong SSDT is overridden.
> > > > Could you provide the detail of the tables from the platform?
> > > > What is the reason of doing such kind of craps in BIOS?
> > >
> > > I have no idea why Lenovo would do such a silly thing, but that is why
> > > we had to patch tables.c with:
> > >
> > >     if (existing_table->checksum != 0xAF) {
> > >         acpi_os_unmap_memory(table, ACPI_HEADER_SIZE);
> > >         pr_info("Skipping next table\n");
> > >         goto next_table;
> > >     }
> > >
> > > This is of course an unacceptable hard-coded value, but it was needed in
> > > as a quick hack. For a longterm solution, maybe we can name the table
> > > files specially such that additional match conditions can be given. This
> > > is a different issue though.
> > >
> > > What would you like to know about the platform? The acpidump is
> > > available at
> > > https://bugs.launchpad.net/lpbugreporter/+bug/752542/+attachment/4773050/+files/LENOVO-
> 20287.tar.gz
> > >
> > > ssdt5.dsl is the file of interest, grep for "Windows 2013".
> >
> > The table headers are:
> >
> > DefinitionBlock ("dsdt.aml", "DSDT", 1, "LENOVO", "CB-01   ", 0x00000001)
> > DefinitionBlock ("ssdt1.aml", "SSDT", 1, "LENOVO", "CB-01   ", 0x00000001)
> > DefinitionBlock ("ssdt2.aml", "SSDT", 1, "LENOVO", "CB-01   ", 0x00000001)
> > DefinitionBlock ("ssdt3.aml", "SSDT", 1, "LENOVO", "CB-01   ", 0x00000001)
> > DefinitionBlock ("ssdt4.aml", "SSDT", 1, "LENOVO", "CB-01   ", 0x00000001)
> > DefinitionBlock ("ssdt5.aml", "SSDT", 1, "LENOVO", "CB-01   ", 0x00000001)
> >
> > They will be deemed as different versions of the same table from linux ACPI's point of view.
> > Whether override will be done or not depends on Linux version.
> 
> When I mentioned override, I referred to the method described in
> Documentation/acpi/method-customizing.txt where any ACPI table can be
> overridden via the initrd. Indeed, that method is unable to pick
> arbitrary tables when they all have the same ID.
> 
> > In recent Linux, ssdt1.aml will be used (no override), while in old Linux, ssdt5.aml will be used
> (override).
> 
> Does this refer to the same override method as described above? The
> tables are loaded normally even if they have the same name.
> 
> > Let me ask further.
> > 1. Should OSPM load only ssdt5.aml or load only ssdt1.aml, or load
> ssdt1.aml,ssdt2.aml,ssdt3.aml,ssdt4.aml,ssdt5.aml?
> > 2. Can you confirm Windows behavior here via amli?
> >
> > Anyway, this is a special case that violates spec and seems to be aiming to trigger regressions
> against changed logic brought by me.
> > No matter whether the change is reasonable.
> 
> OSPM should load all tables, they are all different. Perhaps you are
> confusing this override method with how Linux normally loads tables?
> (Aren't the identifiers just used for visual purposes and irrelevant for
> normal operation?)

No, I'm not confusing it.
I want to know the exact behavior here.

Because I'm actually about to change acpi_tb_compare_tables().
This allows and acpi_install_table() invocations to override matched tables.
So I'll remove Linux table override callback.

Please see my recent comment in the following link:
https://github.com/Bumblebee-Project/bbswitch/issues/142

Thanks
Lv

> 
> I have not checked Windows, but I would guess that it loads normally.
> Otherwise Lenovo QA has really been sleeping.
> 
> Kind regards,
> Peter
> 
> > Linux only need a quirk for this platform.
> >
> > Thanks
> > Lv
> >
> > >
> > > Kind regards,
> > > Peter
> > >
> > > > Thanks and best regards
> > > > Lv
> > > >
> > > > >
> > > > > If you would like a new bugzilla entry or have some patches to test, you
> > > > > know where to find us :)
> > > > > --
> > > > > Kind regards,
> > > > > Peter Wu
> > > > > https://lekensteyn.nl
--
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