Commit c98f6e3b authored by Matt Carlson's avatar Matt Carlson Committed by David S. Miller

[TG3]: Replace some magic 5704S constants

This patch replaces magic values with preprocessor definitions for
the sg_dig_ctrl and sg_dig_status registers.  This is preparatory work
for the next patch.
Signed-off-by: default avatarMatt Carlson <mcarlson@broadcom.com>
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ba4d07a8
...@@ -2683,7 +2683,7 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) ...@@ -2683,7 +2683,7 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
sg_dig_ctrl = tr32(SG_DIG_CTRL); sg_dig_ctrl = tr32(SG_DIG_CTRL);
if (tp->link_config.autoneg != AUTONEG_ENABLE) { if (tp->link_config.autoneg != AUTONEG_ENABLE) {
if (sg_dig_ctrl & (1 << 31)) { if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
if (workaround) { if (workaround) {
u32 val = serdes_cfg; u32 val = serdes_cfg;
...@@ -2693,7 +2693,8 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) ...@@ -2693,7 +2693,8 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
val |= 0x4010000; val |= 0x4010000;
tw32_f(MAC_SERDES_CFG, val); tw32_f(MAC_SERDES_CFG, val);
} }
tw32_f(SG_DIG_CTRL, 0x01388400);
tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
} }
if (mac_status & MAC_STATUS_PCS_SYNCED) { if (mac_status & MAC_STATUS_PCS_SYNCED) {
tg3_setup_flow_control(tp, 0, 0); tg3_setup_flow_control(tp, 0, 0);
...@@ -2703,13 +2704,13 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) ...@@ -2703,13 +2704,13 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
} }
/* Want auto-negotiation. */ /* Want auto-negotiation. */
expected_sg_dig_ctrl = 0x81388400; expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
/* Pause capability */ /* Pause capability */
expected_sg_dig_ctrl |= (1 << 11); expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
/* Asymettric pause */ /* Asymettric pause */
expected_sg_dig_ctrl |= (1 << 12); expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
if (sg_dig_ctrl != expected_sg_dig_ctrl) { if (sg_dig_ctrl != expected_sg_dig_ctrl) {
if ((tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) && if ((tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) &&
...@@ -2724,7 +2725,7 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) ...@@ -2724,7 +2725,7 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
restart_autoneg: restart_autoneg:
if (workaround) if (workaround)
tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | (1 << 30)); tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
udelay(5); udelay(5);
tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
...@@ -2735,22 +2736,22 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) ...@@ -2735,22 +2736,22 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
sg_dig_status = tr32(SG_DIG_STATUS); sg_dig_status = tr32(SG_DIG_STATUS);
mac_status = tr32(MAC_STATUS); mac_status = tr32(MAC_STATUS);
if ((sg_dig_status & (1 << 1)) && if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
(mac_status & MAC_STATUS_PCS_SYNCED)) { (mac_status & MAC_STATUS_PCS_SYNCED)) {
u32 local_adv, remote_adv; u32 local_adv, remote_adv;
local_adv = ADVERTISE_PAUSE_CAP; local_adv = ADVERTISE_PAUSE_CAP;
remote_adv = 0; remote_adv = 0;
if (sg_dig_status & (1 << 19)) if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
remote_adv |= LPA_PAUSE_CAP; remote_adv |= LPA_PAUSE_CAP;
if (sg_dig_status & (1 << 20)) if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
remote_adv |= LPA_PAUSE_ASYM; remote_adv |= LPA_PAUSE_ASYM;
tg3_setup_flow_control(tp, local_adv, remote_adv); tg3_setup_flow_control(tp, local_adv, remote_adv);
current_link_up = 1; current_link_up = 1;
tp->serdes_counter = 0; tp->serdes_counter = 0;
tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT; tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
} else if (!(sg_dig_status & (1 << 1))) { } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
if (tp->serdes_counter) if (tp->serdes_counter)
tp->serdes_counter--; tp->serdes_counter--;
else { else {
...@@ -2765,7 +2766,7 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) ...@@ -2765,7 +2766,7 @@ static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
tw32_f(MAC_SERDES_CFG, val); tw32_f(MAC_SERDES_CFG, val);
} }
tw32_f(SG_DIG_CTRL, 0x01388400); tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
udelay(40); udelay(40);
/* Link parallel detection - link is up */ /* Link parallel detection - link is up */
......
...@@ -545,6 +545,8 @@ ...@@ -545,6 +545,8 @@
#define SG_DIG_FIBER_MODE 0x00008000 #define SG_DIG_FIBER_MODE 0x00008000
#define SG_DIG_REMOTE_FAULT_MASK 0x00006000 #define SG_DIG_REMOTE_FAULT_MASK 0x00006000
#define SG_DIG_PAUSE_MASK 0x00001800 #define SG_DIG_PAUSE_MASK 0x00001800
#define SG_DIG_PAUSE_CAP 0x00000800
#define SG_DIG_ASYM_PAUSE 0x00001000
#define SG_DIG_GBIC_ENABLE 0x00000400 #define SG_DIG_GBIC_ENABLE 0x00000400
#define SG_DIG_CHECK_END_ENABLE 0x00000200 #define SG_DIG_CHECK_END_ENABLE 0x00000200
#define SG_DIG_SGMII_AUTONEG_TIMER 0x00000100 #define SG_DIG_SGMII_AUTONEG_TIMER 0x00000100
...@@ -556,6 +558,11 @@ ...@@ -556,6 +558,11 @@
#define SG_DIG_AUTONEG_LOW_ENABLE 0x00000004 #define SG_DIG_AUTONEG_LOW_ENABLE 0x00000004
#define SG_DIG_REMOTE_LOOPBACK 0x00000002 #define SG_DIG_REMOTE_LOOPBACK 0x00000002
#define SG_DIG_LOOPBACK 0x00000001 #define SG_DIG_LOOPBACK 0x00000001
#define SG_DIG_COMMON_SETUP (SG_DIG_CRC16_CLEAR_N | \
SG_DIG_LOCAL_DUPLEX_STATUS | \
SG_DIG_LOCAL_LINK_STATUS | \
(0x2 << SG_DIG_SPEED_STATUS_SHIFT) | \
SG_DIG_FIBER_MODE | SG_DIG_GBIC_ENABLE)
#define SG_DIG_STATUS 0x000005b4 #define SG_DIG_STATUS 0x000005b4
#define SG_DIG_CRC16_BUS_MASK 0xffff0000 #define SG_DIG_CRC16_BUS_MASK 0xffff0000
#define SG_DIG_PARTNER_FAULT_MASK 0x00600000 /* If !MRADV_CRC16_SELECT */ #define SG_DIG_PARTNER_FAULT_MASK 0x00600000 /* If !MRADV_CRC16_SELECT */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment