Received: by 2002:ab2:5d18:0:b0:1ef:7a0f:c32d with SMTP id j24csp268516lqk; Sat, 9 Mar 2024 09:07:42 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVXcSZXEKkRoIpZu8qSV0ah1Ib5BC3BsohwL9woLFK/XHpL7KRI27fBRZGp6R/WGKBpZb+3neAdSFPxrj8zIlNieyp2KfV2I9AP362GQA== X-Google-Smtp-Source: AGHT+IHmg2kA8tACsTqxfTdArlJatwzxxBympq3AKXZre9yPl2bvt0Mi85r6xN1rvNZg7oAxZ6uA X-Received: by 2002:a05:622a:1a0b:b0:42e:58c6:bc9e with SMTP id f11-20020a05622a1a0b00b0042e58c6bc9emr3450736qtb.60.1710004061954; Sat, 09 Mar 2024 09:07:41 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1710004061; cv=pass; d=google.com; s=arc-20160816; b=RPOWVW5RaD80qSDvTudEoK9gtNIFI0OUTP/Pob2rHaRhRsnZnv/ENdUJuPfFidSSjB kfjlN1MXPdcoPfGEN0zRRr28oLyWC39nm2GrbSmQR3dtvz+AjMTQUDmYAkv4jQCf3T7Z sF5od7lGGXb8YLP+dwYrQ79RvAQxRkk4mAbksjPACF6c0xikF/+f6o//BoSwyrseMbU/ tycfgLHCVFUhR3bLq8Y7g4vh/V0r9jfuXyaX5XF7kRj1lohPOtMxl4aPYsfajq9mPzvL kLEinxhyjCY+mR0gNFXhtvjIzE7uf6Z1Z+imvnBuErY5XOjztEPmel1kWUBlZmifygiT oalQ== 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=EJXCpNPgfwpxGnCMTfpGyvNd9kG6CXfw4vqG9RUe0w8=; fh=RdiITaLosT2R9nVpTxcGnZDx7OpU9pm+G5nwllO8Fjg=; b=G8126Pk02frszoSi8nmwhPecbs4WBwrCCADPWDSPtsYt6gJaeQ6QWqlTEFCDXEWIoP K4fasOm1VrXDksAW8yM1CYo9vt0UqducmBwZnXr63ycxBnlm4WD/lZcp70DAcT9dVexq VnjmqZA5V59ImmPCboMb8vOHgCtWC0J6x80EgfDJQ1C1JV6pDq6ZCE1kAs2KArWt+aq+ yBWp3rPTmEMqa3bI7TZ0WPsumpJYA4PkQ46fjVeaBn6rGcSDW0f4WubkK/ypIsjEQ/tp 3hXy35FDOcyEHdGljIVsHzygkbdW1Zg7TS3NOtGKDlZv5GNPP6cZffau0jVgR13ehIJ+ y4tQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mQSCTd+e; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-97961-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-97961-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id x3-20020a05622a000300b0042ef2832b8fsi1972930qtw.60.2024.03.09.09.07.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 09 Mar 2024 09:07:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-97961-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=mQSCTd+e; arc=pass (i=1 dkim=pass dkdomain=intel.com dmarc=pass fromdomain=linux.intel.com); spf=pass (google.com: domain of linux-kernel+bounces-97961-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-97961-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id AA9EF1C2095D for ; Sat, 9 Mar 2024 17:07:41 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 0EA6320DC3; Sat, 9 Mar 2024 17:07:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="mQSCTd+e" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) (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 5E1D215BE; Sat, 9 Mar 2024 17:07:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.14 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710004053; cv=none; b=TZdeSTHm6ca0cuja0ZB48701gAomZlULeQwny2ZOVff94hzvUaPOzyFwLVEaCHx5pRuoIthn22SI63/AX5xCtgOk6FWZxHKm51SbMF1Cm+4nz3Yb7pxBor6AJu9C4cmzq68apvUQtwFBnw3q9ZsVQ4NpotlEN+Vl45keVQYtKwQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710004053; c=relaxed/simple; bh=3E7oqw6/EdZcH3vXneiO51C/GvwyGjp97u7WZeIrrgU=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=AGtSwcco9AMsA/yDEP7DgfcvZenZ9jCf0UqSTASz99C3tGRN8TQLPgI/wVjuiT5dQZTsnXdxAZJ4I9C2TVM745X3Gb/PrG9SbgiJsEnsczcw+SdMxjHyG/X/WF9z+cjqJ6pMSVoXr8Xa47l+y4NdChYHRy486odB3qZDtMyAdFo= 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=mQSCTd+e; arc=none smtp.client-ip=198.175.65.14 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=1710004052; x=1741540052; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=3E7oqw6/EdZcH3vXneiO51C/GvwyGjp97u7WZeIrrgU=; b=mQSCTd+ejzXcZ8DDIA8Sr//zJQPABU5hqOWqj4A+TpkqYAmOFAF80zbH bz2XXM/xDQrAs8MB245rBuwRPX3h8H0ZLom5PbAfC3QeqLMplDcXZWSUx 3V1hIXXkdXhbMwBBCf78Tj3X+dOZOggr13wX99NRBFl6QibyUs/eHrPpL vsjNbpyUzWS8ehKAlJVBzXhC8L5TxQnusJr4wiZos06cyWCqQ7qK/tgkk zszomEUoSvkVZcuQtmA/f/jP5Et6bGkBGUP0+eg1C5zjW21ICeJwUgNT5 7JyabnAbqmK+vqktBoy20xvFYgcVV+a04Du9vFfsWL2Mg7ZZqpfjEnozS g==; X-IronPort-AV: E=McAfee;i="6600,9927,11008"; a="8531413" X-IronPort-AV: E=Sophos;i="6.07,112,1708416000"; d="scan'208";a="8531413" Received: from orviesa004.jf.intel.com ([10.64.159.144]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Mar 2024 09:07:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,112,1708416000"; d="scan'208";a="15409298" Received: from chengyin-mobl.amr.corp.intel.com (HELO [10.209.27.224]) ([10.209.27.224]) by orviesa004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Mar 2024 09:07:30 -0800 Message-ID: Date: Sat, 9 Mar 2024 09:07:30 -0800 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 v4 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: <20240308210519.2986-1-W_Armin@gmx.de> From: Kuppuswamy Sathyanarayanan In-Reply-To: <20240308210519.2986-1-W_Armin@gmx.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/8/24 1:05 PM, 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 prefectly 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. > > Signed-off-by: Armin Wolf > --- > 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 | 49 ++++++++++++++++++++++++++++++-------- > 1 file changed, 39 insertions(+), 10 deletions(-) > > diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c > index 1920e115da89..d9bf6d452b3a 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; > +} Why not use ec_transaction? > + > +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; > +} Same as above. > + > /* > * WMI can have EmbeddedControl access regions. In which case, we just want to > * hand these off to the EC driver. > @@ -1162,27 +1190,28 @@ 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 (!value) > + return AE_NULL_ENTRY; > > - if ((address > 0xFF) || !value) > + 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) Since you want to support only 16 bit reads/writes, can you check for >16 > + if (function != ACPI_READ && function != ACPI_WRITE) > return AE_BAD_PARAMETER; > > if (function == ACPI_READ) { > - result = ec_read(address, &temp); > - *value = temp; > + ret = ec_read_multiple(address, (u8 *)value, bytes); > } else { > - temp = 0xff & *value; > - result = ec_write(address, temp); > + 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