-usb-typec-ucsi-limit-read-size-on-v1.2.patch
usb-typec-ucsi-never-send-a-lone-connector-change-ac.patch
usb-typec-ucsi-ack-also-failed-get-error-commands.patch
x86-mm-numa-use-numa_no_node-when-calling-memblock_s.patch
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/usb/typec/ucsi/ucsi.c | 7 ++++++-
+ drivers/usb/typec/ucsi/ucsi.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
-diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
-index 778b76bbf80d7..e6d90cc5f877b 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
-@@ -153,8 +153,13 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
+@@ -140,8 +140,13 @@ static int ucsi_exec_command(struct ucsi
}
if (cci & UCSI_CCI_ERROR) {
return ucsi_read_error(ucsi);
}
---
-2.43.0
-
+++ /dev/null
-From f5d8647dba9c4e7a9936fb1d475733a0d10a11f4 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 9 Feb 2024 14:37:30 -0800
-Subject: usb: typec: ucsi: Limit read size on v1.2
-
-From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
-
-[ Upstream commit b3db266fb031fba88c423d4bb8983a73a3db6527 ]
-
-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.
-
-Tested-by: Neil Armstrong <neil.armstrong@linaro.org>
-Reviewed-by: Prashant Malani <pmalani@chromium.org>
-Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
-Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
-Link: https://lore.kernel.org/r/20240209143723.v5.1.Iacf5570a66b82b73ef03daa6557e2fc0db10266a@changeid
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Stable-dep-of: 8bdf8a42bca4 ("usb: typec: ucsi: Ack also failed Get Error commands")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- 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 a163218fdc749..2b541f7ca5ab4 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 = clamp(buf_size, 0, 16);
-+
-+ 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;
-
-@@ -174,7 +187,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;
- }
-@@ -1451,6 +1464,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);
-
- return 0;
-diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
-index dbb10cb310d4c..304939a712bf8 100644
---- a/drivers/usb/typec/ucsi/ucsi.h
-+++ b/drivers/usb/typec/ucsi/ucsi.h
-@@ -22,6 +22,17 @@ struct ucsi_altmode;
- #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
-
Stable-dep-of: 8bdf8a42bca4 ("usb: typec: ucsi: Ack also failed Get Error commands")
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/usb/typec/ucsi/ucsi.c | 48 +++++++++++++++--------------------
+ drivers/usb/typec/ucsi/ucsi.c | 48 ++++++++++++++++++------------------------
1 file changed, 21 insertions(+), 27 deletions(-)
-diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
-index 2b541f7ca5ab4..778b76bbf80d7 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
-@@ -49,22 +49,16 @@ static int ucsi_read_message_in(struct ucsi *ucsi, void *buf,
- return ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, buf, buf_size);
- }
+@@ -36,22 +36,16 @@
+ */
+ #define UCSI_SWAP_TIMEOUT_MS 5000
-static int ucsi_acknowledge_command(struct ucsi *ucsi)
+static int ucsi_acknowledge(struct ucsi *ucsi, bool conn_ack)
return ucsi->ops->sync_write(ucsi, UCSI_CONTROL, &ctrl, sizeof(ctrl));
}
-@@ -77,7 +71,7 @@ static int ucsi_read_error(struct ucsi *ucsi)
+@@ -64,7 +58,7 @@ static int ucsi_read_error(struct ucsi *
int ret;
/* Acknowledge the command that failed */
if (ret)
return ret;
-@@ -89,7 +83,7 @@ static int ucsi_read_error(struct ucsi *ucsi)
+@@ -76,7 +70,7 @@ static int ucsi_read_error(struct ucsi *
if (ret)
return ret;
if (ret)
return ret;
-@@ -152,7 +146,7 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
+@@ -139,7 +133,7 @@ static int ucsi_exec_command(struct ucsi
return -EIO;
if (cci & UCSI_CCI_NOT_SUPPORTED) {
dev_err(ucsi->dev,
"ACK of unsupported command failed\n");
return -EOPNOTSUPP;
-@@ -165,15 +159,15 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd)
+@@ -152,15 +146,15 @@ static int ucsi_exec_command(struct ucsi
}
if (cmd == UCSI_CANCEL && cci & UCSI_CCI_CANCEL_COMPLETE) {
{
u8 length;
int ret;
-@@ -192,7 +186,7 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
+@@ -179,7 +173,7 @@ int ucsi_send_command(struct ucsi *ucsi,
goto out;
}
if (ret)
goto out;
-@@ -201,6 +195,12 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
+@@ -188,6 +182,12 @@ out:
mutex_unlock(&ucsi->ppm_lock);
return ret;
}
EXPORT_SYMBOL_GPL(ucsi_send_command);
/* -------------------------------------------------------------------------- */
-@@ -798,7 +798,9 @@ static void ucsi_handle_connector_change(struct work_struct *work)
+@@ -785,7 +785,9 @@ static void ucsi_handle_connector_change
mutex_lock(&con->lock);
command = UCSI_GET_CONNECTOR_STATUS | UCSI_CONNECTOR_NUMBER(con->num);
if (ret < 0) {
dev_err(ucsi->dev, "%s: GET_CONNECTOR_STATUS failed (%d)\n",
__func__, ret);
-@@ -846,14 +848,6 @@ static void ucsi_handle_connector_change(struct work_struct *work)
+@@ -833,14 +835,6 @@ static void ucsi_handle_connector_change
if (con->status.change & UCSI_CONSTAT_CAM_CHANGE)
ucsi_partner_task(con, ucsi_check_altmodes, 1, 0);
out_unlock:
mutex_unlock(&con->lock);
}
---
-2.43.0
-