• Home
  • Raw
  • Download

Lines Matching refs:dd

46 void ipath_disarm_senderrbufs(struct ipath_devdata *dd)  in ipath_disarm_senderrbufs()  argument
54 piobcnt = dd->ipath_piobcnt2k + dd->ipath_piobcnt4k; in ipath_disarm_senderrbufs()
57 dd, dd->ipath_kregs->kr_sendbuffererror); in ipath_disarm_senderrbufs()
59 dd, dd->ipath_kregs->kr_sendbuffererror + 1); in ipath_disarm_senderrbufs()
62 dd, dd->ipath_kregs->kr_sendbuffererror + 2); in ipath_disarm_senderrbufs()
65 dd, dd->ipath_kregs->kr_sendbuffererror + 3); in ipath_disarm_senderrbufs()
72 dd->ipath_lastcancel > jiffies) { in ipath_disarm_senderrbufs()
83 ipath_disarm_piobufs(dd, i, 1); in ipath_disarm_senderrbufs()
85 dd->ipath_lastcancel = jiffies+3; in ipath_disarm_senderrbufs()
130 static u64 handle_e_sum_errs(struct ipath_devdata *dd, ipath_err_t errs) in handle_e_sum_errs() argument
134 ipath_disarm_senderrbufs(dd); in handle_e_sum_errs()
136 !(dd->ipath_flags & IPATH_LINKACTIVE)) { in handle_e_sum_errs()
229 static char *ib_linkstate(struct ipath_devdata *dd, u64 ibcs) in ib_linkstate() argument
234 state = ipath_ib_state(dd, ibcs); in ib_linkstate()
235 if (state == dd->ib_init) in ib_linkstate()
237 else if (state == dd->ib_arm) in ib_linkstate()
239 else if (state == dd->ib_active) in ib_linkstate()
246 void signal_ib_event(struct ipath_devdata *dd, enum ib_event_type ev) in signal_ib_event() argument
250 event.device = &dd->verbs_dev->ibdev; in signal_ib_event()
256 static void handle_e_ibstatuschanged(struct ipath_devdata *dd, in handle_e_ibstatuschanged() argument
260 u32 init = dd->ib_init; in handle_e_ibstatuschanged()
261 u32 arm = dd->ib_arm; in handle_e_ibstatuschanged()
262 u32 active = dd->ib_active; in handle_e_ibstatuschanged()
263 const u64 ibcs = ipath_read_kreg64(dd, dd->ipath_kregs->kr_ibcstatus); in handle_e_ibstatuschanged()
265 lstate = ipath_ib_linkstate(dd, ibcs); /* linkstate */ in handle_e_ibstatuschanged()
266 ibstate = ipath_ib_state(dd, ibcs); in handle_e_ibstatuschanged()
268 lastlstate = ipath_ib_linkstate(dd, dd->ipath_lastibcstat); in handle_e_ibstatuschanged()
269 ltstate = ipath_ib_linktrstate(dd, ibcs); /* linktrainingtate */ in handle_e_ibstatuschanged()
292 if (dd->ipath_f_ib_updown(dd, 1, ibcs)) { in handle_e_ibstatuschanged()
294 dd->ipath_flags &= ~IPATH_IB_LINK_DISABLED; in handle_e_ibstatuschanged()
299 (dd->ipath_flags & IPATH_IB_FORCE_NOTIFY)) && in handle_e_ibstatuschanged()
303 handled = dd->ipath_f_ib_updown(dd, 0, ibcs); in handle_e_ibstatuschanged()
304 dd->ipath_flags &= ~IPATH_IB_FORCE_NOTIFY; in handle_e_ibstatuschanged()
317 (dd->ipath_flags & (IPATH_LINKARMED | IPATH_LINKACTIVE))) { in handle_e_ibstatuschanged()
318 dev_info(&dd->pcidev->dev, "Link state changed from %s " in handle_e_ibstatuschanged()
319 "to %s\n", (dd->ipath_flags & IPATH_LINKARMED) ? in handle_e_ibstatuschanged()
320 "ARM" : "ACTIVE", ib_linkstate(dd, ibcs)); in handle_e_ibstatuschanged()
326 lastlts = ipath_ib_linktrstate(dd, dd->ipath_lastibcstat); in handle_e_ibstatuschanged()
337 if (!(dd->ipath_flags & IPATH_IB_AUTONEG_INPROG) && in handle_e_ibstatuschanged()
338 (++dd->ipath_ibpollcnt == 40)) { in handle_e_ibstatuschanged()
339 dd->ipath_flags |= IPATH_NOCABLE; in handle_e_ibstatuschanged()
340 *dd->ipath_statusp |= in handle_e_ibstatuschanged()
350 dd->ipath_ibpollcnt = 0; /* not poll*, now */ in handle_e_ibstatuschanged()
353 if (ibstate != init && dd->ipath_lastlinkrecov && ipath_linkrecovery) { in handle_e_ibstatuschanged()
355 linkrecov = ipath_snap_cntr(dd, in handle_e_ibstatuschanged()
356 dd->ipath_cregs->cr_iblinkerrrecovcnt); in handle_e_ibstatuschanged()
357 if (linkrecov != dd->ipath_lastlinkrecov) { in handle_e_ibstatuschanged()
360 ib_linkstate(dd, ibcs), in handle_e_ibstatuschanged()
364 dd->ipath_lastlinkrecov = 0; in handle_e_ibstatuschanged()
365 ipath_set_linkstate(dd, IPATH_IB_LINKDOWN); in handle_e_ibstatuschanged()
371 *dd->ipath_statusp &= ~IPATH_STATUS_IB_NOCABLE; in handle_e_ibstatuschanged()
373 *dd->ipath_statusp &= ~IPATH_STATUS_IB_READY; in handle_e_ibstatuschanged()
374 if (dd->ipath_flags & IPATH_LINKACTIVE) in handle_e_ibstatuschanged()
375 signal_ib_event(dd, IB_EVENT_PORT_ERR); in handle_e_ibstatuschanged()
378 dd->ipath_flags |= IPATH_LINKARMED; in handle_e_ibstatuschanged()
379 dd->ipath_flags &= ~(IPATH_LINKUNK | in handle_e_ibstatuschanged()
382 ipath_hol_down(dd); in handle_e_ibstatuschanged()
389 dd->ipath_flags |= IPATH_LINKINIT | in handle_e_ibstatuschanged()
391 dd->ipath_flags &= ~(IPATH_LINKUNK | in handle_e_ibstatuschanged()
394 ipath_hol_down(dd); in handle_e_ibstatuschanged()
396 dd->ipath_lastlinkrecov = ipath_snap_cntr(dd, in handle_e_ibstatuschanged()
397 dd->ipath_cregs->cr_iblinkerrrecovcnt); in handle_e_ibstatuschanged()
398 *dd->ipath_statusp |= in handle_e_ibstatuschanged()
400 dd->ipath_flags |= IPATH_LINKACTIVE; in handle_e_ibstatuschanged()
401 dd->ipath_flags &= ~(IPATH_LINKUNK | IPATH_LINKINIT in handle_e_ibstatuschanged()
404 if (dd->ipath_flags & IPATH_HAS_SEND_DMA) in handle_e_ibstatuschanged()
405 ipath_restart_sdma(dd); in handle_e_ibstatuschanged()
406 signal_ib_event(dd, IB_EVENT_PORT_ACTIVE); in handle_e_ibstatuschanged()
408 dd->ipath_f_setextled(dd, lstate, ltstate); in handle_e_ibstatuschanged()
409 ipath_hol_up(dd); in handle_e_ibstatuschanged()
418 "(%x)\n", ib_linkstate(dd, ibcs), ibstate); in handle_e_ibstatuschanged()
421 dd->ipath_unit, ib_linkstate(dd, ibcs), in handle_e_ibstatuschanged()
424 if (dd->ipath_flags & IPATH_LINKACTIVE) in handle_e_ibstatuschanged()
425 signal_ib_event(dd, IB_EVENT_PORT_ERR); in handle_e_ibstatuschanged()
426 dd->ipath_flags |= IPATH_LINKDOWN; in handle_e_ibstatuschanged()
427 dd->ipath_flags &= ~(IPATH_LINKUNK | IPATH_LINKINIT in handle_e_ibstatuschanged()
430 *dd->ipath_statusp &= ~IPATH_STATUS_IB_READY; in handle_e_ibstatuschanged()
431 dd->ipath_lli_counter = 0; in handle_e_ibstatuschanged()
436 dd->ipath_unit, lstate, in handle_e_ibstatuschanged()
437 ib_linkstate(dd, dd->ipath_lastibcstat)); in handle_e_ibstatuschanged()
441 dd->ipath_unit, in handle_e_ibstatuschanged()
447 dd->ipath_lastibcstat = ibcs; in handle_e_ibstatuschanged()
452 static void handle_supp_msgs(struct ipath_devdata *dd, in handle_supp_msgs() argument
459 if (dd->ipath_lasterror & ~INFINIPATH_E_IBSTATUSCHANGED) { in handle_supp_msgs()
462 iserr = ipath_decode_err(dd, msg, msgsz, in handle_supp_msgs()
463 dd->ipath_lasterror & in handle_supp_msgs()
473 if (dd->ipath_lasterror & ~mask) in handle_supp_msgs()
474 ipath_dev_err(dd, "Suppressed %u messages for " in handle_supp_msgs()
478 dd->ipath_lasterror); in handle_supp_msgs()
498 static unsigned handle_frequent_errors(struct ipath_devdata *dd, in handle_frequent_errors() argument
519 handle_supp_msgs(dd, supp_msgs, msg, msgsz); in handle_frequent_errors()
530 static void handle_sdma_errors(struct ipath_devdata *dd, ipath_err_t errs) in handle_sdma_errors() argument
537 ipath_decode_err(dd, msg, sizeof msg, errs & in handle_sdma_errors()
543 tl = ipath_read_kreg64(dd, dd->ipath_kregs->kr_senddmatail); in handle_sdma_errors()
544 hd = ipath_read_kreg64(dd, dd->ipath_kregs->kr_senddmahead); in handle_sdma_errors()
545 status = ipath_read_kreg64(dd in handle_sdma_errors()
546 , dd->ipath_kregs->kr_senddmastatus); in handle_sdma_errors()
547 lengen = ipath_read_kreg64(dd, in handle_sdma_errors()
548 dd->ipath_kregs->kr_senddmalengen); in handle_sdma_errors()
553 spin_lock_irqsave(&dd->ipath_sdma_lock, flags); in handle_sdma_errors()
554 __set_bit(IPATH_SDMA_DISABLED, &dd->ipath_sdma_status); in handle_sdma_errors()
555 expected = test_bit(IPATH_SDMA_ABORTING, &dd->ipath_sdma_status); in handle_sdma_errors()
556 spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags); in handle_sdma_errors()
558 ipath_cancel_sends(dd, 1); in handle_sdma_errors()
561 static void handle_sdma_intr(struct ipath_devdata *dd, u64 istat) in handle_sdma_intr() argument
567 !test_bit(IPATH_SDMA_SHUTDOWN, &dd->ipath_sdma_status)) in handle_sdma_intr()
568 ipath_sdma_intr(dd); in handle_sdma_intr()
572 &dd->ipath_sdma_status); in handle_sdma_intr()
575 spin_lock_irqsave(&dd->ipath_sdma_lock, flags); in handle_sdma_intr()
576 __set_bit(IPATH_SDMA_DISABLED, &dd->ipath_sdma_status); in handle_sdma_intr()
577 spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags); in handle_sdma_intr()
579 ipath_cancel_sends(dd, 1); in handle_sdma_intr()
580 if (!test_bit(IPATH_SDMA_SHUTDOWN, &dd->ipath_sdma_status)) in handle_sdma_intr()
581 tasklet_hi_schedule(&dd->ipath_sdma_abort_task); in handle_sdma_intr()
585 static int handle_hdrq_full(struct ipath_devdata *dd) in handle_hdrq_full() argument
592 for (i = 0; i < dd->ipath_cfgports; i++) { in handle_hdrq_full()
593 struct ipath_portdata *pd = dd->ipath_pd[i]; in handle_hdrq_full()
611 if (dd->ipath_flags & IPATH_NODMA_RTAIL) in handle_hdrq_full()
612 tl = ipath_read_ureg32(dd, ur_rcvhdrtail, i); in handle_hdrq_full()
618 hd = ipath_read_ureg32(dd, ur_rcvhdrhead, i); in handle_hdrq_full()
619 if (hd == (tl + 1) || (!hd && tl == dd->ipath_hdrqlast)) { in handle_hdrq_full()
631 static int handle_errors(struct ipath_devdata *dd, ipath_err_t errs) in handle_errors() argument
645 errs &= dd->ipath_errormask & ~dd->ipath_maskederrs; in handle_errors()
647 supp_msgs = handle_frequent_errors(dd, errs, msg, (u32)sizeof msg, in handle_errors()
653 dd->ipath_f_handle_hwerrors(dd, msg, sizeof msg); in handle_errors()
657 mask = dd->ipath_eep_st_masks[log_idx].errs_to_log; in handle_errors()
659 ipath_inc_eeprom_err(dd, log_idx, 1); in handle_errors()
664 handle_sdma_errors(dd, errs); in handle_errors()
666 if (!noprint && (errs & ~dd->ipath_e_bitsextant)) in handle_errors()
667 ipath_dev_err(dd, "error interrupt with unknown errors " in handle_errors()
669 (errs & ~dd->ipath_e_bitsextant)); in handle_errors()
672 ignore_this_time = handle_e_sum_errs(dd, errs); in handle_errors()
674 !(dd->ipath_flags & IPATH_LINKACTIVE)) { in handle_errors()
695 dd->ipath_maskederrs |= dd->ipath_lasterror | errs; in handle_errors()
697 dd->ipath_errormask &= ~dd->ipath_maskederrs; in handle_errors()
698 ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask, in handle_errors()
699 dd->ipath_errormask); in handle_errors()
700 s_iserr = ipath_decode_err(dd, msg, sizeof msg, in handle_errors()
701 dd->ipath_maskederrs); in handle_errors()
703 if (dd->ipath_maskederrs & in handle_errors()
706 ipath_dev_err(dd, "Temporarily disabling " in handle_errors()
708 (unsigned long long) dd->ipath_maskederrs, in handle_errors()
736 dd->ipath_unmasktime = jiffies + HZ * 180; in handle_errors()
739 ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear, errs); in handle_errors()
742 if (errs & ~dd->ipath_lasterror) { in handle_errors()
743 errs &= ~dd->ipath_lasterror; in handle_errors()
745 dd->ipath_lasterror |= errs & in handle_errors()
751 dd->ipath_spectriggerhit++; in handle_errors()
753 dd->ipath_spectriggerhit); in handle_errors()
758 dd->ipath_lastcancel > jiffies) { in handle_errors()
785 ipath_decode_err(dd, msg, sizeof msg, errs & ~mask); in handle_errors()
812 chkerrpkts |= handle_hdrq_full(dd); in handle_errors()
814 struct ipath_portdata *pd = dd->ipath_pd[0]; in handle_errors()
838 dd->ipath_flags |= IPATH_LINKDOWN; in handle_errors()
839 dd->ipath_flags &= ~(IPATH_LINKUNK | IPATH_LINKINIT in handle_errors()
841 *dd->ipath_statusp &= ~IPATH_STATUS_IB_READY; in handle_errors()
844 ipath_ibcstatus_str[ipath_read_kreg64(dd, in handle_errors()
845 dd->ipath_kregs->kr_ibcstatus) & 0xf]); in handle_errors()
848 handle_e_ibstatuschanged(dd, errs); in handle_errors()
852 ipath_dev_err(dd, "Got reset, requires re-init " in handle_errors()
854 dd->ipath_flags &= ~IPATH_INITTED; /* needs re-init */ in handle_errors()
856 *dd->ipath_statusp |= IPATH_STATUS_HWERROR; in handle_errors()
857 *dd->ipath_statusp &= ~IPATH_STATUS_IB_CONF; in handle_errors()
862 ipath_dev_err(dd, "%s error\n", msg); in handle_errors()
864 if (dd->ipath_state_wanted & dd->ipath_flags) { in handle_errors()
866 "waking\n", dd->ipath_state_wanted, in handle_errors()
867 dd->ipath_flags); in handle_errors()
887 void ipath_clear_freeze(struct ipath_devdata *dd) in ipath_clear_freeze() argument
890 ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask, 0ULL); in ipath_clear_freeze()
893 ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, 0ULL); in ipath_clear_freeze()
895 ipath_cancel_sends(dd, 1); in ipath_clear_freeze()
898 ipath_write_kreg(dd, dd->ipath_kregs->kr_control, in ipath_clear_freeze()
899 dd->ipath_control); in ipath_clear_freeze()
900 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_clear_freeze()
903 ipath_force_pio_avail_update(dd); in ipath_clear_freeze()
911 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrclear, 0ULL); in ipath_clear_freeze()
912 ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear, in ipath_clear_freeze()
914 ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask, in ipath_clear_freeze()
915 dd->ipath_errormask); in ipath_clear_freeze()
916 ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, -1LL); in ipath_clear_freeze()
917 ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, 0ULL); in ipath_clear_freeze()
923 static noinline void ipath_bad_intr(struct ipath_devdata *dd, u32 *unexpectp) in ipath_bad_intr() argument
941 if (dd->pcidev && dd->ipath_irq) { in ipath_bad_intr()
942 ipath_dev_err(dd, "Now %u unexpected " in ipath_bad_intr()
947 dd->ipath_irq); in ipath_bad_intr()
948 dd->ipath_f_free_irq(dd); in ipath_bad_intr()
951 if (ipath_read_ireg(dd, dd->ipath_kregs->kr_intmask)) { in ipath_bad_intr()
952 ipath_dev_err(dd, "%u unexpected interrupts, " in ipath_bad_intr()
958 ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, in ipath_bad_intr()
966 static noinline void ipath_bad_regread(struct ipath_devdata *dd) in ipath_bad_regread() argument
976 ipath_dev_err(dd, in ipath_bad_regread()
980 ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, 0ULL); in ipath_bad_regread()
982 ipath_dev_err(dd, "Still bad interrupt status, " in ipath_bad_regread()
984 dd->ipath_f_free_irq(dd); in ipath_bad_regread()
989 ipath_dev_err(dd, "Disabling interrupts, " in ipath_bad_regread()
994 static void handle_layer_pioavail(struct ipath_devdata *dd) in handle_layer_pioavail() argument
999 ret = ipath_ib_piobufavail(dd->verbs_dev); in handle_layer_pioavail()
1005 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in handle_layer_pioavail()
1006 dd->ipath_sendctrl |= INFINIPATH_S_PIOINTBUFAVAIL; in handle_layer_pioavail()
1007 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in handle_layer_pioavail()
1008 dd->ipath_sendctrl); in handle_layer_pioavail()
1009 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in handle_layer_pioavail()
1010 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in handle_layer_pioavail()
1018 static void handle_urcv(struct ipath_devdata *dd, u64 istat) in handle_urcv() argument
1034 portr = ((istat >> dd->ipath_i_rcvavail_shift) & in handle_urcv()
1035 dd->ipath_i_rcvavail_mask) | in handle_urcv()
1036 ((istat >> dd->ipath_i_rcvurg_shift) & in handle_urcv()
1037 dd->ipath_i_rcvurg_mask); in handle_urcv()
1038 for (i = 1; i < dd->ipath_cfgports; i++) { in handle_urcv()
1039 struct ipath_portdata *pd = dd->ipath_pd[i]; in handle_urcv()
1044 clear_bit(i + dd->ipath_r_intravail_shift, in handle_urcv()
1045 &dd->ipath_rcvctrl); in handle_urcv()
1060 ipath_write_kreg(dd, dd->ipath_kregs->kr_rcvctrl, in handle_urcv()
1061 dd->ipath_rcvctrl); in handle_urcv()
1067 struct ipath_devdata *dd = data; in ipath_intr() local
1076 if (dd->ipath_int_counter != (u32) -1) in ipath_intr()
1077 dd->ipath_int_counter++; in ipath_intr()
1079 if (!(dd->ipath_flags & IPATH_PRESENT)) { in ipath_intr()
1096 if (!(dd->ipath_flags & IPATH_INITTED)) { in ipath_intr()
1097 ipath_bad_intr(dd, &unexpected); in ipath_intr()
1102 istat = ipath_read_ireg(dd, dd->ipath_kregs->kr_intstatus); in ipath_intr()
1110 ipath_bad_regread(dd); in ipath_intr()
1119 if (unlikely(istat & ~dd->ipath_i_bitsextant)) in ipath_intr()
1120 ipath_dev_err(dd, in ipath_intr()
1123 istat & ~dd->ipath_i_bitsextant); in ipath_intr()
1130 estat = ipath_read_kreg64(dd, in ipath_intr()
1131 dd->ipath_kregs->kr_errorstatus); in ipath_intr()
1133 dev_info(&dd->pcidev->dev, "error interrupt (%Lx), " in ipath_intr()
1141 ipath_dev_err(dd, "Read of error status failed " in ipath_intr()
1144 chk0rcv |= handle_errors(dd, estat); in ipath_intr()
1161 dd, dd->ipath_kregs->kr_gpio_status); in ipath_intr()
1164 (dd->ipath_flags & IPATH_GPIO_ERRINTRS)) { in ipath_intr()
1174 dd->ipath_rxfc_unsupvl_errs++; in ipath_intr()
1178 dd->ipath_overrun_thresh_errs++; in ipath_intr()
1182 dd->ipath_lli_errs++; in ipath_intr()
1188 (dd->ipath_flags & IPATH_GPIO_INTR)) { in ipath_intr()
1207 const u32 mask = (u32) dd->ipath_gpio_mask; in ipath_intr()
1213 dd->ipath_gpio_mask &= ~(gpiostatus & mask); in ipath_intr()
1214 ipath_write_kreg(dd, in ipath_intr()
1215 dd->ipath_kregs->kr_gpio_mask, in ipath_intr()
1216 dd->ipath_gpio_mask); in ipath_intr()
1220 ipath_write_kreg(dd, dd->ipath_kregs->kr_gpio_clear, in ipath_intr()
1233 ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, istat); in ipath_intr()
1241 kportrbits = (1ULL << dd->ipath_i_rcvavail_shift) | in ipath_intr()
1242 (1ULL << dd->ipath_i_rcvurg_shift); in ipath_intr()
1245 ipath_kreceive(dd->ipath_pd[0]); in ipath_intr()
1248 if (istat & ((dd->ipath_i_rcvavail_mask << dd->ipath_i_rcvavail_shift) | in ipath_intr()
1249 (dd->ipath_i_rcvurg_mask << dd->ipath_i_rcvurg_shift))) in ipath_intr()
1250 handle_urcv(dd, istat); in ipath_intr()
1253 handle_sdma_intr(dd, istat); in ipath_intr()
1258 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_intr()
1259 dd->ipath_sendctrl &= ~INFINIPATH_S_PIOINTBUFAVAIL; in ipath_intr()
1260 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_intr()
1261 dd->ipath_sendctrl); in ipath_intr()
1262 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_intr()
1263 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_intr()
1266 handle_layer_pioavail(dd); in ipath_intr()