* [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio
@ 2025-06-21 11:29 Rouven Czerwinski
2025-06-21 11:29 ` [PATCH 2/2] brcmfmac: remove always true variable and code Rouven Czerwinski
2025-07-08 16:32 ` [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Arend Van Spriel
0 siblings, 2 replies; 5+ messages in thread
From: Rouven Czerwinski @ 2025-06-21 11:29 UTC (permalink / raw)
To: Arend van Spriel
Cc: kernel, Rouven Czerwinski, linux-wireless, brcm80211,
brcm80211-dev-list.pdl, linux-kernel
The sdio interface implements an unreachable poll mode. Remove it since
the code can't be reached, if the poll mode needs to be implemented it
can simply be resurrected using the usual git means.
Signed-off-by: Rouven Czerwinski <rouven@czerwinskis.de>
---
.../broadcom/brcm80211/brcmfmac/sdio.c | 48 +------------------
1 file changed, 2 insertions(+), 46 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index cf26ab15ee0c..26e09a7acb02 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -404,7 +404,6 @@ struct brcmf_sdio_hdrinfo {
struct brcmf_sdio_count {
uint intrcount; /* Count of device interrupt callbacks */
uint lastintrs; /* Count as of last watchdog timer */
- uint pollcnt; /* Count of active polls */
uint regfails; /* Count of R_REG failures */
uint tx_sderrs; /* Count of tx attempts with sd errors */
uint fcqueued; /* Tx packets that got queued */
@@ -476,11 +475,8 @@ struct brcmf_sdio {
u8 sdpcm_ver; /* Bus protocol reported by dongle */
bool intr; /* Use interrupts */
- bool poll; /* Use polling */
atomic_t ipend; /* Device interrupt is pending */
uint spurious; /* Count of spurious interrupts */
- uint pollrate; /* Ticks between device polls */
- uint polltick; /* Tick counter */
#ifdef DEBUG
uint console_interval;
@@ -3178,7 +3174,7 @@ static int brcmf_debugfs_sdio_count_read(struct seq_file *seq, void *data)
seq_printf(seq,
"intrcount: %u\nlastintrs: %u\n"
- "pollcnt: %u\nregfails: %u\n"
+ "pollcnt: 0\nregfails: %u\n"
"tx_sderrs: %u\nfcqueued: %u\n"
"rxrtx: %u\nrx_toolong: %u\n"
"rxc_errors: %u\nrx_hdrfail: %u\n"
@@ -3192,7 +3188,7 @@ static int brcmf_debugfs_sdio_count_read(struct seq_file *seq, void *data)
"tx_ctlpkts: %lu\nrx_ctlerrs: %lu\n"
"rx_ctlpkts: %lu\nrx_readahead: %lu\n",
sdcnt->intrcount, sdcnt->lastintrs,
- sdcnt->pollcnt, sdcnt->regfails,
+ sdcnt->regfails,
sdcnt->tx_sderrs, sdcnt->fcqueued,
sdcnt->rxrtx, sdcnt->rx_toolong,
sdcnt->rxc_errors, sdcnt->rx_hdrfail,
@@ -3669,43 +3665,6 @@ static void brcmf_sdio_bus_watchdog(struct brcmf_sdio *bus)
{
brcmf_dbg(TIMER, "Enter\n");
- /* Poll period: check device if appropriate. */
- if (!bus->sr_enabled &&
- bus->poll && (++bus->polltick >= bus->pollrate)) {
- u32 intstatus = 0;
-
- /* Reset poll tick */
- bus->polltick = 0;
-
- /* Check device if no interrupts */
- if (!bus->intr ||
- (bus->sdcnt.intrcount == bus->sdcnt.lastintrs)) {
-
- if (!bus->dpc_triggered) {
- u8 devpend;
-
- sdio_claim_host(bus->sdiodev->func1);
- devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
- SDIO_CCCR_INTx, NULL);
- sdio_release_host(bus->sdiodev->func1);
- intstatus = devpend & (INTR_STATUS_FUNC1 |
- INTR_STATUS_FUNC2);
- }
-
- /* If there is something, make like the ISR and
- schedule the DPC */
- if (intstatus) {
- bus->sdcnt.pollcnt++;
- atomic_set(&bus->ipend, 1);
-
- bus->dpc_triggered = true;
- queue_work(bus->brcmf_wq, &bus->datawork);
- }
- }
-
- /* Update interrupt tracking */
- bus->sdcnt.lastintrs = bus->sdcnt.intrcount;
- }
#ifdef DEBUG
/* Poll for console output periodically */
if (bus->sdiodev->state == BRCMF_SDIOD_DATA && BRCMF_FWCON_ON() &&
@@ -4080,9 +4039,6 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
/* Set the poll and/or interrupt flags */
bus->intr = true;
- bus->poll = false;
- if (bus->poll)
- bus->pollrate = 1;
return 0;
--
2.49.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] brcmfmac: remove always true variable and code
2025-06-21 11:29 [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Rouven Czerwinski
@ 2025-06-21 11:29 ` Rouven Czerwinski
2025-06-22 3:58 ` kernel test robot
2025-07-08 16:32 ` [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Arend Van Spriel
1 sibling, 1 reply; 5+ messages in thread
From: Rouven Czerwinski @ 2025-06-21 11:29 UTC (permalink / raw)
To: Arend van Spriel
Cc: kernel, Rouven Czerwinski, linux-wireless, brcm80211,
brcm80211-dev-list.pdl, linux-kernel
The bus->intr variable was always set to true inside the probe attach
function, remove it. Also remove the code that depends on the variable
to be set on false.
Signed-off-by: Rouven Czerwinski <rouven@czerwinskis.de>
---
.../broadcom/brcm80211/brcmfmac/sdio.c | 25 -------------------
1 file changed, 25 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 26e09a7acb02..861c7f51b4cd 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -474,7 +474,6 @@ struct brcmf_sdio {
u8 sdpcm_ver; /* Bus protocol reported by dongle */
- bool intr; /* Use interrupts */
atomic_t ipend; /* Device interrupt is pending */
uint spurious; /* Count of spurious interrupts */
@@ -2327,8 +2326,6 @@ static uint brcmf_sdio_sendfromq(struct brcmf_sdio *bus, uint maxframes)
{
struct sk_buff *pkt;
struct sk_buff_head pktq;
- u32 intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
- u32 intstatus = 0;
int ret = 0, prec_out, i;
uint cnt = 0;
u8 tx_prec_map, pkt_num;
@@ -2361,21 +2358,6 @@ static uint brcmf_sdio_sendfromq(struct brcmf_sdio *bus, uint maxframes)
ret = brcmf_sdio_txpkt(bus, &pktq, SDPCM_DATA_CHANNEL);
cnt += i;
-
- /* In poll mode, need to check for other events */
- if (!bus->intr) {
- /* Check device status, signal pending interrupt */
- sdio_claim_host(bus->sdiodev->func1);
- intstatus = brcmf_sdiod_readl(bus->sdiodev,
- intstat_addr, &ret);
- sdio_release_host(bus->sdiodev->func1);
-
- bus->sdcnt.f2txdata++;
- if (ret != 0)
- break;
- if (intstatus & bus->hostintmask)
- atomic_set(&bus->ipend, 1);
- }
}
/* Deflow-control stack if needed */
@@ -3653,10 +3635,6 @@ void brcmf_sdio_isr(struct brcmf_sdio *bus, bool in_isr)
brcmf_err("failed backplane access\n");
}
- /* Disable additional interrupts (is this needed now)? */
- if (!bus->intr)
- brcmf_err("isr w/o interrupt configured!\n");
-
bus->dpc_triggered = true;
queue_work(bus->brcmf_wq, &bus->datawork);
}
@@ -4037,9 +4015,6 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
bus->rxhdr = (u8 *) roundup((unsigned long)&bus->hdrbuf[0],
bus->head_align);
- /* Set the poll and/or interrupt flags */
- bus->intr = true;
-
return 0;
fail:
--
2.49.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] brcmfmac: remove always true variable and code
2025-06-21 11:29 ` [PATCH 2/2] brcmfmac: remove always true variable and code Rouven Czerwinski
@ 2025-06-22 3:58 ` kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2025-06-22 3:58 UTC (permalink / raw)
To: Rouven Czerwinski, Arend van Spriel
Cc: oe-kbuild-all, kernel, Rouven Czerwinski, linux-wireless,
brcm80211, brcm80211-dev-list.pdl, linux-kernel
Hi Rouven,
kernel test robot noticed the following build warnings:
[auto build test WARNING on wireless-next/main]
[also build test WARNING on wireless/main linus/master v6.16-rc2 next-20250620]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Rouven-Czerwinski/brcmfmac-remove-always-true-variable-and-code/20250621-193706
base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link: https://lore.kernel.org/r/20250621112912.180436-2-rouven%40czerwinskis.de
patch subject: [PATCH 2/2] brcmfmac: remove always true variable and code
config: arc-allyesconfig (https://download.01.org/0day-ci/archive/20250622/202506221133.9JH31DNw-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250622/202506221133.9JH31DNw-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506221133.9JH31DNw-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c: In function 'brcmf_sdio_sendfromq':
>> drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:2329:13: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
2329 | int ret = 0, prec_out, i;
| ^~~
vim +/ret +2329 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2324
82d7f3c10cf41c drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2013-12-12 2325 static uint brcmf_sdio_sendfromq(struct brcmf_sdio *bus, uint maxframes)
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2326 {
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2327 struct sk_buff *pkt;
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2328 struct sk_buff_head pktq;
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 @2329 int ret = 0, prec_out, i;
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2330 uint cnt = 0;
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2331 u8 tx_prec_map, pkt_num;
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2332
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2333 brcmf_dbg(TRACE, "Enter\n");
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2334
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2335 tx_prec_map = ~bus->flowcontrol;
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2336
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2337 /* Send frames until the limit or some other event */
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2338 for (cnt = 0; (cnt < maxframes) && data_ok(bus);) {
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2339 pkt_num = 1;
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2340 if (bus->txglom)
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2341 pkt_num = min_t(u8, bus->tx_max - bus->tx_seq,
af1fa210f4fc6e drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2014-02-27 2342 bus->sdiodev->txglomsz);
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2343 pkt_num = min_t(u32, pkt_num,
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2344 brcmu_pktq_mlen(&bus->txq, ~bus->flowcontrol));
fed7ec44e7ef64 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Hante Meuleman 2014-03-15 2345 __skb_queue_head_init(&pktq);
fed7ec44e7ef64 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Hante Meuleman 2014-03-15 2346 spin_lock_bh(&bus->txq_lock);
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2347 for (i = 0; i < pkt_num; i++) {
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2348 pkt = brcmu_pktq_mdeq(&bus->txq, tx_prec_map,
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2349 &prec_out);
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2350 if (pkt == NULL)
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2351 break;
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2352 __skb_queue_tail(&pktq, pkt);
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2353 }
fed7ec44e7ef64 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Hante Meuleman 2014-03-15 2354 spin_unlock_bh(&bus->txq_lock);
4dd8b26a40acf8 drivers/net/wireless/brcm80211/brcmfmac/sdio.c Hante Meuleman 2015-01-25 2355 if (i == 0)
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2356 break;
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2357
82d7f3c10cf41c drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2013-12-12 2358 ret = brcmf_sdio_txpkt(bus, &pktq, SDPCM_DATA_CHANNEL);
fed7ec44e7ef64 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Hante Meuleman 2014-03-15 2359
8da9d2c8688825 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2013-11-29 2360 cnt += i;
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2361 }
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2362
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2363 /* Deflow-control stack if needed */
a1ce7a0d6a4f1e drivers/net/wireless/brcm80211/brcmfmac/sdio.c Arend van Spriel 2015-02-06 2364 if ((bus->sdiodev->state == BRCMF_SDIOD_DATA) &&
c8bf34849f92c5 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2011-12-16 2365 bus->txoff && (pktq_len(&bus->txq) < TXLOW)) {
90d03ff71b52ba drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Hante Meuleman 2012-09-11 2366 bus->txoff = false;
20ec4f57498f87 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c Franky Lin 2017-03-10 2367 brcmf_proto_bcdc_txflowblock(bus->sdiodev->dev, false);
c8bf34849f92c5 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Franky Lin 2011-12-16 2368 }
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2369
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2370 return cnt;
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2371 }
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c Arend van Spriel 2011-10-05 2372
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio
2025-06-21 11:29 [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Rouven Czerwinski
2025-06-21 11:29 ` [PATCH 2/2] brcmfmac: remove always true variable and code Rouven Czerwinski
@ 2025-07-08 16:32 ` Arend Van Spriel
2025-07-15 8:30 ` Rouven Czerwinski
1 sibling, 1 reply; 5+ messages in thread
From: Arend Van Spriel @ 2025-07-08 16:32 UTC (permalink / raw)
To: Rouven Czerwinski
Cc: kernel, linux-wireless, brcm80211, brcm80211-dev-list.pdl,
linux-kernel
On June 21, 2025 1:29:17 PM Rouven Czerwinski <rouven@czerwinskis.de> wrote:
> The sdio interface implements an unreachable poll mode. Remove it since
> the code can't be reached, if the poll mode needs to be implemented it
> can simply be resurrected using the usual git means.
Thanks, Rouven
This functionality has been/can be useful so instead of ripping it out I
would prefer to have a proper knob for it in debugfs.
Regards,
Arend
> Signed-off-by: Rouven Czerwinski <rouven@czerwinskis.de>
> ---
> .../broadcom/brcm80211/brcmfmac/sdio.c | 48 +------------------
> 1 file changed, 2 insertions(+), 46 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio
2025-07-08 16:32 ` [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Arend Van Spriel
@ 2025-07-15 8:30 ` Rouven Czerwinski
0 siblings, 0 replies; 5+ messages in thread
From: Rouven Czerwinski @ 2025-07-15 8:30 UTC (permalink / raw)
To: Arend Van Spriel
Cc: kernel, linux-wireless, brcm80211, brcm80211-dev-list.pdl,
linux-kernel
Hi Arend,
On Tue, 2025-07-08 at 18:32 +0200, Arend Van Spriel wrote:
> On June 21, 2025 1:29:17 PM Rouven Czerwinski <rouven@czerwinskis.de>
> wrote:
>
> > The sdio interface implements an unreachable poll mode. Remove it
> > since
> > the code can't be reached, if the poll mode needs to be implemented
> > it
> > can simply be resurrected using the usual git means.
>
> Thanks, Rouven
>
> This functionality has been/can be useful so instead of ripping it
> out I
> would prefer to have a proper knob for it in debugfs.
It's probably easier to make this a module parameter instead, I think
that live switching may be harder to implement.
That said, I no longer have access to the hardware where this can be
tested, so I can't continue with this suggestion.
Thanks for the input and Regards,
Rouven
>
> Regards,
> Arend
>
> > Signed-off-by: Rouven Czerwinski <rouven@czerwinskis.de>
> > ---
> > .../broadcom/brcm80211/brcmfmac/sdio.c | 48 +---------------
> > ---
> > 1 file changed, 2 insertions(+), 46 deletions(-)
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-07-15 8:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-21 11:29 [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Rouven Czerwinski
2025-06-21 11:29 ` [PATCH 2/2] brcmfmac: remove always true variable and code Rouven Czerwinski
2025-06-22 3:58 ` kernel test robot
2025-07-08 16:32 ` [PATCH 1/2] brcmfmac: remove unreachable poll mode for sdio Arend Van Spriel
2025-07-15 8:30 ` Rouven Czerwinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).