aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/tg3.c55
1 files changed, 29 insertions, 26 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index a2ca6ab2df00..baa1f0e1a454 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -2293,12 +2293,13 @@ static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val)
2293 return err; 2293 return err;
2294} 2294}
2295 2295
2296static int tg3_nvram_read_le(struct tg3 *tp, u32 offset, __le32 *val) 2296/* Ensures NVRAM data is in bytestream format. */
2297static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
2297{ 2298{
2298 u32 v; 2299 u32 v;
2299 int res = tg3_nvram_read_swab(tp, offset, &v); 2300 int res = tg3_nvram_read(tp, offset, &v);
2300 if (!res) 2301 if (!res)
2301 *val = cpu_to_le32(v); 2302 *val = cpu_to_be32(v);
2302 return res; 2303 return res;
2303} 2304}
2304 2305
@@ -8539,7 +8540,7 @@ static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8539 int ret; 8540 int ret;
8540 u8 *pd; 8541 u8 *pd;
8541 u32 i, offset, len, b_offset, b_count; 8542 u32 i, offset, len, b_offset, b_count;
8542 __le32 val; 8543 __be32 val;
8543 8544
8544 if (tp->link_config.phy_is_low_power) 8545 if (tp->link_config.phy_is_low_power)
8545 return -EAGAIN; 8546 return -EAGAIN;
@@ -8558,7 +8559,7 @@ static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8558 /* i.e. offset=1 len=2 */ 8559 /* i.e. offset=1 len=2 */
8559 b_count = len; 8560 b_count = len;
8560 } 8561 }
8561 ret = tg3_nvram_read_le(tp, offset-b_offset, &val); 8562 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
8562 if (ret) 8563 if (ret)
8563 return ret; 8564 return ret;
8564 memcpy(data, ((char*)&val) + b_offset, b_count); 8565 memcpy(data, ((char*)&val) + b_offset, b_count);
@@ -8570,7 +8571,7 @@ static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8570 /* read bytes upto the last 4 byte boundary */ 8571 /* read bytes upto the last 4 byte boundary */
8571 pd = &data[eeprom->len]; 8572 pd = &data[eeprom->len];
8572 for (i = 0; i < (len - (len & 3)); i += 4) { 8573 for (i = 0; i < (len - (len & 3)); i += 4) {
8573 ret = tg3_nvram_read_le(tp, offset + i, &val); 8574 ret = tg3_nvram_read_be32(tp, offset + i, &val);
8574 if (ret) { 8575 if (ret) {
8575 eeprom->len += i; 8576 eeprom->len += i;
8576 return ret; 8577 return ret;
@@ -8584,7 +8585,7 @@ static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8584 pd = &data[eeprom->len]; 8585 pd = &data[eeprom->len];
8585 b_count = len & 3; 8586 b_count = len & 3;
8586 b_offset = offset + len - b_count; 8587 b_offset = offset + len - b_count;
8587 ret = tg3_nvram_read_le(tp, b_offset, &val); 8588 ret = tg3_nvram_read_be32(tp, b_offset, &val);
8588 if (ret) 8589 if (ret)
8589 return ret; 8590 return ret;
8590 memcpy(pd, &val, b_count); 8591 memcpy(pd, &val, b_count);
@@ -8601,7 +8602,7 @@ static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8601 int ret; 8602 int ret;
8602 u32 offset, len, b_offset, odd_len; 8603 u32 offset, len, b_offset, odd_len;
8603 u8 *buf; 8604 u8 *buf;
8604 __le32 start, end; 8605 __be32 start, end;
8605 8606
8606 if (tp->link_config.phy_is_low_power) 8607 if (tp->link_config.phy_is_low_power)
8607 return -EAGAIN; 8608 return -EAGAIN;
@@ -8614,7 +8615,7 @@ static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8614 8615
8615 if ((b_offset = (offset & 3))) { 8616 if ((b_offset = (offset & 3))) {
8616 /* adjustments to start on required 4 byte boundary */ 8617 /* adjustments to start on required 4 byte boundary */
8617 ret = tg3_nvram_read_le(tp, offset-b_offset, &start); 8618 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
8618 if (ret) 8619 if (ret)
8619 return ret; 8620 return ret;
8620 len += b_offset; 8621 len += b_offset;
@@ -8628,7 +8629,7 @@ static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
8628 /* adjustments to end on required 4 byte boundary */ 8629 /* adjustments to end on required 4 byte boundary */
8629 odd_len = 1; 8630 odd_len = 1;
8630 len = (len + 3) & ~3; 8631 len = (len + 3) & ~3;
8631 ret = tg3_nvram_read_le(tp, offset+len-4, &end); 8632 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
8632 if (ret) 8633 if (ret)
8633 return ret; 8634 return ret;
8634 } 8635 }
@@ -9200,7 +9201,7 @@ static void tg3_get_ethtool_stats (struct net_device *dev,
9200static int tg3_test_nvram(struct tg3 *tp) 9201static int tg3_test_nvram(struct tg3 *tp)
9201{ 9202{
9202 u32 csum, magic; 9203 u32 csum, magic;
9203 __le32 *buf; 9204 __be32 *buf;
9204 int i, j, k, err = 0, size; 9205 int i, j, k, err = 0, size;
9205 9206
9206 if (tg3_nvram_read(tp, 0, &magic) != 0) 9207 if (tg3_nvram_read(tp, 0, &magic) != 0)
@@ -9237,14 +9238,15 @@ static int tg3_test_nvram(struct tg3 *tp)
9237 9238
9238 err = -EIO; 9239 err = -EIO;
9239 for (i = 0, j = 0; i < size; i += 4, j++) { 9240 for (i = 0, j = 0; i < size; i += 4, j++) {
9240 if ((err = tg3_nvram_read_le(tp, i, &buf[j])) != 0) 9241 err = tg3_nvram_read_be32(tp, i, &buf[j]);
9242 if (err)
9241 break; 9243 break;
9242 } 9244 }
9243 if (i < size) 9245 if (i < size)
9244 goto out; 9246 goto out;
9245 9247
9246 /* Selfboot format */ 9248 /* Selfboot format */
9247 magic = swab32(le32_to_cpu(buf[0])); 9249 magic = be32_to_cpu(buf[0]);
9248 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 9250 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
9249 TG3_EEPROM_MAGIC_FW) { 9251 TG3_EEPROM_MAGIC_FW) {
9250 u8 *buf8 = (u8 *) buf, csum8 = 0; 9252 u8 *buf8 = (u8 *) buf, csum8 = 0;
@@ -9273,7 +9275,7 @@ static int tg3_test_nvram(struct tg3 *tp)
9273 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 9275 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
9274 TG3_EEPROM_MAGIC_HW) { 9276 TG3_EEPROM_MAGIC_HW) {
9275 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 9277 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
9276 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 9278 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
9277 u8 *buf8 = (u8 *) buf; 9279 u8 *buf8 = (u8 *) buf;
9278 9280
9279 /* Separate the parity bits and the data bytes. */ 9281 /* Separate the parity bits and the data bytes. */
@@ -9316,13 +9318,13 @@ static int tg3_test_nvram(struct tg3 *tp)
9316 9318
9317 /* Bootstrap checksum at offset 0x10 */ 9319 /* Bootstrap checksum at offset 0x10 */
9318 csum = calc_crc((unsigned char *) buf, 0x10); 9320 csum = calc_crc((unsigned char *) buf, 0x10);
9319 if(csum != le32_to_cpu(buf[0x10/4])) 9321 if (csum != be32_to_cpu(buf[0x10/4]))
9320 goto out; 9322 goto out;
9321 9323
9322 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 9324 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
9323 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 9325 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
9324 if (csum != le32_to_cpu(buf[0xfc/4])) 9326 if (csum != be32_to_cpu(buf[0xfc/4]))
9325 goto out; 9327 goto out;
9326 9328
9327 err = 0; 9329 err = 0;
9328 9330
@@ -10654,13 +10656,13 @@ static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
10654 10656
10655 for (i = 0; i < len; i += 4) { 10657 for (i = 0; i < len; i += 4) {
10656 u32 addr; 10658 u32 addr;
10657 __le32 data; 10659 __be32 data;
10658 10660
10659 addr = offset + i; 10661 addr = offset + i;
10660 10662
10661 memcpy(&data, buf + i, 4); 10663 memcpy(&data, buf + i, 4);
10662 10664
10663 tw32(GRC_EEPROM_DATA, le32_to_cpu(data)); 10665 tw32(GRC_EEPROM_DATA, be32_to_cpu(data));
10664 10666
10665 val = tr32(GRC_EEPROM_ADDR); 10667 val = tr32(GRC_EEPROM_ADDR);
10666 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 10668 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
@@ -10710,8 +10712,9 @@ static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
10710 phy_addr = offset & ~pagemask; 10712 phy_addr = offset & ~pagemask;
10711 10713
10712 for (j = 0; j < pagesize; j += 4) { 10714 for (j = 0; j < pagesize; j += 4) {
10713 if ((ret = tg3_nvram_read_le(tp, phy_addr + j, 10715 ret = tg3_nvram_read_be32(tp, phy_addr + j,
10714 (__le32 *) (tmp + j)))) 10716 (__be32 *) (tmp + j));
10717 if (ret)
10715 break; 10718 break;
10716 } 10719 }
10717 if (ret) 10720 if (ret)
@@ -10758,7 +10761,7 @@ static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
10758 __be32 data; 10761 __be32 data;
10759 10762
10760 data = *((__be32 *) (tmp + j)); 10763 data = *((__be32 *) (tmp + j));
10761 /* swab32(le32_to_cpu(data)), actually */ 10764
10762 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 10765 tw32(NVRAM_WRDATA, be32_to_cpu(data));
10763 10766
10764 tw32(NVRAM_ADDR, phy_addr + j); 10767 tw32(NVRAM_ADDR, phy_addr + j);
@@ -11529,8 +11532,8 @@ static void __devinit tg3_read_fw_ver(struct tg3 *tp)
11529 11532
11530 offset = offset + ver_offset - start; 11533 offset = offset + ver_offset - start;
11531 for (i = 0; i < 16; i += 4) { 11534 for (i = 0; i < 16; i += 4) {
11532 __le32 v; 11535 __be32 v;
11533 if (tg3_nvram_read_le(tp, offset + i, &v)) 11536 if (tg3_nvram_read_be32(tp, offset + i, &v))
11534 return; 11537 return;
11535 11538
11536 memcpy(tp->fw_ver + i, &v, 4); 11539 memcpy(tp->fw_ver + i, &v, 4);
@@ -11571,8 +11574,8 @@ static void __devinit tg3_read_fw_ver(struct tg3 *tp)
11571 tp->fw_ver[bcnt++] = ' '; 11574 tp->fw_ver[bcnt++] = ' ';
11572 11575
11573 for (i = 0; i < 4; i++) { 11576 for (i = 0; i < 4; i++) {
11574 __le32 v; 11577 __be32 v;
11575 if (tg3_nvram_read_le(tp, offset, &v)) 11578 if (tg3_nvram_read_be32(tp, offset, &v))
11576 return; 11579 return;
11577 11580
11578 offset += sizeof(v); 11581 offset += sizeof(v);