📄 shubio.h
字号:
* Note: Crossbow only has ports for Widgets 8 through F, widget 0 * * refers to Crossbow's internal space. * * This register contains the state elements per widget that are * * necessary to manage the PIO flow control on Crosstalk and on the * * Router Network. See the PIO Flow Control chapter for a complete * * description of this register * * The SPUR_WR bit requires some explanation. When this register is * * written, the new value of the C field is captured in an internal * * register so the hardware can remember what the programmer wrote * * into the credit counter. The SPUR_WR bit sets whenever the C field * * increments above this stored value, which indicates that there * * have been more responses received than requests sent. The SPUR_WR * * bit cannot be cleared until a value is written to the IPRBx * * register; the write will correct the C field and capture its new * * value in the internal register. Even if IECLR[E_PRB_x] is set, the * * SPUR_WR bit will persist if IPRBx hasn't yet been written. * * . * * * ************************************************************************/typedef union ii_iprbf_u { uint64_t ii_iprbf_regval; struct { uint64_t i_c:8; uint64_t i_na:14; uint64_t i_rsvd_2:2; uint64_t i_nb:14; uint64_t i_rsvd_1:2; uint64_t i_m:2; uint64_t i_f:1; uint64_t i_of_cnt:5; uint64_t i_error:1; uint64_t i_rd_to:1; uint64_t i_spur_wr:1; uint64_t i_spur_rd:1; uint64_t i_rsvd:11; uint64_t i_mult_err:1; } ii_iprbe_fld_s;} ii_iprbf_u_t;/************************************************************************ * * * This register specifies the timeout value to use for monitoring * * Crosstalk credits which are used outbound to Crosstalk. An * * internal counter called the Crosstalk Credit Timeout Counter * * increments every 128 II clocks. The counter starts counting * * anytime the credit count drops below a threshold, and resets to * * zero (stops counting) anytime the credit count is at or above the * * threshold. The threshold is 1 credit in direct connect mode and 2 * * in Crossbow connect mode. When the internal Crosstalk Credit * * Timeout Counter reaches the value programmed in this register, a * * Crosstalk Credit Timeout has occurred. The internal counter is not * * readable from software, and stops counting at its maximum value, * * so it cannot cause more than one interrupt. * * * ************************************************************************/typedef union ii_ixcc_u { uint64_t ii_ixcc_regval; struct { uint64_t i_time_out:26; uint64_t i_rsvd:38; } ii_ixcc_fld_s;} ii_ixcc_u_t;/************************************************************************ * * * Description: This register qualifies all the PIO and DMA * * operations launched from widget 0 towards the SHub. In * * addition, it also qualifies accesses by the BTE streams. * * The bits in each field of this register are cleared by the SHub * * upon detection of an error which requires widget 0 or the BTE * * streams to be terminated. Whether or not widget x has access * * rights to this SHub is determined by an AND of the device * * enable bit in the appropriate field of this register and bit 0 in * * the Wx_IAC field. The bits in this field are set by writing a 1 to * * them. Incoming replies from Crosstalk are not subject to this * * access control mechanism. * * * ************************************************************************/typedef union ii_imem_u { uint64_t ii_imem_regval; struct { uint64_t i_w0_esd:1; uint64_t i_rsvd_3:3; uint64_t i_b0_esd:1; uint64_t i_rsvd_2:3; uint64_t i_b1_esd:1; uint64_t i_rsvd_1:3; uint64_t i_clr_precise:1; uint64_t i_rsvd:51; } ii_imem_fld_s;} ii_imem_u_t;/************************************************************************ * * * Description: This register specifies the timeout value to use for * * monitoring Crosstalk tail flits coming into the Shub in the * * TAIL_TO field. An internal counter associated with this register * * is incremented every 128 II internal clocks (7 bits). The counter * * starts counting anytime a header micropacket is received and stops * * counting (and resets to zero) any time a micropacket with a Tail * * bit is received. Once the counter reaches the threshold value * * programmed in this register, it generates an interrupt to the * * processor that is programmed into the IIDSR. The counter saturates * * (does not roll over) at its maximum value, so it cannot cause * * another interrupt until after it is cleared. * * The register also contains the Read Response Timeout values. The * * Prescalar is 23 bits, and counts II clocks. An internal counter * * increments on every II clock and when it reaches the value in the * * Prescalar field, all IPRTE registers with their valid bits set * * have their Read Response timers bumped. Whenever any of them match * * the value in the RRSP_TO field, a Read Response Timeout has * * occurred, and error handling occurs as described in the Error * * Handling section of this document. * * * ************************************************************************/typedef union ii_ixtt_u { uint64_t ii_ixtt_regval; struct { uint64_t i_tail_to:26; uint64_t i_rsvd_1:6; uint64_t i_rrsp_ps:23; uint64_t i_rrsp_to:5; uint64_t i_rsvd:4; } ii_ixtt_fld_s;} ii_ixtt_u_t;/************************************************************************ * * * Writing a 1 to the fields of this register clears the appropriate * * error bits in other areas of SHub. Note that when the * * E_PRB_x bits are used to clear error bits in PRB registers, * * SPUR_RD and SPUR_WR may persist, because they require additional * * action to clear them. See the IPRBx and IXSS Register * * specifications. * * * ************************************************************************/typedef union ii_ieclr_u { uint64_t ii_ieclr_regval; struct { uint64_t i_e_prb_0:1; uint64_t i_rsvd:7; uint64_t i_e_prb_8:1; uint64_t i_e_prb_9:1; uint64_t i_e_prb_a:1; uint64_t i_e_prb_b:1; uint64_t i_e_prb_c:1; uint64_t i_e_prb_d:1; uint64_t i_e_prb_e:1; uint64_t i_e_prb_f:1; uint64_t i_e_crazy:1; uint64_t i_e_bte_0:1; uint64_t i_e_bte_1:1; uint64_t i_reserved_1:10; uint64_t i_spur_rd_hdr:1; uint64_t i_cam_intr_to:1; uint64_t i_cam_overflow:1; uint64_t i_cam_read_miss:1; uint64_t i_ioq_rep_underflow:1; uint64_t i_ioq_req_underflow:1; uint64_t i_ioq_rep_overflow:1; uint64_t i_ioq_req_overflow:1; uint64_t i_iiq_rep_overflow:1; uint64_t i_iiq_req_overflow:1; uint64_t i_ii_xn_rep_cred_overflow:1; uint64_t i_ii_xn_req_cred_overflow:1; uint64_t i_ii_xn_invalid_cmd:1; uint64_t i_xn_ii_invalid_cmd:1; uint64_t i_reserved_2:21; } ii_ieclr_fld_s;} ii_ieclr_u_t;/************************************************************************ * * * This register controls both BTEs. SOFT_RESET is intended for * * recovery after an error. COUNT controls the total number of CRBs * * that both BTEs (combined) can use, which affects total BTE * * bandwidth. * * * ************************************************************************/typedef union ii_ibcr_u { uint64_t ii_ibcr_regval; struct { uint64_t i_count:4; uint64_t i_rsvd_1:4; uint64_t i_soft_reset:1; uint64_t i_rsvd:55; } ii_ibcr_fld_s;} ii_ibcr_u_t;/************************************************************************ * * * This register contains the header of a spurious read response * * received from Crosstalk. A spurious read response is defined as a * * read response received by II from a widget for which (1) the SIDN * * has a value between 1 and 7, inclusive (II never sends requests to * * these widgets (2) there is no valid IPRTE register which * * corresponds to the TNUM, or (3) the widget indicated in SIDN is * * not the same as the widget recorded in the IPRTE register * * referenced by the TNUM. If this condition is true, and if the * * IXSS[VALID] bit is clear, then the header of the spurious read * * response is capture in IXSM and IXSS, and IXSS[VALID] is set. The * * errant header is thereby captured, and no further spurious read * * respones are captured until IXSS[VALID] is cleared by setting the * * appropriate bit in IECLR.Everytime a spurious read response is * * detected, the SPUR_RD bit of the PRB corresponding to the incoming * * message's SIDN field is set. This always happens, regarless of * * whether a header is captured. The programmer should check * * IXSM[SIDN] to determine which widget sent the spurious response, * * because there may be more than one SPUR_RD bit set in the PRB * * registers. The widget indicated by IXSM[SIDN] was the first * * spurious read response to be received since the last time * * IXSS[VALID] was clear. The SPUR_RD bit of the corresponding PRB * * will be set. Any SPUR_RD bits in any other PRB registers indicate * * spurious messages from other widets which were detected after the * * header was captured.. * * * ************************************************************************/typedef union ii_ixsm_u { uint64_t ii_ixsm_regval; struct { uint64_t i_byte_en:32; uint64_t i_reserved:1; uint64_t i_tag:3; uint64_t i_alt_pactyp:4; uint64_t i_bo:1; uint64_t i_error:1; uint64_t i_vbpm:1; uint64_t i_gbr:1; uint64_t i_ds:2; uint64_t i_ct:1; uint64_t i_tnum:5; uint64_t i_pactyp:4; uint64_t i_sidn:4; uint64_t i_didn:4; } ii_ixsm_fld_s;} ii_ixsm_u_t;/************************************************************************ * * * This register contains the sideband bits of a spurious read * * response received from Crosstalk. * * * ************************************************************************/typedef union ii_ixss_u { uint64_t ii_ixss_regval; struct { uint64_t i_sideband:8; uint64_t i_rsvd:55; uint64_t i_valid:1; } ii_ixss_fld_s;} ii_ixss_u_t;/************************************************************************ * * * This register enables software to access the II LLP's test port. * * Refer to the LLP 2.5 documentation for an explanation of the test * * port. Software can write to this register to program the values * * for the control fields (TestErrCapture, TestClear, TestFlit, * * TestMask and TestSeed). Similarly, software can read from this * * register to obtain the values of the test port's status outputs * * (TestCBerr, TestValid and TestData). * * * ************************************************************************/typedef union ii_ilct_u { uint64_t ii_ilct_regval; struct { uint64_t i_test_seed:20; uint64_t i_test_mask:8; uint64_t i_test_data:20; uint64_t i_test_valid:1; uint64_t i_test_cberr:1; uint64_t i_test_flit:3; uint64_t i_test_clear:1; uint64_t i_test_err_capture:1; uint64_t i_rsvd:9; } ii_ilct_fld_s;} ii_ilct_u_t;/************************************************************************ * * * If the II detects an illegal incoming Duplonet packet (request or * * reply) when VALID==0 in the IIEPH1 register, then it saves the * * contents of the packet's header flit in the IIEPH1 and
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -