Received: by 2002:a05:6a10:eb17:0:0:0:0 with SMTP id hx23csp451348pxb; Thu, 9 Sep 2021 04:55:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxnAuxy4CBx84rXdOdCpNLahF9VGzuJw508zjl0/ySpPR6rb2TrwntxVxDhOjUFNYrlV6Es X-Received: by 2002:a05:6402:5215:: with SMTP id s21mr2773802edd.236.1631188501839; Thu, 09 Sep 2021 04:55:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631188501; cv=none; d=google.com; s=arc-20160816; b=GuWzw6vxaTtjYJKLODJRRVUrhZicYcwmMnGbQwA6zykWilaVlh2d4aQXtbzHIfhoPb 0a1UwmPNYyiKYiHVZ21lz6O8OZ5wlvcx/5mw0B7C3Bl3dF+saJ0IGDAa2evhvO7IpuVT Sr2XnhFakMElPJjWkU5RxIadiTJiest3I3S5IA1njzzk7SQrJwz8ibuJaJBV518hoTcM Ti1kbaj5hHba+VEQfSYtmkBJog2t929Q9TR6UhgP+kKLBE4PUBfNBU8BJpJVw7+gwpo6 ZV7Y/Vlc0qaag5cV9o4A57LQ5hdh33l7EfDeKgzCI/+fBPDiDKsFgqol7kFboo62E+MB Glog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=8PIPo56Z7IR3TT7Giz3jLSFk3sECJqyIcayy+FRbUWg=; b=y1444+EN/QgnEpFPaw4PGJfjQX/dzvrbifVTZCIgBlGV0TIZiYfA5Q1VONpKLEvD8P wU09D6gc1PG6ww8MiMtHhLzyBJCFIK/F1+VapNnAKGh5BioxN5dlvgjKKr654mXiC29L /DfQvqje6ooXBnJU23XFieP3z/rQ3fSssiHCxbL30d3H8ZwSWXsGw/aL9PkZ1ovHmmkI OhmxArA3ufDEY1oXd0j6tup4CGmXs+siJpvi1SYnBlmMu/l/vG19ezHbe89HoHqDd/Lb gmtas3bRE8EMBThiKCkump4JW3qHfKzWBY4NAc7jPc9+c2lTbvsYEns6JHv6J8LiuXHZ Bchw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="YAVkVS/f"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hr13si1453435ejc.66.2021.09.09.04.54.36; Thu, 09 Sep 2021 04:55:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="YAVkVS/f"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236158AbhIILvC (ORCPT + 99 others); Thu, 9 Sep 2021 07:51:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:46060 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240939AbhIILqa (ORCPT ); Thu, 9 Sep 2021 07:46:30 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id EB52A61215; Thu, 9 Sep 2021 11:42:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1631187778; bh=axmn8dH+PKOLbiom6RifHrPlM1s1t5joj3jEIbTgiWA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YAVkVS/f7DiH4GD+3pfZZCnd0LiiGngQJf0tuX8U7+60STWh54iHxhrS1e086rd3Y W4s1Zc5iwKQL45vh62Y8+VGJgkgit+xz03wwi+HP7MHBXLquA9DhhLkxTAjKL369mX SPCFlV7fIkpE8WrtQCc5IHHB1K8jZq0XBGKFtKiWDo3WZV98ElyeV8MyjYhbKez9RI glu7KH3ICMpQ9gszL6B4wAtcyCYWV/Ss0HPs5/AhJX1fm5hFJ5mzozOt0tuwH4ELqL HDs41K6C1L1S4boXmtlTTsfkdOY2fXOit1zbu2pYLuquD9bx9JQ1vWFk0wL1i0om8g d9NC0DaHYE58Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Heiner Kallweit , Jean Delvare , Wolfram Sang , Sasha Levin , linux-i2c@vger.kernel.org Subject: [PATCH AUTOSEL 5.14 088/252] i2c: i801: Fix handling SMBHSTCNT_PEC_EN Date: Thu, 9 Sep 2021 07:38:22 -0400 Message-Id: <20210909114106.141462-88-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210909114106.141462-1-sashal@kernel.org> References: <20210909114106.141462-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Heiner Kallweit [ Upstream commit a6b8bb6a813a6621c75ceacd1fa604c0229e9624 ] Bit SMBHSTCNT_PEC_EN is used only if software calculates the CRC and uses register SMBPEC. This is not supported by the driver, it supports hw-calculation of CRC only (using bit SMBAUXSTS_CRCE). The chip spec states the following, therefore never set bit SMBHSTCNT_PEC_EN. Chapter SMBus CRC Generation and Checking If the AAC bit is set in the Auxiliary Control register, the PCH automatically calculates and drives CRC at the end of the transmitted packet for write cycles, and will check the CRC for read cycles. It will not transmit the contents of the PEC register for CRC. The PEC bit must not be set in the Host Control register. If this bit is set, unspecified behavior will result. This patch is based solely on the specification and compile-tested only, because I have no PEC-capable devices. Signed-off-by: Heiner Kallweit Tested-by: Jean Delvare Signed-off-by: Wolfram Sang Signed-off-by: Sasha Levin --- drivers/i2c/busses/i2c-i801.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index aa3f60e69230..92ec291c0648 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -503,19 +503,16 @@ static int i801_transaction(struct i801_priv *priv, int xact) static int i801_block_transaction_by_block(struct i801_priv *priv, union i2c_smbus_data *data, - char read_write, int command, - int hwpec) + char read_write, int command) { - int i, len; - int status; - int xact = hwpec ? SMBHSTCNT_PEC_EN : 0; + int i, len, status, xact; switch (command) { case I2C_SMBUS_BLOCK_PROC_CALL: - xact |= I801_BLOCK_PROC_CALL; + xact = I801_BLOCK_PROC_CALL; break; case I2C_SMBUS_BLOCK_DATA: - xact |= I801_BLOCK_DATA; + xact = I801_BLOCK_DATA; break; default: return -EOPNOTSUPP; @@ -665,8 +662,7 @@ static irqreturn_t i801_isr(int irq, void *dev_id) */ static int i801_block_transaction_byte_by_byte(struct i801_priv *priv, union i2c_smbus_data *data, - char read_write, int command, - int hwpec) + char read_write, int command) { int i, len; int smbcmd; @@ -764,9 +760,8 @@ static int i801_set_block_buffer_mode(struct i801_priv *priv) } /* Block transaction function */ -static int i801_block_transaction(struct i801_priv *priv, - union i2c_smbus_data *data, char read_write, - int command, int hwpec) +static int i801_block_transaction(struct i801_priv *priv, union i2c_smbus_data *data, + char read_write, int command) { int result = 0; unsigned char hostc; @@ -802,11 +797,11 @@ static int i801_block_transaction(struct i801_priv *priv, && i801_set_block_buffer_mode(priv) == 0) result = i801_block_transaction_by_block(priv, data, read_write, - command, hwpec); + command); else result = i801_block_transaction_byte_by_byte(priv, data, read_write, - command, hwpec); + command); if (command == I2C_SMBUS_I2C_BLOCK_DATA && read_write == I2C_SMBUS_WRITE) { @@ -917,8 +912,7 @@ static s32 i801_access(struct i2c_adapter *adap, u16 addr, SMBAUXCTL(priv)); if (block) - ret = i801_block_transaction(priv, data, read_write, size, - hwpec); + ret = i801_block_transaction(priv, data, read_write, size); else ret = i801_transaction(priv, xact); @@ -1690,6 +1684,7 @@ static void i801_setup_hstcfg(struct i801_priv *priv) unsigned char hstcfg = priv->original_hstcfg; hstcfg &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */ + hstcfg &= ~SMBHSTCNT_PEC_EN; /* Disable software PEC */ hstcfg |= SMBHSTCFG_HST_EN; pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hstcfg); } -- 2.30.2