2024-02-23 10:44:27

by Johannes Berg

[permalink] [raw]
Subject: [PATCH 1/5] wifi: b43: silence sparse warnings

From: Johannes Berg <[email protected]>

sparse complains on this code about casts that lose bits
due to the usage of bitwise not, but really we do want
16 bits only, so clarify that by using masks.

Signed-off-by: Johannes Berg <[email protected]>
---
drivers/net/wireless/broadcom/b43/phy_ht.c | 6 +++---
drivers/net/wireless/broadcom/b43/phy_n.c | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/broadcom/b43/phy_ht.c b/drivers/net/wireless/broadcom/b43/phy_ht.c
index d050971d150a..26a226126bc4 100644
--- a/drivers/net/wireless/broadcom/b43/phy_ht.c
+++ b/drivers/net/wireless/broadcom/b43/phy_ht.c
@@ -322,8 +322,8 @@ static void b43_phy_ht_bphy_reset(struct b43_wldev *dev, bool reset)
B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX);
else
b43_phy_mask(dev, B43_PHY_B_BBCFG,
- (u16)~(B43_PHY_B_BBCFG_RSTCCA |
- B43_PHY_B_BBCFG_RSTRX));
+ 0xffff & ~(B43_PHY_B_BBCFG_RSTCCA |
+ B43_PHY_B_BBCFG_RSTRX));

b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp);
}
@@ -551,7 +551,7 @@ static void b43_phy_ht_tx_power_ctl(struct b43_wldev *dev, bool enable)
phy_ht->tx_pwr_idx[i] =
b43_phy_read(dev, status_regs[i]);
}
- b43_phy_mask(dev, B43_PHY_HT_TXPCTL_CMD_C1, ~en_bits);
+ b43_phy_mask(dev, B43_PHY_HT_TXPCTL_CMD_C1, 0xffff & ~en_bits);
} else {
b43_phy_set(dev, B43_PHY_HT_TXPCTL_CMD_C1, en_bits);

diff --git a/drivers/net/wireless/broadcom/b43/phy_n.c b/drivers/net/wireless/broadcom/b43/phy_n.c
index 2c0c019a815d..4bb005b93f2c 100644
--- a/drivers/net/wireless/broadcom/b43/phy_n.c
+++ b/drivers/net/wireless/broadcom/b43/phy_n.c
@@ -6246,7 +6246,7 @@ static void b43_nphy_channel_setup(struct b43_wldev *dev,
b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4);
/* Take BPHY out of the reset */
b43_phy_mask(dev, B43_PHY_B_BBCFG,
- (u16)~(B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX));
+ ~(B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX) & 0xffff);
b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16);
}

@@ -6377,7 +6377,7 @@ static int b43_nphy_set_channel(struct b43_wldev *dev,
} else if (channel_type == NL80211_CHAN_HT40MINUS) {
b43_phy_mask(dev, B43_NPHY_RXCTL, ~B43_NPHY_RXCTL_BSELU20);
if (phy->rev >= 7)
- b43_phy_mask(dev, 0x310, (u16)~0x8000);
+ b43_phy_mask(dev, 0x310, 0x7fff);
}

