Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddede6d5 authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller
Browse files

net: dsa: bcm_sf2: fix 64-bits register reads



Reading 64-bits register was not working because we inverted the steps
between reading the lower 32-bits of the register and reading the upper
32-bits. Swapping these operations is how the HW guarantees that 64-bits
reads are latched correctly. We only have a handful of 64-bits registers
for now, mostly MIB counters, so the imapct is low.

Fixes: 246d7f77 ("net: dsa: add Broadcom SF2 switch driver")
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6dd0c165
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -105,8 +105,8 @@ static inline u64 name##_readq(struct bcm_sf2_priv *priv, u32 off) \
{									\
{									\
	u32 indir, dir;							\
	u32 indir, dir;							\
	spin_lock(&priv->indir_lock);					\
	spin_lock(&priv->indir_lock);					\
	indir = reg_readl(priv, REG_DIR_DATA_READ);			\
	dir = __raw_readl(priv->name + off);				\
	dir = __raw_readl(priv->name + off);				\
	indir = reg_readl(priv, REG_DIR_DATA_READ);			\
	spin_unlock(&priv->indir_lock);					\
	spin_unlock(&priv->indir_lock);					\
	return (u64)indir << 32 | dir;					\
	return (u64)indir << 32 | dir;					\
}									\
}									\