Lines Matching refs:dd
394 static void hwerr_crcbits(struct ipath_devdata *dd, ipath_err_t hwerrs, in hwerr_crcbits() argument
401 if (dd->ipath_flags & IPATH_8BIT_IN_HT0) in hwerr_crcbits()
404 if (dd->ipath_flags & IPATH_8BIT_IN_HT1) in hwerr_crcbits()
427 if (pci_read_config_word(dd->pcidev, in hwerr_crcbits()
428 dd->ipath_ht_slave_off + 0x4, in hwerr_crcbits()
430 dev_info(&dd->pcidev->dev, "Couldn't read " in hwerr_crcbits()
439 if (pci_read_config_word(dd->pcidev, in hwerr_crcbits()
440 dd->ipath_ht_slave_off + 0x8, in hwerr_crcbits()
442 dev_info(&dd->pcidev->dev, "Couldn't read " in hwerr_crcbits()
453 dd->ipath_hwerrmask &= ~crcbits; in hwerr_crcbits()
454 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrmask, in hwerr_crcbits()
455 dd->ipath_hwerrmask); in hwerr_crcbits()
482 static void ipath_ht_txe_recover(struct ipath_devdata *dd) in ipath_ht_txe_recover() argument
485 dev_info(&dd->pcidev->dev, in ipath_ht_txe_recover()
501 static void ipath_ht_handle_hwerrors(struct ipath_devdata *dd, char *msg, in ipath_ht_handle_hwerrors() argument
510 hwerrs = ipath_read_kreg64(dd, dd->ipath_kregs->kr_hwerrstatus); in ipath_ht_handle_hwerrors()
521 ipath_dev_err(dd, "Read of hardware error status failed " in ipath_ht_handle_hwerrors()
532 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrclear, in ipath_ht_handle_hwerrors()
535 hwerrs &= dd->ipath_hwerrmask; in ipath_ht_handle_hwerrors()
539 if (hwerrs & dd->ipath_eep_st_masks[log_idx].hwerrs_to_log) in ipath_ht_handle_hwerrors()
540 ipath_inc_eeprom_err(dd, log_idx, 1); in ipath_ht_handle_hwerrors()
547 if ((hwerrs & ~(dd->ipath_lasthwerror | TXE_PIO_PARITY | in ipath_ht_handle_hwerrors()
550 dev_info(&dd->pcidev->dev, "Hardware error: hwerr=0x%llx " in ipath_ht_handle_hwerrors()
552 dd->ipath_lasthwerror |= hwerrs; in ipath_ht_handle_hwerrors()
554 if (hwerrs & ~dd->ipath_hwe_bitsextant) in ipath_ht_handle_hwerrors()
555 ipath_dev_err(dd, "hwerror interrupt with unknown errors " in ipath_ht_handle_hwerrors()
557 (hwerrs & ~dd->ipath_hwe_bitsextant)); in ipath_ht_handle_hwerrors()
559 ctrl = ipath_read_kreg32(dd, dd->ipath_kregs->kr_control); in ipath_ht_handle_hwerrors()
570 ipath_ht_txe_recover(dd); in ipath_ht_handle_hwerrors()
577 ipath_clear_freeze(dd); in ipath_ht_handle_hwerrors()
603 hwerr_crcbits(dd, hwerrs, msg, msgl); in ipath_ht_handle_hwerrors()
609 dd->ipath_hwerrmask &= ~INFINIPATH_HWE_MEMBISTFAILED; in ipath_ht_handle_hwerrors()
610 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrmask, in ipath_ht_handle_hwerrors()
611 dd->ipath_hwerrmask); in ipath_ht_handle_hwerrors()
626 dd->ipath_hwerrmask &= ~(hwerrs & _IPATH_PLL_FAIL); in ipath_ht_handle_hwerrors()
627 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrmask, in ipath_ht_handle_hwerrors()
628 dd->ipath_hwerrmask); in ipath_ht_handle_hwerrors()
636 dd->ipath_hwerrmask &= ~INFINIPATH_HWE_SERDESPLLFAILED; in ipath_ht_handle_hwerrors()
637 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrmask, in ipath_ht_handle_hwerrors()
638 dd->ipath_hwerrmask); in ipath_ht_handle_hwerrors()
650 if (dd->ipath_flags & IPATH_INITTED) { in ipath_ht_handle_hwerrors()
651 ipath_set_linkstate(dd, IPATH_IB_LINKDOWN); in ipath_ht_handle_hwerrors()
652 ipath_setup_ht_setextled(dd, in ipath_ht_handle_hwerrors()
655 ipath_dev_err(dd, "Fatal Hardware Error (freeze " in ipath_ht_handle_hwerrors()
657 dd->ipath_serial); in ipath_ht_handle_hwerrors()
660 *dd->ipath_statusp &= ~IPATH_STATUS_IB_READY; in ipath_ht_handle_hwerrors()
662 *dd->ipath_statusp |= IPATH_STATUS_HWERROR; in ipath_ht_handle_hwerrors()
668 dd->ipath_flags &= ~IPATH_INITTED; in ipath_ht_handle_hwerrors()
673 ipath_dev_err(dd, "%s hardware error\n", msg); in ipath_ht_handle_hwerrors()
674 if (isfatal && !ipath_diag_inuse && dd->ipath_freezemsg) in ipath_ht_handle_hwerrors()
679 snprintf(dd->ipath_freezemsg, in ipath_ht_handle_hwerrors()
680 dd->ipath_freezelen, "{%s}", msg); in ipath_ht_handle_hwerrors()
693 static int ipath_ht_boardname(struct ipath_devdata *dd, char *name, in ipath_ht_boardname() argument
697 u8 boardrev = dd->ipath_boardrev; in ipath_ht_boardname()
715 ipath_dev_err(dd, "Don't yet know about board " in ipath_ht_boardname()
725 ipath_dev_err(dd, "Unsupported InfiniPath board %s!\n", name); in ipath_ht_boardname()
728 if (dd->ipath_majrev != 3 || (dd->ipath_minrev < 2 || in ipath_ht_boardname()
729 dd->ipath_minrev > 4)) { in ipath_ht_boardname()
733 ipath_dev_err(dd, in ipath_ht_boardname()
735 dd->ipath_majrev, dd->ipath_minrev); in ipath_ht_boardname()
744 dd->ipath_flags |= IPATH_32BITCOUNTERS; in ipath_ht_boardname()
745 dd->ipath_flags |= IPATH_GPIO_INTR; in ipath_ht_boardname()
746 if (dd->ipath_lbus_speed != 800) in ipath_ht_boardname()
747 ipath_dev_err(dd, in ipath_ht_boardname()
749 dd->ipath_lbus_speed); in ipath_ht_boardname()
755 dd->ipath_ureg_align = in ipath_ht_boardname()
756 ipath_read_kreg32(dd, dd->ipath_kregs->kr_pagealign); in ipath_ht_boardname()
762 static void ipath_check_htlink(struct ipath_devdata *dd) in ipath_check_htlink() argument
767 link_off = dd->ipath_ht_slave_off + i * 4 + 0xd; in ipath_check_htlink()
768 if (pci_read_config_byte(dd->pcidev, link_off, &linkerr)) in ipath_check_htlink()
769 dev_info(&dd->pcidev->dev, "Couldn't read " in ipath_check_htlink()
779 if (pci_write_config_byte(dd->pcidev, link_off, in ipath_check_htlink()
783 if (pci_read_config_byte(dd->pcidev, link_off, in ipath_check_htlink()
785 dev_info(&dd->pcidev->dev, in ipath_check_htlink()
789 dev_info(&dd->pcidev->dev, in ipath_check_htlink()
797 static int ipath_setup_ht_reset(struct ipath_devdata *dd) in ipath_setup_ht_reset() argument
814 static void slave_or_pri_blk(struct ipath_devdata *dd, struct pci_dev *pdev, in slave_or_pri_blk() argument
821 dd->ipath_ht_slave_off = pos; in slave_or_pri_blk()
841 ipath_dev_err(dd, "Couldn't read HT link control%d " in slave_or_pri_blk()
891 ipath_dev_err(dd, "Couldn't read HT link width " in slave_or_pri_blk()
914 dd->ipath_lbus_width = width; in slave_or_pri_blk()
917 ipath_dev_err(dd, "Not configured for 16 bit HT " in slave_or_pri_blk()
921 dd->ipath_flags |= IPATH_8BIT_IN_HT0; in slave_or_pri_blk()
931 ipath_dev_err(dd, "Couldn't read HT link frequency " in slave_or_pri_blk()
962 dd->ipath_lbus_speed = speed; in slave_or_pri_blk()
965 snprintf(dd->ipath_lbus_info, sizeof(dd->ipath_lbus_info), in slave_or_pri_blk()
967 dd->ipath_lbus_speed, in slave_or_pri_blk()
968 dd->ipath_lbus_width); in slave_or_pri_blk()
971 static int ipath_ht_intconfig(struct ipath_devdata *dd) in ipath_ht_intconfig() argument
975 if (dd->ipath_intconfig) { in ipath_ht_intconfig()
976 ipath_write_kreg(dd, dd->ipath_kregs->kr_interruptconfig, in ipath_ht_intconfig()
977 dd->ipath_intconfig); /* interrupt address */ in ipath_ht_intconfig()
980 ipath_dev_err(dd, "No interrupts enabled, couldn't setup " in ipath_ht_intconfig()
991 struct ipath_devdata *dd = pci_get_drvdata(dev); in ipath_ht_irq_update() local
992 u64 prev_intconfig = dd->ipath_intconfig; in ipath_ht_irq_update()
994 dd->ipath_intconfig = msg->address_lo; in ipath_ht_irq_update()
995 dd->ipath_intconfig |= ((u64) msg->address_hi) << 32; in ipath_ht_irq_update()
1004 ipath_ht_intconfig(dd); in ipath_ht_irq_update()
1017 static int ipath_setup_ht_config(struct ipath_devdata *dd, in ipath_setup_ht_config() argument
1024 ipath_dev_err(dd, "Couldn't create interrupt handler: " in ipath_setup_ht_config()
1028 dd->ipath_irq = ret; in ipath_setup_ht_config()
1038 ipath_dev_err(dd, "Couldn't find HyperTransport " in ipath_setup_ht_config()
1056 slave_or_pri_blk(dd, pdev, pos, cap_type); in ipath_setup_ht_config()
1060 dd->ipath_flags |= IPATH_SWAP_PIOBUFS; in ipath_setup_ht_config()
1073 static void ipath_setup_ht_cleanup(struct ipath_devdata *dd) in ipath_setup_ht_cleanup() argument
1099 static void ipath_setup_ht_setextled(struct ipath_devdata *dd, in ipath_setup_ht_setextled() argument
1111 if (dd->ipath_led_override) { in ipath_setup_ht_setextled()
1112 ltst = (dd->ipath_led_override & IPATH_LED_PHYS) in ipath_setup_ht_setextled()
1115 lst = (dd->ipath_led_override & IPATH_LED_LOG) in ipath_setup_ht_setextled()
1120 spin_lock_irqsave(&dd->ipath_gpio_lock, flags); in ipath_setup_ht_setextled()
1125 if (dd->ipath_boardrev == 8) { /* LS/X-1 uses different pins */ in ipath_setup_ht_setextled()
1131 extctl = (dd->ipath_extctrl & ~INFINIPATH_EXTC_LEDGBLOK_ON) in ipath_setup_ht_setextled()
1139 extctl = dd->ipath_extctrl & in ipath_setup_ht_setextled()
1147 dd->ipath_extctrl = extctl; in ipath_setup_ht_setextled()
1148 ipath_write_kreg(dd, dd->ipath_kregs->kr_extctrl, extctl); in ipath_setup_ht_setextled()
1149 spin_unlock_irqrestore(&dd->ipath_gpio_lock, flags); in ipath_setup_ht_setextled()
1152 static void ipath_init_ht_variables(struct ipath_devdata *dd) in ipath_init_ht_variables() argument
1158 dd->ipath_kregs = &ipath_ht_kregs; in ipath_init_ht_variables()
1159 dd->ipath_cregs = &ipath_ht_cregs; in ipath_init_ht_variables()
1161 dd->ipath_gpio_sda_num = _IPATH_GPIO_SDA_NUM; in ipath_init_ht_variables()
1162 dd->ipath_gpio_scl_num = _IPATH_GPIO_SCL_NUM; in ipath_init_ht_variables()
1163 dd->ipath_gpio_sda = IPATH_GPIO_SDA; in ipath_init_ht_variables()
1164 dd->ipath_gpio_scl = IPATH_GPIO_SCL; in ipath_init_ht_variables()
1173 dd->ibcs_ls_shift = IBA6110_IBCS_LINKSTATE_SHIFT; in ipath_init_ht_variables()
1174 dd->ibcs_lts_mask = IBA6110_IBCS_LINKTRAININGSTATE_MASK; in ipath_init_ht_variables()
1175 dd->ibcs_mask = (INFINIPATH_IBCS_LINKSTATE_MASK << in ipath_init_ht_variables()
1176 dd->ibcs_ls_shift) | dd->ibcs_lts_mask; in ipath_init_ht_variables()
1177 dd->ib_init = (INFINIPATH_IBCS_LT_STATE_LINKUP << in ipath_init_ht_variables()
1179 (INFINIPATH_IBCS_L_STATE_INIT << dd->ibcs_ls_shift); in ipath_init_ht_variables()
1180 dd->ib_arm = (INFINIPATH_IBCS_LT_STATE_LINKUP << in ipath_init_ht_variables()
1182 (INFINIPATH_IBCS_L_STATE_ARM << dd->ibcs_ls_shift); in ipath_init_ht_variables()
1183 dd->ib_active = (INFINIPATH_IBCS_LT_STATE_LINKUP << in ipath_init_ht_variables()
1185 (INFINIPATH_IBCS_L_STATE_ACTIVE << dd->ibcs_ls_shift); in ipath_init_ht_variables()
1193 dd->ibcc_lic_mask = INFINIPATH_IBCC_LINKINITCMD_MASK; in ipath_init_ht_variables()
1194 dd->ibcc_lc_shift = INFINIPATH_IBCC_LINKCMD_SHIFT; in ipath_init_ht_variables()
1195 dd->ibcc_mpl_shift = INFINIPATH_IBCC_MAXPKTLEN_SHIFT; in ipath_init_ht_variables()
1198 dd->ipath_r_portenable_shift = INFINIPATH_R_PORTENABLE_SHIFT; in ipath_init_ht_variables()
1199 dd->ipath_r_intravail_shift = INFINIPATH_R_INTRAVAIL_SHIFT; in ipath_init_ht_variables()
1200 dd->ipath_r_tailupd_shift = INFINIPATH_R_TAILUPD_SHIFT; in ipath_init_ht_variables()
1201 dd->ipath_r_portcfg_shift = 0; /* Not on IBA6110 */ in ipath_init_ht_variables()
1203 dd->ipath_i_bitsextant = in ipath_init_ht_variables()
1210 dd->ipath_e_bitsextant = in ipath_init_ht_variables()
1228 dd->ipath_hwe_bitsextant = in ipath_init_ht_variables()
1257 dd->ipath_i_rcvavail_mask = INFINIPATH_I_RCVAVAIL_MASK; in ipath_init_ht_variables()
1258 dd->ipath_i_rcvurg_mask = INFINIPATH_I_RCVURG_MASK; in ipath_init_ht_variables()
1259 dd->ipath_i_rcvavail_shift = INFINIPATH_I_RCVAVAIL_SHIFT; in ipath_init_ht_variables()
1260 dd->ipath_i_rcvurg_shift = INFINIPATH_I_RCVURG_SHIFT; in ipath_init_ht_variables()
1266 dd->ipath_eep_st_masks[0].hwerrs_to_log = in ipath_init_ht_variables()
1270 dd->ipath_eep_st_masks[1].hwerrs_to_log = in ipath_init_ht_variables()
1274 dd->ipath_eep_st_masks[2].errs_to_log = INFINIPATH_E_RESET; in ipath_init_ht_variables()
1276 dd->delay_mult = 2; /* SDR, 4X, can't change */ in ipath_init_ht_variables()
1278 dd->ipath_link_width_supported = IB_WIDTH_1X | IB_WIDTH_4X; in ipath_init_ht_variables()
1279 dd->ipath_link_speed_supported = IPATH_IB_SDR; in ipath_init_ht_variables()
1280 dd->ipath_link_width_enabled = IB_WIDTH_4X; in ipath_init_ht_variables()
1281 dd->ipath_link_speed_enabled = dd->ipath_link_speed_supported; in ipath_init_ht_variables()
1283 dd->ipath_link_width_active = dd->ipath_link_width_enabled; in ipath_init_ht_variables()
1284 dd->ipath_link_speed_active = dd->ipath_link_speed_enabled; in ipath_init_ht_variables()
1297 static void ipath_ht_init_hwerrors(struct ipath_devdata *dd) in ipath_ht_init_hwerrors() argument
1302 extsval = ipath_read_kreg64(dd, dd->ipath_kregs->kr_extstatus); in ipath_ht_init_hwerrors()
1305 ipath_dev_err(dd, "MemBIST did not complete!\n"); in ipath_ht_init_hwerrors()
1309 ipath_check_htlink(dd); in ipath_ht_init_hwerrors()
1314 if (dd->ipath_flags & IPATH_8BIT_IN_HT0) in ipath_ht_init_hwerrors()
1317 if (dd->ipath_flags & IPATH_8BIT_IN_HT1) in ipath_ht_init_hwerrors()
1341 if (dd->ipath_boardrev == 4 || dd->ipath_boardrev == 9) in ipath_ht_init_hwerrors()
1343 dd->ipath_hwerrmask = val; in ipath_ht_init_hwerrors()
1353 static int ipath_ht_bringup_serdes(struct ipath_devdata *dd) in ipath_ht_bringup_serdes() argument
1360 if (ipath_read_kreg64(dd, dd->ipath_kregs->kr_hwerrstatus) & in ipath_ht_bringup_serdes()
1365 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrclear, in ipath_ht_bringup_serdes()
1369 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); in ipath_ht_bringup_serdes()
1370 config1 = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig1); in ipath_ht_bringup_serdes()
1376 ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesstatus), in ipath_ht_bringup_serdes()
1378 ipath_read_kreg64(dd, dd->ipath_kregs->kr_xgxsconfig)); in ipath_ht_bringup_serdes()
1384 ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig0, val); in ipath_ht_bringup_serdes()
1394 ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig0, in ipath_ht_bringup_serdes()
1399 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_ht_bringup_serdes()
1415 ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig0, in ipath_ht_bringup_serdes()
1419 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_xgxsconfig); in ipath_ht_bringup_serdes()
1426 INFINIPATH_XGXS_RX_POL_MASK) != dd->ipath_rx_pol_inv ) { in ipath_ht_bringup_serdes()
1430 val |= dd->ipath_rx_pol_inv << in ipath_ht_bringup_serdes()
1435 ipath_write_kreg(dd, dd->ipath_kregs->kr_xgxsconfig, val); in ipath_ht_bringup_serdes()
1437 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); in ipath_ht_bringup_serdes()
1445 ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig1, config1); in ipath_ht_bringup_serdes()
1451 ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesstatus), in ipath_ht_bringup_serdes()
1453 ipath_read_kreg64(dd, dd->ipath_kregs->kr_xgxsconfig)); in ipath_ht_bringup_serdes()
1463 static void ipath_ht_quiet_serdes(struct ipath_devdata *dd) in ipath_ht_quiet_serdes() argument
1465 u64 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); in ipath_ht_quiet_serdes()
1470 ipath_write_kreg(dd, dd->ipath_kregs->kr_serdesconfig0, val); in ipath_ht_quiet_serdes()
1484 static void ipath_ht_put_tid(struct ipath_devdata *dd, in ipath_ht_put_tid() argument
1488 if (!dd->ipath_kregbase) in ipath_ht_put_tid()
1491 if (pa != dd->ipath_tidinvalid) { in ipath_ht_put_tid()
1493 dev_info(&dd->pcidev->dev, in ipath_ht_put_tid()
1499 pa |= dd->ipath_tidtemplate; in ipath_ht_put_tid()
1519 static void ipath_ht_clear_tids(struct ipath_devdata *dd, unsigned port) in ipath_ht_clear_tids() argument
1524 if (!dd->ipath_kregbase) in ipath_ht_clear_tids()
1534 tidbase = (u64 __iomem *) ((char __iomem *)(dd->ipath_kregbase) + in ipath_ht_clear_tids()
1535 dd->ipath_rcvtidbase + in ipath_ht_clear_tids()
1536 port * dd->ipath_rcvtidcnt * in ipath_ht_clear_tids()
1538 for (i = 0; i < dd->ipath_rcvtidcnt; i++) in ipath_ht_clear_tids()
1539 ipath_ht_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EXPECTED, in ipath_ht_clear_tids()
1540 dd->ipath_tidinvalid); in ipath_ht_clear_tids()
1542 tidbase = (u64 __iomem *) ((char __iomem *)(dd->ipath_kregbase) + in ipath_ht_clear_tids()
1543 dd->ipath_rcvegrbase + in ipath_ht_clear_tids()
1544 port * dd->ipath_rcvegrcnt * in ipath_ht_clear_tids()
1547 for (i = 0; i < dd->ipath_rcvegrcnt; i++) in ipath_ht_clear_tids()
1548 ipath_ht_put_tid(dd, &tidbase[i], RCVHQ_RCV_TYPE_EAGER, in ipath_ht_clear_tids()
1549 dd->ipath_tidinvalid); in ipath_ht_clear_tids()
1558 static void ipath_ht_tidtemplate(struct ipath_devdata *dd) in ipath_ht_tidtemplate() argument
1560 dd->ipath_tidtemplate = dd->ipath_ibmaxlen >> 2; in ipath_ht_tidtemplate()
1561 dd->ipath_tidtemplate <<= INFINIPATH_RT_BUFSIZE_SHIFT; in ipath_ht_tidtemplate()
1562 dd->ipath_tidtemplate |= INFINIPATH_RT_VALID; in ipath_ht_tidtemplate()
1568 dd->ipath_tidinvalid = (-1LL & INFINIPATH_RT_BUFSIZE_MASK) << in ipath_ht_tidtemplate()
1572 static int ipath_ht_early_init(struct ipath_devdata *dd) in ipath_ht_early_init() argument
1582 dd->ipath_rcvhdrentsize = 16; in ipath_ht_early_init()
1583 dd->ipath_rcvhdrsize = IPATH_DFLT_RCVHDRSIZE; in ipath_ht_early_init()
1594 dd->ipath_rcvegrbufsize = dd->ipath_piosize2k; in ipath_ht_early_init()
1600 dd->ipath_ibmaxlen = min(dd->ipath_piosize2k, in ipath_ht_early_init()
1601 dd->ipath_rcvegrbufsize); in ipath_ht_early_init()
1602 dd->ipath_init_ibmaxlen = dd->ipath_ibmaxlen; in ipath_ht_early_init()
1603 ipath_ht_tidtemplate(dd); in ipath_ht_early_init()
1614 for (val32 = 0; val32 < dd->ipath_portcnt; val32++) in ipath_ht_early_init()
1615 ipath_ht_clear_tids(dd, val32); in ipath_ht_early_init()
1626 piobuf = (u32 __iomem *) (((char __iomem *)(dd->ipath_kregbase)) + in ipath_ht_early_init()
1627 dd->ipath_piobufbase); in ipath_ht_early_init()
1628 pioincr = dd->ipath_palign / sizeof(*piobuf); in ipath_ht_early_init()
1629 for (i = 0; i < dd->ipath_piobcnt2k; i++) { in ipath_ht_early_init()
1637 ipath_get_eeprom_info(dd); in ipath_ht_early_init()
1638 if (dd->ipath_boardrev == 5) { in ipath_ht_early_init()
1644 if (dd->ipath_serial[0] == '1' && in ipath_ht_early_init()
1645 dd->ipath_serial[1] == '2' && in ipath_ht_early_init()
1646 dd->ipath_serial[2] == '8') in ipath_ht_early_init()
1647 dd->ipath_flags |= IPATH_GPIO_INTR; in ipath_ht_early_init()
1649 ipath_dev_err(dd, "Unsupported InfiniPath board " in ipath_ht_early_init()
1651 dd->ipath_serial); in ipath_ht_early_init()
1656 if (dd->ipath_minrev >= 4) { in ipath_ht_early_init()
1658 dd->ipath_flags |= IPATH_GPIO_ERRINTRS; in ipath_ht_early_init()
1659 dd->ipath_gpio_mask |= IPATH_GPIO_ERRINTR_MASK; in ipath_ht_early_init()
1660 ipath_write_kreg(dd, dd->ipath_kregs->kr_gpio_mask, in ipath_ht_early_init()
1661 dd->ipath_gpio_mask); in ipath_ht_early_init()
1689 static void ipath_ht_free_irq(struct ipath_devdata *dd) in ipath_ht_free_irq() argument
1691 free_irq(dd->ipath_irq, dd); in ipath_ht_free_irq()
1692 ht_destroy_irq(dd->ipath_irq); in ipath_ht_free_irq()
1693 dd->ipath_irq = 0; in ipath_ht_free_irq()
1694 dd->ipath_intconfig = 0; in ipath_ht_free_irq()
1698 ipath_ht_get_msgheader(struct ipath_devdata *dd, __le32 *rhf_addr) in ipath_ht_get_msgheader() argument
1704 static void ipath_ht_config_ports(struct ipath_devdata *dd, ushort cfgports) in ipath_ht_config_ports() argument
1706 dd->ipath_portcnt = in ipath_ht_config_ports()
1707 ipath_read_kreg32(dd, dd->ipath_kregs->kr_portcnt); in ipath_ht_config_ports()
1708 dd->ipath_p0_rcvegrcnt = in ipath_ht_config_ports()
1709 ipath_read_kreg32(dd, dd->ipath_kregs->kr_rcvegrcnt); in ipath_ht_config_ports()
1712 static void ipath_ht_read_counters(struct ipath_devdata *dd, in ipath_ht_read_counters() argument
1716 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(LBIntCnt)); in ipath_ht_read_counters()
1718 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(LBFlowStallCnt)); in ipath_ht_read_counters()
1721 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxUnsupVLErrCnt)); in ipath_ht_read_counters()
1723 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxDataPktCnt)); in ipath_ht_read_counters()
1725 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxFlowPktCnt)); in ipath_ht_read_counters()
1727 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxDwordCnt)); in ipath_ht_read_counters()
1729 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxLenErrCnt)); in ipath_ht_read_counters()
1731 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxMaxMinLenErrCnt)); in ipath_ht_read_counters()
1733 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxUnderrunCnt)); in ipath_ht_read_counters()
1735 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxFlowStallCnt)); in ipath_ht_read_counters()
1737 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(TxDroppedPktCnt)); in ipath_ht_read_counters()
1739 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxDroppedPktCnt)); in ipath_ht_read_counters()
1741 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxDataPktCnt)); in ipath_ht_read_counters()
1743 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxFlowPktCnt)); in ipath_ht_read_counters()
1745 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxDwordCnt)); in ipath_ht_read_counters()
1747 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxLenErrCnt)); in ipath_ht_read_counters()
1749 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxMaxMinLenErrCnt)); in ipath_ht_read_counters()
1751 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxICRCErrCnt)); in ipath_ht_read_counters()
1753 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxVCRCErrCnt)); in ipath_ht_read_counters()
1755 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxFlowCtrlErrCnt)); in ipath_ht_read_counters()
1757 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxBadFormatCnt)); in ipath_ht_read_counters()
1759 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxLinkProblemCnt)); in ipath_ht_read_counters()
1761 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxEBPCnt)); in ipath_ht_read_counters()
1763 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxLPCRCErrCnt)); in ipath_ht_read_counters()
1765 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxBufOvflCnt)); in ipath_ht_read_counters()
1767 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxTIDFullErrCnt)); in ipath_ht_read_counters()
1769 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxTIDValidErrCnt)); in ipath_ht_read_counters()
1771 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxPKeyMismatchCnt)); in ipath_ht_read_counters()
1773 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP0HdrEgrOvflCnt)); in ipath_ht_read_counters()
1775 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP1HdrEgrOvflCnt)); in ipath_ht_read_counters()
1777 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP2HdrEgrOvflCnt)); in ipath_ht_read_counters()
1779 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP3HdrEgrOvflCnt)); in ipath_ht_read_counters()
1781 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP4HdrEgrOvflCnt)); in ipath_ht_read_counters()
1783 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP5HdrEgrOvflCnt)); in ipath_ht_read_counters()
1785 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP6HdrEgrOvflCnt)); in ipath_ht_read_counters()
1787 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP7HdrEgrOvflCnt)); in ipath_ht_read_counters()
1789 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(RxP8HdrEgrOvflCnt)); in ipath_ht_read_counters()
1799 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(IBStatusChangeCnt)); in ipath_ht_read_counters()
1801 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(IBLinkErrRecoveryCnt)); in ipath_ht_read_counters()
1803 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(IBLinkDownedCnt)); in ipath_ht_read_counters()
1805 ipath_snap_cntr(dd, IPATH_CREG_OFFSET(IBSymbolErrCnt)); in ipath_ht_read_counters()
1809 cntrs->ExcessBufferOvflCnt = dd->ipath_overrun_thresh_errs; in ipath_ht_read_counters()
1811 (dd->ipath_flags & IPATH_GPIO_ERRINTRS) ? in ipath_ht_read_counters()
1812 dd->ipath_lli_errs : dd->ipath_lli_errors; in ipath_ht_read_counters()
1819 static int ipath_ht_nointr_fallback(struct ipath_devdata *dd) in ipath_ht_nointr_fallback() argument
1831 static void ipath_ht_xgxs_reset(struct ipath_devdata *dd) in ipath_ht_xgxs_reset() argument
1835 prev_val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_xgxsconfig); in ipath_ht_xgxs_reset()
1838 ipath_write_kreg(dd, dd->ipath_kregs->kr_control, in ipath_ht_xgxs_reset()
1839 dd->ipath_control & ~INFINIPATH_C_LINKENABLE); in ipath_ht_xgxs_reset()
1840 ipath_write_kreg(dd, dd->ipath_kregs->kr_xgxsconfig, val); in ipath_ht_xgxs_reset()
1841 ipath_read_kreg32(dd, dd->ipath_kregs->kr_scratch); in ipath_ht_xgxs_reset()
1842 ipath_write_kreg(dd, dd->ipath_kregs->kr_xgxsconfig, prev_val); in ipath_ht_xgxs_reset()
1843 ipath_write_kreg(dd, dd->ipath_kregs->kr_control, in ipath_ht_xgxs_reset()
1844 dd->ipath_control); in ipath_ht_xgxs_reset()
1848 static int ipath_ht_get_ib_cfg(struct ipath_devdata *dd, int which) in ipath_ht_get_ib_cfg() argument
1854 ret = dd->ipath_link_width_active; in ipath_ht_get_ib_cfg()
1857 ret = dd->ipath_link_speed_active; in ipath_ht_get_ib_cfg()
1860 ret = dd->ipath_link_width_enabled; in ipath_ht_get_ib_cfg()
1863 ret = dd->ipath_link_speed_enabled; in ipath_ht_get_ib_cfg()
1874 static int ipath_ht_set_ib_cfg(struct ipath_devdata *dd, int which, u32 val) in ipath_ht_set_ib_cfg() argument
1879 dd->ipath_link_width_enabled = val; in ipath_ht_set_ib_cfg()
1881 dd->ipath_link_speed_enabled = val; in ipath_ht_set_ib_cfg()
1888 static void ipath_ht_config_jint(struct ipath_devdata *dd, u16 a, u16 b) in ipath_ht_config_jint() argument
1893 static int ipath_ht_ib_updown(struct ipath_devdata *dd, int ibup, u64 ibcs) in ipath_ht_ib_updown() argument
1895 ipath_setup_ht_setextled(dd, ipath_ib_linkstate(dd, ibcs), in ipath_ht_ib_updown()
1896 ipath_ib_linktrstate(dd, ibcs)); in ipath_ht_ib_updown()
1908 void ipath_init_iba6110_funcs(struct ipath_devdata *dd) in ipath_init_iba6110_funcs() argument
1910 dd->ipath_f_intrsetup = ipath_ht_intconfig; in ipath_init_iba6110_funcs()
1911 dd->ipath_f_bus = ipath_setup_ht_config; in ipath_init_iba6110_funcs()
1912 dd->ipath_f_reset = ipath_setup_ht_reset; in ipath_init_iba6110_funcs()
1913 dd->ipath_f_get_boardname = ipath_ht_boardname; in ipath_init_iba6110_funcs()
1914 dd->ipath_f_init_hwerrors = ipath_ht_init_hwerrors; in ipath_init_iba6110_funcs()
1915 dd->ipath_f_early_init = ipath_ht_early_init; in ipath_init_iba6110_funcs()
1916 dd->ipath_f_handle_hwerrors = ipath_ht_handle_hwerrors; in ipath_init_iba6110_funcs()
1917 dd->ipath_f_quiet_serdes = ipath_ht_quiet_serdes; in ipath_init_iba6110_funcs()
1918 dd->ipath_f_bringup_serdes = ipath_ht_bringup_serdes; in ipath_init_iba6110_funcs()
1919 dd->ipath_f_clear_tids = ipath_ht_clear_tids; in ipath_init_iba6110_funcs()
1920 dd->ipath_f_put_tid = ipath_ht_put_tid; in ipath_init_iba6110_funcs()
1921 dd->ipath_f_cleanup = ipath_setup_ht_cleanup; in ipath_init_iba6110_funcs()
1922 dd->ipath_f_setextled = ipath_setup_ht_setextled; in ipath_init_iba6110_funcs()
1923 dd->ipath_f_get_base_info = ipath_ht_get_base_info; in ipath_init_iba6110_funcs()
1924 dd->ipath_f_free_irq = ipath_ht_free_irq; in ipath_init_iba6110_funcs()
1925 dd->ipath_f_tidtemplate = ipath_ht_tidtemplate; in ipath_init_iba6110_funcs()
1926 dd->ipath_f_intr_fallback = ipath_ht_nointr_fallback; in ipath_init_iba6110_funcs()
1927 dd->ipath_f_get_msgheader = ipath_ht_get_msgheader; in ipath_init_iba6110_funcs()
1928 dd->ipath_f_config_ports = ipath_ht_config_ports; in ipath_init_iba6110_funcs()
1929 dd->ipath_f_read_counters = ipath_ht_read_counters; in ipath_init_iba6110_funcs()
1930 dd->ipath_f_xgxs_reset = ipath_ht_xgxs_reset; in ipath_init_iba6110_funcs()
1931 dd->ipath_f_get_ib_cfg = ipath_ht_get_ib_cfg; in ipath_init_iba6110_funcs()
1932 dd->ipath_f_set_ib_cfg = ipath_ht_set_ib_cfg; in ipath_init_iba6110_funcs()
1933 dd->ipath_f_config_jint = ipath_ht_config_jint; in ipath_init_iba6110_funcs()
1934 dd->ipath_f_ib_updown = ipath_ht_ib_updown; in ipath_init_iba6110_funcs()
1939 ipath_init_ht_variables(dd); in ipath_init_iba6110_funcs()