Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * RapidIO register definitions
0004  *
0005  * Copyright 2005 MontaVista Software, Inc.
0006  * Matt Porter <mporter@kernel.crashing.org>
0007  */
0008 
0009 #ifndef LINUX_RIO_REGS_H
0010 #define LINUX_RIO_REGS_H
0011 
0012 /*
0013  * In RapidIO, each device has a 16MB configuration space that is
0014  * accessed via maintenance transactions.  Portions of configuration
0015  * space are standardized and/or reserved.
0016  */
0017 #define RIO_MAINT_SPACE_SZ  0x1000000 /* 16MB of RapidIO mainenance space */
0018 
0019 #define RIO_DEV_ID_CAR      0x00    /* [I] Device Identity CAR */
0020 #define RIO_DEV_INFO_CAR    0x04    /* [I] Device Information CAR */
0021 #define RIO_ASM_ID_CAR      0x08    /* [I] Assembly Identity CAR */
0022 #define  RIO_ASM_ID_MASK        0xffff0000  /* [I] Asm ID Mask */
0023 #define  RIO_ASM_VEN_ID_MASK        0x0000ffff  /* [I] Asm Vend Mask */
0024 
0025 #define RIO_ASM_INFO_CAR    0x0c    /* [I] Assembly Information CAR */
0026 #define  RIO_ASM_REV_MASK       0xffff0000  /* [I] Asm Rev Mask */
0027 #define  RIO_EXT_FTR_PTR_MASK       0x0000ffff  /* [I] EF_PTR Mask */
0028 
0029 #define RIO_PEF_CAR     0x10    /* [I] Processing Element Features CAR */
0030 #define  RIO_PEF_BRIDGE         0x80000000  /* [I] Bridge */
0031 #define  RIO_PEF_MEMORY         0x40000000  /* [I] MMIO */
0032 #define  RIO_PEF_PROCESSOR      0x20000000  /* [I] Processor */
0033 #define  RIO_PEF_SWITCH         0x10000000  /* [I] Switch */
0034 #define  RIO_PEF_MULTIPORT      0x08000000  /* [VI, 2.1] Multiport */
0035 #define  RIO_PEF_INB_MBOX       0x00f00000  /* [II, <= 1.2] Mailboxes */
0036 #define  RIO_PEF_INB_MBOX0      0x00800000  /* [II, <= 1.2] Mailbox 0 */
0037 #define  RIO_PEF_INB_MBOX1      0x00400000  /* [II, <= 1.2] Mailbox 1 */
0038 #define  RIO_PEF_INB_MBOX2      0x00200000  /* [II, <= 1.2] Mailbox 2 */
0039 #define  RIO_PEF_INB_MBOX3      0x00100000  /* [II, <= 1.2] Mailbox 3 */
0040 #define  RIO_PEF_INB_DOORBELL       0x00080000  /* [II, <= 1.2] Doorbells */
0041 #define  RIO_PEF_DEV32          0x00001000  /* [III] PE supports Common TRansport Dev32 */
0042 #define  RIO_PEF_EXT_RT         0x00000200  /* [III, 1.3] Extended route table support */
0043 #define  RIO_PEF_STD_RT         0x00000100  /* [III, 1.3] Standard route table support */
0044 #define  RIO_PEF_CTLS           0x00000010  /* [III] Common Transport Large System (< rev.3) */
0045 #define  RIO_PEF_DEV16          0x00000010  /* [III] PE Supports Common Transport Dev16 (rev.3) */
0046 #define  RIO_PEF_EXT_FEATURES       0x00000008  /* [I] EFT_PTR valid */
0047 #define  RIO_PEF_ADDR_66        0x00000004  /* [I] 66 bits */
0048 #define  RIO_PEF_ADDR_50        0x00000002  /* [I] 50 bits */
0049 #define  RIO_PEF_ADDR_34        0x00000001  /* [I] 34 bits */
0050 
0051 #define RIO_SWP_INFO_CAR    0x14    /* [I] Switch Port Information CAR */
0052 #define  RIO_SWP_INFO_PORT_TOTAL_MASK   0x0000ff00  /* [I] Total number of ports */
0053 #define  RIO_SWP_INFO_PORT_NUM_MASK 0x000000ff  /* [I] Maintenance transaction port number */
0054 #define  RIO_GET_TOTAL_PORTS(x)     ((x & RIO_SWP_INFO_PORT_TOTAL_MASK) >> 8)
0055 #define  RIO_GET_PORT_NUM(x)        (x & RIO_SWP_INFO_PORT_NUM_MASK)
0056 
0057 #define RIO_SRC_OPS_CAR     0x18    /* [I] Source Operations CAR */
0058 #define  RIO_SRC_OPS_READ       0x00008000  /* [I] Read op */
0059 #define  RIO_SRC_OPS_WRITE      0x00004000  /* [I] Write op */
0060 #define  RIO_SRC_OPS_STREAM_WRITE   0x00002000  /* [I] Str-write op */
0061 #define  RIO_SRC_OPS_WRITE_RESPONSE 0x00001000  /* [I] Write/resp op */
0062 #define  RIO_SRC_OPS_DATA_MSG       0x00000800  /* [II] Data msg op */
0063 #define  RIO_SRC_OPS_DOORBELL       0x00000400  /* [II] Doorbell op */
0064 #define  RIO_SRC_OPS_ATOMIC_TST_SWP 0x00000100  /* [I] Atomic TAS op */
0065 #define  RIO_SRC_OPS_ATOMIC_INC     0x00000080  /* [I] Atomic inc op */
0066 #define  RIO_SRC_OPS_ATOMIC_DEC     0x00000040  /* [I] Atomic dec op */
0067 #define  RIO_SRC_OPS_ATOMIC_SET     0x00000020  /* [I] Atomic set op */
0068 #define  RIO_SRC_OPS_ATOMIC_CLR     0x00000010  /* [I] Atomic clr op */
0069 #define  RIO_SRC_OPS_PORT_WRITE     0x00000004  /* [I] Port-write op */
0070 
0071 #define RIO_DST_OPS_CAR     0x1c    /* Destination Operations CAR */
0072 #define  RIO_DST_OPS_READ       0x00008000  /* [I] Read op */
0073 #define  RIO_DST_OPS_WRITE      0x00004000  /* [I] Write op */
0074 #define  RIO_DST_OPS_STREAM_WRITE   0x00002000  /* [I] Str-write op */
0075 #define  RIO_DST_OPS_WRITE_RESPONSE 0x00001000  /* [I] Write/resp op */
0076 #define  RIO_DST_OPS_DATA_MSG       0x00000800  /* [II] Data msg op */
0077 #define  RIO_DST_OPS_DOORBELL       0x00000400  /* [II] Doorbell op */
0078 #define  RIO_DST_OPS_ATOMIC_TST_SWP 0x00000100  /* [I] Atomic TAS op */
0079 #define  RIO_DST_OPS_ATOMIC_INC     0x00000080  /* [I] Atomic inc op */
0080 #define  RIO_DST_OPS_ATOMIC_DEC     0x00000040  /* [I] Atomic dec op */
0081 #define  RIO_DST_OPS_ATOMIC_SET     0x00000020  /* [I] Atomic set op */
0082 #define  RIO_DST_OPS_ATOMIC_CLR     0x00000010  /* [I] Atomic clr op */
0083 #define  RIO_DST_OPS_PORT_WRITE     0x00000004  /* [I] Port-write op */
0084 
0085 #define  RIO_OPS_READ           0x00008000  /* [I] Read op */
0086 #define  RIO_OPS_WRITE          0x00004000  /* [I] Write op */
0087 #define  RIO_OPS_STREAM_WRITE       0x00002000  /* [I] Str-write op */
0088 #define  RIO_OPS_WRITE_RESPONSE     0x00001000  /* [I] Write/resp op */
0089 #define  RIO_OPS_DATA_MSG       0x00000800  /* [II] Data msg op */
0090 #define  RIO_OPS_DOORBELL       0x00000400  /* [II] Doorbell op */
0091 #define  RIO_OPS_ATOMIC_TST_SWP     0x00000100  /* [I] Atomic TAS op */
0092 #define  RIO_OPS_ATOMIC_INC     0x00000080  /* [I] Atomic inc op */
0093 #define  RIO_OPS_ATOMIC_DEC     0x00000040  /* [I] Atomic dec op */
0094 #define  RIO_OPS_ATOMIC_SET     0x00000020  /* [I] Atomic set op */
0095 #define  RIO_OPS_ATOMIC_CLR     0x00000010  /* [I] Atomic clr op */
0096 #define  RIO_OPS_PORT_WRITE     0x00000004  /* [I] Port-write op */
0097 
0098                     /* 0x20-0x30 *//* Reserved */
0099 
0100 #define RIO_SWITCH_RT_LIMIT 0x34    /* [III, 1.3] Switch Route Table Destination ID Limit CAR */
0101 #define  RIO_RT_MAX_DESTID      0x0000ffff
0102 
0103 #define RIO_MBOX_CSR        0x40    /* [II, <= 1.2] Mailbox CSR */
0104 #define  RIO_MBOX0_AVAIL        0x80000000  /* [II] Mbox 0 avail */
0105 #define  RIO_MBOX0_FULL         0x40000000  /* [II] Mbox 0 full */
0106 #define  RIO_MBOX0_EMPTY        0x20000000  /* [II] Mbox 0 empty */
0107 #define  RIO_MBOX0_BUSY         0x10000000  /* [II] Mbox 0 busy */
0108 #define  RIO_MBOX0_FAIL         0x08000000  /* [II] Mbox 0 fail */
0109 #define  RIO_MBOX0_ERROR        0x04000000  /* [II] Mbox 0 error */
0110 #define  RIO_MBOX1_AVAIL        0x00800000  /* [II] Mbox 1 avail */
0111 #define  RIO_MBOX1_FULL         0x00200000  /* [II] Mbox 1 full */
0112 #define  RIO_MBOX1_EMPTY        0x00200000  /* [II] Mbox 1 empty */
0113 #define  RIO_MBOX1_BUSY         0x00100000  /* [II] Mbox 1 busy */
0114 #define  RIO_MBOX1_FAIL         0x00080000  /* [II] Mbox 1 fail */
0115 #define  RIO_MBOX1_ERROR        0x00040000  /* [II] Mbox 1 error */
0116 #define  RIO_MBOX2_AVAIL        0x00008000  /* [II] Mbox 2 avail */
0117 #define  RIO_MBOX2_FULL         0x00004000  /* [II] Mbox 2 full */
0118 #define  RIO_MBOX2_EMPTY        0x00002000  /* [II] Mbox 2 empty */
0119 #define  RIO_MBOX2_BUSY         0x00001000  /* [II] Mbox 2 busy */
0120 #define  RIO_MBOX2_FAIL         0x00000800  /* [II] Mbox 2 fail */
0121 #define  RIO_MBOX2_ERROR        0x00000400  /* [II] Mbox 2 error */
0122 #define  RIO_MBOX3_AVAIL        0x00000080  /* [II] Mbox 3 avail */
0123 #define  RIO_MBOX3_FULL         0x00000040  /* [II] Mbox 3 full */
0124 #define  RIO_MBOX3_EMPTY        0x00000020  /* [II] Mbox 3 empty */
0125 #define  RIO_MBOX3_BUSY         0x00000010  /* [II] Mbox 3 busy */
0126 #define  RIO_MBOX3_FAIL         0x00000008  /* [II] Mbox 3 fail */
0127 #define  RIO_MBOX3_ERROR        0x00000004  /* [II] Mbox 3 error */
0128 
0129 #define RIO_WRITE_PORT_CSR  0x44    /* [I, <= 1.2] Write Port CSR */
0130 #define RIO_DOORBELL_CSR    0x44    /* [II, <= 1.2] Doorbell CSR */
0131 #define  RIO_DOORBELL_AVAIL     0x80000000  /* [II] Doorbell avail */
0132 #define  RIO_DOORBELL_FULL      0x40000000  /* [II] Doorbell full */
0133 #define  RIO_DOORBELL_EMPTY     0x20000000  /* [II] Doorbell empty */
0134 #define  RIO_DOORBELL_BUSY      0x10000000  /* [II] Doorbell busy */
0135 #define  RIO_DOORBELL_FAILED        0x08000000  /* [II] Doorbell failed */
0136 #define  RIO_DOORBELL_ERROR     0x04000000  /* [II] Doorbell error */
0137 #define  RIO_WRITE_PORT_AVAILABLE   0x00000080  /* [I] Write Port Available */
0138 #define  RIO_WRITE_PORT_FULL        0x00000040  /* [I] Write Port Full */
0139 #define  RIO_WRITE_PORT_EMPTY       0x00000020  /* [I] Write Port Empty */
0140 #define  RIO_WRITE_PORT_BUSY        0x00000010  /* [I] Write Port Busy */
0141 #define  RIO_WRITE_PORT_FAILED      0x00000008  /* [I] Write Port Failed */
0142 #define  RIO_WRITE_PORT_ERROR       0x00000004  /* [I] Write Port Error */
0143 
0144                     /* 0x48 *//* Reserved */
0145 
0146 #define RIO_PELL_CTRL_CSR   0x4c    /* [I] PE Logical Layer Control CSR */
0147 #define   RIO_PELL_ADDR_66      0x00000004  /* [I] 66-bit addr */
0148 #define   RIO_PELL_ADDR_50      0x00000002  /* [I] 50-bit addr */
0149 #define   RIO_PELL_ADDR_34      0x00000001  /* [I] 34-bit addr */
0150 
0151                     /* 0x50-0x54 *//* Reserved */
0152 
0153 #define RIO_LCSH_BA     0x58    /* [I] LCS High Base Address */
0154 #define RIO_LCSL_BA     0x5c    /* [I] LCS Base Address */
0155 
0156 #define RIO_DID_CSR     0x60    /* [III] Base Device ID CSR */
0157 
0158                     /* 0x64 *//* Reserved */
0159 
0160 #define RIO_HOST_DID_LOCK_CSR   0x68    /* [III] Host Base Device ID Lock CSR */
0161 #define RIO_COMPONENT_TAG_CSR   0x6c    /* [III] Component Tag CSR */
0162 
0163 #define RIO_STD_RTE_CONF_DESTID_SEL_CSR 0x70
0164 #define  RIO_STD_RTE_CONF_EXTCFGEN      0x80000000
0165 #define RIO_STD_RTE_CONF_PORT_SEL_CSR   0x74
0166 #define RIO_STD_RTE_DEFAULT_PORT    0x78
0167 
0168                     /* 0x7c-0xf8 *//* Reserved */
0169                     /* 0x100-0xfff8 *//* [I] Extended Features Space */
0170                     /* 0x10000-0xfffff8 *//* [I] Implementation-defined Space */
0171 
0172 /*
0173  * Extended Features Space is a configuration space area where
0174  * functionality is mapped into extended feature blocks via a
0175  * singly linked list of extended feature pointers (EFT_PTR).
0176  *
0177  * Each extended feature block can be identified/located in
0178  * Extended Features Space by walking the extended feature
0179  * list starting with the Extended Feature Pointer located
0180  * in the Assembly Information CAR.
0181  *
0182  * Extended Feature Blocks (EFBs) are identified with an assigned
0183  * EFB ID. Extended feature block offsets in the definitions are
0184  * relative to the offset of the EFB within the  Extended Features
0185  * Space.
0186  */
0187 
0188 /* Helper macros to parse the Extended Feature Block header */
0189 #define RIO_EFB_PTR_MASK    0xffff0000
0190 #define RIO_EFB_ID_MASK     0x0000ffff
0191 #define RIO_GET_BLOCK_PTR(x)    ((x & RIO_EFB_PTR_MASK) >> 16)
0192 #define RIO_GET_BLOCK_ID(x) (x & RIO_EFB_ID_MASK)
0193 
0194 /* Extended Feature Block IDs */
0195 #define RIO_EFB_SER_EP_M1_ID    0x0001  /* [VI] LP-Serial EP Devices, Map I */
0196 #define RIO_EFB_SER_EP_SW_M1_ID 0x0002  /* [VI] LP-Serial EP w SW Recovery Devices, Map I */
0197 #define RIO_EFB_SER_EPF_M1_ID   0x0003  /* [VI] LP-Serial EP Free Devices, Map I */
0198 #define RIO_EFB_SER_EP_ID   0x0004  /* [VI] LP-Serial EP Devices, RIO 1.2 */
0199 #define RIO_EFB_SER_EP_REC_ID   0x0005  /* [VI] LP-Serial EP w SW Recovery Devices, RIO 1.2 */
0200 #define RIO_EFB_SER_EP_FREE_ID  0x0006  /* [VI] LP-Serial EP Free Devices, RIO 1.2 */
0201 #define RIO_EFB_ERR_MGMNT   0x0007  /* [VIII] Error Management Extensions */
0202 #define RIO_EFB_SER_EPF_SW_M1_ID    0x0009  /* [VI] LP-Serial EP Free w SW Recovery Devices, Map I */
0203 #define RIO_EFB_SW_ROUTING_TBL  0x000E  /* [III] Switch Routing Table Block */
0204 #define RIO_EFB_SER_EP_M2_ID    0x0011  /* [VI] LP-Serial EP Devices, Map II */
0205 #define RIO_EFB_SER_EP_SW_M2_ID 0x0012  /* [VI] LP-Serial EP w SW Recovery Devices, Map II */
0206 #define RIO_EFB_SER_EPF_M2_ID   0x0013  /* [VI] LP-Serial EP Free Devices, Map II */
0207 #define RIO_EFB_ERR_MGMNT_HS    0x0017  /* [VIII] Error Management Extensions, Hot-Swap only */
0208 #define RIO_EFB_SER_EPF_SW_M2_ID    0x0019  /* [VI] LP-Serial EP Free w SW Recovery Devices, Map II */
0209 
0210 /*
0211  * Physical LP-Serial Registers Definitions
0212  * Parameters in register macros:
0213  *    n - port number, m - Register Map Type (1 or 2)
0214  */
0215 #define RIO_PORT_MNT_HEADER     0x0000
0216 #define RIO_PORT_REQ_CTL_CSR        0x0020
0217 #define RIO_PORT_RSP_CTL_CSR        0x0024
0218 #define RIO_PORT_LINKTO_CTL_CSR     0x0020
0219 #define RIO_PORT_RSPTO_CTL_CSR      0x0024
0220 #define RIO_PORT_GEN_CTL_CSR        0x003c
0221 #define  RIO_PORT_GEN_HOST      0x80000000
0222 #define  RIO_PORT_GEN_MASTER        0x40000000
0223 #define  RIO_PORT_GEN_DISCOVERED    0x20000000
0224 #define RIO_PORT_N_MNT_REQ_CSR(n, m)    (0x40 + (n) * (0x20 * (m)))
0225 #define  RIO_MNT_REQ_CMD_RD     0x03    /* Reset-device command */
0226 #define  RIO_MNT_REQ_CMD_IS     0x04    /* Input-status command */
0227 #define RIO_PORT_N_MNT_RSP_CSR(n, m)    (0x44 + (n) * (0x20 * (m)))
0228 #define  RIO_PORT_N_MNT_RSP_RVAL    0x80000000 /* Response Valid */
0229 #define  RIO_PORT_N_MNT_RSP_ASTAT   0x000007e0 /* ackID Status */
0230 #define  RIO_PORT_N_MNT_RSP_LSTAT   0x0000001f /* Link Status */
0231 #define RIO_PORT_N_ACK_STS_CSR(n)   (0x48 + (n) * 0x20) /* Only in RM-I */
0232 #define  RIO_PORT_N_ACK_CLEAR       0x80000000
0233 #define  RIO_PORT_N_ACK_INBOUND     0x3f000000
0234 #define  RIO_PORT_N_ACK_OUTSTAND    0x00003f00
0235 #define  RIO_PORT_N_ACK_OUTBOUND    0x0000003f
0236 #define RIO_PORT_N_CTL2_CSR(n, m)   (0x54 + (n) * (0x20 * (m)))
0237 #define  RIO_PORT_N_CTL2_SEL_BAUD   0xf0000000
0238 #define RIO_PORT_N_ERR_STS_CSR(n, m)    (0x58 + (n) * (0x20 * (m)))
0239 #define  RIO_PORT_N_ERR_STS_OUT_ES  0x00010000 /* Output Error-stopped */
0240 #define  RIO_PORT_N_ERR_STS_INP_ES  0x00000100 /* Input Error-stopped */
0241 #define  RIO_PORT_N_ERR_STS_PW_PEND 0x00000010 /* Port-Write Pending */
0242 #define  RIO_PORT_N_ERR_STS_PORT_UA 0x00000008 /* Port Unavailable */
0243 #define  RIO_PORT_N_ERR_STS_PORT_ERR    0x00000004
0244 #define  RIO_PORT_N_ERR_STS_PORT_OK 0x00000002
0245 #define  RIO_PORT_N_ERR_STS_PORT_UNINIT 0x00000001
0246 #define RIO_PORT_N_CTL_CSR(n, m)    (0x5c + (n) * (0x20 * (m)))
0247 #define  RIO_PORT_N_CTL_PWIDTH      0xc0000000
0248 #define  RIO_PORT_N_CTL_PWIDTH_1    0x00000000
0249 #define  RIO_PORT_N_CTL_PWIDTH_4    0x40000000
0250 #define  RIO_PORT_N_CTL_IPW     0x38000000 /* Initialized Port Width */
0251 #define  RIO_PORT_N_CTL_P_TYP_SER   0x00000001
0252 #define  RIO_PORT_N_CTL_LOCKOUT     0x00000002
0253 #define  RIO_PORT_N_CTL_EN_RX       0x00200000
0254 #define  RIO_PORT_N_CTL_EN_TX       0x00400000
0255 #define RIO_PORT_N_OB_ACK_CSR(n)    (0x60 + (n) * 0x40) /* Only in RM-II */
0256 #define  RIO_PORT_N_OB_ACK_CLEAR    0x80000000
0257 #define  RIO_PORT_N_OB_ACK_OUTSTD   0x00fff000
0258 #define  RIO_PORT_N_OB_ACK_OUTBND   0x00000fff
0259 #define RIO_PORT_N_IB_ACK_CSR(n)    (0x64 + (n) * 0x40) /* Only in RM-II */
0260 #define  RIO_PORT_N_IB_ACK_INBND    0x00000fff
0261 
0262 /*
0263  * Device-based helper macros for serial port register access.
0264  *   d - pointer to rapidio device object, n - port number
0265  */
0266 
0267 #define RIO_DEV_PORT_N_MNT_REQ_CSR(d, n)    \
0268         (d->phys_efptr + RIO_PORT_N_MNT_REQ_CSR(n, d->phys_rmap))
0269 
0270 #define RIO_DEV_PORT_N_MNT_RSP_CSR(d, n)    \
0271         (d->phys_efptr + RIO_PORT_N_MNT_RSP_CSR(n, d->phys_rmap))
0272 
0273 #define RIO_DEV_PORT_N_ACK_STS_CSR(d, n)    \
0274         (d->phys_efptr + RIO_PORT_N_ACK_STS_CSR(n))
0275 
0276 #define RIO_DEV_PORT_N_CTL2_CSR(d, n)       \
0277         (d->phys_efptr + RIO_PORT_N_CTL2_CSR(n, d->phys_rmap))
0278 
0279 #define RIO_DEV_PORT_N_ERR_STS_CSR(d, n)    \
0280         (d->phys_efptr + RIO_PORT_N_ERR_STS_CSR(n, d->phys_rmap))
0281 
0282 #define RIO_DEV_PORT_N_CTL_CSR(d, n)        \
0283         (d->phys_efptr + RIO_PORT_N_CTL_CSR(n, d->phys_rmap))
0284 
0285 #define RIO_DEV_PORT_N_OB_ACK_CSR(d, n)     \
0286         (d->phys_efptr + RIO_PORT_N_OB_ACK_CSR(n))
0287 
0288 #define RIO_DEV_PORT_N_IB_ACK_CSR(d, n)     \
0289         (d->phys_efptr + RIO_PORT_N_IB_ACK_CSR(n))
0290 
0291 /*
0292  * Error Management Extensions (RapidIO 1.3+, Part 8)
0293  *
0294  * Extended Features Block ID=0x0007
0295  */
0296 
0297 /* General EM Registers (Common for all Ports) */
0298 
0299 #define RIO_EM_EFB_HEADER   0x000   /* Error Management Extensions Block Header */
0300 #define RIO_EM_EMHS_CAR     0x004   /* EM Functionality CAR */
0301 #define RIO_EM_LTL_ERR_DETECT   0x008   /* Logical/Transport Layer Error Detect CSR */
0302 #define RIO_EM_LTL_ERR_EN   0x00c   /* Logical/Transport Layer Error Enable CSR */
0303 #define  REM_LTL_ERR_ILLTRAN        0x08000000 /* Illegal Transaction decode */
0304 #define  REM_LTL_ERR_UNSOLR     0x00800000 /* Unsolicited Response */
0305 #define  REM_LTL_ERR_UNSUPTR        0x00400000 /* Unsupported Transaction */
0306 #define  REM_LTL_ERR_IMPSPEC        0x000000ff /* Implementation Specific */
0307 #define RIO_EM_LTL_HIADDR_CAP   0x010   /* Logical/Transport Layer High Address Capture CSR */
0308 #define RIO_EM_LTL_ADDR_CAP 0x014   /* Logical/Transport Layer Address Capture CSR */
0309 #define RIO_EM_LTL_DEVID_CAP    0x018   /* Logical/Transport Layer Device ID Capture CSR */
0310 #define RIO_EM_LTL_CTRL_CAP 0x01c   /* Logical/Transport Layer Control Capture CSR */
0311 #define RIO_EM_LTL_DID32_CAP    0x020   /* Logical/Transport Layer Dev32 DestID Capture CSR */
0312 #define RIO_EM_LTL_SID32_CAP    0x024   /* Logical/Transport Layer Dev32  source ID Capture CSR */
0313 #define RIO_EM_PW_TGT_DEVID 0x028   /* Port-write Target deviceID CSR */
0314 #define  RIO_EM_PW_TGT_DEVID_D16M   0xff000000  /* Port-write Target DID16 MSB */
0315 #define  RIO_EM_PW_TGT_DEVID_D8     0x00ff0000  /* Port-write Target DID16 LSB or DID8 */
0316 #define  RIO_EM_PW_TGT_DEVID_DEV16  0x00008000  /* Port-write Target DID16 LSB or DID8 */
0317 #define  RIO_EM_PW_TGT_DEVID_DEV32  0x00004000  /* Port-write Target DID16 LSB or DID8 */
0318 #define RIO_EM_PKT_TTL      0x02c   /* Packet Time-to-live CSR */
0319 #define RIO_EM_PKT_TTL_VAL      0xffff0000  /* Packet Time-to-live value */
0320 #define RIO_EM_PW_TGT32_DEVID   0x030   /* Port-write Dev32 Target deviceID CSR */
0321 #define RIO_EM_PW_TX_CTRL   0x034   /* Port-write Transmission Control CSR */
0322 #define RIO_EM_PW_TX_CTRL_PW_DIS    0x00000001  /* Port-write Transmission Disable bit */
0323 
0324 /* Per-Port EM Registers */
0325 
0326 #define RIO_EM_PN_ERR_DETECT(x) (0x040 + x*0x40) /* Port N Error Detect CSR */
0327 #define  REM_PED_IMPL_SPEC      0x80000000
0328 #define  REM_PED_LINK_OK2U      0x40000000 /* Link OK to Uninit transition */
0329 #define  REM_PED_LINK_UPDA      0x20000000 /* Link Uninit Packet Discard Active */
0330 #define  REM_PED_LINK_U2OK      0x10000000 /* Link Uninit to OK transition */
0331 #define  REM_PED_LINK_TO        0x00000001
0332 
0333 #define RIO_EM_PN_ERRRATE_EN(x) (0x044 + x*0x40) /* Port N Error Rate Enable CSR */
0334 #define RIO_EM_PN_ERRRATE_EN_OK2U   0x40000000 /* Enable notification for OK2U */
0335 #define RIO_EM_PN_ERRRATE_EN_UPDA   0x20000000 /* Enable notification for UPDA */
0336 #define RIO_EM_PN_ERRRATE_EN_U2OK   0x10000000 /* Enable notification for U2OK */
0337 
0338 #define RIO_EM_PN_ATTRIB_CAP(x) (0x048 + x*0x40) /* Port N Attributes Capture CSR */
0339 #define RIO_EM_PN_PKT_CAP_0(x)  (0x04c + x*0x40) /* Port N Packet/Control Symbol Capture 0 CSR */
0340 #define RIO_EM_PN_PKT_CAP_1(x)  (0x050 + x*0x40) /* Port N Packet Capture 1 CSR */
0341 #define RIO_EM_PN_PKT_CAP_2(x)  (0x054 + x*0x40) /* Port N Packet Capture 2 CSR */
0342 #define RIO_EM_PN_PKT_CAP_3(x)  (0x058 + x*0x40) /* Port N Packet Capture 3 CSR */
0343 #define RIO_EM_PN_ERRRATE(x)    (0x068 + x*0x40) /* Port N Error Rate CSR */
0344 #define RIO_EM_PN_ERRRATE_TR(x) (0x06c + x*0x40) /* Port N Error Rate Threshold CSR */
0345 #define RIO_EM_PN_LINK_UDT(x)   (0x070 + x*0x40) /* Port N Link Uninit Discard Timer CSR */
0346 #define RIO_EM_PN_LINK_UDT_TO       0xffffff00 /* Link Uninit Timeout value */
0347 
0348 /*
0349  * Switch Routing Table Register Block ID=0x000E (RapidIO 3.0+, part 3)
0350  * Register offsets are defined from beginning of the block.
0351  */
0352 
0353 /* Broadcast Routing Table Control CSR */
0354 #define RIO_BC_RT_CTL_CSR   0x020
0355 #define  RIO_RT_CTL_THREE_LVL       0x80000000
0356 #define  RIO_RT_CTL_DEV32_RT_CTRL   0x40000000
0357 #define  RIO_RT_CTL_MC_MASK_SZ      0x03000000 /* 3.0+ Part 11: Multicast */
0358 
0359 /* Broadcast Level 0 Info CSR */
0360 #define RIO_BC_RT_LVL0_INFO_CSR 0x030
0361 #define  RIO_RT_L0I_NUM_GR      0xff000000
0362 #define  RIO_RT_L0I_GR_PTR      0x00fffc00
0363 
0364 /* Broadcast Level 1 Info CSR */
0365 #define RIO_BC_RT_LVL1_INFO_CSR 0x034
0366 #define  RIO_RT_L1I_NUM_GR      0xff000000
0367 #define  RIO_RT_L1I_GR_PTR      0x00fffc00
0368 
0369 /* Broadcast Level 2 Info CSR */
0370 #define RIO_BC_RT_LVL2_INFO_CSR 0x038
0371 #define  RIO_RT_L2I_NUM_GR      0xff000000
0372 #define  RIO_RT_L2I_GR_PTR      0x00fffc00
0373 
0374 /* Per-Port Routing Table registers.
0375  * Register fields defined in the broadcast section above are
0376  * applicable to the corresponding registers below.
0377  */
0378 #define RIO_SPx_RT_CTL_CSR(x)   (0x040 + (0x20 * x))
0379 #define RIO_SPx_RT_LVL0_INFO_CSR(x) (0x50 + (0x20 * x))
0380 #define RIO_SPx_RT_LVL1_INFO_CSR(x) (0x54 + (0x20 * x))
0381 #define RIO_SPx_RT_LVL2_INFO_CSR(x) (0x58 + (0x20 * x))
0382 
0383 /* Register Formats for Routing Table Group entry.
0384  * Register offsets are calculated using GR_PTR field in the corresponding
0385  * table Level_N and group/entry numbers (see RapidIO 3.0+ Part 3).
0386  */
0387 #define RIO_RT_Ln_ENTRY_IMPL_DEF    0xf0000000
0388 #define RIO_RT_Ln_ENTRY_RTE_VAL     0x000003ff
0389 #define RIO_RT_ENTRY_DROP_PKT       0x300
0390 
0391 #endif              /* LINUX_RIO_REGS_H */