aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-10-05 21:15:23 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-05 21:15:23 -0400
commitf408c3d956c987844dcb7c6837abfbb0331fb7f6 (patch)
tree64d8c2369c8e0587796d0148afe1a9b0e91efa42
parent3a67c9ccad926a168d8b7891537a452018368a5b (diff)
parent96aacededcc601f5af894ead6b481e76cc8db2cd (diff)
Merge branch 'spider_net'
Antoine Tenart says: ==================== net: spider_net: fix possible bitops errors Dan reported a possible signedness issue on the pxa168_eth driver. While having a look at it, I came across a similar problem in the spider_net driver. Here is one proposal to fix it. The first patch rework the spider_net_set_mac() function by removing the spider_net_get_mac_address() call and using memcpy() to set netdev->dev_addr (which is what's done in lots of Ethernet drivers) and the second one fix the actual signedness issue. If for any reason you really want to keep a call to spider_net_get_mac_address() because the memcpy() is somehow not good enough here, we can also come up with a solution involving a temporary unsigned char variable. I couldn't test these changes, so please do. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/toshiba/spider_net.c42
1 files changed, 5 insertions, 37 deletions
diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c
index 3e38f67c6011..8e9371a3388a 100644
--- a/drivers/net/ethernet/toshiba/spider_net.c
+++ b/drivers/net/ethernet/toshiba/spider_net.c
@@ -267,34 +267,6 @@ spider_net_set_promisc(struct spider_net_card *card)
267} 267}
268 268
269/** 269/**
270 * spider_net_get_mac_address - read mac address from spider card
271 * @card: device structure
272 *
273 * reads MAC address from GMACUNIMACU and GMACUNIMACL registers
274 */
275static int
276spider_net_get_mac_address(struct net_device *netdev)
277{
278 struct spider_net_card *card = netdev_priv(netdev);
279 u32 macl, macu;
280
281 macl = spider_net_read_reg(card, SPIDER_NET_GMACUNIMACL);
282 macu = spider_net_read_reg(card, SPIDER_NET_GMACUNIMACU);
283
284 netdev->dev_addr[0] = (macu >> 24) & 0xff;
285 netdev->dev_addr[1] = (macu >> 16) & 0xff;
286 netdev->dev_addr[2] = (macu >> 8) & 0xff;
287 netdev->dev_addr[3] = macu & 0xff;
288 netdev->dev_addr[4] = (macl >> 8) & 0xff;
289 netdev->dev_addr[5] = macl & 0xff;
290
291 if (!is_valid_ether_addr(&netdev->dev_addr[0]))
292 return -EINVAL;
293
294 return 0;
295}
296
297/**
298 * spider_net_get_descr_status -- returns the status of a descriptor 270 * spider_net_get_descr_status -- returns the status of a descriptor
299 * @descr: descriptor to look at 271 * @descr: descriptor to look at
300 * 272 *
@@ -1345,15 +1317,17 @@ spider_net_set_mac(struct net_device *netdev, void *p)
1345 if (!is_valid_ether_addr(addr->sa_data)) 1317 if (!is_valid_ether_addr(addr->sa_data))
1346 return -EADDRNOTAVAIL; 1318 return -EADDRNOTAVAIL;
1347 1319
1320 memcpy(netdev->dev_addr, addr->sa_data, ETH_ALEN);
1321
1348 /* switch off GMACTPE and GMACRPE */ 1322 /* switch off GMACTPE and GMACRPE */
1349 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD); 1323 regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD);
1350 regvalue &= ~((1 << 5) | (1 << 6)); 1324 regvalue &= ~((1 << 5) | (1 << 6));
1351 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue); 1325 spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue);
1352 1326
1353 /* write mac */ 1327 /* write mac */
1354 macu = (addr->sa_data[0]<<24) + (addr->sa_data[1]<<16) + 1328 macu = (netdev->dev_addr[0]<<24) + (netdev->dev_addr[1]<<16) +
1355 (addr->sa_data[2]<<8) + (addr->sa_data[3]); 1329 (netdev->dev_addr[2]<<8) + (netdev->dev_addr[3]);
1356 macl = (addr->sa_data[4]<<8) + (addr->sa_data[5]); 1330 macl = (netdev->dev_addr[4]<<8) + (netdev->dev_addr[5]);
1357 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu); 1331 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu);
1358 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl); 1332 spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl);
1359 1333
@@ -1364,12 +1338,6 @@ spider_net_set_mac(struct net_device *netdev, void *p)
1364 1338
1365 spider_net_set_promisc(card); 1339 spider_net_set_promisc(card);
1366 1340
1367 /* look up, whether we have been successful */
1368 if (spider_net_get_mac_address(netdev))
1369 return -EADDRNOTAVAIL;
1370 if (memcmp(netdev->dev_addr,addr->sa_data,netdev->addr_len))
1371 return -EADDRNOTAVAIL;
1372
1373 return 0; 1341 return 0;
1374} 1342}
1375 1343