From b2a976e56b17f0ba573577940956e3fcc1085fbe Mon Sep 17 00:00:00 2001 From: Oscar Salvador Date: Nov 01 2022 11:32:03 +0000 Subject: Merge remote-tracking branch 'origin/users/tiwai/SLE15-SP3/for-next' into SLE15-SP3 Pull misc fixes from Takashi Iwai --- diff --git a/patches.suse/ACPI-extlog-Handle-multiple-records.patch b/patches.suse/ACPI-extlog-Handle-multiple-records.patch new file mode 100644 index 0000000..4f93269 --- /dev/null +++ b/patches.suse/ACPI-extlog-Handle-multiple-records.patch @@ -0,0 +1,93 @@ +From f6ec01da40e4139b41179f046044ee7c4f6370dc Mon Sep 17 00:00:00 2001 +From: Tony Luck +Date: Mon, 10 Oct 2022 13:34:23 -0700 +Subject: [PATCH] ACPI: extlog: Handle multiple records +Git-commit: f6ec01da40e4139b41179f046044ee7c4f6370dc +Patch-mainline: v6.1-rc2 +References: git-fixes + +If there is no user space consumer of extlog_mem trace records, then +Linux properly handles multiple error records in an ELOG block + + extlog_print() + print_extlog_rcd() + __print_extlog_rcd() + cper_estatus_print() + apei_estatus_for_each_section() + +But the other code path hard codes looking for a single record to +output a trace record. + +Fix by using the same apei_estatus_for_each_section() iterator +to step over all records. + +Fixes: 2dfb7d51a61d ("trace, RAS: Add eMCA trace event interface") +Signed-off-by: Tony Luck +Signed-off-by: Rafael J. Wysocki +Acked-by: Takashi Iwai + +--- + drivers/acpi/acpi_extlog.c | 33 ++++++++++++++++++++------------- + 1 file changed, 20 insertions(+), 13 deletions(-) + +diff --git a/drivers/acpi/acpi_extlog.c b/drivers/acpi/acpi_extlog.c +index 72f1fb77abcd..e648158368a7 100644 +--- a/drivers/acpi/acpi_extlog.c ++++ b/drivers/acpi/acpi_extlog.c +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -138,8 +139,8 @@ static int extlog_print(struct notifier_block *nb, unsigned long val, + int cpu = mce->extcpu; + struct acpi_hest_generic_status *estatus, *tmp; + struct acpi_hest_generic_data *gdata; +- const guid_t *fru_id = &guid_null; +- char *fru_text = ""; ++ const guid_t *fru_id; ++ char *fru_text; + guid_t *sec_type; + static u32 err_seq; + +@@ -160,17 +161,23 @@ static int extlog_print(struct notifier_block *nb, unsigned long val, + + /* log event via trace */ + err_seq++; +- gdata = (struct acpi_hest_generic_data *)(tmp + 1); +- if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID) +- fru_id = (guid_t *)gdata->fru_id; +- if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT) +- fru_text = gdata->fru_text; +- sec_type = (guid_t *)gdata->section_type; +- if (guid_equal(sec_type, &CPER_SEC_PLATFORM_MEM)) { +- struct cper_sec_mem_err *mem = (void *)(gdata + 1); +- if (gdata->error_data_length >= sizeof(*mem)) +- trace_extlog_mem_event(mem, err_seq, fru_id, fru_text, +- (u8)gdata->error_severity); ++ apei_estatus_for_each_section(tmp, gdata) { ++ if (gdata->validation_bits & CPER_SEC_VALID_FRU_ID) ++ fru_id = (guid_t *)gdata->fru_id; ++ else ++ fru_id = &guid_null; ++ if (gdata->validation_bits & CPER_SEC_VALID_FRU_TEXT) ++ fru_text = gdata->fru_text; ++ else ++ fru_text = ""; ++ sec_type = (guid_t *)gdata->section_type; ++ if (guid_equal(sec_type, &CPER_SEC_PLATFORM_MEM)) { ++ struct cper_sec_mem_err *mem = (void *)(gdata + 1); ++ ++ if (gdata->error_data_length >= sizeof(*mem)) ++ trace_extlog_mem_event(mem, err_seq, fru_id, fru_text, ++ (u8)gdata->error_severity); ++ } + } + + out: +-- +2.35.3 + diff --git a/patches.suse/fbdev-cyber2000fb-fix-missing-pci_disable_device.patch b/patches.suse/fbdev-cyber2000fb-fix-missing-pci_disable_device.patch new file mode 100644 index 0000000..f97d3f3 --- /dev/null +++ b/patches.suse/fbdev-cyber2000fb-fix-missing-pci_disable_device.patch @@ -0,0 +1,42 @@ +From 3c6bf6bddc84888c0ce163b09dee0ddd23b5172a Mon Sep 17 00:00:00 2001 +From: Yang Yingliang +Date: Mon, 24 Oct 2022 22:00:28 +0800 +Subject: [PATCH] fbdev: cyber2000fb: fix missing pci_disable_device() +Git-commit: 3c6bf6bddc84888c0ce163b09dee0ddd23b5172a +Patch-mainline: v6.1-rc3 +References: git-fixes + +Add missing pci_disable_device() in error path of probe() and remove() path. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Yang Yingliang +Signed-off-by: Helge Deller +Acked-by: Takashi Iwai + +--- + drivers/video/fbdev/cyber2000fb.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/video/fbdev/cyber2000fb.c b/drivers/video/fbdev/cyber2000fb.c +index 585af90a68a5..31ff1da82c05 100644 +--- a/drivers/video/fbdev/cyber2000fb.c ++++ b/drivers/video/fbdev/cyber2000fb.c +@@ -1796,6 +1796,7 @@ static int cyberpro_pci_probe(struct pci_dev *dev, + failed_regions: + cyberpro_free_fb_info(cfb); + failed_release: ++ pci_disable_device(dev); + return err; + } + +@@ -1812,6 +1813,7 @@ static void cyberpro_pci_remove(struct pci_dev *dev) + int_cfb_info = NULL; + + pci_release_regions(dev); ++ pci_disable_device(dev); + } + } + +-- +2.35.3 + diff --git a/patches.suse/fbdev-da8xx-fb-Fix-error-handling-in-.remove.patch b/patches.suse/fbdev-da8xx-fb-Fix-error-handling-in-.remove.patch new file mode 100644 index 0000000..f2a8726 --- /dev/null +++ b/patches.suse/fbdev-da8xx-fb-Fix-error-handling-in-.remove.patch @@ -0,0 +1,45 @@ +From 3c6174f9ffcb63ac8b54809c8043d7800b185bfb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= +Date: Mon, 17 Oct 2022 21:52:50 +0200 +Subject: [PATCH] fbdev: da8xx-fb: Fix error handling in .remove() +Mime-version: 1.0 +Content-type: text/plain; charset=UTF-8 +Content-transfer-encoding: 8bit +Git-commit: 3c6174f9ffcb63ac8b54809c8043d7800b185bfb +Patch-mainline: v6.1-rc3 +References: git-fixes + +Even in the presence of problems (here: regulator_disable() might fail), +it's important to unregister all resources acquired during .probe() and +disable the device (i.e. DMA activity) because even if .remove() returns +an error code, the device is removed and the .remove() callback is never +called again later to catch up. + +This is a preparation for making platform remove callbacks return void. + +Signed-off-by: Uwe Kleine-König +Signed-off-by: Helge Deller +Fixes: 611097d5daea ("fbdev: da8xx: add support for a regulator") +Acked-by: Takashi Iwai + +--- + drivers/video/fbdev/da8xx-fb.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/video/fbdev/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c +index ae76a2111c77..11922b009ed7 100644 +--- a/drivers/video/fbdev/da8xx-fb.c ++++ b/drivers/video/fbdev/da8xx-fb.c +@@ -1076,7 +1076,8 @@ static int fb_remove(struct platform_device *dev) + if (par->lcd_supply) { + ret = regulator_disable(par->lcd_supply); + if (ret) +- return ret; ++ dev_warn(&dev->dev, "Failed to disable regulator (%pe)\n", ++ ERR_PTR(ret)); + } + + lcd_disable_raster(DA8XX_FRAME_WAIT); +-- +2.35.3 + diff --git a/patches.suse/hwmon-coretemp-Handle-large-core-ID-value.patch b/patches.suse/hwmon-coretemp-Handle-large-core-ID-value.patch new file mode 100644 index 0000000..efe8dd8 --- /dev/null +++ b/patches.suse/hwmon-coretemp-Handle-large-core-ID-value.patch @@ -0,0 +1,175 @@ +From 7108b80a542b9d65e44b36d64a700a83658c0b73 Mon Sep 17 00:00:00 2001 +From: Zhang Rui +Date: Fri, 14 Oct 2022 17:01:45 +0800 +Subject: [PATCH] hwmon/coretemp: Handle large core ID value +Git-commit: 7108b80a542b9d65e44b36d64a700a83658c0b73 +Patch-mainline: v6.1-rc2 +References: git-fixes + +The coretemp driver supports up to a hard-coded limit of 128 cores. + +Today, the driver can not support a core with an ID above that limit. +Yet, the encoding of core ID's is arbitrary (BIOS APIC-ID) and so they +may be sparse and they may be large. + +Update the driver to map arbitrary core ID numbers into appropriate +array indexes so that 128 cores can be supported, no matter the encoding +of core ID's. + +Signed-off-by: Zhang Rui +Signed-off-by: Dave Hansen +Acked-by: Len Brown +Acked-by: Guenter Roeck +Cc: stable@vger.kernel.org +Link: https://lkml.kernel.org/r/20221014090147.1836-3-rui.zhang@intel.com +Acked-by: Takashi Iwai + +--- + drivers/hwmon/coretemp.c | 56 +++++++++++++++++++++++++++++----------- + 1 file changed, 41 insertions(+), 15 deletions(-) + +diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c +index ccf0af5b988a..8bf32c6c85d9 100644 +--- a/drivers/hwmon/coretemp.c ++++ b/drivers/hwmon/coretemp.c +@@ -46,9 +46,6 @@ MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius"); + #define TOTAL_ATTRS (MAX_CORE_ATTRS + 1) + #define MAX_CORE_DATA (NUM_REAL_CORES + BASE_SYSFS_ATTR_NO) + +-#define TO_CORE_ID(cpu) (cpu_data(cpu).cpu_core_id) +-#define TO_ATTR_NO(cpu) (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO) +- + #ifdef CONFIG_SMP + #define for_each_sibling(i, cpu) \ + for_each_cpu(i, topology_sibling_cpumask(cpu)) +@@ -91,6 +88,8 @@ struct temp_data { + struct platform_data { + struct device *hwmon_dev; + u16 pkg_id; ++ u16 cpu_map[NUM_REAL_CORES]; ++ struct ida ida; + struct cpumask cpumask; + struct temp_data *core_data[MAX_CORE_DATA]; + struct device_attribute name_attr; +@@ -441,7 +440,7 @@ static struct temp_data *init_temp_data(unsigned int cpu, int pkg_flag) + MSR_IA32_THERM_STATUS; + tdata->is_pkg_data = pkg_flag; + tdata->cpu = cpu; +- tdata->cpu_core_id = TO_CORE_ID(cpu); ++ tdata->cpu_core_id = topology_core_id(cpu); + tdata->attr_size = MAX_CORE_ATTRS; + mutex_init(&tdata->update_lock); + return tdata; +@@ -454,7 +453,7 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu, + struct platform_data *pdata = platform_get_drvdata(pdev); + struct cpuinfo_x86 *c = &cpu_data(cpu); + u32 eax, edx; +- int err, attr_no; ++ int err, index, attr_no; + + /* + * Find attr number for sysfs: +@@ -462,14 +461,26 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu, + * The attr number is always core id + 2 + * The Pkgtemp will always show up as temp1_*, if available + */ +- attr_no = pkg_flag ? PKG_SYSFS_ATTR_NO : TO_ATTR_NO(cpu); ++ if (pkg_flag) { ++ attr_no = PKG_SYSFS_ATTR_NO; ++ } else { ++ index = ida_alloc(&pdata->ida, GFP_KERNEL); ++ if (index < 0) ++ return index; ++ pdata->cpu_map[index] = topology_core_id(cpu); ++ attr_no = index + BASE_SYSFS_ATTR_NO; ++ } + +- if (attr_no > MAX_CORE_DATA - 1) +- return -ERANGE; ++ if (attr_no > MAX_CORE_DATA - 1) { ++ err = -ERANGE; ++ goto ida_free; ++ } + + tdata = init_temp_data(cpu, pkg_flag); +- if (!tdata) +- return -ENOMEM; ++ if (!tdata) { ++ err = -ENOMEM; ++ goto ida_free; ++ } + + /* Test if we can access the status register */ + err = rdmsr_safe_on_cpu(cpu, tdata->status_reg, &eax, &edx); +@@ -505,6 +516,9 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu, + exit_free: + pdata->core_data[attr_no] = NULL; + kfree(tdata); ++ida_free: ++ if (!pkg_flag) ++ ida_free(&pdata->ida, index); + return err; + } + +@@ -524,6 +538,9 @@ static void coretemp_remove_core(struct platform_data *pdata, int indx) + + kfree(pdata->core_data[indx]); + pdata->core_data[indx] = NULL; ++ ++ if (indx >= BASE_SYSFS_ATTR_NO) ++ ida_free(&pdata->ida, indx - BASE_SYSFS_ATTR_NO); + } + + static int coretemp_probe(struct platform_device *pdev) +@@ -537,6 +554,7 @@ static int coretemp_probe(struct platform_device *pdev) + return -ENOMEM; + + pdata->pkg_id = pdev->id; ++ ida_init(&pdata->ida); + platform_set_drvdata(pdev, pdata); + + pdata->hwmon_dev = devm_hwmon_device_register_with_groups(dev, DRVNAME, +@@ -553,6 +571,7 @@ static int coretemp_remove(struct platform_device *pdev) + if (pdata->core_data[i]) + coretemp_remove_core(pdata, i); + ++ ida_destroy(&pdata->ida); + return 0; + } + +@@ -647,7 +666,7 @@ static int coretemp_cpu_offline(unsigned int cpu) + struct platform_device *pdev = coretemp_get_pdev(cpu); + struct platform_data *pd; + struct temp_data *tdata; +- int indx, target; ++ int i, indx = -1, target; + + /* + * Don't execute this on suspend as the device remove locks +@@ -660,12 +679,19 @@ static int coretemp_cpu_offline(unsigned int cpu) + if (!pdev) + return 0; + +- /* The core id is too big, just return */ +- indx = TO_ATTR_NO(cpu); +- if (indx > MAX_CORE_DATA - 1) ++ pd = platform_get_drvdata(pdev); ++ ++ for (i = 0; i < NUM_REAL_CORES; i++) { ++ if (pd->cpu_map[i] == topology_core_id(cpu)) { ++ indx = i + BASE_SYSFS_ATTR_NO; ++ break; ++ } ++ } ++ ++ /* Too many cores and this core is not populated, just return */ ++ if (indx < 0) + return 0; + +- pd = platform_get_drvdata(pdev); + tdata = pd->core_data[indx]; + + cpumask_clear_cpu(cpu, &pd->cpumask); +-- +2.35.3 + diff --git a/patches.suse/iio-adc-mcp3911-use-correct-id-bits.patch b/patches.suse/iio-adc-mcp3911-use-correct-id-bits.patch new file mode 100644 index 0000000..109027d --- /dev/null +++ b/patches.suse/iio-adc-mcp3911-use-correct-id-bits.patch @@ -0,0 +1,38 @@ +From 815f1647a603a822d66630bbe22cab4bc097c8c3 Mon Sep 17 00:00:00 2001 +From: Marcus Folkesson +Date: Mon, 10 Oct 2022 21:46:41 +0200 +Subject: [PATCH] iio: adc: mcp3911: use correct id bits +Git-commit: 815f1647a603a822d66630bbe22cab4bc097c8c3 +Patch-mainline: v6.1-rc3 +References: git-fixes + +The device ID should be shifted 6 bits to left according to datasheet. + +Fixes: 3a89b289df5d ("iio: adc: add support for mcp3911") +Signed-off-by: Marcus Folkesson +Link: https://lore.kernel.org/r/20221010194641.676484-1-marcus.folkesson@gmail.com +Signed-off-by: Jonathan Cameron +Acked-by: Takashi Iwai + +--- + drivers/iio/adc/mcp3911.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/iio/adc/mcp3911.c b/drivers/iio/adc/mcp3911.c +index 7f0b37994fe5..f57f5eb23d49 100644 +--- a/drivers/iio/adc/mcp3911.c ++++ b/drivers/iio/adc/mcp3911.c +@@ -55,8 +55,8 @@ + /* Internal voltage reference in mV */ + #define MCP3911_INT_VREF_MV 1200 + +-#define MCP3911_REG_READ(reg, id) ((((reg) << 1) | ((id) << 5) | (1 << 0)) & 0xff) +-#define MCP3911_REG_WRITE(reg, id) ((((reg) << 1) | ((id) << 5) | (0 << 0)) & 0xff) ++#define MCP3911_REG_READ(reg, id) ((((reg) << 1) | ((id) << 6) | (1 << 0)) & 0xff) ++#define MCP3911_REG_WRITE(reg, id) ((((reg) << 1) | ((id) << 6) | (0 << 0)) & 0xff) + + #define MCP3911_NUM_CHANNELS 2 + +-- +2.35.3 + diff --git a/patches.suse/iio-light-tsl2583-Fix-module-unloading.patch b/patches.suse/iio-light-tsl2583-Fix-module-unloading.patch new file mode 100644 index 0000000..55febfe --- /dev/null +++ b/patches.suse/iio-light-tsl2583-Fix-module-unloading.patch @@ -0,0 +1,40 @@ +From 0dec4d2f2636b9e54d9d29f17afc7687c5407f78 Mon Sep 17 00:00:00 2001 +From: Shreeya Patel +Date: Fri, 26 Aug 2022 17:53:52 +0530 +Subject: [PATCH] iio: light: tsl2583: Fix module unloading +Git-commit: 0dec4d2f2636b9e54d9d29f17afc7687c5407f78 +Patch-mainline: v6.1-rc3 +References: git-fixes + +tsl2583 probe() uses devm_iio_device_register() and calling +iio_device_unregister() causes the unregister to occur twice. s +Switch to iio_device_register() instead of devm_iio_device_register() +in probe to avoid the device managed cleanup. + +Fixes: 371894f5d1a0 ("iio: tsl2583: add runtime power management support") +Signed-off-by: Shreeya Patel +Link: https://lore.kernel.org/r/20220826122352.288438-1-shreeya.patel@collabora.com +Cc: +Signed-off-by: Jonathan Cameron +Acked-by: Takashi Iwai + +--- + drivers/iio/light/tsl2583.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/iio/light/tsl2583.c b/drivers/iio/light/tsl2583.c +index 0a2ca1a8146d..7bcb5c718922 100644 +--- a/drivers/iio/light/tsl2583.c ++++ b/drivers/iio/light/tsl2583.c +@@ -858,7 +858,7 @@ static int tsl2583_probe(struct i2c_client *clientp, + TSL2583_POWER_OFF_DELAY_MS); + pm_runtime_use_autosuspend(&clientp->dev); + +- ret = devm_iio_device_register(indio_dev->dev.parent, indio_dev); ++ ret = iio_device_register(indio_dev); + if (ret) { + dev_err(&clientp->dev, "%s: iio registration failed\n", + __func__); +-- +2.35.3 + diff --git a/patches.suse/usb-bdc-change-state-when-port-disconnected.patch b/patches.suse/usb-bdc-change-state-when-port-disconnected.patch new file mode 100644 index 0000000..2a99068 --- /dev/null +++ b/patches.suse/usb-bdc-change-state-when-port-disconnected.patch @@ -0,0 +1,39 @@ +From fb8f60dd1b67520e0e0d7978ef17d015690acfc1 Mon Sep 17 00:00:00 2001 +From: Justin Chen +Date: Wed, 5 Oct 2022 12:13:55 -0700 +Subject: [PATCH] usb: bdc: change state when port disconnected +Git-commit: fb8f60dd1b67520e0e0d7978ef17d015690acfc1 +Patch-mainline: v6.1-rc3 +References: git-fixes + +When port is connected and then disconnected, the state stays as +configured. Which is incorrect as the port is no longer configured, +but in a not attached state. + +Signed-off-by: Justin Chen +Acked-by: Florian Fainelli +Fixes: efed421a94e6 ("usb: gadget: Add UDC driver for Broadcom USB3.0 device controller IP BDC") +Cc: stable +Link: https://lore.kernel.org/r/1664997235-18198-1-git-send-email-justinpopo6@gmail.com +Signed-off-by: Greg Kroah-Hartman +Acked-by: Takashi Iwai + +--- + drivers/usb/gadget/udc/bdc/bdc_udc.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/usb/gadget/udc/bdc/bdc_udc.c b/drivers/usb/gadget/udc/bdc/bdc_udc.c +index 5ac0ef88334e..53ffaf4e2e37 100644 +--- a/drivers/usb/gadget/udc/bdc/bdc_udc.c ++++ b/drivers/usb/gadget/udc/bdc/bdc_udc.c +@@ -151,6 +151,7 @@ static void bdc_uspc_disconnected(struct bdc *bdc, bool reinit) + bdc->delayed_status = false; + bdc->reinit = reinit; + bdc->test_mode = false; ++ usb_gadget_set_state(&bdc->gadget, USB_STATE_NOTATTACHED); + } + + /* TNotify wkaeup timer */ +-- +2.35.3 + diff --git a/patches.suse/usb-dwc3-gadget-Don-t-set-IMI-for-no_interrupt.patch b/patches.suse/usb-dwc3-gadget-Don-t-set-IMI-for-no_interrupt.patch new file mode 100644 index 0000000..cced472 --- /dev/null +++ b/patches.suse/usb-dwc3-gadget-Don-t-set-IMI-for-no_interrupt.patch @@ -0,0 +1,45 @@ +From 308c316d16cbad99bb834767382baa693ac42169 Mon Sep 17 00:00:00 2001 +From: Thinh Nguyen +Date: Tue, 25 Oct 2022 15:10:20 -0700 +Subject: [PATCH] usb: dwc3: gadget: Don't set IMI for no_interrupt +Git-commit: 308c316d16cbad99bb834767382baa693ac42169 +Patch-mainline: v6.1-rc3 +References: git-fixes + +The gadget driver may have a certain expectation of how the request +completion flow should be from to its configuration. Make sure the +controller driver respect that. That is, don't set IMI (Interrupt on +Missed Isoc) when usb_request->no_interrupt is set. Also, the driver +should only set IMI to the last TRB of a chain. + +Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver") +Cc: stable@vger.kernel.org +Signed-off-by: Thinh Nguyen +Reviewed-by: Jeff Vanhoof +Tested-by: Jeff Vanhoof +Link: https://lore.kernel.org/r/ced336c84434571340c07994e3667a0ee284fefe.1666735451.git.Thinh.Nguyen@synopsys.com +Signed-off-by: Greg Kroah-Hartman +Acked-by: Takashi Iwai + +--- + drivers/usb/dwc3/gadget.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c +index 230b3c660054..5fe2d136dff5 100644 +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -1292,8 +1292,8 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, + trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS; + } + +- /* always enable Interrupt on Missed ISOC */ +- trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; ++ if (!no_interrupt && !chain) ++ trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; + break; + + case USB_ENDPOINT_XFER_BULK: +-- +2.35.3 + diff --git a/patches.suse/usb-dwc3-gadget-Stop-processing-more-requests-on-IMI.patch b/patches.suse/usb-dwc3-gadget-Stop-processing-more-requests-on-IMI.patch new file mode 100644 index 0000000..c862264 --- /dev/null +++ b/patches.suse/usb-dwc3-gadget-Stop-processing-more-requests-on-IMI.patch @@ -0,0 +1,52 @@ +From f78961f8380b940e0cfc7e549336c21a2ad44f4d Mon Sep 17 00:00:00 2001 +From: Thinh Nguyen +Date: Tue, 25 Oct 2022 15:10:14 -0700 +Subject: [PATCH] usb: dwc3: gadget: Stop processing more requests on IMI +Git-commit: f78961f8380b940e0cfc7e549336c21a2ad44f4d +Patch-mainline: v6.1-rc3 +References: git-fixes + +When servicing a transfer completion event, the dwc3 driver will reclaim +TRBs of started requests up to the request associated with the interrupt +event. Currently we don't check for interrupt due to missed isoc, and +the driver may attempt to reclaim TRBs beyond the associated event. This +causes invalid memory access when the hardware still owns the TRB. If +there's a missed isoc TRB with IMI (interrupt on missed isoc), make sure +to stop servicing further. + +Note that only the last TRB of chained TRBs has its status updated with +missed isoc. + +Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver") +Cc: stable@vger.kernel.org +Reported-by: Jeff Vanhoof +Reported-by: Dan Vacura +Signed-off-by: Thinh Nguyen +Reviewed-by: Jeff Vanhoof +Tested-by: Jeff Vanhoof +Link: https://lore.kernel.org/r/b29acbeab531b666095dfdafd8cb5c7654fbb3e1.1666735451.git.Thinh.Nguyen@synopsys.com +Signed-off-by: Greg Kroah-Hartman +Acked-by: Takashi Iwai + +--- + drivers/usb/dwc3/gadget.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c +index dd8ecbe61bec..230b3c660054 100644 +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -3248,6 +3248,10 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep, + if (event->status & DEPEVT_STATUS_SHORT && !chain) + return 1; + ++ if ((trb->ctrl & DWC3_TRB_CTRL_ISP_IMI) && ++ DWC3_TRB_SIZE_TRBSTS(trb->size) == DWC3_TRBSTS_MISSED_ISOC) ++ return 1; ++ + if ((trb->ctrl & DWC3_TRB_CTRL_IOC) || + (trb->ctrl & DWC3_TRB_CTRL_LST)) + return 1; +-- +2.35.3 + diff --git a/series.conf b/series.conf index 0d36ec6..518c4ba 100644 --- a/series.conf +++ b/series.conf @@ -57562,7 +57562,9 @@ patches.suse/rtc-stmp3xxx-Add-failure-handling-for-stmp3xxx_wdt_r.patch patches.suse/ACPI-HMAT-Release-platform-device-in-case-of-platfor.patch patches.suse/HID-magicmouse-Do-not-set-BTN_MOUSE-on-double-report.patch + patches.suse/ACPI-extlog-Handle-multiple-records.patch patches.suse/thermal-intel_powerclamp-Use-first-online-CPU-as-con.patch + patches.suse/hwmon-coretemp-Handle-large-core-ID-value.patch patches.suse/media-v4l2-dv-timings-add-sanity-checks-for-blanking.patch patches.suse/media-videodev2.h-V4L2_DV_BT_BLANKING_HEIGHT-should-.patch patches.suse/mac802154-Fix-LQI-recording.patch @@ -57583,6 +57585,13 @@ patches.suse/PM-hibernate-Allow-hybrid-sleep-to-work-with-s2idle.patch patches.suse/PM-domains-Fix-handling-of-unavailable-disabled-idle.patch patches.suse/device-property-Fix-documentation-for-_match_string-.patch + patches.suse/usb-bdc-change-state-when-port-disconnected.patch + patches.suse/usb-dwc3-gadget-Stop-processing-more-requests-on-IMI.patch + patches.suse/usb-dwc3-gadget-Don-t-set-IMI-for-no_interrupt.patch + patches.suse/iio-light-tsl2583-Fix-module-unloading.patch + patches.suse/iio-adc-mcp3911-use-correct-id-bits.patch + patches.suse/fbdev-da8xx-fb-Fix-error-handling-in-.remove.patch + patches.suse/fbdev-cyber2000fb-fix-missing-pci_disable_device.patch # out-of-tree patches patches.suse/ppc64-kdump-Limit-kdump-base-to-512MB.patch