diff options
| -rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index a8def93f6b6b..80d55bf699ba 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
| @@ -3948,32 +3948,41 @@ static int tg3_load_tso_firmware(struct tg3 *tp) | |||
| 3948 | return 0; | 3948 | return 0; |
| 3949 | } | 3949 | } |
| 3950 | 3950 | ||
| 3951 | /* tp->lock is held. */ | ||
| 3952 | static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index) | ||
| 3953 | { | ||
| 3954 | u32 addr_high, addr_low; | ||
| 3955 | |||
| 3956 | addr_high = ((mac_addr[0] << 8) | mac_addr[1]); | ||
| 3957 | addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) | | ||
| 3958 | (mac_addr[4] << 8) | mac_addr[5]); | ||
| 3959 | |||
| 3960 | if (index < 4) { | ||
| 3961 | tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high); | ||
| 3962 | tw32(MAC_ADDR_0_LOW + (index * 8), addr_low); | ||
| 3963 | } else { | ||
| 3964 | index -= 4; | ||
| 3965 | tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high); | ||
| 3966 | tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low); | ||
| 3967 | } | ||
| 3968 | } | ||
| 3951 | 3969 | ||
| 3952 | /* tp->lock is held. */ | 3970 | /* tp->lock is held. */ |
| 3953 | static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) | 3971 | static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1) |
| 3954 | { | 3972 | { |
| 3955 | u32 addr_high, addr_low; | 3973 | u32 addr_high; |
| 3956 | int i; | 3974 | int i; |
| 3957 | 3975 | ||
| 3958 | addr_high = ((tp->dev->dev_addr[0] << 8) | | ||
| 3959 | tp->dev->dev_addr[1]); | ||
| 3960 | addr_low = ((tp->dev->dev_addr[2] << 24) | | ||
| 3961 | (tp->dev->dev_addr[3] << 16) | | ||
| 3962 | (tp->dev->dev_addr[4] << 8) | | ||
| 3963 | (tp->dev->dev_addr[5] << 0)); | ||
| 3964 | for (i = 0; i < 4; i++) { | 3976 | for (i = 0; i < 4; i++) { |
| 3965 | if (i == 1 && skip_mac_1) | 3977 | if (i == 1 && skip_mac_1) |
| 3966 | continue; | 3978 | continue; |
| 3967 | tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high); | 3979 | __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); |
| 3968 | tw32(MAC_ADDR_0_LOW + (i * 8), addr_low); | ||
| 3969 | } | 3980 | } |
| 3970 | 3981 | ||
| 3971 | if (tg3_asic_rev(tp) == ASIC_REV_5703 || | 3982 | if (tg3_asic_rev(tp) == ASIC_REV_5703 || |
| 3972 | tg3_asic_rev(tp) == ASIC_REV_5704) { | 3983 | tg3_asic_rev(tp) == ASIC_REV_5704) { |
| 3973 | for (i = 0; i < 12; i++) { | 3984 | for (i = 4; i < 16; i++) |
| 3974 | tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high); | 3985 | __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i); |
| 3975 | tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low); | ||
| 3976 | } | ||
| 3977 | } | 3986 | } |
| 3978 | 3987 | ||
| 3979 | addr_high = (tp->dev->dev_addr[0] + | 3988 | addr_high = (tp->dev->dev_addr[0] + |
