From: Greg Kroah-Hartman Date: Sun, 5 Dec 2021 14:23:35 +0000 (+0100) Subject: 5.15-stable patches X-Git-Tag: v4.4.294~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e1e51aaa46c9ff92eb3d62382e5fcd1df26b5e1;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: atlantic-add-missing-dids-and-fix-115c.patch atlantic-fix-statistics-logic-for-production-hardware.patch atlantic-fix-to-display-fw-bundle-version-instead-of-fw-mac-version.patch atlantic-increase-delay-for-fw-transactions.patch atlantic-remove-warn-trace-message.patch atlatnic-enable-nbase-t-speeds-with-base-t.patch remove-half-duplex-mode-speed-capabilities.patch --- diff --git a/queue-5.15/atlantic-add-missing-dids-and-fix-115c.patch b/queue-5.15/atlantic-add-missing-dids-and-fix-115c.patch new file mode 100644 index 00000000000..03796fd8da7 --- /dev/null +++ b/queue-5.15/atlantic-add-missing-dids-and-fix-115c.patch @@ -0,0 +1,101 @@ +From 413d5e09caa5a11da9c7d72401ba0588466a04c0 Mon Sep 17 00:00:00 2001 +From: Nikita Danilov +Date: Mon, 29 Nov 2021 05:28:26 -0800 +Subject: atlantic: Add missing DIDs and fix 115c. + +From: Nikita Danilov + +commit 413d5e09caa5a11da9c7d72401ba0588466a04c0 upstream. + +At the late production stages new dev ids were introduced. These are +now in production, so its important for the driver to recognize these. +And also fix the board caps for AQC115C adapter. + +Fixes: b3f0c79cba206 ("net: atlantic: A2 hw_ops skeleton") +Signed-off-by: Nikita Danilov +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: Igor Russkikh +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/aq_common.h | 2 + + drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c | 7 +++++- + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c | 17 +++++++++++++++ + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h | 2 + + 4 files changed, 27 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/aq_common.h ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_common.h +@@ -40,10 +40,12 @@ + + #define AQ_DEVICE_ID_AQC113DEV 0x00C0 + #define AQ_DEVICE_ID_AQC113CS 0x94C0 ++#define AQ_DEVICE_ID_AQC113CA 0x34C0 + #define AQ_DEVICE_ID_AQC114CS 0x93C0 + #define AQ_DEVICE_ID_AQC113 0x04C0 + #define AQ_DEVICE_ID_AQC113C 0x14C0 + #define AQ_DEVICE_ID_AQC115C 0x12C0 ++#define AQ_DEVICE_ID_AQC116C 0x11C0 + + #define HW_ATL_NIC_NAME "Marvell (aQuantia) AQtion 10Gbit Network Adapter" + +--- a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c +@@ -49,6 +49,8 @@ static const struct pci_device_id aq_pci + { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113), }, + { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113C), }, + { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC115C), }, ++ { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC113CA), }, ++ { PCI_VDEVICE(AQUANTIA, AQ_DEVICE_ID_AQC116C), }, + + {} + }; +@@ -85,7 +87,10 @@ static const struct aq_board_revision_s + { AQ_DEVICE_ID_AQC113CS, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, + { AQ_DEVICE_ID_AQC114CS, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, + { AQ_DEVICE_ID_AQC113C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, +- { AQ_DEVICE_ID_AQC115C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, ++ { AQ_DEVICE_ID_AQC115C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc115c, }, ++ { AQ_DEVICE_ID_AQC113CA, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc113, }, ++ { AQ_DEVICE_ID_AQC116C, AQ_HWREV_ANY, &hw_atl2_ops, &hw_atl2_caps_aqc116c, }, ++ + }; + + MODULE_DEVICE_TABLE(pci, aq_pci_tbl); +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c +@@ -72,6 +72,23 @@ const struct aq_hw_caps_s hw_atl2_caps_a + AQ_NIC_RATE_10M_HALF, + }; + ++const struct aq_hw_caps_s hw_atl2_caps_aqc115c = { ++ DEFAULT_BOARD_BASIC_CAPABILITIES, ++ .media_type = AQ_HW_MEDIA_TYPE_TP, ++ .link_speed_msk = AQ_NIC_RATE_2G5 | ++ AQ_NIC_RATE_1G | ++ AQ_NIC_RATE_100M | ++ AQ_NIC_RATE_10M, ++}; ++ ++const struct aq_hw_caps_s hw_atl2_caps_aqc116c = { ++ DEFAULT_BOARD_BASIC_CAPABILITIES, ++ .media_type = AQ_HW_MEDIA_TYPE_TP, ++ .link_speed_msk = AQ_NIC_RATE_1G | ++ AQ_NIC_RATE_100M | ++ AQ_NIC_RATE_10M, ++}; ++ + static u32 hw_atl2_sem_act_rslvr_get(struct aq_hw_s *self) + { + return hw_atl_reg_glb_cpu_sem_get(self, HW_ATL2_FW_SM_ACT_RSLVR); +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.h +@@ -9,6 +9,8 @@ + #include "aq_common.h" + + extern const struct aq_hw_caps_s hw_atl2_caps_aqc113; ++extern const struct aq_hw_caps_s hw_atl2_caps_aqc115c; ++extern const struct aq_hw_caps_s hw_atl2_caps_aqc116c; + extern const struct aq_hw_ops hw_atl2_ops; + + #endif /* HW_ATL2_H */ diff --git a/queue-5.15/atlantic-fix-statistics-logic-for-production-hardware.patch b/queue-5.15/atlantic-fix-statistics-logic-for-production-hardware.patch new file mode 100644 index 00000000000..2ab17f147ea --- /dev/null +++ b/queue-5.15/atlantic-fix-statistics-logic-for-production-hardware.patch @@ -0,0 +1,295 @@ +From 2087ced0fc3a6d45203925750a2b1bcd5402e639 Mon Sep 17 00:00:00 2001 +From: Dmitry Bogdanov +Date: Mon, 29 Nov 2021 05:28:28 -0800 +Subject: atlantic: Fix statistics logic for production hardware + +From: Dmitry Bogdanov + +commit 2087ced0fc3a6d45203925750a2b1bcd5402e639 upstream. + +B0 is the main and widespread device revision of atlantic2 HW. In the +current state, driver will incorrectly fetch the statistics for this +revision. + +Fixes: 5cfd54d7dc186 ("net: atlantic: minimal A2 fw_ops") +Signed-off-by: Dmitry Bogdanov +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: Igor Russkikh +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/aq_hw.h | 2 + drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 10 + drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c | 15 + + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h | 38 +++ + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c | 101 ++++++++-- + 5 files changed, 139 insertions(+), 27 deletions(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h +@@ -80,6 +80,8 @@ struct aq_hw_link_status_s { + }; + + struct aq_stats_s { ++ u64 brc; ++ u64 btc; + u64 uprc; + u64 mprc; + u64 bprc; +--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +@@ -903,8 +903,14 @@ u64 *aq_nic_get_stats(struct aq_nic_s *s + data[++i] = stats->mbtc; + data[++i] = stats->bbrc; + data[++i] = stats->bbtc; +- data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; +- data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; ++ if (stats->brc) ++ data[++i] = stats->brc; ++ else ++ data[++i] = stats->ubrc + stats->mbrc + stats->bbrc; ++ if (stats->btc) ++ data[++i] = stats->btc; ++ else ++ data[++i] = stats->ubtc + stats->mbtc + stats->bbtc; + data[++i] = stats->dma_pkt_rc; + data[++i] = stats->dma_pkt_tc; + data[++i] = stats->dma_oct_rc; +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c +@@ -867,12 +867,20 @@ static int hw_atl_fw1x_deinit(struct aq_ + int hw_atl_utils_update_stats(struct aq_hw_s *self) + { + struct aq_stats_s *cs = &self->curr_stats; ++ struct aq_stats_s curr_stats = *cs; + struct hw_atl_utils_mbox mbox; ++ bool corrupted_stats = false; + + hw_atl_utils_mpi_read_stats(self, &mbox); + +-#define AQ_SDELTA(_N_) (self->curr_stats._N_ += \ +- mbox.stats._N_ - self->last_stats._N_) ++#define AQ_SDELTA(_N_) \ ++do { \ ++ if (!corrupted_stats && \ ++ ((s64)(mbox.stats._N_ - self->last_stats._N_)) >= 0) \ ++ curr_stats._N_ += mbox.stats._N_ - self->last_stats._N_; \ ++ else \ ++ corrupted_stats = true; \ ++} while (0) + + if (self->aq_link_status.mbps) { + AQ_SDELTA(uprc); +@@ -892,6 +900,9 @@ int hw_atl_utils_update_stats(struct aq_ + AQ_SDELTA(bbrc); + AQ_SDELTA(bbtc); + AQ_SDELTA(dpc); ++ ++ if (!corrupted_stats) ++ *cs = curr_stats; + } + #undef AQ_SDELTA + +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils.h +@@ -239,7 +239,8 @@ struct version_s { + u8 minor; + u16 build; + } phy; +- u32 rsvd; ++ u32 drv_iface_ver:4; ++ u32 rsvd:28; + }; + + struct link_status_s { +@@ -424,7 +425,7 @@ struct cable_diag_status_s { + u16 rsvd2; + }; + +-struct statistics_s { ++struct statistics_a0_s { + struct { + u32 link_up; + u32 link_down; +@@ -457,6 +458,33 @@ struct statistics_s { + u32 reserve_fw_gap; + }; + ++struct __packed statistics_b0_s { ++ u64 rx_good_octets; ++ u64 rx_pause_frames; ++ u64 rx_good_frames; ++ u64 rx_errors; ++ u64 rx_unicast_frames; ++ u64 rx_multicast_frames; ++ u64 rx_broadcast_frames; ++ ++ u64 tx_good_octets; ++ u64 tx_pause_frames; ++ u64 tx_good_frames; ++ u64 tx_errors; ++ u64 tx_unicast_frames; ++ u64 tx_multicast_frames; ++ u64 tx_broadcast_frames; ++ ++ u32 main_loop_cycles; ++}; ++ ++struct __packed statistics_s { ++ union __packed { ++ struct statistics_a0_s a0; ++ struct statistics_b0_s b0; ++ }; ++}; ++ + struct filter_caps_s { + u8 l2_filters_base_index:6; + u8 flexible_filter_mask:2; +@@ -545,7 +573,7 @@ struct management_status_s { + u32 rsvd5; + }; + +-struct fw_interface_out { ++struct __packed fw_interface_out { + struct transaction_counter_s transaction_id; + struct version_s version; + struct link_status_s link_status; +@@ -569,7 +597,6 @@ struct fw_interface_out { + struct core_dump_s core_dump; + u32 rsvd11; + struct statistics_s stats; +- u32 rsvd12; + struct filter_caps_s filter_caps; + struct device_caps_s device_caps; + u32 rsvd13; +@@ -592,6 +619,9 @@ struct fw_interface_out { + #define AQ_HOST_MODE_LOW_POWER 3U + #define AQ_HOST_MODE_SHUTDOWN 4U + ++#define AQ_A2_FW_INTERFACE_A0 0 ++#define AQ_A2_FW_INTERFACE_B0 1 ++ + int hw_atl2_utils_initfw(struct aq_hw_s *self, const struct aq_fw_ops **fw_ops); + + int hw_atl2_utils_soft_reset(struct aq_hw_s *self); +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c +@@ -333,18 +333,22 @@ static int aq_a2_fw_get_mac_permanent(st + return 0; + } + +-static int aq_a2_fw_update_stats(struct aq_hw_s *self) ++static void aq_a2_fill_a0_stats(struct aq_hw_s *self, ++ struct statistics_s *stats) + { + struct hw_atl2_priv *priv = (struct hw_atl2_priv *)self->priv; +- struct statistics_s stats; +- int err; +- +- err = hw_atl2_shared_buffer_read_safe(self, stats, &stats); +- if (err) +- return err; +- +-#define AQ_SDELTA(_N_, _F_) (self->curr_stats._N_ += \ +- stats.msm._F_ - priv->last_stats.msm._F_) ++ struct aq_stats_s *cs = &self->curr_stats; ++ struct aq_stats_s curr_stats = *cs; ++ bool corrupted_stats = false; ++ ++#define AQ_SDELTA(_N, _F) \ ++do { \ ++ if (!corrupted_stats && \ ++ ((s64)(stats->a0.msm._F - priv->last_stats.a0.msm._F)) >= 0) \ ++ curr_stats._N += stats->a0.msm._F - priv->last_stats.a0.msm._F;\ ++ else \ ++ corrupted_stats = true; \ ++} while (0) + + if (self->aq_link_status.mbps) { + AQ_SDELTA(uprc, rx_unicast_frames); +@@ -363,17 +367,76 @@ static int aq_a2_fw_update_stats(struct + AQ_SDELTA(mbtc, tx_multicast_octets); + AQ_SDELTA(bbrc, rx_broadcast_octets); + AQ_SDELTA(bbtc, tx_broadcast_octets); ++ ++ if (!corrupted_stats) ++ *cs = curr_stats; ++ } ++#undef AQ_SDELTA ++ ++} ++ ++static void aq_a2_fill_b0_stats(struct aq_hw_s *self, ++ struct statistics_s *stats) ++{ ++ struct hw_atl2_priv *priv = (struct hw_atl2_priv *)self->priv; ++ struct aq_stats_s *cs = &self->curr_stats; ++ struct aq_stats_s curr_stats = *cs; ++ bool corrupted_stats = false; ++ ++#define AQ_SDELTA(_N, _F) \ ++do { \ ++ if (!corrupted_stats && \ ++ ((s64)(stats->b0._F - priv->last_stats.b0._F)) >= 0) \ ++ curr_stats._N += stats->b0._F - priv->last_stats.b0._F; \ ++ else \ ++ corrupted_stats = true; \ ++} while (0) ++ ++ if (self->aq_link_status.mbps) { ++ AQ_SDELTA(uprc, rx_unicast_frames); ++ AQ_SDELTA(mprc, rx_multicast_frames); ++ AQ_SDELTA(bprc, rx_broadcast_frames); ++ AQ_SDELTA(erpr, rx_errors); ++ AQ_SDELTA(brc, rx_good_octets); ++ ++ AQ_SDELTA(uptc, tx_unicast_frames); ++ AQ_SDELTA(mptc, tx_multicast_frames); ++ AQ_SDELTA(bptc, tx_broadcast_frames); ++ AQ_SDELTA(erpt, tx_errors); ++ AQ_SDELTA(btc, tx_good_octets); ++ ++ if (!corrupted_stats) ++ *cs = curr_stats; + } + #undef AQ_SDELTA +- self->curr_stats.dma_pkt_rc = +- hw_atl_stats_rx_dma_good_pkt_counter_get(self); +- self->curr_stats.dma_pkt_tc = +- hw_atl_stats_tx_dma_good_pkt_counter_get(self); +- self->curr_stats.dma_oct_rc = +- hw_atl_stats_rx_dma_good_octet_counter_get(self); +- self->curr_stats.dma_oct_tc = +- hw_atl_stats_tx_dma_good_octet_counter_get(self); +- self->curr_stats.dpc = hw_atl_rpb_rx_dma_drop_pkt_cnt_get(self); ++} ++ ++static int aq_a2_fw_update_stats(struct aq_hw_s *self) ++{ ++ struct hw_atl2_priv *priv = (struct hw_atl2_priv *)self->priv; ++ struct aq_stats_s *cs = &self->curr_stats; ++ struct statistics_s stats; ++ struct version_s version; ++ int err; ++ ++ err = hw_atl2_shared_buffer_read_safe(self, version, &version); ++ if (err) ++ return err; ++ ++ err = hw_atl2_shared_buffer_read_safe(self, stats, &stats); ++ if (err) ++ return err; ++ ++ if (version.drv_iface_ver == AQ_A2_FW_INTERFACE_A0) ++ aq_a2_fill_a0_stats(self, &stats); ++ else ++ aq_a2_fill_b0_stats(self, &stats); ++ ++ cs->dma_pkt_rc = hw_atl_stats_rx_dma_good_pkt_counter_get(self); ++ cs->dma_pkt_tc = hw_atl_stats_tx_dma_good_pkt_counter_get(self); ++ cs->dma_oct_rc = hw_atl_stats_rx_dma_good_octet_counter_get(self); ++ cs->dma_oct_tc = hw_atl_stats_tx_dma_good_octet_counter_get(self); ++ cs->dpc = hw_atl_rpb_rx_dma_drop_pkt_cnt_get(self); + + memcpy(&priv->last_stats, &stats, sizeof(stats)); + diff --git a/queue-5.15/atlantic-fix-to-display-fw-bundle-version-instead-of-fw-mac-version.patch b/queue-5.15/atlantic-fix-to-display-fw-bundle-version-instead-of-fw-mac-version.patch new file mode 100644 index 00000000000..09cc0b5eb49 --- /dev/null +++ b/queue-5.15/atlantic-fix-to-display-fw-bundle-version-instead-of-fw-mac-version.patch @@ -0,0 +1,37 @@ +From 2465c802232bc8d2b5bd83b55b08d05c11808704 Mon Sep 17 00:00:00 2001 +From: Sameer Saurabh +Date: Mon, 29 Nov 2021 05:28:25 -0800 +Subject: atlantic: Fix to display FW bundle version instead of FW mac version. + +From: Sameer Saurabh + +commit 2465c802232bc8d2b5bd83b55b08d05c11808704 upstream. + +The correct way to reflect firmware version is to use bundle version. +Hence populating the same instead of MAC fw version. + +Fixes: c1be0bf092bd2 ("net: atlantic: common functions needed for basic A2 init/deinit hw_ops") +Signed-off-by: Sameer Saurabh +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: Igor Russkikh +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c +@@ -500,9 +500,9 @@ u32 hw_atl2_utils_get_fw_version(struct + hw_atl2_shared_buffer_read_safe(self, version, &version); + + /* A2 FW version is stored in reverse order */ +- return version.mac.major << 24 | +- version.mac.minor << 16 | +- version.mac.build; ++ return version.bundle.major << 24 | ++ version.bundle.minor << 16 | ++ version.bundle.build; + } + + int hw_atl2_utils_get_action_resolve_table_caps(struct aq_hw_s *self, diff --git a/queue-5.15/atlantic-increase-delay-for-fw-transactions.patch b/queue-5.15/atlantic-increase-delay-for-fw-transactions.patch new file mode 100644 index 00000000000..ef94301754e --- /dev/null +++ b/queue-5.15/atlantic-increase-delay-for-fw-transactions.patch @@ -0,0 +1,49 @@ +From aa1dcb5646fdf34a15763facf4bf5e482a2814ca Mon Sep 17 00:00:00 2001 +From: Dmitry Bogdanov +Date: Mon, 29 Nov 2021 05:28:23 -0800 +Subject: atlantic: Increase delay for fw transactions + +From: Dmitry Bogdanov + +commit aa1dcb5646fdf34a15763facf4bf5e482a2814ca upstream. + +The max waiting period (of 1 ms) while reading the data from FW shared +buffer is too small for certain types of data (e.g., stats). There's a +chance that FW could be updating buffer at the same time and driver +would be unsuccessful in reading data. Firmware manual recommends to +have 1 sec timeout to fix this issue. + +Fixes: 5cfd54d7dc186 ("net: atlantic: minimal A2 fw_ops") +Signed-off-by: Dmitry Bogdanov +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: Igor Russkikh +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c +@@ -84,7 +84,7 @@ static int hw_atl2_shared_buffer_read_bl + if (cnt > AQ_A2_FW_READ_TRY_MAX) + return -ETIME; + if (tid1.transaction_cnt_a != tid1.transaction_cnt_b) +- udelay(1); ++ mdelay(1); + } while (tid1.transaction_cnt_a != tid1.transaction_cnt_b); + + hw_atl2_mif_shared_buf_read(self, offset, (u32 *)data, dwords); +@@ -339,8 +339,11 @@ static int aq_a2_fw_update_stats(struct + { + struct hw_atl2_priv *priv = (struct hw_atl2_priv *)self->priv; + struct statistics_s stats; ++ int err; + +- hw_atl2_shared_buffer_read_safe(self, stats, &stats); ++ err = hw_atl2_shared_buffer_read_safe(self, stats, &stats); ++ if (err) ++ return err; + + #define AQ_SDELTA(_N_, _F_) (self->curr_stats._N_ += \ + stats.msm._F_ - priv->last_stats.msm._F_) diff --git a/queue-5.15/atlantic-remove-warn-trace-message.patch b/queue-5.15/atlantic-remove-warn-trace-message.patch new file mode 100644 index 00000000000..b012e15f864 --- /dev/null +++ b/queue-5.15/atlantic-remove-warn-trace-message.patch @@ -0,0 +1,34 @@ +From 060a0fb721ec5bbe02ae322e434ec87dc25ed6e9 Mon Sep 17 00:00:00 2001 +From: Sameer Saurabh +Date: Mon, 29 Nov 2021 05:28:29 -0800 +Subject: atlantic: Remove warn trace message. + +From: Sameer Saurabh + +commit 060a0fb721ec5bbe02ae322e434ec87dc25ed6e9 upstream. + +Remove the warn trace message - it's not a correct check here, because +the function can still be called on the device in DOWN state + +Fixes: 508f2e3dce454 ("net: atlantic: split rx and tx per-queue stats") +Signed-off-by: Sameer Saurabh +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: Igor Russkikh +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/aq_vec.c | 3 --- + 1 file changed, 3 deletions(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c +@@ -362,9 +362,6 @@ unsigned int aq_vec_get_sw_stats(struct + { + unsigned int count; + +- WARN_ONCE(!aq_vec_is_valid_tc(self, tc), +- "Invalid tc %u (#rx=%u, #tx=%u)\n", +- tc, self->rx_rings, self->tx_rings); + if (!aq_vec_is_valid_tc(self, tc)) + return 0; + diff --git a/queue-5.15/atlatnic-enable-nbase-t-speeds-with-base-t.patch b/queue-5.15/atlatnic-enable-nbase-t-speeds-with-base-t.patch new file mode 100644 index 00000000000..37e8459b67f --- /dev/null +++ b/queue-5.15/atlatnic-enable-nbase-t-speeds-with-base-t.patch @@ -0,0 +1,92 @@ +From aa685acd98eae25d5351e30288d6cfb65b9c80a5 Mon Sep 17 00:00:00 2001 +From: Nikita Danilov +Date: Mon, 29 Nov 2021 05:28:24 -0800 +Subject: atlatnic: enable Nbase-t speeds with base-t + +From: Nikita Danilov + +commit aa685acd98eae25d5351e30288d6cfb65b9c80a5 upstream. + +When 2.5G is advertised, N-Base should be advertised against the T-base +caps. N5G is out of use in baseline code and driver should treat both 5G +and N5G (and also 2.5G and N2.5G) equally from user perspective. + +Fixes: 5cfd54d7dc186 ("net: atlantic: minimal A2 fw_ops") +Signed-off-by: Nikita Danilov +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: Igor Russkikh +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/aq_common.h | 25 ++++------ + drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c | 3 - + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c | 4 - + 3 files changed, 13 insertions(+), 19 deletions(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/aq_common.h ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_common.h +@@ -53,20 +53,19 @@ + + #define AQ_NIC_RATE_10G BIT(0) + #define AQ_NIC_RATE_5G BIT(1) +-#define AQ_NIC_RATE_5GSR BIT(2) +-#define AQ_NIC_RATE_2G5 BIT(3) +-#define AQ_NIC_RATE_1G BIT(4) +-#define AQ_NIC_RATE_100M BIT(5) +-#define AQ_NIC_RATE_10M BIT(6) +-#define AQ_NIC_RATE_1G_HALF BIT(7) +-#define AQ_NIC_RATE_100M_HALF BIT(8) +-#define AQ_NIC_RATE_10M_HALF BIT(9) ++#define AQ_NIC_RATE_2G5 BIT(2) ++#define AQ_NIC_RATE_1G BIT(3) ++#define AQ_NIC_RATE_100M BIT(4) ++#define AQ_NIC_RATE_10M BIT(5) ++#define AQ_NIC_RATE_1G_HALF BIT(6) ++#define AQ_NIC_RATE_100M_HALF BIT(7) ++#define AQ_NIC_RATE_10M_HALF BIT(8) + +-#define AQ_NIC_RATE_EEE_10G BIT(10) +-#define AQ_NIC_RATE_EEE_5G BIT(11) +-#define AQ_NIC_RATE_EEE_2G5 BIT(12) +-#define AQ_NIC_RATE_EEE_1G BIT(13) +-#define AQ_NIC_RATE_EEE_100M BIT(14) ++#define AQ_NIC_RATE_EEE_10G BIT(9) ++#define AQ_NIC_RATE_EEE_5G BIT(10) ++#define AQ_NIC_RATE_EEE_2G5 BIT(11) ++#define AQ_NIC_RATE_EEE_1G BIT(12) ++#define AQ_NIC_RATE_EEE_100M BIT(13) + #define AQ_NIC_RATE_EEE_MSK (AQ_NIC_RATE_EEE_10G |\ + AQ_NIC_RATE_EEE_5G |\ + AQ_NIC_RATE_EEE_2G5 |\ +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c +@@ -132,9 +132,6 @@ static enum hw_atl_fw2x_rate link_speed_ + if (speed & AQ_NIC_RATE_5G) + rate |= FW2X_RATE_5G; + +- if (speed & AQ_NIC_RATE_5GSR) +- rate |= FW2X_RATE_5G; +- + if (speed & AQ_NIC_RATE_2G5) + rate |= FW2X_RATE_2G5; + +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2_utils_fw.c +@@ -154,7 +154,7 @@ static void a2_link_speed_mask2fw(u32 sp + { + link_options->rate_10G = !!(speed & AQ_NIC_RATE_10G); + link_options->rate_5G = !!(speed & AQ_NIC_RATE_5G); +- link_options->rate_N5G = !!(speed & AQ_NIC_RATE_5GSR); ++ link_options->rate_N5G = link_options->rate_5G; + link_options->rate_2P5G = !!(speed & AQ_NIC_RATE_2G5); + link_options->rate_N2P5G = link_options->rate_2P5G; + link_options->rate_1G = !!(speed & AQ_NIC_RATE_1G); +@@ -192,8 +192,6 @@ static u32 a2_fw_lkp_to_mask(struct lkp_ + rate |= AQ_NIC_RATE_10G; + if (lkp_link_caps->rate_5G) + rate |= AQ_NIC_RATE_5G; +- if (lkp_link_caps->rate_N5G) +- rate |= AQ_NIC_RATE_5GSR; + if (lkp_link_caps->rate_2P5G) + rate |= AQ_NIC_RATE_2G5; + if (lkp_link_caps->rate_1G) diff --git a/queue-5.15/remove-half-duplex-mode-speed-capabilities.patch b/queue-5.15/remove-half-duplex-mode-speed-capabilities.patch new file mode 100644 index 00000000000..f268a277ed6 --- /dev/null +++ b/queue-5.15/remove-half-duplex-mode-speed-capabilities.patch @@ -0,0 +1,37 @@ +From 03fa512189eb9b55ded5f3e81ad638315555b340 Mon Sep 17 00:00:00 2001 +From: Sameer Saurabh +Date: Mon, 29 Nov 2021 05:28:27 -0800 +Subject: Remove Half duplex mode speed capabilities. + +From: Sameer Saurabh + +commit 03fa512189eb9b55ded5f3e81ad638315555b340 upstream. + +Since Half Duplex mode has been deprecated by the firmware, driver should +not advertise Half Duplex speed in ethtool support link speed values. + +Fixes: 071a02046c262 ("net: atlantic: A2: half duplex support") +Signed-off-by: Sameer Saurabh +Signed-off-by: Igor Russkikh +Signed-off-by: Sudarsana Reddy Kalluru +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c ++++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c +@@ -65,11 +65,8 @@ const struct aq_hw_caps_s hw_atl2_caps_a + AQ_NIC_RATE_5G | + AQ_NIC_RATE_2G5 | + AQ_NIC_RATE_1G | +- AQ_NIC_RATE_1G_HALF | + AQ_NIC_RATE_100M | +- AQ_NIC_RATE_100M_HALF | +- AQ_NIC_RATE_10M | +- AQ_NIC_RATE_10M_HALF, ++ AQ_NIC_RATE_10M, + }; + + const struct aq_hw_caps_s hw_atl2_caps_aqc115c = { diff --git a/queue-5.15/series b/queue-5.15/series index 606b8ff29a2..55d4ebd5545 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -142,3 +142,10 @@ drm-vc4-kms-add-missing-drm_crtc_commit_put.patch drm-vc4-kms-clear-the-hvs-fifo-commit-pointer-once-done.patch drm-vc4-kms-don-t-duplicate-pending-commit.patch drm-vc4-kms-fix-previous-hvs-commit-wait.patch +atlantic-increase-delay-for-fw-transactions.patch +atlatnic-enable-nbase-t-speeds-with-base-t.patch +atlantic-fix-to-display-fw-bundle-version-instead-of-fw-mac-version.patch +atlantic-add-missing-dids-and-fix-115c.patch +remove-half-duplex-mode-speed-capabilities.patch +atlantic-fix-statistics-logic-for-production-hardware.patch +atlantic-remove-warn-trace-message.patch