aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2013-04-21 23:48:07 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-22 15:34:40 -0400
commit30c20b67abf42b79b204820cc610caf368670feb (patch)
tree21667b567729a9ef20b065d5051abde491b3486e /drivers/net/ethernet
parent85640952c5d76553a7ed543b355527e2b2b57b29 (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.c15
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);