From 2b948e4a034db8d8da267b9f00147829426ce76c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 24 Jan 2022 18:09:07 +0100 Subject: [PATCH] 5.10-stable patches added patches: ath10k-fix-the-mtu-size-on-qca9377-sdio.patch --- ...10k-fix-the-mtu-size-on-qca9377-sdio.patch | 207 ++++++++++++++++++ queue-5.10/series | 1 + 2 files changed, 208 insertions(+) create mode 100644 queue-5.10/ath10k-fix-the-mtu-size-on-qca9377-sdio.patch diff --git a/queue-5.10/ath10k-fix-the-mtu-size-on-qca9377-sdio.patch b/queue-5.10/ath10k-fix-the-mtu-size-on-qca9377-sdio.patch new file mode 100644 index 00000000000..3c15f73b7fb --- /dev/null +++ b/queue-5.10/ath10k-fix-the-mtu-size-on-qca9377-sdio.patch @@ -0,0 +1,207 @@ +From 09b8cd69edcf2be04a781e1781e98e52a775c9ad Mon Sep 17 00:00:00 2001 +From: Fabio Estevam +Date: Wed, 24 Nov 2021 10:10:47 -0300 +Subject: ath10k: Fix the MTU size on QCA9377 SDIO + +From: Fabio Estevam + +commit 09b8cd69edcf2be04a781e1781e98e52a775c9ad upstream. + +On an imx6dl-pico-pi board with a QCA9377 SDIO chip, simply trying to +connect via ssh to another machine causes: + +[ 55.824159] ath10k_sdio mmc1:0001:1: failed to transmit packet, dropping: -12 +[ 55.832169] ath10k_sdio mmc1:0001:1: failed to submit frame: -12 +[ 55.838529] ath10k_sdio mmc1:0001:1: failed to push frame: -12 +[ 55.905863] ath10k_sdio mmc1:0001:1: failed to transmit packet, dropping: -12 +[ 55.913650] ath10k_sdio mmc1:0001:1: failed to submit frame: -12 +[ 55.919887] ath10k_sdio mmc1:0001:1: failed to push frame: -12 + +, leading to an ssh connection failure. + +One user inspected the size of frames on Wireshark and reported +the followig: + +"I was able to narrow the issue down to the mtu. If I set the mtu for +the wlan0 device to 1486 instead of 1500, the issue does not happen. + +The size of frames that I see on Wireshark is exactly 1500 after +setting it to 1486." + +Clearing the HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE avoids the problem and +the ssh command works successfully after that. + +Introduce a 'credit_size_workaround' field to ath10k_hw_params for +the QCA9377 SDIO, so that the HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE +is not set in this case. + +Tested with QCA9377 SDIO with firmware WLAN.TF.1.1.1-00061-QCATFSWPZ-1. + +Fixes: 2f918ea98606 ("ath10k: enable alt data of TX path for sdio") +Signed-off-by: Fabio Estevam +Signed-off-by: Kalle Valo +Link: https://lore.kernel.org/r/20211124131047.713756-1-festevam@denx.de +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/wireless/ath/ath10k/core.c | 19 ++++++++++++++++++- + drivers/net/wireless/ath/ath10k/hw.h | 2 ++ + 2 files changed, 20 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath10k/core.c ++++ b/drivers/net/wireless/ath/ath10k/core.c +@@ -89,6 +89,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = true, + }, + { +@@ -123,6 +124,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = true, + }, + { +@@ -158,6 +160,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -187,6 +190,7 @@ static const struct ath10k_hw_params ath + .num_wds_entries = 0x20, + .uart_pin_workaround = true, + .tx_stats_over_pktlog = false, ++ .credit_size_workaround = false, + .bmi_large_size_download = true, + .supports_peer_stats_info = true, + }, +@@ -222,6 +226,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -256,6 +261,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -290,6 +296,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -327,6 +334,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = true, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + .supports_peer_stats_info = true, + }, +@@ -368,6 +376,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -415,6 +424,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -459,6 +469,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -493,6 +504,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -529,6 +541,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = true, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -557,6 +570,7 @@ static const struct ath10k_hw_params ath + .ast_skid_limit = 0x10, + .num_wds_entries = 0x20, + .uart_pin_workaround = true, ++ .credit_size_workaround = true, + }, + { + .id = QCA4019_HW_1_0_DEV_VERSION, +@@ -597,6 +611,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = false, + .hw_filter_reset_required = true, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + { +@@ -624,6 +639,7 @@ static const struct ath10k_hw_params ath + .rri_on_ddr = true, + .hw_filter_reset_required = false, + .fw_diag_ce_download = false, ++ .credit_size_workaround = false, + .tx_stats_over_pktlog = false, + }, + }; +@@ -697,6 +713,7 @@ static void ath10k_send_suspend_complete + + static int ath10k_init_sdio(struct ath10k *ar, enum ath10k_firmware_mode mode) + { ++ bool mtu_workaround = ar->hw_params.credit_size_workaround; + int ret; + u32 param = 0; + +@@ -714,7 +731,7 @@ static int ath10k_init_sdio(struct ath10 + + param |= HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_SET; + +- if (mode == ATH10K_FIRMWARE_MODE_NORMAL) ++ if (mode == ATH10K_FIRMWARE_MODE_NORMAL && !mtu_workaround) + param |= HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE; + else + param &= ~HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE; +--- a/drivers/net/wireless/ath/ath10k/hw.h ++++ b/drivers/net/wireless/ath/ath10k/hw.h +@@ -617,6 +617,8 @@ struct ath10k_hw_params { + * firmware bug + */ + bool uart_pin_workaround; ++ /* Workaround for the credit size calculation */ ++ bool credit_size_workaround; + + /* tx stats support over pktlog */ + bool tx_stats_over_pktlog; diff --git a/queue-5.10/series b/queue-5.10/series index f47ee06f7ec..45bb08e558f 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -561,3 +561,4 @@ lib82596-fix-irq-check-in-sni_82596_probe.patch mm-hmm.c-allow-vm_mixedmap-to-work-with-hmm_range_fault.patch lib-test_meminit-destroy-cache-in-kmem_cache_alloc_bulk-test.patch mtd-nand-bbt-fix-corner-case-in-bad-block-table-handling.patch +ath10k-fix-the-mtu-size-on-qca9377-sdio.patch -- 2.47.2