Received: by 2002:ab2:2994:0:b0:1ef:ca3e:3cd5 with SMTP id n20csp313751lqb; Thu, 14 Mar 2024 11:57:58 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCW7Ci3p6iXkhXfDt5d6IOTPuqmwdph7WKhZ/zmvdR6f/QHIrXf04F45EfPnYbcz7Rl7i81Qhw8yqe7IW+M98hQIGAt8cvymsyB3ULPMDA== X-Google-Smtp-Source: AGHT+IEegzLhO9kgMXboeadW7L8kjim54z6Eq5XHRiu4kGc4i+8dJck3Ce5bMHWQ3qBF0TI+v3Rd X-Received: by 2002:a50:9fc3:0:b0:568:a5b5:8591 with SMTP id c61-20020a509fc3000000b00568a5b58591mr1583165edf.1.1710442677889; Thu, 14 Mar 2024 11:57:57 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1710442677; cv=pass; d=google.com; s=arc-20160816; b=pI8jqxfqLW9a/Cii8/QyL63WUTpmWtoyyhb9/gbTJ9In6I3SJeuS2vZIBduzI8j65t 216fHkcGrPgORSk6KMngIa0WZtPExqFt7v6Gujh8JpuH8jy36QrWcdR1bENo6jc5uocF EQ7He+P+8MvaI1Kz0sU0JfPpvIGGUrJaRGresvtfonBH7IUph11fMA4Y9oqM2Sz9jP5w yVoKBGII8166N75T2bcepu3g1rjBDW80bEgMhqcSAwd6WoeEFCHZogBKRO9YTj/WgiPh iCZajZvlNlkCAy8L4pXz/MLHb3/fMNgNByRCjCDtdFJcUbb/vEduUzbqjjgA4XMM+SZ0 VLFg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id:dkim-signature; bh=IgSaammUFy2TOa0WII3+Dnc2Xf4wnw9w4RJfj2ZqpNs=; fh=RdiITaLosT2R9nVpTxcGnZDx7OpU9pm+G5nwllO8Fjg=; b=XGQ51zWu6E8x0qfDwULix/POS3URUQjnsGwJOhCsWMg5Rfano75q7/Xfi0kA1RlyF6 8rcfTQwNjpuU71R/e7I7317hVVhm/0YOlxlDooUGzizuaYbUyMdZ+oMZB1NoAOt6Dcsc eHDsGKYpYUEq9vtB6Pf/OsIU619DfCQUcWjOnBwiWN6MpW4elnJ3RS8qKyu1xofHCmvA uQH64v+OskiaNcD2z/wi+TpMNJh5+mAd1vC9hgSQM17Zs7JYArj/QVzPKFPA2y74TAn1 P7kUm7UofUzMDNqb5qs7gxCYHVlN1f4h6GA1crTmP5RlUvPljVZhJNUvXX1GmyWMxUKu lTDw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="Co4/9v+M"; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-103705-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-103705-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id f18-20020a056402355200b005676692168asi1033192edd.89.2024.03.14.11.57.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 Mar 2024 11:57:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-103705-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="Co4/9v+M"; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-103705-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-103705-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 9C1811F259D2 for ; Thu, 14 Mar 2024 18:57:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 069AC762EB; Thu, 14 Mar 2024 18:56:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Co4/9v+M" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4513774E39; Thu, 14 Mar 2024 18:56:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.13 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710442614; cv=none; b=OAzDH2Y/FyWJlEqFHwAFQjE3N13yAaX6Rib/oIOOEekNioWvBTshXnehNCE7r/a8hAJ/alNumuvI89auMJodIX7iJ3VmyuERwPAJozD1zhYcF5tnlTxC3ickw/pfGX4931vl+RW6NWHh8wTnYBGEXSaz+kTzvd9JEMXaHbEpnww= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710442614; c=relaxed/simple; bh=vbdumEA8i1vHquFSQh0G9ie0UpZsWtmjCxra+Osqsgs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=QGnYUqrhXTLmCtsqfHpTA8yeOISkmPl037wRYzHJNShClLqipJBJvO1aFP8f+PSOB4vpS5zfRh1os/8WFR1Ite6w/MhyGGvta8yJ20fLciKNkli+BYw0ZD3zaelgJs1g1LbVwokQGL28AbQfzFiKFJSOZi/J2JEafRShIU2/VdY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Co4/9v+M; arc=none smtp.client-ip=192.198.163.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710442612; x=1741978612; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=vbdumEA8i1vHquFSQh0G9ie0UpZsWtmjCxra+Osqsgs=; b=Co4/9v+M8+QoRr8tyIcskty2er+P7qlYkzPVfmCadiVTDazk1wA60/LI 5SPtOH4LQIMPxWcMwngJeB9SOj++m+xyUaIQwlexM8dejHAggM3U+F36q XPNDhIauo9wbSsPhbELZUxYRM5KIHydzZhwXlX4E9EX1J5/I7pLGEVIaJ CgsY4csaUXMtZnElHK+XmvNTpmJQyvXB43KKhpLSGyFs7m1Pk2e4dYXtE iyL8y7wsCy5QzWcGbCDXayF7/k0ROu3F4KLrO6N7Ai6jdU1tqzTR67xJd EqpbeN62QslkuzkvkQ7M/dYvNt08cazRcfqIlB1cQgHUtxAW1Aedu8/8c A==; X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="8224369" X-IronPort-AV: E=Sophos;i="6.07,126,1708416000"; d="scan'208";a="8224369" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Mar 2024 11:56:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,126,1708416000"; d="scan'208";a="16865490" Received: from jtang15-mobl.amr.corp.intel.com (HELO [10.212.137.58]) ([10.212.137.58]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Mar 2024 11:56:51 -0700 Message-ID: <887d0674-9531-417a-8eca-ecd86c528c29@linux.intel.com> Date: Thu, 14 Mar 2024 11:56:50 -0700 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 1/2] platform/x86: wmi: Support reading/writing 16 bit EC values Content-Language: en-US To: Armin Wolf , hdegoede@redhat.com, ilpo.jarvinen@linux.intel.com Cc: rafael@kernel.org, lenb@kernel.org, mario.limonciello@amd.com, linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org References: <20240314184538.2933-1-W_Armin@gmx.de> From: Kuppuswamy Sathyanarayanan In-Reply-To: <20240314184538.2933-1-W_Armin@gmx.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 3/14/24 11:45 AM, Armin Wolf wrote: > The ACPI EC address space handler currently only supports > reading/writing 8 bit values. Some firmware implementations however > want to access for example 16 bit values, which is perfectly legal > according to the ACPI spec. > > Add support for reading/writing such values. > > Tested on a Dell Inspiron 3505 and a Asus Prime B650-Plus. > > Reviewed-by: Ilpo Järvinen > Signed-off-by: Armin Wolf > --- Reviewed-by: Kuppuswamy Sathyanarayanan > Chnages since v4: > - spelling fix > - fix checkpatch warning > > Changes since v3: > - change type of variable i to size_t > > Changes since v2: > - fix address overflow check > > Changes since v1: > - use BITS_PER_BYTE > - validate that number of bytes to read/write does not overflow the > address > --- > drivers/platform/x86/wmi.c | 54 +++++++++++++++++++++++++++++--------- > 1 file changed, 41 insertions(+), 13 deletions(-) > > diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c > index 1920e115da89..9602658711cf 100644 > --- a/drivers/platform/x86/wmi.c > +++ b/drivers/platform/x86/wmi.c > @@ -1153,6 +1153,34 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev) > return 0; > } > > +static int ec_read_multiple(u8 address, u8 *buffer, size_t bytes) > +{ > + size_t i; > + int ret; > + > + for (i = 0; i < bytes; i++) { > + ret = ec_read(address + i, &buffer[i]); > + if (ret < 0) > + return ret; > + } > + > + return 0; > +} > + > +static int ec_write_multiple(u8 address, u8 *buffer, size_t bytes) > +{ > + size_t i; > + int ret; > + > + for (i = 0; i < bytes; i++) { > + ret = ec_write(address + i, buffer[i]); > + if (ret < 0) > + return ret; > + } > + > + return 0; > +} > + > /* > * WMI can have EmbeddedControl access regions. In which case, we just want to > * hand these off to the EC driver. > @@ -1162,27 +1190,27 @@ acpi_wmi_ec_space_handler(u32 function, acpi_physical_address address, > u32 bits, u64 *value, > void *handler_context, void *region_context) > { > - int result = 0; > - u8 temp = 0; > + int bytes = bits / BITS_PER_BYTE; > + int ret; > > - if ((address > 0xFF) || !value) > + if (!value) > + return AE_NULL_ENTRY; > + > + if (!bytes || bytes > sizeof(*value)) > return AE_BAD_PARAMETER; > > - if (function != ACPI_READ && function != ACPI_WRITE) > + if (address > U8_MAX || address + bytes - 1 > U8_MAX) > return AE_BAD_PARAMETER; > > - if (bits != 8) > + if (function != ACPI_READ && function != ACPI_WRITE) > return AE_BAD_PARAMETER; > > - if (function == ACPI_READ) { > - result = ec_read(address, &temp); > - *value = temp; > - } else { > - temp = 0xff & *value; > - result = ec_write(address, temp); > - } > + if (function == ACPI_READ) > + ret = ec_read_multiple(address, (u8 *)value, bytes); > + else > + ret = ec_write_multiple(address, (u8 *)value, bytes); > > - switch (result) { > + switch (ret) { > case -EINVAL: > return AE_BAD_PARAMETER; > case -ENODEV: > -- > 2.39.2 > -- Sathyanarayanan Kuppuswamy Linux Kernel Developer