Skip to content
Snippets Groups Projects
Commit 876d4515 authored by Claudiu Manoil's avatar Claudiu Manoil Committed by Joe Hershberger
Browse files

net: tsec: Fix and cleanup tsec_mcast_addr()


There are several implementation issues for tsec_mcast_addr()
addressed by this patch:
* unmanaged, not portable r/w access to registers; fixed with
setbits_be32()/ clrbits_be32()
* use of volatile pointers
* unnecessary forced cast to u8 for the ether_crc() result
* removed redundant parens
* corrected some comment slips

Signed-off-by: default avatarClaudiu Manoil <claudiu.manoil@freescale.com>
Patch: 279000
parent 9c4cffac
No related branches found
No related tags found
No related merge requests found
...@@ -113,32 +113,31 @@ static void tsec_configure_serdes(struct tsec_private *priv) ...@@ -113,32 +113,31 @@ static void tsec_configure_serdes(struct tsec_private *priv)
* result. * result.
* 2) Use the 8 most significant bits as a hash into a 256-entry * 2) Use the 8 most significant bits as a hash into a 256-entry
* table. The table is controlled through 8 32-bit registers: * table. The table is controlled through 8 32-bit registers:
* gaddr0-7. gaddr0's MSB is entry 0, and gaddr7's LSB is * gaddr0-7. gaddr0's MSB is entry 0, and gaddr7's LSB is entry
* gaddr7. This means that the 3 most significant bits in the * 255. This means that the 3 most significant bits in the
* hash index which gaddr register to use, and the 5 other bits * hash index which gaddr register to use, and the 5 other bits
* indicate which bit (assuming an IBM numbering scheme, which * indicate which bit (assuming an IBM numbering scheme, which
* for PowerPC (tm) is usually the case) in the tregister holds * for PowerPC (tm) is usually the case) in the register holds
* the entry. */ * the entry. */
static int static int
tsec_mcast_addr(struct eth_device *dev, const u8 *mcast_mac, u8 set) tsec_mcast_addr(struct eth_device *dev, const u8 *mcast_mac, u8 set)
{ {
struct tsec_private *priv = privlist[1]; struct tsec_private *priv = privlist[1];
volatile tsec_t *regs = priv->regs; struct tsec __iomem *regs = priv->regs;
volatile u32 *reg_array, value; u32 result, value;
u8 result, whichbit, whichreg; u8 whichbit, whichreg;
result = (u8)((ether_crc(MAC_ADDR_LEN, mcast_mac) >> 24) & 0xff); result = ether_crc(MAC_ADDR_LEN, mcast_mac);
whichbit = result & 0x1f; /* the 5 LSB = which bit to set */ whichbit = (result >> 24) & 0x1f; /* the 5 LSB = which bit to set */
whichreg = result >> 5; /* the 3 MSB = which reg to set it in */ whichreg = result >> 29; /* the 3 MSB = which reg to set it in */
value = (1 << (31-whichbit));
reg_array = &(regs->hash.gaddr0); value = 1 << (31-whichbit);
if (set)
setbits_be32(&regs->hash.gaddr0 + whichreg, value);
else
clrbits_be32(&regs->hash.gaddr0 + whichreg, value);
if (set) {
reg_array[whichreg] |= value;
} else {
reg_array[whichreg] &= ~value;
}
return 0; return 0;
} }
#endif /* Multicast TFTP ? */ #endif /* Multicast TFTP ? */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment