From: Greg Kroah-Hartman Date: Tue, 13 Feb 2024 13:08:18 +0000 (+0100) Subject: 6.7-stable patches X-Git-Tag: v6.1.78~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=acc32ec9ea5e7ba16374f8c745fe1c7bd74a86ec;p=thirdparty%2Fkernel%2Fstable-queue.git 6.7-stable patches added patches: alsa-usb-audio-add-a-quirk-for-yamaha-yit-w12tx-transmitter.patch alsa-usb-audio-add-delay-quirk-for-motu-m-series-2nd-revision.patch alsa-usb-audio-add-quirk-for-rode-nt-usb.patch hrtimer-report-offline-hrtimer-enqueue.patch input-atkbd-skip-atkbd_cmd_setleds-when-skipping-atkbd_cmd_getid.patch input-i8042-fix-strange-behavior-of-touchpad-on-clevo-ns70pu.patch revert-drm-amd-pm-fix-the-high-voltage-and-temperature-issue.patch revert-usb-typec-tcpm-fix-cc-role-at-port-reset.patch usb-dwc3-host-set-xhci_sg_trb_cache_size_quirk.patch usb-dwc3-pci-add-support-for-the-intel-arrow-lake-h.patch usb-host-xhci-plat-add-support-for-xhci_sg_trb_cache_size_quirk.patch usb-serial-cp210x-add-id-for-imst-im871a-usb.patch usb-serial-option-add-fibocom-fm101-gl-variant.patch usb-serial-qcserial-add-new-usb-id-for-dell-wireless-dw5826e.patch wifi-iwlwifi-mvm-fix-a-battery-life-regression.patch x86-lib-revert-to-_asm_extable_ua-for-get-put-_user-fixups.patch xhci-handle-isoc-babble-and-buffer-overrun-events-properly.patch xhci-process-isoc-td-properly-when-there-was-a-transaction-error-mid-td.patch --- diff --git a/queue-6.7/alsa-usb-audio-add-a-quirk-for-yamaha-yit-w12tx-transmitter.patch b/queue-6.7/alsa-usb-audio-add-a-quirk-for-yamaha-yit-w12tx-transmitter.patch new file mode 100644 index 00000000000..e8ddaf8856a --- /dev/null +++ b/queue-6.7/alsa-usb-audio-add-a-quirk-for-yamaha-yit-w12tx-transmitter.patch @@ -0,0 +1,32 @@ +From a969210066054ea109d8b7aff29a9b1c98776841 Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Tue, 23 Jan 2024 09:49:35 +0100 +Subject: ALSA: usb-audio: Add a quirk for Yamaha YIT-W12TX transmitter + +From: Julian Sikorski + +commit a969210066054ea109d8b7aff29a9b1c98776841 upstream. + +The device fails to initialize otherwise, giving the following error: +[ 3676.671641] usb 2-1.1: 1:1: cannot get freq at ep 0x1 + +Signed-off-by: Julian Sikorski +Cc: +Link: https://lore.kernel.org/r/20240123084935.2745-1-belegdol+github@gmail.com +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/usb/quirks.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -2031,6 +2031,8 @@ static const struct usb_audio_quirk_flag + QUIRK_FLAG_CTL_MSG_DELAY_1M | QUIRK_FLAG_IGNORE_CTL_ERROR), + DEVICE_FLG(0x0499, 0x1509, /* Steinberg UR22 */ + QUIRK_FLAG_GENERIC_IMPLICIT_FB), ++ DEVICE_FLG(0x0499, 0x3108, /* Yamaha YIT-W12TX */ ++ QUIRK_FLAG_GET_SAMPLE_RATE), + DEVICE_FLG(0x04d8, 0xfeea, /* Benchmark DAC1 Pre */ + QUIRK_FLAG_GET_SAMPLE_RATE), + DEVICE_FLG(0x04e8, 0xa051, /* Samsung USBC Headset (AKG) */ diff --git a/queue-6.7/alsa-usb-audio-add-delay-quirk-for-motu-m-series-2nd-revision.patch b/queue-6.7/alsa-usb-audio-add-delay-quirk-for-motu-m-series-2nd-revision.patch new file mode 100644 index 00000000000..97401b89621 --- /dev/null +++ b/queue-6.7/alsa-usb-audio-add-delay-quirk-for-motu-m-series-2nd-revision.patch @@ -0,0 +1,33 @@ +From d915a6850e27efb383cd4400caadfe47792623df Mon Sep 17 00:00:00 2001 +From: Alexander Tsoy +Date: Wed, 24 Jan 2024 16:02:39 +0300 +Subject: ALSA: usb-audio: Add delay quirk for MOTU M Series 2nd revision + +From: Alexander Tsoy + +commit d915a6850e27efb383cd4400caadfe47792623df upstream. + +Audio control requests that sets sampling frequency sometimes fail on +this card. Adding delay between control messages eliminates that problem. + +Link: https://bugzilla.kernel.org/show_bug.cgi?id=217601 +Cc: +Signed-off-by: Alexander Tsoy +Link: https://lore.kernel.org/r/20240124130239.358298-1-alexander@tsoy.me +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/usb/quirks.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -2073,6 +2073,8 @@ static const struct usb_audio_quirk_flag + QUIRK_FLAG_GENERIC_IMPLICIT_FB), + DEVICE_FLG(0x0763, 0x2031, /* M-Audio Fast Track C600 */ + QUIRK_FLAG_GENERIC_IMPLICIT_FB), ++ DEVICE_FLG(0x07fd, 0x000b, /* MOTU M Series 2nd hardware revision */ ++ QUIRK_FLAG_CTL_MSG_DELAY_1M), + DEVICE_FLG(0x08bb, 0x2702, /* LineX FM Transmitter */ + QUIRK_FLAG_IGNORE_CTL_ERROR), + DEVICE_FLG(0x0951, 0x16ad, /* Kingston HyperX */ diff --git a/queue-6.7/alsa-usb-audio-add-quirk-for-rode-nt-usb.patch b/queue-6.7/alsa-usb-audio-add-quirk-for-rode-nt-usb.patch new file mode 100644 index 00000000000..9340e697dc6 --- /dev/null +++ b/queue-6.7/alsa-usb-audio-add-quirk-for-rode-nt-usb.patch @@ -0,0 +1,50 @@ +From 7822baa844a87cbb93308c1032c3d47d4079bb8a Mon Sep 17 00:00:00 2001 +From: Sean Young +Date: Wed, 24 Jan 2024 15:15:24 +0000 +Subject: ALSA: usb-audio: add quirk for RODE NT-USB+ +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Sean Young + +commit 7822baa844a87cbb93308c1032c3d47d4079bb8a upstream. + +The RODE NT-USB+ is marketed as a professional usb microphone, however the +usb audio interface is a mess: + +[ 1.130977] usb 1-5: new full-speed USB device number 2 using xhci_hcd +[ 1.503906] usb 1-5: config 1 has an invalid interface number: 5 but max is 4 +[ 1.503912] usb 1-5: config 1 has no interface number 4 +[ 1.519689] usb 1-5: New USB device found, idVendor=19f7, idProduct=0035, bcdDevice= 1.09 +[ 1.519695] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 +[ 1.519697] usb 1-5: Product: RØDE NT-USB+ +[ 1.519699] usb 1-5: Manufacturer: RØDE +[ 1.519700] usb 1-5: SerialNumber: 1D773A1A +[ 8.327495] usb 1-5: 1:1: cannot get freq at ep 0x82 +[ 8.344500] usb 1-5: 1:2: cannot get freq at ep 0x82 +[ 8.365499] usb 1-5: 2:1: cannot get freq at ep 0x2 + +Add QUIRK_FLAG_GET_SAMPLE_RATE to work around the broken sample rate get. +I have asked Rode support to fix it, but they show no interest. + +Signed-off-by: Sean Young +Cc: +Link: https://lore.kernel.org/r/20240124151524.23314-1-sean@mess.org +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/usb/quirks.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sound/usb/quirks.c ++++ b/sound/usb/quirks.c +@@ -2183,6 +2183,8 @@ static const struct usb_audio_quirk_flag + QUIRK_FLAG_FIXED_RATE), + DEVICE_FLG(0x1bcf, 0x2283, /* NexiGo N930AF FHD Webcam */ + QUIRK_FLAG_GET_SAMPLE_RATE), ++ DEVICE_FLG(0x19f7, 0x0035, /* RODE NT-USB+ */ ++ QUIRK_FLAG_GET_SAMPLE_RATE), + + /* Vendor matches */ + VENDOR_FLG(0x045e, /* MS Lifecam */ diff --git a/queue-6.7/hrtimer-report-offline-hrtimer-enqueue.patch b/queue-6.7/hrtimer-report-offline-hrtimer-enqueue.patch new file mode 100644 index 00000000000..df2721ae530 --- /dev/null +++ b/queue-6.7/hrtimer-report-offline-hrtimer-enqueue.patch @@ -0,0 +1,78 @@ +From dad6a09f3148257ac1773cd90934d721d68ab595 Mon Sep 17 00:00:00 2001 +From: Frederic Weisbecker +Date: Mon, 29 Jan 2024 15:56:36 -0800 +Subject: hrtimer: Report offline hrtimer enqueue + +From: Frederic Weisbecker + +commit dad6a09f3148257ac1773cd90934d721d68ab595 upstream. + +The hrtimers migration on CPU-down hotplug process has been moved +earlier, before the CPU actually goes to die. This leaves a small window +of opportunity to queue an hrtimer in a blind spot, leaving it ignored. + +For example a practical case has been reported with RCU waking up a +SCHED_FIFO task right before the CPUHP_AP_IDLE_DEAD stage, queuing that +way a sched/rt timer to the local offline CPU. + +Make sure such situations never go unnoticed and warn when that happens. + +Fixes: 5c0930ccaad5 ("hrtimers: Push pending hrtimers away from outgoing CPU earlier") +Reported-by: Paul E. McKenney +Signed-off-by: Frederic Weisbecker +Signed-off-by: Paul E. McKenney +Signed-off-by: Thomas Gleixner +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20240129235646.3171983-4-boqun.feng@gmail.com +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/hrtimer.h | 4 +++- + kernel/time/hrtimer.c | 3 +++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +--- a/include/linux/hrtimer.h ++++ b/include/linux/hrtimer.h +@@ -197,6 +197,7 @@ enum hrtimer_base_type { + * @max_hang_time: Maximum time spent in hrtimer_interrupt + * @softirq_expiry_lock: Lock which is taken while softirq based hrtimer are + * expired ++ * @online: CPU is online from an hrtimers point of view + * @timer_waiters: A hrtimer_cancel() invocation waits for the timer + * callback to finish. + * @expires_next: absolute time of the next event, is required for remote +@@ -219,7 +220,8 @@ struct hrtimer_cpu_base { + unsigned int hres_active : 1, + in_hrtirq : 1, + hang_detected : 1, +- softirq_activated : 1; ++ softirq_activated : 1, ++ online : 1; + #ifdef CONFIG_HIGH_RES_TIMERS + unsigned int nr_events; + unsigned short nr_retries; +--- a/kernel/time/hrtimer.c ++++ b/kernel/time/hrtimer.c +@@ -1085,6 +1085,7 @@ static int enqueue_hrtimer(struct hrtime + enum hrtimer_mode mode) + { + debug_activate(timer, mode); ++ WARN_ON_ONCE(!base->cpu_base->online); + + base->cpu_base->active_bases |= 1 << base->index; + +@@ -2183,6 +2184,7 @@ int hrtimers_prepare_cpu(unsigned int cp + cpu_base->softirq_next_timer = NULL; + cpu_base->expires_next = KTIME_MAX; + cpu_base->softirq_expires_next = KTIME_MAX; ++ cpu_base->online = 1; + hrtimer_cpu_base_init_expiry_lock(cpu_base); + return 0; + } +@@ -2250,6 +2252,7 @@ int hrtimers_cpu_dying(unsigned int dyin + smp_call_function_single(ncpu, retrigger_next_event, NULL, 0); + + raw_spin_unlock(&new_base->lock); ++ old_base->online = 0; + raw_spin_unlock(&old_base->lock); + + return 0; diff --git a/queue-6.7/input-atkbd-skip-atkbd_cmd_setleds-when-skipping-atkbd_cmd_getid.patch b/queue-6.7/input-atkbd-skip-atkbd_cmd_setleds-when-skipping-atkbd_cmd_getid.patch new file mode 100644 index 00000000000..b7b5cbd4e8d --- /dev/null +++ b/queue-6.7/input-atkbd-skip-atkbd_cmd_setleds-when-skipping-atkbd_cmd_getid.patch @@ -0,0 +1,82 @@ +From 683cd8259a9b883a51973511f860976db2550a6e Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Fri, 26 Jan 2024 17:07:23 +0100 +Subject: Input: atkbd - skip ATKBD_CMD_SETLEDS when skipping ATKBD_CMD_GETID + +From: Hans de Goede + +commit 683cd8259a9b883a51973511f860976db2550a6e upstream. + +After commit 936e4d49ecbc ("Input: atkbd - skip ATKBD_CMD_GETID in +translated mode") the keyboard on Dell XPS 13 9350 / 9360 / 9370 models +has stopped working after a suspend/resume. + +The problem appears to be that atkbd_probe() fails when called +from atkbd_reconnect() on resume, which on systems where +ATKBD_CMD_GETID is skipped can only happen by ATKBD_CMD_SETLEDS +failing. ATKBD_CMD_SETLEDS failing because ATKBD_CMD_GETID was +skipped is weird, but apparently that is what is happening. + +Fix this by also skipping ATKBD_CMD_SETLEDS when skipping +ATKBD_CMD_GETID. + +Fixes: 936e4d49ecbc ("Input: atkbd - skip ATKBD_CMD_GETID in translated mode") +Reported-by: Paul Menzel +Closes: https://lore.kernel.org/linux-input/0aa4a61f-c939-46fe-a572-08022e8931c7@molgen.mpg.de/ +Closes: https://bbs.archlinux.org/viewtopic.php?pid=2146300 +Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218424 +Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2260517 +Tested-by: Paul Menzel +Cc: stable@vger.kernel.org +Signed-off-by: Hans de Goede +Link: https://lore.kernel.org/r/20240126160724.13278-2-hdegoede@redhat.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman +--- + drivers/input/keyboard/atkbd.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +--- a/drivers/input/keyboard/atkbd.c ++++ b/drivers/input/keyboard/atkbd.c +@@ -811,7 +811,6 @@ static int atkbd_probe(struct atkbd *atk + { + struct ps2dev *ps2dev = &atkbd->ps2dev; + unsigned char param[2]; +- bool skip_getid; + + /* + * Some systems, where the bit-twiddling when testing the io-lines of the +@@ -825,6 +824,11 @@ static int atkbd_probe(struct atkbd *atk + "keyboard reset failed on %s\n", + ps2dev->serio->phys); + ++ if (atkbd_skip_getid(atkbd)) { ++ atkbd->id = 0xab83; ++ return 0; ++ } ++ + /* + * Then we check the keyboard ID. We should get 0xab83 under normal conditions. + * Some keyboards report different values, but the first byte is always 0xab or +@@ -833,18 +837,17 @@ static int atkbd_probe(struct atkbd *atk + */ + + param[0] = param[1] = 0xa5; /* initialize with invalid values */ +- skip_getid = atkbd_skip_getid(atkbd); +- if (skip_getid || ps2_command(ps2dev, param, ATKBD_CMD_GETID)) { ++ if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) { + + /* +- * If the get ID command was skipped or failed, we check if we can at least set ++ * If the get ID command failed, we check if we can at least set + * the LEDs on the keyboard. This should work on every keyboard out there. + * It also turns the LEDs off, which we want anyway. + */ + param[0] = 0; + if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS)) + return -1; +- atkbd->id = skip_getid ? 0xab83 : 0xabba; ++ atkbd->id = 0xabba; + return 0; + } + diff --git a/queue-6.7/input-i8042-fix-strange-behavior-of-touchpad-on-clevo-ns70pu.patch b/queue-6.7/input-i8042-fix-strange-behavior-of-touchpad-on-clevo-ns70pu.patch new file mode 100644 index 00000000000..7d5eaba1060 --- /dev/null +++ b/queue-6.7/input-i8042-fix-strange-behavior-of-touchpad-on-clevo-ns70pu.patch @@ -0,0 +1,47 @@ +From a60e6c3918d20848906ffcdfcf72ca6a8cfbcf2e Mon Sep 17 00:00:00 2001 +From: Werner Sembach +Date: Tue, 5 Dec 2023 17:36:01 +0100 +Subject: Input: i8042 - fix strange behavior of touchpad on Clevo NS70PU + +From: Werner Sembach + +commit a60e6c3918d20848906ffcdfcf72ca6a8cfbcf2e upstream. + +When closing the laptop lid with an external screen connected, the mouse +pointer has a constant movement to the lower right corner. Opening the +lid again stops this movement, but after that the touchpad does no longer +register clicks. + +The touchpad is connected both via i2c-hid and PS/2, the predecessor of +this device (NS70MU) has the same layout in this regard and also strange +behaviour caused by the psmouse and the i2c-hid driver fighting over +touchpad control. This fix is reusing the same workaround by just +disabling the PS/2 aux port, that is only used by the touchpad, to give the +i2c-hid driver the lone control over the touchpad. + +v2: Rebased on current master + +Signed-off-by: Werner Sembach +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20231205163602.16106-1-wse@tuxedocomputers.com +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman +--- + drivers/input/serio/i8042-acpipnpio.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/input/serio/i8042-acpipnpio.h ++++ b/drivers/input/serio/i8042-acpipnpio.h +@@ -1210,6 +1210,12 @@ static const struct dmi_system_id i8042_ + }, + { + .matches = { ++ DMI_MATCH(DMI_BOARD_NAME, "NS5x_7xPU"), ++ }, ++ .driver_data = (void *)(SERIO_QUIRK_NOAUX) ++ }, ++ { ++ .matches = { + DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | diff --git a/queue-6.7/revert-drm-amd-pm-fix-the-high-voltage-and-temperature-issue.patch b/queue-6.7/revert-drm-amd-pm-fix-the-high-voltage-and-temperature-issue.patch new file mode 100644 index 00000000000..425ce169cd0 --- /dev/null +++ b/queue-6.7/revert-drm-amd-pm-fix-the-high-voltage-and-temperature-issue.patch @@ -0,0 +1,165 @@ +From c92c108403b09f75f3393588c2326ecad49ee2e2 Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +Date: Fri, 19 Jan 2024 03:08:37 -0600 +Subject: Revert "drm/amd/pm: fix the high voltage and temperature issue" + +From: Mario Limonciello + +commit c92c108403b09f75f3393588c2326ecad49ee2e2 upstream. + +This reverts commit 5f38ac54e60562323ea4abb1bfb37d043ee23357. +This causes issues with rebooting and the 7800XT. + +Cc: Kenneth Feng +Cc: stable@vger.kernel.org +Fixes: 5f38ac54e605 ("drm/amd/pm: fix the high voltage and temperature issue") +Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3062 +Signed-off-by: Mario Limonciello +Acked-by: Alex Deucher +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 24 ++++--------- + drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 33 +------------------ + drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 1 + drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 8 ---- + drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 8 ---- + 5 files changed, 11 insertions(+), 63 deletions(-) + +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -4051,23 +4051,13 @@ int amdgpu_device_init(struct amdgpu_dev + } + } + } else { +- switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { +- case IP_VERSION(13, 0, 0): +- case IP_VERSION(13, 0, 7): +- case IP_VERSION(13, 0, 10): +- r = psp_gpu_reset(adev); +- break; +- default: +- tmp = amdgpu_reset_method; +- /* It should do a default reset when loading or reloading the driver, +- * regardless of the module parameter reset_method. +- */ +- amdgpu_reset_method = AMD_RESET_METHOD_NONE; +- r = amdgpu_asic_reset(adev); +- amdgpu_reset_method = tmp; +- break; +- } +- ++ tmp = amdgpu_reset_method; ++ /* It should do a default reset when loading or reloading the driver, ++ * regardless of the module parameter reset_method. ++ */ ++ amdgpu_reset_method = AMD_RESET_METHOD_NONE; ++ r = amdgpu_asic_reset(adev); ++ amdgpu_reset_method = tmp; + if (r) { + dev_err(adev->dev, "asic reset on init failed\n"); + goto failed; +--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c ++++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +@@ -734,7 +734,7 @@ static int smu_early_init(void *handle) + smu->adev = adev; + smu->pm_enabled = !!amdgpu_dpm; + smu->is_apu = false; +- smu->smu_baco.state = SMU_BACO_STATE_NONE; ++ smu->smu_baco.state = SMU_BACO_STATE_EXIT; + smu->smu_baco.platform_support = false; + smu->user_dpm_profile.fan_mode = -1; + +@@ -1746,31 +1746,10 @@ static int smu_smc_hw_cleanup(struct smu + return 0; + } + +-static int smu_reset_mp1_state(struct smu_context *smu) +-{ +- struct amdgpu_device *adev = smu->adev; +- int ret = 0; +- +- if ((!adev->in_runpm) && (!adev->in_suspend) && +- (!amdgpu_in_reset(adev))) +- switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) { +- case IP_VERSION(13, 0, 0): +- case IP_VERSION(13, 0, 7): +- case IP_VERSION(13, 0, 10): +- ret = smu_set_mp1_state(smu, PP_MP1_STATE_UNLOAD); +- break; +- default: +- break; +- } +- +- return ret; +-} +- + static int smu_hw_fini(void *handle) + { + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + struct smu_context *smu = adev->powerplay.pp_handle; +- int ret; + + if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev)) + return 0; +@@ -1788,15 +1767,7 @@ static int smu_hw_fini(void *handle) + + adev->pm.dpm_enabled = false; + +- ret = smu_smc_hw_cleanup(smu); +- if (ret) +- return ret; +- +- ret = smu_reset_mp1_state(smu); +- if (ret) +- return ret; +- +- return 0; ++ return smu_smc_hw_cleanup(smu); + } + + static void smu_late_fini(void *handle) +--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h ++++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h +@@ -419,7 +419,6 @@ enum smu_reset_mode { + enum smu_baco_state { + SMU_BACO_STATE_ENTER = 0, + SMU_BACO_STATE_EXIT, +- SMU_BACO_STATE_NONE, + }; + + struct smu_baco_context { +--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c ++++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +@@ -2773,13 +2773,7 @@ static int smu_v13_0_0_set_mp1_state(str + + switch (mp1_state) { + case PP_MP1_STATE_UNLOAD: +- ret = smu_cmn_send_smc_msg_with_param(smu, +- SMU_MSG_PrepareMp1ForUnload, +- 0x55, NULL); +- +- if (!ret && smu->smu_baco.state == SMU_BACO_STATE_EXIT) +- ret = smu_v13_0_disable_pmfw_state(smu); +- ++ ret = smu_cmn_set_mp1_state(smu, mp1_state); + break; + default: + /* Ignore others */ +--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c ++++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +@@ -2500,13 +2500,7 @@ static int smu_v13_0_7_set_mp1_state(str + + switch (mp1_state) { + case PP_MP1_STATE_UNLOAD: +- ret = smu_cmn_send_smc_msg_with_param(smu, +- SMU_MSG_PrepareMp1ForUnload, +- 0x55, NULL); +- +- if (!ret && smu->smu_baco.state == SMU_BACO_STATE_EXIT) +- ret = smu_v13_0_disable_pmfw_state(smu); +- ++ ret = smu_cmn_set_mp1_state(smu, mp1_state); + break; + default: + /* Ignore others */ diff --git a/queue-6.7/revert-usb-typec-tcpm-fix-cc-role-at-port-reset.patch b/queue-6.7/revert-usb-typec-tcpm-fix-cc-role-at-port-reset.patch new file mode 100644 index 00000000000..3c73c476968 --- /dev/null +++ b/queue-6.7/revert-usb-typec-tcpm-fix-cc-role-at-port-reset.patch @@ -0,0 +1,50 @@ +From b717dfbf73e842d15174699fe2c6ee4fdde8aa1f Mon Sep 17 00:00:00 2001 +From: Badhri Jagan Sridharan +Date: Wed, 17 Jan 2024 11:47:42 +0000 +Subject: Revert "usb: typec: tcpm: fix cc role at port reset" + +From: Badhri Jagan Sridharan + +commit b717dfbf73e842d15174699fe2c6ee4fdde8aa1f upstream. + +This reverts commit 1e35f074399dece73d5df11847d4a0d7a6f49434. + +Given that ERROR_RECOVERY calls into PORT_RESET for Hi-Zing +the CC pins, setting CC pins to default state during PORT_RESET +breaks error recovery. + +4.5.2.2.2.1 ErrorRecovery State Requirements +The port shall not drive VBUS or VCONN, and shall present a +high-impedance to ground (above zOPEN) on its CC1 and CC2 pins. + +Hi-Zing the CC pins is the inteded behavior for PORT_RESET. +CC pins are set to default state after tErrorRecovery in +PORT_RESET_WAIT_OFF. + +4.5.2.2.2.2 Exiting From ErrorRecovery State +A Sink shall transition to Unattached.SNK after tErrorRecovery. +A Source shall transition to Unattached.SRC after tErrorRecovery. + +Cc: stable@vger.kernel.org +Cc: Frank Wang +Fixes: 1e35f074399d ("usb: typec: tcpm: fix cc role at port reset") +Signed-off-by: Badhri Jagan Sridharan +Reviewed-by: Guenter Roeck +Link: https://lore.kernel.org/r/20240117114742.2587779-1-badhri@google.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/typec/tcpm/tcpm.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/usb/typec/tcpm/tcpm.c ++++ b/drivers/usb/typec/tcpm/tcpm.c +@@ -4862,8 +4862,7 @@ static void run_state_machine(struct tcp + break; + case PORT_RESET: + tcpm_reset_port(port); +- tcpm_set_cc(port, tcpm_default_state(port) == SNK_UNATTACHED ? +- TYPEC_CC_RD : tcpm_rp_cc(port)); ++ tcpm_set_cc(port, TYPEC_CC_OPEN); + tcpm_set_state(port, PORT_RESET_WAIT_OFF, + PD_T_ERROR_RECOVERY); + break; diff --git a/queue-6.7/series b/queue-6.7/series index f81d15d46e5..8384bc70db7 100644 --- a/queue-6.7/series +++ b/queue-6.7/series @@ -84,3 +84,21 @@ riscv-declare-overflow_stack-as-exported-from-traps..patch nvme-host-fix-the-updating-of-the-firmware-version.patch selftests-core-include-linux-close_range.h-for-close.patch blk-iocost-fix-an-ubsan-shift-out-of-bounds-warning.patch +alsa-usb-audio-add-delay-quirk-for-motu-m-series-2nd-revision.patch +alsa-usb-audio-add-a-quirk-for-yamaha-yit-w12tx-transmitter.patch +alsa-usb-audio-add-quirk-for-rode-nt-usb.patch +usb-serial-qcserial-add-new-usb-id-for-dell-wireless-dw5826e.patch +usb-serial-option-add-fibocom-fm101-gl-variant.patch +usb-serial-cp210x-add-id-for-imst-im871a-usb.patch +revert-usb-typec-tcpm-fix-cc-role-at-port-reset.patch +revert-drm-amd-pm-fix-the-high-voltage-and-temperature-issue.patch +x86-lib-revert-to-_asm_extable_ua-for-get-put-_user-fixups.patch +usb-dwc3-host-set-xhci_sg_trb_cache_size_quirk.patch +usb-host-xhci-plat-add-support-for-xhci_sg_trb_cache_size_quirk.patch +xhci-process-isoc-td-properly-when-there-was-a-transaction-error-mid-td.patch +xhci-handle-isoc-babble-and-buffer-overrun-events-properly.patch +usb-dwc3-pci-add-support-for-the-intel-arrow-lake-h.patch +hrtimer-report-offline-hrtimer-enqueue.patch +input-i8042-fix-strange-behavior-of-touchpad-on-clevo-ns70pu.patch +input-atkbd-skip-atkbd_cmd_setleds-when-skipping-atkbd_cmd_getid.patch +wifi-iwlwifi-mvm-fix-a-battery-life-regression.patch diff --git a/queue-6.7/usb-dwc3-host-set-xhci_sg_trb_cache_size_quirk.patch b/queue-6.7/usb-dwc3-host-set-xhci_sg_trb_cache_size_quirk.patch new file mode 100644 index 00000000000..f9a1a4ef996 --- /dev/null +++ b/queue-6.7/usb-dwc3-host-set-xhci_sg_trb_cache_size_quirk.patch @@ -0,0 +1,57 @@ +From 817349b6d26aadd8b38283a05ce0bab106b4c765 Mon Sep 17 00:00:00 2001 +From: Prashanth K +Date: Tue, 16 Jan 2024 11:28:15 +0530 +Subject: usb: dwc3: host: Set XHCI_SG_TRB_CACHE_SIZE_QUIRK + +From: Prashanth K + +commit 817349b6d26aadd8b38283a05ce0bab106b4c765 upstream. + +Upstream commit bac1ec551434 ("usb: xhci: Set quirk for +XHCI_SG_TRB_CACHE_SIZE_QUIRK") introduced a new quirk in XHCI +which fixes XHC timeout, which was seen on synopsys XHCs while +using SG buffers. But the support for this quirk isn't present +in the DWC3 layer. + +We will encounter this XHCI timeout/hung issue if we run iperf +loopback tests using RTL8156 ethernet adaptor on DWC3 targets +with scatter-gather enabled. This gets resolved after enabling +the XHCI_SG_TRB_CACHE_SIZE_QUIRK. This patch enables it using +the xhci device property since its needed for DWC3 controller. + +In Synopsys DWC3 databook, +Table 9-3: xHCI Debug Capability Limitations +Chained TRBs greater than TRB cache size: The debug capability +driver must not create a multi-TRB TD that describes smaller +than a 1K packet that spreads across 8 or more TRBs on either +the IN TR or the OUT TR. + +Cc: stable@vger.kernel.org #5.11 +Signed-off-by: Prashanth K +Acked-by: Thinh Nguyen +Link: https://lore.kernel.org/r/20240116055816.1169821-2-quic_prashk@quicinc.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/dwc3/host.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/usb/dwc3/host.c ++++ b/drivers/usb/dwc3/host.c +@@ -61,7 +61,7 @@ out: + + int dwc3_host_init(struct dwc3 *dwc) + { +- struct property_entry props[4]; ++ struct property_entry props[5]; + struct platform_device *xhci; + int ret, irq; + int prop_idx = 0; +@@ -89,6 +89,8 @@ int dwc3_host_init(struct dwc3 *dwc) + + memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props)); + ++ props[prop_idx++] = PROPERTY_ENTRY_BOOL("xhci-sg-trb-cache-size-quirk"); ++ + if (dwc->usb3_lpm_capable) + props[prop_idx++] = PROPERTY_ENTRY_BOOL("usb3-lpm-capable"); + diff --git a/queue-6.7/usb-dwc3-pci-add-support-for-the-intel-arrow-lake-h.patch b/queue-6.7/usb-dwc3-pci-add-support-for-the-intel-arrow-lake-h.patch new file mode 100644 index 00000000000..423f7654348 --- /dev/null +++ b/queue-6.7/usb-dwc3-pci-add-support-for-the-intel-arrow-lake-h.patch @@ -0,0 +1,41 @@ +From de4b5b28c87ccae4da268a53c5df135437f5cfde Mon Sep 17 00:00:00 2001 +From: Heikki Krogerus +Date: Mon, 15 Jan 2024 11:28:20 +0200 +Subject: usb: dwc3: pci: add support for the Intel Arrow Lake-H + +From: Heikki Krogerus + +commit de4b5b28c87ccae4da268a53c5df135437f5cfde upstream. + +This patch adds the necessary PCI ID for Intel Arrow Lake-H +devices. + +Acked-by: Thinh Nguyen +Signed-off-by: Heikki Krogerus +Cc: stable@vger.kernel.org +Link: https://lore.kernel.org/r/20240115092820.1454492-1-heikki.krogerus@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/dwc3/dwc3-pci.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/dwc3/dwc3-pci.c ++++ b/drivers/usb/dwc3/dwc3-pci.c +@@ -51,6 +51,8 @@ + #define PCI_DEVICE_ID_INTEL_MTLP 0x7ec1 + #define PCI_DEVICE_ID_INTEL_MTLS 0x7f6f + #define PCI_DEVICE_ID_INTEL_MTL 0x7e7e ++#define PCI_DEVICE_ID_INTEL_ARLH 0x7ec1 ++#define PCI_DEVICE_ID_INTEL_ARLH_PCH 0x777e + #define PCI_DEVICE_ID_INTEL_TGL 0x9a15 + #define PCI_DEVICE_ID_AMD_MR 0x163a + +@@ -421,6 +423,8 @@ static const struct pci_device_id dwc3_p + { PCI_DEVICE_DATA(INTEL, MTLP, &dwc3_pci_intel_swnode) }, + { PCI_DEVICE_DATA(INTEL, MTL, &dwc3_pci_intel_swnode) }, + { PCI_DEVICE_DATA(INTEL, MTLS, &dwc3_pci_intel_swnode) }, ++ { PCI_DEVICE_DATA(INTEL, ARLH, &dwc3_pci_intel_swnode) }, ++ { PCI_DEVICE_DATA(INTEL, ARLH_PCH, &dwc3_pci_intel_swnode) }, + { PCI_DEVICE_DATA(INTEL, TGL, &dwc3_pci_intel_swnode) }, + + { PCI_DEVICE_DATA(AMD, NL_USB, &dwc3_pci_amd_swnode) }, diff --git a/queue-6.7/usb-host-xhci-plat-add-support-for-xhci_sg_trb_cache_size_quirk.patch b/queue-6.7/usb-host-xhci-plat-add-support-for-xhci_sg_trb_cache_size_quirk.patch new file mode 100644 index 00000000000..b7b1337c9b2 --- /dev/null +++ b/queue-6.7/usb-host-xhci-plat-add-support-for-xhci_sg_trb_cache_size_quirk.patch @@ -0,0 +1,38 @@ +From 520b391e3e813c1dd142d1eebb3ccfa6d08c3995 Mon Sep 17 00:00:00 2001 +From: Prashanth K +Date: Tue, 16 Jan 2024 11:28:16 +0530 +Subject: usb: host: xhci-plat: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK + +From: Prashanth K + +commit 520b391e3e813c1dd142d1eebb3ccfa6d08c3995 upstream. + +Upstream commit bac1ec551434 ("usb: xhci: Set quirk for +XHCI_SG_TRB_CACHE_SIZE_QUIRK") introduced a new quirk in XHCI +which fixes XHC timeout, which was seen on synopsys XHCs while +using SG buffers. Currently this quirk can only be set using +xhci private data. But there are some drivers like dwc3/host.c +which adds adds quirks using software node for xhci device. +Hence set this xhci quirk by iterating over device properties. + +Cc: stable@vger.kernel.org # 5.11 +Fixes: bac1ec551434 ("usb: xhci: Set quirk for XHCI_SG_TRB_CACHE_SIZE_QUIRK") +Signed-off-by: Prashanth K +Link: https://lore.kernel.org/r/20240116055816.1169821-3-quic_prashk@quicinc.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-plat.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/host/xhci-plat.c ++++ b/drivers/usb/host/xhci-plat.c +@@ -250,6 +250,9 @@ int xhci_plat_probe(struct platform_devi + if (device_property_read_bool(tmpdev, "quirk-broken-port-ped")) + xhci->quirks |= XHCI_BROKEN_PORT_PED; + ++ if (device_property_read_bool(tmpdev, "xhci-sg-trb-cache-size-quirk")) ++ xhci->quirks |= XHCI_SG_TRB_CACHE_SIZE_QUIRK; ++ + device_property_read_u32(tmpdev, "imod-interval-ns", + &xhci->imod_interval); + } diff --git a/queue-6.7/usb-serial-cp210x-add-id-for-imst-im871a-usb.patch b/queue-6.7/usb-serial-cp210x-add-id-for-imst-im871a-usb.patch new file mode 100644 index 00000000000..7cb5ec5b2c7 --- /dev/null +++ b/queue-6.7/usb-serial-cp210x-add-id-for-imst-im871a-usb.patch @@ -0,0 +1,31 @@ +From 12b17b4eb82a41977eb848048137b5908d52845c Mon Sep 17 00:00:00 2001 +From: Leonard Dallmayr +Date: Fri, 5 Jan 2024 13:35:51 +0100 +Subject: USB: serial: cp210x: add ID for IMST iM871A-USB + +From: Leonard Dallmayr + +commit 12b17b4eb82a41977eb848048137b5908d52845c upstream. + +The device IMST USB-Stick for Smart Meter is a rebranded IMST iM871A-USB +Wireless M-Bus USB-adapter. It is used to read wireless water, gas and +electricity meters. + +Signed-off-by: Leonard Dallmayr +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/cp210x.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -146,6 +146,7 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ + { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ + { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ ++ { USB_DEVICE(0x10C4, 0x87ED) }, /* IMST USB-Stick for Smart Meter */ + { USB_DEVICE(0x10C4, 0x8856) }, /* CEL EM357 ZigBee USB Stick - LR */ + { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */ + { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ diff --git a/queue-6.7/usb-serial-option-add-fibocom-fm101-gl-variant.patch b/queue-6.7/usb-serial-option-add-fibocom-fm101-gl-variant.patch new file mode 100644 index 00000000000..abe6d3adfaf --- /dev/null +++ b/queue-6.7/usb-serial-option-add-fibocom-fm101-gl-variant.patch @@ -0,0 +1,54 @@ +From b4a1f4eaf1d798066affc6ad040f76eb1a16e1c9 Mon Sep 17 00:00:00 2001 +From: Puliang Lu +Date: Wed, 31 Jan 2024 17:12:24 +0800 +Subject: USB: serial: option: add Fibocom FM101-GL variant + +From: Puliang Lu + +commit b4a1f4eaf1d798066affc6ad040f76eb1a16e1c9 upstream. + +Update the USB serial option driver support for the Fibocom +FM101-GL +LTE modules as there are actually several different variants. +- VID:PID 2cb7:01a3, FM101-GL are laptop M.2 cards (with +MBIM interfaces for /Linux/Chrome OS) + +0x01a3:mbim,gnss + +Here are the outputs of usb-devices: + +T: Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=5000 MxCh= 0 +D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1 +P: Vendor=2cb7 ProdID=01a3 Rev=05.04 +S: Manufacturer=Fibocom Wireless Inc. +S: Product=Fibocom FM101-GL Module +S: SerialNumber=5ccd5cd4 +C: #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=896mA +I: If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim +E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=32ms +I: If#= 1 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 +I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 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 + +Signed-off-by: Puliang Lu +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/option.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -2269,6 +2269,7 @@ static const struct usb_device_id option + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ ++ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a3, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */ + .driver_info = RSVD(4) }, + { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ diff --git a/queue-6.7/usb-serial-qcserial-add-new-usb-id-for-dell-wireless-dw5826e.patch b/queue-6.7/usb-serial-qcserial-add-new-usb-id-for-dell-wireless-dw5826e.patch new file mode 100644 index 00000000000..10fbe1c251b --- /dev/null +++ b/queue-6.7/usb-serial-qcserial-add-new-usb-id-for-dell-wireless-dw5826e.patch @@ -0,0 +1,71 @@ +From 129690fb229a20b6e563a77a2c85266acecf20bc Mon Sep 17 00:00:00 2001 +From: JackBB Wu +Date: Tue, 23 Jan 2024 17:39:48 +0800 +Subject: USB: serial: qcserial: add new usb-id for Dell Wireless DW5826e + +From: JackBB Wu + +commit 129690fb229a20b6e563a77a2c85266acecf20bc upstream. + +Add support for Dell DW5826e with USB-id 0x413c:0x8217 & 0x413c:0x8218. + +It is 0x413c:0x8217 +T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 4 Spd=480 MxCh= 0 +D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=413c ProdID=8217 Rev= 5.04 +S: Manufacturer=DELL +S: Product=COMPAL Electronics EXM-G1A +S: SerialNumber=359302940050401 +C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA +I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=qcserial +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=qcserial +E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms +E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=qcserial +E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms +E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +E: Ad=87(I) Atr=03(Int.) MxPS= 64 Ivl=32ms +I:* If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan +E: Ad=88(I) Atr=03(Int.) MxPS= 8 Ivl=32ms +E: Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +It is 0x413c:0x8218 +T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 3 Spd=480 MxCh= 0 +D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 +P: Vendor=413c ProdID=8218 Rev= 0.00 +S: Manufacturer=DELL +S: Product=COMPAL Electronics EXM-G1A +S: SerialNumber=359302940050401 +C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 2mA +I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=qcserial +E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms + +Signed-off-by: JackBB Wu +Cc: stable@vger.kernel.org +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/serial/qcserial.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -184,6 +184,8 @@ static const struct usb_device_id id_tab + {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */ + {DEVICE_SWI(0x413c, 0x81d1)}, /* Dell Wireless 5818 */ + {DEVICE_SWI(0x413c, 0x81d2)}, /* Dell Wireless 5818 */ ++ {DEVICE_SWI(0x413c, 0x8217)}, /* Dell Wireless DW5826e */ ++ {DEVICE_SWI(0x413c, 0x8218)}, /* Dell Wireless DW5826e QDL */ + + /* Huawei devices */ + {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */ diff --git a/queue-6.7/wifi-iwlwifi-mvm-fix-a-battery-life-regression.patch b/queue-6.7/wifi-iwlwifi-mvm-fix-a-battery-life-regression.patch new file mode 100644 index 00000000000..5af69810411 --- /dev/null +++ b/queue-6.7/wifi-iwlwifi-mvm-fix-a-battery-life-regression.patch @@ -0,0 +1,36 @@ +From 1fa942f31665ea5dc5d4d95893dd13723eaa97cc Mon Sep 17 00:00:00 2001 +From: Emmanuel Grumbach +Date: Sun, 28 Jan 2024 08:53:57 +0200 +Subject: wifi: iwlwifi: mvm: fix a battery life regression + +From: Emmanuel Grumbach + +commit 1fa942f31665ea5dc5d4d95893dd13723eaa97cc upstream. + +Fix the DBG_CONFIG_TOKEN to not enable debug components that would +prevent the device to save power. + +Fixes: fc2fe0a5e856 ("wifi: iwlwifi: fw: disable firmware debug asserts") +Cc: stable@vger.kernel.org +Signed-off-by: Emmanuel Grumbach +Reviewed-by: Eilon Rinat +Reviewed-by: Gregory Greenman +Signed-off-by: Miri Korenblit +Link: https://msgid.link/20240128084842.90d2600edc27.Id657ea2f0ddb131f5f9d0ac39aeb8c88754fe54b@changeid +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/wireless/intel/iwlwifi/fw/api/debug.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h ++++ b/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h +@@ -531,7 +531,7 @@ enum iwl_fw_dbg_config_cmd_type { + }; /* LDBG_CFG_CMD_TYPE_API_E_VER_1 */ + + /* this token disables debug asserts in the firmware */ +-#define IWL_FW_DBG_CONFIG_TOKEN 0x00011301 ++#define IWL_FW_DBG_CONFIG_TOKEN 0x00010001 + + /** + * struct iwl_fw_dbg_config_cmd - configure FW debug diff --git a/queue-6.7/x86-lib-revert-to-_asm_extable_ua-for-get-put-_user-fixups.patch b/queue-6.7/x86-lib-revert-to-_asm_extable_ua-for-get-put-_user-fixups.patch new file mode 100644 index 00000000000..92f72bf1ae5 --- /dev/null +++ b/queue-6.7/x86-lib-revert-to-_asm_extable_ua-for-get-put-_user-fixups.patch @@ -0,0 +1,127 @@ +From 8eed4e00a370b37b4e5985ed983dccedd555ea9d Mon Sep 17 00:00:00 2001 +From: Qiuxu Zhuo +Date: Mon, 29 Jan 2024 14:38:42 +0800 +Subject: x86/lib: Revert to _ASM_EXTABLE_UA() for {get,put}_user() fixups + +From: Qiuxu Zhuo + +commit 8eed4e00a370b37b4e5985ed983dccedd555ea9d upstream. + +During memory error injection test on kernels >= v6.4, the kernel panics +like below. However, this issue couldn't be reproduced on kernels <= v6.3. + + mce: [Hardware Error]: CPU 296: Machine Check Exception: f Bank 1: bd80000000100134 + mce: [Hardware Error]: RIP 10: {__get_user_nocheck_4+0x6/0x20} + mce: [Hardware Error]: TSC 411a93533ed ADDR 346a8730040 MISC 86 + mce: [Hardware Error]: PROCESSOR 0:a06d0 TIME 1706000767 SOCKET 1 APIC 211 microcode 80001490 + mce: [Hardware Error]: Run the above through 'mcelog --ascii' + mce: [Hardware Error]: Machine check: Data load in unrecoverable area of kernel + Kernel panic - not syncing: Fatal local machine check + +The MCA code can recover from an in-kernel #MC if the fixup type is +EX_TYPE_UACCESS, explicitly indicating that the kernel is attempting to +access userspace memory. However, if the fixup type is EX_TYPE_DEFAULT +the only thing that is raised for an in-kernel #MC is a panic. + +ex_handler_uaccess() would warn if users gave a non-canonical addresses +(with bit 63 clear) to {get, put}_user(), which was unexpected. + +Therefore, commit + + b19b74bc99b1 ("x86/mm: Rework address range check in get_user() and put_user()") + +replaced _ASM_EXTABLE_UA() with _ASM_EXTABLE() for {get, put}_user() +fixups. However, the new fixup type EX_TYPE_DEFAULT results in a panic. + +Commit + + 6014bc27561f ("x86-64: make access_ok() independent of LAM") + +added the check gp_fault_address_ok() right before the WARN_ONCE() in +ex_handler_uaccess() to not warn about non-canonical user addresses due +to LAM. + +With that in place, revert back to _ASM_EXTABLE_UA() for {get,put}_user() +exception fixups in order to be able to handle in-kernel MCEs correctly +again. + + [ bp: Massage commit message. ] + +Fixes: b19b74bc99b1 ("x86/mm: Rework address range check in get_user() and put_user()") +Signed-off-by: Qiuxu Zhuo +Signed-off-by: Borislav Petkov (AMD) +Reviewed-by: Kirill A. Shutemov +Cc: +Link: https://lore.kernel.org/r/20240129063842.61584-1-qiuxu.zhuo@intel.com +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/lib/getuser.S | 24 ++++++++++++------------ + arch/x86/lib/putuser.S | 20 ++++++++++---------- + 2 files changed, 22 insertions(+), 22 deletions(-) + +--- a/arch/x86/lib/getuser.S ++++ b/arch/x86/lib/getuser.S +@@ -163,23 +163,23 @@ SYM_CODE_END(__get_user_8_handle_excepti + #endif + + /* get_user */ +- _ASM_EXTABLE(1b, __get_user_handle_exception) +- _ASM_EXTABLE(2b, __get_user_handle_exception) +- _ASM_EXTABLE(3b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(1b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(2b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(3b, __get_user_handle_exception) + #ifdef CONFIG_X86_64 +- _ASM_EXTABLE(4b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(4b, __get_user_handle_exception) + #else +- _ASM_EXTABLE(4b, __get_user_8_handle_exception) +- _ASM_EXTABLE(5b, __get_user_8_handle_exception) ++ _ASM_EXTABLE_UA(4b, __get_user_8_handle_exception) ++ _ASM_EXTABLE_UA(5b, __get_user_8_handle_exception) + #endif + + /* __get_user */ +- _ASM_EXTABLE(6b, __get_user_handle_exception) +- _ASM_EXTABLE(7b, __get_user_handle_exception) +- _ASM_EXTABLE(8b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(6b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(7b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(8b, __get_user_handle_exception) + #ifdef CONFIG_X86_64 +- _ASM_EXTABLE(9b, __get_user_handle_exception) ++ _ASM_EXTABLE_UA(9b, __get_user_handle_exception) + #else +- _ASM_EXTABLE(9b, __get_user_8_handle_exception) +- _ASM_EXTABLE(10b, __get_user_8_handle_exception) ++ _ASM_EXTABLE_UA(9b, __get_user_8_handle_exception) ++ _ASM_EXTABLE_UA(10b, __get_user_8_handle_exception) + #endif +--- a/arch/x86/lib/putuser.S ++++ b/arch/x86/lib/putuser.S +@@ -133,15 +133,15 @@ SYM_CODE_START_LOCAL(__put_user_handle_e + RET + SYM_CODE_END(__put_user_handle_exception) + +- _ASM_EXTABLE(1b, __put_user_handle_exception) +- _ASM_EXTABLE(2b, __put_user_handle_exception) +- _ASM_EXTABLE(3b, __put_user_handle_exception) +- _ASM_EXTABLE(4b, __put_user_handle_exception) +- _ASM_EXTABLE(5b, __put_user_handle_exception) +- _ASM_EXTABLE(6b, __put_user_handle_exception) +- _ASM_EXTABLE(7b, __put_user_handle_exception) +- _ASM_EXTABLE(9b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(1b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(2b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(3b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(4b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(5b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(6b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(7b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(9b, __put_user_handle_exception) + #ifdef CONFIG_X86_32 +- _ASM_EXTABLE(8b, __put_user_handle_exception) +- _ASM_EXTABLE(10b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(8b, __put_user_handle_exception) ++ _ASM_EXTABLE_UA(10b, __put_user_handle_exception) + #endif diff --git a/queue-6.7/xhci-handle-isoc-babble-and-buffer-overrun-events-properly.patch b/queue-6.7/xhci-handle-isoc-babble-and-buffer-overrun-events-properly.patch new file mode 100644 index 00000000000..139fcb7b397 --- /dev/null +++ b/queue-6.7/xhci-handle-isoc-babble-and-buffer-overrun-events-properly.patch @@ -0,0 +1,51 @@ +From 7c4650ded49e5b88929ecbbb631efb8b0838e811 Mon Sep 17 00:00:00 2001 +From: Michal Pecio +Date: Thu, 25 Jan 2024 17:27:37 +0200 +Subject: xhci: handle isoc Babble and Buffer Overrun events properly + +From: Michal Pecio + +commit 7c4650ded49e5b88929ecbbb631efb8b0838e811 upstream. + +xHCI 4.9 explicitly forbids assuming that the xHC has released its +ownership of a multi-TRB TD when it reports an error on one of the +early TRBs. Yet the driver makes such assumption and releases the TD, +allowing the remaining TRBs to be freed or overwritten by new TDs. + +The xHC should also report completion of the final TRB due to its IOC +flag being set by us, regardless of prior errors. This event cannot +be recognized if the TD has already been freed earlier, resulting in +"Transfer event TRB DMA ptr not part of current TD" error message. + +Fix this by reusing the logic for processing isoc Transaction Errors. +This also handles hosts which fail to report the final completion. + +Fix transfer length reporting on Babble errors. They may be caused by +device malfunction, no guarantee that the buffer has been filled. + +Signed-off-by: Michal Pecio +Cc: stable@vger.kernel.org +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/r/20240125152737.2983959-5-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-ring.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -2393,9 +2393,13 @@ static int process_isoc_td(struct xhci_h + case COMP_BANDWIDTH_OVERRUN_ERROR: + frame->status = -ECOMM; + break; +- case COMP_ISOCH_BUFFER_OVERRUN: + case COMP_BABBLE_DETECTED_ERROR: ++ sum_trbs_for_length = true; ++ fallthrough; ++ case COMP_ISOCH_BUFFER_OVERRUN: + frame->status = -EOVERFLOW; ++ if (ep_trb != td->last_trb) ++ td->error_mid_td = true; + break; + case COMP_INCOMPATIBLE_DEVICE_ERROR: + case COMP_STALL_ERROR: diff --git a/queue-6.7/xhci-process-isoc-td-properly-when-there-was-a-transaction-error-mid-td.patch b/queue-6.7/xhci-process-isoc-td-properly-when-there-was-a-transaction-error-mid-td.patch new file mode 100644 index 00000000000..40f42939d33 --- /dev/null +++ b/queue-6.7/xhci-process-isoc-td-properly-when-there-was-a-transaction-error-mid-td.patch @@ -0,0 +1,177 @@ +From 5372c65e1311a16351ef03dd096ff576e6477674 Mon Sep 17 00:00:00 2001 +From: Mathias Nyman +Date: Thu, 25 Jan 2024 17:27:36 +0200 +Subject: xhci: process isoc TD properly when there was a transaction error mid TD. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Mathias Nyman + +commit 5372c65e1311a16351ef03dd096ff576e6477674 upstream. + +The last TRB of a isoc TD might not trigger an event if there was +an error event for a TRB mid TD. This is seen on a NEC Corporation +uPD720200 USB 3.0 Host + +After an error mid a multi-TRB TD the xHC should according to xhci 4.9.1 +generate events for passed TRBs with IOC flag set if it proceeds to the +next TD. This event is either a copy of the original error, or a +"success" transfer event. + +If that event is missing then the driver and xHC host get out of sync as +the driver is still expecting a transfer event for that first TD, while +xHC host is already sending events for the next TD in the list. +This leads to +"Transfer event TRB DMA ptr not part of current TD" messages. + +As a solution we tag the isoc TDs that get error events mid TD. +If an event doesn't match the first TD, then check if the tag is +set, and event points to the next TD. +In that case give back the fist TD and process the next TD normally + +Make sure TD status and transferred length stay valid in both cases +with and without final TD completion event. + +Reported-by: Michał Pecio +Closes: https://lore.kernel.org/linux-usb/20240112235205.1259f60c@foxbook/ +Tested-by: Michał Pecio +Cc: stable@vger.kernel.org +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/r/20240125152737.2983959-4-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-ring.c | 74 ++++++++++++++++++++++++++++++++++--------- + drivers/usb/host/xhci.h | 1 + 2 files changed, 61 insertions(+), 14 deletions(-) + +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -2375,6 +2375,9 @@ static int process_isoc_td(struct xhci_h + /* handle completion code */ + switch (trb_comp_code) { + case COMP_SUCCESS: ++ /* Don't overwrite status if TD had an error, see xHCI 4.9.1 */ ++ if (td->error_mid_td) ++ break; + if (remaining) { + frame->status = short_framestatus; + if (xhci->quirks & XHCI_TRUST_TX_LENGTH) +@@ -2400,8 +2403,9 @@ static int process_isoc_td(struct xhci_h + break; + case COMP_USB_TRANSACTION_ERROR: + frame->status = -EPROTO; ++ sum_trbs_for_length = true; + if (ep_trb != td->last_trb) +- return 0; ++ td->error_mid_td = true; + break; + case COMP_STOPPED: + sum_trbs_for_length = true; +@@ -2421,6 +2425,9 @@ static int process_isoc_td(struct xhci_h + break; + } + ++ if (td->urb_length_set) ++ goto finish_td; ++ + if (sum_trbs_for_length) + frame->actual_length = sum_trb_lengths(xhci, ep->ring, ep_trb) + + ep_trb_len - remaining; +@@ -2429,6 +2436,14 @@ static int process_isoc_td(struct xhci_h + + td->urb->actual_length += frame->actual_length; + ++finish_td: ++ /* Don't give back TD yet if we encountered an error mid TD */ ++ if (td->error_mid_td && ep_trb != td->last_trb) { ++ xhci_dbg(xhci, "Error mid isoc TD, wait for final completion event\n"); ++ td->urb_length_set = true; ++ return 0; ++ } ++ + return finish_td(xhci, ep, ep_ring, td, trb_comp_code); + } + +@@ -2807,17 +2822,51 @@ static int handle_tx_event(struct xhci_h + } + + if (!ep_seg) { +- if (!ep->skip || +- !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) { +- /* Some host controllers give a spurious +- * successful event after a short transfer. +- * Ignore it. +- */ +- if ((xhci->quirks & XHCI_SPURIOUS_SUCCESS) && +- ep_ring->last_td_was_short) { +- ep_ring->last_td_was_short = false; +- goto cleanup; ++ ++ if (ep->skip && usb_endpoint_xfer_isoc(&td->urb->ep->desc)) { ++ skip_isoc_td(xhci, td, ep, status); ++ goto cleanup; ++ } ++ ++ /* ++ * Some hosts give a spurious success event after a short ++ * transfer. Ignore it. ++ */ ++ if ((xhci->quirks & XHCI_SPURIOUS_SUCCESS) && ++ ep_ring->last_td_was_short) { ++ ep_ring->last_td_was_short = false; ++ goto cleanup; ++ } ++ ++ /* ++ * xhci 4.10.2 states isoc endpoints should continue ++ * processing the next TD if there was an error mid TD. ++ * So host like NEC don't generate an event for the last ++ * isoc TRB even if the IOC flag is set. ++ * xhci 4.9.1 states that if there are errors in mult-TRB ++ * TDs xHC should generate an error for that TRB, and if xHC ++ * proceeds to the next TD it should genete an event for ++ * any TRB with IOC flag on the way. Other host follow this. ++ * So this event might be for the next TD. ++ */ ++ if (td->error_mid_td && ++ !list_is_last(&td->td_list, &ep_ring->td_list)) { ++ struct xhci_td *td_next = list_next_entry(td, td_list); ++ ++ ep_seg = trb_in_td(xhci, td_next->start_seg, td_next->first_trb, ++ td_next->last_trb, ep_trb_dma, false); ++ if (ep_seg) { ++ /* give back previous TD, start handling new */ ++ xhci_dbg(xhci, "Missing TD completion event after mid TD error\n"); ++ ep_ring->dequeue = td->last_trb; ++ ep_ring->deq_seg = td->last_trb_seg; ++ inc_deq(xhci, ep_ring); ++ xhci_td_cleanup(xhci, td, ep_ring, td->status); ++ td = td_next; + } ++ } ++ ++ if (!ep_seg) { + /* HC is busted, give up! */ + xhci_err(xhci, + "ERROR Transfer event TRB DMA ptr not " +@@ -2829,9 +2878,6 @@ static int handle_tx_event(struct xhci_h + ep_trb_dma, true); + return -ESHUTDOWN; + } +- +- skip_isoc_td(xhci, td, ep, status); +- goto cleanup; + } + if (trb_comp_code == COMP_SHORT_PACKET) + ep_ring->last_td_was_short = true; +--- a/drivers/usb/host/xhci.h ++++ b/drivers/usb/host/xhci.h +@@ -1547,6 +1547,7 @@ struct xhci_td { + struct xhci_segment *bounce_seg; + /* actual_length of the URB has already been set */ + bool urb_length_set; ++ bool error_mid_td; + unsigned int num_trbs; + }; +