diff options
author | Michael Chan <mchan@broadcom.com> | 2013-01-06 07:51:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-01-07 00:02:07 -0500 |
commit | c65a17f4f51231f175336048b49b85da7c24fb6c (patch) | |
tree | 85294ed771456c7dc33175741bae1ef6bb52cea3 /drivers/net/ethernet | |
parent | b7dc8c3959fd43bfa0dbcf65375628c86665cb94 (diff) |
tg3: Add support for new 5762 ASIC
Add basic support for 5762 which is a 57765_PLUS class device.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 91 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.h | 15 |
2 files changed, 81 insertions, 25 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 78ea90c40e19..01e3201427ee 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -2632,6 +2632,9 @@ out: | |||
2632 | tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); | 2632 | tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); |
2633 | } | 2633 | } |
2634 | 2634 | ||
2635 | if (tp->pci_chip_rev_id == CHIPREV_ID_5762_A0) | ||
2636 | tg3_phydsp_write(tp, 0xffb, 0x4000); | ||
2637 | |||
2635 | tg3_phy_toggle_automdix(tp, 1); | 2638 | tg3_phy_toggle_automdix(tp, 1); |
2636 | tg3_phy_set_wirespeed(tp); | 2639 | tg3_phy_set_wirespeed(tp); |
2637 | return 0; | 2640 | return 0; |
@@ -4037,6 +4040,7 @@ static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) | |||
4037 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); | 4040 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); |
4038 | /* Fall through */ | 4041 | /* Fall through */ |
4039 | case ASIC_REV_5720: | 4042 | case ASIC_REV_5720: |
4043 | case ASIC_REV_5762: | ||
4040 | if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) | 4044 | if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) |
4041 | tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | | 4045 | tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | |
4042 | MII_TG3_DSP_CH34TP2_HIBW01); | 4046 | MII_TG3_DSP_CH34TP2_HIBW01); |
@@ -5484,7 +5488,8 @@ static int tg3_setup_phy(struct tg3 *tp, int force_reset) | |||
5484 | 5488 | ||
5485 | val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | | 5489 | val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | |
5486 | (6 << TX_LENGTHS_IPG_SHIFT); | 5490 | (6 << TX_LENGTHS_IPG_SHIFT); |
5487 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) | 5491 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
5492 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
5488 | val |= tr32(MAC_TX_LENGTHS) & | 5493 | val |= tr32(MAC_TX_LENGTHS) & |
5489 | (TX_LENGTHS_JMB_FRM_LEN_MSK | | 5494 | (TX_LENGTHS_JMB_FRM_LEN_MSK | |
5490 | TX_LENGTHS_CNT_DWN_VAL_MSK); | 5495 | TX_LENGTHS_CNT_DWN_VAL_MSK); |
@@ -8672,7 +8677,8 @@ static void tg3_rings_reset(struct tg3 *tp) | |||
8672 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; | 8677 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; |
8673 | else if (tg3_flag(tp, 5717_PLUS)) | 8678 | else if (tg3_flag(tp, 5717_PLUS)) |
8674 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; | 8679 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; |
8675 | else if (tg3_flag(tp, 57765_CLASS)) | 8680 | else if (tg3_flag(tp, 57765_CLASS) || |
8681 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
8676 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; | 8682 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; |
8677 | else | 8683 | else |
8678 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; | 8684 | limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; |
@@ -8689,6 +8695,7 @@ static void tg3_rings_reset(struct tg3 *tp) | |||
8689 | else if (!tg3_flag(tp, 5705_PLUS)) | 8695 | else if (!tg3_flag(tp, 5705_PLUS)) |
8690 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; | 8696 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; |
8691 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || | 8697 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || |
8698 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762 || | ||
8692 | tg3_flag(tp, 57765_CLASS)) | 8699 | tg3_flag(tp, 57765_CLASS)) |
8693 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; | 8700 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; |
8694 | else | 8701 | else |
@@ -8979,9 +8986,12 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
8979 | 8986 | ||
8980 | /* Enable MAC control of LPI */ | 8987 | /* Enable MAC control of LPI */ |
8981 | if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { | 8988 | if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { |
8982 | tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, | 8989 | val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | |
8983 | TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | | 8990 | TG3_CPMU_EEE_LNKIDL_UART_IDL; |
8984 | TG3_CPMU_EEE_LNKIDL_UART_IDL); | 8991 | if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) |
8992 | val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT; | ||
8993 | |||
8994 | tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val); | ||
8985 | 8995 | ||
8986 | tw32_f(TG3_CPMU_EEE_CTRL, | 8996 | tw32_f(TG3_CPMU_EEE_CTRL, |
8987 | TG3_CPMU_EEE_CTRL_EXIT_20_1_US); | 8997 | TG3_CPMU_EEE_CTRL_EXIT_20_1_US); |
@@ -9156,7 +9166,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9156 | if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) | 9166 | if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) |
9157 | val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; | 9167 | val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; |
9158 | if (!tg3_flag(tp, 57765_CLASS) && | 9168 | if (!tg3_flag(tp, 57765_CLASS) && |
9159 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) | 9169 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && |
9170 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5762) | ||
9160 | val |= DMA_RWCTRL_TAGGED_STAT_WA; | 9171 | val |= DMA_RWCTRL_TAGGED_STAT_WA; |
9161 | tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); | 9172 | tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); |
9162 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && | 9173 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && |
@@ -9308,7 +9319,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9308 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, | 9319 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, |
9309 | val | BDINFO_FLAGS_USE_EXT_RECV); | 9320 | val | BDINFO_FLAGS_USE_EXT_RECV); |
9310 | if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || | 9321 | if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || |
9311 | tg3_flag(tp, 57765_CLASS)) | 9322 | tg3_flag(tp, 57765_CLASS) || |
9323 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
9312 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, | 9324 | tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, |
9313 | NIC_SRAM_RX_JUMBO_BUFFER_DESC); | 9325 | NIC_SRAM_RX_JUMBO_BUFFER_DESC); |
9314 | } else { | 9326 | } else { |
@@ -9350,7 +9362,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9350 | (6 << TX_LENGTHS_IPG_SHIFT) | | 9362 | (6 << TX_LENGTHS_IPG_SHIFT) | |
9351 | (32 << TX_LENGTHS_SLOT_TIME_SHIFT); | 9363 | (32 << TX_LENGTHS_SLOT_TIME_SHIFT); |
9352 | 9364 | ||
9353 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) | 9365 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
9366 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
9354 | val |= tr32(MAC_TX_LENGTHS) & | 9367 | val |= tr32(MAC_TX_LENGTHS) & |
9355 | (TX_LENGTHS_JMB_FRM_LEN_MSK | | 9368 | (TX_LENGTHS_JMB_FRM_LEN_MSK | |
9356 | TX_LENGTHS_CNT_DWN_VAL_MSK); | 9369 | TX_LENGTHS_CNT_DWN_VAL_MSK); |
@@ -9404,7 +9417,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9404 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) | 9417 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) |
9405 | rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; | 9418 | rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; |
9406 | 9419 | ||
9407 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) | 9420 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
9421 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
9408 | rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; | 9422 | rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; |
9409 | 9423 | ||
9410 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || | 9424 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || |
@@ -9412,8 +9426,16 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9412 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || | 9426 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || |
9413 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || | 9427 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || |
9414 | tg3_flag(tp, 57765_PLUS)) { | 9428 | tg3_flag(tp, 57765_PLUS)) { |
9415 | val = tr32(TG3_RDMA_RSRVCTRL_REG); | 9429 | u32 tgtreg; |
9416 | if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) { | 9430 | |
9431 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
9432 | tgtreg = TG3_RDMA_RSRVCTRL_REG2; | ||
9433 | else | ||
9434 | tgtreg = TG3_RDMA_RSRVCTRL_REG; | ||
9435 | |||
9436 | val = tr32(tgtreg); | ||
9437 | if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || | ||
9438 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { | ||
9417 | val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | | 9439 | val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | |
9418 | TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | | 9440 | TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | |
9419 | TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); | 9441 | TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); |
@@ -9421,14 +9443,21 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9421 | TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | | 9443 | TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | |
9422 | TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; | 9444 | TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; |
9423 | } | 9445 | } |
9424 | tw32(TG3_RDMA_RSRVCTRL_REG, | 9446 | tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); |
9425 | val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); | ||
9426 | } | 9447 | } |
9427 | 9448 | ||
9428 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || | 9449 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || |
9429 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { | 9450 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
9430 | val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); | 9451 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { |
9431 | tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val | | 9452 | u32 tgtreg; |
9453 | |||
9454 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
9455 | tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; | ||
9456 | else | ||
9457 | tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; | ||
9458 | |||
9459 | val = tr32(tgtreg); | ||
9460 | tw32(tgtreg, val | | ||
9432 | TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | | 9461 | TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | |
9433 | TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); | 9462 | TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); |
9434 | } | 9463 | } |
@@ -9661,7 +9690,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
9661 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) | 9690 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) |
9662 | tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; | 9691 | tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; |
9663 | 9692 | ||
9664 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { | 9693 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
9694 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { | ||
9665 | val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; | 9695 | val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; |
9666 | tp->tx_mode &= ~val; | 9696 | tp->tx_mode &= ~val; |
9667 | tp->tx_mode |= tr32(MAC_TX_MODE) & val; | 9697 | tp->tx_mode |= tr32(MAC_TX_MODE) & val; |
@@ -12342,7 +12372,8 @@ static int tg3_test_memory(struct tg3 *tp) | |||
12342 | 12372 | ||
12343 | if (tg3_flag(tp, 5717_PLUS)) | 12373 | if (tg3_flag(tp, 5717_PLUS)) |
12344 | mem_tbl = mem_tbl_5717; | 12374 | mem_tbl = mem_tbl_5717; |
12345 | else if (tg3_flag(tp, 57765_CLASS)) | 12375 | else if (tg3_flag(tp, 57765_CLASS) || |
12376 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
12346 | mem_tbl = mem_tbl_57765; | 12377 | mem_tbl = mem_tbl_57765; |
12347 | else if (tg3_flag(tp, 5755_PLUS)) | 12378 | else if (tg3_flag(tp, 5755_PLUS)) |
12348 | mem_tbl = mem_tbl_5755; | 12379 | mem_tbl = mem_tbl_5755; |
@@ -14296,6 +14327,7 @@ static int tg3_phy_probe(struct tg3 *tp) | |||
14296 | if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && | 14327 | if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && |
14297 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || | 14328 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || |
14298 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || | 14329 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
14330 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762 || | ||
14299 | (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && | 14331 | (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && |
14300 | tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || | 14332 | tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || |
14301 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && | 14333 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && |
@@ -14785,7 +14817,10 @@ static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) | |||
14785 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || | 14817 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || |
14786 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || | 14818 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || |
14787 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || | 14819 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || |
14788 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) | 14820 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || |
14821 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || | ||
14822 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || | ||
14823 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727) | ||
14789 | reg = TG3PCI_GEN2_PRODID_ASICREV; | 14824 | reg = TG3PCI_GEN2_PRODID_ASICREV; |
14790 | else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || | 14825 | else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || |
14791 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || | 14826 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || |
@@ -14822,7 +14857,8 @@ static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) | |||
14822 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) | 14857 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) |
14823 | tg3_flag_set(tp, 57765_CLASS); | 14858 | tg3_flag_set(tp, 57765_CLASS); |
14824 | 14859 | ||
14825 | if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS)) | 14860 | if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || |
14861 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
14826 | tg3_flag_set(tp, 57765_PLUS); | 14862 | tg3_flag_set(tp, 57765_PLUS); |
14827 | 14863 | ||
14828 | /* Intentionally exclude ASIC_REV_5906 */ | 14864 | /* Intentionally exclude ASIC_REV_5906 */ |
@@ -15113,7 +15149,8 @@ static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) | |||
15113 | 15149 | ||
15114 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || | 15150 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || |
15115 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || | 15151 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || |
15116 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) | 15152 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
15153 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
15117 | tg3_flag_set(tp, LRG_PROD_RING_CAP); | 15154 | tg3_flag_set(tp, LRG_PROD_RING_CAP); |
15118 | 15155 | ||
15119 | if (tg3_flag(tp, 57765_PLUS) && | 15156 | if (tg3_flag(tp, 57765_PLUS) && |
@@ -15481,7 +15518,8 @@ static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) | |||
15481 | 15518 | ||
15482 | /* Initialize data/descriptor byte/word swapping. */ | 15519 | /* Initialize data/descriptor byte/word swapping. */ |
15483 | val = tr32(GRC_MODE); | 15520 | val = tr32(GRC_MODE); |
15484 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) | 15521 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
15522 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
15485 | val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | | 15523 | val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | |
15486 | GRC_MODE_WORD_SWAP_B2HRX_DATA | | 15524 | GRC_MODE_WORD_SWAP_B2HRX_DATA | |
15487 | GRC_MODE_B2HRX_ENABLE | | 15525 | GRC_MODE_B2HRX_ENABLE | |
@@ -16238,6 +16276,7 @@ static char *tg3_phy_string(struct tg3 *tp) | |||
16238 | case TG3_PHY_ID_BCM57765: return "57765"; | 16276 | case TG3_PHY_ID_BCM57765: return "57765"; |
16239 | case TG3_PHY_ID_BCM5719C: return "5719C"; | 16277 | case TG3_PHY_ID_BCM5719C: return "5719C"; |
16240 | case TG3_PHY_ID_BCM5720C: return "5720C"; | 16278 | case TG3_PHY_ID_BCM5720C: return "5720C"; |
16279 | case TG3_PHY_ID_BCM5762: return "5762C"; | ||
16241 | case TG3_PHY_ID_BCM8002: return "8002/serdes"; | 16280 | case TG3_PHY_ID_BCM8002: return "8002/serdes"; |
16242 | case 0: return "serdes"; | 16281 | case 0: return "serdes"; |
16243 | default: return "unknown"; | 16282 | default: return "unknown"; |
@@ -16413,7 +16452,10 @@ static int tg3_init_one(struct pci_dev *pdev, | |||
16413 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || | 16452 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || |
16414 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || | 16453 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || |
16415 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || | 16454 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || |
16416 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) { | 16455 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || |
16456 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || | ||
16457 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || | ||
16458 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727) { | ||
16417 | tg3_flag_set(tp, ENABLE_APE); | 16459 | tg3_flag_set(tp, ENABLE_APE); |
16418 | tp->aperegs = pci_ioremap_bar(pdev, BAR_2); | 16460 | tp->aperegs = pci_ioremap_bar(pdev, BAR_2); |
16419 | if (!tp->aperegs) { | 16461 | if (!tp->aperegs) { |
@@ -16608,7 +16650,8 @@ static int tg3_init_one(struct pci_dev *pdev, | |||
16608 | pci_set_drvdata(pdev, dev); | 16650 | pci_set_drvdata(pdev, dev); |
16609 | 16651 | ||
16610 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || | 16652 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || |
16611 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) | 16653 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || |
16654 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) | ||
16612 | tg3_flag_set(tp, PTP_CAPABLE); | 16655 | tg3_flag_set(tp, PTP_CAPABLE); |
16613 | 16656 | ||
16614 | if (tg3_flag(tp, 5717_PLUS)) { | 16657 | if (tg3_flag(tp, 5717_PLUS)) { |
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h index 247d954f3308..46d43f72f8ed 100644 --- a/drivers/net/ethernet/broadcom/tg3.h +++ b/drivers/net/ethernet/broadcom/tg3.h | |||
@@ -65,6 +65,9 @@ | |||
65 | #define TG3PCI_DEVICE_TIGON3_57766 0x1686 | 65 | #define TG3PCI_DEVICE_TIGON3_57766 0x1686 |
66 | #define TG3PCI_DEVICE_TIGON3_57786 0x16b3 | 66 | #define TG3PCI_DEVICE_TIGON3_57786 0x16b3 |
67 | #define TG3PCI_DEVICE_TIGON3_57782 0x16b7 | 67 | #define TG3PCI_DEVICE_TIGON3_57782 0x16b7 |
68 | #define TG3PCI_DEVICE_TIGON3_5762 0x1687 | ||
69 | #define TG3PCI_DEVICE_TIGON3_5725 0x1643 | ||
70 | #define TG3PCI_DEVICE_TIGON3_5727 0x16f3 | ||
68 | /* 0x04 --> 0x2c unused */ | 71 | /* 0x04 --> 0x2c unused */ |
69 | #define TG3PCI_SUBVENDOR_ID_BROADCOM PCI_VENDOR_ID_BROADCOM | 72 | #define TG3PCI_SUBVENDOR_ID_BROADCOM PCI_VENDOR_ID_BROADCOM |
70 | #define TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6 0x1644 | 73 | #define TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6 0x1644 |
@@ -159,6 +162,7 @@ | |||
159 | #define CHIPREV_ID_57765_A0 0x57785000 | 162 | #define CHIPREV_ID_57765_A0 0x57785000 |
160 | #define CHIPREV_ID_5719_A0 0x05719000 | 163 | #define CHIPREV_ID_5719_A0 0x05719000 |
161 | #define CHIPREV_ID_5720_A0 0x05720000 | 164 | #define CHIPREV_ID_5720_A0 0x05720000 |
165 | #define CHIPREV_ID_5762_A0 0x05762000 | ||
162 | #define GET_ASIC_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 12) | 166 | #define GET_ASIC_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 12) |
163 | #define ASIC_REV_5700 0x07 | 167 | #define ASIC_REV_5700 0x07 |
164 | #define ASIC_REV_5701 0x00 | 168 | #define ASIC_REV_5701 0x00 |
@@ -182,6 +186,7 @@ | |||
182 | #define ASIC_REV_5719 0x5719 | 186 | #define ASIC_REV_5719 0x5719 |
183 | #define ASIC_REV_5720 0x5720 | 187 | #define ASIC_REV_5720 0x5720 |
184 | #define ASIC_REV_57766 0x57766 | 188 | #define ASIC_REV_57766 0x57766 |
189 | #define ASIC_REV_5762 0x5762 | ||
185 | #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) | 190 | #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) |
186 | #define CHIPREV_5700_AX 0x70 | 191 | #define CHIPREV_5700_AX 0x70 |
187 | #define CHIPREV_5700_BX 0x71 | 192 | #define CHIPREV_5700_BX 0x71 |
@@ -1178,6 +1183,7 @@ | |||
1178 | #define TG3_CPMU_EEE_LNKIDL_CTRL 0x000036bc | 1183 | #define TG3_CPMU_EEE_LNKIDL_CTRL 0x000036bc |
1179 | #define TG3_CPMU_EEE_LNKIDL_PCIE_NL0 0x01000000 | 1184 | #define TG3_CPMU_EEE_LNKIDL_PCIE_NL0 0x01000000 |
1180 | #define TG3_CPMU_EEE_LNKIDL_UART_IDL 0x00000004 | 1185 | #define TG3_CPMU_EEE_LNKIDL_UART_IDL 0x00000004 |
1186 | #define TG3_CPMU_EEE_LNKIDL_APE_TX_MT 0x00000002 | ||
1181 | /* 0x36c0 --> 0x36d0 unused */ | 1187 | /* 0x36c0 --> 0x36d0 unused */ |
1182 | 1188 | ||
1183 | #define TG3_CPMU_EEE_CTRL 0x000036d0 | 1189 | #define TG3_CPMU_EEE_CTRL 0x000036d0 |
@@ -1400,7 +1406,10 @@ | |||
1400 | #define RDMAC_STATUS_FIFOURUN 0x00000080 | 1406 | #define RDMAC_STATUS_FIFOURUN 0x00000080 |
1401 | #define RDMAC_STATUS_FIFOOREAD 0x00000100 | 1407 | #define RDMAC_STATUS_FIFOOREAD 0x00000100 |
1402 | #define RDMAC_STATUS_LNGREAD 0x00000200 | 1408 | #define RDMAC_STATUS_LNGREAD 0x00000200 |
1403 | /* 0x4808 --> 0x4900 unused */ | 1409 | /* 0x4808 --> 0x4890 unused */ |
1410 | |||
1411 | #define TG3_RDMA_RSRVCTRL_REG2 0x00004890 | ||
1412 | #define TG3_LSO_RD_DMA_CRPTEN_CTRL2 0x000048a0 | ||
1404 | 1413 | ||
1405 | #define TG3_RDMA_RSRVCTRL_REG 0x00004900 | 1414 | #define TG3_RDMA_RSRVCTRL_REG 0x00004900 |
1406 | #define TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX 0x00000004 | 1415 | #define TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX 0x00000004 |
@@ -1910,6 +1919,8 @@ | |||
1910 | #define FLASH_5717VENDOR_ST_45USPT 0x03400001 | 1919 | #define FLASH_5717VENDOR_ST_45USPT 0x03400001 |
1911 | #define FLASH_5720_EEPROM_HD 0x00000001 | 1920 | #define FLASH_5720_EEPROM_HD 0x00000001 |
1912 | #define FLASH_5720_EEPROM_LD 0x00000003 | 1921 | #define FLASH_5720_EEPROM_LD 0x00000003 |
1922 | #define FLASH_5762_EEPROM_HD 0x02000001 | ||
1923 | #define FLASH_5762_EEPROM_LD 0x02000003 | ||
1913 | #define FLASH_5720VENDOR_M_ATMEL_DB011D 0x01000000 | 1924 | #define FLASH_5720VENDOR_M_ATMEL_DB011D 0x01000000 |
1914 | #define FLASH_5720VENDOR_M_ATMEL_DB021D 0x01000002 | 1925 | #define FLASH_5720VENDOR_M_ATMEL_DB021D 0x01000002 |
1915 | #define FLASH_5720VENDOR_M_ATMEL_DB041D 0x01000001 | 1926 | #define FLASH_5720VENDOR_M_ATMEL_DB041D 0x01000001 |
@@ -3206,6 +3217,7 @@ struct tg3 { | |||
3206 | #define TG3_PHY_ID_BCM57765 0x5c0d8a40 | 3217 | #define TG3_PHY_ID_BCM57765 0x5c0d8a40 |
3207 | #define TG3_PHY_ID_BCM5719C 0x5c0d8a20 | 3218 | #define TG3_PHY_ID_BCM5719C 0x5c0d8a20 |
3208 | #define TG3_PHY_ID_BCM5720C 0x5c0d8b60 | 3219 | #define TG3_PHY_ID_BCM5720C 0x5c0d8b60 |
3220 | #define TG3_PHY_ID_BCM5762 0x85803780 | ||
3209 | #define TG3_PHY_ID_BCM5906 0xdc00ac40 | 3221 | #define TG3_PHY_ID_BCM5906 0xdc00ac40 |
3210 | #define TG3_PHY_ID_BCM8002 0x60010140 | 3222 | #define TG3_PHY_ID_BCM8002 0x60010140 |
3211 | #define TG3_PHY_ID_INVALID 0xffffffff | 3223 | #define TG3_PHY_ID_INVALID 0xffffffff |
@@ -3230,6 +3242,7 @@ struct tg3 { | |||
3230 | (X) == TG3_PHY_ID_BCM5906 || (X) == TG3_PHY_ID_BCM5761 || \ | 3242 | (X) == TG3_PHY_ID_BCM5906 || (X) == TG3_PHY_ID_BCM5761 || \ |
3231 | (X) == TG3_PHY_ID_BCM5718C || (X) == TG3_PHY_ID_BCM5718S || \ | 3243 | (X) == TG3_PHY_ID_BCM5718C || (X) == TG3_PHY_ID_BCM5718S || \ |
3232 | (X) == TG3_PHY_ID_BCM57765 || (X) == TG3_PHY_ID_BCM5719C || \ | 3244 | (X) == TG3_PHY_ID_BCM57765 || (X) == TG3_PHY_ID_BCM5719C || \ |
3245 | (X) == TG3_PHY_ID_BCM5720C || (X) == TG3_PHY_ID_BCM5762 || \ | ||
3233 | (X) == TG3_PHY_ID_BCM8002) | 3246 | (X) == TG3_PHY_ID_BCM8002) |
3234 | 3247 | ||
3235 | u32 phy_flags; | 3248 | u32 phy_flags; |