Lines Matching refs:ppd
52 static void sendctrl_7220_mod(struct qib_pportdata *ppd, u32 op);
751 static void qib_disarm_7220_senderrbufs(struct qib_pportdata *ppd)
754 struct qib_devdata *dd = ppd->dd;
779 static void qib_7220_sdma_sendctrl(struct qib_pportdata *ppd, unsigned op)
781 struct qib_devdata *dd = ppd->dd;
811 static void qib_decode_7220_sdma_errs(struct qib_pportdata *ppd,
857 static void qib_7220_sdma_hw_clean_up(struct qib_pportdata *ppd)
860 sendctrl_7220_mod(ppd, QIB_SENDCTRL_DISARM_ALL | QIB_SENDCTRL_FLUSH |
862 ppd->dd->upd_pio_shadow = 1; /* update our idea of what's busy */
865 static void qib_sdma_7220_setlengen(struct qib_pportdata *ppd)
872 qib_write_kreg(ppd->dd, kr_senddmalengen, ppd->sdma_descq_cnt);
873 qib_write_kreg(ppd->dd, kr_senddmalengen,
874 ppd->sdma_descq_cnt |
878 static void qib_7220_sdma_hw_start_up(struct qib_pportdata *ppd)
880 qib_sdma_7220_setlengen(ppd);
881 qib_sdma_update_7220_tail(ppd, 0); /* Set SendDmaTail */
882 ppd->sdma_head_dma[0] = 0;
897 static void sdma_7220_errors(struct qib_pportdata *ppd, u64 errs)
900 struct qib_devdata *dd = ppd->dd;
906 qib_decode_7220_sdma_errs(ppd, errs, msg,
908 spin_lock_irqsave(&ppd->sdma_lock, flags);
917 qib_dev_err(ppd->dd,
919 ppd->dd->unit, ppd->port, sbuf[2], sbuf[1],
924 qib_dev_err(dd, "IB%u:%u SDmaUnexpData\n", ppd->dd->unit,
925 ppd->port);
927 switch (ppd->sdma_state.current_state) {
946 __qib_sdma_process_event(ppd,
956 __qib_sdma_process_event(ppd,
961 spin_unlock_irqrestore(&ppd->sdma_lock, flags);
1049 struct qib_pportdata *ppd = &cpspec->pportdata;
1051 ppd->cpspec->chase_timer.expires = 0;
1052 qib_set_ib_7220_lstate(ppd, QLOGIC_IB_IBCC_LINKCMD_DOWN,
1056 static void handle_7220_chase(struct qib_pportdata *ppd, u64 ibcst)
1075 if (ppd->cpspec->chase_end &&
1076 time_after(tnow, ppd->cpspec->chase_end)) {
1077 ppd->cpspec->chase_end = 0;
1078 qib_set_ib_7220_lstate(ppd,
1081 ppd->cpspec->chase_timer.expires = jiffies +
1083 add_timer(&ppd->cpspec->chase_timer);
1084 } else if (!ppd->cpspec->chase_end)
1085 ppd->cpspec->chase_end = tnow + QIB_CHASE_TIME;
1089 ppd->cpspec->chase_end = 0;
1099 struct qib_pportdata *ppd = dd->pport;
1111 sdma_7220_errors(ppd, errs);
1119 qib_disarm_7220_senderrbufs(ppd);
1121 !(ppd->lflags & QIBL_LINKACTIVE)) {
1132 !(ppd->lflags & QIBL_LINKACTIVE)) {
1171 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
1172 handle_7220_chase(ppd, ibcs);
1175 ppd->link_width_active =
1178 ppd->link_speed_active =
1191 qib_handle_e_ibstatuschanged(ppd, ibcs);
1204 qib_dev_porterr(dd, ppd->port, "%s error\n", msg);
1206 if (ppd->state_wanted & ppd->lflags)
1207 wake_up_interruptible(&ppd->state_wait);
1485 static void qib_set_ib_7220_lstate(struct qib_pportdata *ppd, u16 linkcmd,
1489 struct qib_devdata *dd = ppd->dd;
1497 spin_lock_irqsave(&ppd->lflags_lock, flags);
1498 ppd->lflags |= QIBL_IB_LINK_DISABLED;
1499 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
1506 spin_lock_irqsave(&ppd->lflags_lock, flags);
1507 ppd->lflags &= ~QIBL_IB_LINK_DISABLED;
1508 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
1514 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl | mod_wd);
1528 * @ppd: physical port on the qlogic_ib device
1530 static int qib_7220_bringup_serdes(struct qib_pportdata *ppd)
1532 struct qib_devdata *dd = ppd->dd;
1541 ppd->cpspec->ibdeltainprog = 1;
1542 ppd->cpspec->ibsymsnap = read_7220_creg32(dd, cr_ibsymbolerr);
1543 ppd->cpspec->iblnkerrsnap =
1565 ibc |= ((u64)(ppd->ibmaxlen >> 2) + 1) << SYM_LSB(IBCCtrl, MaxPktLen);
1566 ppd->cpspec->ibcctrl = ibc; /* without linkcmd or linkinitcmd! */
1569 val = ppd->cpspec->ibcctrl | (QLOGIC_IB_IBCC_LINKINITCMD_DISABLE <<
1573 if (!ppd->cpspec->ibcddrctrl) {
1575 ppd->cpspec->ibcddrctrl = qib_read_kreg64(dd, kr_ibcddrctrl);
1577 if (ppd->link_speed_enabled == (QIB_IB_SDR | QIB_IB_DDR))
1578 ppd->cpspec->ibcddrctrl |=
1582 ppd->cpspec->ibcddrctrl |=
1583 ppd->link_speed_enabled == QIB_IB_DDR ?
1585 if ((ppd->link_width_enabled & (IB_WIDTH_1X | IB_WIDTH_4X)) ==
1587 ppd->cpspec->ibcddrctrl |= IBA7220_IBC_WIDTH_AUTONEG;
1589 ppd->cpspec->ibcddrctrl |=
1590 ppd->link_width_enabled == IB_WIDTH_4X ?
1595 ppd->cpspec->ibcddrctrl |=
1597 ppd->cpspec->ibcddrctrl |=
1601 ppd->cpspec->ibcddrctrl |= IBA7220_IBC_LANE_REV_SUPPORTED;
1606 qib_write_kreg(dd, kr_ibcddrctrl, ppd->cpspec->ibcddrctrl);
1627 if (!ppd->guid)
1628 ppd->guid = dd->base_guid;
1629 guid = be64_to_cpu(ppd->guid);
1643 * @ppd: physical port of the qlogic_ib device
1646 static void qib_7220_quiet_serdes(struct qib_pportdata *ppd)
1649 struct qib_devdata *dd = ppd->dd;
1657 ppd->cpspec->chase_end = 0;
1658 if (ppd->cpspec->chase_timer.function) /* if initted */
1659 del_timer_sync(&ppd->cpspec->chase_timer);
1661 if (ppd->cpspec->ibsymdelta || ppd->cpspec->iblnkerrdelta ||
1662 ppd->cpspec->ibdeltainprog) {
1670 if (ppd->cpspec->ibsymdelta || ppd->cpspec->ibdeltainprog) {
1672 if (ppd->cpspec->ibdeltainprog)
1673 val -= val - ppd->cpspec->ibsymsnap;
1674 val -= ppd->cpspec->ibsymdelta;
1677 if (ppd->cpspec->iblnkerrdelta || ppd->cpspec->ibdeltainprog) {
1679 if (ppd->cpspec->ibdeltainprog)
1680 val -= val - ppd->cpspec->iblnkerrsnap;
1681 val -= ppd->cpspec->iblnkerrdelta;
1688 qib_set_ib_7220_lstate(ppd, 0, QLOGIC_IB_IBCC_LINKINITCMD_DISABLE);
1690 spin_lock_irqsave(&ppd->lflags_lock, flags);
1691 ppd->lflags &= ~QIBL_IB_AUTONEG_INPROG;
1692 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
1693 wake_up(&ppd->cpspec->autoneg_wait);
1694 cancel_delayed_work_sync(&ppd->cpspec->autoneg_work);
1696 shutdown_7220_relock_poll(ppd->dd);
1697 val = qib_read_kreg64(ppd->dd, kr_xgxs_cfg);
1699 qib_write_kreg(ppd->dd, kr_xgxs_cfg, val);
1704 * @ppd: the qlogic_ib device
1725 static void qib_setup_7220_setextled(struct qib_pportdata *ppd, u32 on)
1727 struct qib_devdata *dd = ppd->dd;
1738 if (ppd->led_override) {
1739 ltst = (ppd->led_override & QIB_LED_PHYS) ?
1741 lst = (ppd->led_override & QIB_LED_LOG) ?
1793 static void sdma_7220_intr(struct qib_pportdata *ppd, u64 istat)
1797 spin_lock_irqsave(&ppd->sdma_lock, flags);
1799 switch (ppd->sdma_state.current_state) {
1804 __qib_sdma_process_event(ppd, qib_sdma_event_e20_hw_started);
1817 __qib_sdma_process_event(ppd, qib_sdma_event_e60_hw_halted);
1822 __qib_sdma_intr(ppd);
1825 spin_unlock_irqrestore(&ppd->sdma_lock, flags);
2318 static int qib_7220_get_ib_cfg(struct qib_pportdata *ppd, int which)
2325 ret = ppd->link_width_enabled;
2329 ret = ppd->link_width_active;
2333 ret = ppd->link_speed_enabled;
2337 ret = ppd->link_speed_active;
2351 ret = qib_read_kreg64(ppd->dd, kr_ibcddrstatus)
2356 ret = ppd->vls_operational;
2368 ret = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2373 ret = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2379 ret = (ppd->cpspec->ibcctrl &
2394 ret = (ppd->link_speed_active == QIB_IB_DDR);
2401 ret = (int)((ppd->cpspec->ibcddrctrl >> lsb) & maskr);
2406 static int qib_7220_set_ib_cfg(struct qib_pportdata *ppd, int which, u32 val)
2408 struct qib_devdata *dd = ppd->dd;
2431 ppd->link_width_enabled = val;
2432 if (!(ppd->lflags & QIBL_LINKDOWN))
2459 ppd->link_speed_enabled = val;
2460 if ((ppd->cpspec->ibcddrctrl & IBA7220_IBC_IBTA_1_2_MASK) &&
2463 if (!(ppd->lflags & QIBL_LINKDOWN))
2477 spin_lock_irqsave(&ppd->lflags_lock, flags);
2478 ppd->lflags &= ~QIBL_IB_AUTONEG_FAILED;
2479 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
2501 maskr = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2504 ppd->cpspec->ibcctrl &=
2506 ppd->cpspec->ibcctrl |= (u64) val <<
2508 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2514 maskr = SYM_FIELD(ppd->cpspec->ibcctrl, IBCCtrl,
2517 ppd->cpspec->ibcctrl &=
2519 ppd->cpspec->ibcctrl |= (u64) val <<
2521 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2527 maskr = (u64) ppd->pkeys[0] | ((u64) ppd->pkeys[1] << 16) |
2528 ((u64) ppd->pkeys[2] << 32) |
2529 ((u64) ppd->pkeys[3] << 48);
2536 ppd->cpspec->ibcctrl &=
2539 ppd->cpspec->ibcctrl |=
2541 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2553 val = (ppd->ibmaxlen >> 2) + 1;
2554 ppd->cpspec->ibcctrl &= ~SYM_MASK(IBCCtrl, MaxPktLen);
2555 ppd->cpspec->ibcctrl |= (u64)val << SYM_LSB(IBCCtrl, MaxPktLen);
2556 qib_write_kreg(dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2564 if (!ppd->cpspec->ibdeltainprog &&
2566 ppd->cpspec->ibdeltainprog = 1;
2567 ppd->cpspec->ibsymsnap =
2569 ppd->cpspec->iblnkerrsnap =
2602 ppd->cpspec->chase_end = 0;
2605 * wait forpending timer, but don't clear .data (ppd)!
2607 if (ppd->cpspec->chase_timer.expires) {
2608 del_timer_sync(&ppd->cpspec->chase_timer);
2609 ppd->cpspec->chase_timer.expires = 0;
2619 qib_set_ib_7220_lstate(ppd, lcmd, licmd);
2623 tmp = (ppd->cpspec->ibcddrctrl >> lsb) & maskr;
2630 if (ppd->link_width_enabled-1 != tmp) {
2631 ppd->cpspec->ibcddrctrl &= ~(maskr << lsb);
2632 ppd->cpspec->ibcddrctrl |=
2633 (((u64)(ppd->link_width_enabled-1) & maskr) <<
2636 ppd->cpspec->ibcddrctrl);
2638 spin_lock_irqsave(&ppd->lflags_lock, flags);
2639 ppd->lflags |= QIBL_IB_FORCE_NOTIFY;
2640 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
2657 ppd->cpspec->ibcddrctrl &= ~(maskr << lsb);
2658 ppd->cpspec->ibcddrctrl |= (((u64) val & maskr) << lsb);
2659 qib_write_kreg(dd, kr_ibcddrctrl, ppd->cpspec->ibcddrctrl);
2662 spin_lock_irqsave(&ppd->lflags_lock, flags);
2663 ppd->lflags |= QIBL_IB_FORCE_NOTIFY;
2664 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
2670 static int qib_7220_set_loopback(struct qib_pportdata *ppd, const char *what)
2676 ppd->cpspec->ibcctrl |= SYM_MASK(IBCCtrl, Loopback);
2678 qib_devinfo(ppd->dd->pcidev, "Enabling IB%u:%u IBC loopback\n",
2679 ppd->dd->unit, ppd->port);
2681 ppd->cpspec->ibcctrl &= ~SYM_MASK(IBCCtrl, Loopback);
2684 qib_devinfo(ppd->dd->pcidev,
2686 ppd->dd->unit, ppd->port);
2690 qib_write_kreg(ppd->dd, kr_ibcctrl, ppd->cpspec->ibcctrl);
2691 ddr = ppd->cpspec->ibcddrctrl & ~(IBA7220_IBC_HRTBT_MASK
2693 ppd->cpspec->ibcddrctrl = ddr | val;
2694 qib_write_kreg(ppd->dd, kr_ibcddrctrl,
2695 ppd->cpspec->ibcddrctrl);
2696 qib_write_kreg(ppd->dd, kr_scratch, 0);
2728 static void rcvctrl_7220_mod(struct qib_pportdata *ppd, unsigned int op,
2731 struct qib_devdata *dd = ppd->dd;
2815 static void sendctrl_7220_mod(struct qib_pportdata *ppd, u32 op)
2817 struct qib_devdata *dd = ppd->dd;
2899 * @ppd: the qlogic_ib device
2902 static u64 qib_portcntr_7220(struct qib_pportdata *ppd, u32 reg)
2905 struct qib_devdata *dd = ppd->dd;
2946 qib_devinfo(ppd->dd->pcidev,
2973 ret -= ret - ppd->cpspec->ibsymsnap;
2977 ret -= ret - ppd->cpspec->iblnkerrsnap;
3209 struct qib_pportdata *ppd = &dd->pport[port];
3221 *cntr++ = qib_portcntr_7220(ppd,
3244 struct qib_pportdata *ppd = dd->pport;
3261 traffic_wds = qib_portcntr_7220(ppd, cr_wordsend) +
3262 qib_portcntr_7220(ppd, cr_wordrcv);
3296 static void qib_7220_xgxs_reset(struct qib_pportdata *ppd)
3299 struct qib_devdata *dd = ppd->dd;
3327 static u32 __iomem *get_7220_link_buf(struct qib_pportdata *ppd, u32 *bnum)
3330 u32 lbuf = ppd->dd->cspec->lastbuf_for_pio;
3338 sendctrl_7220_mod(ppd->dd->pport, QIB_SENDCTRL_AVAIL_BLIP);
3339 qib_read_kreg64(ppd->dd, kr_scratch); /* extra chip flush */
3340 buf = qib_getsendbuf_range(ppd->dd, bnum, lbuf, lbuf);
3344 spin_lock_irqsave(&ppd->sdma_lock, flags);
3345 if (ppd->sdma_state.current_state == qib_sdma_state_s20_idle &&
3346 ppd->sdma_state.current_state != qib_sdma_state_s00_hw_down) {
3347 __qib_sdma_process_event(ppd, qib_sdma_event_e00_go_hw_down);
3351 qib_7220_sdma_hw_clean_up(ppd);
3353 spin_unlock_irqrestore(&ppd->sdma_lock, flags);
3356 qib_read_kreg64(ppd->dd, kr_scratch); /* extra chip flush */
3357 buf = qib_getsendbuf_range(ppd->dd, bnum, lbuf, lbuf);
3371 static void autoneg_7220_sendpkt(struct qib_pportdata *ppd, u32 *hdr,
3378 struct qib_devdata *dd = ppd->dd;
3383 while (!(piobuf = get_7220_link_buf(ppd, &pnum))) {
3406 static void autoneg_7220_send(struct qib_pportdata *ppd, int which)
3408 struct qib_devdata *dd = ppd->dd;
3442 autoneg_7220_sendpkt(ppd, hdr, dcnt, data);
3445 autoneg_7220_sendpkt(ppd, hdr, dcnt, data);
3464 static void set_7220_ibspeed_fast(struct qib_pportdata *ppd, u32 speed)
3466 ppd->cpspec->ibcddrctrl &= ~(IBA7220_IBC_SPEED_AUTONEG_MASK |
3470 ppd->cpspec->ibcddrctrl |= IBA7220_IBC_SPEED_AUTONEG_MASK |
3473 ppd->cpspec->ibcddrctrl |= speed == QIB_IB_DDR ?
3476 qib_write_kreg(ppd->dd, kr_ibcddrctrl, ppd->cpspec->ibcddrctrl);
3477 qib_write_kreg(ppd->dd, kr_scratch, 0);
3486 static void try_7220_autoneg(struct qib_pportdata *ppd)
3495 qib_write_kreg(ppd->dd, kr_ncmodectrl, 0x3b9dc07);
3497 spin_lock_irqsave(&ppd->lflags_lock, flags);
3498 ppd->lflags |= QIBL_IB_AUTONEG_INPROG;
3499 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
3500 autoneg_7220_send(ppd, 0);
3501 set_7220_ibspeed_fast(ppd, QIB_IB_DDR);
3503 toggle_7220_rclkrls(ppd->dd);
3505 queue_delayed_work(ib_wq, &ppd->cpspec->autoneg_work,
3515 struct qib_pportdata *ppd;
3520 ppd = &container_of(work, struct qib_chippport_specific,
3522 dd = ppd->dd;
3529 if (SYM_FIELD(ppd->lastibcstat, IBCStatus, LinkTrainingState)
3531 qib_set_linkstate(ppd, QIB_IB_LINKDOWN_DISABLE);
3537 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
3541 if (wait_event_timeout(ppd->cpspec->autoneg_wait,
3542 !(ppd->lflags & QIBL_IB_AUTONEG_INPROG),
3549 if (wait_event_timeout(ppd->cpspec->autoneg_wait,
3550 !(ppd->lflags & QIBL_IB_AUTONEG_INPROG),
3554 set_7220_ibspeed_fast(ppd, QIB_IB_SDR);
3561 wait_event_timeout(ppd->cpspec->autoneg_wait,
3562 !(ppd->lflags & QIBL_IB_AUTONEG_INPROG),
3565 if (ppd->lflags & QIBL_IB_AUTONEG_INPROG) {
3566 spin_lock_irqsave(&ppd->lflags_lock, flags);
3567 ppd->lflags &= ~QIBL_IB_AUTONEG_INPROG;
3569 ppd->lflags |= QIBL_IB_AUTONEG_FAILED;
3572 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
3573 set_7220_ibspeed_fast(ppd, ppd->link_speed_enabled);
3608 static int qib_7220_ib_updown(struct qib_pportdata *ppd, int ibup, u64 ibcs)
3611 struct qib_devdata *dd = ppd->dd;
3614 spin_lock_irqsave(&ppd->lflags_lock, flags);
3615 ppd->lflags &= ~QIBL_IB_FORCE_NOTIFY;
3616 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
3624 if (!(ppd->lflags & (QIBL_IB_AUTONEG_FAILED |
3626 set_7220_ibspeed_fast(ppd, ppd->link_speed_enabled);
3627 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG)) {
3629 qib_cancel_sends(ppd); /* initial disarm, etc. */
3630 spin_lock_irqsave(&ppd->sdma_lock, flags);
3631 if (__qib_sdma_running(ppd))
3632 __qib_sdma_process_event(ppd,
3634 spin_unlock_irqrestore(&ppd->sdma_lock, flags);
3640 !(ppd->lflags & (QIBL_IB_AUTONEG_FAILED |
3642 ppd->link_speed_active == QIB_IB_SDR &&
3643 (ppd->link_speed_enabled & (QIB_IB_DDR | QIB_IB_SDR)) ==
3648 if (!ppd->cpspec->ibdeltainprog) {
3649 ppd->cpspec->ibdeltainprog = 1;
3650 ppd->cpspec->ibsymsnap = read_7220_creg32(dd,
3652 ppd->cpspec->iblnkerrsnap = read_7220_creg32(dd,
3655 try_7220_autoneg(ppd);
3657 } else if ((ppd->lflags & QIBL_IB_AUTONEG_INPROG) &&
3658 ppd->link_speed_active == QIB_IB_SDR) {
3659 autoneg_7220_send(ppd, 1);
3660 set_7220_ibspeed_fast(ppd, QIB_IB_DDR);
3665 if ((ppd->lflags & QIBL_IB_AUTONEG_INPROG) &&
3666 (ppd->link_speed_active & QIB_IB_DDR)) {
3667 spin_lock_irqsave(&ppd->lflags_lock, flags);
3668 ppd->lflags &= ~(QIBL_IB_AUTONEG_INPROG |
3670 spin_unlock_irqrestore(&ppd->lflags_lock,
3674 set_7220_ibspeed_fast(ppd,
3675 ppd->link_speed_enabled);
3676 wake_up(&ppd->cpspec->autoneg_wait);
3678 } else if (ppd->lflags & QIBL_IB_AUTONEG_FAILED) {
3685 spin_lock_irqsave(&ppd->lflags_lock, flags);
3686 ppd->lflags &= ~QIBL_IB_AUTONEG_FAILED;
3687 spin_unlock_irqrestore(&ppd->lflags_lock,
3689 ppd->cpspec->ibcddrctrl |=
3696 if (!(ppd->lflags & QIBL_IB_AUTONEG_INPROG))
3700 ppd->delay_mult = rate_to_delay
3705 spin_lock_irqsave(&ppd->sdma_lock, flags);
3711 if (ppd->sdma_state.current_state !=
3713 __qib_sdma_process_event(ppd,
3715 spin_unlock_irqrestore(&ppd->sdma_lock, flags);
3720 if (ppd->cpspec->ibdeltainprog) {
3721 ppd->cpspec->ibdeltainprog = 0;
3722 ppd->cpspec->ibsymdelta += read_7220_creg32(ppd->dd,
3723 cr_ibsymbolerr) - ppd->cpspec->ibsymsnap;
3724 ppd->cpspec->iblnkerrdelta += read_7220_creg32(ppd->dd,
3725 cr_iblinkerrrecov) - ppd->cpspec->iblnkerrsnap;
3728 !ppd->cpspec->ibdeltainprog &&
3729 !(ppd->lflags & QIBL_IB_AUTONEG_INPROG)) {
3730 ppd->cpspec->ibdeltainprog = 1;
3731 ppd->cpspec->ibsymsnap = read_7220_creg32(ppd->dd,
3733 ppd->cpspec->iblnkerrsnap = read_7220_creg32(ppd->dd,
3738 qib_setup_7220_setextled(ppd, ibup);
3958 struct qib_pportdata *ppd;
3963 ppd = &cpspec->pportdata;
3964 dd->pport = ppd;
3969 ppd->cpspec = cpspec;
4010 ret = qib_init_pportdata(ppd, dd, 0, 1);
4013 ppd->link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X;
4014 ppd->link_speed_supported = QIB_IB_SDR | QIB_IB_DDR;
4016 ppd->link_width_enabled = ppd->link_width_supported;
4017 ppd->link_speed_enabled = ppd->link_speed_supported;
4022 ppd->link_width_active = IB_WIDTH_4X;
4023 ppd->link_speed_active = QIB_IB_SDR;
4024 ppd->delay_mult = rate_to_delay[0][1];
4025 ppd->vls_supported = IB_VL_VL0;
4026 ppd->vls_operational = ppd->vls_supported;
4031 timer_setup(&ppd->cpspec->chase_timer, reenable_7220_chase, 0);
4133 static u32 __iomem *qib_7220_getsendbuf(struct qib_pportdata *ppd, u64 pbc,
4137 struct qib_devdata *dd = ppd->dd;
4141 !(ppd->lflags & (QIBL_IB_AUTONEG_INPROG | QIBL_LINKACTIVE)))
4142 buf = get_7220_link_buf(ppd, pbufnum);
4156 static void qib_set_cntr_7220_sample(struct qib_pportdata *ppd, u32 intv,
4159 write_7220_creg(ppd->dd, cr_psinterval, intv);
4160 write_7220_creg(ppd->dd, cr_psstart, start);
4170 static void qib_sdma_update_7220_tail(struct qib_pportdata *ppd, u16 tail)
4174 ppd->sdma_descq_tail = tail;
4175 qib_write_kreg(ppd->dd, kr_senddmatail, tail);
4178 static void qib_sdma_set_7220_desc_cnt(struct qib_pportdata *ppd, unsigned cnt)
4222 static void qib_7220_sdma_init_early(struct qib_pportdata *ppd)
4224 ppd->sdma_state.set_state_action = sdma_7220_action_table;
4227 static int init_sdma_7220_regs(struct qib_pportdata *ppd)
4229 struct qib_devdata *dd = ppd->dd;
4234 qib_write_kreg(dd, kr_senddmabase, ppd->sdma_descq_phys);
4235 qib_sdma_7220_setlengen(ppd);
4236 qib_sdma_update_7220_tail(ppd, 0); /* Set SendDmaTail */
4238 qib_write_kreg(dd, kr_senddmaheadaddr, ppd->sdma_head_phys);
4257 ppd->sdma_state.first_sendbuf = i;
4258 ppd->sdma_state.last_sendbuf = n;
4264 static u16 qib_sdma_7220_gethead(struct qib_pportdata *ppd)
4266 struct qib_devdata *dd = ppd->dd;
4274 use_dmahead = __qib_sdma_running(ppd) &&
4278 (u16)le64_to_cpu(*ppd->sdma_head_dma) :
4281 swhead = ppd->sdma_descq_head;
4282 swtail = ppd->sdma_descq_tail;
4283 cnt = ppd->sdma_descq_cnt;
4310 static int qib_sdma_7220_busy(struct qib_pportdata *ppd)
4312 u64 hwstatus = qib_read_kreg64(ppd->dd, kr_senddmastatus);
4328 static u32 qib_7220_setpbc_control(struct qib_pportdata *ppd, u32 plen,
4331 u8 snd_mult = ppd->delay_mult;
4333 u32 ret = ppd->cpspec->last_delay_mult;
4335 ppd->cpspec->last_delay_mult = (rcv_mult > snd_mult) ?