Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Aug 2014 08:31:57 -0400
From:      Eric McCorkle <eric@metricspace.net>
To:        freebsd-acpi@freebsd.org
Subject:   Re: ACPI error messages on Lenovo W540
Message-ID:  <53F0A0BD.5060508@metricspace.net>
In-Reply-To: <53AA1D05.6000304@metricspace.net>
References:  <53A048B1.1080108@metricspace.net> <201406230953.16496.jhb@freebsd.org> <53A8AD54.8040908@metricspace.net> <201406241000.35812.jhb@freebsd.org> <53AA1D05.6000304@metricspace.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Finally got time to do some more poking around regarding this.  I 
haven't read the entire ACPI spec, so bear with me...

As John Baldwin said, the wrapper nvidia_acpi.c passes in a buffer 
instead of a package.  In the definition for _DSM, you can see calls to 
NVOP, NVPS, and NBCI.  I looked at all three, and they seem to treat 
Arg3 as a buffer as well (they call CreateField on it, which according 
to the ACPI spec, should take a buffer argument).

So it looks like both the nvidia driver as well as the ALS code are 
pretty thoroughly convinced that Arg3 (the fourth arg) is a buffer 
instead of a package, despite what the spec says about what it "should" be.

Could this possibly be fixed by adding some kind of quirk to the ACPI 
execution engine that says "_DSM's fourth argument is a buffer"?

On 06/24/2014 20:51, Eric McCorkle wrote:
>
> It looks like this is the definition:
>
>                      Method (_DSM, 4, NotSerialized)  // _DSM:
> Device-Specific Method
>                      {
>                          If (\CMPB (Arg0, Buffer (0x10)
>                                  {
>                                      /* 0000 */   0xF8, 0xD8, 0x86,
> 0xA4, 0xDA, 0x0B, 0x1B, 0x47,
>                                      /* 0008 */   0xA7, 0x2B, 0x60,
> 0x42, 0xA6, 0xB5, 0xBE, 0xE0
>                                  }))
>                          {
>                              Return (NVOP (Arg0, Arg1, Arg2, Arg3))
>                          }
>
>                          If (\CMPB (Arg0, Buffer (0x10)
>                                  {
>                                      /* 0000 */   0x01, 0x2D, 0x13,
> 0xA3, 0xDA, 0x8C, 0xBA, 0x49,
>                                      /* 0008 */   0xA5, 0x2E, 0xBC,
> 0x9D, 0x46, 0xDF, 0x6B, 0x81
>                                  }))
>                          {
>                              Return (NVPS (Arg0, Arg1, Arg2, Arg3))
>                          }
>
>                          If (\WIN8)
>                          {
>                              If (\CMPB (Arg0, Buffer (0x10)
>                                      {
>                                          /* 0000 */   0x75, 0x0B, 0xA5,
> 0xD4, 0xC7, 0x65, 0xF7, 0x46,
>                                          /* 0008 */   0xBF, 0xB7, 0x41,
> 0x51, 0x4C, 0xEA, 0x02, 0x44
>                                      }))
>                              {
>                                  Return (NBCI (Arg0, Arg1, Arg2, Arg3))
>                              }
>                          }
>
>                          Return (Buffer (0x04)
>                          {
>                               0x01, 0x00, 0x00, 0x80
>                          })
>                      }
>
> Not sure if that's helpful at all...
>
>> Ah, the nvidia driver calls _DSM and it has the bug.  In its
>> nvidia_acpi.c file
>> it uses a Buffer instead of a Package for the fourth argument to
>> _DSM.  OTOH, the
>> warning doesn't prevent the method from running, so the warning may be
>> harmless.
>> You can try contacting the nvidia folks to tell them about the warning
>> and point
>> out the bug in their _DSM wrapper in nvidia_acpi.c to see what they say.
>
> Will do.  Is there a preferred point of contact?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53F0A0BD.5060508>