mirror of
https://github.com/Heleguo/lede.git
synced 2025-12-22 05:41:16 +00:00
54 lines
2.1 KiB
Diff
54 lines
2.1 KiB
Diff
From c36c6c77df947acbc4e562a7bc199bff06b79210 Mon Sep 17 00:00:00 2001
|
|
From: Hector Martin <marcan@marcan.st>
|
|
Date: Mon, 20 Dec 2021 20:00:57 +0900
|
|
Subject: [PATCH 102/171] brcmfmac: chip: Only disable D11 cores; handle an
|
|
arbitrary number
|
|
|
|
At least on BCM4387, the D11 cores are held in reset on cold startup and
|
|
firmware expects to release reset itself. Just assert reset here and let
|
|
firmware deassert it. Premature deassertion results in the firmware
|
|
failing to initialize properly some of the time, with strange AXI bus
|
|
errors.
|
|
|
|
Also, BCM4387 has 3 cores, up from 2. The logic for handling that is in
|
|
brcmf_chip_ai_resetcore(), but since we aren't using that any more, just
|
|
handle it here.
|
|
|
|
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
|
|
Signed-off-by: Hector Martin <marcan@marcan.st>
|
|
---
|
|
.../net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 13 ++++++++-----
|
|
1 file changed, 8 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
|
index 4108108f0431..8266466283e4 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
|
|
@@ -1290,15 +1290,18 @@ static bool brcmf_chip_cm3_set_active(struct brcmf_chip_priv *chip)
|
|
static inline void
|
|
brcmf_chip_cr4_set_passive(struct brcmf_chip_priv *chip)
|
|
{
|
|
+ int i;
|
|
struct brcmf_core *core;
|
|
|
|
brcmf_chip_disable_arm(chip, BCMA_CORE_ARM_CR4);
|
|
|
|
- core = brcmf_chip_get_core(&chip->pub, BCMA_CORE_80211);
|
|
- brcmf_chip_resetcore(core, D11_BCMA_IOCTL_PHYRESET |
|
|
- D11_BCMA_IOCTL_PHYCLOCKEN,
|
|
- D11_BCMA_IOCTL_PHYCLOCKEN,
|
|
- D11_BCMA_IOCTL_PHYCLOCKEN);
|
|
+ /* Disable the cores only and let the firmware enable them.
|
|
+ * Releasing reset ourselves breaks BCM4387 in weird ways.
|
|
+ */
|
|
+ for (i = 0; (core = brcmf_chip_get_d11core(&chip->pub, i)); i++)
|
|
+ brcmf_chip_coredisable(core, D11_BCMA_IOCTL_PHYRESET |
|
|
+ D11_BCMA_IOCTL_PHYCLOCKEN,
|
|
+ D11_BCMA_IOCTL_PHYCLOCKEN);
|
|
}
|
|
|
|
static bool brcmf_chip_cr4_set_active(struct brcmf_chip_priv *chip, u32 rstvec)
|
|
--
|
|
2.34.1
|
|
|