Print this page
Just the 5719/5720 changes

*** 22,32 **** /* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. */ /* ! * Copyright 2011 Nexenta Systems, Inc. All rights reserved. */ #include "bge_impl.h" #define PIO_ADDR(bgep, offset) ((void *)((caddr_t)(bgep)->io_regs+(offset))) --- 22,32 ---- /* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. */ /* ! * Copyright 2011, 2012 Nexenta Systems, Inc. All rights reserved. */ #include "bge_impl.h" #define PIO_ADDR(bgep, offset) ((void *)((caddr_t)(bgep)->io_regs+(offset)))
*** 361,371 **** */ cidp->device = pci_config_get16(handle, PCI_CONF_DEVID); if (DEVICE_5717_SERIES_CHIPSETS(bgep)) pci_config_put32(handle, PCI_CONF_BGE_MHCR, 0); mhcr = pci_config_get32(handle, PCI_CONF_BGE_MHCR); ! cidp->asic_rev = mhcr & MHCR_CHIP_REV_MASK; cidp->businfo = pci_config_get32(handle, PCI_CONF_BGE_PCISTATE); cidp->command = pci_config_get16(handle, PCI_CONF_COMM); cidp->vendor = pci_config_get16(handle, PCI_CONF_VENID); cidp->subven = pci_config_get16(handle, PCI_CONF_SUBVENID); --- 361,398 ---- */ cidp->device = pci_config_get16(handle, PCI_CONF_DEVID); if (DEVICE_5717_SERIES_CHIPSETS(bgep)) pci_config_put32(handle, PCI_CONF_BGE_MHCR, 0); mhcr = pci_config_get32(handle, PCI_CONF_BGE_MHCR); ! cidp->asic_rev = (mhcr & MHCR_CHIP_REV_MASK) >> MHCR_CHIP_REV_SHIFT; ! if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_PRODID) { ! uint32_t reg; ! switch (cidp->device) { ! case DEVICE_ID_5717: ! case DEVICE_ID_5718: ! case DEVICE_ID_5719: ! case DEVICE_ID_5720: ! reg = PCI_CONF_GEN2_PRODID_ASICREV; ! break; ! case DEVICE_ID_57781: ! case DEVICE_ID_57785: ! case DEVICE_ID_57761: ! case DEVICE_ID_57765: ! case DEVICE_ID_57791: ! case DEVICE_ID_57795: ! case DEVICE_ID_57762: ! case DEVICE_ID_57766: ! case DEVICE_ID_57782: ! case DEVICE_ID_57786: ! reg = PCI_CONF_GEN15_PRODID_ASICREV; ! break; ! default: ! reg = PCI_CONF_PRODID_ASICREV; ! break; ! } ! cidp->asic_rev = pci_config_get32(handle, reg); ! } cidp->businfo = pci_config_get32(handle, PCI_CONF_BGE_PCISTATE); cidp->command = pci_config_get16(handle, PCI_CONF_COMM); cidp->vendor = pci_config_get16(handle, PCI_CONF_VENID); cidp->subven = pci_config_get16(handle, PCI_CONF_SUBVENID);
*** 384,393 **** --- 411,459 ---- BGE_DEBUG(("bge_chip_cfg_init: subven 0x%x subdev 0x%x asic_rev 0x%x", cidp->subven, cidp->subdev, cidp->asic_rev)); BGE_DEBUG(("bge_chip_cfg_init: clsize %d latency %d command 0x%x", cidp->clsize, cidp->latency, cidp->command)); + cidp->chip_type = 0; + if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5717 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5719 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5720) + cidp->chip_type |= CHIP_TYPE_5717_PLUS; + + if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_57765 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_57766) + cidp->chip_type |= CHIP_TYPE_57765_CLASS; + + if (cidp->chip_type & CHIP_TYPE_57765_CLASS || + cidp->chip_type & CHIP_TYPE_5717_PLUS) + cidp->chip_type |= CHIP_TYPE_57765_PLUS; + + /* Intentionally exclude ASIC_REV_5906 */ + if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5755 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5787 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5784 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5761 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5785 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_57780 || + cidp->chip_type & CHIP_TYPE_57765_PLUS) + cidp->chip_type |= CHIP_TYPE_5755_PLUS; + + if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5780 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5714) + cidp->chip_type |= CHIP_TYPE_5780_CLASS; + + if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5750 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5752 || + MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5906 || + cidp->chip_type & CHIP_TYPE_5755_PLUS || + cidp->chip_type & CHIP_TYPE_5780_CLASS) + cidp->chip_type |= CHIP_TYPE_5750_PLUS; + + if (MHCR_CHIP_ASIC_REV(cidp->asic_rev) == MHCR_CHIP_ASIC_REV_5705 || + cidp->chip_type & CHIP_TYPE_5750_PLUS) + cidp->chip_type |= CHIP_TYPE_5705_PLUS; + /* * Step 2 (also step 6): disable and clear interrupts. * Steps 11-13: configure PIO endianness options, and enable * indirect register access. We'll also select any other * options controlled by the MHCR (e.g. tagged status, mask
*** 445,454 **** --- 511,521 ---- * see whether the host is truly up to date, and regenerate * its interrupt if not. */ mhcr = MHCR_ENABLE_INDIRECT_ACCESS | MHCR_ENABLE_TAGGED_STATUS_MODE | + MHCR_ENABLE_PCI_STATE_WRITE | MHCR_MASK_INTERRUPT_MODE | MHCR_CLEAR_INTERRUPT_INTA; if (bgep->intr_type == DDI_INTR_TYPE_FIXED) mhcr |= MHCR_MASK_PCI_INT_OUTPUT;
*** 1894,1903 **** --- 1961,1972 ---- case DEVICE_ID_5705M: case DEVICE_ID_5705C: case DEVICE_ID_5705_2: case DEVICE_ID_5717: case DEVICE_ID_5718: + case DEVICE_ID_5719: + case DEVICE_ID_5720: case DEVICE_ID_5724: case DEVICE_ID_57760: case DEVICE_ID_57780: case DEVICE_ID_57788: case DEVICE_ID_57790:
*** 2027,2044 **** --- 2096,2134 ---- if (cidp->tx_rings == 0 || cidp->tx_rings > BGE_SEND_RINGS_MAX) cidp->tx_rings = BGE_SEND_RINGS_DEFAULT; cidp->msi_enabled = B_FALSE; + if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) > + MHCR_CHIP_ASIC_REV_PRODID || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5906 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5700 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5701 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5750) + /* + * Just a plain reset; the "check" code breaks these chips + */ + cidp->flags |= CHIP_FLAG_NO_CHECK_RESET; + switch (cidp->device) { case DEVICE_ID_5717: case DEVICE_ID_5718: + case DEVICE_ID_5719: + case DEVICE_ID_5720: case DEVICE_ID_5724: if (cidp->device == DEVICE_ID_5717) cidp->chip_label = 5717; else if (cidp->device == DEVICE_ID_5718) cidp->chip_label = 5718; + else if (cidp->device == DEVICE_ID_5719) + cidp->chip_label = 5719; + else if (cidp->device == DEVICE_ID_5720) + cidp->chip_label = 5720; else cidp->chip_label = 5724; cidp->msi_enabled = bge_enable_msi; #ifdef __sparc cidp->mask_pci_int = LE_32(MHCR_MASK_PCI_INT_OUTPUT);
*** 2048,2058 **** cidp->mbuf_lo_water_rdma = RDMA_MBUF_LOWAT_5705; cidp->mbuf_lo_water_rmac = MAC_RX_MBUF_LOWAT_5717; cidp->mbuf_hi_water = MBUF_HIWAT_5717; cidp->mbuf_base = bge_mbuf_pool_base_5705; cidp->mbuf_length = bge_mbuf_pool_len_5705; ! cidp->recv_slots = BGE_RECV_SLOTS_5705; cidp->bge_mlcr_default = MLCR_DEFAULT_5717; cidp->rx_rings = BGE_RECV_RINGS_MAX_5705; cidp->tx_rings = BGE_SEND_RINGS_MAX_5705; cidp->flags |= CHIP_FLAG_NO_JUMBO; cidp->statistic_type = BGE_STAT_REG; --- 2138,2148 ---- cidp->mbuf_lo_water_rdma = RDMA_MBUF_LOWAT_5705; cidp->mbuf_lo_water_rmac = MAC_RX_MBUF_LOWAT_5717; cidp->mbuf_hi_water = MBUF_HIWAT_5717; cidp->mbuf_base = bge_mbuf_pool_base_5705; cidp->mbuf_length = bge_mbuf_pool_len_5705; ! cidp->recv_slots = BGE_RECV_SLOTS_5717; cidp->bge_mlcr_default = MLCR_DEFAULT_5717; cidp->rx_rings = BGE_RECV_RINGS_MAX_5705; cidp->tx_rings = BGE_SEND_RINGS_MAX_5705; cidp->flags |= CHIP_FLAG_NO_JUMBO; cidp->statistic_type = BGE_STAT_REG;
*** 3429,3443 **** mhcr |= MHCR_MASK_PCI_INT_OUTPUT; if (DEVICE_5717_SERIES_CHIPSETS(bgep)) pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, 0); pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, mhcr); bge_reg_put32(bgep, MEMORY_ARBITER_MODE_REG, bge_reg_get32(bgep, MEMORY_ARBITER_MODE_REG) | MEMORY_ARBITER_ENABLE); - #endif if (asf_mode == ASF_MODE_INIT) { bge_asf_pre_reset_operations(bgep, BGE_INIT_RESET); } else if (asf_mode == ASF_MODE_SHUTDOWN) { bge_asf_pre_reset_operations(bgep, BGE_SHUTDOWN_RESET); } --- 3519,3539 ---- mhcr |= MHCR_MASK_PCI_INT_OUTPUT; if (DEVICE_5717_SERIES_CHIPSETS(bgep)) pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, 0); + #else + mhcr = MHCR_ENABLE_INDIRECT_ACCESS | + MHCR_ENABLE_TAGGED_STATUS_MODE | + MHCR_MASK_INTERRUPT_MODE | + MHCR_MASK_PCI_INT_OUTPUT | + MHCR_CLEAR_INTERRUPT_INTA; + #endif pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, mhcr); bge_reg_put32(bgep, MEMORY_ARBITER_MODE_REG, bge_reg_get32(bgep, MEMORY_ARBITER_MODE_REG) | MEMORY_ARBITER_ENABLE); if (asf_mode == ASF_MODE_INIT) { bge_asf_pre_reset_operations(bgep, BGE_INIT_RESET); } else if (asf_mode == ASF_MODE_SHUTDOWN) { bge_asf_pre_reset_operations(bgep, BGE_SHUTDOWN_RESET); }
*** 3457,3466 **** --- 3553,3563 ---- if (!bge_chip_enable_engine(bgep, MEMORY_ARBITER_MODE_REG, 0)) retval = DDI_FAILURE; mhcr = MHCR_ENABLE_INDIRECT_ACCESS | MHCR_ENABLE_TAGGED_STATUS_MODE | + MHCR_ENABLE_PCI_STATE_WRITE | MHCR_MASK_INTERRUPT_MODE | MHCR_CLEAR_INTERRUPT_INTA; if (bgep->intr_type == DDI_INTR_TYPE_FIXED) mhcr |= MHCR_MASK_PCI_INT_OUTPUT;
*** 3473,3482 **** --- 3570,3585 ---- pci_config_put32(bgep->cfg_handle, PCI_CONF_BGE_MHCR, mhcr); #ifdef BGE_IPMI_ASF if (bgep->asf_enabled) bgep->asf_wordswapped = B_FALSE; #endif + + if (DEVICE_IS_5755_PLUS(bgep) || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5752) + bge_reg_put32(bgep, GRC_FASTBOOT_PC, 0); + /* * NVRAM Corruption Workaround */ for (tries = 0; tries < MAX_TRY_NVMEM_ACQUIRE; tries++) if (bge_nvmem_acquire(bgep) != EAGAIN)
*** 3532,3541 **** --- 3635,3649 ---- modeflags = MODE_WORD_SWAP_FRAME | MODE_BYTE_SWAP_FRAME | MODE_WORD_SWAP_NONFRAME | MODE_BYTE_SWAP_NONFRAME; #else modeflags = MODE_WORD_SWAP_FRAME | MODE_BYTE_SWAP_FRAME; #endif /* _BIG_ENDIAN */ + if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5720) + modeflags |= + MODE_BYTE_SWAP_B2HRX_DATA | MODE_WORD_SWAP_B2HRX_DATA | + MODE_B2HRX_ENABLE | MODE_HTX2B_ENABLE; #ifdef BGE_IPMI_ASF if (bgep->asf_enabled) modeflags |= MODE_HOST_STACK_UP; #endif bge_reg_put32(bgep, MODE_CONTROL_REG, modeflags);
*** 3616,3625 **** --- 3724,3740 ---- /* * Step 20: clear the Ethernet MAC mode register */ bge_reg_put32(bgep, ETHERNET_MAC_MODE_REG, 0); + if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5720) { + uint32_t regval = bge_reg_get32(bgep, CPMU_CLCK_ORIDE_REG); + bge_reg_put32(bgep, CPMU_CLCK_ORIDE_REG, + regval & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); + } + /* * Step 21: restore cache-line-size, latency timer, and * subsystem ID registers to their original values (not * those read into the local structure <chipid>, 'cos * that was after they were cleared by the RESET).
*** 3842,3853 **** bge_reg_put32(bgep, LOWAT_MAX_RECV_FRAMES_REG, bge_lowat_recv_frames); /* * Steps 34-36: enable buffer manager & internal h/w queues */ ! if (!bge_chip_enable_engine(bgep, BUFFER_MANAGER_MODE_REG, ! STATE_MACHINE_ATTN_ENABLE_BIT)) retval = DDI_FAILURE; if (!bge_chip_enable_engine(bgep, FTQ_RESET_REG, 0)) retval = DDI_FAILURE; /* --- 3957,3977 ---- bge_reg_put32(bgep, LOWAT_MAX_RECV_FRAMES_REG, bge_lowat_recv_frames); /* * Steps 34-36: enable buffer manager & internal h/w queues */ ! ! regval = STATE_MACHINE_ATTN_ENABLE_BIT; ! if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == ! MHCR_CHIP_ASIC_REV_5719) ! regval |= BUFF_MGR_NO_TX_UNDERRUN; ! if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == ! MHCR_CHIP_ASIC_REV_5717 || ! bgep->chipid.asic_rev == MHCR_CHIP_REV_5719_A0 || ! bgep->chipid.asic_rev == MHCR_CHIP_REV_5720_A0) ! regval |= BUFF_MGR_MBUF_LOW_ATTN_ENABLE; ! if (!bge_chip_enable_engine(bgep, BUFFER_MANAGER_MODE_REG, regval)) retval = DDI_FAILURE; if (!bge_chip_enable_engine(bgep, FTQ_RESET_REG, 0)) retval = DDI_FAILURE; /*
*** 3937,3947 **** bge_reg_put32(bgep, MAC_RX_MTU_SIZE_REG, mtu); /* * Step 50: configure the IPG et al */ ! bge_reg_put32(bgep, MAC_TX_LENGTHS_REG, MAC_TX_LENGTHS_DEFAULT); /* * Step 51: configure the default Rx Return Ring */ bge_reg_put32(bgep, RCV_RULES_CONFIG_REG, RCV_RULES_CONFIG_DEFAULT); --- 4061,4077 ---- bge_reg_put32(bgep, MAC_RX_MTU_SIZE_REG, mtu); /* * Step 50: configure the IPG et al */ ! regval = MAC_TX_LENGTHS_DEFAULT; ! if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) ! == MHCR_CHIP_ASIC_REV_5720) ! regval |= bge_reg_get32(bgep, MAC_TX_LENGTHS_REG) & ! (MAC_TX_LENGTHS_JMB_FRM_LEN_MSK | ! MAC_TX_LENGTHS_CNT_DWN_VAL_MSK); ! bge_reg_put32(bgep, MAC_TX_LENGTHS_REG, regval); /* * Step 51: configure the default Rx Return Ring */ bge_reg_put32(bgep, RCV_RULES_CONFIG_REG, RCV_RULES_CONFIG_DEFAULT);
*** 4092,4115 **** if (DEVICE_5704_SERIES_CHIPSETS(bgep)) if (!bge_chip_enable_engine(bgep, DMA_COMPLETION_MODE_REG, 0)) retval = DDI_FAILURE; dma_wrprio = (bge_dma_wrprio << DMA_PRIORITY_SHIFT) | ALL_DMA_ATTN_BITS; ! if ((MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == ! MHCR_CHIP_ASIC_REV_5755) || ! DEVICE_5723_SERIES_CHIPSETS(bgep) || ! DEVICE_5906_SERIES_CHIPSETS(bgep)) { dma_wrprio |= DMA_STATUS_TAG_FIX_CQ12384; - } if (!bge_chip_enable_engine(bgep, WRITE_DMA_MODE_REG, dma_wrprio)) retval = DDI_FAILURE; if (DEVICE_5723_SERIES_CHIPSETS(bgep) || DEVICE_5717_SERIES_CHIPSETS(bgep)) bge_dma_rdprio = 0; if (!bge_chip_enable_engine(bgep, READ_DMA_MODE_REG, ! (bge_dma_rdprio << DMA_PRIORITY_SHIFT) | ALL_DMA_ATTN_BITS)) retval = DDI_FAILURE; if (!bge_chip_enable_engine(bgep, RCV_DATA_COMPLETION_MODE_REG, STATE_MACHINE_ATTN_ENABLE_BIT)) retval = DDI_FAILURE; if (DEVICE_5704_SERIES_CHIPSETS(bgep)) --- 4222,4270 ---- if (DEVICE_5704_SERIES_CHIPSETS(bgep)) if (!bge_chip_enable_engine(bgep, DMA_COMPLETION_MODE_REG, 0)) retval = DDI_FAILURE; dma_wrprio = (bge_dma_wrprio << DMA_PRIORITY_SHIFT) | ALL_DMA_ATTN_BITS; ! if (DEVICE_IS_5755_PLUS(bgep)) dma_wrprio |= DMA_STATUS_TAG_FIX_CQ12384; if (!bge_chip_enable_engine(bgep, WRITE_DMA_MODE_REG, dma_wrprio)) retval = DDI_FAILURE; + if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5761 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5784 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5785 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_57780 || + DEVICE_IS_57765_PLUS(bgep)) { + regval = bge_reg_get32(bgep, READ_DMA_RESERVED_CONTROL_REG); + if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5719 || + MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5720) { + regval &= ~(RDMA_RSRVCTRL_TXMRGN_MASK | + RDMA_RSRVCTRL_FIFO_LWM_MASK | + RDMA_RSRVCTRL_FIFO_HWM_MASK); + regval |= RDMA_RSRVCTRL_TXMRGN_320B | + RDMA_RSRVCTRL_FIFO_LWM_1_5K | + RDMA_RSRVCTRL_FIFO_HWM_1_5K; + } + bge_reg_put32(bgep, READ_DMA_RESERVED_CONTROL_REG, + regval | RDMA_RSRVCTRL_FIFO_OFLW_FIX); + } if (DEVICE_5723_SERIES_CHIPSETS(bgep) || DEVICE_5717_SERIES_CHIPSETS(bgep)) bge_dma_rdprio = 0; + regval = bge_dma_rdprio << DMA_PRIORITY_SHIFT; + if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == + MHCR_CHIP_ASIC_REV_5720) + regval |= bge_reg_get32(bgep, READ_DMA_MODE_REG) & + DMA_H2BNC_VLAN_DET; if (!bge_chip_enable_engine(bgep, READ_DMA_MODE_REG, ! regval | ALL_DMA_ATTN_BITS)) retval = DDI_FAILURE; if (!bge_chip_enable_engine(bgep, RCV_DATA_COMPLETION_MODE_REG, STATE_MACHINE_ATTN_ENABLE_BIT)) retval = DDI_FAILURE; if (DEVICE_5704_SERIES_CHIPSETS(bgep))
*** 4138,4148 **** /* * Step 88: download firmware -- doesn't apply * Steps 89-90: enable Transmit & Receive MAC Engines */ ! if (!bge_chip_enable_engine(bgep, TRANSMIT_MAC_MODE_REG, 0)) retval = DDI_FAILURE; #ifdef BGE_IPMI_ASF if (!bgep->asf_enabled) { if (!bge_chip_enable_engine(bgep, RECEIVE_MAC_MODE_REG, RECEIVE_MODE_KEEP_VLAN_TAG)) --- 4293,4319 ---- /* * Step 88: download firmware -- doesn't apply * Steps 89-90: enable Transmit & Receive MAC Engines */ ! if (DEVICE_IS_5755_PLUS(bgep) || ! MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == ! MHCR_CHIP_ASIC_REV_5906) { ! regval = bge_reg_get32(bgep, TRANSMIT_MAC_MODE_REG); ! regval |= TRANSMIT_MODE_MBUF_LOCKUP_FIX; ! } else { ! regval = 0; ! } ! if (MHCR_CHIP_ASIC_REV(bgep->chipid.asic_rev) == ! MHCR_CHIP_ASIC_REV_5720) { ! regval &= ~(TRANSMIT_MODE_HTX2B_JMB_FRM_LEN | ! TRANSMIT_MODE_HTX2B_CNT_DN_MODE); ! regval |= bge_reg_get32(bgep, TRANSMIT_MAC_MODE_REG) & ! (TRANSMIT_MODE_HTX2B_JMB_FRM_LEN | ! TRANSMIT_MODE_HTX2B_CNT_DN_MODE); ! } ! if (!bge_chip_enable_engine(bgep, TRANSMIT_MAC_MODE_REG, regval)) retval = DDI_FAILURE; #ifdef BGE_IPMI_ASF if (!bgep->asf_enabled) { if (!bge_chip_enable_engine(bgep, RECEIVE_MAC_MODE_REG, RECEIVE_MODE_KEEP_VLAN_TAG))
*** 4241,4251 **** * Step 97: enable PCI interrupts!!! */ if (bgep->intr_type == DDI_INTR_TYPE_FIXED) bge_cfg_clr32(bgep, PCI_CONF_BGE_MHCR, bgep->chipid.mask_pci_int); - /* * All done! */ bgep->bge_chip_state = BGE_CHIP_RUNNING; return (retval); --- 4412,4421 ----