RE: [PATCH] RFC: platform/x86: wmi: Fix check for method instance number

From: Mario.Limonciello
Date: Fri Jun 16 2017 - 12:34:04 EST


> -----Original Message-----
> From: Limonciello, Mario
> Sent: Thursday, June 15, 2017 10:16 AM
> To: 'Pali RohÃr' <pali.rohar@xxxxxxxxx>; Darren Hart <dvhart@xxxxxxxxxxxxx>
> Cc: Andy Shevchenko <andy@xxxxxxxxxxxxx>; Andy Lutomirski <luto@xxxxxxxxxx>;
> platform-driver-x86@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: RE: [PATCH] RFC: platform/x86: wmi: Fix check for method instance
> number
>
> > -----Original Message-----
> > From: Pali RohÃr [mailto:pali.rohar@xxxxxxxxx]
> > Sent: Thursday, June 15, 2017 8:59 AM
> > To: Limonciello, Mario <Mario_Limonciello@xxxxxxxx>; Darren Hart
> > <dvhart@xxxxxxxxxxxxx>
> > Cc: Andy Shevchenko <andy@xxxxxxxxxxxxx>; Andy Lutomirski
> <luto@xxxxxxxxxx>;
> > platform-driver-x86@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> > Subject: Re: [PATCH] RFC: platform/x86: wmi: Fix check for method instance
> > number
> >
> > Mario, are you able to check if instance number passed to
> > wmi_evaluate_method in following dell WMI drivers is correct and should
> > be really 1?
> >
> > I suspect that it should be zero, as instance number is indexed from
> > zero.
> >
> > There is no comment in those dell WMI drivers why it is 1, nor what 1
> > means.
> >
> > Ideally it needs to be checked in ACPI byte code, MOF file and WDG dump.
> >
> I think you're likely correct. I don't have a box that supports alienware-wmi
> or dell-wmi-led.c handy at the current moment to confirm this hypothesis though.
> I'll confirm this later.
>
> I didn't realize it was zero indexed when I wrote alienware-wmi, and I'm guessing
> the author of dell-wmi-led didn't either.
>
> The reason it's probably working is the ACPI byte code isn't actually checking
> the instance since most times _WDG will only call out one instance.

I confirmed you're correct. Switching instance over to 0 works properly on an
ASM200 (supported by alienware-wmi).

Since only one instance is supported the ASL doesn't check Arg0 at all.
snippet:
Method (WMAX, 3, NotSerialized)
{
If ((Arg1 == One))
{
CreateByteField (Arg2, Zero, SOUR)
If ((SOUR == One))
{
GU01 = (GU01 | 0x80)
GIO1 = (GIO1 & 0x7F)
GL01 = (GL01 & 0x7F)
Return (Zero)
}

If ((SOUR == 0x02))
{
GU01 = (GU01 | 0x80)
GIO1 = (GIO1 & 0x7F)
GL01 = (GL01 | 0x80)
Return (Zero)
}

If ((SOUR == 0x03))
{
If ((CN00 == Zero))
{
CN00 = One
If (((GL01 & 0x80) == 0x80))
{
GL01 &= 0x7F
Return (Zero)
}

If (((GL01 & 0x80) == Zero))
{
GL01 |= 0x80
Return (Zero)
}
}

If ((CN00 == One))
{
CN00 = Zero
Return (Zero)
}

Return (One)
}

Return (One)
}

>
> > On Wednesday 14 June 2017 17:46:54 Pali RohÃr wrote:
> > > Function wmi_evaluate_method:
> > ...
> > > alienware-wmi.c:
> > > instance=1 /* no comment why, guid=A70591CE-A997-11DA-B012-
> > B622A1EF5492 */
> > > instance=1 /* no comment why, guid=A80593CE-A997-11DA-B012-
> > B622A1EF5492 */
> > > instance=1 /* no comment why, guid=A70591CE-A997-11DA-B012-
> > B622A1EF5492 */
> > ...
> > > dell-wmi-led.c:
> > > instance=1 /* no comment why, guid=F6E4FE6E-909D-47cb-8BAB-
> > C9F6F2F8D396 */
> >
> > --
> > Pali RohÃr
> > pali.rohar@xxxxxxxxx