aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDivy Le Ray <divy@chelsio.com>2007-11-16 14:22:16 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:04:11 -0500
commita2604be5488095657aeb1a09c3f08d9f760132ec (patch)
treeeb90977bf4c9608b2e84658466170a8146ee5830
parent3e5192eec8faf1df77514d2a593d14cc851a6b43 (diff)
cxgb3 - HW set up updates
Disable PEX errors. The HW generates false positives. Update RSS hash function to a symmetric algorithm. Update T3C HW support Signed-off-by: Divy Le Ray <divy@chelsio.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c2
-rw-r--r--drivers/net/cxgb3/regs.h22
-rw-r--r--drivers/net/cxgb3/t3_hw.c24
3 files changed, 44 insertions, 4 deletions
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index b4ee18bf35f4..f24a27bbd307 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -336,7 +336,7 @@ static void setup_rss(struct adapter *adap)
336 336
337 t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN | 337 t3_config_rss(adap, F_RQFEEDBACKENABLE | F_TNLLKPEN | F_TNLMAPEN |
338 F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN | 338 F_TNLPRTEN | F_TNL2TUPEN | F_TNL4TUPEN |
339 V_RRCPLCPUSIZE(6), cpus, rspq_map); 339 V_RRCPLCPUSIZE(6) | F_HASHTOEPLITZ, cpus, rspq_map);
340} 340}
341 341
342static void init_napi(struct adapter *adap) 342static void init_napi(struct adapter *adap)
diff --git a/drivers/net/cxgb3/regs.h b/drivers/net/cxgb3/regs.h
index 6e12bf4bc6cf..70e1961acee1 100644
--- a/drivers/net/cxgb3/regs.h
+++ b/drivers/net/cxgb3/regs.h
@@ -965,6 +965,12 @@
965#define V_LOCKTID(x) ((x) << S_LOCKTID) 965#define V_LOCKTID(x) ((x) << S_LOCKTID)
966#define F_LOCKTID V_LOCKTID(1U) 966#define F_LOCKTID V_LOCKTID(1U)
967 967
968#define S_TABLELATENCYDELTA 0
969#define M_TABLELATENCYDELTA 0xf
970#define V_TABLELATENCYDELTA(x) ((x) << S_TABLELATENCYDELTA)
971#define G_TABLELATENCYDELTA(x) \
972 (((x) >> S_TABLELATENCYDELTA) & M_TABLELATENCYDELTA)
973
968#define A_TP_PC_CONFIG2 0x34c 974#define A_TP_PC_CONFIG2 0x34c
969 975
970#define S_CHDRAFULL 4 976#define S_CHDRAFULL 4
@@ -1146,6 +1152,10 @@
1146#define V_RQFEEDBACKENABLE(x) ((x) << S_RQFEEDBACKENABLE) 1152#define V_RQFEEDBACKENABLE(x) ((x) << S_RQFEEDBACKENABLE)
1147#define F_RQFEEDBACKENABLE V_RQFEEDBACKENABLE(1U) 1153#define F_RQFEEDBACKENABLE V_RQFEEDBACKENABLE(1U)
1148 1154
1155#define S_HASHTOEPLITZ 2
1156#define V_HASHTOEPLITZ(x) ((x) << S_HASHTOEPLITZ)
1157#define F_HASHTOEPLITZ V_HASHTOEPLITZ(1U)
1158
1149#define S_DISABLE 0 1159#define S_DISABLE 0
1150 1160
1151#define A_TP_TM_PIO_ADDR 0x418 1161#define A_TP_TM_PIO_ADDR 0x418
@@ -1198,6 +1208,14 @@
1198 1208
1199#define A_TP_INT_ENABLE 0x470 1209#define A_TP_INT_ENABLE 0x470
1200 1210
1211#define S_FLMTXFLSTEMPTY 30
1212#define V_FLMTXFLSTEMPTY(x) ((x) << S_FLMTXFLSTEMPTY)
1213#define F_FLMTXFLSTEMPTY V_FLMTXFLSTEMPTY(1U)
1214
1215#define S_FLMRXFLSTEMPTY 29
1216#define V_FLMRXFLSTEMPTY(x) ((x) << S_FLMRXFLSTEMPTY)
1217#define F_FLMRXFLSTEMPTY V_FLMRXFLSTEMPTY(1U)
1218
1201#define A_TP_INT_CAUSE 0x474 1219#define A_TP_INT_CAUSE 0x474
1202 1220
1203#define A_TP_TX_MOD_Q1_Q0_RATE_LIMIT 0x8 1221#define A_TP_TX_MOD_Q1_Q0_RATE_LIMIT 0x8
@@ -1291,6 +1309,10 @@
1291 1309
1292#define A_ULPTX_CONFIG 0x580 1310#define A_ULPTX_CONFIG 0x580
1293 1311
1312#define S_CFG_CQE_SOP_MASK 1
1313#define V_CFG_CQE_SOP_MASK(x) ((x) << S_CFG_CQE_SOP_MASK)
1314#define F_CFG_CQE_SOP_MASK V_CFG_CQE_SOP_MASK(1U)
1315
1294#define S_CFG_RR_ARB 0 1316#define S_CFG_RR_ARB 0
1295#define V_CFG_RR_ARB(x) ((x) << S_CFG_RR_ARB) 1317#define V_CFG_RR_ARB(x) ((x) << S_CFG_RR_ARB)
1296#define F_CFG_RR_ARB V_CFG_RR_ARB(1U) 1318#define F_CFG_RR_ARB V_CFG_RR_ARB(1U)
diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c
index d7b991b7ed78..fab138100dff 100644
--- a/drivers/net/cxgb3/t3_hw.c
+++ b/drivers/net/cxgb3/t3_hw.c
@@ -1280,7 +1280,7 @@ static int t3_handle_intr_status(struct adapter *adapter, unsigned int reg,
1280#define PCIE_INTR_MASK (F_UNXSPLCPLERRR | F_UNXSPLCPLERRC | F_PCIE_PIOPARERR |\ 1280#define PCIE_INTR_MASK (F_UNXSPLCPLERRR | F_UNXSPLCPLERRC | F_PCIE_PIOPARERR |\
1281 F_PCIE_WFPARERR | F_PCIE_RFPARERR | F_PCIE_CFPARERR | \ 1281 F_PCIE_WFPARERR | F_PCIE_RFPARERR | F_PCIE_CFPARERR | \
1282 /* V_PCIE_MSIXPARERR(M_PCIE_MSIXPARERR) | */ \ 1282 /* V_PCIE_MSIXPARERR(M_PCIE_MSIXPARERR) | */ \
1283 V_BISTERR(M_BISTERR) | F_PEXERR) 1283 V_BISTERR(M_BISTERR))
1284#define ULPRX_INTR_MASK F_PARERR 1284#define ULPRX_INTR_MASK F_PARERR
1285#define ULPTX_INTR_MASK 0 1285#define ULPTX_INTR_MASK 0
1286#define CPLSW_INTR_MASK (F_TP_FRAMING_ERROR | \ 1286#define CPLSW_INTR_MASK (F_TP_FRAMING_ERROR | \
@@ -1383,8 +1383,16 @@ static void tp_intr_handler(struct adapter *adapter)
1383 {0} 1383 {0}
1384 }; 1384 };
1385 1385
1386 static struct intr_info tp_intr_info_t3c[] = {
1387 { 0x1ffffff, "TP parity error", -1, 1 },
1388 { F_FLMRXFLSTEMPTY, "TP out of Rx pages", -1, 1 },
1389 { F_FLMTXFLSTEMPTY, "TP out of Tx pages", -1, 1 },
1390 { 0 }
1391 };
1392
1386 if (t3_handle_intr_status(adapter, A_TP_INT_CAUSE, 0xffffffff, 1393 if (t3_handle_intr_status(adapter, A_TP_INT_CAUSE, 0xffffffff,
1387 tp_intr_info, NULL)) 1394 adapter->params.rev < T3_REV_C ?
1395 tp_intr_info : tp_intr_info_t3c, NULL))
1388 t3_fatal_err(adapter); 1396 t3_fatal_err(adapter);
1389} 1397}
1390 1398
@@ -1734,7 +1742,6 @@ void t3_intr_enable(struct adapter *adapter)
1734 MC7_INTR_MASK}, 1742 MC7_INTR_MASK},
1735 {A_MC5_DB_INT_ENABLE, MC5_INTR_MASK}, 1743 {A_MC5_DB_INT_ENABLE, MC5_INTR_MASK},
1736 {A_ULPRX_INT_ENABLE, ULPRX_INTR_MASK}, 1744 {A_ULPRX_INT_ENABLE, ULPRX_INTR_MASK},
1737 {A_TP_INT_ENABLE, 0x3bfffff},
1738 {A_PM1_TX_INT_ENABLE, PMTX_INTR_MASK}, 1745 {A_PM1_TX_INT_ENABLE, PMTX_INTR_MASK},
1739 {A_PM1_RX_INT_ENABLE, PMRX_INTR_MASK}, 1746 {A_PM1_RX_INT_ENABLE, PMRX_INTR_MASK},
1740 {A_CIM_HOST_INT_ENABLE, CIM_INTR_MASK}, 1747 {A_CIM_HOST_INT_ENABLE, CIM_INTR_MASK},
@@ -1744,6 +1751,8 @@ void t3_intr_enable(struct adapter *adapter)
1744 adapter->slow_intr_mask = PL_INTR_MASK; 1751 adapter->slow_intr_mask = PL_INTR_MASK;
1745 1752
1746 t3_write_regs(adapter, intr_en_avp, ARRAY_SIZE(intr_en_avp), 0); 1753 t3_write_regs(adapter, intr_en_avp, ARRAY_SIZE(intr_en_avp), 0);
1754 t3_write_reg(adapter, A_TP_INT_ENABLE,
1755 adapter->params.rev >= T3_REV_C ? 0x2bfffff : 0x3bfffff);
1747 1756
1748 if (adapter->params.rev > 0) { 1757 if (adapter->params.rev > 0) {
1749 t3_write_reg(adapter, A_CPL_INTR_ENABLE, 1758 t3_write_reg(adapter, A_CPL_INTR_ENABLE,
@@ -2509,6 +2518,11 @@ static void tp_config(struct adapter *adap, const struct tp_params *p)
2509 } else 2518 } else
2510 t3_set_reg_field(adap, A_TP_PARA_REG3, 0, F_TXPACEFIXED); 2519 t3_set_reg_field(adap, A_TP_PARA_REG3, 0, F_TXPACEFIXED);
2511 2520
2521 if (adap->params.rev == T3_REV_C)
2522 t3_set_reg_field(adap, A_TP_PC_CONFIG,
2523 V_TABLELATENCYDELTA(M_TABLELATENCYDELTA),
2524 V_TABLELATENCYDELTA(4));
2525
2512 t3_write_reg(adap, A_TP_TX_MOD_QUEUE_WEIGHT1, 0); 2526 t3_write_reg(adap, A_TP_TX_MOD_QUEUE_WEIGHT1, 0);
2513 t3_write_reg(adap, A_TP_TX_MOD_QUEUE_WEIGHT0, 0); 2527 t3_write_reg(adap, A_TP_TX_MOD_QUEUE_WEIGHT0, 0);
2514 t3_write_reg(adap, A_TP_MOD_CHANNEL_WEIGHT, 0); 2528 t3_write_reg(adap, A_TP_MOD_CHANNEL_WEIGHT, 0);
@@ -3246,6 +3260,10 @@ int t3_init_hw(struct adapter *adapter, u32 fw_params)
3246 else 3260 else
3247 t3_set_reg_field(adapter, A_PCIX_CFG, 0, F_CLIDECEN); 3261 t3_set_reg_field(adapter, A_PCIX_CFG, 0, F_CLIDECEN);
3248 3262
3263 if (adapter->params.rev == T3_REV_C)
3264 t3_set_reg_field(adapter, A_ULPTX_CONFIG, 0,
3265 F_CFG_CQE_SOP_MASK);
3266
3249 t3_write_reg(adapter, A_PM1_RX_CFG, 0xffffffff); 3267 t3_write_reg(adapter, A_PM1_RX_CFG, 0xffffffff);
3250 t3_write_reg(adapter, A_PM1_RX_MODE, 0); 3268 t3_write_reg(adapter, A_PM1_RX_MODE, 0);
3251 t3_write_reg(adapter, A_PM1_TX_MODE, 0); 3269 t3_write_reg(adapter, A_PM1_TX_MODE, 0);