]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/net/sh_eth.h
arm: mx5: Add fuse supply enable in fsl_iim
[karo-tx-uboot.git] / drivers / net / sh_eth.h
1 /*
2  * sh_eth.h - Driver for Renesas SuperH ethernet controler.
3  *
4  * Copyright (C) 2008 - 2012 Renesas Solutions Corp.
5  * Copyright (c) 2008 - 2012 Nobuhiro Iwamatsu
6  * Copyright (c) 2007 Carlos Munoz <carlos@kenati.com>
7  *
8  * SPDX-License-Identifier:     GPL-2.0+
9  */
10
11 #include <netdev.h>
12 #include <asm/types.h>
13
14 #define SHETHER_NAME "sh_eth"
15
16 #if defined(CONFIG_SH)
17 /* Malloc returns addresses in the P1 area (cacheable). However we need to
18    use area P2 (non-cacheable) */
19 #define ADDR_TO_P2(addr)        ((((int)(addr) & ~0xe0000000) | 0xa0000000))
20
21 /* The ethernet controller needs to use physical addresses */
22 #if defined(CONFIG_SH_32BIT)
23 #define ADDR_TO_PHY(addr)       ((((int)(addr) & ~0xe0000000) | 0x40000000))
24 #else
25 #define ADDR_TO_PHY(addr)       ((int)(addr) & ~0xe0000000)
26 #endif
27 #elif defined(CONFIG_ARM)
28 #define inl             readl
29 #define outl    writel
30 #define ADDR_TO_PHY(addr)       ((int)(addr))
31 #define ADDR_TO_P2(addr)        (addr)
32 #endif /* defined(CONFIG_SH) */
33
34 /* Number of supported ports */
35 #define MAX_PORT_NUM    2
36
37 /* Buffers must be big enough to hold the largest ethernet frame. Also, rx
38    buffers must be a multiple of 32 bytes */
39 #define MAX_BUF_SIZE    (48 * 32)
40
41 /* The number of tx descriptors must be large enough to point to 5 or more
42    frames. If each frame uses 2 descriptors, at least 10 descriptors are needed.
43    We use one descriptor per frame */
44 #define NUM_TX_DESC             8
45
46 /* The size of the tx descriptor is determined by how much padding is used.
47    4, 20, or 52 bytes of padding can be used */
48 #define TX_DESC_PADDING         4
49 #define TX_DESC_SIZE            (12 + TX_DESC_PADDING)
50
51 /* Tx descriptor. We always use 3 bytes of padding */
52 struct tx_desc_s {
53         volatile u32 td0;
54         u32 td1;
55         u32 td2;                /* Buffer start */
56         u32 padding;
57 };
58
59 /* There is no limitation in the number of rx descriptors */
60 #define NUM_RX_DESC     8
61
62 /* The size of the rx descriptor is determined by how much padding is used.
63    4, 20, or 52 bytes of padding can be used */
64 #define RX_DESC_PADDING         4
65 #define RX_DESC_SIZE            (12 + RX_DESC_PADDING)
66
67 /* Rx descriptor. We always use 4 bytes of padding */
68 struct rx_desc_s {
69         volatile u32 rd0;
70         volatile u32 rd1;
71         u32 rd2;                /* Buffer start */
72         u32 padding;
73 };
74
75 struct sh_eth_info {
76         struct tx_desc_s *tx_desc_malloc;
77         struct tx_desc_s *tx_desc_base;
78         struct tx_desc_s *tx_desc_cur;
79         struct rx_desc_s *rx_desc_malloc;
80         struct rx_desc_s *rx_desc_base;
81         struct rx_desc_s *rx_desc_cur;
82         u8 *rx_buf_malloc;
83         u8 *rx_buf_base;
84         u8 mac_addr[6];
85         u8 phy_addr;
86         struct eth_device *dev;
87         struct phy_device *phydev;
88 };
89
90 struct sh_eth_dev {
91         int port;
92         struct sh_eth_info port_info[MAX_PORT_NUM];
93 };
94
95 /* from linux/drivers/net/ethernet/renesas/sh_eth.h */
96 enum {
97         /* E-DMAC registers */
98         EDSR = 0,
99         EDMR,
100         EDTRR,
101         EDRRR,
102         EESR,
103         EESIPR,
104         TDLAR,
105         TDFAR,
106         TDFXR,
107         TDFFR,
108         RDLAR,
109         RDFAR,
110         RDFXR,
111         RDFFR,
112         TRSCER,
113         RMFCR,
114         TFTR,
115         FDR,
116         RMCR,
117         EDOCR,
118         TFUCR,
119         RFOCR,
120         FCFTR,
121         RPADIR,
122         TRIMD,
123         RBWAR,
124         TBRAR,
125
126         /* Ether registers */
127         ECMR,
128         ECSR,
129         ECSIPR,
130         PIR,
131         PSR,
132         RDMLR,
133         PIPR,
134         RFLR,
135         IPGR,
136         APR,
137         MPR,
138         PFTCR,
139         PFRCR,
140         RFCR,
141         RFCF,
142         TPAUSER,
143         TPAUSECR,
144         BCFR,
145         BCFRR,
146         GECMR,
147         BCULR,
148         MAHR,
149         MALR,
150         TROCR,
151         CDCR,
152         LCCR,
153         CNDCR,
154         CEFCR,
155         FRECR,
156         TSFRCR,
157         TLFRCR,
158         CERCR,
159         CEECR,
160         MAFCR,
161         RTRATE,
162         CSMR,
163         RMII_MII,
164
165         /* This value must be written at last. */
166         SH_ETH_MAX_REGISTER_OFFSET,
167 };
168
169 static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
170         [EDSR]  = 0x0000,
171         [EDMR]  = 0x0400,
172         [EDTRR] = 0x0408,
173         [EDRRR] = 0x0410,
174         [EESR]  = 0x0428,
175         [EESIPR]        = 0x0430,
176         [TDLAR] = 0x0010,
177         [TDFAR] = 0x0014,
178         [TDFXR] = 0x0018,
179         [TDFFR] = 0x001c,
180         [RDLAR] = 0x0030,
181         [RDFAR] = 0x0034,
182         [RDFXR] = 0x0038,
183         [RDFFR] = 0x003c,
184         [TRSCER]        = 0x0438,
185         [RMFCR] = 0x0440,
186         [TFTR]  = 0x0448,
187         [FDR]   = 0x0450,
188         [RMCR]  = 0x0458,
189         [RPADIR]        = 0x0460,
190         [FCFTR] = 0x0468,
191         [CSMR] = 0x04E4,
192
193         [ECMR]  = 0x0500,
194         [ECSR]  = 0x0510,
195         [ECSIPR]        = 0x0518,
196         [PIR]   = 0x0520,
197         [PSR]   = 0x0528,
198         [PIPR]  = 0x052c,
199         [RFLR]  = 0x0508,
200         [APR]   = 0x0554,
201         [MPR]   = 0x0558,
202         [PFTCR] = 0x055c,
203         [PFRCR] = 0x0560,
204         [TPAUSER]       = 0x0564,
205         [GECMR] = 0x05b0,
206         [BCULR] = 0x05b4,
207         [MAHR]  = 0x05c0,
208         [MALR]  = 0x05c8,
209         [TROCR] = 0x0700,
210         [CDCR]  = 0x0708,
211         [LCCR]  = 0x0710,
212         [CEFCR] = 0x0740,
213         [FRECR] = 0x0748,
214         [TSFRCR]        = 0x0750,
215         [TLFRCR]        = 0x0758,
216         [RFCR]  = 0x0760,
217         [CERCR] = 0x0768,
218         [CEECR] = 0x0770,
219         [MAFCR] = 0x0778,
220         [RMII_MII] =  0x0790,
221 };
222
223 static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {
224         [ECMR]  = 0x0100,
225         [RFLR]  = 0x0108,
226         [ECSR]  = 0x0110,
227         [ECSIPR]        = 0x0118,
228         [PIR]   = 0x0120,
229         [PSR]   = 0x0128,
230         [RDMLR] = 0x0140,
231         [IPGR]  = 0x0150,
232         [APR]   = 0x0154,
233         [MPR]   = 0x0158,
234         [TPAUSER]       = 0x0164,
235         [RFCF]  = 0x0160,
236         [TPAUSECR]      = 0x0168,
237         [BCFRR] = 0x016c,
238         [MAHR]  = 0x01c0,
239         [MALR]  = 0x01c8,
240         [TROCR] = 0x01d0,
241         [CDCR]  = 0x01d4,
242         [LCCR]  = 0x01d8,
243         [CNDCR] = 0x01dc,
244         [CEFCR] = 0x01e4,
245         [FRECR] = 0x01e8,
246         [TSFRCR]        = 0x01ec,
247         [TLFRCR]        = 0x01f0,
248         [RFCR]  = 0x01f4,
249         [MAFCR] = 0x01f8,
250         [RTRATE]        = 0x01fc,
251
252         [EDMR]  = 0x0000,
253         [EDTRR] = 0x0008,
254         [EDRRR] = 0x0010,
255         [TDLAR] = 0x0018,
256         [RDLAR] = 0x0020,
257         [EESR]  = 0x0028,
258         [EESIPR]        = 0x0030,
259         [TRSCER]        = 0x0038,
260         [RMFCR] = 0x0040,
261         [TFTR]  = 0x0048,
262         [FDR]   = 0x0050,
263         [RMCR]  = 0x0058,
264         [TFUCR] = 0x0064,
265         [RFOCR] = 0x0068,
266         [FCFTR] = 0x0070,
267         [RPADIR]        = 0x0078,
268         [TRIMD] = 0x007c,
269         [RBWAR] = 0x00c8,
270         [RDFAR] = 0x00cc,
271         [TBRAR] = 0x00d4,
272         [TDFAR] = 0x00d8,
273 };
274
275 /* Register Address */
276 #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
277 #define SH_ETH_TYPE_GETHER
278 #define BASE_IO_ADDR    0xfee00000
279 #elif defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752)
280 #if defined(CONFIG_SH_ETHER_USE_GETHER)
281 #define SH_ETH_TYPE_GETHER
282 #define BASE_IO_ADDR    0xfee00000
283 #else
284 #define SH_ETH_TYPE_ETHER
285 #define BASE_IO_ADDR    0xfef00000
286 #endif
287 #elif defined(CONFIG_CPU_SH7724)
288 #define SH_ETH_TYPE_ETHER
289 #define BASE_IO_ADDR    0xA4600000
290 #elif defined(CONFIG_R8A7740)
291 #define SH_ETH_TYPE_GETHER
292 #define BASE_IO_ADDR    0xE9A00000
293 #endif
294
295 /*
296  * Register's bits
297  * Copy from Linux driver source code
298  */
299 #if defined(SH_ETH_TYPE_GETHER)
300 /* EDSR */
301 enum EDSR_BIT {
302         EDSR_ENT = 0x01, EDSR_ENR = 0x02,
303 };
304 #define EDSR_ENALL (EDSR_ENT|EDSR_ENR)
305 #endif
306
307 /* EDMR */
308 enum DMAC_M_BIT {
309         EDMR_DL1 = 0x20, EDMR_DL0 = 0x10,
310 #if defined(SH_ETH_TYPE_GETHER)
311         EDMR_SRST       = 0x03, /* Receive/Send reset */
312         EMDR_DESC_R     = 0x30, /* Descriptor reserve size */
313         EDMR_EL         = 0x40, /* Litte endian */
314 #elif defined(SH_ETH_TYPE_ETHER)
315         EDMR_SRST       = 0x01,
316         EMDR_DESC_R     = 0x30, /* Descriptor reserve size */
317         EDMR_EL         = 0x40, /* Litte endian */
318 #else
319         EDMR_SRST = 0x01,
320 #endif
321 };
322
323 /* RFLR */
324 #define RFLR_RFL_MIN    0x05EE  /* Recv Frame length 1518 byte */
325
326 /* EDTRR */
327 enum DMAC_T_BIT {
328 #if defined(SH_ETH_TYPE_GETHER)
329         EDTRR_TRNS = 0x03,
330 #else
331         EDTRR_TRNS = 0x01,
332 #endif
333 };
334
335 /* GECMR */
336 enum GECMR_BIT {
337 #if defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752)
338         GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00,
339 #else
340         GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00,
341 #endif
342 };
343
344 /* EDRRR*/
345 enum EDRRR_R_BIT {
346         EDRRR_R = 0x01,
347 };
348
349 /* TPAUSER */
350 enum TPAUSER_BIT {
351         TPAUSER_TPAUSE = 0x0000ffff,
352         TPAUSER_UNLIMITED = 0,
353 };
354
355 /* BCFR */
356 enum BCFR_BIT {
357         BCFR_RPAUSE = 0x0000ffff,
358         BCFR_UNLIMITED = 0,
359 };
360
361 /* PIR */
362 enum PIR_BIT {
363         PIR_MDI = 0x08, PIR_MDO = 0x04, PIR_MMD = 0x02, PIR_MDC = 0x01,
364 };
365
366 /* PSR */
367 enum PHY_STATUS_BIT { PHY_ST_LINK = 0x01, };
368
369 /* EESR */
370 enum EESR_BIT {
371
372 #if defined(SH_ETH_TYPE_ETHER)
373         EESR_TWB  = 0x40000000,
374 #else
375         EESR_TWB  = 0xC0000000,
376         EESR_TC1  = 0x20000000,
377         EESR_TUC  = 0x10000000,
378         EESR_ROC  = 0x80000000,
379 #endif
380         EESR_TABT = 0x04000000,
381         EESR_RABT = 0x02000000, EESR_RFRMER = 0x01000000,
382 #if defined(SH_ETH_TYPE_ETHER)
383         EESR_ADE  = 0x00800000,
384 #endif
385         EESR_ECI  = 0x00400000,
386         EESR_FTC  = 0x00200000, EESR_TDE  = 0x00100000,
387         EESR_TFE  = 0x00080000, EESR_FRC  = 0x00040000,
388         EESR_RDE  = 0x00020000, EESR_RFE  = 0x00010000,
389 #if defined(SH_ETH_TYPE_ETHER)
390         EESR_CND  = 0x00000800,
391 #endif
392         EESR_DLC  = 0x00000400,
393         EESR_CD   = 0x00000200, EESR_RTO  = 0x00000100,
394         EESR_RMAF = 0x00000080, EESR_CEEF = 0x00000040,
395         EESR_CELF = 0x00000020, EESR_RRF  = 0x00000010,
396         rESR_RTLF = 0x00000008, EESR_RTSF = 0x00000004,
397         EESR_PRE  = 0x00000002, EESR_CERF = 0x00000001,
398 };
399
400
401 #if defined(SH_ETH_TYPE_GETHER)
402 # define TX_CHECK (EESR_TC1 | EESR_FTC)
403 # define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
404                 | EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI)
405 # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE)
406
407 #else
408 # define TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO)
409 # define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
410                 | EESR_RFRMER | EESR_ADE | EESR_TFE | EESR_TDE | EESR_ECI)
411 # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | EESR_TFE)
412 #endif
413
414 /* EESIPR */
415 enum DMAC_IM_BIT {
416         DMAC_M_TWB = 0x40000000, DMAC_M_TABT = 0x04000000,
417         DMAC_M_RABT = 0x02000000,
418         DMAC_M_RFRMER = 0x01000000, DMAC_M_ADF = 0x00800000,
419         DMAC_M_ECI = 0x00400000, DMAC_M_FTC = 0x00200000,
420         DMAC_M_TDE = 0x00100000, DMAC_M_TFE = 0x00080000,
421         DMAC_M_FRC = 0x00040000, DMAC_M_RDE = 0x00020000,
422         DMAC_M_RFE = 0x00010000, DMAC_M_TINT4 = 0x00000800,
423         DMAC_M_TINT3 = 0x00000400, DMAC_M_TINT2 = 0x00000200,
424         DMAC_M_TINT1 = 0x00000100, DMAC_M_RINT8 = 0x00000080,
425         DMAC_M_RINT5 = 0x00000010, DMAC_M_RINT4 = 0x00000008,
426         DMAC_M_RINT3 = 0x00000004, DMAC_M_RINT2 = 0x00000002,
427         DMAC_M_RINT1 = 0x00000001,
428 };
429
430 /* Receive descriptor bit */
431 enum RD_STS_BIT {
432         RD_RACT = 0x80000000, RD_RDLE = 0x40000000,
433         RD_RFP1 = 0x20000000, RD_RFP0 = 0x10000000,
434         RD_RFE = 0x08000000, RD_RFS10 = 0x00000200,
435         RD_RFS9 = 0x00000100, RD_RFS8 = 0x00000080,
436         RD_RFS7 = 0x00000040, RD_RFS6 = 0x00000020,
437         RD_RFS5 = 0x00000010, RD_RFS4 = 0x00000008,
438         RD_RFS3 = 0x00000004, RD_RFS2 = 0x00000002,
439         RD_RFS1 = 0x00000001,
440 };
441 #define RDF1ST  RD_RFP1
442 #define RDFEND  RD_RFP0
443 #define RD_RFP  (RD_RFP1|RD_RFP0)
444
445 /* RDFFR*/
446 enum RDFFR_BIT {
447         RDFFR_RDLF = 0x01,
448 };
449
450 /* FCFTR */
451 enum FCFTR_BIT {
452         FCFTR_RFF2 = 0x00040000, FCFTR_RFF1 = 0x00020000,
453         FCFTR_RFF0 = 0x00010000, FCFTR_RFD2 = 0x00000004,
454         FCFTR_RFD1 = 0x00000002, FCFTR_RFD0 = 0x00000001,
455 };
456 #define FIFO_F_D_RFF    (FCFTR_RFF2|FCFTR_RFF1|FCFTR_RFF0)
457 #define FIFO_F_D_RFD    (FCFTR_RFD2|FCFTR_RFD1|FCFTR_RFD0)
458
459 /* Transfer descriptor bit */
460 enum TD_STS_BIT {
461 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_ETHER)
462         TD_TACT = 0x80000000,
463 #else
464         TD_TACT = 0x7fffffff,
465 #endif
466         TD_TDLE = 0x40000000, TD_TFP1 = 0x20000000,
467         TD_TFP0 = 0x10000000,
468 };
469 #define TDF1ST  TD_TFP1
470 #define TDFEND  TD_TFP0
471 #define TD_TFP  (TD_TFP1|TD_TFP0)
472
473 /* RMCR */
474 enum RECV_RST_BIT { RMCR_RST = 0x01, };
475 /* ECMR */
476 enum FELIC_MODE_BIT {
477 #if defined(SH_ETH_TYPE_GETHER)
478         ECMR_TRCCM=0x04000000, ECMR_RCSC= 0x00800000, ECMR_DPAD= 0x00200000,
479         ECMR_RZPF = 0x00100000,
480 #endif
481         ECMR_ZPF = 0x00080000, ECMR_PFR = 0x00040000, ECMR_RXF = 0x00020000,
482         ECMR_TXF = 0x00010000, ECMR_MCT = 0x00002000, ECMR_PRCEF = 0x00001000,
483         ECMR_PMDE = 0x00000200, ECMR_RE = 0x00000040, ECMR_TE = 0x00000020,
484         ECMR_ILB = 0x00000008, ECMR_ELB = 0x00000004, ECMR_DM = 0x00000002,
485         ECMR_PRM = 0x00000001,
486 #ifdef CONFIG_CPU_SH7724
487         ECMR_RTM = 0x00000010,
488 #endif
489
490 };
491
492 #if defined(SH_ETH_TYPE_GETHER)
493 #define ECMR_CHG_DM     (ECMR_TRCCM | ECMR_RZPF | ECMR_ZPF | ECMR_PFR | ECMR_RXF | \
494                                                 ECMR_TXF | ECMR_MCT)
495 #elif defined(SH_ETH_TYPE_ETHER)
496 #define ECMR_CHG_DM (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF)
497 #else
498 #define ECMR_CHG_DM     (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF | ECMR_MCT)
499 #endif
500
501 /* ECSR */
502 enum ECSR_STATUS_BIT {
503 #if defined(SH_ETH_TYPE_ETHER)
504         ECSR_BRCRX = 0x20, ECSR_PSRTO = 0x10,
505 #endif
506         ECSR_LCHNG = 0x04,
507         ECSR_MPD = 0x02, ECSR_ICD = 0x01,
508 };
509
510 #if defined(SH_ETH_TYPE_GETHER)
511 # define ECSR_INIT (ECSR_ICD | ECSIPR_MPDIP)
512 #else
513 # define ECSR_INIT (ECSR_BRCRX | ECSR_PSRTO | \
514                         ECSR_LCHNG | ECSR_ICD | ECSIPR_MPDIP)
515 #endif
516
517 /* ECSIPR */
518 enum ECSIPR_STATUS_MASK_BIT {
519 #if defined(SH_ETH_TYPE_ETHER)
520         ECSIPR_BRCRXIP = 0x20,
521         ECSIPR_PSRTOIP = 0x10,
522 #elif defined(SH_ETY_TYPE_GETHER)
523         ECSIPR_PSRTOIP = 0x10,
524         ECSIPR_PHYIP = 0x08,
525 #endif
526         ECSIPR_LCHNGIP = 0x04,
527         ECSIPR_MPDIP = 0x02,
528         ECSIPR_ICDIP = 0x01,
529 };
530
531 #if defined(SH_ETH_TYPE_GETHER)
532 # define ECSIPR_INIT (ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP)
533 #else
534 # define ECSIPR_INIT (ECSIPR_BRCRXIP | ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | \
535                                 ECSIPR_ICDIP | ECSIPR_MPDIP)
536 #endif
537
538 /* APR */
539 enum APR_BIT {
540         APR_AP = 0x00000004,
541 };
542
543 /* MPR */
544 enum MPR_BIT {
545         MPR_MP = 0x00000006,
546 };
547
548 /* TRSCER */
549 enum DESC_I_BIT {
550         DESC_I_TINT4 = 0x0800, DESC_I_TINT3 = 0x0400, DESC_I_TINT2 = 0x0200,
551         DESC_I_TINT1 = 0x0100, DESC_I_RINT8 = 0x0080, DESC_I_RINT5 = 0x0010,
552         DESC_I_RINT4 = 0x0008, DESC_I_RINT3 = 0x0004, DESC_I_RINT2 = 0x0002,
553         DESC_I_RINT1 = 0x0001,
554 };
555
556 /* RPADIR */
557 enum RPADIR_BIT {
558         RPADIR_PADS1 = 0x20000, RPADIR_PADS0 = 0x10000,
559         RPADIR_PADR = 0x0003f,
560 };
561
562 #if defined(SH_ETH_TYPE_GETHER)
563 # define RPADIR_INIT (0x00)
564 #else
565 # define RPADIR_INIT (RPADIR_PADS1)
566 #endif
567
568 /* FDR */
569 enum FIFO_SIZE_BIT {
570         FIFO_SIZE_T = 0x00000700, FIFO_SIZE_R = 0x00000007,
571 };
572
573 static inline unsigned long sh_eth_reg_addr(struct sh_eth_dev *eth,
574                                             int enum_index)
575 {
576 #if defined(SH_ETH_TYPE_GETHER)
577         const u16 *reg_offset = sh_eth_offset_gigabit;
578 #elif defined(SH_ETH_TYPE_ETHER)
579         const u16 *reg_offset = sh_eth_offset_fast_sh4;
580 #else
581 #error
582 #endif
583         return BASE_IO_ADDR + reg_offset[enum_index] + 0x800 * eth->port;
584 }
585
586 static inline void sh_eth_write(struct sh_eth_dev *eth, unsigned long data,
587                                 int enum_index)
588 {
589         outl(data, sh_eth_reg_addr(eth, enum_index));
590 }
591
592 static inline unsigned long sh_eth_read(struct sh_eth_dev *eth,
593                                         int enum_index)
594 {
595         return inl(sh_eth_reg_addr(eth, enum_index));
596 }