From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64025C433EF for ; Tue, 28 Jun 2022 02:49:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245506AbiF1Ctj (ORCPT ); Mon, 27 Jun 2022 22:49:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40366 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245413AbiF1Ctf (ORCPT ); Mon, 27 Jun 2022 22:49:35 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 651DAE15 for ; Mon, 27 Jun 2022 19:49:34 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 04BAC612C8 for ; Tue, 28 Jun 2022 02:49:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84311C385A5; Tue, 28 Jun 2022 02:49:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384573; bh=oEk4k9mHkKcxC41gNaDm4MHjECQ38Oqr6p+DJ62VmFI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TtNLZPKfb5e1D8uwOQHmy3VqSKSL1e2ZpUhDnShhObF/9+xP9VUkFBc8I/NyEWj70 oTF5yvlzVA8fHZo4huqaKV/Znp5t8nphFU5PlTBXQ9pEMnB3u7kKiO03X8deGZMNF3 19H+QarUgGU4IIDAyeawJ96rtZXoq5Bmaruzl90IvyjfSRwtzTPH5nJGNJYcCVSj1E Okk83+Xf6E0E05rQs8yFrv9fL53JQ7oUCyUv+D2gkwfJAmQe9X6wALlXtV3xjhj+hu BD7yebPCcTqgdICPoYetSwDfl16lFCDdzHFxGlAdD6+Veex5S5VlP31pX02Bc5C4tk SHvBPww/Dz6uQ== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 01/11] platform/chrome: cros_ec_proto: add "cros_ec_" prefix to send_command() Date: Tue, 28 Jun 2022 02:49:03 +0000 Message-Id: <20220628024913.1755292-2-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" To be neat, add "cros_ec_" prefix to static function send_command(). Reviewed-by: Guenter Roeck Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chr= ome/cros_ec_proto.c index 6923ea4401e5..b02fd1414e52 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -107,8 +107,7 @@ static int prepare_tx_legacy(struct cros_ec_device *ec_= dev, return EC_MSG_TX_PROTO_BYTES + msg->outsize; } =20 -static int send_command(struct cros_ec_device *ec_dev, - struct cros_ec_command *msg) +static int cros_ec_send_command(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) { int ret; int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg); @@ -255,7 +254,7 @@ static int cros_ec_get_host_event_wake_mask(struct cros= _ec_device *ec_dev, uint3 msg->command =3D EC_CMD_HOST_EVENT_GET_WAKE_MASK; msg->insize =3D sizeof(*r); =20 - ret =3D send_command(ec_dev, msg); + ret =3D cros_ec_send_command(ec_dev, msg); if (ret < 0) goto exit; =20 @@ -295,7 +294,7 @@ static int cros_ec_get_proto_info(struct cros_ec_device= *ec_dev, int devidx) msg->command =3D EC_CMD_PASSTHRU_OFFSET(devidx) | EC_CMD_GET_PROTOCOL_INF= O; msg->insize =3D sizeof(*info); =20 - ret =3D send_command(ec_dev, msg); + ret =3D cros_ec_send_command(ec_dev, msg); /* * Send command once again when timeout occurred. * Fingerprint MCU (FPMCU) is restarted during system boot which @@ -304,7 +303,7 @@ static int cros_ec_get_proto_info(struct cros_ec_device= *ec_dev, int devidx) * attempt because we waited at least EC_MSG_DEADLINE_MS. */ if (ret =3D=3D -ETIMEDOUT) - ret =3D send_command(ec_dev, msg); + ret =3D cros_ec_send_command(ec_dev, msg); =20 if (ret < 0) { dev_dbg(ec_dev->dev, @@ -376,7 +375,7 @@ static int cros_ec_get_proto_info_legacy(struct cros_ec= _device *ec_dev) params =3D (struct ec_params_hello *)msg->data; params->in_data =3D 0xa0b0c0d0; =20 - ret =3D send_command(ec_dev, msg); + ret =3D cros_ec_send_command(ec_dev, msg); if (ret < 0) { dev_dbg(ec_dev->dev, "EC failed to respond to v2 hello: %d\n", ret); goto exit; @@ -453,7 +452,7 @@ static int cros_ec_get_host_command_version_mask(struct= cros_ec_device *ec_dev, pver =3D (struct ec_params_get_cmd_versions *)msg->data; pver->cmd =3D cmd; =20 - ret =3D send_command(ec_dev, msg); + ret =3D cros_ec_send_command(ec_dev, msg); if (ret < 0) goto exit; =20 @@ -634,7 +633,7 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev, str= uct cros_ec_command *msg) } } =20 - ret =3D send_command(ec_dev, msg); + ret =3D cros_ec_send_command(ec_dev, msg); mutex_unlock(&ec_dev->lock); =20 return ret; --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1323EC433EF for ; Tue, 28 Jun 2022 02:49:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343797AbiF1Cts (ORCPT ); Mon, 27 Jun 2022 22:49:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245575AbiF1Ctj (ORCPT ); Mon, 27 Jun 2022 22:49:39 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 56A09E3F for ; Mon, 27 Jun 2022 19:49:37 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id DBF06B819BA for ; Tue, 28 Jun 2022 02:49:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C20B7C385A2; Tue, 28 Jun 2022 02:49:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384574; bh=l8X/8UhdJjUEHOfnRkK7cbEcEf4hOXGDhWE9eubIZ5w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=g8O0T5XaX5uhRHwU9Pg0mZ4E6+7+UAxbEWjnU63/P0cubBXrAy1ViiIt8xkND0b/l IZE0gZifFAFSXmnLDKsSFOWh+UXAoOfmeNBKTG8RTn8c7cfOYmJBfzmAfVC93u/qqs n34d9a1y4ldgZVdXrzUnDmyv+Uu2NOmjsF5CPPoE1a9+W2znsZzJSmusr8LiYUzaR1 ByR4R+FtJJjpD2qGo0kyGY9ioXVU2Fjsr2TeCaeBq57wW7CbMwmD5hCVghOfnqicq9 uNunTvh0KXwkcABjEW+HIO4puU2z4mkbh/zlY9Kzti/6U2zjQdLmBqsBm/DLoraxTG cWDgc9XQUgSkQ== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 02/11] platform/chrome: cros_ec_proto: add Kunit tests for cros_ec_cmd_xfer() Date: Tue, 28 Jun 2022 02:49:04 +0000 Message-Id: <20220628024913.1755292-3-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_cmd_xfer() transfers the given command and data if any. It performs some sanity checks and calls cros_ec_send_command(). Add Kunit tests for cros_ec_cmd_xfer(). Reviewed-by: Guenter Roeck Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto_test.c | 149 +++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platfor= m/chrome/cros_ec_proto_test.c index 1e2a1522c288..33721607a5b9 100644 --- a/drivers/platform/chrome/cros_ec_proto_test.c +++ b/drivers/platform/chrome/cros_ec_proto_test.c @@ -1535,6 +1535,151 @@ static void cros_ec_proto_test_query_all_default_wa= ke_mask_return0(struct kunit } } =20 +static void cros_ec_proto_test_cmd_xfer_normal(struct kunit *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct { + struct cros_ec_command msg; + u8 data[0x100]; + } __packed buf; + + ec_dev->max_request =3D 0xff; + ec_dev->max_response =3D 0xee; + ec_dev->max_passthru =3D 0xdd; + + buf.msg.version =3D 0; + buf.msg.command =3D EC_CMD_HELLO; + buf.msg.insize =3D 4; + buf.msg.outsize =3D 2; + buf.data[0] =3D 0x55; + buf.data[1] =3D 0xaa; + + { + u8 *data; + + mock =3D cros_kunit_ec_xfer_mock_add(test, 4); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + + data =3D (u8 *)mock->o_data; + data[0] =3D 0xaa; + data[1] =3D 0x55; + data[2] =3D 0xcc; + data[3] =3D 0x33; + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &buf.msg); + KUNIT_EXPECT_EQ(test, ret, 4); + + { + u8 *data; + + mock =3D cros_kunit_ec_xfer_mock_next(); + KUNIT_EXPECT_PTR_NE(test, mock, NULL); + + KUNIT_EXPECT_EQ(test, mock->msg.version, 0); + KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_HELLO); + KUNIT_EXPECT_EQ(test, mock->msg.insize, 4); + KUNIT_EXPECT_EQ(test, mock->msg.outsize, 2); + + data =3D (u8 *)mock->i_data; + KUNIT_EXPECT_EQ(test, data[0], 0x55); + KUNIT_EXPECT_EQ(test, data[1], 0xaa); + + KUNIT_EXPECT_EQ(test, buf.data[0], 0xaa); + KUNIT_EXPECT_EQ(test, buf.data[1], 0x55); + KUNIT_EXPECT_EQ(test, buf.data[2], 0xcc); + KUNIT_EXPECT_EQ(test, buf.data[3], 0x33); + } +} + +static void cros_ec_proto_test_cmd_xfer_excess_msg_insize(struct kunit *te= st) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct { + struct cros_ec_command msg; + u8 data[0x100]; + } __packed buf; + + ec_dev->max_request =3D 0xff; + ec_dev->max_response =3D 0xee; + ec_dev->max_passthru =3D 0xdd; + + buf.msg.version =3D 0; + buf.msg.command =3D EC_CMD_HELLO; + buf.msg.insize =3D 0xee + 1; + buf.msg.outsize =3D 2; + + { + mock =3D cros_kunit_ec_xfer_mock_add(test, 0xcc); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &buf.msg); + KUNIT_EXPECT_EQ(test, ret, 0xcc); + + { + mock =3D cros_kunit_ec_xfer_mock_next(); + KUNIT_EXPECT_PTR_NE(test, mock, NULL); + + KUNIT_EXPECT_EQ(test, mock->msg.version, 0); + KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_HELLO); + KUNIT_EXPECT_EQ(test, mock->msg.insize, 0xee); + KUNIT_EXPECT_EQ(test, mock->msg.outsize, 2); + } +} + +static void cros_ec_proto_test_cmd_xfer_excess_msg_outsize_without_passthr= u(struct kunit *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + int ret; + struct { + struct cros_ec_command msg; + u8 data[0x100]; + } __packed buf; + + ec_dev->max_request =3D 0xff; + ec_dev->max_response =3D 0xee; + ec_dev->max_passthru =3D 0xdd; + + buf.msg.version =3D 0; + buf.msg.command =3D EC_CMD_HELLO; + buf.msg.insize =3D 4; + buf.msg.outsize =3D 0xff + 1; + + ret =3D cros_ec_cmd_xfer(ec_dev, &buf.msg); + KUNIT_EXPECT_EQ(test, ret, -EMSGSIZE); +} + +static void cros_ec_proto_test_cmd_xfer_excess_msg_outsize_with_passthru(s= truct kunit *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + int ret; + struct { + struct cros_ec_command msg; + u8 data[0x100]; + } __packed buf; + + ec_dev->max_request =3D 0xff; + ec_dev->max_response =3D 0xee; + ec_dev->max_passthru =3D 0xdd; + + buf.msg.version =3D 0; + buf.msg.command =3D EC_CMD_PASSTHRU_OFFSET(CROS_EC_DEV_PD_INDEX) + EC_CMD= _HELLO; + buf.msg.insize =3D 4; + buf.msg.outsize =3D 0xdd + 1; + + ret =3D cros_ec_cmd_xfer(ec_dev, &buf.msg); + KUNIT_EXPECT_EQ(test, ret, -EMSGSIZE); +} + static void cros_ec_proto_test_release(struct device *dev) { } @@ -1601,6 +1746,10 @@ static struct kunit_case cros_ec_proto_test_cases[] = =3D { KUNIT_CASE(cros_ec_proto_test_query_all_no_host_sleep_return0), KUNIT_CASE(cros_ec_proto_test_query_all_default_wake_mask_return_error), KUNIT_CASE(cros_ec_proto_test_query_all_default_wake_mask_return0), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_normal), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_insize), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_outsize_without_passthr= u), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_outsize_with_passthru), {} }; =20 --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1161C433EF for ; Tue, 28 Jun 2022 02:49:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343787AbiF1Ctp (ORCPT ); Mon, 27 Jun 2022 22:49:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245572AbiF1Ctj (ORCPT ); Mon, 27 Jun 2022 22:49:39 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02C18B99 for ; Mon, 27 Jun 2022 19:49:37 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 871D5612E3 for ; Tue, 28 Jun 2022 02:49:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D492C341CA; Tue, 28 Jun 2022 02:49:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384575; bh=ygsxlyyDm5iPbKdSrs+EnAu3gEJvBrwf7efjb90596E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F31GiV3ry9n+RU3AJ5qO7JiIAD/zDU43/26dyMqjaKMo5L0MfX/fPS8pU3NzCSF/L ZbETCa7lk/aMJRF7GWIWi/SsxcNrp5y7DcFmDdoILx5BLH3DDk5wwqTJOCeuX4Iajx VQoH3L7fnFrOQWi4jrGULkPDzvAPMxeu8UpkE7xlNMdx6I+k2yVJM6WkbB2dfAnnPa oiefE39qdZkRD4b3O4BrB1LpjjVBjm0BKymy6RhBaXSN4fPKYepl1gFVbye0+AIiLJ a/RG0E75Pvxo9oMxXB9PnF0l9eogKcnQlBJwmhfR7tp8qtfjJhBIlICRSDpLCisKEq rl8Lx7bG/011g== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 03/11] platform/chrome: cros_ec_proto: add Kunit tests for cros_ec_send_command() Date: Tue, 28 Jun 2022 02:49:05 +0000 Message-Id: <20220628024913.1755292-4-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_cmd_xfer() is the only exported function that calls static function cros_ec_send_command(). Add Kunit tests for cros_ec_send_command() through calling cros_ec_cmd_xfer(). Reviewed-by: Guenter Roeck Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto_test.c | 265 +++++++++++++++++++ drivers/platform/chrome/cros_kunit_util.c | 20 ++ drivers/platform/chrome/cros_kunit_util.h | 4 + 3 files changed, 289 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platfor= m/chrome/cros_ec_proto_test.c index 33721607a5b9..64100fd81c6a 100644 --- a/drivers/platform/chrome/cros_ec_proto_test.c +++ b/drivers/platform/chrome/cros_ec_proto_test.c @@ -1680,6 +1680,262 @@ static void cros_ec_proto_test_cmd_xfer_excess_msg_= outsize_with_passthru(struct KUNIT_EXPECT_EQ(test, ret, -EMSGSIZE); } =20 +static void cros_ec_proto_test_cmd_xfer_protocol_v3_normal(struct kunit *t= est) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->proto_version =3D 3; + ec_dev->cmd_xfer =3D cros_kunit_ec_cmd_xfer_mock; + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, 0); + + KUNIT_EXPECT_EQ(test, cros_kunit_ec_cmd_xfer_mock_called, 0); + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 1); +} + +static void cros_ec_proto_test_cmd_xfer_protocol_v3_no_op(struct kunit *te= st) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->proto_version =3D 3; + ec_dev->cmd_xfer =3D cros_kunit_ec_cmd_xfer_mock; + ec_dev->pkt_xfer =3D NULL; + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, -EIO); +} + +static void cros_ec_proto_test_cmd_xfer_protocol_v2_normal(struct kunit *t= est) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->proto_version =3D 2; + ec_dev->cmd_xfer =3D cros_kunit_ec_cmd_xfer_mock; + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, 0); + + KUNIT_EXPECT_EQ(test, cros_kunit_ec_cmd_xfer_mock_called, 1); + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 0); +} + +static void cros_ec_proto_test_cmd_xfer_protocol_v2_no_op(struct kunit *te= st) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->proto_version =3D 2; + ec_dev->cmd_xfer =3D NULL; + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, -EIO); +} + +static void cros_ec_proto_test_cmd_xfer_in_progress_normal(struct kunit *t= est) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS. */ + { + struct ec_response_get_comms_status *data; + + mock =3D cros_kunit_ec_xfer_mock_add(test, sizeof(*data)); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + + data =3D (struct ec_response_get_comms_status *)mock->o_data; + data->flags =3D 0; + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, sizeof(struct ec_response_get_comms_status)); + + KUNIT_EXPECT_EQ(test, msg.result, EC_RES_SUCCESS); + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_next(); + KUNIT_EXPECT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS. */ + { + mock =3D cros_kunit_ec_xfer_mock_next(); + KUNIT_EXPECT_PTR_NE(test, mock, NULL); + + KUNIT_EXPECT_EQ(test, mock->msg.version, 0); + KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_GET_COMMS_STATUS); + KUNIT_EXPECT_EQ(test, mock->msg.insize, + sizeof(struct ec_response_get_comms_status)); + KUNIT_EXPECT_EQ(test, mock->msg.outsize, 0); + } + + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 2); +} + +static void cros_ec_proto_test_cmd_xfer_in_progress_retries_eagain(struct = kunit *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */ + cros_kunit_ec_xfer_mock_default_ret =3D -EAGAIN; + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, -EAGAIN); + + /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */ + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 51); +} + +static void cros_ec_proto_test_cmd_xfer_in_progress_retries_status_process= ing(struct kunit *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */ + { + struct ec_response_get_comms_status *data; + int i; + + for (i =3D 0; i < 50; ++i) { + mock =3D cros_kunit_ec_xfer_mock_add(test, sizeof(*data)); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + + data =3D (struct ec_response_get_comms_status *)mock->o_data; + data->flags |=3D EC_COMMS_STATUS_PROCESSING; + } + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, sizeof(struct ec_response_get_comms_status)); + + KUNIT_EXPECT_EQ(test, msg.result, EC_RES_SUCCESS); + + /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */ + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 51); +} + +static void cros_ec_proto_test_cmd_xfer_in_progress_xfer_error(struct kuni= t *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, -EIO, EC_RES_SUCCESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, -EIO); +} + +static void cros_ec_proto_test_cmd_xfer_in_progress_return_error(struct ku= nit *test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_INVALID_COMMAND, 0= ); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, 0); + + KUNIT_EXPECT_EQ(test, msg.result, EC_RES_INVALID_COMMAND); + + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 2); +} + static void cros_ec_proto_test_release(struct device *dev) { } @@ -1750,6 +2006,15 @@ static struct kunit_case cros_ec_proto_test_cases[] = =3D { KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_insize), KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_outsize_without_passthr= u), KUNIT_CASE(cros_ec_proto_test_cmd_xfer_excess_msg_outsize_with_passthru), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v3_normal), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v3_no_op), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v2_normal), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_protocol_v2_no_op), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_normal), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_retries_eagain), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_retries_status_process= ing), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_xfer_error), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_return_error), {} }; =20 diff --git a/drivers/platform/chrome/cros_kunit_util.c b/drivers/platform/c= hrome/cros_kunit_util.c index e031777dea87..3ede971e82ee 100644 --- a/drivers/platform/chrome/cros_kunit_util.c +++ b/drivers/platform/chrome/cros_kunit_util.c @@ -15,6 +15,10 @@ =20 int cros_kunit_ec_xfer_mock_default_ret; EXPORT_SYMBOL_GPL(cros_kunit_ec_xfer_mock_default_ret); +int cros_kunit_ec_cmd_xfer_mock_called; +EXPORT_SYMBOL_GPL(cros_kunit_ec_cmd_xfer_mock_called); +int cros_kunit_ec_pkt_xfer_mock_called; +EXPORT_SYMBOL_GPL(cros_kunit_ec_pkt_xfer_mock_called); =20 static struct list_head cros_kunit_ec_xfer_mock_in; static struct list_head cros_kunit_ec_xfer_mock_out; @@ -46,6 +50,20 @@ int cros_kunit_ec_xfer_mock(struct cros_ec_device *ec_de= v, struct cros_ec_comman } EXPORT_SYMBOL_GPL(cros_kunit_ec_xfer_mock); =20 +int cros_kunit_ec_cmd_xfer_mock(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) +{ + ++cros_kunit_ec_cmd_xfer_mock_called; + return cros_kunit_ec_xfer_mock(ec_dev, msg); +} +EXPORT_SYMBOL_GPL(cros_kunit_ec_cmd_xfer_mock); + +int cros_kunit_ec_pkt_xfer_mock(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) +{ + ++cros_kunit_ec_pkt_xfer_mock_called; + return cros_kunit_ec_xfer_mock(ec_dev, msg); +} +EXPORT_SYMBOL_GPL(cros_kunit_ec_pkt_xfer_mock); + struct ec_xfer_mock *cros_kunit_ec_xfer_mock_add(struct kunit *test, size_= t size) { return cros_kunit_ec_xfer_mock_addx(test, size, EC_RES_SUCCESS, size); @@ -90,6 +108,8 @@ EXPORT_SYMBOL_GPL(cros_kunit_ec_xfer_mock_next); void cros_kunit_mock_reset(void) { cros_kunit_ec_xfer_mock_default_ret =3D 0; + cros_kunit_ec_cmd_xfer_mock_called =3D 0; + cros_kunit_ec_pkt_xfer_mock_called =3D 0; INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_in); INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_out); } diff --git a/drivers/platform/chrome/cros_kunit_util.h b/drivers/platform/c= hrome/cros_kunit_util.h index 79c4525f873c..ae4080cb13f1 100644 --- a/drivers/platform/chrome/cros_kunit_util.h +++ b/drivers/platform/chrome/cros_kunit_util.h @@ -24,8 +24,12 @@ struct ec_xfer_mock { }; =20 extern int cros_kunit_ec_xfer_mock_default_ret; +extern int cros_kunit_ec_cmd_xfer_mock_called; +extern int cros_kunit_ec_pkt_xfer_mock_called; =20 int cros_kunit_ec_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_= command *msg); +int cros_kunit_ec_cmd_xfer_mock(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg); +int cros_kunit_ec_pkt_xfer_mock(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg); struct ec_xfer_mock *cros_kunit_ec_xfer_mock_add(struct kunit *test, size_= t size); struct ec_xfer_mock *cros_kunit_ec_xfer_mock_addx(struct kunit *test, int ret, int result, size_t size); --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2596FC433EF for ; Tue, 28 Jun 2022 02:49:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343776AbiF1Ctm (ORCPT ); Mon, 27 Jun 2022 22:49:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40424 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245557AbiF1Ctj (ORCPT ); Mon, 27 Jun 2022 22:49:39 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 30490F29 for ; Mon, 27 Jun 2022 19:49:38 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C2ED5612C8 for ; Tue, 28 Jun 2022 02:49:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B7D9C341CC; Tue, 28 Jun 2022 02:49:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384577; bh=/mCONiNi6+rv5jRQfmF6KXwkU9b+H5v0JzqV3x5Sslg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Jo4S5RZzxr1vph9vG7CefP5Cj1E24kKfkP/fvyN6K6toynuuXtPCubkrkEwjNmuDu rhZgGvxnTL0E7TFOkF9DfB/bB/ZyBEfmBN20JuoPy3p2YUr/JtCSLvBoiWG7lYNxU5 CSGSck6NVcCODFpp5XIUeTVuqWdwsdE4EzY/R99j0D7r2oQg3pRj6UytmMWHh2RNST Vwdui8G14JWJgpfAEtr6THk13InceS5ikD85SEDHZM++NeBIniU8LFylfDcwDPNa0T UQqeiLfZovKKWpiqGmLx59i0mg9H0pWx2spe0ariAWEPEL2kiMHHsB9C8QLuDhnhHj BNoUPWAOaqs/A== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 04/11] platform/chrome: cros_ec_proto: separate cros_ec_xfer_command() Date: Tue, 28 Jun 2022 02:49:06 +0000 Message-Id: <20220628024913.1755292-5-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_send_command() has extra logic to handle EC_RES_IN_PROGRESS. Separate the command transfer part into cros_ec_xfer_command() so that other functions can re-use it. Reviewed-by: Guenter Roeck Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chr= ome/cros_ec_proto.c index b02fd1414e52..0cec013be3d3 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -107,7 +107,7 @@ static int prepare_tx_legacy(struct cros_ec_device *ec_= dev, return EC_MSG_TX_PROTO_BYTES + msg->outsize; } =20 -static int cros_ec_send_command(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) +static int cros_ec_xfer_command(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) { int ret; int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg); @@ -123,14 +123,21 @@ static int cros_ec_send_command(struct cros_ec_device= *ec_dev, struct cros_ec_co * the EC is trying to use protocol v2, on an underlying * communication mechanism that does not support v2. */ - dev_err_once(ec_dev->dev, - "missing EC transfer API, cannot send command\n"); + dev_err_once(ec_dev->dev, "missing EC transfer API, cannot send command\= n"); return -EIO; } =20 trace_cros_ec_request_start(msg); ret =3D (*xfer_fxn)(ec_dev, msg); trace_cros_ec_request_done(msg, ret); + + return ret; +} + +static int cros_ec_send_command(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) +{ + int ret =3D cros_ec_xfer_command(ec_dev, msg); + if (msg->result =3D=3D EC_RES_IN_PROGRESS) { int i; struct cros_ec_command *status_msg; --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2CB36C433EF for ; Tue, 28 Jun 2022 02:49:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343835AbiF1Ct4 (ORCPT ); Mon, 27 Jun 2022 22:49:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343779AbiF1Ctn (ORCPT ); Mon, 27 Jun 2022 22:49:43 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA68110BC for ; Mon, 27 Jun 2022 19:49:40 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id A462DB819BA for ; Tue, 28 Jun 2022 02:49:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89F4BC341CB; Tue, 28 Jun 2022 02:49:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384578; bh=FHaTmUgiAOBou3jTjjclaGK3VUK22B3XVtClzeJg9Fc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gQxhQAG2zoXESXXAZf8lmkIYik3geUk7Eho3n/9JA1rZAGcOd2w4JIekhfKP7wlnT ZHn5LiEq2lxMQ/ZsFlWOyolx9UsQ336GHsMsVIXDG6RN6LhzDj3x1ftz7zLVQhh6Ei AS6McjGEkOPAcZ4J28f4gK0weU4RM/U1NZw6dY3nLyveBkj7I49lVA4r+aO6XSXkX8 Farv6DgXisjjiXJr3ZcDTQ/ouviidENW0S6UlFpYJvIkHXMqAWeYrowBSCQgxKcWrM AhVq/lbzvfCzabrj423SqQbhbCUcA9jWlRiHMotu8XcCCH8u4aivG9C+O2hj82Z1tP DuU51SM5bqrPw== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 05/11] platform/chrome: cros_ec_proto: separate cros_ec_wait_until_complete() Date: Tue, 28 Jun 2022 02:49:07 +0000 Message-Id: <20220628024913.1755292-6-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" EC returns EC_RES_IN_PROGRESS if the host command needs more time to complete. Whenever receives the return code, cros_ec_send_command() sends EC_CMD_GET_COMMS_STATUS to query the command status. Separate cros_ec_wait_until_complete() from cros_ec_send_command(). It sends EC_CMD_GET_COMMS_STATUS and waits until the previous command was completed, or encountered error, or timed out. Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto.c | 75 ++++++++++++------------- 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chr= ome/cros_ec_proto.c index 0cec013be3d3..466ecb063bd6 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -134,53 +134,50 @@ static int cros_ec_xfer_command(struct cros_ec_device= *ec_dev, struct cros_ec_co return ret; } =20 -static int cros_ec_send_command(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) +static int cros_ec_wait_until_complete(struct cros_ec_device *ec_dev, uint= 32_t *result) { - int ret =3D cros_ec_xfer_command(ec_dev, msg); + struct cros_ec_command *msg; + struct ec_response_get_comms_status *status; + int ret =3D 0, i; + + msg =3D kzalloc(sizeof(*msg) + sizeof(*status), GFP_KERNEL); + if (!msg) + return -ENOMEM; =20 - if (msg->result =3D=3D EC_RES_IN_PROGRESS) { - int i; - struct cros_ec_command *status_msg; - struct ec_response_get_comms_status *status; + msg->command =3D EC_CMD_GET_COMMS_STATUS; + msg->insize =3D sizeof(*status); =20 - status_msg =3D kmalloc(sizeof(*status_msg) + sizeof(*status), - GFP_KERNEL); - if (!status_msg) - return -ENOMEM; + status =3D (struct ec_response_get_comms_status *)msg->data; =20 - status_msg->version =3D 0; - status_msg->command =3D EC_CMD_GET_COMMS_STATUS; - status_msg->insize =3D sizeof(*status); - status_msg->outsize =3D 0; + /* Query the EC's status until it's no longer busy or we encounter an err= or. */ + for (i =3D 0; i < EC_COMMAND_RETRIES; ++i) { + usleep_range(10000, 11000); =20 - /* - * Query the EC's status until it's no longer busy or - * we encounter an error. - */ - for (i =3D 0; i < EC_COMMAND_RETRIES; i++) { - usleep_range(10000, 11000); - - trace_cros_ec_request_start(status_msg); - ret =3D (*xfer_fxn)(ec_dev, status_msg); - trace_cros_ec_request_done(status_msg, ret); - if (ret =3D=3D -EAGAIN) - continue; - if (ret < 0) - break; - - msg->result =3D status_msg->result; - if (status_msg->result !=3D EC_RES_SUCCESS) - break; - - status =3D (struct ec_response_get_comms_status *) - status_msg->data; - if (!(status->flags & EC_COMMS_STATUS_PROCESSING)) - break; - } + ret =3D cros_ec_xfer_command(ec_dev, msg); + if (ret =3D=3D -EAGAIN) + continue; + if (ret < 0) + break; + + *result =3D msg->result; + if (msg->result !=3D EC_RES_SUCCESS) + break; =20 - kfree(status_msg); + if (!(status->flags & EC_COMMS_STATUS_PROCESSING)) + break; } =20 + kfree(msg); + return ret; +} + +static int cros_ec_send_command(struct cros_ec_device *ec_dev, struct cros= _ec_command *msg) +{ + int ret =3D cros_ec_xfer_command(ec_dev, msg); + + if (msg->result =3D=3D EC_RES_IN_PROGRESS) + ret =3D cros_ec_wait_until_complete(ec_dev, &msg->result); + return ret; } =20 --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62BD8C433EF for ; Tue, 28 Jun 2022 02:49:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343860AbiF1Ct5 (ORCPT ); Mon, 27 Jun 2022 22:49:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343773AbiF1Ctn (ORCPT ); Mon, 27 Jun 2022 22:49:43 -0400 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4864EB99 for ; Mon, 27 Jun 2022 19:49:43 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id B62DECE1D9A for ; Tue, 28 Jun 2022 02:49:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C931FC341CE; Tue, 28 Jun 2022 02:49:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384579; bh=zGk3NdtsCMsFxVCICZyhbXYWgZgrCoRU5D4V1L9Q1rw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Sr+SxODcFiYmahDdpnMlMDN+y60Li7+aDagwpBtY1Pxcu4sjDbwUcpwkAe6LSCSE/ z39uki/0RaDplB0pI2UY7/cs98kNYxfvmLwdj+qh66CZ7vxCNqf719GbjECTmT4WsX ZuUKuiV90GFkrd9GRpwwsEXncpK2Z0700JisuVPtcs+CupoP9W9M03bL6JzSObnjWH S0ZoqCDCCXvUN4W1O6iH7RUZAsLFnKpf+8luvYXDB3Pg2ogc5tVUmK8hCXTYImkAgn blrmI9nYoHynvtlqvI5h/IG9wEX2U4ijTybiOGMWYs0sWp7OPIk9flBSGu6BAXoCNt Myxazg/uzpiOw== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 06/11] platform/chrome: cros_ec_proto: change Kunit expectation when timed out Date: Tue, 28 Jun 2022 02:49:08 +0000 Message-Id: <20220628024913.1755292-7-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" While EC_COMMS_STATUS_PROCESSING flag is still on after it tries EC_COMMAND_RETRIES times for sending EC_CMD_GET_COMMS_STATUS, cros_ec_wait_until_complete() doesn't return an error code. Change the expectation to an error code. Signed-off-by: Tzung-Bi Shih Reviewed-by: Guenter Roeck --- drivers/platform/chrome/cros_ec_proto_test.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platfor= m/chrome/cros_ec_proto_test.c index 64100fd81c6a..fbb872040711 100644 --- a/drivers/platform/chrome/cros_ec_proto_test.c +++ b/drivers/platform/chrome/cros_ec_proto_test.c @@ -1870,9 +1870,7 @@ static void cros_ec_proto_test_cmd_xfer_in_progress_r= etries_status_processing(st } =20 ret =3D cros_ec_cmd_xfer(ec_dev, &msg); - KUNIT_EXPECT_EQ(test, ret, sizeof(struct ec_response_get_comms_status)); - - KUNIT_EXPECT_EQ(test, msg.result, EC_RES_SUCCESS); + KUNIT_EXPECT_EQ(test, ret, -EAGAIN); =20 /* For EC_CMD_GET_COMMS_STATUS EC_COMMAND_RETRIES times. */ KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 51); --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68335C433EF for ; Tue, 28 Jun 2022 02:49:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343811AbiF1Ctu (ORCPT ); Mon, 27 Jun 2022 22:49:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40486 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244327AbiF1Ctm (ORCPT ); Mon, 27 Jun 2022 22:49:42 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0AB0210C2 for ; Mon, 27 Jun 2022 19:49:41 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 8E59B612C8 for ; Tue, 28 Jun 2022 02:49:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 13DB2C341CB; Tue, 28 Jun 2022 02:49:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384581; bh=nrsyhpna2MkleoX4LAm7NeEoXbnlHT1oLd8f6M7XSgw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dObOlwdWptdzyi5xajcZoXkyYtzYoz8nxt0pruw+vYhqpvTehluN3QKGPNRVNsjwx Fje/EqiO+/n/+uxQOWEutyixspWUMs/IuxrwcUW47c57FwhTdpoUvvaMxGKzbGXh9+ wrWARaQS8mHlmfzC+de8kYFKeXgy+3vACrchG2wLswxBhuAFyas/fq2jKNovqPeA06 rwJ10ApZcwBfu/nUoDmlQ9neyQFYbV1jdqZvthtYBvJWti19ZqOLi6TZByzaISRNWq R2zWUbFD8Sm3Xt6fFTVBCpip3dY7yYo3bQvu0rJChP9d1WnYYmz9xcXmxvp5iXsYpT HThv+snhCO5aA== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 07/11] platform/chrome: cros_ec_proto: return -EAGAIN when retries timed out Date: Tue, 28 Jun 2022 02:49:09 +0000 Message-Id: <20220628024913.1755292-8-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" While EC_COMMS_STATUS_PROCESSING flag is still on after it tries EC_COMMAND_RETRIES times for sending EC_CMD_GET_COMMS_STATUS, cros_ec_wait_until_complete() doesn't return an error code. Return -EAGAIN in the case instead. Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chr= ome/cros_ec_proto.c index 466ecb063bd6..49772a4c5353 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -167,6 +167,9 @@ static int cros_ec_wait_until_complete(struct cros_ec_d= evice *ec_dev, uint32_t * break; } =20 + if (i >=3D EC_COMMAND_RETRIES) + ret =3D -EAGAIN; + kfree(msg); return ret; } --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC331C433EF for ; Tue, 28 Jun 2022 02:50:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343893AbiF1Ct7 (ORCPT ); Mon, 27 Jun 2022 22:49:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40542 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343789AbiF1Ctp (ORCPT ); Mon, 27 Jun 2022 22:49:45 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0A26F29 for ; Mon, 27 Jun 2022 19:49:44 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 86D93B81BC2 for ; Tue, 28 Jun 2022 02:49:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52CD0C341CF; Tue, 28 Jun 2022 02:49:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384582; bh=MY2CsMAMjNg3ebYD8mcpnnStMEQdNHHn6XyNk73BJns=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Cyj0asfmbcWRj+P0vYwcNJAQzXxyVEwl1Fqu+MX2+CSbO56uL+eFaZ/wf/fHF5s1y AYnj+ClwJrZg21B3BGFIo7V6QVPzLuBWhYy/ATo2FehHCJE3kmP3BHFwbeDEaXV507 ytgaFg5DJewASj3L4o277RpAQ8m8UmMaqYBpf6Lf7KoHfyP037RelpfVPp6CKPuPv4 WqKYF8lzaTEpClxmNfAiDaGNwDL1yo2pVaJj1OJrjOzHDBvzqcjMsPAmbrhdua0GAn 9MYHnRr7LR03/pimbrEv/Z3UQ0nyK0KbFgRV1BOsmFE6BFcKEgWT6mOur1ABUPleIx lSRCwyO3Vz0eA== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 08/11] platform/chrome: cros_ec_proto: change Kunit expectation for EC errors Date: Tue, 28 Jun 2022 02:49:10 +0000 Message-Id: <20220628024913.1755292-9-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_wait_until_complete() checks `msg->result` for EC_CMD_GET_COMMS_STATUS. However, it doesn't return standard error codes like most of others. Change the Kunit test expectation to align them. Signed-off-by: Tzung-Bi Shih Reviewed-by: Guenter Roeck --- drivers/platform/chrome/cros_ec_proto_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platfor= m/chrome/cros_ec_proto_test.c index fbb872040711..2a6b099fbfd9 100644 --- a/drivers/platform/chrome/cros_ec_proto_test.c +++ b/drivers/platform/chrome/cros_ec_proto_test.c @@ -1927,7 +1927,7 @@ static void cros_ec_proto_test_cmd_xfer_in_progress_r= eturn_error(struct kunit *t } =20 ret =3D cros_ec_cmd_xfer(ec_dev, &msg); - KUNIT_EXPECT_EQ(test, ret, 0); + KUNIT_EXPECT_EQ(test, ret, -EOPNOTSUPP); =20 KUNIT_EXPECT_EQ(test, msg.result, EC_RES_INVALID_COMMAND); =20 --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5256C433EF for ; Tue, 28 Jun 2022 02:50:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343933AbiF1CuE (ORCPT ); Mon, 27 Jun 2022 22:50:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343791AbiF1Ctr (ORCPT ); Mon, 27 Jun 2022 22:49:47 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 04BB1DCE for ; Mon, 27 Jun 2022 19:49:46 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id B4E76B81C0E for ; Tue, 28 Jun 2022 02:49:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 90BE4C34115; Tue, 28 Jun 2022 02:49:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384583; bh=CRx51XgSdj0MtbthQC0H1WA4XmHqBiDh8m06ANT9P8M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PvUvL9Leqn1cWbcbHO3EZhyVEImtkdWx2xILnPVbJqLg58/LjDbg7JIJkJ+uT7tPP qVicWOB/Oyglsx87ewW5ZTNQuLb/zsHop17LzYJbQXTqbnObcw70qibDAo90vfJLag vdypsC90/0rIIiO06vkJ9rC6itP1yA13Qt8ICjxkrjN2A78F4IgsRe3jH2pMu98w7M CXqKAZ/tSirPhmGw3tYELEITKT04Po9SPtVTchadjCz72sK/uMA+ZOJX3fhlxaX3NT btG+v3iTMkDCUAgXvu6u6n5t5MbKcNS7gDA6miTPcHppVXqwwetCzht38MFNleFNcq 8h42T9YnYvOkA== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 09/11] platform/chrome: cros_ec_proto: return standard error codes for EC errors Date: Tue, 28 Jun 2022 02:49:11 +0000 Message-Id: <20220628024913.1755292-10-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_wait_until_complete() checks `msg->result` for EC_CMD_GET_COMMS_STATUS. However, it doesn't return standard error codes like most of others. Use cros_ec_map_error() to align them. Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chr= ome/cros_ec_proto.c index 49772a4c5353..5323edddb540 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -138,7 +138,7 @@ static int cros_ec_wait_until_complete(struct cros_ec_d= evice *ec_dev, uint32_t * { struct cros_ec_command *msg; struct ec_response_get_comms_status *status; - int ret =3D 0, i; + int ret =3D 0, i, mapped; =20 msg =3D kzalloc(sizeof(*msg) + sizeof(*status), GFP_KERNEL); if (!msg) @@ -160,8 +160,11 @@ static int cros_ec_wait_until_complete(struct cros_ec_= device *ec_dev, uint32_t * break; =20 *result =3D msg->result; - if (msg->result !=3D EC_RES_SUCCESS) + mapped =3D cros_ec_map_error(msg->result); + if (mapped) { + ret =3D mapped; break; + } =20 if (!(status->flags & EC_COMMS_STATUS_PROCESSING)) break; --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0FFDC433EF for ; Tue, 28 Jun 2022 02:50:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343928AbiF1CuK (ORCPT ); Mon, 27 Jun 2022 22:50:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40600 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343806AbiF1Ctt (ORCPT ); Mon, 27 Jun 2022 22:49:49 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6752210EF for ; Mon, 27 Jun 2022 19:49:47 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id F19FCB81BC2 for ; Tue, 28 Jun 2022 02:49:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CE526C341CB; Tue, 28 Jun 2022 02:49:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384584; bh=FGTtufHlSSn22mtv5KHuJ8CCy43ei44B5IZOaQE6nj0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hoRudwxAbT4YXEPpp4wlMC5u1bDx62NHBReqZD7kRJLlyLDzCkIHpTMDYSnkrPPU0 mYN9Lj6xMdwm5FIshXQvluB+l9rSKlcwVIEmW8zw9+WC8fQZpk2ftqRG3aLE+mcVZr YGF+XEyCwhzN4c6DPgoWDxBbJ0F2OpxBIcthWbwl/wJwOdMtWgd2m+1EBhHCp8vGZe a91W+qrxOz5Cn6nkC77jwKXQefHohOLrulW5R3iJs8J7BvrjJY2qNPWl0V1C2KSlAO ZvtnBxn74MlHUjB/KIAVoyW0W57dbxrklY+5TaPunAwp+TfTtW/AXYfKdMLaEaRCW4 gHygqWepTh6Wg== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 10/11] platform/chrome: cros_ec_proto: add Kunit test for empty payload Date: Tue, 28 Jun 2022 02:49:12 +0000 Message-Id: <20220628024913.1755292-11-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_wait_until_complete() sends EC_CMD_GET_COMMS_STATUS which expects to receive sizeof(struct ec_response_get_comms_status) from cros_ec_xfer_command(). Add Kunit test and expect to receive an error code when cros_ec_xfer_command() returns 0. Signed-off-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_proto_test.c | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platfor= m/chrome/cros_ec_proto_test.c index 2a6b099fbfd9..7d45e5022221 100644 --- a/drivers/platform/chrome/cros_ec_proto_test.c +++ b/drivers/platform/chrome/cros_ec_proto_test.c @@ -1934,6 +1934,36 @@ static void cros_ec_proto_test_cmd_xfer_in_progress_= return_error(struct kunit *t KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 2); } =20 +static void cros_ec_proto_test_cmd_xfer_in_progress_return0(struct kunit *= test) +{ + struct cros_ec_proto_test_priv *priv =3D test->priv; + struct cros_ec_device *ec_dev =3D &priv->ec_dev; + struct ec_xfer_mock *mock; + int ret; + struct cros_ec_command msg; + + memset(&msg, 0, sizeof(msg)); + + ec_dev->pkt_xfer =3D cros_kunit_ec_pkt_xfer_mock; + + /* For the first host command to return EC_RES_IN_PROGRESS. */ + { + mock =3D cros_kunit_ec_xfer_mock_addx(test, 0, EC_RES_IN_PROGRESS, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + /* For EC_CMD_GET_COMMS_STATUS. */ + { + mock =3D cros_kunit_ec_xfer_mock_add(test, 0); + KUNIT_ASSERT_PTR_NE(test, mock, NULL); + } + + ret =3D cros_ec_cmd_xfer(ec_dev, &msg); + KUNIT_EXPECT_EQ(test, ret, -EPROTO); + + KUNIT_EXPECT_EQ(test, cros_kunit_ec_pkt_xfer_mock_called, 2); +} + static void cros_ec_proto_test_release(struct device *dev) { } @@ -2013,6 +2043,7 @@ static struct kunit_case cros_ec_proto_test_cases[] = =3D { KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_retries_status_process= ing), KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_xfer_error), KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_return_error), + KUNIT_CASE(cros_ec_proto_test_cmd_xfer_in_progress_return0), {} }; =20 --=20 2.37.0.rc0.161.g10f37bed90-goog From nobody Sun Apr 19 20:32:05 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 15B8CC43334 for ; Tue, 28 Jun 2022 02:50:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343876AbiF1CuH (ORCPT ); Mon, 27 Jun 2022 22:50:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244548AbiF1Ctt (ORCPT ); Mon, 27 Jun 2022 22:49:49 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 671A710E7 for ; Mon, 27 Jun 2022 19:49:47 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 93DE561486 for ; Tue, 28 Jun 2022 02:49:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 19158C34115; Tue, 28 Jun 2022 02:49:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1656384586; bh=RCdzDyyspYZBbTy21S73pVMkpsXGg+X2fE0S4NTTvrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kEkHb4EOokE+b0s6/tFxK/7Dy/zJ2l5+Y2TaH19ERYx3aocGIFDuMWGQhRX6QF43Q xo1WLZ6dytalM553zy0QzILZK2FTiWNG23Lp4/ozz3yh/tmL8IA+9gxiw5iKNltwwl FmlQXR02CE8tFJts0zr2k4W9ZgZ8Rln0Laz0+GsestXhNvWjES7HHtCBQNlQxB/S4C uZCJTcRBNfK92pCzOXrFeryDfh2a6O8WmbIQND+aNdnIWvmWpRJT16B5hNXlf8cX4w l72m2X836aQh9pFgAt3SMeJAhpIwxk51sTyxVa+t3eib1y8+/N3zJ4Gom+M01mWojg wr8uXUYj/hw3g== From: Tzung-Bi Shih To: bleung@chromium.org, groeck@chromium.org Cc: chrome-platform@lists.linux.dev, tzungbi@kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH 11/11] platform/chrome: cros_ec_proto: return -EPROTO if empty payload Date: Tue, 28 Jun 2022 02:49:13 +0000 Message-Id: <20220628024913.1755292-12-tzungbi@kernel.org> X-Mailer: git-send-email 2.37.0.rc0.161.g10f37bed90-goog In-Reply-To: <20220628024913.1755292-1-tzungbi@kernel.org> References: <20220628024913.1755292-1-tzungbi@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" cros_ec_wait_until_complete() sends EC_CMD_GET_COMMS_STATUS which expects to receive sizeof(struct ec_response_get_comms_status) from cros_ec_xfer_command(). Return -EPROTO if cros_ec_xfer_command() returns 0. Signed-off-by: Tzung-Bi Shih Reviewed-by: Guenter Roeck --- drivers/platform/chrome/cros_ec_proto.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chr= ome/cros_ec_proto.c index 5323edddb540..0c7042aa2640 100644 --- a/drivers/platform/chrome/cros_ec_proto.c +++ b/drivers/platform/chrome/cros_ec_proto.c @@ -166,6 +166,11 @@ static int cros_ec_wait_until_complete(struct cros_ec_= device *ec_dev, uint32_t * break; } =20 + if (ret =3D=3D 0) { + ret =3D -EPROTO; + break; + } + if (!(status->flags & EC_COMMS_STATUS_PROCESSING)) break; } --=20 2.37.0.rc0.161.g10f37bed90-goog