Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: dsa: b53: Fix sparse warnings in b53_mmap.c

sparse complains about the following warnings:

drivers/net/dsa/b53/b53_mmap.c:33:31: warning: incorrect type in
initializer (different address spaces)
drivers/net/dsa/b53/b53_mmap.c:33:31: expected unsigned char
[noderef] [usertype] <asn:2>*regs
drivers/net/dsa/b53/b53_mmap.c:33:31: got void *priv

and indeed, while what we are doing is functional, we are dereferencing
a void * pointer into a void __iomem * which is not great. Just use the
defined b53_mmap_priv structure which holds our register base and use
that.

Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Florian Fainelli and committed by
David S. Miller
861690d0 3848ec5d

+24 -9
+24 -9
drivers/net/dsa/b53/b53_mmap.c
··· 30 30 31 31 static int b53_mmap_read8(struct b53_device *dev, u8 page, u8 reg, u8 *val) 32 32 { 33 - u8 __iomem *regs = dev->priv; 33 + struct b53_mmap_priv *priv = dev->priv; 34 + void __iomem *regs = priv->regs; 34 35 35 36 *val = readb(regs + (page << 8) + reg); 36 37 ··· 40 39 41 40 static int b53_mmap_read16(struct b53_device *dev, u8 page, u8 reg, u16 *val) 42 41 { 43 - u8 __iomem *regs = dev->priv; 42 + struct b53_mmap_priv *priv = dev->priv; 43 + void __iomem *regs = priv->regs; 44 44 45 45 if (WARN_ON(reg % 2)) 46 46 return -EINVAL; ··· 56 54 57 55 static int b53_mmap_read32(struct b53_device *dev, u8 page, u8 reg, u32 *val) 58 56 { 59 - u8 __iomem *regs = dev->priv; 57 + struct b53_mmap_priv *priv = dev->priv; 58 + void __iomem *regs = priv->regs; 60 59 61 60 if (WARN_ON(reg % 4)) 62 61 return -EINVAL; ··· 72 69 73 70 static int b53_mmap_read48(struct b53_device *dev, u8 page, u8 reg, u64 *val) 74 71 { 75 - u8 __iomem *regs = dev->priv; 72 + struct b53_mmap_priv *priv = dev->priv; 73 + void __iomem *regs = priv->regs; 76 74 77 75 if (WARN_ON(reg % 2)) 78 76 return -EINVAL; ··· 111 107 112 108 static int b53_mmap_read64(struct b53_device *dev, u8 page, u8 reg, u64 *val) 113 109 { 114 - u8 __iomem *regs = dev->priv; 110 + struct b53_mmap_priv *priv = dev->priv; 111 + void __iomem *regs = priv->regs; 115 112 u32 hi, lo; 116 113 117 114 if (WARN_ON(reg % 4)) ··· 133 128 134 129 static int b53_mmap_write8(struct b53_device *dev, u8 page, u8 reg, u8 value) 135 130 { 136 - u8 __iomem *regs = dev->priv; 131 + struct b53_mmap_priv *priv = dev->priv; 132 + void __iomem *regs = priv->regs; 137 133 138 134 writeb(value, regs + (page << 8) + reg); 139 135 ··· 144 138 static int b53_mmap_write16(struct b53_device *dev, u8 page, u8 reg, 145 139 u16 value) 146 140 { 147 - u8 __iomem *regs = dev->priv; 141 + struct b53_mmap_priv *priv = dev->priv; 142 + void __iomem *regs = priv->regs; 148 143 149 144 if (WARN_ON(reg % 2)) 150 145 return -EINVAL; ··· 161 154 static int b53_mmap_write32(struct b53_device *dev, u8 page, u8 reg, 162 155 u32 value) 163 156 { 164 - u8 __iomem *regs = dev->priv; 157 + struct b53_mmap_priv *priv = dev->priv; 158 + void __iomem *regs = priv->regs; 165 159 166 160 if (WARN_ON(reg % 4)) 167 161 return -EINVAL; ··· 231 223 static int b53_mmap_probe(struct platform_device *pdev) 232 224 { 233 225 struct b53_platform_data *pdata = pdev->dev.platform_data; 226 + struct b53_mmap_priv *priv; 234 227 struct b53_device *dev; 235 228 236 229 if (!pdata) 237 230 return -EINVAL; 238 231 239 - dev = b53_switch_alloc(&pdev->dev, &b53_mmap_ops, pdata->regs); 232 + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); 233 + if (!priv) 234 + return -ENOMEM; 235 + 236 + priv->regs = pdata->regs; 237 + 238 + dev = b53_switch_alloc(&pdev->dev, &b53_mmap_ops, priv); 240 239 if (!dev) 241 240 return -ENOMEM; 242 241