diff options
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index bb3b73435170..ecd64a224e95 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -3154,6 +3154,22 @@ static int tg3_setup_phy(struct tg3 *tp, int force_reset) | |||
3154 | err = tg3_setup_copper_phy(tp, force_reset); | 3154 | err = tg3_setup_copper_phy(tp, force_reset); |
3155 | } | 3155 | } |
3156 | 3156 | ||
3157 | if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0) { | ||
3158 | u32 val, scale; | ||
3159 | |||
3160 | val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; | ||
3161 | if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) | ||
3162 | scale = 65; | ||
3163 | else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) | ||
3164 | scale = 6; | ||
3165 | else | ||
3166 | scale = 12; | ||
3167 | |||
3168 | val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; | ||
3169 | val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); | ||
3170 | tw32(GRC_MISC_CFG, val); | ||
3171 | } | ||
3172 | |||
3157 | if (tp->link_config.active_speed == SPEED_1000 && | 3173 | if (tp->link_config.active_speed == SPEED_1000 && |
3158 | tp->link_config.active_duplex == DUPLEX_HALF) | 3174 | tp->link_config.active_duplex == DUPLEX_HALF) |
3159 | tw32(MAC_TX_LENGTHS, | 3175 | tw32(MAC_TX_LENGTHS, |