AW: [PATCH next] wifi: mm81x: fix type bugs handling sdio_readl/writel()

Walter Harms <[email protected]>
Newsgroups org.kernel.vger.linux-wireless,org.kernel.vger.kernel-janitors,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
hi everyone,
Dan has a point here as the function should use int as requiered by the interface.
I would like to point to an other problem here;  too many casts.

  sdio_writel(func1,
          (__force u32)cpu_to_le32(val),

the code for sdio_writel() has this already ...    *(__le32 *)func->tmpbuf = cpu_to_le32(b); //=val
the conversion for address is missing, is that intentional ?

        (__force u32)cpu_to_le32(address), &ret);

By adding the cpu_to_le32() it should be possible to drop all the casts. That would improve the readability here.

BTW: all other familymembers (e.g. sdio_f0_readb) check from  func != NULL maybe this should be done here also ?

jm2c,
  WH
________________________________________
Von: Dan Carpenter <[email protected]>
Gesendet: Donnerstag, 20. August 2026 10:30:22
An: Lachlan Hodges
Cc: Dan Callaghan; Arien Judge; Johannes Berg; Chetan Mistry; Sahand Maleki; Simon Wadsworth; James Herbert; [email protected]; [email protected]; [email protected]
Betreff: [PATCH next] wifi: mm81x: fix type bugs handling sdio_readl/writel()

The sdio_readl() and sdio_writel() functions, instead of returning kernel
error codes, instead stores the error codes in a parameter.  These caller
functions pass should pass an int pointer to store the error code but
instead pass a signed long.

This will not work on big endian systems.  On little endian systems
passing a ssize_t means negative error codes are converted to positive
values near UINT_MAX.  This doesn't cause a problem at runtime because
in mm81x_sdio_reg32_write() the error codes are discarded and we always
return -EIO.  In mm81x_sdio_reg32_read() the high bits are truncated
away so the positive value is re-converted back to negative and the
code works as intended.

Either way, passing an int is the correct thing and is a cleanup.

Fixes: b1906cea00b0 ("wifi: mm81x: add mm81x Wi-Fi HaLow driver")
Signed-off-by: Dan Carpenter <[email protected]>
---
 drivers/net/wireless/morsemicro/mm81x/sdio.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/morsemicro/mm81x/sdio.c b/drivers/net/wireless/morsemicro/mm81x/sdio.c
index 96fce187dd35..65277399bf18 100644
--- a/drivers/net/wireless/morsemicro/mm81x/sdio.c
+++ b/drivers/net/wireless/morsemicro/mm81x/sdio.c
@@ -381,7 +381,7 @@ static int mm81x_sdio_dm_read(struct mm81x *mors, u32 address, u8 *data,

 static int mm81x_sdio_reg32_write(struct mm81x *mors, u32 address, u32 val)
 {
-       ssize_t ret = 0;
+       int ret = 0;
        u32 original_address = address;
        struct mm81x_sdio *sdio = (struct mm81x_sdio *)mors->drv_priv;
        struct sdio_func *func1 = sdio->func->card->sdio_func[0];
@@ -391,7 +391,7 @@ static int mm81x_sdio_reg32_write(struct mm81x *mors, u32 address, u32 val)

        address &= 0x0000FFFF;
        sdio_writel(func1, (__force u32)cpu_to_le32(val),
-                   (__force u32)cpu_to_le32(address), (int *)&ret);
+                   (__force u32)cpu_to_le32(address), &ret);
        if (ret)
                goto error;

@@ -411,7 +411,7 @@ static int mm81x_sdio_reg32_write(struct mm81x *mors, u32 address, u32 val)
 static int mm81x_sdio_reg32_read(struct mm81x *mors, u32 address, u32 *val)
 {
        u32 value;
-       ssize_t ret = 0;
+       int ret = 0;
        struct mm81x_sdio *sdio = (struct mm81x_sdio *)mors->drv_priv;
        struct sdio_func *func1 = sdio->func->card->sdio_func[0];

@@ -419,8 +419,7 @@ static int mm81x_sdio_reg32_read(struct mm81x *mors, u32 address, u32 *val)
                                         MM81X_CONFIG_ACCESS_4BYTE);

        address &= 0x0000FFFF;
-       value = sdio_readl(func1, (__force u32)cpu_to_le32(address),
-                          (int *)&ret);
+       value = sdio_readl(func1, (__force u32)cpu_to_le32(address), &ret);
        if (ret)
                return ret;

--
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.