Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * drivers/net/ethernet/ibm/emac/emac.h
0004  *
0005  * Register definitions for PowerPC 4xx on-chip ethernet contoller
0006  *
0007  * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
0008  *                <benh@kernel.crashing.org>
0009  *
0010  * Based on the arch/ppc version of the driver:
0011  *
0012  * Copyright (c) 2004, 2005 Zultys Technologies.
0013  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
0014  *
0015  * Based on original work by
0016  *      Matt Porter <mporter@kernel.crashing.org>
0017  *      Armin Kuster <akuster@mvista.com>
0018  *  Copyright 2002-2004 MontaVista Software Inc.
0019  */
0020 #ifndef __IBM_NEWEMAC_H
0021 #define __IBM_NEWEMAC_H
0022 
0023 #include <linux/types.h>
0024 #include <linux/phy.h>
0025 
0026 /* EMAC registers           Write Access rules */
0027 struct emac_regs {
0028     /* Common registers across all EMAC implementations. */
0029     u32 mr0;            /* Special  */
0030     u32 mr1;            /* Reset    */
0031     u32 tmr0;           /* Special  */
0032     u32 tmr1;           /* Special  */
0033     u32 rmr;            /* Reset    */
0034     u32 isr;            /* Always   */
0035     u32 iser;           /* Reset    */
0036     u32 iahr;           /* Reset, R, T  */
0037     u32 ialr;           /* Reset, R, T  */
0038     u32 vtpid;          /* Reset, R, T  */
0039     u32 vtci;           /* Reset, R, T  */
0040     u32 ptr;            /* Reset,    T  */
0041     union {
0042         /* Registers unique to EMAC4 implementations */
0043         struct {
0044             u32 iaht1;  /* Reset, R */
0045             u32 iaht2;  /* Reset, R */
0046             u32 iaht3;  /* Reset, R */
0047             u32 iaht4;  /* Reset, R */
0048             u32 gaht1;  /* Reset, R */
0049             u32 gaht2;  /* Reset, R */
0050             u32 gaht3;  /* Reset, R */
0051             u32 gaht4;  /* Reset, R */
0052         } emac4;
0053         /* Registers unique to EMAC4SYNC implementations */
0054         struct {
0055             u32 mahr;   /* Reset, R, T  */
0056             u32 malr;   /* Reset, R, T  */
0057             u32 mmahr;  /* Reset, R, T  */
0058             u32 mmalr;  /* Reset, R, T  */
0059             u32 rsvd0[4];
0060         } emac4sync;
0061     } u0;
0062     /* Common registers across all EMAC implementations. */
0063     u32 lsah;
0064     u32 lsal;
0065     u32 ipgvr;          /* Reset,    T  */
0066     u32 stacr;          /* Special  */
0067     u32 trtr;           /* Special  */
0068     u32 rwmr;           /* Reset    */
0069     u32 octx;
0070     u32 ocrx;
0071     union {
0072         /* Registers unique to EMAC4 implementations */
0073         struct {
0074             u32 ipcr;
0075         } emac4;
0076         /* Registers unique to EMAC4SYNC implementations */
0077         struct {
0078             u32 rsvd1;
0079             u32 revid;
0080             u32 rsvd2[2];
0081             u32 iaht1;  /* Reset, R     */
0082             u32 iaht2;  /* Reset, R     */
0083             u32 iaht3;  /* Reset, R     */
0084             u32 iaht4;  /* Reset, R     */
0085             u32 iaht5;  /* Reset, R     */
0086             u32 iaht6;  /* Reset, R     */
0087             u32 iaht7;  /* Reset, R     */
0088             u32 iaht8;  /* Reset, R     */
0089             u32 gaht1;  /* Reset, R     */
0090             u32 gaht2;  /* Reset, R     */
0091             u32 gaht3;  /* Reset, R     */
0092             u32 gaht4;  /* Reset, R     */
0093             u32 gaht5;  /* Reset, R     */
0094             u32 gaht6;  /* Reset, R     */
0095             u32 gaht7;  /* Reset, R     */
0096             u32 gaht8;  /* Reset, R     */
0097             u32 tpc;    /* Reset, T     */
0098         } emac4sync;
0099     } u1;
0100 };
0101 
0102 /* EMACx_MR0 */
0103 #define EMAC_MR0_RXI            0x80000000
0104 #define EMAC_MR0_TXI            0x40000000
0105 #define EMAC_MR0_SRST           0x20000000
0106 #define EMAC_MR0_TXE            0x10000000
0107 #define EMAC_MR0_RXE            0x08000000
0108 #define EMAC_MR0_WKE            0x04000000
0109 
0110 /* EMACx_MR1 */
0111 #define EMAC_MR1_FDE            0x80000000
0112 #define EMAC_MR1_ILE            0x40000000
0113 #define EMAC_MR1_VLE            0x20000000
0114 #define EMAC_MR1_EIFC           0x10000000
0115 #define EMAC_MR1_APP            0x08000000
0116 #define EMAC_MR1_IST            0x01000000
0117 
0118 #define EMAC_MR1_MF_MASK        0x00c00000
0119 #define EMAC_MR1_MF_10          0x00000000
0120 #define EMAC_MR1_MF_100         0x00400000
0121 #define EMAC_MR1_MF_1000        0x00800000
0122 #define EMAC_MR1_MF_1000GPCS        0x00c00000
0123 #define EMAC_MR1_MF_IPPA(id)        (((id) & 0x1f) << 6)
0124 
0125 #define EMAC_MR1_RFS_4K         0x00300000
0126 #define EMAC_MR1_RFS_16K        0x00000000
0127 #define EMAC_MR1_TFS_2K         0x00080000
0128 #define EMAC_MR1_TR0_MULT       0x00008000
0129 #define EMAC_MR1_JPSM           0x00000000
0130 #define EMAC_MR1_MWSW_001       0x00000000
0131 #define EMAC_MR1_BASE(opb)      (EMAC_MR1_TFS_2K | EMAC_MR1_TR0_MULT)
0132 
0133 
0134 #define EMAC4_MR1_RFS_2K        0x00100000
0135 #define EMAC4_MR1_RFS_4K        0x00180000
0136 #define EMAC4_MR1_RFS_8K        0x00200000
0137 #define EMAC4_MR1_RFS_16K       0x00280000
0138 #define EMAC4_MR1_TFS_2K            0x00020000
0139 #define EMAC4_MR1_TFS_4K        0x00030000
0140 #define EMAC4_MR1_TFS_8K        0x00040000
0141 #define EMAC4_MR1_TFS_16K       0x00050000
0142 #define EMAC4_MR1_TR            0x00008000
0143 #define EMAC4_MR1_MWSW_001      0x00001000
0144 #define EMAC4_MR1_JPSM          0x00000800
0145 #define EMAC4_MR1_OBCI_MASK     0x00000038
0146 #define EMAC4_MR1_OBCI_50       0x00000000
0147 #define EMAC4_MR1_OBCI_66       0x00000008
0148 #define EMAC4_MR1_OBCI_83       0x00000010
0149 #define EMAC4_MR1_OBCI_100      0x00000018
0150 #define EMAC4_MR1_OBCI_100P     0x00000020
0151 #define EMAC4_MR1_OBCI(freq)        ((freq) <= 50  ? EMAC4_MR1_OBCI_50 : \
0152                      (freq) <= 66  ? EMAC4_MR1_OBCI_66 : \
0153                      (freq) <= 83  ? EMAC4_MR1_OBCI_83 : \
0154                      (freq) <= 100 ? EMAC4_MR1_OBCI_100 : \
0155                         EMAC4_MR1_OBCI_100P)
0156 
0157 /* EMACx_TMR0 */
0158 #define EMAC_TMR0_GNP           0x80000000
0159 #define EMAC_TMR0_DEFAULT       0x00000000
0160 #define EMAC4_TMR0_TFAE_2_32        0x00000001
0161 #define EMAC4_TMR0_TFAE_4_64        0x00000002
0162 #define EMAC4_TMR0_TFAE_8_128       0x00000003
0163 #define EMAC4_TMR0_TFAE_16_256      0x00000004
0164 #define EMAC4_TMR0_TFAE_32_512      0x00000005
0165 #define EMAC4_TMR0_TFAE_64_1024     0x00000006
0166 #define EMAC4_TMR0_TFAE_128_2048    0x00000007
0167 #define EMAC4_TMR0_DEFAULT      EMAC4_TMR0_TFAE_2_32
0168 #define EMAC_TMR0_XMIT          (EMAC_TMR0_GNP | EMAC_TMR0_DEFAULT)
0169 #define EMAC4_TMR0_XMIT         (EMAC_TMR0_GNP | EMAC4_TMR0_DEFAULT)
0170 
0171 /* EMACx_TMR1 */
0172 
0173 #define EMAC_TMR1(l,h)          (((l) << 27) | (((h) & 0xff) << 16))
0174 #define EMAC4_TMR1(l,h)         (((l) << 27) | (((h) & 0x3ff) << 14))
0175 
0176 /* EMACx_RMR */
0177 #define EMAC_RMR_SP         0x80000000
0178 #define EMAC_RMR_SFCS           0x40000000
0179 #define EMAC_RMR_RRP            0x20000000
0180 #define EMAC_RMR_RFP            0x10000000
0181 #define EMAC_RMR_ROP            0x08000000
0182 #define EMAC_RMR_RPIR           0x04000000
0183 #define EMAC_RMR_PPP            0x02000000
0184 #define EMAC_RMR_PME            0x01000000
0185 #define EMAC_RMR_PMME           0x00800000
0186 #define EMAC_RMR_IAE            0x00400000
0187 #define EMAC_RMR_MIAE           0x00200000
0188 #define EMAC_RMR_BAE            0x00100000
0189 #define EMAC_RMR_MAE            0x00080000
0190 #define EMAC_RMR_BASE           0x00000000
0191 #define EMAC4_RMR_RFAF_2_32     0x00000001
0192 #define EMAC4_RMR_RFAF_4_64     0x00000002
0193 #define EMAC4_RMR_RFAF_8_128        0x00000003
0194 #define EMAC4_RMR_RFAF_16_256       0x00000004
0195 #define EMAC4_RMR_RFAF_32_512       0x00000005
0196 #define EMAC4_RMR_RFAF_64_1024      0x00000006
0197 #define EMAC4_RMR_RFAF_128_2048     0x00000007
0198 #define EMAC4_RMR_BASE          EMAC4_RMR_RFAF_128_2048
0199 #define EMAC4_RMR_MJS_MASK              0x0001fff8
0200 #define EMAC4_RMR_MJS(s)                (((s) << 3) & EMAC4_RMR_MJS_MASK)
0201 
0202 /* EMACx_ISR & EMACx_ISER */
0203 #define EMAC4_ISR_TXPE          0x20000000
0204 #define EMAC4_ISR_RXPE          0x10000000
0205 #define EMAC4_ISR_TXUE          0x08000000
0206 #define EMAC4_ISR_RXOE          0x04000000
0207 #define EMAC_ISR_OVR            0x02000000
0208 #define EMAC_ISR_PP         0x01000000
0209 #define EMAC_ISR_BP         0x00800000
0210 #define EMAC_ISR_RP         0x00400000
0211 #define EMAC_ISR_SE         0x00200000
0212 #define EMAC_ISR_ALE            0x00100000
0213 #define EMAC_ISR_BFCS           0x00080000
0214 #define EMAC_ISR_PTLE           0x00040000
0215 #define EMAC_ISR_ORE            0x00020000
0216 #define EMAC_ISR_IRE            0x00010000
0217 #define EMAC_ISR_SQE            0x00000080
0218 #define EMAC_ISR_TE         0x00000040
0219 #define EMAC_ISR_MOS            0x00000002
0220 #define EMAC_ISR_MOF            0x00000001
0221 
0222 /* EMACx_STACR */
0223 #define EMAC_STACR_PHYD_MASK        0xffff
0224 #define EMAC_STACR_PHYD_SHIFT       16
0225 #define EMAC_STACR_OC           0x00008000
0226 #define EMAC_STACR_PHYE         0x00004000
0227 #define EMAC_STACR_STAC_MASK        0x00003000
0228 #define EMAC_STACR_STAC_READ        0x00001000
0229 #define EMAC_STACR_STAC_WRITE       0x00002000
0230 #define EMAC_STACR_OPBC_MASK        0x00000C00
0231 #define EMAC_STACR_OPBC_50      0x00000000
0232 #define EMAC_STACR_OPBC_66      0x00000400
0233 #define EMAC_STACR_OPBC_83      0x00000800
0234 #define EMAC_STACR_OPBC_100     0x00000C00
0235 #define EMAC_STACR_OPBC(freq)       ((freq) <= 50 ? EMAC_STACR_OPBC_50 : \
0236                      (freq) <= 66 ? EMAC_STACR_OPBC_66 : \
0237                      (freq) <= 83 ? EMAC_STACR_OPBC_83 : EMAC_STACR_OPBC_100)
0238 #define EMAC_STACR_BASE(opb)        EMAC_STACR_OPBC(opb)
0239 #define EMAC4_STACR_BASE(opb)       0x00000000
0240 #define EMAC_STACR_PCDA_MASK        0x1f
0241 #define EMAC_STACR_PCDA_SHIFT       5
0242 #define EMAC_STACR_PRA_MASK     0x1f
0243 #define EMACX_STACR_STAC_MASK       0x00003800
0244 #define EMACX_STACR_STAC_READ       0x00001000
0245 #define EMACX_STACR_STAC_WRITE      0x00000800
0246 #define EMACX_STACR_STAC_IND_ADDR   0x00002000
0247 #define EMACX_STACR_STAC_IND_READ   0x00003800
0248 #define EMACX_STACR_STAC_IND_READINC    0x00003000
0249 #define EMACX_STACR_STAC_IND_WRITE  0x00002800
0250 
0251 
0252 /* EMACx_TRTR */
0253 #define EMAC_TRTR_SHIFT_EMAC4       24
0254 #define EMAC_TRTR_SHIFT     27
0255 
0256 /* EMAC specific TX descriptor control fields (write access) */
0257 #define EMAC_TX_CTRL_GFCS       0x0200
0258 #define EMAC_TX_CTRL_GP         0x0100
0259 #define EMAC_TX_CTRL_ISA        0x0080
0260 #define EMAC_TX_CTRL_RSA        0x0040
0261 #define EMAC_TX_CTRL_IVT        0x0020
0262 #define EMAC_TX_CTRL_RVT        0x0010
0263 #define EMAC_TX_CTRL_TAH_CSUM       0x000e
0264 
0265 /* EMAC specific TX descriptor status fields (read access) */
0266 #define EMAC_TX_ST_BFCS         0x0200
0267 #define EMAC_TX_ST_LCS          0x0080
0268 #define EMAC_TX_ST_ED           0x0040
0269 #define EMAC_TX_ST_EC           0x0020
0270 #define EMAC_TX_ST_LC           0x0010
0271 #define EMAC_TX_ST_MC           0x0008
0272 #define EMAC_TX_ST_SC           0x0004
0273 #define EMAC_TX_ST_UR           0x0002
0274 #define EMAC_TX_ST_SQE          0x0001
0275 #define EMAC_IS_BAD_TX          (EMAC_TX_ST_LCS | EMAC_TX_ST_ED | \
0276                      EMAC_TX_ST_EC | EMAC_TX_ST_LC | \
0277                      EMAC_TX_ST_MC | EMAC_TX_ST_UR)
0278 #define EMAC_IS_BAD_TX_TAH      (EMAC_TX_ST_LCS | EMAC_TX_ST_ED | \
0279                      EMAC_TX_ST_EC | EMAC_TX_ST_LC)
0280 
0281 /* EMAC specific RX descriptor status fields (read access) */
0282 #define EMAC_RX_ST_OE           0x0200
0283 #define EMAC_RX_ST_PP           0x0100
0284 #define EMAC_RX_ST_BP           0x0080
0285 #define EMAC_RX_ST_RP           0x0040
0286 #define EMAC_RX_ST_SE           0x0020
0287 #define EMAC_RX_ST_AE           0x0010
0288 #define EMAC_RX_ST_BFCS         0x0008
0289 #define EMAC_RX_ST_PTL          0x0004
0290 #define EMAC_RX_ST_ORE          0x0002
0291 #define EMAC_RX_ST_IRE          0x0001
0292 #define EMAC_RX_TAH_BAD_CSUM        0x0003
0293 #define EMAC_BAD_RX_MASK        (EMAC_RX_ST_OE | EMAC_RX_ST_BP | \
0294                      EMAC_RX_ST_RP | EMAC_RX_ST_SE | \
0295                      EMAC_RX_ST_AE | EMAC_RX_ST_BFCS | \
0296                      EMAC_RX_ST_PTL | EMAC_RX_ST_ORE | \
0297                      EMAC_RX_ST_IRE )
0298 #endif /* __IBM_NEWEMAC_H */