From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Krishna Kurapati <krishna.kurapati@oss.qualcomm.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Andrei Kuchynski <akuchynski@chromium.org>,
Abel Vesa <abelvesa@kernel.org>,
Pooja Katiyar <pooja.katiyar@intel.com>,
Johan Hovold <johan@kernel.org>,
Venkat Jayaraman <venkat.jayaraman@intel.com>,
Jameson Thies <jthies@google.com>,
Hsin-Te Yuan <yuanhsinte@chromium.org>,
Benson Leung <bleung@chromium.org>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Anjelique Melendez <anjelique.melendez@oss.qualcomm.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] usb: typec: ucsi: Add UCSI_USB4_IMPLIES_USB quirk for X1E80100
Date: Fri, 13 Mar 2026 10:53:53 +0200 [thread overview]
Message-ID: <abPQodYcXFT2qxlq@kuha> (raw)
In-Reply-To: <20260312101431.2375709-1-krishna.kurapati@oss.qualcomm.com>
Thu, Mar 12, 2026 at 03:44:31PM +0530, Krishna Kurapati kirjoitti:
> On X1E80100, when we connect a USB4 capable dock, the PARTNER_FLAGS
> indicate USB4_GEN3 being set whilst keeping the PARTNER_FLAGS_USB
> cleared. Due to this, during ucsi_partner_change call, the usb role
> is marked as ROLE_NONE and passed to DWC3 controller the same way.
>
> Fix this by adding UCSI_USB4_IMPLIES_USB quirk and check for it to
> decide and pass on proper ROLE information to DWC3 layer.
Do we need a quirk for this - can't we just always check the
USB4_GET<X>? With USB4, don't we always support USB2?
thanks,
> Signed-off-by: Krishna Kurapati <krishna.kurapati@oss.qualcomm.com>
> ---
> drivers/usb/typec/ucsi/ucsi.c | 6 ++++--
> drivers/usb/typec/ucsi/ucsi.h | 3 +++
> drivers/usb/typec/ucsi/ucsi_glink.c | 2 ++
> 3 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
> index f38a4d7ebc42..e042499613c9 100644
> --- a/drivers/usb/typec/ucsi/ucsi.c
> +++ b/drivers/usb/typec/ucsi/ucsi.c
> @@ -1182,8 +1182,10 @@ static void ucsi_partner_change(struct ucsi_connector *con)
> }
> }
>
> - /* Only notify USB controller if partner supports USB data */
> - if (!(UCSI_CONSTAT(con, PARTNER_FLAG_USB)))
> + if ((!UCSI_CONSTAT(con, PARTNER_FLAG_USB)) &&
> + ((con->ucsi->quirks & UCSI_USB4_IMPLIES_USB) &&
> + (!(UCSI_CONSTAT(con, PARTNER_FLAG_USB4_GEN3) ||
> + UCSI_CONSTAT(con, PARTNER_FLAG_USB4_GEN4)))))
> u_role = USB_ROLE_NONE;
>
> ret = usb_role_switch_set_role(con->usb_role_sw, u_role);
> diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> index 43a0d01ade8f..cff9ddc2ae21 100644
> --- a/drivers/usb/typec/ucsi/ucsi.h
> +++ b/drivers/usb/typec/ucsi/ucsi.h
> @@ -497,6 +497,9 @@ struct ucsi {
> unsigned long quirks;
> #define UCSI_NO_PARTNER_PDOS BIT(0) /* Don't read partner's PDOs */
> #define UCSI_DELAY_DEVICE_PDOS BIT(1) /* Reading PDOs fails until the parter is in PD mode */
> +
> +/* USB4 connection can imply that USB communcation is supported */
> +#define UCSI_USB4_IMPLIES_USB BIT(2)
> };
>
> #define UCSI_MAX_DATA_LENGTH(u) (((u)->version < UCSI_VERSION_2_0) ? 0x10 : 0xff)
> diff --git a/drivers/usb/typec/ucsi/ucsi_glink.c b/drivers/usb/typec/ucsi/ucsi_glink.c
> index 11b3e24e34e2..1cb519cc0532 100644
> --- a/drivers/usb/typec/ucsi/ucsi_glink.c
> +++ b/drivers/usb/typec/ucsi/ucsi_glink.c
> @@ -371,6 +371,7 @@ static void pmic_glink_ucsi_destroy(void *data)
> static unsigned long quirk_sc8180x = UCSI_NO_PARTNER_PDOS;
> static unsigned long quirk_sc8280xp = UCSI_NO_PARTNER_PDOS | UCSI_DELAY_DEVICE_PDOS;
> static unsigned long quirk_sm8450 = UCSI_DELAY_DEVICE_PDOS;
> +static unsigned long quirk_x1e80100 = UCSI_DELAY_DEVICE_PDOS | UCSI_USB4_IMPLIES_USB;
>
> static const struct of_device_id pmic_glink_ucsi_of_quirks[] = {
> { .compatible = "qcom,qcm6490-pmic-glink", .data = &quirk_sc8280xp, },
> @@ -379,6 +380,7 @@ static const struct of_device_id pmic_glink_ucsi_of_quirks[] = {
> { .compatible = "qcom,sm8350-pmic-glink", .data = &quirk_sc8180x, },
> { .compatible = "qcom,sm8450-pmic-glink", .data = &quirk_sm8450, },
> { .compatible = "qcom,sm8550-pmic-glink", .data = &quirk_sm8450, },
> + { .compatible = "qcom,x1e80100-pmic-glink", .data = &quirk_x1e80100, },
> {}
> };
>
> --
> 2.34.1
--
heikki
next prev parent reply other threads:[~2026-03-13 8:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-12 10:14 [PATCH] usb: typec: ucsi: Add UCSI_USB4_IMPLIES_USB quirk for X1E80100 Krishna Kurapati
2026-03-13 8:53 ` Heikki Krogerus [this message]
2026-03-13 9:14 ` Krishna Kurapati PSSNV
2026-03-13 11:38 ` Heikki Krogerus
2026-03-13 11:38 ` Heikki Krogerus
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=abPQodYcXFT2qxlq@kuha \
--to=heikki.krogerus@linux.intel.com \
--cc=abelvesa@kernel.org \
--cc=akuchynski@chromium.org \
--cc=anjelique.melendez@oss.qualcomm.com \
--cc=bleung@chromium.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=gregkh@linuxfoundation.org \
--cc=johan@kernel.org \
--cc=jthies@google.com \
--cc=krishna.kurapati@oss.qualcomm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=pooja.katiyar@intel.com \
--cc=venkat.jayaraman@intel.com \
--cc=yuanhsinte@chromium.org \
/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.