if (phy->rev >= 19) {
--
2.43.2



2024-02-23 10:44:30

by Johannes Berg

[permalink] [raw]
Subject: [PATCH 2/5] wifi: brcmsmac: silence sparse warnings

From: Johannes Berg <[email protected]>

sparse complains on this code about casts that lose bits
due to the usage of bitwise not, but really we do want
16 bits only, so clarify that by using masks.

Signed-off-by: Johannes Berg <[email protected]>
---
.../broadcom/brcm80211/brcmsmac/phy/phy_lcn.c | 2 +-
.../broadcom/brcm80211/brcmsmac/phy/phy_n.c | 16 +++++++++-------
2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
index 7717eb85a1db..aae2cf95fe95 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
@@ -3299,7 +3299,7 @@ wlc_lcnphy_run_samples(struct brcms_phy *pi,

if (iqcalmode) {

- and_phy_reg(pi, 0x453, (u16) ~(0x1 << 15));
+ and_phy_reg(pi, 0x453, 0xffff & ~(0x1 << 15));
or_phy_reg(pi, 0x453, (0x1 << 15));
} else {
write_phy_reg(pi, 0x63f, 1);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
index 8580a2754789..ffa4b7c5ed25 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
@@ -17587,7 +17587,7 @@ static void wlc_phy_txpwrctrl_pwr_setup_nphy(struct brcms_phy *pi)
or_phy_reg(pi, 0x122, (0x1 << 0));

if (NREV_GE(pi->pubpi.phy_rev, 3))
- and_phy_reg(pi, 0x1e7, (u16) (~(0x1 << 15)));
+ and_phy_reg(pi, 0x1e7, 0x7fff);
else
or_phy_reg(pi, 0x1e7, (0x1 << 15));

@@ -18086,7 +18086,7 @@ wlc_phy_rfctrlintc_override_nphy(struct brcms_phy *pi, u8 field, u16 value,
(0x1 << 10));

and_phy_reg(pi, 0x2ff, (u16)
- ~(0x3 << 14));
+ 0xffff & ~(0x3 << 14));
or_phy_reg(pi, 0x2ff, (0x1 << 13));
or_phy_reg(pi, 0x2ff, (0x1 << 0));
} else {
@@ -21053,7 +21053,7 @@ wlc_phy_chanspec_nphy_setup(struct brcms_phy *pi, u16 chanspec,
(val | MAC_PHY_FORCE_CLK));

and_phy_reg(pi, (NPHY_TO_BPHY_OFF + BPHY_BB_CONFIG),
- (u16) (~(BBCFG_RESETCCA | BBCFG_RESETRX)));
+ 0xffff & ~(BBCFG_RESETCCA | BBCFG_RESETRX));

bcma_write16(pi->d11core, D11REGOFFS(psm_phy_hdr_param), val);
}
@@ -21287,7 +21287,8 @@ void wlc_phy_antsel_init(struct brcms_phy_pub *ppi, bool lut_init)

bcma_set16(pi->d11core, D11REGOFFS(psm_gpio_oe), mask);

- bcma_mask16(pi->d11core, D11REGOFFS(psm_gpio_out), ~mask);
+ bcma_mask16(pi->d11core, D11REGOFFS(psm_gpio_out),
+ 0xffff & ~mask);

if (lut_init) {
write_phy_reg(pi, 0xf8, 0x02d8);
@@ -23197,7 +23198,7 @@ void wlc_phy_stopplayback_nphy(struct brcms_phy *pi)
or_phy_reg(pi, 0xc3, NPHY_sampleCmd_STOP);
else if (playback_status & 0x2)
and_phy_reg(pi, 0xc2,
- (u16) ~NPHY_iqloCalCmdGctl_IQLO_CAL_EN);
+ 0xffff & ~NPHY_iqloCalCmdGctl_IQLO_CAL_EN);

and_phy_reg(pi, 0xc3, (u16) ~(0x1 << 2));

@@ -28202,8 +28203,9 @@ void wlc_phy_txpwrctrl_enable_nphy(struct brcms_phy *pi, u8 ctrl_type)

if (NREV_GE(pi->pubpi.phy_rev, 3))
and_phy_reg(pi, 0x1e7,
- (u16) (~((0x1 << 15) |
- (0x1 << 14) | (0x1 << 13))));
+ 0xffff & ~((0x1 << 15) |
+ (0x1 << 14) |
+ (0x1 << 13)));
else
and_phy_reg(pi, 0x1e7,
(u16) (~((0x1 << 14) | (0x1 << 13))));
--
2.43.2


2024-02-23 10:44:31

by Johannes Berg

[permalink] [raw]
Subject: [PATCH 3/5] wifi: rt2x00: silence sparse warnings

From: Johannes Berg <[email protected]>

Clearly writing __le32 was intended here, so just put the
right casts into the code to silence sparse about it.

Signed-off-by: Johannes Berg <[email protected]>
---
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index aaf31857ae1e..3bb81bcff0ac 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -10946,13 +10946,13 @@ static void rt2800_efuse_read(struct rt2x00_dev *rt2x00dev, unsigned int i)
/* Apparently the data is read from end to start */
reg = rt2800_register_read_lock(rt2x00dev, efuse_data3_reg);
/* The returned value is in CPU order, but eeprom is le */
- *(u32 *)&rt2x00dev->eeprom[i] = cpu_to_le32(reg);
+ *(__le32 *)&rt2x00dev->eeprom[i] = cpu_to_le32(reg);
reg = rt2800_register_read_lock(rt2x00dev, efuse_data2_reg);
- *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg);
+ *(__le32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg);
reg = rt2800_register_read_lock(rt2x00dev, efuse_data1_reg);
- *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg);
+ *(__le32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg);
reg = rt2800_register_read_lock(rt2x00dev, efuse_data0_reg);
- *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg);
+ *(__le32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg);

mutex_unlock(&rt2x00dev->csr_mutex);
}
--
2.43.2


2024-02-23 10:44:39

by Johannes Berg

