From 28f92f4bda40a6e9bcdf6de653fa00efa308a095 Mon Sep 17 00:00:00 2001 From: Madhan Mohan R Date: Tue, 28 Aug 2018 17:14:20 +0530 Subject: [PATCH 029/296] brcmfmac: reset PMU, backplane & all cores in CYW4373 during rmmod To do a clean reset of the chip during rmmod brcmfmac, program the PmuWatchdogCounter register. When a watchdog reset occurs, the PMU, backplane and all of the cores in the chip are reset. Signed-off-by: Madhan Mohan R Signed-off-by: Chi-hsien Lin --- .../broadcom/brcm80211/brcmfmac/chip.c | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c index 9618ddea95a0..308c8ff6a603 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c @@ -225,9 +225,15 @@ struct sbsocramregs { /* PMU CONTROL EXT mask for 43012C0 */ #define CY_43012_PMU_CONTROL_EXT_MASK 0x11 -/* PMU CONTROL EXT mask for 43012C0 */ +/* PMU Watchdog Counter Tick value for 43012C0 */ #define CY_43012_PMU_WATCHDOG_TICK_VAL 0x04 +/* PMU Watchdog Counter Tick value for 4373 */ +#define CY_4373_PMU_WATCHDOG_TICK_VAL 0x04 + +/* Minimum PMU resource mask for 4373 */ +#define CY_4373_PMU_MIN_RES_MASK 0xFCAFF7F + struct brcmf_core_priv { struct brcmf_core pub; u32 wrapbase; @@ -1619,7 +1625,18 @@ void brcmf_chip_reset_watchdog(struct brcmf_chip *pub) chip->ops->write32(chip->ctx, addr, CY_43012_PMU_WATCHDOG_TICK_VAL); break; - + case CY_CC_4373_CHIP_ID: + addr = CORE_CC_REG(base, min_res_mask); + chip->ops->write32(chip->ctx, addr, + CY_4373_PMU_MIN_RES_MASK); + addr = CORE_CC_REG(base, watchdog_res_mask); + chip->ops->write32(chip->ctx, addr, + CY_4373_PMU_MIN_RES_MASK); + addr = CORE_CC_REG(base, pmuwatchdog); + chip->ops->write32(chip->ctx, addr, + CY_4373_PMU_WATCHDOG_TICK_VAL); + mdelay(100); + break; default: break; } -- 2.25.1