diff options
author | Dmitry Kravkov <dmitry@broadcom.com> | 2013-04-21 23:48:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-22 15:34:40 -0400 |
commit | 30c20b67abf42b79b204820cc610caf368670feb (patch) | |
tree | 21667b567729a9ef20b065d5051abde491b3486e /drivers/net/ethernet | |
parent | 85640952c5d76553a7ed543b355527e2b2b57b29 (diff) |
bnx2x: fix byte-by-byte nvram write for BE machines
CC: Francious Romieu <romieu@fz.zoreil.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c index f04eddf1c94c..8ae51f991440 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c | |||
@@ -1569,9 +1569,8 @@ static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, | |||
1569 | int buf_size) | 1569 | int buf_size) |
1570 | { | 1570 | { |
1571 | int rc; | 1571 | int rc; |
1572 | u32 cmd_flags; | 1572 | u32 cmd_flags, align_offset, val; |
1573 | u32 align_offset; | 1573 | __be32 val_be; |
1574 | __be32 val; | ||
1575 | 1574 | ||
1576 | if (offset + buf_size > bp->common.flash_size) { | 1575 | if (offset + buf_size > bp->common.flash_size) { |
1577 | DP(BNX2X_MSG_ETHTOOL | BNX2X_MSG_NVM, | 1576 | DP(BNX2X_MSG_ETHTOOL | BNX2X_MSG_NVM, |
@@ -1590,16 +1589,16 @@ static int bnx2x_nvram_write1(struct bnx2x *bp, u32 offset, u8 *data_buf, | |||
1590 | 1589 | ||
1591 | cmd_flags = (MCPR_NVM_COMMAND_FIRST | MCPR_NVM_COMMAND_LAST); | 1590 | cmd_flags = (MCPR_NVM_COMMAND_FIRST | MCPR_NVM_COMMAND_LAST); |
1592 | align_offset = (offset & ~0x03); | 1591 | align_offset = (offset & ~0x03); |
1593 | rc = bnx2x_nvram_read_dword(bp, align_offset, &val, cmd_flags); | 1592 | rc = bnx2x_nvram_read_dword(bp, align_offset, &val_be, cmd_flags); |
1594 | 1593 | ||
1595 | if (rc == 0) { | 1594 | if (rc == 0) { |
1596 | val &= ~(0xff << BYTE_OFFSET(offset)); | ||
1597 | val |= (*data_buf << BYTE_OFFSET(offset)); | ||
1598 | |||
1599 | /* nvram data is returned as an array of bytes | 1595 | /* nvram data is returned as an array of bytes |
1600 | * convert it back to cpu order | 1596 | * convert it back to cpu order |
1601 | */ | 1597 | */ |
1602 | val = be32_to_cpu(val); | 1598 | val = be32_to_cpu(val_be); |
1599 | |||
1600 | val &= ~le32_to_cpu(0xff << BYTE_OFFSET(offset)); | ||
1601 | val |= le32_to_cpu(*data_buf << BYTE_OFFSET(offset)); | ||
1603 | 1602 | ||
1604 | rc = bnx2x_nvram_write_dword(bp, align_offset, val, | 1603 | rc = bnx2x_nvram_write_dword(bp, align_offset, val, |
1605 | cmd_flags); | 1604 | cmd_flags); |