[permalink] [raw]
Subject: [PATCH 4/5] wifi: cw1200: silence sparse warnings

From: Johannes Berg <[email protected]>

This code clearly intends to do some unorthodox byte
order conversions, so add casts to silence sparse.

Signed-off-by: Johannes Berg <[email protected]>
---
drivers/net/wireless/st/cw1200/cw1200_spi.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/st/cw1200/cw1200_spi.c b/drivers/net/wireless/st/cw1200/cw1200_spi.c
index c82c0688b549..0ce9a1d39db1 100644
--- a/drivers/net/wireless/st/cw1200/cw1200_spi.c
+++ b/drivers/net/wireless/st/cw1200/cw1200_spi.c
@@ -80,7 +80,7 @@ static int cw1200_spi_memcpy_fromio(struct hwbus_priv *self,
#endif

/* Header is LE16 */
- regaddr = cpu_to_le16(regaddr);
+ regaddr = (__force u16)cpu_to_le16(regaddr);

/* We have to byteswap if the SPI bus is limited to 8b operation
or we are running on a Big Endian system
@@ -145,7 +145,7 @@ static int cw1200_spi_memcpy_toio(struct hwbus_priv *self,
#endif

/* Header is LE16 */
- regaddr = cpu_to_le16(regaddr);
+ regaddr = (__force u16)cpu_to_le16(regaddr);

/* We have to byteswap if the SPI bus is limited to 8b operation
or we are running on a Big Endian system
--
2.43.2


2024-02-23 10:44:41

by Johannes Berg

[permalink] [raw]
Subject: [PATCH 5/5] wifi: zd1211rw: silence sparse warnings

From: Johannes Berg <[email protected]>

This code wants to compare the obtained value, but as it also
has a special type for register addresses to find places doing
such compares and calculations wrong, we need explicit casts
here to silence sparse.

Signed-off-by: Johannes Berg <[email protected]>
---
drivers/net/wireless/zydas/zd1211rw/zd_usb.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
index 8505d84eeed6..f3b567a13ded 100644
--- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
@@ -380,7 +380,7 @@ static inline void handle_regs_int(struct urb *urb)
spin_lock_irqsave(&intr->lock, flags);

int_num = le16_to_cpu(*(__le16 *)(urb->transfer_buffer+2));
- if (int_num == CR_INTERRUPT) {
+ if (int_num == (u16)CR_INTERRUPT) {
struct zd_mac *mac = zd_hw_mac(zd_usb_to_hw(urb->context));
spin_lock(&mac->lock);
memcpy(&mac->intr_buffer, urb->transfer_buffer,
@@ -416,7 +416,8 @@ static inline void handle_regs_int(struct urb *urb)
spin_unlock_irqrestore(&intr->lock, flags);

/* CR_INTERRUPT might override read_reg too. */
- if (int_num == CR_INTERRUPT && atomic_read(&intr->read_regs_enabled))
+ if (int_num == (u16)CR_INTERRUPT &&
+ atomic_read(&intr->read_regs_enabled))
handle_regs_int_override(urb);
}

--
2.43.2


2024-02-23 15:59:51

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH 1/5] wifi: b43: silence sparse warnings

