From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Cc: linux-usb@vger.kernel.org, pmalani@chromium.org,
jthies@google.com, Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Fabrice Gasnier <fabrice.gasnier@foss.st.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hans de Goede <hdegoede@redhat.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Prashanth K <quic_prashk@quicinc.com>,
Rajaram Regupathy <rajaram.regupathy@intel.com>,
Saranya Gopal <saranya.gopal@intel.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/3] usb: typec: ucsi: Limit read size on v1.2
Date: Tue, 30 Jan 2024 15:47:57 +0200 [thread overview]
Message-ID: <Zbj+DWzfMURLKnLn@kuha.fi.intel.com> (raw)
In-Reply-To: <20240126103859.v3.1.Iacf5570a66b82b73ef03daa6557e2fc0db10266a@changeid>
On Fri, Jan 26, 2024 at 10:39:07AM -0800, Abhishek Pandit-Subedi wrote:
> Between UCSI 1.2 and UCSI 2.0, the size of the MESSAGE_IN region was
> increased from 16 to 256. In order to avoid overflowing reads for older
> systems, add a mechanism to use the read UCSI version to truncate read
> sizes on UCSI v1.2.
>
> Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
> Tested on 6.6 kernel. Dmesg output from this change:
> [ 105.058162] ucsi_um_test ucsi_um_test_device.0: Registered UCSI
> interface with version 3.0.0
>
>
> (no changes since v2)
>
> Changes in v2:
> - Changed log message to DEBUG
>
> drivers/usb/typec/ucsi/ucsi.c | 26 ++++++++++++++++++++++++--
> drivers/usb/typec/ucsi/ucsi.h | 11 +++++++++++
> 2 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index 5392ec698959..a35056ee3e96 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -36,6 +36,19 @@
> */
> #define UCSI_SWAP_TIMEOUT_MS 5000
>
> +static int ucsi_read_message_in(struct ucsi *ucsi, void *buf,
> + size_t buf_size)
> +{
> + /*
> + * Below UCSI 2.0, MESSAGE_IN was limited to 16 bytes. Truncate the
> + * reads here.
> + */
> + if (ucsi->version <= UCSI_VERSION_1_2)
> + buf_size = min_t(size_t, 16, buf_size);
> +
> + return ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, buf, buf_size);
> +}
> +
> static int ucsi_acknowledge_command(struct ucsi *ucsi)
> {
> u64 ctrl;
> @@ -72,7 +85,7 @@ static int ucsi_read_error(struct ucsi *ucsi)
> if (ret < 0)
> return ret;
>
> - ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, &error, sizeof(error));
> + ret = ucsi_read_message_in(ucsi, &error, sizeof(error));
> if (ret)
> return ret;
>
> @@ -170,7 +183,7 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
> length = ret;
>
> if (data) {
> - ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, data, size);
> + ret = ucsi_read_message_in(ucsi, data, size);
> if (ret)
> goto out;
> }
> @@ -1556,6 +1569,15 @@ int ucsi_register(struct ucsi *ucsi)
> if (!ucsi->version)
> return -ENODEV;
>
> + /*
> + * Version format is JJ.M.N (JJ = Major version, M = Minor version,
> + * N = sub-minor version).
> + */
> + dev_dbg(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
> + UCSI_BCD_GET_MAJOR(ucsi->version),
> + UCSI_BCD_GET_MINOR(ucsi->version),
> + UCSI_BCD_GET_SUBMINOR(ucsi->version));
> +
> queue_delayed_work(system_long_wq, &ucsi->work, 0);
>
> ucsi_debugfs_register(ucsi);
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index 6478016d5cb8..bec920fa6b8a 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -23,6 +23,17 @@ struct dentry;
> #define UCSI_CONTROL 8
> #define UCSI_MESSAGE_IN 16
> #define UCSI_MESSAGE_OUT 32
> +#define UCSIv2_MESSAGE_OUT 272
> +
> +/* UCSI versions */
> +#define UCSI_VERSION_1_2 0x0120
> +#define UCSI_VERSION_2_0 0x0200
> +#define UCSI_VERSION_2_1 0x0210
> +#define UCSI_VERSION_3_0 0x0300
> +
> +#define UCSI_BCD_GET_MAJOR(_v_) (((_v_) >> 8) & 0xFF)
> +#define UCSI_BCD_GET_MINOR(_v_) (((_v_) >> 4) & 0x0F)
> +#define UCSI_BCD_GET_SUBMINOR(_v_) ((_v_) & 0x0F)
>
> /* Command Status and Connector Change Indication (CCI) bits */
> #define UCSI_CCI_CONNECTOR(_c_) (((_c_) & GENMASK(7, 1)) >> 1)
> --
> 2.43.0.429.g432eaa2c6b-goog
--
heikki
next prev parent reply other threads:[~2024-01-30 13:48 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-26 18:39 [PATCH v3 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Abhishek Pandit-Subedi
2024-01-26 18:39 ` [PATCH v3 1/3] usb: typec: ucsi: Limit read size on v1.2 Abhishek Pandit-Subedi
2024-01-26 20:17 ` Prashant Malani
2024-01-30 13:47 ` Heikki Krogerus [this message]
2024-01-26 18:39 ` [PATCH v3 2/3] usb: typec: ucsi: Update connector cap and status Abhishek Pandit-Subedi
2024-01-26 20:19 ` Prashant Malani
2024-01-30 14:17 ` Heikki Krogerus
2024-01-26 18:39 ` [PATCH v3 3/3] usb: typec: ucsi: Get PD revision for partner Abhishek Pandit-Subedi
2024-01-26 20:25 ` Prashant Malani
2024-02-05 22:05 ` Abhishek Pandit-Subedi
2024-02-06 10:18 ` Heikki Krogerus
2024-02-06 18:04 ` Prashant Malani
2024-01-28 16:06 ` [PATCH v3 0/3] usb: typec: ucsi: Adding support for UCSI 3.0 Mario Limonciello
2024-01-30 22:30 ` Abhishek Pandit-Subedi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zbj+DWzfMURLKnLn@kuha.fi.intel.com \
--to=heikki.krogerus@linux.intel.com \
--cc=abhishekpandit@chromium.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=fabrice.gasnier@foss.st.com \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=jthies@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=pmalani@chromium.org \
--cc=quic_prashk@quicinc.com \
--cc=rajaram.regupathy@intel.com \
--cc=saranya.gopal@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.