https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e9b8ffafd20ad21357a789cc58ffaa162b3ad074
776 lines
31 KiB
Diff
776 lines
31 KiB
Diff
From 8644b48714dca8bf2f42a4ff8311de8efc9bd8c3 Mon Sep 17 00:00:00 2001
|
|
From: Mika Westerberg <mika.westerberg@linux.intel.com>
|
|
Date: Tue, 14 May 2024 10:15:14 +0300
|
|
Subject: thunderbolt: Add support for Intel Panther Lake-M/P
|
|
|
|
Intel Panther Lake-M/P has the same integrated Thunderbolt/USB4
|
|
controller as Lunar Lake. Add these PCI IDs to the driver list of
|
|
supported devices.
|
|
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
|
|
---
|
|
drivers/thunderbolt/nhi.c | 8 ++++++++
|
|
drivers/thunderbolt/nhi.h | 4 ++++
|
|
2 files changed, 12 insertions(+)
|
|
|
|
diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c
|
|
index 1257dd3ce7e6a3..f3a2264e012bcd 100644
|
|
--- a/drivers/thunderbolt/nhi.c
|
|
+++ b/drivers/thunderbolt/nhi.c
|
|
@@ -1520,6 +1520,14 @@ static struct pci_device_id nhi_ids[] = {
|
|
.driver_data = (kernel_ulong_t)&icl_nhi_ops },
|
|
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_LNL_NHI1),
|
|
.driver_data = (kernel_ulong_t)&icl_nhi_ops },
|
|
+ { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_PTL_M_NHI0),
|
|
+ .driver_data = (kernel_ulong_t)&icl_nhi_ops },
|
|
+ { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_PTL_M_NHI1),
|
|
+ .driver_data = (kernel_ulong_t)&icl_nhi_ops },
|
|
+ { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_PTL_P_NHI0),
|
|
+ .driver_data = (kernel_ulong_t)&icl_nhi_ops },
|
|
+ { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_PTL_P_NHI1),
|
|
+ .driver_data = (kernel_ulong_t)&icl_nhi_ops },
|
|
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HOST_80G_NHI) },
|
|
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HOST_40G_NHI) },
|
|
|
|
diff --git a/drivers/thunderbolt/nhi.h b/drivers/thunderbolt/nhi.h
|
|
index 7a07c7c1a9c2c6..16744f25a9a069 100644
|
|
--- a/drivers/thunderbolt/nhi.h
|
|
+++ b/drivers/thunderbolt/nhi.h
|
|
@@ -92,6 +92,10 @@ extern const struct tb_nhi_ops icl_nhi_ops;
|
|
#define PCI_DEVICE_ID_INTEL_RPL_NHI1 0xa76d
|
|
#define PCI_DEVICE_ID_INTEL_LNL_NHI0 0xa833
|
|
#define PCI_DEVICE_ID_INTEL_LNL_NHI1 0xa834
|
|
+#define PCI_DEVICE_ID_INTEL_PTL_M_NHI0 0xe333
|
|
+#define PCI_DEVICE_ID_INTEL_PTL_M_NHI1 0xe334
|
|
+#define PCI_DEVICE_ID_INTEL_PTL_P_NHI0 0xe433
|
|
+#define PCI_DEVICE_ID_INTEL_PTL_P_NHI1 0xe434
|
|
|
|
#define PCI_CLASS_SERIAL_USB_USB4 0x0c0340
|
|
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From e34f1717ef0632fcec5cb827e5e0e9f223d70c9b Mon Sep 17 00:00:00 2001
|
|
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
Date: Mon, 9 Dec 2024 10:25:51 -0600
|
|
Subject: thunderbolt: Don't display nvm_version unless upgrade supported
|
|
|
|
The read will never succeed if NVM wasn't initialized due to an unknown
|
|
format.
|
|
|
|
Add a new callback for visibility to only show when supported.
|
|
|
|
Cc: stable@vger.kernel.org
|
|
Fixes: aef9c693e7e5 ("thunderbolt: Move vendor specific NVM handling into nvm.c")
|
|
Reported-by: Richard Hughes <hughsient@gmail.com>
|
|
Closes: https://github.com/fwupd/fwupd/issues/8200
|
|
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
|
|
---
|
|
drivers/thunderbolt/retimer.c | 19 +++++++++++++++----
|
|
1 file changed, 15 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/drivers/thunderbolt/retimer.c b/drivers/thunderbolt/retimer.c
|
|
index 89d2919d0193e8..eeb64433ebbca0 100644
|
|
--- a/drivers/thunderbolt/retimer.c
|
|
+++ b/drivers/thunderbolt/retimer.c
|
|
@@ -103,6 +103,7 @@ static int tb_retimer_nvm_add(struct tb_retimer *rt)
|
|
|
|
err_nvm:
|
|
dev_dbg(&rt->dev, "NVM upgrade disabled\n");
|
|
+ rt->no_nvm_upgrade = true;
|
|
if (!IS_ERR(nvm))
|
|
tb_nvm_free(nvm);
|
|
|
|
@@ -182,8 +183,6 @@ static ssize_t nvm_authenticate_show(struct device *dev,
|
|
|
|
if (!rt->nvm)
|
|
ret = -EAGAIN;
|
|
- else if (rt->no_nvm_upgrade)
|
|
- ret = -EOPNOTSUPP;
|
|
else
|
|
ret = sysfs_emit(buf, "%#x\n", rt->auth_status);
|
|
|
|
@@ -323,8 +322,6 @@ static ssize_t nvm_version_show(struct device *dev,
|
|
|
|
if (!rt->nvm)
|
|
ret = -EAGAIN;
|
|
- else if (rt->no_nvm_upgrade)
|
|
- ret = -EOPNOTSUPP;
|
|
else
|
|
ret = sysfs_emit(buf, "%x.%x\n", rt->nvm->major, rt->nvm->minor);
|
|
|
|
@@ -342,6 +339,19 @@ static ssize_t vendor_show(struct device *dev, struct device_attribute *attr,
|
|
}
|
|
static DEVICE_ATTR_RO(vendor);
|
|
|
|
+static umode_t retimer_is_visible(struct kobject *kobj, struct attribute *attr,
|
|
+ int n)
|
|
+{
|
|
+ struct device *dev = kobj_to_dev(kobj);
|
|
+ struct tb_retimer *rt = tb_to_retimer(dev);
|
|
+
|
|
+ if (attr == &dev_attr_nvm_authenticate.attr ||
|
|
+ attr == &dev_attr_nvm_version.attr)
|
|
+ return rt->no_nvm_upgrade ? 0 : attr->mode;
|
|
+
|
|
+ return attr->mode;
|
|
+}
|
|
+
|
|
static struct attribute *retimer_attrs[] = {
|
|
&dev_attr_device.attr,
|
|
&dev_attr_nvm_authenticate.attr,
|
|
@@ -351,6 +361,7 @@ static struct attribute *retimer_attrs[] = {
|
|
};
|
|
|
|
static const struct attribute_group retimer_group = {
|
|
+ .is_visible = retimer_is_visible,
|
|
.attrs = retimer_attrs,
|
|
};
|
|
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From fdad4fb7c506bea8b419f70ff2163d99962e8ede Mon Sep 17 00:00:00 2001
|
|
From: Daniel Swanemar <d.swanemar@gmail.com>
|
|
Date: Mon, 4 Nov 2024 14:42:17 +0100
|
|
Subject: USB: serial: option: add TCL IK512 MBIM & ECM
|
|
|
|
Add the following TCL IK512 compositions:
|
|
|
|
0x0530: Modem + Diag + AT + MBIM
|
|
T: Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=10000 MxCh= 0
|
|
D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1
|
|
P: Vendor=1bbb ProdID=0530 Rev=05.04
|
|
S: Manufacturer=TCL
|
|
S: Product=TCL 5G USB Dongle
|
|
S: SerialNumber=3136b91a
|
|
C: #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=896mA
|
|
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=82(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 3 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
|
|
E: Ad=86(I) Atr=03(Int.) MxPS= 64 Ivl=32ms
|
|
I: If#= 4 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
|
|
E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
|
|
0x0640: ECM + Modem + Diag + AT
|
|
T: Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=10000 MxCh= 0
|
|
D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1
|
|
P: Vendor=1bbb ProdID=0640 Rev=05.04
|
|
S: Manufacturer=TCL
|
|
S: Product=TCL 5G USB Dongle
|
|
S: SerialNumber=3136b91a
|
|
C: #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=896mA
|
|
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
|
|
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=32ms
|
|
I: If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
|
|
E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
|
|
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
|
|
Signed-off-by: Daniel Swanemar <d.swanemar@gmail.com>
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
---
|
|
drivers/usb/serial/option.c | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index 9ba5584061c8c4..437960002bc3b1 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -2385,6 +2385,10 @@ static const struct usb_device_id option_ids[] = {
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x30) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x40) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x60) },
|
|
+ { USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0530, 0xff), /* TCL IK512 MBIM */
|
|
+ .driver_info = NCTRL(1) },
|
|
+ { USB_DEVICE_INTERFACE_CLASS(0x1bbb, 0x0640, 0xff), /* TCL IK512 ECM */
|
|
+ .driver_info = NCTRL(3) },
|
|
{ } /* Terminating entry */
|
|
};
|
|
MODULE_DEVICE_TABLE(usb, option_ids);
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From 724d461e44dfc0815624d2a9792f2f2beb7ee46d Mon Sep 17 00:00:00 2001
|
|
From: Michal Hrusecky <michal.hrusecky@turris.com>
|
|
Date: Tue, 19 Nov 2024 14:00:18 +0100
|
|
Subject: USB: serial: option: add MeiG Smart SLM770A
|
|
|
|
Update the USB serial option driver to support MeiG Smart SLM770A.
|
|
|
|
ID 2dee:4d57 Marvell Mobile Composite Device Bus
|
|
|
|
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
|
|
D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
|
|
P: Vendor=2dee ProdID=4d57 Rev= 1.00
|
|
S: Manufacturer=Marvell
|
|
S: Product=Mobile Composite Device Bus
|
|
C:* #Ifs= 6 Cfg#= 1 Atr=c0 MxPwr=500mA
|
|
A: FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
|
|
I:* If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
|
|
E: Ad=87(I) Atr=03(Int.) MxPS= 64 Ivl=4096ms
|
|
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=0c(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=88(I) Atr=03(Int.) MxPS= 64 Ivl=4096ms
|
|
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=89(I) Atr=03(Int.) MxPS= 64 Ivl=4096ms
|
|
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=0e(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
|
|
Tested successfully connecting to the Internet via rndis interface after
|
|
dialing via AT commands on If#=3 or If#=4.
|
|
Not sure of the purpose of the other serial interfaces.
|
|
|
|
Signed-off-by: Michal Hrusecky <michal.hrusecky@turris.com>
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
---
|
|
drivers/usb/serial/option.c | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index 437960002bc3b1..a807101548e7b5 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -625,6 +625,8 @@ static void option_instat_callback(struct urb *urb);
|
|
#define MEIGSMART_PRODUCT_SRM825L 0x4d22
|
|
/* MeiG Smart SLM320 based on UNISOC UIS8910 */
|
|
#define MEIGSMART_PRODUCT_SLM320 0x4d41
|
|
+/* MeiG Smart SLM770A based on ASR1803 */
|
|
+#define MEIGSMART_PRODUCT_SLM770A 0x4d57
|
|
|
|
/* Device flags */
|
|
|
|
@@ -2382,6 +2384,7 @@ static const struct usb_device_id option_ids[] = {
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM320, 0xff, 0, 0) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM770A, 0xff, 0, 0) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x30) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x40) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x60) },
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From aa954ae08262bb5cd6ab18dd56a0b58c1315db8b Mon Sep 17 00:00:00 2001
|
|
From: Mank Wang <mank.wang@netprisma.com>
|
|
Date: Fri, 22 Nov 2024 09:06:00 +0000
|
|
Subject: USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready
|
|
|
|
LCUK54-WRD's pid/vid
|
|
0x3731/0x010a
|
|
0x3731/0x010c
|
|
|
|
LCUK54-WWD's pid/vid
|
|
0x3731/0x010b
|
|
0x3731/0x010d
|
|
|
|
Above products use the exact same interface layout and option
|
|
driver:
|
|
MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL
|
|
|
|
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 5 Spd=480 MxCh= 0
|
|
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
|
|
P: Vendor=3731 ProdID=0101 Rev= 5.04
|
|
S: Manufacturer=NetPrisma
|
|
S: Product=LCUK54-WRD
|
|
S: SerialNumber=feeba631
|
|
C:* #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
|
|
A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
|
|
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
|
|
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=32ms
|
|
I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
|
|
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
|
|
E: Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
|
|
E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=32ms
|
|
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
|
|
E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
|
|
E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
|
|
E: Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
|
|
Signed-off-by: Mank Wang <mank.wang@netprisma.com>
|
|
[ johan: use lower case hex notation ]
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
---
|
|
drivers/usb/serial/option.c | 12 ++++++++++++
|
|
1 file changed, 12 insertions(+)
|
|
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index a807101548e7b5..e897c723b041cd 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -2377,6 +2377,18 @@ static const struct usb_device_id option_ids[] = {
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x0116, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WWD for Golbal EDU */
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x0116, 0xff, 0x00, 0x40) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x0116, 0xff, 0xff, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010a, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WRD for WWAN Ready */
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010a, 0xff, 0x00, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010a, 0xff, 0xff, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010b, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WWD for WWAN Ready */
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010b, 0xff, 0x00, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010b, 0xff, 0xff, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010c, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WRD for WWAN Ready */
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010c, 0xff, 0x00, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010c, 0xff, 0xff, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010d, 0xff, 0xff, 0x30) }, /* NetPrisma LCUK54-WWD for WWAN Ready */
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010d, 0xff, 0x00, 0x40) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3731, 0x010d, 0xff, 0xff, 0x40) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x40) },
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From f07dfa6a1b65034a5c3ba3a555950d972f252757 Mon Sep 17 00:00:00 2001
|
|
From: Jack Wu <wojackbb@gmail.com>
|
|
Date: Thu, 28 Nov 2024 10:22:27 +0800
|
|
Subject: USB: serial: option: add MediaTek T7XX compositions
|
|
|
|
Add the MediaTek T7XX compositions:
|
|
|
|
T: Bus=03 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 74 Spd=480 MxCh= 0
|
|
D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
|
|
P: Vendor=0e8d ProdID=7129 Rev= 0.01
|
|
S: Manufacturer=MediaTek Inc.
|
|
S: Product=USB DATA CARD
|
|
S: SerialNumber=004402459035402
|
|
C:* #Ifs=10 Cfg#= 1 Atr=a0 MxPwr=500mA
|
|
A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
|
|
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
|
|
E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=32ms
|
|
I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
|
|
I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
|
|
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
|
|
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I:* If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
|
|
E: Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
|
|
-------------------------------
|
|
| If Number | Function |
|
|
-------------------------------
|
|
| 2 | USB AP Log Port |
|
|
-------------------------------
|
|
| 3 | USB AP GNSS Port|
|
|
-------------------------------
|
|
| 4 | USB AP META Port|
|
|
-------------------------------
|
|
| 5 | ADB port |
|
|
-------------------------------
|
|
| 6 | USB MD AT Port |
|
|
------------------------------
|
|
| 7 | USB MD META Port|
|
|
-------------------------------
|
|
| 8 | USB NTZ Port |
|
|
-------------------------------
|
|
| 9 | USB Debug port |
|
|
-------------------------------
|
|
|
|
Signed-off-by: Jack Wu <wojackbb@gmail.com>
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
---
|
|
drivers/usb/serial/option.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index e897c723b041cd..dcedb88ad7c13b 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -2249,6 +2249,8 @@ static const struct usb_device_id option_ids[] = {
|
|
.driver_info = NCTRL(2) },
|
|
{ USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x7127, 0xff, 0x00, 0x00),
|
|
.driver_info = NCTRL(2) | NCTRL(3) | NCTRL(4) },
|
|
+ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, 0x7129, 0xff, 0x00, 0x00), /* MediaTek T7XX */
|
|
+ .driver_info = NCTRL(2) | NCTRL(3) | NCTRL(4) },
|
|
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
|
|
{ USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MPL200),
|
|
.driver_info = RSVD(1) | RSVD(4) },
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From 8366e64a4454481339e7c56a8ad280161f2e441d Mon Sep 17 00:00:00 2001
|
|
From: Daniele Palmas <dnlplm@gmail.com>
|
|
Date: Mon, 9 Dec 2024 16:32:54 +0100
|
|
Subject: USB: serial: option: add Telit FE910C04 rmnet compositions
|
|
|
|
Add the following Telit FE910C04 compositions:
|
|
|
|
0x10c0: rmnet + tty (AT/NMEA) + tty (AT) + tty (diag)
|
|
T: Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 13 Spd=480 MxCh= 0
|
|
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
|
|
P: Vendor=1bc7 ProdID=10c0 Rev=05.15
|
|
S: Manufacturer=Telit Cinterion
|
|
S: Product=FE910
|
|
S: SerialNumber=f71b8b32
|
|
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
|
|
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
|
|
I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
|
|
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
|
|
0x10c4: rmnet + tty (AT) + tty (AT) + tty (diag)
|
|
T: Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 14 Spd=480 MxCh= 0
|
|
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
|
|
P: Vendor=1bc7 ProdID=10c4 Rev=05.15
|
|
S: Manufacturer=Telit Cinterion
|
|
S: Product=FE910
|
|
S: SerialNumber=f71b8b32
|
|
C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
|
|
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
|
|
I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
|
|
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
|
|
0x10c8: rmnet + tty (AT) + tty (diag) + DPL (data packet logging) + adb
|
|
T: Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 17 Spd=480 MxCh= 0
|
|
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
|
|
P: Vendor=1bc7 ProdID=10c8 Rev=05.15
|
|
S: Manufacturer=Telit Cinterion
|
|
S: Product=FE910
|
|
S: SerialNumber=f71b8b32
|
|
C: #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
|
|
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
|
|
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
|
|
I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
|
|
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
|
|
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
|
|
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I: If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
|
|
E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
I: If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
|
|
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
|
|
|
|
Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Johan Hovold <johan@kernel.org>
|
|
---
|
|
drivers/usb/serial/option.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index dcedb88ad7c13b..64317b390d2285 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -1397,6 +1397,12 @@ static const struct usb_device_id option_ids[] = {
|
|
.driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
|
{ USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */
|
|
.driver_info = NCTRL(3) | RSVD(4) | RSVD(5) },
|
|
+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c0, 0xff), /* Telit FE910C04 (rmnet) */
|
|
+ .driver_info = RSVD(0) | NCTRL(3) },
|
|
+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c4, 0xff), /* Telit FE910C04 (rmnet) */
|
|
+ .driver_info = RSVD(0) | NCTRL(3) },
|
|
+ { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10c8, 0xff), /* Telit FE910C04 (rmnet) */
|
|
+ .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) },
|
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
|
|
.driver_info = NCTRL(0) | RSVD(1) | RSVD(3) },
|
|
{ USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From 24740385cb0d6d22ab7fa7adf36546d5b3cdcf73 Mon Sep 17 00:00:00 2001
|
|
From: Mika Westerberg <mika.westerberg@linux.intel.com>
|
|
Date: Fri, 15 Nov 2024 11:54:40 +0200
|
|
Subject: thunderbolt: Improve redrive mode handling
|
|
|
|
When USB-C monitor is connected directly to Intel Barlow Ridge host, it
|
|
goes into "redrive" mode that basically routes the DisplayPort signals
|
|
directly from the GPU to the USB-C monitor without any tunneling needed.
|
|
However, the host router must be powered on for this to work. Aaron
|
|
reported that there are a couple of cases where this will not work with
|
|
the current code:
|
|
|
|
- Booting with USB-C monitor plugged in.
|
|
- Plugging in USB-C monitor when the host router is in sleep state
|
|
(runtime suspended).
|
|
- Plugging in USB-C device while the system is in system sleep state.
|
|
|
|
In all these cases once the host router is runtime suspended the picture
|
|
on the connected USB-C display disappears too. This is certainly not
|
|
what the user expected.
|
|
|
|
For this reason improve the redrive mode handling to keep the host
|
|
router from runtime suspending when detect that any of the above cases
|
|
is happening.
|
|
|
|
Fixes: a75e0684efe5 ("thunderbolt: Keep the domain powered when USB4 port is in redrive mode")
|
|
Reported-by: Aaron Rainbolt <arainbolt@kfocus.org>
|
|
Closes: https://lore.kernel.org/linux-usb/20241009220118.70bfedd0@kf-ir16/
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
|
|
---
|
|
drivers/thunderbolt/tb.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 41 insertions(+)
|
|
|
|
diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
|
|
index 4f777788e9179c..a7c6919fbf9788 100644
|
|
--- a/drivers/thunderbolt/tb.c
|
|
+++ b/drivers/thunderbolt/tb.c
|
|
@@ -2059,6 +2059,37 @@ static void tb_exit_redrive(struct tb_port *port)
|
|
}
|
|
}
|
|
|
|
+static void tb_switch_enter_redrive(struct tb_switch *sw)
|
|
+{
|
|
+ struct tb_port *port;
|
|
+
|
|
+ tb_switch_for_each_port(sw, port)
|
|
+ tb_enter_redrive(port);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Called during system and runtime suspend to forcefully exit redrive
|
|
+ * mode without querying whether the resource is available.
|
|
+ */
|
|
+static void tb_switch_exit_redrive(struct tb_switch *sw)
|
|
+{
|
|
+ struct tb_port *port;
|
|
+
|
|
+ if (!(sw->quirks & QUIRK_KEEP_POWER_IN_DP_REDRIVE))
|
|
+ return;
|
|
+
|
|
+ tb_switch_for_each_port(sw, port) {
|
|
+ if (!tb_port_is_dpin(port))
|
|
+ continue;
|
|
+
|
|
+ if (port->redrive) {
|
|
+ port->redrive = false;
|
|
+ pm_runtime_put(&sw->dev);
|
|
+ tb_port_dbg(port, "exit redrive mode\n");
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
static void tb_dp_resource_unavailable(struct tb *tb, struct tb_port *port)
|
|
{
|
|
struct tb_port *in, *out;
|
|
@@ -2909,6 +2940,7 @@ static int tb_start(struct tb *tb, bool reset)
|
|
tb_create_usb3_tunnels(tb->root_switch);
|
|
/* Add DP IN resources for the root switch */
|
|
tb_add_dp_resources(tb->root_switch);
|
|
+ tb_switch_enter_redrive(tb->root_switch);
|
|
/* Make the discovered switches available to the userspace */
|
|
device_for_each_child(&tb->root_switch->dev, NULL,
|
|
tb_scan_finalize_switch);
|
|
@@ -2924,6 +2956,7 @@ static int tb_suspend_noirq(struct tb *tb)
|
|
|
|
tb_dbg(tb, "suspending...\n");
|
|
tb_disconnect_and_release_dp(tb);
|
|
+ tb_switch_exit_redrive(tb->root_switch);
|
|
tb_switch_suspend(tb->root_switch, false);
|
|
tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
|
|
tb_dbg(tb, "suspend finished\n");
|
|
@@ -3016,6 +3049,7 @@ static int tb_resume_noirq(struct tb *tb)
|
|
tb_dbg(tb, "tunnels restarted, sleeping for 100ms\n");
|
|
msleep(100);
|
|
}
|
|
+ tb_switch_enter_redrive(tb->root_switch);
|
|
/* Allow tb_handle_hotplug to progress events */
|
|
tcm->hotplug_active = true;
|
|
tb_dbg(tb, "resume finished\n");
|
|
@@ -3079,6 +3113,12 @@ static int tb_runtime_suspend(struct tb *tb)
|
|
struct tb_cm *tcm = tb_priv(tb);
|
|
|
|
mutex_lock(&tb->lock);
|
|
+ /*
|
|
+ * The below call only releases DP resources to allow exiting and
|
|
+ * re-entering redrive mode.
|
|
+ */
|
|
+ tb_disconnect_and_release_dp(tb);
|
|
+ tb_switch_exit_redrive(tb->root_switch);
|
|
tb_switch_suspend(tb->root_switch, true);
|
|
tcm->hotplug_active = false;
|
|
mutex_unlock(&tb->lock);
|
|
@@ -3110,6 +3150,7 @@ static int tb_runtime_resume(struct tb *tb)
|
|
tb_restore_children(tb->root_switch);
|
|
list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list)
|
|
tb_tunnel_restart(tunnel);
|
|
+ tb_switch_enter_redrive(tb->root_switch);
|
|
tcm->hotplug_active = true;
|
|
mutex_unlock(&tb->lock);
|
|
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From e21ebe51af688eb98fd6269240212a3c7300deea Mon Sep 17 00:00:00 2001
|
|
From: Mathias Nyman <mathias.nyman@linux.intel.com>
|
|
Date: Tue, 17 Dec 2024 12:21:21 +0200
|
|
Subject: xhci: Turn NEC specific quirk for handling Stop Endpoint errors
|
|
generic
|
|
|
|
xHC hosts from several vendors have the same issue where endpoints start
|
|
so slowly that a later queued 'Stop Endpoint' command may complete before
|
|
endpoint is up and running.
|
|
|
|
The 'Stop Endpoint' command fails with context state error as the endpoint
|
|
still appears as stopped.
|
|
|
|
See commit 42b758137601 ("usb: xhci: Limit Stop Endpoint retries") for
|
|
details
|
|
|
|
CC: stable@vger.kernel.org
|
|
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
|
Link: https://lore.kernel.org/r/20241217102122.2316814-2-mathias.nyman@linux.intel.com
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/usb/host/xhci-ring.c | 2 --
|
|
1 file changed, 2 deletions(-)
|
|
|
|
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
|
|
index 4cf5363875c704..09b05a62375e01 100644
|
|
--- a/drivers/usb/host/xhci-ring.c
|
|
+++ b/drivers/usb/host/xhci-ring.c
|
|
@@ -1199,8 +1199,6 @@ static void xhci_handle_cmd_stop_ep(struct xhci_hcd *xhci, int slot_id,
|
|
* Keep retrying until the EP starts and stops again, on
|
|
* chips where this is known to help. Wait for 100ms.
|
|
*/
|
|
- if (!(xhci->quirks & XHCI_NEC_HOST))
|
|
- break;
|
|
if (time_is_before_jiffies(ep->stop_time + msecs_to_jiffies(100)))
|
|
break;
|
|
fallthrough;
|
|
--
|
|
cgit 1.2.3-korg
|
|
|
|
|
|
From b9252f80b807801056e67e3a672fb1be0ecb81d8 Mon Sep 17 00:00:00 2001
|
|
From: Niklas Neronin <niklas.neronin@linux.intel.com>
|
|
Date: Tue, 17 Dec 2024 12:21:22 +0200
|
|
Subject: usb: xhci: fix ring expansion regression in 6.13-rc1
|
|
|
|
The source and destination rings were incorrectly assigned during the ring
|
|
linking process. The "source" ring, which contains the new segments,
|
|
was not spliced into the "destination" ring, leading to incorrect ring
|
|
expansion.
|
|
|
|
Fixes: fe688e500613 ("usb: xhci: refactor xhci_link_rings() to use source and destination rings")
|
|
Reported-by: Jeff Chua <jeff.chua.linux@gmail.com>
|
|
Closes: https://lore.kernel.org/lkml/CAAJw_ZtppNqC9XA=-WVQDr+vaAS=di7jo15CzSqONeX48H75MA@mail.gmail.com/
|
|
Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
|
|
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
|
Link: https://lore.kernel.org/r/20241217102122.2316814-3-mathias.nyman@linux.intel.com
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/usb/host/xhci-mem.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
|
|
index 15db90c54a45ab..92703efda1f7b3 100644
|
|
--- a/drivers/usb/host/xhci-mem.c
|
|
+++ b/drivers/usb/host/xhci-mem.c
|
|
@@ -436,7 +436,7 @@ int xhci_ring_expansion(struct xhci_hcd *xhci, struct xhci_ring *ring,
|
|
goto free_segments;
|
|
}
|
|
|
|
- xhci_link_rings(xhci, ring, &new_ring);
|
|
+ xhci_link_rings(xhci, &new_ring, ring);
|
|
trace_xhci_ring_expansion(ring);
|
|
xhci_dbg_trace(xhci, trace_xhci_dbg_ring_expansion,
|
|
"ring expansion succeed, now has %d segments",
|
|
--
|
|
cgit 1.2.3-korg
|
|
|