Path: blob/master/arch/ia64/sn/include/xtalk/xbow.h
10820 views
/*1* This file is subject to the terms and conditions of the GNU General Public2* License. See the file "COPYING" in the main directory of this archive3* for more details.4*5* Copyright (C) 1992-1997,2000-2006 Silicon Graphics, Inc. All Rights6* Reserved.7*/8#ifndef _ASM_IA64_SN_XTALK_XBOW_H9#define _ASM_IA64_SN_XTALK_XBOW_H1011#define XBOW_PORT_8 0x812#define XBOW_PORT_C 0xc13#define XBOW_PORT_F 0xf1415#define MAX_XBOW_PORTS 8 /* number of ports on xbow chip */16#define BASE_XBOW_PORT XBOW_PORT_8 /* Lowest external port */1718#define XBOW_CREDIT 41920#define MAX_XBOW_NAME 162122/* Register set for each xbow link */23typedef volatile struct xb_linkregs_s {24/*25* we access these through synergy unswizzled space, so the address26* gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)27* That's why we put the register first and filler second.28*/29u32 link_ibf;30u32 filler0; /* filler for proper alignment */31u32 link_control;32u32 filler1;33u32 link_status;34u32 filler2;35u32 link_arb_upper;36u32 filler3;37u32 link_arb_lower;38u32 filler4;39u32 link_status_clr;40u32 filler5;41u32 link_reset;42u32 filler6;43u32 link_aux_status;44u32 filler7;45} xb_linkregs_t;4647typedef volatile struct xbow_s {48/* standard widget configuration 0x000000-0x000057 */49struct widget_cfg xb_widget; /* 0x000000 */5051/* helper fieldnames for accessing bridge widget */5253#define xb_wid_id xb_widget.w_id54#define xb_wid_stat xb_widget.w_status55#define xb_wid_err_upper xb_widget.w_err_upper_addr56#define xb_wid_err_lower xb_widget.w_err_lower_addr57#define xb_wid_control xb_widget.w_control58#define xb_wid_req_timeout xb_widget.w_req_timeout59#define xb_wid_int_upper xb_widget.w_intdest_upper_addr60#define xb_wid_int_lower xb_widget.w_intdest_lower_addr61#define xb_wid_err_cmdword xb_widget.w_err_cmd_word62#define xb_wid_llp xb_widget.w_llp_cfg63#define xb_wid_stat_clr xb_widget.w_tflush6465/*66* we access these through synergy unswizzled space, so the address67* gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)68* That's why we put the register first and filler second.69*/70/* xbow-specific widget configuration 0x000058-0x0000FF */71u32 xb_wid_arb_reload; /* 0x00005C */72u32 _pad_000058;73u32 xb_perf_ctr_a; /* 0x000064 */74u32 _pad_000060;75u32 xb_perf_ctr_b; /* 0x00006c */76u32 _pad_000068;77u32 xb_nic; /* 0x000074 */78u32 _pad_000070;7980/* Xbridge only */81u32 xb_w0_rst_fnc; /* 0x00007C */82u32 _pad_000078;83u32 xb_l8_rst_fnc; /* 0x000084 */84u32 _pad_000080;85u32 xb_l9_rst_fnc; /* 0x00008c */86u32 _pad_000088;87u32 xb_la_rst_fnc; /* 0x000094 */88u32 _pad_000090;89u32 xb_lb_rst_fnc; /* 0x00009c */90u32 _pad_000098;91u32 xb_lc_rst_fnc; /* 0x0000a4 */92u32 _pad_0000a0;93u32 xb_ld_rst_fnc; /* 0x0000ac */94u32 _pad_0000a8;95u32 xb_le_rst_fnc; /* 0x0000b4 */96u32 _pad_0000b0;97u32 xb_lf_rst_fnc; /* 0x0000bc */98u32 _pad_0000b8;99u32 xb_lock; /* 0x0000c4 */100u32 _pad_0000c0;101u32 xb_lock_clr; /* 0x0000cc */102u32 _pad_0000c8;103/* end of Xbridge only */104u32 _pad_0000d0[12];105106/* Link Specific Registers, port 8..15 0x000100-0x000300 */107xb_linkregs_t xb_link_raw[MAX_XBOW_PORTS];108} xbow_t;109110#define xb_link(p) xb_link_raw[(p) & (MAX_XBOW_PORTS - 1)]111112#define XB_FLAGS_EXISTS 0x1 /* device exists */113#define XB_FLAGS_MASTER 0x2114#define XB_FLAGS_SLAVE 0x0115#define XB_FLAGS_GBR 0x4116#define XB_FLAGS_16BIT 0x8117#define XB_FLAGS_8BIT 0x0118119/* is widget port number valid? (based on version 7.0 of xbow spec) */120#define XBOW_WIDGET_IS_VALID(wid) ((wid) >= XBOW_PORT_8 && (wid) <= XBOW_PORT_F)121122/* whether to use upper or lower arbitration register, given source widget id */123#define XBOW_ARB_IS_UPPER(wid) ((wid) >= XBOW_PORT_8 && (wid) <= XBOW_PORT_B)124#define XBOW_ARB_IS_LOWER(wid) ((wid) >= XBOW_PORT_C && (wid) <= XBOW_PORT_F)125126/* offset of arbitration register, given source widget id */127#define XBOW_ARB_OFF(wid) (XBOW_ARB_IS_UPPER(wid) ? 0x1c : 0x24)128129#define XBOW_WID_ID WIDGET_ID130#define XBOW_WID_STAT WIDGET_STATUS131#define XBOW_WID_ERR_UPPER WIDGET_ERR_UPPER_ADDR132#define XBOW_WID_ERR_LOWER WIDGET_ERR_LOWER_ADDR133#define XBOW_WID_CONTROL WIDGET_CONTROL134#define XBOW_WID_REQ_TO WIDGET_REQ_TIMEOUT135#define XBOW_WID_INT_UPPER WIDGET_INTDEST_UPPER_ADDR136#define XBOW_WID_INT_LOWER WIDGET_INTDEST_LOWER_ADDR137#define XBOW_WID_ERR_CMDWORD WIDGET_ERR_CMD_WORD138#define XBOW_WID_LLP WIDGET_LLP_CFG139#define XBOW_WID_STAT_CLR WIDGET_TFLUSH140#define XBOW_WID_ARB_RELOAD 0x5c141#define XBOW_WID_PERF_CTR_A 0x64142#define XBOW_WID_PERF_CTR_B 0x6c143#define XBOW_WID_NIC 0x74144145/* Xbridge only */146#define XBOW_W0_RST_FNC 0x00007C147#define XBOW_L8_RST_FNC 0x000084148#define XBOW_L9_RST_FNC 0x00008c149#define XBOW_LA_RST_FNC 0x000094150#define XBOW_LB_RST_FNC 0x00009c151#define XBOW_LC_RST_FNC 0x0000a4152#define XBOW_LD_RST_FNC 0x0000ac153#define XBOW_LE_RST_FNC 0x0000b4154#define XBOW_LF_RST_FNC 0x0000bc155#define XBOW_RESET_FENCE(x) ((x) > 7 && (x) < 16) ? \156(XBOW_W0_RST_FNC + ((x) - 7) * 8) : \157((x) == 0) ? XBOW_W0_RST_FNC : 0158#define XBOW_LOCK 0x0000c4159#define XBOW_LOCK_CLR 0x0000cc160/* End of Xbridge only */161162/* used only in ide, but defined here within the reserved portion */163/* of the widget0 address space (before 0xf4) */164#define XBOW_WID_UNDEF 0xe4165166/* xbow link register set base, legal value for x is 0x8..0xf */167#define XB_LINK_BASE 0x100168#define XB_LINK_OFFSET 0x40169#define XB_LINK_REG_BASE(x) (XB_LINK_BASE + ((x) & (MAX_XBOW_PORTS - 1)) * XB_LINK_OFFSET)170171#define XB_LINK_IBUF_FLUSH(x) (XB_LINK_REG_BASE(x) + 0x4)172#define XB_LINK_CTRL(x) (XB_LINK_REG_BASE(x) + 0xc)173#define XB_LINK_STATUS(x) (XB_LINK_REG_BASE(x) + 0x14)174#define XB_LINK_ARB_UPPER(x) (XB_LINK_REG_BASE(x) + 0x1c)175#define XB_LINK_ARB_LOWER(x) (XB_LINK_REG_BASE(x) + 0x24)176#define XB_LINK_STATUS_CLR(x) (XB_LINK_REG_BASE(x) + 0x2c)177#define XB_LINK_RESET(x) (XB_LINK_REG_BASE(x) + 0x34)178#define XB_LINK_AUX_STATUS(x) (XB_LINK_REG_BASE(x) + 0x3c)179180/* link_control(x) */181#define XB_CTRL_LINKALIVE_IE 0x80000000 /* link comes alive */182/* reserved: 0x40000000 */183#define XB_CTRL_PERF_CTR_MODE_MSK 0x30000000 /* perf counter mode */184#define XB_CTRL_IBUF_LEVEL_MSK 0x0e000000 /* input packet buffer185level */186#define XB_CTRL_8BIT_MODE 0x01000000 /* force link into 8187bit mode */188#define XB_CTRL_BAD_LLP_PKT 0x00800000 /* force bad LLP189packet */190#define XB_CTRL_WIDGET_CR_MSK 0x007c0000 /* LLP widget credit191mask */192#define XB_CTRL_WIDGET_CR_SHFT 18 /* LLP widget credit193shift */194#define XB_CTRL_ILLEGAL_DST_IE 0x00020000 /* illegal destination195*/196#define XB_CTRL_OALLOC_IBUF_IE 0x00010000 /* overallocated input197buffer */198/* reserved: 0x0000fe00 */199#define XB_CTRL_BNDWDTH_ALLOC_IE 0x00000100 /* bandwidth alloc */200#define XB_CTRL_RCV_CNT_OFLOW_IE 0x00000080 /* rcv retry overflow */201#define XB_CTRL_XMT_CNT_OFLOW_IE 0x00000040 /* xmt retry overflow */202#define XB_CTRL_XMT_MAX_RTRY_IE 0x00000020 /* max transmit retry */203#define XB_CTRL_RCV_IE 0x00000010 /* receive */204#define XB_CTRL_XMT_RTRY_IE 0x00000008 /* transmit retry */205/* reserved: 0x00000004 */206#define XB_CTRL_MAXREQ_TOUT_IE 0x00000002 /* maximum request207timeout */208#define XB_CTRL_SRC_TOUT_IE 0x00000001 /* source timeout */209210/* link_status(x) */211#define XB_STAT_LINKALIVE XB_CTRL_LINKALIVE_IE212/* reserved: 0x7ff80000 */213#define XB_STAT_MULTI_ERR 0x00040000 /* multi error */214#define XB_STAT_ILLEGAL_DST_ERR XB_CTRL_ILLEGAL_DST_IE215#define XB_STAT_OALLOC_IBUF_ERR XB_CTRL_OALLOC_IBUF_IE216#define XB_STAT_BNDWDTH_ALLOC_ID_MSK 0x0000ff00 /* port bitmask */217#define XB_STAT_RCV_CNT_OFLOW_ERR XB_CTRL_RCV_CNT_OFLOW_IE218#define XB_STAT_XMT_CNT_OFLOW_ERR XB_CTRL_XMT_CNT_OFLOW_IE219#define XB_STAT_XMT_MAX_RTRY_ERR XB_CTRL_XMT_MAX_RTRY_IE220#define XB_STAT_RCV_ERR XB_CTRL_RCV_IE221#define XB_STAT_XMT_RTRY_ERR XB_CTRL_XMT_RTRY_IE222/* reserved: 0x00000004 */223#define XB_STAT_MAXREQ_TOUT_ERR XB_CTRL_MAXREQ_TOUT_IE224#define XB_STAT_SRC_TOUT_ERR XB_CTRL_SRC_TOUT_IE225226/* link_aux_status(x) */227#define XB_AUX_STAT_RCV_CNT 0xff000000228#define XB_AUX_STAT_XMT_CNT 0x00ff0000229#define XB_AUX_STAT_TOUT_DST 0x0000ff00230#define XB_AUX_LINKFAIL_RST_BAD 0x00000040231#define XB_AUX_STAT_PRESENT 0x00000020232#define XB_AUX_STAT_PORT_WIDTH 0x00000010233/* reserved: 0x0000000f */234235/*236* link_arb_upper/link_arb_lower(x), (reg) should be the link_arb_upper237* register if (x) is 0x8..0xb, link_arb_lower if (x) is 0xc..0xf238*/239#define XB_ARB_GBR_MSK 0x1f240#define XB_ARB_RR_MSK 0x7241#define XB_ARB_GBR_SHFT(x) (((x) & 0x3) * 8)242#define XB_ARB_RR_SHFT(x) (((x) & 0x3) * 8 + 5)243#define XB_ARB_GBR_CNT(reg,x) ((reg) >> XB_ARB_GBR_SHFT(x) & XB_ARB_GBR_MSK)244#define XB_ARB_RR_CNT(reg,x) ((reg) >> XB_ARB_RR_SHFT(x) & XB_ARB_RR_MSK)245246/* XBOW_WID_STAT */247#define XB_WID_STAT_LINK_INTR_SHFT (24)248#define XB_WID_STAT_LINK_INTR_MASK (0xFF << XB_WID_STAT_LINK_INTR_SHFT)249#define XB_WID_STAT_LINK_INTR(x) \250(0x1 << (((x)&7) + XB_WID_STAT_LINK_INTR_SHFT))251#define XB_WID_STAT_WIDGET0_INTR 0x00800000252#define XB_WID_STAT_SRCID_MASK 0x000003c0 /* Xbridge only */253#define XB_WID_STAT_REG_ACC_ERR 0x00000020254#define XB_WID_STAT_RECV_TOUT 0x00000010 /* Xbridge only */255#define XB_WID_STAT_ARB_TOUT 0x00000008 /* Xbridge only */256#define XB_WID_STAT_XTALK_ERR 0x00000004257#define XB_WID_STAT_DST_TOUT 0x00000002 /* Xbridge only */258#define XB_WID_STAT_MULTI_ERR 0x00000001259260#define XB_WID_STAT_SRCID_SHFT 6261262/* XBOW_WID_CONTROL */263#define XB_WID_CTRL_REG_ACC_IE XB_WID_STAT_REG_ACC_ERR264#define XB_WID_CTRL_RECV_TOUT XB_WID_STAT_RECV_TOUT265#define XB_WID_CTRL_ARB_TOUT XB_WID_STAT_ARB_TOUT266#define XB_WID_CTRL_XTALK_IE XB_WID_STAT_XTALK_ERR267268/* XBOW_WID_INT_UPPER */269/* defined in xwidget.h for WIDGET_INTDEST_UPPER_ADDR */270271/* XBOW WIDGET part number, in the ID register */272#define XBOW_WIDGET_PART_NUM 0x0 /* crossbow */273#define XXBOW_WIDGET_PART_NUM 0xd000 /* Xbridge */274#define XBOW_WIDGET_MFGR_NUM 0x0275#define XXBOW_WIDGET_MFGR_NUM 0x0276#define PXBOW_WIDGET_PART_NUM 0xd100 /* PIC */277278#define XBOW_REV_1_0 0x1 /* xbow rev 1.0 is "1" */279#define XBOW_REV_1_1 0x2 /* xbow rev 1.1 is "2" */280#define XBOW_REV_1_2 0x3 /* xbow rev 1.2 is "3" */281#define XBOW_REV_1_3 0x4 /* xbow rev 1.3 is "4" */282#define XBOW_REV_2_0 0x5 /* xbow rev 2.0 is "5" */283284#define XXBOW_PART_REV_1_0 (XXBOW_WIDGET_PART_NUM << 4 | 0x1 )285#define XXBOW_PART_REV_2_0 (XXBOW_WIDGET_PART_NUM << 4 | 0x2 )286287/* XBOW_WID_ARB_RELOAD */288#define XBOW_WID_ARB_RELOAD_INT 0x3f /* GBR reload interval */289290#define IS_XBRIDGE_XBOW(wid) \291(XWIDGET_PART_NUM(wid) == XXBOW_WIDGET_PART_NUM && \292XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)293294#define IS_PIC_XBOW(wid) \295(XWIDGET_PART_NUM(wid) == PXBOW_WIDGET_PART_NUM && \296XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)297298#define XBOW_WAR_ENABLED(pv, widid) ((1 << XWIDGET_REV_NUM(widid)) & pv)299300#endif /* _ASM_IA64_SN_XTALK_XBOW_H */301302303