From patchwork Mon May 25 22:22:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre Moreau X-Patchwork-Id: 6477401 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 9712B9F399 for ; Mon, 25 May 2015 22:21:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BA40D205EF for ; Mon, 25 May 2015 22:21:26 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id E04B2205EC for ; Mon, 25 May 2015 22:21:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E4A796E476; Mon, 25 May 2015 15:21:24 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from smtp1-g21.free.fr (smtp1-g21.free.fr [212.27.42.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8547E6E476; Mon, 25 May 2015 15:21:23 -0700 (PDT) Received: from testlinux.localdomain (unknown [83.248.242.206]) (Authenticated sender: pierre.morrow) by smtp1-g21.free.fr (Postfix) with ESMTPSA id B6F17940002; Tue, 26 May 2015 00:17:44 +0200 (CEST) From: Pierre Moreau To: nouveau@lists.freedesktop.org Subject: [PATCH 5/8] acpi: Check returned object type by Optimus _DSM locally Date: Tue, 26 May 2015 00:22:50 +0200 Message-Id: <1432592573-13743-5-git-send-email-pierre.morrow@free.fr> X-Mailer: git-send-email 2.4.1 In-Reply-To: <1432592573-13743-1-git-send-email-pierre.morrow@free.fr> References: <1432592573-13743-1-git-send-email-pierre.morrow@free.fr> Cc: bskeggs@redhat.com, dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Most _DSM will return an integer value of 0x80000002 when given an unknown UUID, revision ID or function ID. Checking locally allows us to differentiate that case from other ACPI errors, and to not report a "failed to evaluate _DSM" if 0x80000002 is returned which was confusing. Signed-off-by: Pierre Moreau --- drm/nouveau/nouveau_acpi.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drm/nouveau/nouveau_acpi.c b/drm/nouveau/nouveau_acpi.c index 073f7d7..7aeaf7d 100644 --- a/drm/nouveau/nouveau_acpi.c +++ b/drm/nouveau/nouveau_acpi.c @@ -88,12 +88,12 @@ static int nouveau_evaluate_optimus_dsm(acpi_handle handle, int func, int arg, u for (i = 0; i < 4; i++) args_buff[i] = (arg >> i * 8) & 0xFF; - obj = acpi_evaluate_dsm_typed(handle, nouveau_op_dsm_muid, nouveau_op_dsm_rid, - func, &argv4, ACPI_TYPE_BUFFER); + obj = acpi_evaluate_dsm(handle, nouveau_op_dsm_muid, nouveau_op_dsm_rid, + func, &argv4); if (!obj) { acpi_handle_info(handle, "failed to evaluate _DSM\n"); return AE_ERROR; - } else { + } else if (obj->type == ACPI_TYPE_BUFFER) { if (!result && obj->buffer.length == 4) { *result = obj->buffer.pointer[0]; *result |= (obj->buffer.pointer[1] << 8); @@ -101,6 +101,15 @@ static int nouveau_evaluate_optimus_dsm(acpi_handle handle, int func, int arg, u *result |= (obj->buffer.pointer[3] << 24); } ACPI_FREE(obj); + } else if (obj->type == ACPI_TYPE_INTEGER && + obj->integer.value == 0x80000002) { + acpi_handle_debug(handle, "failed to query Optimus _DSM\n"); + ACPI_FREE(obj); + return -ENODEV; + } else { + acpi_handle_err(handle, "unexpected returned value by Optimus _DSM\n"); + ACPI_FREE(obj); + return AE_ERROR; } return 0;