From: Benson Leung <bleung@google.com>
To: Jameson Thies <jthies@google.com>
Cc: heikki.krogerus@linux.intel.com, linux-usb@vger.kernel.org,
pmalani@chromium.org, abhishekpandit@chromium.org,
andersson@kernel.org, dmitry.baryshkov@linaro.org,
fabrice.gasnier@foss.st.com, gregkh@linuxfoundation.org,
hdegoede@redhat.com, neil.armstrong@linaro.org,
rajaram.regupathy@intel.com, saranya.gopal@intel.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/1] usb: typec: ucsi: Check capabilities before cable and identity discovery
Date: Fri, 15 Mar 2024 18:43:18 +0000 [thread overview]
Message-ID: <ZfSWxu2bXwitinrI@google.com> (raw)
In-Reply-To: <20240315171836.343830-2-jthies@google.com>
[-- Attachment #1: Type: text/plain, Size: 4496 bytes --]
Hi Jameson,
On Fri, Mar 15, 2024 at 05:18:35PM +0000, Jameson Thies wrote:
> Check the UCSI_CAP_GET_PD_MESSAGE bit before sending GET_PD_MESSAGE to
> discover partner and cable identity, check UCSI_CAP_CABLE_DETAILS before
> sending GET_CABLE_PROPERTY to discover the cable and check
> UCSI_CAP_ALT_MODE_DETAILS before registering the a cable plug. Additionally,
> move 8 bits from reserved_1 to features in the ucsi_capability struct. This
> makes the field 16 bits, still 8 short of the 24 bits allocated for it in
> UCSI v3.0, but it will not overflow because UCSI only defines 14 bits in
> bmOptionalFeatures.
>
> Fixes: 38ca416597b0 ("usb: typec: ucsi: Register cables based on GET_CABLE_PROPERTY")
> Link: https://lore.kernel.org/linux-usb/44e8142f-d9b3-487b-83fe-39deadddb492@linaro.org
> Suggested-by: Neil Armstrong <neil.armstrong@linaro.org>
> Signed-off-by: Jameson Thies <jthies@google.com>
Reviewed-by: Benson Leung <bleung@chromium.org>
Thanks!
> ---
> Confirmed a device which supports GET_PD_MESSAGE, GET_CABLE_PROPERTY and
> GET_ALTERNATE_MODES still requested identity and cable information.
>
> drivers/usb/typec/ucsi/ucsi.c | 34 +++++++++++++++++++++-------------
> drivers/usb/typec/ucsi/ucsi.h | 5 +++--
> 2 files changed, 24 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index cf52cb34d2859..958dc82989b60 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -1133,17 +1133,21 @@ static int ucsi_check_cable(struct ucsi_connector *con)
> if (ret < 0)
> return ret;
>
> - ret = ucsi_get_cable_identity(con);
> - if (ret < 0)
> - return ret;
> + if (con->ucsi->cap.features & UCSI_CAP_GET_PD_MESSAGE) {
> + ret = ucsi_get_cable_identity(con);
> + if (ret < 0)
> + return ret;
> + }
>
> - ret = ucsi_register_plug(con);
> - if (ret < 0)
> - return ret;
> + if (con->ucsi->cap.features & UCSI_CAP_ALT_MODE_DETAILS) {
> + ret = ucsi_register_plug(con);
> + if (ret < 0)
> + return ret;
>
> - ret = ucsi_register_altmodes(con, UCSI_RECIPIENT_SOP_P);
> - if (ret < 0)
> - return ret;
> + ret = ucsi_register_altmodes(con, UCSI_RECIPIENT_SOP_P);
> + if (ret < 0)
> + return ret;
> + }
>
> return 0;
> }
> @@ -1189,8 +1193,10 @@ static void ucsi_handle_connector_change(struct work_struct *work)
> ucsi_register_partner(con);
> ucsi_partner_task(con, ucsi_check_connection, 1, HZ);
> ucsi_partner_task(con, ucsi_check_connector_capability, 1, HZ);
> - ucsi_partner_task(con, ucsi_get_partner_identity, 1, HZ);
> - ucsi_partner_task(con, ucsi_check_cable, 1, HZ);
> + if (con->ucsi->cap.features & UCSI_CAP_GET_PD_MESSAGE)
> + ucsi_partner_task(con, ucsi_get_partner_identity, 1, HZ);
> + if (con->ucsi->cap.features & UCSI_CAP_CABLE_DETAILS)
> + ucsi_partner_task(con, ucsi_check_cable, 1, HZ);
>
> if (UCSI_CONSTAT_PWR_OPMODE(con->status.flags) ==
> UCSI_CONSTAT_PWR_OPMODE_PD)
> @@ -1589,8 +1595,10 @@ static int ucsi_register_port(struct ucsi *ucsi, struct ucsi_connector *con)
> ucsi_register_partner(con);
> ucsi_pwr_opmode_change(con);
> ucsi_port_psy_changed(con);
> - ucsi_get_partner_identity(con);
> - ucsi_check_cable(con);
> + if (con->ucsi->cap.features & UCSI_CAP_GET_PD_MESSAGE)
> + ucsi_get_partner_identity(con);
> + if (con->ucsi->cap.features & UCSI_CAP_CABLE_DETAILS)
> + ucsi_check_cable(con);
> }
>
> /* Only notify USB controller if partner supports USB data */
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index 32daf5f586505..0e7c92eb1b227 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -206,7 +206,7 @@ struct ucsi_capability {
> #define UCSI_CAP_ATTR_POWER_OTHER BIT(10)
> #define UCSI_CAP_ATTR_POWER_VBUS BIT(14)
> u8 num_connectors;
> - u8 features;
> + u16 features;
> #define UCSI_CAP_SET_UOM BIT(0)
> #define UCSI_CAP_SET_PDM BIT(1)
> #define UCSI_CAP_ALT_MODE_DETAILS BIT(2)
> @@ -215,7 +215,8 @@ struct ucsi_capability {
> #define UCSI_CAP_CABLE_DETAILS BIT(5)
> #define UCSI_CAP_EXT_SUPPLY_NOTIFICATIONS BIT(6)
> #define UCSI_CAP_PD_RESET BIT(7)
> - u16 reserved_1;
> +#define UCSI_CAP_GET_PD_MESSAGE BIT(8)
> + u8 reserved_1;
> u8 num_alt_modes;
> u8 reserved_2;
> u16 bc_version;
> --
> 2.44.0.291.gc1ea87d7ee-goog
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2024-03-15 18:43 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-15 17:18 [PATCH v2 0/1] usb: typec: ucsi: Check capabilities before discovery Jameson Thies
2024-03-15 17:18 ` [PATCH v2 1/1] usb: typec: ucsi: Check capabilities before cable and identity discovery Jameson Thies
2024-03-15 17:22 ` neil.armstrong
2024-03-15 18:43 ` Benson Leung [this message]
2024-03-18 9:13 ` neil.armstrong
2024-03-18 11:11 ` Heikki Krogerus
2024-03-25 14:14 ` neil.armstrong
2024-03-27 1:46 ` Bjorn Andersson
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=ZfSWxu2bXwitinrI@google.com \
--to=bleung@google.com \
--cc=abhishekpandit@chromium.org \
--cc=andersson@kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=fabrice.gasnier@foss.st.com \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=heikki.krogerus@linux.intel.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=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.