diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/pkgdefs/SUNWbge/postinstall | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge.h (renamed from usr/src/uts/common/sys/bge2.h) | 0 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_atomic.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_chip2.c | 34 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_hw.h (renamed from usr/src/uts/common/sys/bge_hw2.h) | 5 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_impl.h (renamed from usr/src/uts/common/sys/bge_impl2.h) | 15 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_kstats.c | 13 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_log.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_main2.c | 44 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_mii.c | 40 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_ndd.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_recv2.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/bge/bge_send.c | 2 |
13 files changed, 92 insertions, 71 deletions
diff --git a/usr/src/pkgdefs/SUNWbge/postinstall b/usr/src/pkgdefs/SUNWbge/postinstall index 4dee2fbf50..8c544aeff2 100644 --- a/usr/src/pkgdefs/SUNWbge/postinstall +++ b/usr/src/pkgdefs/SUNWbge/postinstall @@ -136,6 +136,8 @@ then "pci108e,1648" "pci108e,16a7" "pci108e,16a8" + "pci14e4,1600" + "pci14e4,1601" "pci14e4,1644" "pci14e4,1645" "pci14e4,1647" diff --git a/usr/src/uts/common/sys/bge2.h b/usr/src/uts/common/io/bge/bge.h index 99072e1e98..99072e1e98 100644 --- a/usr/src/uts/common/sys/bge2.h +++ b/usr/src/uts/common/io/bge/bge.h diff --git a/usr/src/uts/common/io/bge/bge_atomic.c b/usr/src/uts/common/io/bge/bge_atomic.c index 4c1af76bbb..bd3393fed8 100644 --- a/usr/src/uts/common/io/bge/bge_atomic.c +++ b/usr/src/uts/common/io/bge/bge_atomic.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" /* * Atomically decrement a counter, but only if it will remain diff --git a/usr/src/uts/common/io/bge/bge_chip2.c b/usr/src/uts/common/io/bge/bge_chip2.c index 3fc7923493..1cb2129912 100644 --- a/usr/src/uts/common/io/bge/bge_chip2.c +++ b/usr/src/uts/common/io/bge/bge_chip2.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" #define PIO_ADDR(bgep, offset) ((void *)((caddr_t)(bgep)->io_regs+(offset))) @@ -1830,6 +1830,8 @@ bge_nvmem_id(bge_t *bgep) case DEVICE_ID_5789: case DEVICE_ID_5751: case DEVICE_ID_5751M: + case DEVICE_ID_5752: + case DEVICE_ID_5752M: case DEVICE_ID_5721: case DEVICE_ID_5714C: case DEVICE_ID_5714S: @@ -2130,6 +2132,24 @@ bge_chip_id_init(bge_t *bgep) dev_ok = B_TRUE; break; + case DEVICE_ID_5752: + case DEVICE_ID_5752M: + cidp->chip_label = 5752; + cidp->mbuf_lo_water_rdma = RDMA_MBUF_LOWAT_5705; + cidp->mbuf_lo_water_rmac = MAC_RX_MBUF_LOWAT_5705; + cidp->mbuf_hi_water = MBUF_HIWAT_5705; + cidp->mbuf_base = bge_mbuf_pool_base_5721; + cidp->mbuf_length = bge_mbuf_pool_len_5721; + cidp->recv_slots = BGE_RECV_SLOTS_5721; + cidp->bge_dma_rwctrl = bge_dma_rwctrl_5721; + cidp->rx_rings = BGE_RECV_RINGS_MAX_5705; + cidp->tx_rings = BGE_SEND_RINGS_MAX_5705; + cidp->pci_type = BGE_PCI_E; + cidp->statistic_type = BGE_STAT_REG; + cidp->flags |= CHIP_FLAG_NO_JUMBO; + dev_ok = B_TRUE; + break; + case DEVICE_ID_5789: cidp->chip_label = 5789; cidp->mbuf_base = bge_mbuf_pool_base_5721; @@ -2432,6 +2452,7 @@ bge_chip_reset_engine(bge_t *bgep, bge_regno_t regno) /* Set PCIE max payload size and clear error status. */ if ((bgep->chipid.chip_label == 5721) || (bgep->chipid.chip_label == 5751) || + (bgep->chipid.chip_label == 5752) || (bgep->chipid.chip_label == 5789)) { pci_config_put16(bgep->cfg_handle, PCI_CONF_DEV_CTRL, READ_REQ_SIZE_MAX); @@ -3022,6 +3043,16 @@ bge_chip_reset(bge_t *bgep, boolean_t enable_dma) if (bgep->asf_enabled) bgep->asf_wordswapped = B_FALSE; #endif + /* + * NVRAM Corruption Workaround + */ + for (i = 0; i < 600; i++) + if (bge_nvmem_acquire(bgep) == 0) + break; + if (i >= 600) + BGE_DEBUG(("%s: fail to acquire nvram lock", + bgep->ifname)); + #ifdef BGE_IPMI_ASF if (!bgep->asf_enabled) { #endif @@ -3041,6 +3072,7 @@ bge_chip_reset(bge_t *bgep, boolean_t enable_dma) */ if ((bgep->chipid.chip_label == 5721) || (bgep->chipid.chip_label == 5751) || + (bgep->chipid.chip_label == 5752) || (bgep->chipid.chip_label == 5789)) bge_reg_set32(bgep, TLP_CONTROL_REG, TLP_DATA_FIFO_PROTECT); diff --git a/usr/src/uts/common/sys/bge_hw2.h b/usr/src/uts/common/io/bge/bge_hw.h index 2de73fc811..489788c45f 100644 --- a/usr/src/uts/common/sys/bge_hw2.h +++ b/usr/src/uts/common/io/bge/bge_hw.h @@ -74,6 +74,8 @@ extern "C" { #define DEVICE_ID_5789 0x169d #define DEVICE_ID_5751 0x1677 #define DEVICE_ID_5751M 0x167d +#define DEVICE_ID_5752 0x1600 +#define DEVICE_ID_5752M 0x1601 #define DEVICE_ID_5721 0x1659 #define DEVICE_ID_5714C 0x1668 #define DEVICE_ID_5714S 0x1669 @@ -150,6 +152,8 @@ extern "C" { ((bgep->chipid.device == DEVICE_ID_5721) ||\ (bgep->chipid.device == DEVICE_ID_5751) ||\ (bgep->chipid.device == DEVICE_ID_5751M) ||\ + (bgep->chipid.device == DEVICE_ID_5752) ||\ + (bgep->chipid.device == DEVICE_ID_5752M) ||\ (bgep->chipid.device == DEVICE_ID_5789)) #define DEVICE_5714_SERIES_CHIPSETS(bgep) \ @@ -243,6 +247,7 @@ extern "C" { #define MHCR_CHIP_ASIC_REV_5705 (0x3 << 28) #define MHCR_CHIP_ASIC_REV_5721_5751 (0x4 << 28) #define MHCR_CHIP_ASIC_REV_5714 (0x5 << 28) +#define MHCR_CHIP_ASIC_REV_5752 (0x6 << 28) #define MHCR_CHIP_ASIC_REV_5715 ((uint32_t)0x9 << 28) diff --git a/usr/src/uts/common/sys/bge_impl2.h b/usr/src/uts/common/io/bge/bge_impl.h index de89bdbc6b..eb21bdd4bf 100644 --- a/usr/src/uts/common/sys/bge_impl2.h +++ b/usr/src/uts/common/io/bge/bge_impl.h @@ -99,14 +99,14 @@ typedef uchar_t ether_addr_t[ETHERADDRL]; */ extern int secpolicy_net_config(const cred_t *, boolean_t); extern int drv_priv(cred_t *); -#pragma weak secpolicy_net_config -#pragma weak drv_priv +#pragma weak secpolicy_net_config +#pragma weak drv_priv #include <sys/netlb.h> /* originally from cassini */ #include <sys/miiregs.h> /* by fjlite out of intel */ -#include <sys/bge2.h> -#include <sys/bge_hw2.h> +#include "bge.h" +#include "bge_hw.h" /* * Compile-time feature switches ... @@ -1280,9 +1280,10 @@ uint32_t bge_atomic_shl32(uint32_t *sp, uint_t count); #define BGE_SUSPEND_RESET 2 /* For asf_status */ -#define ASF_STAT_NONE 0 -#define ASF_STAT_STOP 1 -#define ASF_STAT_RUN 2 +#define ASF_STAT_NONE 0 +#define ASF_STAT_STOP 1 +#define ASF_STAT_RUN 2 +#define ASF_STAT_RUN_INIT 3 /* attached but don't plumb */ /* ASF modes for bge_reset() and bge_chip_reset() */ #define ASF_MODE_NONE 0 /* don't launch asf */ diff --git a/usr/src/uts/common/io/bge/bge_kstats.c b/usr/src/uts/common/io/bge/bge_kstats.c index da910a9061..25fbce0cf1 100644 --- a/usr/src/uts/common/io/bge/bge_kstats.c +++ b/usr/src/uts/common/io/bge/bge_kstats.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" #define BGE_DBG BGE_DBG_STATS /* debug flag for this code */ @@ -895,9 +895,7 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) bge_t *bgep = arg; bge_statistics_t *bstp; - mutex_enter(bgep->genlock); if (bgep->bge_chip_state == BGE_CHIP_FAULT) { - mutex_exit(bgep->genlock); return (EINVAL); } @@ -906,7 +904,6 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) * bge optical interface. */ if ((bgep->chipid.flags & CHIP_FLAG_SERDES) && ETHER_STAT_ISMII(stat)) { - mutex_exit(bgep->genlock); return (ENOTSUP); } @@ -967,10 +964,12 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) bge_reg_get32(bgep, STAT_ETHER_JABBERS_REG); bgep->stat_val.etherStatsUndersizePkts += bge_reg_get32(bgep, STAT_ETHER_UNDERSIZE_REG); + mutex_enter(bgep->genlock); if (bge_check_acc_handle(bgep, bgep->io_handle) != DDI_FM_OK) { ddi_fm_service_impact(bgep->devinfo, DDI_SERVICE_UNAFFECTED); } + mutex_exit(bgep->genlock); } switch (stat) { @@ -1162,6 +1161,7 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) break; case ETHER_STAT_XCVR_ID: + mutex_enter(bgep->genlock); *val = bge_mii_get16(bgep, MII_PHYIDH); *val <<= 16; *val |= bge_mii_get16(bgep, MII_PHYIDL); @@ -1169,6 +1169,7 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) ddi_fm_service_impact(bgep->devinfo, DDI_SERVICE_UNAFFECTED); } + mutex_exit(bgep->genlock); break; case ETHER_STAT_XCVR_INUSE: @@ -1287,7 +1288,7 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) *val = bgep->param_adv_asym_pause && bgep->param_lp_asym_pause && bgep->param_adv_pause != bgep->param_lp_pause; - break; + break; case ETHER_STAT_LINK_PAUSE: *val = bgep->param_link_rx_pause; @@ -1302,10 +1303,8 @@ bge_m_stat(void *arg, uint_t stat, uint64_t *val) break; default: - mutex_exit(bgep->genlock); return (ENOTSUP); } - mutex_exit(bgep->genlock); return (0); } diff --git a/usr/src/uts/common/io/bge/bge_log.c b/usr/src/uts/common/io/bge/bge_log.c index a295e5cda8..d1863526c7 100644 --- a/usr/src/uts/common/io/bge/bge_log.c +++ b/usr/src/uts/common/io/bge/bge_log.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" /* diff --git a/usr/src/uts/common/io/bge/bge_main2.c b/usr/src/uts/common/io/bge/bge_main2.c index ebddbd3204..901a908d85 100644 --- a/usr/src/uts/common/io/bge/bge_main2.c +++ b/usr/src/uts/common/io/bge/bge_main2.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" #include <sys/sdt.h> /* @@ -1128,6 +1128,8 @@ bge_m_ioctl(void *arg, queue_t *wq, mblk_t *mp) case BGE_MII_WRITE: case BGE_SEE_READ: case BGE_SEE_WRITE: + case BGE_FLASH_READ: + case BGE_FLASH_WRITE: case BGE_DIAG: case BGE_PEEK: case BGE_POKE: @@ -1184,6 +1186,8 @@ bge_m_ioctl(void *arg, queue_t *wq, mblk_t *mp) case BGE_MII_WRITE: case BGE_SEE_READ: case BGE_SEE_WRITE: + case BGE_FLASH_READ: + case BGE_FLASH_WRITE: case BGE_DIAG: case BGE_PEEK: case BGE_POKE: @@ -1222,7 +1226,7 @@ bge_m_ioctl(void *arg, queue_t *wq, mblk_t *mp) status = IOC_INVAL; } #ifdef BGE_IPMI_ASF - if (bge_chip_sync(bgep, B_FALSE) == DDI_FAILURE) { + if (bge_chip_sync(bgep, B_TRUE) == DDI_FAILURE) { #else if (bge_chip_sync(bgep) == DDI_FAILURE) { #endif @@ -2501,16 +2505,16 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd) goto attach_fail; } - bge_log(bgep, "ddi_intr_get_supported_types() returned: %x", - intr_types); + BGE_DEBUG(("%s: ddi_intr_get_supported_types() returned: %x", + bgep->ifname, intr_types)); if ((intr_types & DDI_INTR_TYPE_MSI) && bgep->chipid.msi_enabled) { if (bge_add_intrs(bgep, DDI_INTR_TYPE_MSI) != DDI_SUCCESS) { bge_error(bgep, "MSI registration failed, " "trying FIXED interrupt type\n"); } else { - bge_log(bgep, "Using MSI interrupt type\n"); - + BGE_DEBUG(("%s: Using MSI interrupt type", + bgep->ifname)); bgep->intr_type = DDI_INTR_TYPE_MSI; bgep->progress |= PROGRESS_HWINT; } @@ -2524,7 +2528,7 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd) goto attach_fail; } - bge_log(bgep, "Using FIXED interrupt type\n"); + BGE_DEBUG(("%s: Using FIXED interrupt type", bgep->ifname)); bgep->intr_type = DDI_INTR_TYPE_FIXED; bgep->progress |= PROGRESS_HWINT; @@ -2583,6 +2587,12 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd) goto attach_fail; } +#ifdef BGE_IPMI_ASF + if (bgep->asf_enabled) { + bgep->asf_status = ASF_STAT_RUN_INIT; + } +#endif + bzero(bgep->mcast_hash, sizeof (bgep->mcast_hash)); bzero(bgep->mcast_refs, sizeof (bgep->mcast_refs)); bgep->promisc = B_FALSE; @@ -2669,7 +2679,7 @@ bge_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd) attach_fail: #ifdef BGE_IPMI_ASF - bge_unattach(bgep, ASF_MODE_NONE); + bge_unattach(bgep, ASF_MODE_SHUTDOWN); #else bge_unattach(bgep); #endif @@ -2739,10 +2749,13 @@ bge_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd) #ifdef BGE_IPMI_ASF mutex_enter(bgep->genlock); - if (bgep->asf_enabled && (bgep->asf_status == ASF_STAT_RUN)) { + if (bgep->asf_enabled && ((bgep->asf_status == ASF_STAT_RUN) || + (bgep->asf_status == ASF_STAT_RUN_INIT))) { bge_asf_update_status(bgep); - bge_asf_stop_timer(bgep); + if (bgep->asf_status == ASF_STAT_RUN) { + bge_asf_stop_timer(bgep); + } bgep->asf_status = ASF_STAT_STOP; bge_asf_pre_reset_operations(bgep, BGE_SHUTDOWN_RESET); @@ -2854,7 +2867,7 @@ bge_add_intrs(bge_t *bgep, int intr_type) int avail, actual, intr_size, count = 0; int i, flag, ret; - bge_log(bgep, "bge_add_intrs: interrupt type 0x%x\n", intr_type); + BGE_DEBUG(("bge_add_intrs($%p, 0x%x)", (void *)bgep, intr_type)); /* Get number of interrupts */ ret = ddi_intr_get_nintrs(dip, intr_type, &count); @@ -2875,8 +2888,8 @@ bge_add_intrs(bge_t *bgep, int intr_type) } if (avail < count) { - bge_log(bgep, "nitrs() returned %d, navail returned %d\n", - count, avail); + BGE_DEBUG(("%s: nintrs() returned %d, navail returned %d", + bgep->ifname, count, avail)); } /* @@ -2906,7 +2919,8 @@ bge_add_intrs(bge_t *bgep, int intr_type) } if (actual < count) { - bge_log(bgep, "Requested: %d, Received: %d\n", count, actual); + BGE_DEBUG(("%s: Requested: %d, Received: %d", + bgep->ifname, count, actual)); } bgep->intr_cnt = actual; @@ -2970,7 +2984,7 @@ bge_rem_intrs(bge_t *bgep) { int i; - bge_log(bgep, "bge_rem_intrs\n"); + BGE_DEBUG(("bge_rem_intrs($%p)", (void *)bgep)); /* Call ddi_intr_remove_handler() */ for (i = 0; i < bgep->intr_cnt; i++) { diff --git a/usr/src/uts/common/io/bge/bge_mii.c b/usr/src/uts/common/io/bge/bge_mii.c index 0e392fca1f..f53589ef1f 100644 --- a/usr/src/uts/common/io/bge/bge_mii.c +++ b/usr/src/uts/common/io/bge/bge_mii.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" /* * Bit test macros, returning boolean_t values @@ -510,6 +510,7 @@ bge_restart_copper(bge_t *bgep, boolean_t powerdown) case MHCR_CHIP_ASIC_REV_5704: case MHCR_CHIP_ASIC_REV_5705: case MHCR_CHIP_ASIC_REV_5721_5751: + case MHCR_CHIP_ASIC_REV_5752: case MHCR_CHIP_ASIC_REV_5714: case MHCR_CHIP_ASIC_REV_5715: reset_ok = bge_phy_reset_and_check(bgep); @@ -1488,14 +1489,9 @@ bge_phys_update(bge_t *bgep) * Read the link status and determine whether anything's changed ... * * This routine should be called whenever the chip flags a change - * in the hardware link state, and repeatedly for several seconds - * afterwards, until we're sure the state has stabilised (sometimes - * it goes up and down several times during autonegotiation before - * settling on the proper configuration). This routine applies - * timing-based heuristics to determine when the state is stable. + * in the hardware link state. * * This routine returns B_FALSE if the link state has not changed, - * or if it has changed, but hasn't settled for long enough yet. It * returns B_TRUE when the change to the new state should be accepted. * In such a case, the param_* variables give the new hardware state, * which the caller should use to update link_state etc. @@ -1507,44 +1503,16 @@ bge_phys_check(bge_t *bgep) { int32_t orig_state; boolean_t recheck; - boolean_t linkup; - hrtime_t deltat; - hrtime_t now; BGE_TRACE(("bge_phys_check($%p)", (void *)bgep)); ASSERT(mutex_owned(bgep->genlock)); - linkup = bgep->param_link_up; orig_state = bgep->link_state; recheck = orig_state == LINK_STATE_UNKNOWN; recheck = (*bgep->physops->phys_check)(bgep, recheck); if (!recheck) return (B_FALSE); - /* - * At this point, the check_*_link() function above has detected - * a change and updated the param_* variables to show what the - * latest hardware state seems to be -- but it might still be - * changing. - * - * The link_state must now be UNKNOWN, but if it was previously - * UP, we want to recognise this immediately, whereas in any other - * case (e.g. DOWN->UP) we don't accept it until a few seconds have - * elapsed, to give the hardware time to settle. - */ - now = gethrtime(); - deltat = now - bgep->phys_event_time; - - BGE_DEBUG(("bge_phys_check: link was %d/%s now %d/%s", - orig_state, UPORDOWN(linkup), - bgep->link_state, UPORDOWN(bgep->param_link_up))); - BGE_DEBUG(("bge_phys_check: update %lld change %lld " - "now %lld delta %lld", - bgep->phys_write_time, bgep->phys_event_time, now, deltat)); - - if (orig_state == LINK_STATE_UP) - return (B_TRUE); - else - return (deltat > bgep->phys_delta_time); + return (B_TRUE); } diff --git a/usr/src/uts/common/io/bge/bge_ndd.c b/usr/src/uts/common/io/bge/bge_ndd.c index e5636c0dff..4aa07abef4 100644 --- a/usr/src/uts/common/io/bge/bge_ndd.c +++ b/usr/src/uts/common/io/bge/bge_ndd.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" #define BGE_DBG BGE_DBG_NDD /* debug flag for this code */ diff --git a/usr/src/uts/common/io/bge/bge_recv2.c b/usr/src/uts/common/io/bge/bge_recv2.c index 0aa7074c9f..8126e05b9a 100644 --- a/usr/src/uts/common/io/bge/bge_recv2.c +++ b/usr/src/uts/common/io/bge/bge_recv2.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" #define U32TOPTR(x) ((void *)(uintptr_t)(uint32_t)(x)) #define PTRTOU32(x) ((uint32_t)(uintptr_t)(void *)(x)) diff --git a/usr/src/uts/common/io/bge/bge_send.c b/usr/src/uts/common/io/bge/bge_send.c index f44172956d..d872b813c4 100644 --- a/usr/src/uts/common/io/bge/bge_send.c +++ b/usr/src/uts/common/io/bge/bge_send.c @@ -26,7 +26,7 @@ #pragma ident "%Z%%M% %I% %E% SMI" -#include "sys/bge_impl2.h" +#include "bge_impl.h" /* |