Files
build/patch/kernel/archive/sunxi-5.15/patches.cypress/0036-brcmfmac-reset-PMU-backplane-all-cores-in-CYW4373-du.patch

61 lines
2.1 KiB
Diff

From 5760bb605b430b71beb78a128cd1addca751c06e Mon Sep 17 00:00:00 2001
From: Madhan Mohan R <madhanmohan.r@cypress.com>
Date: Tue, 28 Aug 2018 17:14:20 +0530
Subject: [PATCH 036/179] 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 <madhanmohan.r@cypress.com>
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
---
.../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 599c1b5ead1b..6829ca086695 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
@@ -224,9 +224,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;
@@ -1595,7 +1601,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.17.1