From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61ADEC433ED for ; Tue, 18 May 2021 09:09:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4271E60720 for ; Tue, 18 May 2021 09:09:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242138AbhERJKr (ORCPT ); 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-Google-Smtp-Source: ABdhPJwd36FdQw5OjeaJNExrYMnqgMrs9WA1iin+4PQZuKnVgjNayk86ub6DZ3d0pvz+Q6NUI7DdAA== 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