From: greearb@candelatech.com To: ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org, Ben Greear <greearb@candelatech.com>, Kalle Valo <kvalo@qca.qualcomm.com> Subject: [PATCH v2 06/21] ath10k: save firmware stacks upon firmware crash Date: Wed, 11 May 2016 10:02:18 -0700 [thread overview] Message-ID: <1462986153-16318-7-git-send-email-greearb@candelatech.com> (raw) In-Reply-To: <1462986153-16318-1-git-send-email-greearb@candelatech.com> From: Ben Greear <greearb@candelatech.com> Should help debug firmware crashes, and give users a way to provide some useful debug reports to firmware developers. Signed-off-by: Ben Greear <greearb@candelatech.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> --- drivers/net/wireless/ath/ath10k/core.h | 4 +++ drivers/net/wireless/ath/ath10k/debug.c | 29 +++++++++++++++++- drivers/net/wireless/ath/ath10k/hw.h | 2 ++ drivers/net/wireless/ath/ath10k/pci.c | 52 +++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index 7f9f460..644d077 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -427,6 +427,10 @@ struct ath10k_fw_crash_data { uuid_le uuid; struct timespec timestamp; __le32 registers[REG_DUMP_COUNT_QCA988X]; + __le32 stack_buf[ATH10K_FW_STACK_SIZE / sizeof(__le32)]; + __le32 exc_stack_buf[ATH10K_FW_STACK_SIZE / sizeof(__le32)]; + __le32 stack_addr; + __le32 exc_stack_addr; }; struct ath10k_debug { diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index 1739687..ec6db04 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c @@ -36,10 +36,15 @@ * enum ath10k_fw_crash_dump_type - types of data in the dump file * @ATH10K_FW_CRASH_DUMP_REGDUMP: Register crash dump in binary format * @ATH10K_FW_ERROR_DUMP_DBGLOG: Recent firmware debug log entries + * @ATH10K_FW_CRASH_DUMP_STACK: Stack memory contents. + * @ATH10K_FW_CRASH_DUMP_EXC_STACK: Exception stack memory contents. */ enum ath10k_fw_crash_dump_type { ATH10K_FW_CRASH_DUMP_REGISTERS = 0, ATH10K_FW_CRASH_DUMP_DBGLOG = 1, + ATH10K_FW_CRASH_DUMP_STACK = 2, + ATH10K_FW_CRASH_DUMP_EXC_STACK = 3, + ATH10K_FW_CRASH_DUMP_MAX, }; @@ -103,8 +108,11 @@ struct ath10k_dump_file_data { /* VERMAGIC_STRING */ char kernel_ver[64]; + __le32 stack_addr; + __le32 exc_stack_addr; + /* room for growth w/out changing binary format */ - u8 unused[128]; + u8 unused[120]; /* struct ath10k_tlv_dump_data + more */ u8 data[0]; @@ -792,6 +800,8 @@ static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) len = hdr_len; len += sizeof(*dump_tlv) + sizeof(crash_data->registers); len += sizeof(*dump_tlv) + sizeof(ar->debug.dbglog_entry_data); + len += sizeof(*dump_tlv) + sizeof(crash_data->stack_buf); + len += sizeof(*dump_tlv) + sizeof(crash_data->exc_stack_buf); sofar += hdr_len; @@ -831,6 +841,8 @@ static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) dump_data->ht_cap_info = cpu_to_le32(ar->ht_cap_info); dump_data->vht_cap_info = cpu_to_le32(ar->vht_cap_info); dump_data->num_rf_chains = cpu_to_le32(ar->num_rf_chains); + dump_data->stack_addr = cpu_to_le32(crash_data->stack_addr); + dump_data->exc_stack_addr = cpu_to_le32(crash_data->exc_stack_addr); strlcpy(dump_data->fw_ver, ar->hw->wiphy->fw_version, sizeof(dump_data->fw_ver)); @@ -863,7 +875,22 @@ static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) cpu_to_le32(ar->debug.dbglog_entry_data.head_idx); dbglog_storage->tail_idx = cpu_to_le32(ar->debug.dbglog_entry_data.tail_idx); + sofar += sizeof(*dump_tlv) + tmp; + /* Gather firmware stack dump */ + tmp = sizeof(crash_data->stack_buf); + dump_tlv = (struct ath10k_tlv_dump_data *)(buf + sofar); + dump_tlv->type = cpu_to_le32(ATH10K_FW_CRASH_DUMP_STACK); + dump_tlv->tlv_len = cpu_to_le32(tmp); + memcpy(dump_tlv->tlv_data, crash_data->stack_buf, tmp); + sofar += sizeof(*dump_tlv) + tmp; + + /* Gather firmware exception stack dump */ + tmp = sizeof(crash_data->exc_stack_buf); + dump_tlv = (struct ath10k_tlv_dump_data *)(buf + sofar); + dump_tlv->type = cpu_to_le32(ATH10K_FW_CRASH_DUMP_EXC_STACK); + dump_tlv->tlv_len = cpu_to_le32(tmp); + memcpy(dump_tlv->tlv_data, crash_data->exc_stack_buf, tmp); sofar += sizeof(*dump_tlv) + tmp; ar->debug.fw_crash_data->crashed_since_read = false; diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 5bbef4b..e86ebf0 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -122,6 +122,8 @@ enum qca9377_chip_id_rev { #define REG_DUMP_COUNT_QCA988X 60 +#define ATH10K_FW_STACK_SIZE 4096 + struct ath10k_fw_ie { __le32 id; __le32 len; diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index 16e32d0..62dd167 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -985,6 +985,22 @@ static int ath10k_pci_diag_read32(struct ath10k *ar, u32 address, u32 *value) return ret; } +static int __ath10k_pci_diag_read_hi_addr(struct ath10k *ar, __le32 *dest, + u32 src) +{ + u32 host_addr; + int ret; + + host_addr = host_interest_item_address(src); + + ret = ath10k_pci_diag_read32(ar, host_addr, dest); + if (ret != 0) { + ath10k_warn(ar, "failed to get memcpy hi address for firmware address %d: %d\n", + src, ret); + } + return ret; +} + static int __ath10k_pci_diag_read_hi(struct ath10k *ar, void *dest, u32 src, u32 len) { @@ -1013,6 +1029,9 @@ static int __ath10k_pci_diag_read_hi(struct ath10k *ar, void *dest, #define ath10k_pci_diag_read_hi(ar, dest, src, len) \ __ath10k_pci_diag_read_hi(ar, dest, HI_ITEM(src), len) +#define ath10k_pci_diag_read_hi_addr(ar, dest, src) \ + __ath10k_pci_diag_read_hi_addr(ar, dest, HI_ITEM(src)) + int ath10k_pci_diag_write_mem(struct ath10k *ar, u32 address, const void *data, int nbytes) { @@ -1405,6 +1424,37 @@ u16 ath10k_pci_hif_get_free_queue_number(struct ath10k *ar, u8 pipe) return ath10k_ce_num_free_src_entries(ar_pci->pipe_info[pipe].ce_hdl); } +/* Save the main firmware stack */ +static void ath10k_pci_dump_stack(struct ath10k *ar, + struct ath10k_fw_crash_data *crash_data) +{ + if (!crash_data) + return; + + lockdep_assert_held(&ar->data_lock); + BUILD_BUG_ON(ATH10K_FW_STACK_SIZE % 4); + + ath10k_pci_diag_read_hi(ar, crash_data->stack_buf, + hi_stack, ATH10K_FW_STACK_SIZE); + ath10k_pci_diag_read_hi_addr(ar, &crash_data->stack_addr, hi_stack); +} + +/* Save the exception firmware stack */ +static void ath10k_pci_dump_exc_stack(struct ath10k *ar, + struct ath10k_fw_crash_data *crash_data) +{ + if (!crash_data) + return; + + lockdep_assert_held(&ar->data_lock); + + ath10k_pci_diag_read_hi(ar, crash_data->exc_stack_buf, + hi_err_stack, ATH10K_FW_STACK_SIZE); + + ath10k_pci_diag_read_hi_addr(ar, &crash_data->exc_stack_addr, + hi_err_stack); +} + static void ath10k_pci_dump_registers(struct ath10k *ar, struct ath10k_fw_crash_data *crash_data) { @@ -1555,6 +1605,8 @@ static void ath10k_pci_fw_crashed_dump(struct ath10k *ar) ath10k_print_driver_info(ar); ath10k_pci_dump_registers(ar, crash_data); ath10k_pci_dump_dbglog(ar); + ath10k_pci_dump_stack(ar, crash_data); + ath10k_pci_dump_exc_stack(ar, crash_data); if (crash_data) crash_data->crashed_since_read = true; -- 2.4.3
WARNING: multiple messages have this Message-ID (diff)
From: greearb@candelatech.com To: ath10k@lists.infradead.org Cc: Ben Greear <greearb@candelatech.com>, linux-wireless@vger.kernel.org, Kalle Valo <kvalo@qca.qualcomm.com> Subject: [PATCH v2 06/21] ath10k: save firmware stacks upon firmware crash Date: Wed, 11 May 2016 10:02:18 -0700 [thread overview] Message-ID: <1462986153-16318-7-git-send-email-greearb@candelatech.com> (raw) In-Reply-To: <1462986153-16318-1-git-send-email-greearb@candelatech.com> From: Ben Greear <greearb@candelatech.com> Should help debug firmware crashes, and give users a way to provide some useful debug reports to firmware developers. Signed-off-by: Ben Greear <greearb@candelatech.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> --- drivers/net/wireless/ath/ath10k/core.h | 4 +++ drivers/net/wireless/ath/ath10k/debug.c | 29 +++++++++++++++++- drivers/net/wireless/ath/ath10k/hw.h | 2 ++ drivers/net/wireless/ath/ath10k/pci.c | 52 +++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index 7f9f460..644d077 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -427,6 +427,10 @@ struct ath10k_fw_crash_data { uuid_le uuid; struct timespec timestamp; __le32 registers[REG_DUMP_COUNT_QCA988X]; + __le32 stack_buf[ATH10K_FW_STACK_SIZE / sizeof(__le32)]; + __le32 exc_stack_buf[ATH10K_FW_STACK_SIZE / sizeof(__le32)]; + __le32 stack_addr; + __le32 exc_stack_addr; }; struct ath10k_debug { diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index 1739687..ec6db04 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c @@ -36,10 +36,15 @@ * enum ath10k_fw_crash_dump_type - types of data in the dump file * @ATH10K_FW_CRASH_DUMP_REGDUMP: Register crash dump in binary format * @ATH10K_FW_ERROR_DUMP_DBGLOG: Recent firmware debug log entries + * @ATH10K_FW_CRASH_DUMP_STACK: Stack memory contents. + * @ATH10K_FW_CRASH_DUMP_EXC_STACK: Exception stack memory contents. */ enum ath10k_fw_crash_dump_type { ATH10K_FW_CRASH_DUMP_REGISTERS = 0, ATH10K_FW_CRASH_DUMP_DBGLOG = 1, + ATH10K_FW_CRASH_DUMP_STACK = 2, + ATH10K_FW_CRASH_DUMP_EXC_STACK = 3, + ATH10K_FW_CRASH_DUMP_MAX, }; @@ -103,8 +108,11 @@ struct ath10k_dump_file_data { /* VERMAGIC_STRING */ char kernel_ver[64]; + __le32 stack_addr; + __le32 exc_stack_addr; + /* room for growth w/out changing binary format */ - u8 unused[128]; + u8 unused[120]; /* struct ath10k_tlv_dump_data + more */ u8 data[0]; @@ -792,6 +800,8 @@ static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) len = hdr_len; len += sizeof(*dump_tlv) + sizeof(crash_data->registers); len += sizeof(*dump_tlv) + sizeof(ar->debug.dbglog_entry_data); + len += sizeof(*dump_tlv) + sizeof(crash_data->stack_buf); + len += sizeof(*dump_tlv) + sizeof(crash_data->exc_stack_buf); sofar += hdr_len; @@ -831,6 +841,8 @@ static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) dump_data->ht_cap_info = cpu_to_le32(ar->ht_cap_info); dump_data->vht_cap_info = cpu_to_le32(ar->vht_cap_info); dump_data->num_rf_chains = cpu_to_le32(ar->num_rf_chains); + dump_data->stack_addr = cpu_to_le32(crash_data->stack_addr); + dump_data->exc_stack_addr = cpu_to_le32(crash_data->exc_stack_addr); strlcpy(dump_data->fw_ver, ar->hw->wiphy->fw_version, sizeof(dump_data->fw_ver)); @@ -863,7 +875,22 @@ static struct ath10k_dump_file_data *ath10k_build_dump_file(struct ath10k *ar) cpu_to_le32(ar->debug.dbglog_entry_data.head_idx); dbglog_storage->tail_idx = cpu_to_le32(ar->debug.dbglog_entry_data.tail_idx); + sofar += sizeof(*dump_tlv) + tmp; + /* Gather firmware stack dump */ + tmp = sizeof(crash_data->stack_buf); + dump_tlv = (struct ath10k_tlv_dump_data *)(buf + sofar); + dump_tlv->type = cpu_to_le32(ATH10K_FW_CRASH_DUMP_STACK); + dump_tlv->tlv_len = cpu_to_le32(tmp); + memcpy(dump_tlv->tlv_data, crash_data->stack_buf, tmp); + sofar += sizeof(*dump_tlv) + tmp; + + /* Gather firmware exception stack dump */ + tmp = sizeof(crash_data->exc_stack_buf); + dump_tlv = (struct ath10k_tlv_dump_data *)(buf + sofar); + dump_tlv->type = cpu_to_le32(ATH10K_FW_CRASH_DUMP_EXC_STACK); + dump_tlv->tlv_len = cpu_to_le32(tmp); + memcpy(dump_tlv->tlv_data, crash_data->exc_stack_buf, tmp); sofar += sizeof(*dump_tlv) + tmp; ar->debug.fw_crash_data->crashed_since_read = false; diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 5bbef4b..e86ebf0 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -122,6 +122,8 @@ enum qca9377_chip_id_rev { #define REG_DUMP_COUNT_QCA988X 60 +#define ATH10K_FW_STACK_SIZE 4096 + struct ath10k_fw_ie { __le32 id; __le32 len; diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index 16e32d0..62dd167 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -985,6 +985,22 @@ static int ath10k_pci_diag_read32(struct ath10k *ar, u32 address, u32 *value) return ret; } +static int __ath10k_pci_diag_read_hi_addr(struct ath10k *ar, __le32 *dest, + u32 src) +{ + u32 host_addr; + int ret; + + host_addr = host_interest_item_address(src); + + ret = ath10k_pci_diag_read32(ar, host_addr, dest); + if (ret != 0) { + ath10k_warn(ar, "failed to get memcpy hi address for firmware address %d: %d\n", + src, ret); + } + return ret; +} + static int __ath10k_pci_diag_read_hi(struct ath10k *ar, void *dest, u32 src, u32 len) { @@ -1013,6 +1029,9 @@ static int __ath10k_pci_diag_read_hi(struct ath10k *ar, void *dest, #define ath10k_pci_diag_read_hi(ar, dest, src, len) \ __ath10k_pci_diag_read_hi(ar, dest, HI_ITEM(src), len) +#define ath10k_pci_diag_read_hi_addr(ar, dest, src) \ + __ath10k_pci_diag_read_hi_addr(ar, dest, HI_ITEM(src)) + int ath10k_pci_diag_write_mem(struct ath10k *ar, u32 address, const void *data, int nbytes) { @@ -1405,6 +1424,37 @@ u16 ath10k_pci_hif_get_free_queue_number(struct ath10k *ar, u8 pipe) return ath10k_ce_num_free_src_entries(ar_pci->pipe_info[pipe].ce_hdl); } +/* Save the main firmware stack */ +static void ath10k_pci_dump_stack(struct ath10k *ar, + struct ath10k_fw_crash_data *crash_data) +{ + if (!crash_data) + return; + + lockdep_assert_held(&ar->data_lock); + BUILD_BUG_ON(ATH10K_FW_STACK_SIZE % 4); + + ath10k_pci_diag_read_hi(ar, crash_data->stack_buf, + hi_stack, ATH10K_FW_STACK_SIZE); + ath10k_pci_diag_read_hi_addr(ar, &crash_data->stack_addr, hi_stack); +} + +/* Save the exception firmware stack */ +static void ath10k_pci_dump_exc_stack(struct ath10k *ar, + struct ath10k_fw_crash_data *crash_data) +{ + if (!crash_data) + return; + + lockdep_assert_held(&ar->data_lock); + + ath10k_pci_diag_read_hi(ar, crash_data->exc_stack_buf, + hi_err_stack, ATH10K_FW_STACK_SIZE); + + ath10k_pci_diag_read_hi_addr(ar, &crash_data->exc_stack_addr, + hi_err_stack); +} + static void ath10k_pci_dump_registers(struct ath10k *ar, struct ath10k_fw_crash_data *crash_data) { @@ -1555,6 +1605,8 @@ static void ath10k_pci_fw_crashed_dump(struct ath10k *ar) ath10k_print_driver_info(ar); ath10k_pci_dump_registers(ar, crash_data); ath10k_pci_dump_dbglog(ar); + ath10k_pci_dump_stack(ar, crash_data); + ath10k_pci_dump_exc_stack(ar, crash_data); if (crash_data) crash_data->crashed_since_read = true; -- 2.4.3 _______________________________________________ ath10k mailing list ath10k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath10k
next prev parent reply other threads:[~2016-05-11 17:02 UTC|newest] Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-05-11 17:02 [PATCH v2 00/21] ath10k patches, generic and CT firmware related greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 01/21] ath10k: Fix crash related to printing features greearb 2016-05-11 17:02 ` greearb 2016-06-07 11:38 ` [v2,01/21] " Kalle Valo 2016-06-07 11:38 ` Kalle Valo 2016-06-20 20:49 ` [PATCH v2 01/21] " Ben Greear 2016-06-20 20:49 ` Ben Greear 2016-06-20 21:56 ` Valo, Kalle 2016-06-20 21:56 ` Valo, Kalle 2016-05-11 17:02 ` [PATCH v2 02/21] ath10k: fix typo in logging message greearb 2016-05-11 17:02 ` greearb 2016-09-27 12:19 ` [v2,02/21] " Kalle Valo 2016-09-27 12:19 ` Kalle Valo 2016-05-11 17:02 ` [PATCH v2 03/21] ath10k: Allow changing ath10k debug mask at runtime greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:06 ` Valo, Kalle 2016-09-14 14:06 ` Valo, Kalle 2016-09-14 15:33 ` Ben Greear 2016-09-14 15:33 ` Ben Greear 2016-09-15 14:19 ` Valo, Kalle 2016-09-15 14:19 ` Valo, Kalle 2016-09-15 15:07 ` Ben Greear 2016-09-15 15:07 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 04/21] ath10k: rate-limit packet tx errors greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:07 ` Valo, Kalle 2016-09-14 14:07 ` Valo, Kalle 2016-09-14 15:02 ` Ben Greear 2016-09-14 15:02 ` Ben Greear 2016-09-15 13:59 ` Valo, Kalle 2016-09-15 13:59 ` Valo, Kalle 2016-09-15 15:22 ` Ben Greear 2016-09-15 15:22 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 05/21] ath10k: save firmware debug log messages greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` greearb [this message] 2016-05-11 17:02 ` [PATCH v2 06/21] ath10k: save firmware stacks upon firmware crash greearb 2016-05-11 17:02 ` [PATCH v2 07/21] ath10k: save firmware RAM and ROM BSS sections on crash greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 08/21] ath10k: make firmware text debug messages more verbose greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:12 ` Valo, Kalle 2016-09-14 14:12 ` Valo, Kalle 2016-09-14 15:06 ` Ben Greear 2016-09-14 15:06 ` Ben Greear 2016-09-15 14:02 ` Valo, Kalle 2016-09-15 14:02 ` Valo, Kalle 2016-09-15 15:17 ` Ben Greear 2016-09-15 15:17 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 09/21] ath10k: print fw debug messages in hex greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:18 ` Valo, Kalle 2016-09-14 14:18 ` Valo, Kalle 2016-09-14 15:13 ` Ben Greear 2016-09-14 15:13 ` Ben Greear 2016-09-15 14:06 ` Valo, Kalle 2016-09-15 14:06 ` Valo, Kalle 2016-09-15 15:14 ` Ben Greear 2016-09-15 15:14 ` Ben Greear 2016-09-15 17:34 ` Grumbach, Emmanuel 2016-09-15 17:34 ` Grumbach, Emmanuel 2016-09-15 17:59 ` Ben Greear 2016-09-15 17:59 ` Ben Greear 2016-09-15 18:08 ` Ben Greear 2016-09-15 18:08 ` Ben Greear 2016-09-15 20:22 ` Grumbach, Emmanuel 2016-09-15 20:22 ` Grumbach, Emmanuel 2016-05-11 17:02 ` [PATCH v2 10/21] ath10k: support logging ath10k_info as KERN_DEBUG greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:19 ` Valo, Kalle 2016-09-14 14:19 ` Valo, Kalle 2016-09-14 15:14 ` Ben Greear 2016-09-14 15:14 ` Ben Greear 2016-09-15 14:12 ` Valo, Kalle 2016-09-15 14:12 ` Valo, Kalle 2016-09-15 15:11 ` Ben Greear 2016-09-15 15:11 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 11/21] ath10k: add fw-powerup-fail to ethtool stats greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:25 ` Valo, Kalle 2016-09-14 14:25 ` Valo, Kalle 2016-09-14 15:19 ` Ben Greear 2016-09-14 15:19 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 12/21] ath10k: Support up to 64 vdevs greearb 2016-05-11 17:02 ` greearb 2016-09-14 15:01 ` Valo, Kalle 2016-09-14 15:01 ` Valo, Kalle 2016-05-11 17:02 ` [PATCH v2 13/21] ath10k: Document cycle count related counters greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 14/21] ath10k: Add tx/rx bytes, cycle counters to ethtool stats greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 15/21] ath10k: support CT firmware flag greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:30 ` Valo, Kalle 2016-09-14 14:30 ` Valo, Kalle 2016-09-14 15:24 ` Ben Greear 2016-09-14 15:24 ` Ben Greear 2016-09-15 14:15 ` Valo, Kalle 2016-09-15 14:15 ` Valo, Kalle 2016-09-15 14:43 ` Ben Greear 2016-09-15 14:43 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 16/21] ath10k: Support 32+ stations greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 17/21] ath10k: Enable detecting failure to install key in firmware (CT) greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 18/21] ath10k: Note limitation on beaconing vdevs greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 19/21] ath10k: Enable adhoc mode for CT firmware greearb 2016-05-11 17:02 ` greearb 2016-09-14 14:37 ` Valo, Kalle 2016-09-14 14:37 ` Valo, Kalle 2016-09-14 15:28 ` Ben Greear 2016-09-14 15:28 ` Ben Greear 2016-05-11 17:02 ` [PATCH v2 20/21] ath10k: read firmware crash over ioread32 if CE fails greearb 2016-05-11 17:02 ` greearb 2016-05-11 17:02 ` [PATCH v2 21/21] ath10k: Read dbglog buffers over register ping-pong greearb 2016-05-11 17:02 ` greearb
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1462986153-16318-7-git-send-email-greearb@candelatech.com \ --to=greearb@candelatech.com \ --cc=ath10k@lists.infradead.org \ --cc=kvalo@qca.qualcomm.com \ --cc=linux-wireless@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.