]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
platform/chrome: cros_ec_proto: Send command again when timeout occurs
authorPatryk Duda <pdk@semihalf.com>
Tue, 18 May 2021 14:07:58 +0000 (16:07 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Sep 2021 09:48:10 +0000 (11:48 +0200)
commit 3abc16af57c9939724df92fcbda296b25cc95168 upstream.

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: <stable@vger.kernel.org> # 4.4+
Signed-off-by: Patryk Duda <pdk@semihalf.com>
Link: https://lore.kernel.org/r/20210518140758.29318-1-pdk@semihalf.com
Signed-off-by: Benson Leung <bleung@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/platform/chrome/cros_ec_proto.c

index ac784ac66ac341f754d59bd6a7a70c61d1fd0915..2b807c8aa869c712b7bdd3bcf5e64a4bb8d4858c 100644 (file)
@@ -219,6 +219,15 @@ 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)
+               ret = send_command(ec_dev, msg);
 
        if (ret < 0) {
                dev_dbg(ec_dev->dev,