On 2/23/24 04:40, Johannes Berg wrote:
> From: Johannes Berg <[email protected]>
>
> sparse complains on this code about casts that lose bits
> due to the usage of bitwise not, but really we do want
> 16 bits only, so clarify that by using masks.
>
> Signed-off-by: Johannes Berg <[email protected]>
> ---
> drivers/net/wireless/broadcom/b43/phy_ht.c | 6 +++---
> drivers/net/wireless/broadcom/b43/phy_n.c | 4 ++--
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/wireless/broadcom/b43/phy_ht.c b/drivers/net/wireless/broadcom/b43/phy_ht.c
> index d050971d150a..26a226126bc4 100644
> --- a/drivers/net/wireless/broadcom/b43/phy_ht.c
> +++ b/drivers/net/wireless/broadcom/b43/phy_ht.c
> @@ -322,8 +322,8 @@ static void b43_phy_ht_bphy_reset(struct b43_wldev *dev, bool reset)
> B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX);
> else
> b43_phy_mask(dev, B43_PHY_B_BBCFG,
> - (u16)~(B43_PHY_B_BBCFG_RSTCCA |
> - B43_PHY_B_BBCFG_RSTRX));
> + 0xffff & ~(B43_PHY_B_BBCFG_RSTCCA |
> + B43_PHY_B_BBCFG_RSTRX));
>
> b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp);
> }
> @@ -551,7 +551,7 @@ static void b43_phy_ht_tx_power_ctl(struct b43_wldev *dev, bool enable)
> phy_ht->tx_pwr_idx[i] =
> b43_phy_read(dev, status_regs[i]);
> }
> - b43_phy_mask(dev, B43_PHY_HT_TXPCTL_CMD_C1, ~en_bits);
> + b43_phy_mask(dev, B43_PHY_HT_TXPCTL_CMD_C1, 0xffff & ~en_bits);
> } else {
> b43_phy_set(dev, B43_PHY_HT_TXPCTL_CMD_C1, en_bits);
>
> diff --git a/drivers/net/wireless/broadcom/b43/phy_n.c b/drivers/net/wireless/broadcom/b43/phy_n.c
> index 2c0c019a815d..4bb005b93f2c 100644
> --- a/drivers/net/wireless/broadcom/b43/phy_n.c
> +++ b/drivers/net/wireless/broadcom/b43/phy_n.c
> @@ -6246,7 +6246,7 @@ static void b43_nphy_channel_setup(struct b43_wldev *dev,
> b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4);
> /* Take BPHY out of the reset */
> b43_phy_mask(dev, B43_PHY_B_BBCFG,
> - (u16)~(B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX));
> + ~(B43_PHY_B_BBCFG_RSTCCA | B43_PHY_B_BBCFG_RSTRX) & 0xffff);
> b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16);
> }
>
> @@ -6377,7 +6377,7 @@ static int b43_nphy_set_channel(struct b43_wldev *dev,
> } else if (channel_type == NL80211_CHAN_HT40MINUS) {
> b43_phy_mask(dev, B43_NPHY_RXCTL, ~B43_NPHY_RXCTL_BSELU20);
> if (phy->rev >= 7)
> - b43_phy_mask(dev, 0x310, (u16)~0x8000);
> + b43_phy_mask(dev, 0x310, 0x7fff);
> }
>
> if (phy->rev >= 19) {


Acked_by: Larry Finger <Larry,[email protected]>

Thanks.

Larry


2024-02-28 11:46:06

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 1/5] wifi: b43: silence sparse warnings

Johannes Berg <[email protected]> wrote:

> From: Johannes Berg <[email protected]>
>
> sparse complains on this code about casts that lose bits
> due to the usage of bitwise not, but really we do want
> 16 bits only, so clarify that by using masks.
>
> Signed-off-by: Johannes Berg <[email protected]>

4 patches applied to wireless-next.git, thanks.

576b2015e7e0 wifi: b43: silence sparse warnings
17672ced7d73 wifi: brcmsmac: silence sparse warnings
e06324303662 wifi: rt2x00: silence sparse warnings
5a391813e7ef wifi: zd1211rw: silence sparse warnings

--
https://patchwork.kernel.org/project/linux-wireless/patch/20240223114023.c64e2d348453.Iccc4ace1116721a044e5f31f40ea7709e72145f3@changeid/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


2024-03-02 08:28:40

by Stanislaw Gruszka

[permalink] [raw]
Subject: Re: [PATCH 3/5] wifi: rt2x00: silence sparse warnings

On Fri, Feb 23, 2024 at 11:40:25AM +0100, Johannes Berg wrote:
> From: Johannes Berg <[email protected]>
>
> Clearly writing __le32 was intended here, so just put the
> right casts into the code to silence sparse about it.
>
> Signed-off-by: Johannes Berg <[email protected]>
Acked-by: Stanislaw Gruszka <[email protected]>

> ---
> drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> index aaf31857ae1e..3bb81bcff0ac 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> @@ -10946,13 +10946,13 @@ static void rt2800_efuse_read(struct rt2x00_dev *rt2x00dev, unsigned int i)
> /* Apparently the data is read from end to start */
> reg = rt2800_register_read_lock(rt2x00dev, efuse_data3_reg);
> /* The returned value is in CPU order, but eeprom is le */
> - *(u32 *)&rt2x00dev->eeprom[i] = cpu_to_le32(reg);
> + *(__le32 *)&rt2x00dev->eeprom[i] = cpu_to_le32(reg);
> reg = rt2800_register_read_lock(rt2x00dev, efuse_data2_reg);
> - *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg);
> + *(__le32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg);
> reg = rt2800_register_read_lock(rt2x00dev, efuse_data1_reg);
> - *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg);
> + *(__le32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg);
> reg = rt2800_register_read_lock(rt2x00dev, efuse_data0_reg);
> - *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg);
> + *(__le32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg);
>
> mutex_unlock(&rt2x00dev->csr_mutex);
> }