* [PATCH] gpu/nouveau/nouveau_acpi.c: Fix Type Mismatch ACPI warning
@ 2016-05-19 0:42 Marcos Paulo de Souza
[not found] ` <1463618578-5662-1-git-send-email-marcos.souza.org-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Marcos Paulo de Souza @ 2016-05-19 0:42 UTC (permalink / raw)
To: marcos.souza.org, airlied, daniel.vetter, bskeggs, lukas,
christian.koenig, dvhart, dri-devel
nouveau_optimus_dsm is using ACPI_TYPE_BUFFER, and this triggers warnings on ACPI:
[ 7.730564] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM
[ 7.730570] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (201509 30/nsarguments-95)
To fix it, change ACPI_TYPE_BUFFER to ACPI_TYPE_PACKAGE, as the warning tells to do.
Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
---
After booting my Asus Laptop, and after a suspend/resume too, dmesg shows warnings:
[ 1.633361] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 1.633434] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 7.730176] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 7.730564] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM
[ 7.730570] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 49.732059] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 49.732424] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM
[ 49.732430] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 74.366300] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 74.366657] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM
[ 74.366663] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 140.357789] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
[ 140.358532] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM
[ 140.358547] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95)
I don't know if this is the right thing to do, I just looked at intel_acpi.c to check how to use/check for ACPI Package.
The patch below silenced the "type mismatch" warnings, and some of the "evaluated _DSM" ones.
If this is not the right approach, please let me know how to fix it, I don't have knowledge in ACPI, but I really want to help.
drivers/gpu/drm/nouveau/nouveau_acpi.c | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c
index cdf5227..f04aef3 100644
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
@@ -73,22 +73,10 @@ static const char nouveau_op_dsm_muid[] = {
static int nouveau_optimus_dsm(acpi_handle handle, int func, int arg, uint32_t *result)
{
- int i;
union acpi_object *obj;
- char args_buff[4];
- union acpi_object argv4 = {
- .buffer.type = ACPI_TYPE_BUFFER,
- .buffer.length = 4,
- .buffer.pointer = args_buff
- };
-
- /* ACPI is little endian, AABBCCDD becomes {DD,CC,BB,AA} */
- for (i = 0; i < 4; i++)
- args_buff[i] = (arg >> i * 8) & 0xFF;
-
*result = 0;
obj = acpi_evaluate_dsm_typed(handle, nouveau_op_dsm_muid, 0x00000100,
- func, &argv4, ACPI_TYPE_BUFFER);
+ func, NULL, ACPI_TYPE_PACKAGE);
if (!obj) {
acpi_handle_info(handle, "failed to evaluate _DSM\n");
return AE_ERROR;
--
2.5.5
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread[parent not found: <1463618578-5662-1-git-send-email-marcos.souza.org-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* Re: [PATCH] gpu/nouveau/nouveau_acpi.c: Fix Type Mismatch ACPI warning [not found] ` <1463618578-5662-1-git-send-email-marcos.souza.org-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2016-05-19 9:49 ` Pierre Moreau 2016-05-20 2:22 ` Marcos Souza 0 siblings, 1 reply; 4+ messages in thread From: Pierre Moreau @ 2016-05-19 9:49 UTC (permalink / raw) To: Marcos Paulo de Souza Cc: airlied-cv59FeDIM0c, dvhart-VuQAYsv1563Yd54FQh9/CA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, bskeggs-H+wXaHxf7aLQT0dZR+AlfA, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, christian.koenig-5C7GfCeVMHo [-- Attachment #1.1: Type: text/plain, Size: 6402 bytes --] Hello Marcos, I sent a serie a year ago to fix some of the ACPI handling in Nouveau and add runtime pm support for laptops with an Apple GMUX (see [0], and especially [1] and [2]). I was told that a more generic work for the runtime pm was in the work, so I let the whole serie slip away. I was thinking of resubmitting the serie without the runtime pm additions, to at least fix those warning/error messages. I thought I had a patch to fix this issue in my serie, but going through it again, it looks like I did not. Note that even, though the spec says the 4th argument should be a package, some old BIOSes expect a different type, like a buffer (see the comment above [5]; I think there was also a comment about it in the spec, but I can’t find it anymore). I added some comments below. I’ll test this patch tonight, to see how it works on my laptop as I think it expects a buffer as 4th argument. Thank you! Regards, Pierre [0]: https://lists.freedesktop.org/archives/dri-devel/2015-May/083444.html [1]: https://lists.freedesktop.org/archives/dri-devel/2015-May/083448.html [2]: https://lists.freedesktop.org/archives/dri-devel/2015-May/083449.html On 09:42 PM - May 18 2016, Marcos Paulo de Souza wrote: > nouveau_optimus_dsm is using ACPI_TYPE_BUFFER, and this triggers warnings on ACPI: > [ 7.730564] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > [ 7.730570] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (201509 30/nsarguments-95) > > To fix it, change ACPI_TYPE_BUFFER to ACPI_TYPE_PACKAGE, as the warning tells to do. > > Signed-off-by: Marcos Paulo de Souza <marcos.souza.org-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > --- > > After booting my Asus Laptop, and after a suspend/resume too, dmesg shows warnings: > [ 1.633361] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 1.633434] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 7.730176] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 7.730564] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > [ 7.730570] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 49.732059] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 49.732424] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > [ 49.732430] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 74.366300] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 74.366657] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > [ 74.366663] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 140.357789] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > [ 140.358532] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > [ 140.358547] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) Out of curiosity, which GPU(s) do you have in your laptop? I guess there is at least an NVIDIA one, but is it an Optimus configuration? And if so, does the unused card go automatically to sleep after a few seconds? > > I don't know if this is the right thing to do, I just looked at intel_acpi.c to check how to use/check for ACPI Package. > The patch below silenced the "type mismatch" warnings, and some of the "evaluated _DSM" ones. > > If this is not the right approach, please let me know how to fix it, I don't have knowledge in ACPI, but I really want to help. > > drivers/gpu/drm/nouveau/nouveau_acpi.c | 14 +------------- > 1 file changed, 1 insertion(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c > index cdf5227..f04aef3 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c > +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c > @@ -73,22 +73,10 @@ static const char nouveau_op_dsm_muid[] = { > > static int nouveau_optimus_dsm(acpi_handle handle, int func, int arg, uint32_t *result) > { > - int i; > union acpi_object *obj; > - char args_buff[4]; > - union acpi_object argv4 = { > - .buffer.type = ACPI_TYPE_BUFFER, > - .buffer.length = 4, > - .buffer.pointer = args_buff > - }; > - > - /* ACPI is little endian, AABBCCDD becomes {DD,CC,BB,AA} */ > - for (i = 0; i < 4; i++) > - args_buff[i] = (arg >> i * 8) & 0xFF; > - > *result = 0; > obj = acpi_evaluate_dsm_typed(handle, nouveau_op_dsm_muid, 0x00000100, > - func, &argv4, ACPI_TYPE_BUFFER); > + func, NULL, ACPI_TYPE_PACKAGE); The last parameter you give to `acpi_evaluate_dsm_typed()` is the return type you expect (see [3]), which will be a buffer if func is 0, and is implementation dependent otherwise (see section 9.14.1 _DSM of [4]). So you don’t want to change it to ACPI_TYPE_PACKAGE. If you look at the implementation of `acpi_evaluate_dsm()` (which is called by `acpi_evaluate_dsm_typed()`), it will automatically create a package for the 4th argument, if you pass it a NULL pointer (see [5]). [3]: https://github.com/torvalds/linux/blob/46c13450624e36302547a2ac3695f2350fe7ffc3/include/acpi/acpi_bus.h#L69 [4]: http://www.acpi.info/DOWNLOADS/ACPI_5_Errata%20A.pdf [5]: https://github.com/torvalds/linux/blob/46c13450624e36302547a2ac3695f2350fe7ffc3/drivers/acpi/utils.c#L628 > if (!obj) { > acpi_handle_info(handle, "failed to evaluate _DSM\n"); > return AE_ERROR; > -- > 2.5.5 > > _______________________________________________ > dri-devel mailing list > dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --] [-- Attachment #2: Type: text/plain, Size: 154 bytes --] _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] gpu/nouveau/nouveau_acpi.c: Fix Type Mismatch ACPI warning 2016-05-19 9:49 ` Pierre Moreau @ 2016-05-20 2:22 ` Marcos Souza [not found] ` <CAH0vN5+s8CGjTwW_W7Z-AC9ZMsq7GqygYtCbEkL2+9y3DhJWAw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 4+ messages in thread From: Marcos Souza @ 2016-05-20 2:22 UTC (permalink / raw) To: airlied, daniel.vetter, bskeggs, lukas, christian.koenig, dvhart, dri-devel, nouveau [-- Attachment #1.1: Type: text/plain, Size: 7343 bytes --] Hi Pierre, Em qui, 19 de mai de 2016 às 06:49, Pierre Moreau <pierre.morrow@free.fr> escreveu: > Hello Marcos, > > I sent a serie a year ago to fix some of the ACPI handling in Nouveau and > add > runtime pm support for laptops with an Apple GMUX (see [0], and especially > [1] > and [2]). I was told that a more generic work for the runtime pm was in the > work, so I let the whole serie slip away. I was thinking of resubmitting > the > serie without the runtime pm additions, to at least fix those warning/error > messages. I thought I had a patch to fix this issue in my serie, but going > through it again, it looks like I did not. > Note that even, though the spec says the 4th argument should be a package, > some > old BIOSes expect a different type, like a buffer (see the comment above > [5]; I > think there was also a comment about it in the spec, but I can’t find it > anymore). > > I added some comments below. I’ll test this patch tonight, to see how it > works > on my laptop as I think it expects a buffer as 4th argument. > Good, I'm learning a lot here. I'm reading all links you pasted here. > > Thank you! > > Regards, > Pierre > > > [0]: https://lists.freedesktop.org/archives/dri-devel/2015-May/083444.html > [1]: https://lists.freedesktop.org/archives/dri-devel/2015-May/083448.html > [2]: https://lists.freedesktop.org/archives/dri-devel/2015-May/083449.html > > On 09:42 PM - May 18 2016, Marcos Paulo de Souza wrote: > > nouveau_optimus_dsm is using ACPI_TYPE_BUFFER, and this triggers > warnings on ACPI: > > [ 7.730564] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > > [ 7.730570] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (201509 > 30/nsarguments-95) > > > > To fix it, change ACPI_TYPE_BUFFER to ACPI_TYPE_PACKAGE, as the warning > tells to do. > > > > Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com> > > --- > > > > After booting my Asus Laptop, and after a suspend/resume too, dmesg > shows warnings: > > [ 1.633361] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 1.633434] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 7.730176] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 7.730564] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > > [ 7.730570] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 49.732059] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 49.732424] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > > [ 49.732430] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 74.366300] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 74.366657] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > > [ 74.366663] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 140.357789] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > [ 140.358532] ACPI: \_SB_.PCI0.RP05.PEGP: failed to evaluate _DSM > > [ 140.358547] ACPI Warning: \_SB_.PCI0.RP05.PEGP._DSM: Argument #4 type > mismatch - Found [Buffer], ACPI requires [Package] (20150930/nsarguments-95) > > Out of curiosity, which GPU(s) do you have in your laptop? I guess there > is at > least an NVIDIA one, but is it an Optimus configuration? And if so, does > the > unused card go automatically to sleep after a few seconds? > I have an Asus laptop with a NVD7 (GF117) Fermi card, and a Haswell onboard graphic card. About the automatic sleep, I really don't don't know, I'm just seeing these messages :) > > > > > I don't know if this is the right thing to do, I just looked at > intel_acpi.c to check how to use/check for ACPI Package. > > The patch below silenced the "type mismatch" warnings, and some of the > "evaluated _DSM" ones. > > > > If this is not the right approach, please let me know how to fix it, I > don't have knowledge in ACPI, but I really want to help. > > > > drivers/gpu/drm/nouveau/nouveau_acpi.c | 14 +------------- > > 1 file changed, 1 insertion(+), 13 deletions(-) > > > > diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c > b/drivers/gpu/drm/nouveau/nouveau_acpi.c > > index cdf5227..f04aef3 100644 > > --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c > > +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c > > @@ -73,22 +73,10 @@ static const char nouveau_op_dsm_muid[] = { > > > > static int nouveau_optimus_dsm(acpi_handle handle, int func, int arg, > uint32_t *result) > > { > > - int i; > > union acpi_object *obj; > > - char args_buff[4]; > > - union acpi_object argv4 = { > > - .buffer.type = ACPI_TYPE_BUFFER, > > - .buffer.length = 4, > > - .buffer.pointer = args_buff > > - }; > > - > > - /* ACPI is little endian, AABBCCDD becomes {DD,CC,BB,AA} */ > > - for (i = 0; i < 4; i++) > > - args_buff[i] = (arg >> i * 8) & 0xFF; > > - > > *result = 0; > > obj = acpi_evaluate_dsm_typed(handle, nouveau_op_dsm_muid, > 0x00000100, > > - func, &argv4, ACPI_TYPE_BUFFER); > > + func, NULL, ACPI_TYPE_PACKAGE); > > The last parameter you give to `acpi_evaluate_dsm_typed()` is the return > type > you expect (see [3]), which will be a buffer if func is 0, and is > implementation dependent otherwise (see section 9.14.1 _DSM of [4]). So you > don’t want to change it to ACPI_TYPE_PACKAGE. If you look at the > implementation > of `acpi_evaluate_dsm()` (which is called by `acpi_evaluate_dsm_typed()`), > it > will automatically create a package for the 4th argument, if you pass it a > NULL > pointer (see [5]). > > [3]: > https://github.com/torvalds/linux/blob/46c13450624e36302547a2ac3695f2350fe7ffc3/include/acpi/acpi_bus.h#L69 > [4]: http://www.acpi.info/DOWNLOADS/ACPI_5_Errata%20A.pdf > [5]: > https://github.com/torvalds/linux/blob/46c13450624e36302547a2ac3695f2350fe7ffc3/drivers/acpi/utils.c#L628 Thanks for all the links. I'll read the docs and send a new version of the patch when it makes more sense instead of just replacing random things. > > > > if (!obj) { > > acpi_handle_info(handle, "failed to evaluate _DSM\n"); > > return AE_ERROR; > > -- > > 2.5.5 > > > > _______________________________________________ > > dri-devel mailing list > > dri-devel@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > [-- Attachment #1.2: Type: text/html, Size: 9709 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <CAH0vN5+s8CGjTwW_W7Z-AC9ZMsq7GqygYtCbEkL2+9y3DhJWAw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH] gpu/nouveau/nouveau_acpi.c: Fix Type Mismatch ACPI warning [not found] ` <CAH0vN5+s8CGjTwW_W7Z-AC9ZMsq7GqygYtCbEkL2+9y3DhJWAw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2016-05-22 10:25 ` Peter Wu 0 siblings, 0 replies; 4+ messages in thread From: Peter Wu @ 2016-05-22 10:25 UTC (permalink / raw) To: Marcos Souza Cc: airlied-cv59FeDIM0c, dvhart-VuQAYsv1563Yd54FQh9/CA, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, bskeggs-H+wXaHxf7aLQT0dZR+AlfA, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, christian.koenig-5C7GfCeVMHo On Fri, May 20, 2016 at 02:22:57AM +0000, Marcos Souza wrote: [..] > > > I don't know if this is the right thing to do, I just looked at > > intel_acpi.c to check how to use/check for ACPI Package. > > > The patch below silenced the "type mismatch" warnings, and some of the > > "evaluated _DSM" ones. > > > > > > If this is not the right approach, please let me know how to fix it, I > > don't have knowledge in ACPI, but I really want to help. > > > > > > drivers/gpu/drm/nouveau/nouveau_acpi.c | 14 +------------- > > > 1 file changed, 1 insertion(+), 13 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c > > b/drivers/gpu/drm/nouveau/nouveau_acpi.c > > > index cdf5227..f04aef3 100644 > > > --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c > > > +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c > > > @@ -73,22 +73,10 @@ static const char nouveau_op_dsm_muid[] = { > > > > > > static int nouveau_optimus_dsm(acpi_handle handle, int func, int arg, > > uint32_t *result) > > > { > > > - int i; > > > union acpi_object *obj; > > > - char args_buff[4]; > > > - union acpi_object argv4 = { > > > - .buffer.type = ACPI_TYPE_BUFFER, > > > - .buffer.length = 4, > > > - .buffer.pointer = args_buff > > > - }; > > > - > > > - /* ACPI is little endian, AABBCCDD becomes {DD,CC,BB,AA} */ > > > - for (i = 0; i < 4; i++) > > > - args_buff[i] = (arg >> i * 8) & 0xFF; > > > - > > > *result = 0; > > > obj = acpi_evaluate_dsm_typed(handle, nouveau_op_dsm_muid, > > 0x00000100, > > > - func, &argv4, ACPI_TYPE_BUFFER); > > > + func, NULL, ACPI_TYPE_PACKAGE); This effectively removes the fourth parameter (actually, using a zero as fourth argument), making the function useless. > > The last parameter you give to `acpi_evaluate_dsm_typed()` is the return > > type > > you expect (see [3]), which will be a buffer if func is 0, and is > > implementation dependent otherwise (see section 9.14.1 _DSM of [4]). So you > > don’t want to change it to ACPI_TYPE_PACKAGE. If you look at the > > implementation > > of `acpi_evaluate_dsm()` (which is called by `acpi_evaluate_dsm_typed()`), > > it > > will automatically create a package for the 4th argument, if you pass it a > > NULL > > pointer (see [5]). > > > > [3]: > > https://github.com/torvalds/linux/blob/46c13450624e36302547a2ac3695f2350fe7ffc3/include/acpi/acpi_bus.h#L69 > > [4]: http://www.acpi.info/DOWNLOADS/ACPI_5_Errata%20A.pdf > > [5]: > > https://github.com/torvalds/linux/blob/46c13450624e36302547a2ac3695f2350fe7ffc3/drivers/acpi/utils.c#L628 > > > Thanks for all the links. I'll read the docs and send a new version of the > patch when it makes more sense instead of just replacing random things. The warning is unavoidable, most firmware expect a Buffer for the fourth argument (counting from 0, this is Arg3). Excerpt from the DSM method on a recent Skylake laptop (Clevo P651, but this format is found on many other models from various manufacturers too): If ((Arg2 == 0x1A)) { CreateField (Arg3, 0x18, 0x02, OMPR) CreateField (Arg3, Zero, One, FLCH) CreateField (Arg3, One, One, DVSR) CreateField (Arg3, 0x02, One, DVSC) (The sections below refer to the one in the ACPI 6.1 document that can be found at http://uefi.org/specifications.) The first parameter for CreateField is evaluated as buffer (sec 19.6.21). According to 19.3.5.6 (Data Types and Type Conversions) an implicit conversion to a Buffer is only possible from an Integer and String, a Package does not belong to the possibilities. Note that the return value may be an integer for unsupported revision IDs or UUIDs (like 0x80000002). These should be compatible with Buffers though as stated above and acpi_check_dsm() can handle that case, but unfortunately sets a Package as fourth argument and can therefore not be used in nouveau. -- Kind regards, Peter Wu https://lekensteyn.nl _______________________________________________ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-05-22 10:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-19 0:42 [PATCH] gpu/nouveau/nouveau_acpi.c: Fix Type Mismatch ACPI warning Marcos Paulo de Souza
[not found] ` <1463618578-5662-1-git-send-email-marcos.souza.org-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-05-19 9:49 ` Pierre Moreau
2016-05-20 2:22 ` Marcos Souza
[not found] ` <CAH0vN5+s8CGjTwW_W7Z-AC9ZMsq7GqygYtCbEkL2+9y3DhJWAw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-05-22 10:25 ` Peter Wu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).