aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHariprasad Shenai <hariprasad@chelsio.com>2014-09-01 10:24:57 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-02 02:00:41 -0400
commit9bb59b96ae88ee9dc035d5cc9818b02b12208904 (patch)
tree4e6795065995b7e9e126c0133c8e09d35b5a7eca
parent63a92fe6f7e40069086be21bf9fbcfbe8d001345 (diff)
cxgb4: Fix T5 adapter accessing T4 adapter registers
Fixes few register access for both T4 and T5. PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS & PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS is T4 only register don't let T5 access them. For T5 MA_PARITY_ERROR_STATUS2 is additionally read. MPS_TRC_RSS_CONTROL is T4 only register, for T5 use MPS_T5_TRC_RSS_CONTROL. Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c4
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c29
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_regs.h2
3 files changed, 24 insertions, 11 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 18fb9c61d7ba..cf387ae8d7f8 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -1253,7 +1253,9 @@ freeout: t4_free_sge_resources(adap);
1253 goto freeout; 1253 goto freeout;
1254 } 1254 }
1255 1255
1256 t4_write_reg(adap, MPS_TRC_RSS_CONTROL, 1256 t4_write_reg(adap, is_t4(adap->params.chip) ?
1257 MPS_TRC_RSS_CONTROL :
1258 MPS_T5_TRC_RSS_CONTROL,
1257 RSSCONTROL(netdev2pinfo(adap->port[0])->tx_chan) | 1259 RSSCONTROL(netdev2pinfo(adap->port[0])->tx_chan) |
1258 QUEUENUMBER(s->ethrxq[0].rspq.abs_id)); 1260 QUEUENUMBER(s->ethrxq[0].rspq.abs_id));
1259 return 0; 1261 return 0;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index adf16a54da26..0250a9deb292 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -1403,15 +1403,18 @@ static void pcie_intr_handler(struct adapter *adapter)
1403 1403
1404 int fat; 1404 int fat;
1405 1405
1406 fat = t4_handle_intr_status(adapter, 1406 if (is_t4(adapter->params.chip))
1407 PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS, 1407 fat = t4_handle_intr_status(adapter,
1408 sysbus_intr_info) + 1408 PCIE_CORE_UTL_SYSTEM_BUS_AGENT_STATUS,
1409 t4_handle_intr_status(adapter, 1409 sysbus_intr_info) +
1410 PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS, 1410 t4_handle_intr_status(adapter,
1411 pcie_port_intr_info) + 1411 PCIE_CORE_UTL_PCI_EXPRESS_PORT_STATUS,
1412 t4_handle_intr_status(adapter, PCIE_INT_CAUSE, 1412 pcie_port_intr_info) +
1413 is_t4(adapter->params.chip) ? 1413 t4_handle_intr_status(adapter, PCIE_INT_CAUSE,
1414 pcie_intr_info : t5_pcie_intr_info); 1414 pcie_intr_info);
1415 else
1416 fat = t4_handle_intr_status(adapter, PCIE_INT_CAUSE,
1417 t5_pcie_intr_info);
1415 1418
1416 if (fat) 1419 if (fat)
1417 t4_fatal_err(adapter); 1420 t4_fatal_err(adapter);
@@ -1777,10 +1780,16 @@ static void ma_intr_handler(struct adapter *adap)
1777{ 1780{
1778 u32 v, status = t4_read_reg(adap, MA_INT_CAUSE); 1781 u32 v, status = t4_read_reg(adap, MA_INT_CAUSE);
1779 1782
1780 if (status & MEM_PERR_INT_CAUSE) 1783 if (status & MEM_PERR_INT_CAUSE) {
1781 dev_alert(adap->pdev_dev, 1784 dev_alert(adap->pdev_dev,
1782 "MA parity error, parity status %#x\n", 1785 "MA parity error, parity status %#x\n",
1783 t4_read_reg(adap, MA_PARITY_ERROR_STATUS)); 1786 t4_read_reg(adap, MA_PARITY_ERROR_STATUS));
1787 if (is_t5(adap->params.chip))
1788 dev_alert(adap->pdev_dev,
1789 "MA parity error, parity status %#x\n",
1790 t4_read_reg(adap,
1791 MA_PARITY_ERROR_STATUS2));
1792 }
1784 if (status & MEM_WRAP_INT_CAUSE) { 1793 if (status & MEM_WRAP_INT_CAUSE) {
1785 v = t4_read_reg(adap, MA_INT_WRAP_STATUS); 1794 v = t4_read_reg(adap, MA_INT_WRAP_STATUS);
1786 dev_alert(adap->pdev_dev, "MA address wrap-around error by " 1795 dev_alert(adap->pdev_dev, "MA address wrap-around error by "
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
index e3146e83df20..39fb325474f7 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
@@ -511,6 +511,7 @@
511#define MEM_WRAP_CLIENT_NUM_GET(x) (((x) & MEM_WRAP_CLIENT_NUM_MASK) >> MEM_WRAP_CLIENT_NUM_SHIFT) 511#define MEM_WRAP_CLIENT_NUM_GET(x) (((x) & MEM_WRAP_CLIENT_NUM_MASK) >> MEM_WRAP_CLIENT_NUM_SHIFT)
512#define MA_PCIE_FW 0x30b8 512#define MA_PCIE_FW 0x30b8
513#define MA_PARITY_ERROR_STATUS 0x77f4 513#define MA_PARITY_ERROR_STATUS 0x77f4
514#define MA_PARITY_ERROR_STATUS2 0x7804
514 515
515#define MA_EXT_MEMORY1_BAR 0x7808 516#define MA_EXT_MEMORY1_BAR 0x7808
516#define EDC_0_BASE_ADDR 0x7900 517#define EDC_0_BASE_ADDR 0x7900
@@ -959,6 +960,7 @@
959#define TRCMULTIFILTER 0x00000001U 960#define TRCMULTIFILTER 0x00000001U
960 961
961#define MPS_TRC_RSS_CONTROL 0x9808 962#define MPS_TRC_RSS_CONTROL 0x9808
963#define MPS_T5_TRC_RSS_CONTROL 0xa00c
962#define RSSCONTROL_MASK 0x00ff0000U 964#define RSSCONTROL_MASK 0x00ff0000U
963#define RSSCONTROL_SHIFT 16 965#define RSSCONTROL_SHIFT 16
964#define RSSCONTROL(x) ((x) << RSSCONTROL_SHIFT) 966#define RSSCONTROL(x) ((x) << RSSCONTROL_SHIFT)