Files
build/patch/kernel/archive/sunxi-5.15/patches.cypress/0096-brcmfmac-Optimize-CYW4373-SDIO-current.patch

66 lines
2.2 KiB
Diff

From b7edf2ad70757a18706cb152763553cf98669627 Mon Sep 17 00:00:00 2001
From: Double Lo <Double.Lo@infineon.com>
Date: Tue, 4 May 2021 05:30:28 -0500
Subject: [PATCH 096/179] brcmfmac: Optimize CYW4373 SDIO current
Optimize the current by requesting HT_AVAIL clock instead of HT clock.
Signed-off-by: Double Lo <Double.Lo@infineon.com>
---
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 7e0aeb1434fd..da273eff93d2 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -2540,6 +2540,14 @@ static bool brcmf_chip_is_ulp(struct brcmf_chip *ci)
return false;
}
+static bool brcmf_sdio_use_ht_avail(struct brcmf_chip *ci)
+{
+ if (ci->chip == CY_CC_4373_CHIP_ID)
+ return true;
+ else
+ return false;
+}
+
static void brcmf_sdio_bus_stop(struct device *dev)
{
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
@@ -2576,7 +2584,8 @@ static void brcmf_sdio_bus_stop(struct device *dev)
&err);
if (!err) {
bpreq = saveclk;
- bpreq |= brcmf_chip_is_ulp(bus->ci) ?
+ bpreq |= (brcmf_sdio_use_ht_avail(bus->ci) ||
+ brcmf_chip_is_ulp(bus->ci)) ?
SBSDIO_HT_AVAIL_REQ : SBSDIO_FORCE_HT;
brcmf_sdiod_writeb(sdiodev,
SBSDIO_FUNC1_CHIPCLKCSR,
@@ -3707,7 +3716,8 @@ static void brcmf_sdio_sr_init(struct brcmf_sdio *bus)
brcmf_dbg(TRACE, "Enter\n");
- if (brcmf_chip_is_ulp(bus->ci)) {
+ if (brcmf_sdio_use_ht_avail(bus->ci) ||
+ brcmf_chip_is_ulp(bus->ci)) {
wakeupctrl = SBSDIO_FUNC1_WCTRL_ALPWAIT_SHIFT;
chipclkcsr = SBSDIO_HT_AVAIL_REQ;
} else {
@@ -4510,7 +4520,8 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
if (!err) {
bpreq = saveclk;
- bpreq |= brcmf_chip_is_ulp(bus->ci) ?
+ bpreq |= (brcmf_sdio_use_ht_avail(bus->ci) ||
+ brcmf_chip_is_ulp(bus->ci)) ?
SBSDIO_HT_AVAIL_REQ : SBSDIO_FORCE_HT;
brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
bpreq, &err);
--
2.17.1