diff options
author | Hariprasad Shenai <hariprasad@chelsio.com> | 2014-09-01 10:24:57 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-02 02:00:41 -0400 |
commit | 9bb59b96ae88ee9dc035d5cc9818b02b12208904 (patch) | |
tree | 4e6795065995b7e9e126c0133c8e09d35b5a7eca | |
parent | 63a92fe6f7e40069086be21bf9fbcfbe8d001345 (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.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 29 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_regs.h | 2 |
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) |