Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1651306pxj; Wed, 19 May 2021 10:39:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxmuK7256tSVgEIm5Zh0GhizaJ/dB3EwZ0dEbNZr9K2YyLdpw+BY/aXabxhr9WYMYMAf7yC X-Received: by 2002:aa7:cb06:: with SMTP id s6mr209477edt.284.1621445940865; Wed, 19 May 2021 10:39:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621445940; cv=none; d=google.com; s=arc-20160816; b=w8k/GT620BsLI3nvzqElimnY3qanba6XYDLqRfhxQZfTRrSFXO+WmZVXHlp92tVJIq TQ+TP3U3mIqy7qfxY28HJnJxTPbk2cD4OeksX4LU21kt8YyYSNxZLmnGfv3MFrIAsEx4 Qlq82z262EgAZ2JBNtodNkuQj+hsfj24vd/4tBlsxTHU5FVRXb0g/sqU9lg1qtP4fPfN 5GnXO7orVCDNb2B0TxUWfflCwv8rO2JOhLh6UAOkfxJ6o1dCg2/mN501wMX5zMzJAlm/ l2Exx2/IXH+EOP7Fo/kjyPl4y9Zh9E3cwtFpPt8kCXphU5bz0UcRyvlcCclzIfhDbTRq g5Ng== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=zDPLZY6n1fzjF1/PuV70TugjmL5LRz4hKWzApMGHl5U=; b=knQSeqC2WIXi59FjBLgxotU2yhIXhEeMl5lplRHW8wjWRVubnSw5GPZinp8zo/LHO0 /ZB/aiZfCVvpvThRLUS17XcIhUgnguAAx9SdRmuOmtYBneLDpTPRfLFNO93j6tnzs0db TfeawhZOMLjDyK8GBu9DeHvVxiI96BgAmnIKMGKc7WKXWFMZ6231T3BJ5I0bJ9qgCXuX +2WCKHUSAnGDRXVzr86vUV91YwiAne7y3J7ftTRssTqompCk8kOhxdhx4rR3Ep4hou5J sMWrZZIUKTDgzI2BGzOEgb9lf+3taVNxYx0Y6MhAeGFntWL/jILAQJjXijvKOvUWUUIZ OMfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@semihalf-com.20150623.gappssmtp.com header.s=20150623 header.b=DapZIgcr; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id op24si295440ejb.278.2021.05.19.10.38.37; Wed, 19 May 2021 10:39:00 -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=@semihalf-com.20150623.gappssmtp.com header.s=20150623 header.b=DapZIgcr; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240635AbhERJKr (ORCPT + 99 others); Tue, 18 May 2021 05:10:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38152 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241405AbhERJKq (ORCPT ); Tue, 18 May 2021 05:10:46 -0400 Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BE99C061756 for ; Tue, 18 May 2021 02:09:28 -0700 (PDT) Received: by mail-lj1-x232.google.com with SMTP id s25so10638738ljo.11 for ; Tue, 18 May 2021 02:09:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=zDPLZY6n1fzjF1/PuV70TugjmL5LRz4hKWzApMGHl5U=; b=DapZIgcrYoOpwcatlFni9M5PYI5eV4rQjFml2F2E9R3cMeH9boVnlDlOmzPzlLSqdV gl3UUtFieKqosZKIWMjG5hC4OuC34Eu8PMJoe67JTqLaK/K0Xy/58gfmYNDAjdlnJ6XJ xS9cEci4hfeayNCt8dyOyBGswnmphqjsOCyttaBsQtH6Z1igSfcW44GGrlWX1Qw2vI52 Z36IKwOs2x1TBR+QYlackh0+WglK/1uVkRS8DSC7VyZ0B6f6bZUZUbD4uoJuwPLGjkvR hCT1dUwK8haFxJwPqI5RJiBfd+/sMrGXaeCAp9jo7Lv+LlhwJwvydUOEg19CC3WzZQM9 73LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=zDPLZY6n1fzjF1/PuV70TugjmL5LRz4hKWzApMGHl5U=; b=SPxhx3Jr/72HHwHGeiE2u2hskxgk/FDXj9m0BgnBHpcC7499DjsxNQo6Of6HCMFqWu 5j7An1TKq5Ybopsb0ByBiFRlvNABrhftuARyTX/YMwynvB+aIh64Gce4NAKV94ALKzQc tzk9DSBsHBikIlOnK0VYreldKysN31219p2Lap2txyou5gRbqdkn3oBxnNF3hOv1qxux QWch1gZB/CtkrmVGDI2+VmpvsOs2rBnWyi2q81wfFIU0Dj55QpFgMv6IulQA5hrsT9Ne Qu40P7By4RohiylTCaubSNI8Rq/UGvv4RpsgAw19UwK0fO3glgKcsxsE8FO8bCdjEPs8 cWyQ== X-Gm-Message-State: AOAM53048Ru+47mHfmdFz8uQ0XJOcYwh/r9vWperHFDx8Abo5YsfrQs1 SMldUPe8n3ljsUoQ/3dxbBN79g== X-Received: by 2002:a2e:9196:: with SMTP id f22mr3318140ljg.88.1621328966961; Tue, 18 May 2021 02:09:26 -0700 (PDT) Received: from pdkmachine.localdomain (91-123-191-9.gigainternet.pl. [91.123.191.9]) by smtp.gmail.com with ESMTPSA id r1sm3215559ljj.21.2021.05.18.02.09.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 May 2021 02:09:26 -0700 (PDT) From: Patryk Duda To: Benson Leung Cc: Guenter Roeck , linux-kernel@vger.kernel.org, upstream@semihalf.com, Patryk Duda , stable@vger.kernel.org Subject: [PATCH] platform/chrome: cros_ec_proto: Send command again when timeout occurs Date: Tue, 18 May 2021 11:09:25 +0200 Message-Id: <20210518090925.15480-1-pdk@semihalf.com> X-Mailer: git-send-email 2.26.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sometimes kernel is trying to probe Fingerprint MCU (FPMCU) when it hasn't initialized SPI yet. This can happen because FPMCU is restarted during system boot and kernel can send message in short window eg. between sysjump to RW and SPI initialization. Cc: # 4.4+ Signed-off-by: Patryk Duda --- Fingerprint MCU is rebooted during system startup by AP firmware (coreboot). During cold boot kernel can query FPMCU in a window just after jump to RW section of firmware but before SPI is initialized. The window was shortened to <1ms, but it can't be eliminated completly. Communication with FPMCU (and all devices based on EC) is bi-directional. When kernel sends message, EC will send EC_SPI* status codes. When EC is not able to process command one of bytes will be eg. EC_SPI_NOT_READY. This mechanism won't work when SPI is not initailized on EC side. In fact, buffer is filled with 0xFF bytes, so from kernel perspective device is not responding. To avoid this problem, we can query device once again. We are already waiting EC_MSG_DEADLINE_MS for response, so we can send command immediately. Best regards, Patryk drivers/platform/chrome/cros_ec_proto.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c index aa7f7aa77297..3384631d21e2 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -279,6 +279,18 @@ static int cros_ec_host_command_proto_query(struct cros_ec_device *ec_dev, msg->insize = sizeof(struct ec_response_get_protocol_info); ret = send_command(ec_dev, msg); + /* + * Send command once again when timeout occurred. + * Fingerprint MCU (FPMCU) is restarted during system boot which + * introduces small window in which FPMCU won't respond for any + * messages sent by kernel. There is no need to wait before next + * attempt because we waited at least EC_MSG_DEADLINE_MS. + */ + if (ret == -ETIMEDOUT) { + dev_warn(ec_dev->dev, + "Timeout to get response from EC. Retrying.\n"); + ret = send_command(ec_dev, msg); + } if (ret < 0) { dev_dbg(ec_dev->dev, -- 2.31.1.751.gd2f1c929bd-goog