Loading drivers/net/wireless/wcnss/wcnss_wlan.c +33 −7 Original line number Diff line number Diff line Loading @@ -589,13 +589,12 @@ void wcnss_pronto_is_a2xb_bus_stall(void *tst_addr, u32 fifo_mask, char *type) } } /* Log pronto debug registers before sending reset interrupt */ /* Log pronto debug registers during SSR Timeout CB */ void wcnss_pronto_log_debug_regs(void) { void __iomem *reg_addr, *tst_addr, *tst_ctrl_addr; u32 reg = 0, reg2 = 0, reg3 = 0, reg4 = 0; reg_addr = penv->msm_wcnss_base + PRONTO_PMU_SPARE_OFFSET; reg = readl_relaxed(reg_addr); pr_err("PRONTO_PMU_SPARE %08x\n", reg); Loading Loading @@ -799,6 +798,33 @@ void wcnss_pronto_log_debug_regs(void) reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_AHB_CBCR_OFFSET; reg3 = readl_relaxed(reg_addr); pr_err("PMU_WLAN_AHB_CBCR %08x\n", reg3); } EXPORT_SYMBOL(wcnss_pronto_log_debug_regs); /* Log pronto debug registers before sending reset interrupt */ void wcnss_pronto_dump_regs(void) { void __iomem *reg_addr; u32 reg = 0, reg2 = 0, reg3 = 0, reg4 = 0; if (!penv || !penv->triggered || !penv->msm_wcnss_base) { pr_info(DEVICE " WCNSS driver is not triggered by userspace\n"); return; } wcnss_pronto_log_debug_regs(); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_BCR_OFFSET; reg = readl_relaxed(reg_addr); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_GDSCR_OFFSET; reg2 = readl_relaxed(reg_addr); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_AHB_CBCR_OFFSET; reg3 = readl_relaxed(reg_addr); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_CPU_AHB_CMD_RCGR_OFFSET; reg4 = readl_relaxed(reg_addr); msleep(50); Loading Loading @@ -878,7 +904,7 @@ void wcnss_pronto_log_debug_regs(void) reg = readl_relaxed(penv->alarms_tactl); pr_err("ALARMS_TACTL %08x\n", reg); } EXPORT_SYMBOL(wcnss_pronto_log_debug_regs); EXPORT_SYMBOL(wcnss_pronto_dump_regs); #ifdef CONFIG_WCNSS_REGISTER_DUMP_ON_BITE Loading Loading @@ -1095,7 +1121,7 @@ void wcnss_log_debug_regs_on_bite(void) pr_debug("wcnss: clock frequency is: %luHz\n", clk_rate); if (clk_rate) { wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); if (wcnss_get_mux_control()) wcnss_log_iris_regs(); } else { Loading @@ -1115,7 +1141,7 @@ void wcnss_reset_fiq(bool clk_chk_en) if (clk_chk_en) { wcnss_log_debug_regs_on_bite(); } else { wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); if (wcnss_get_mux_control()) wcnss_log_iris_regs(); } Loading Loading @@ -3161,7 +3187,7 @@ wcnss_trigger_config(struct platform_device *pdev) dev_err(&pdev->dev, "Peripheral Loader failed on WCNSS.\n"); ret = PTR_ERR(penv->pil); wcnss_disable_pc_add_req(); wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); } } while (pil_retry++ < WCNSS_MAX_PIL_RETRY && IS_ERR(penv->pil)); Loading Loading @@ -3413,7 +3439,7 @@ static int wcnss_notif_cb(struct notifier_block *this, unsigned long code, if (pdev && pwlanconfig) wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF, NULL); wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); wcnss_disable_pc_remove_req(); } else if (SUBSYS_BEFORE_SHUTDOWN == code) { wcnss_disable_pc_add_req(); Loading include/linux/wcnss_wlan.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. /* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -124,6 +124,7 @@ void wcnss_suspend_notify(void); void wcnss_resume_notify(void); void wcnss_riva_log_debug_regs(void); void wcnss_pronto_log_debug_regs(void); void wcnss_pronto_dump_regs(void); int wcnss_is_hw_pronto_ver3(void); int wcnss_device_ready(void); bool wcnss_cbc_complete(void); Loading Loading
drivers/net/wireless/wcnss/wcnss_wlan.c +33 −7 Original line number Diff line number Diff line Loading @@ -589,13 +589,12 @@ void wcnss_pronto_is_a2xb_bus_stall(void *tst_addr, u32 fifo_mask, char *type) } } /* Log pronto debug registers before sending reset interrupt */ /* Log pronto debug registers during SSR Timeout CB */ void wcnss_pronto_log_debug_regs(void) { void __iomem *reg_addr, *tst_addr, *tst_ctrl_addr; u32 reg = 0, reg2 = 0, reg3 = 0, reg4 = 0; reg_addr = penv->msm_wcnss_base + PRONTO_PMU_SPARE_OFFSET; reg = readl_relaxed(reg_addr); pr_err("PRONTO_PMU_SPARE %08x\n", reg); Loading Loading @@ -799,6 +798,33 @@ void wcnss_pronto_log_debug_regs(void) reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_AHB_CBCR_OFFSET; reg3 = readl_relaxed(reg_addr); pr_err("PMU_WLAN_AHB_CBCR %08x\n", reg3); } EXPORT_SYMBOL(wcnss_pronto_log_debug_regs); /* Log pronto debug registers before sending reset interrupt */ void wcnss_pronto_dump_regs(void) { void __iomem *reg_addr; u32 reg = 0, reg2 = 0, reg3 = 0, reg4 = 0; if (!penv || !penv->triggered || !penv->msm_wcnss_base) { pr_info(DEVICE " WCNSS driver is not triggered by userspace\n"); return; } wcnss_pronto_log_debug_regs(); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_BCR_OFFSET; reg = readl_relaxed(reg_addr); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_GDSCR_OFFSET; reg2 = readl_relaxed(reg_addr); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_WLAN_AHB_CBCR_OFFSET; reg3 = readl_relaxed(reg_addr); reg_addr = penv->msm_wcnss_base + PRONTO_PMU_CPU_AHB_CMD_RCGR_OFFSET; reg4 = readl_relaxed(reg_addr); msleep(50); Loading Loading @@ -878,7 +904,7 @@ void wcnss_pronto_log_debug_regs(void) reg = readl_relaxed(penv->alarms_tactl); pr_err("ALARMS_TACTL %08x\n", reg); } EXPORT_SYMBOL(wcnss_pronto_log_debug_regs); EXPORT_SYMBOL(wcnss_pronto_dump_regs); #ifdef CONFIG_WCNSS_REGISTER_DUMP_ON_BITE Loading Loading @@ -1095,7 +1121,7 @@ void wcnss_log_debug_regs_on_bite(void) pr_debug("wcnss: clock frequency is: %luHz\n", clk_rate); if (clk_rate) { wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); if (wcnss_get_mux_control()) wcnss_log_iris_regs(); } else { Loading @@ -1115,7 +1141,7 @@ void wcnss_reset_fiq(bool clk_chk_en) if (clk_chk_en) { wcnss_log_debug_regs_on_bite(); } else { wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); if (wcnss_get_mux_control()) wcnss_log_iris_regs(); } Loading Loading @@ -3161,7 +3187,7 @@ wcnss_trigger_config(struct platform_device *pdev) dev_err(&pdev->dev, "Peripheral Loader failed on WCNSS.\n"); ret = PTR_ERR(penv->pil); wcnss_disable_pc_add_req(); wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); } } while (pil_retry++ < WCNSS_MAX_PIL_RETRY && IS_ERR(penv->pil)); Loading Loading @@ -3413,7 +3439,7 @@ static int wcnss_notif_cb(struct notifier_block *this, unsigned long code, if (pdev && pwlanconfig) wcnss_wlan_power(&pdev->dev, pwlanconfig, WCNSS_WLAN_SWITCH_OFF, NULL); wcnss_pronto_log_debug_regs(); wcnss_pronto_dump_regs(); wcnss_disable_pc_remove_req(); } else if (SUBSYS_BEFORE_SHUTDOWN == code) { wcnss_disable_pc_add_req(); Loading
include/linux/wcnss_wlan.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. /* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -124,6 +124,7 @@ void wcnss_suspend_notify(void); void wcnss_resume_notify(void); void wcnss_riva_log_debug_regs(void); void wcnss_pronto_log_debug_regs(void); void wcnss_pronto_dump_regs(void); int wcnss_is_hw_pronto_ver3(void); int wcnss_device_ready(void); bool wcnss_cbc_complete(void); Loading