From patchwork Mon May 9 23:11:03 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 9051721 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Original-To: patchwork-ath10k@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 2127DBF440 for ; Mon, 9 May 2016 23:18:52 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 34A282012B for ; Mon, 9 May 2016 23:18:51 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3DFD02010B for ; Mon, 9 May 2016 23:18:50 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1azuRp-0000Uo-Pf; Mon, 09 May 2016 23:18:45 +0000 Received: from merlin.infradead.org ([2001:4978:20e::2]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1azuRh-0000Mr-2f for ath10k@bombadil.infradead.org; Mon, 09 May 2016 23:18:37 +0000 Received: from mail2.candelatech.com ([208.74.158.173]) by merlin.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1azuRf-0007Uj-NR for ath10k@lists.infradead.org; Mon, 09 May 2016 23:18:36 +0000 Received: from ben-dt3.candelatech.com (firewall.candelatech.com [50.251.239.81]) by mail2.candelatech.com (Postfix) with ESMTP id 70E3040BAEF; Mon, 9 May 2016 16:11:26 -0700 (PDT) From: greearb@candelatech.com To: ath10k@lists.infradead.org Subject: [PATCH 09/21] ath10k: print fw debug messages in hex. Date: Mon, 9 May 2016 16:11:03 -0700 Message-Id: <1462835475-11079-10-git-send-email-greearb@candelatech.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1462835475-11079-1-git-send-email-greearb@candelatech.com> References: <1462835475-11079-1-git-send-email-greearb@candelatech.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160509_191835_885634_C9F84CEC X-CRM114-Status: GOOD ( 11.47 ) X-Spam-Score: -4.0 (----) X-BeenThere: ath10k@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ben Greear , linux-wireless@vger.kernel.org MIME-Version: 1.0 Sender: "ath10k" Errors-To: ath10k-bounces+patchwork-ath10k=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-6.3 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Ben Greear This allows user-space tools to decode debug-log messages by parsing dmesg or /var/log/messages. Signed-off-by: Ben Greear --- drivers/net/wireless/ath/ath10k/debug.c | 72 +++++++++++++++++++++++++++++++++ drivers/net/wireless/ath/ath10k/debug.h | 5 +++ drivers/net/wireless/ath/ath10k/pci.c | 3 ++ drivers/net/wireless/ath/ath10k/wmi.c | 12 ++++++ 4 files changed, 92 insertions(+) diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index 28e0c05..c38862b 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c @@ -2660,3 +2660,75 @@ void ath10k_dbg_dump(struct ath10k *ar, EXPORT_SYMBOL(ath10k_dbg_dump); #endif /* CONFIG_ATH10K_DEBUG */ + +void ath10k_dbg_print_fw_dbg_buffer(struct ath10k *ar, __le32 *ibuf, int len, + const char* lvl) +{ + /* Print out raw hex, external tools can decode if + * they care. + * TODO: Add ar identifier to messages. + */ + int q = 0; + + dev_printk(lvl, ar->dev, "ath10k_pci ATH10K_DBG_BUFFER:\n"); + while (q < len) { + if (q + 8 <= len) { + printk("%sath10k: [%04d]: %08X %08X %08X %08X %08X %08X %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1], ibuf[q+2], ibuf[q+3], + ibuf[q+4], ibuf[q+5], ibuf[q+6], ibuf[q+7]); + q += 8; + } + else if (q + 7 <= len) { + printk("%sath10k: [%04d]: %08X %08X %08X %08X %08X %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1], ibuf[q+2], ibuf[q+3], + ibuf[q+4], ibuf[q+5], ibuf[q+6]); + q += 7; + } + else if (q + 6 <= len) { + printk("%sath10k: [%04d]: %08X %08X %08X %08X %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1], ibuf[q+2], ibuf[q+3], + ibuf[q+4], ibuf[q+5]); + q += 6; + } + else if (q + 5 <= len) { + printk("%sath10k: [%04d]: %08X %08X %08X %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1], ibuf[q+2], ibuf[q+3], + ibuf[q+4]); + q += 5; + } + else if (q + 4 <= len) { + printk("%sath10k: [%04d]: %08X %08X %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1], ibuf[q+2], ibuf[q+3]); + q += 4; + } + else if (q + 3 <= len) { + printk("%sath10k: [%04d]: %08X %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1], ibuf[q+2]); + q += 3; + } + else if (q + 2 <= len) { + printk("%sath10k: [%04d]: %08X %08X\n", + lvl, q, + ibuf[q], ibuf[q+1]); + q += 2; + } + else if (q + 1 <= len) { + printk("%sath10k: [%04d]: %08X\n", + lvl, q, + ibuf[q]); + q += 1; + } + else { + break; + } + }/* while */ + + dev_printk(lvl, ar->dev, "ATH10K_END\n"); +} +EXPORT_SYMBOL(ath10k_dbg_print_fw_dbg_buffer); diff --git a/drivers/net/wireless/ath/ath10k/debug.h b/drivers/net/wireless/ath/ath10k/debug.h index 613ad7e..6356dce 100644 --- a/drivers/net/wireless/ath/ath10k/debug.h +++ b/drivers/net/wireless/ath/ath10k/debug.h @@ -38,6 +38,7 @@ enum ath10k_debug_mask { ATH10K_DBG_WMI_PRINT = 0x00002000, ATH10K_DBG_PCI_PS = 0x00004000, ATH10K_DBG_AHB = 0x00008000, + ATH10K_DBG_FW = 0x80000000, ATH10K_DBG_ANY = 0xffffffff, }; @@ -193,4 +194,8 @@ static inline void ath10k_dbg_dump(struct ath10k *ar, { } #endif /* CONFIG_ATH10K_DEBUG */ + +void ath10k_dbg_print_fw_dbg_buffer(struct ath10k *ar, __le32 *buffer, + int len, const char* lvl); + #endif /* _DEBUG_H_ */ diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index e6315ec..dbf0db8 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -1623,6 +1623,9 @@ static void ath10k_pci_dump_dbglog(struct ath10k *ar) WARN_ON(len & 0x3); ath10k_dbg_save_fw_dbg_buffer(ar, (__le32 *)(buffer), len >> 2); + ath10k_dbg_print_fw_dbg_buffer(ar, (__le32 *)(buffer), + dbuf.length/sizeof(__le32), + KERN_ERR); kfree(buffer); next: diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c index d9e4b77..6cfba41 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c @@ -2510,6 +2510,18 @@ int ath10k_wmi_event_debug_mesg(struct ath10k *ar, struct sk_buff *skb) (skb->len - 4)/sizeof(__le32)); spin_unlock_bh(&ar->data_lock); + if (ev->dropped_count) + ath10k_warn(ar, "WARNING: Dropped dbglog buffers: %d\n", __le32_to_cpu(ev->dropped_count)); + + if (ath10k_debug_mask & ATH10K_DBG_FW) + ath10k_dbg_print_fw_dbg_buffer(ar, ev->messages, + (skb->len - 4)/sizeof(__le32), + KERN_INFO); + else + ath10k_dbg_print_fw_dbg_buffer(ar, ev->messages, + (skb->len - 4)/sizeof(__le32), + KERN_DEBUG); + return 0; }