xref: /rk3399_rockchip-uboot/drivers/net/sh_eth.h (revision dcd5a593f59b58da4875e3e78d7c74501bc319c4)
19751ee09SNobuhiro Iwamatsu /*
2903de461SYoshihiro Shimoda  * sh_eth.h - Driver for Renesas SuperH ethernet controler.
39751ee09SNobuhiro Iwamatsu  *
4*dcd5a593SNobuhiro Iwamatsu  * Copyright (C) 2008 - 2012 Renesas Solutions Corp.
5*dcd5a593SNobuhiro Iwamatsu  * Copyright (c) 2008 - 2012 Nobuhiro Iwamatsu
69751ee09SNobuhiro Iwamatsu  * Copyright (c) 2007 Carlos Munoz <carlos@kenati.com>
79751ee09SNobuhiro Iwamatsu  *
89751ee09SNobuhiro Iwamatsu  * This program is free software; you can redistribute it and/or modify
99751ee09SNobuhiro Iwamatsu  *  it under the terms of the GNU General Public License as published by
109751ee09SNobuhiro Iwamatsu  * the Free Software Foundation; either version 2 of the License, or
119751ee09SNobuhiro Iwamatsu  * (at your option) any later version.
129751ee09SNobuhiro Iwamatsu  *
139751ee09SNobuhiro Iwamatsu  * This program is distributed in the hope that it will be useful,
149751ee09SNobuhiro Iwamatsu  * but WITHOUT ANY WARRANTY; without even the implied warranty of
159751ee09SNobuhiro Iwamatsu  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
169751ee09SNobuhiro Iwamatsu  * GNU General Public License for more details.
179751ee09SNobuhiro Iwamatsu  *
189751ee09SNobuhiro Iwamatsu  * You should have received a copy of the GNU General Public License
199751ee09SNobuhiro Iwamatsu  * along with this program; if not, write to the Free Software
209751ee09SNobuhiro Iwamatsu  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
219751ee09SNobuhiro Iwamatsu  */
229751ee09SNobuhiro Iwamatsu 
23bd3980ccSNobuhiro Iwamatsu #include <netdev.h>
249751ee09SNobuhiro Iwamatsu #include <asm/types.h>
259751ee09SNobuhiro Iwamatsu 
269751ee09SNobuhiro Iwamatsu #define SHETHER_NAME "sh_eth"
279751ee09SNobuhiro Iwamatsu 
28*dcd5a593SNobuhiro Iwamatsu #if defined(CONFIG_SH)
299751ee09SNobuhiro Iwamatsu /* Malloc returns addresses in the P1 area (cacheable). However we need to
309751ee09SNobuhiro Iwamatsu    use area P2 (non-cacheable) */
319751ee09SNobuhiro Iwamatsu #define ADDR_TO_P2(addr)	((((int)(addr) & ~0xe0000000) | 0xa0000000))
329751ee09SNobuhiro Iwamatsu 
339751ee09SNobuhiro Iwamatsu /* The ethernet controller needs to use physical addresses */
34903de461SYoshihiro Shimoda #if defined(CONFIG_SH_32BIT)
35903de461SYoshihiro Shimoda #define ADDR_TO_PHY(addr)	((((int)(addr) & ~0xe0000000) | 0x40000000))
36903de461SYoshihiro Shimoda #else
379751ee09SNobuhiro Iwamatsu #define ADDR_TO_PHY(addr)	((int)(addr) & ~0xe0000000)
38903de461SYoshihiro Shimoda #endif
39*dcd5a593SNobuhiro Iwamatsu #elif defined(CONFIG_ARM)
40*dcd5a593SNobuhiro Iwamatsu #define inl		readl
41*dcd5a593SNobuhiro Iwamatsu #define outl	writel
42*dcd5a593SNobuhiro Iwamatsu #define ADDR_TO_PHY(addr)	((int)(addr))
43*dcd5a593SNobuhiro Iwamatsu #define ADDR_TO_P2(addr)	(addr)
44*dcd5a593SNobuhiro Iwamatsu #endif /* defined(CONFIG_SH) */
459751ee09SNobuhiro Iwamatsu 
469751ee09SNobuhiro Iwamatsu /* Number of supported ports */
479751ee09SNobuhiro Iwamatsu #define MAX_PORT_NUM	2
489751ee09SNobuhiro Iwamatsu 
499751ee09SNobuhiro Iwamatsu /* Buffers must be big enough to hold the largest ethernet frame. Also, rx
509751ee09SNobuhiro Iwamatsu    buffers must be a multiple of 32 bytes */
519751ee09SNobuhiro Iwamatsu #define MAX_BUF_SIZE	(48 * 32)
529751ee09SNobuhiro Iwamatsu 
539751ee09SNobuhiro Iwamatsu /* The number of tx descriptors must be large enough to point to 5 or more
549751ee09SNobuhiro Iwamatsu    frames. If each frame uses 2 descriptors, at least 10 descriptors are needed.
559751ee09SNobuhiro Iwamatsu    We use one descriptor per frame */
569751ee09SNobuhiro Iwamatsu #define NUM_TX_DESC		8
579751ee09SNobuhiro Iwamatsu 
589751ee09SNobuhiro Iwamatsu /* The size of the tx descriptor is determined by how much padding is used.
599751ee09SNobuhiro Iwamatsu    4, 20, or 52 bytes of padding can be used */
609751ee09SNobuhiro Iwamatsu #define TX_DESC_PADDING		4
619751ee09SNobuhiro Iwamatsu #define TX_DESC_SIZE		(12 + TX_DESC_PADDING)
629751ee09SNobuhiro Iwamatsu 
63bd3980ccSNobuhiro Iwamatsu /* Tx descriptor. We always use 3 bytes of padding */
649751ee09SNobuhiro Iwamatsu struct tx_desc_s {
659751ee09SNobuhiro Iwamatsu 	volatile u32 td0;
669751ee09SNobuhiro Iwamatsu 	u32 td1;
679751ee09SNobuhiro Iwamatsu 	u32 td2;		/* Buffer start */
689751ee09SNobuhiro Iwamatsu 	u32 padding;
699751ee09SNobuhiro Iwamatsu };
709751ee09SNobuhiro Iwamatsu 
719751ee09SNobuhiro Iwamatsu /* There is no limitation in the number of rx descriptors */
729751ee09SNobuhiro Iwamatsu #define NUM_RX_DESC	8
739751ee09SNobuhiro Iwamatsu 
749751ee09SNobuhiro Iwamatsu /* The size of the rx descriptor is determined by how much padding is used.
759751ee09SNobuhiro Iwamatsu    4, 20, or 52 bytes of padding can be used */
769751ee09SNobuhiro Iwamatsu #define RX_DESC_PADDING		4
779751ee09SNobuhiro Iwamatsu #define RX_DESC_SIZE		(12 + RX_DESC_PADDING)
789751ee09SNobuhiro Iwamatsu 
799751ee09SNobuhiro Iwamatsu /* Rx descriptor. We always use 4 bytes of padding */
809751ee09SNobuhiro Iwamatsu struct rx_desc_s {
819751ee09SNobuhiro Iwamatsu 	volatile u32 rd0;
829751ee09SNobuhiro Iwamatsu 	volatile u32 rd1;
839751ee09SNobuhiro Iwamatsu 	u32 rd2;		/* Buffer start */
849751ee09SNobuhiro Iwamatsu 	u32 padding;
859751ee09SNobuhiro Iwamatsu };
869751ee09SNobuhiro Iwamatsu 
87bd3980ccSNobuhiro Iwamatsu struct sh_eth_info {
889751ee09SNobuhiro Iwamatsu 	struct tx_desc_s *tx_desc_malloc;
899751ee09SNobuhiro Iwamatsu 	struct tx_desc_s *tx_desc_base;
909751ee09SNobuhiro Iwamatsu 	struct tx_desc_s *tx_desc_cur;
919751ee09SNobuhiro Iwamatsu 	struct rx_desc_s *rx_desc_malloc;
929751ee09SNobuhiro Iwamatsu 	struct rx_desc_s *rx_desc_base;
939751ee09SNobuhiro Iwamatsu 	struct rx_desc_s *rx_desc_cur;
949751ee09SNobuhiro Iwamatsu 	u8 *rx_buf_malloc;
959751ee09SNobuhiro Iwamatsu 	u8 *rx_buf_base;
969751ee09SNobuhiro Iwamatsu 	u8 mac_addr[6];
979751ee09SNobuhiro Iwamatsu 	u8 phy_addr;
98bd3980ccSNobuhiro Iwamatsu 	struct eth_device *dev;
99bd1024b0SYoshihiro Shimoda 	struct phy_device *phydev;
1009751ee09SNobuhiro Iwamatsu };
1019751ee09SNobuhiro Iwamatsu 
102bd3980ccSNobuhiro Iwamatsu struct sh_eth_dev {
1039751ee09SNobuhiro Iwamatsu 	int port;
104bd3980ccSNobuhiro Iwamatsu 	struct sh_eth_info port_info[MAX_PORT_NUM];
1059751ee09SNobuhiro Iwamatsu };
1069751ee09SNobuhiro Iwamatsu 
10749afb8caSYoshihiro Shimoda /* from linux/drivers/net/ethernet/renesas/sh_eth.h */
10849afb8caSYoshihiro Shimoda enum {
10949afb8caSYoshihiro Shimoda 	/* E-DMAC registers */
11049afb8caSYoshihiro Shimoda 	EDSR = 0,
11149afb8caSYoshihiro Shimoda 	EDMR,
11249afb8caSYoshihiro Shimoda 	EDTRR,
11349afb8caSYoshihiro Shimoda 	EDRRR,
11449afb8caSYoshihiro Shimoda 	EESR,
11549afb8caSYoshihiro Shimoda 	EESIPR,
11649afb8caSYoshihiro Shimoda 	TDLAR,
11749afb8caSYoshihiro Shimoda 	TDFAR,
11849afb8caSYoshihiro Shimoda 	TDFXR,
11949afb8caSYoshihiro Shimoda 	TDFFR,
12049afb8caSYoshihiro Shimoda 	RDLAR,
12149afb8caSYoshihiro Shimoda 	RDFAR,
12249afb8caSYoshihiro Shimoda 	RDFXR,
12349afb8caSYoshihiro Shimoda 	RDFFR,
12449afb8caSYoshihiro Shimoda 	TRSCER,
12549afb8caSYoshihiro Shimoda 	RMFCR,
12649afb8caSYoshihiro Shimoda 	TFTR,
12749afb8caSYoshihiro Shimoda 	FDR,
12849afb8caSYoshihiro Shimoda 	RMCR,
12949afb8caSYoshihiro Shimoda 	EDOCR,
13049afb8caSYoshihiro Shimoda 	TFUCR,
13149afb8caSYoshihiro Shimoda 	RFOCR,
13249afb8caSYoshihiro Shimoda 	FCFTR,
13349afb8caSYoshihiro Shimoda 	RPADIR,
13449afb8caSYoshihiro Shimoda 	TRIMD,
13549afb8caSYoshihiro Shimoda 	RBWAR,
13649afb8caSYoshihiro Shimoda 	TBRAR,
13749afb8caSYoshihiro Shimoda 
13849afb8caSYoshihiro Shimoda 	/* Ether registers */
13949afb8caSYoshihiro Shimoda 	ECMR,
14049afb8caSYoshihiro Shimoda 	ECSR,
14149afb8caSYoshihiro Shimoda 	ECSIPR,
14249afb8caSYoshihiro Shimoda 	PIR,
14349afb8caSYoshihiro Shimoda 	PSR,
14449afb8caSYoshihiro Shimoda 	RDMLR,
14549afb8caSYoshihiro Shimoda 	PIPR,
14649afb8caSYoshihiro Shimoda 	RFLR,
14749afb8caSYoshihiro Shimoda 	IPGR,
14849afb8caSYoshihiro Shimoda 	APR,
14949afb8caSYoshihiro Shimoda 	MPR,
15049afb8caSYoshihiro Shimoda 	PFTCR,
15149afb8caSYoshihiro Shimoda 	PFRCR,
15249afb8caSYoshihiro Shimoda 	RFCR,
15349afb8caSYoshihiro Shimoda 	RFCF,
15449afb8caSYoshihiro Shimoda 	TPAUSER,
15549afb8caSYoshihiro Shimoda 	TPAUSECR,
15649afb8caSYoshihiro Shimoda 	BCFR,
15749afb8caSYoshihiro Shimoda 	BCFRR,
15849afb8caSYoshihiro Shimoda 	GECMR,
15949afb8caSYoshihiro Shimoda 	BCULR,
16049afb8caSYoshihiro Shimoda 	MAHR,
16149afb8caSYoshihiro Shimoda 	MALR,
16249afb8caSYoshihiro Shimoda 	TROCR,
16349afb8caSYoshihiro Shimoda 	CDCR,
16449afb8caSYoshihiro Shimoda 	LCCR,
16549afb8caSYoshihiro Shimoda 	CNDCR,
16649afb8caSYoshihiro Shimoda 	CEFCR,
16749afb8caSYoshihiro Shimoda 	FRECR,
16849afb8caSYoshihiro Shimoda 	TSFRCR,
16949afb8caSYoshihiro Shimoda 	TLFRCR,
17049afb8caSYoshihiro Shimoda 	CERCR,
17149afb8caSYoshihiro Shimoda 	CEECR,
17249afb8caSYoshihiro Shimoda 	MAFCR,
17349afb8caSYoshihiro Shimoda 	RTRATE,
17449afb8caSYoshihiro Shimoda 	CSMR,
17549afb8caSYoshihiro Shimoda 	RMII_MII,
17649afb8caSYoshihiro Shimoda 
17749afb8caSYoshihiro Shimoda 	/* This value must be written at last. */
17849afb8caSYoshihiro Shimoda 	SH_ETH_MAX_REGISTER_OFFSET,
17949afb8caSYoshihiro Shimoda };
18049afb8caSYoshihiro Shimoda 
18149afb8caSYoshihiro Shimoda static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
18249afb8caSYoshihiro Shimoda 	[EDSR]	= 0x0000,
18349afb8caSYoshihiro Shimoda 	[EDMR]	= 0x0400,
18449afb8caSYoshihiro Shimoda 	[EDTRR]	= 0x0408,
18549afb8caSYoshihiro Shimoda 	[EDRRR]	= 0x0410,
18649afb8caSYoshihiro Shimoda 	[EESR]	= 0x0428,
18749afb8caSYoshihiro Shimoda 	[EESIPR]	= 0x0430,
18849afb8caSYoshihiro Shimoda 	[TDLAR]	= 0x0010,
18949afb8caSYoshihiro Shimoda 	[TDFAR]	= 0x0014,
19049afb8caSYoshihiro Shimoda 	[TDFXR]	= 0x0018,
19149afb8caSYoshihiro Shimoda 	[TDFFR]	= 0x001c,
19249afb8caSYoshihiro Shimoda 	[RDLAR]	= 0x0030,
19349afb8caSYoshihiro Shimoda 	[RDFAR]	= 0x0034,
19449afb8caSYoshihiro Shimoda 	[RDFXR]	= 0x0038,
19549afb8caSYoshihiro Shimoda 	[RDFFR]	= 0x003c,
19649afb8caSYoshihiro Shimoda 	[TRSCER]	= 0x0438,
19749afb8caSYoshihiro Shimoda 	[RMFCR]	= 0x0440,
19849afb8caSYoshihiro Shimoda 	[TFTR]	= 0x0448,
19949afb8caSYoshihiro Shimoda 	[FDR]	= 0x0450,
20049afb8caSYoshihiro Shimoda 	[RMCR]	= 0x0458,
20149afb8caSYoshihiro Shimoda 	[RPADIR]	= 0x0460,
20249afb8caSYoshihiro Shimoda 	[FCFTR]	= 0x0468,
20349afb8caSYoshihiro Shimoda 	[CSMR] = 0x04E4,
20449afb8caSYoshihiro Shimoda 
20549afb8caSYoshihiro Shimoda 	[ECMR]	= 0x0500,
20649afb8caSYoshihiro Shimoda 	[ECSR]	= 0x0510,
20749afb8caSYoshihiro Shimoda 	[ECSIPR]	= 0x0518,
20849afb8caSYoshihiro Shimoda 	[PIR]	= 0x0520,
20949afb8caSYoshihiro Shimoda 	[PSR]	= 0x0528,
21049afb8caSYoshihiro Shimoda 	[PIPR]	= 0x052c,
21149afb8caSYoshihiro Shimoda 	[RFLR]	= 0x0508,
21249afb8caSYoshihiro Shimoda 	[APR]	= 0x0554,
21349afb8caSYoshihiro Shimoda 	[MPR]	= 0x0558,
21449afb8caSYoshihiro Shimoda 	[PFTCR]	= 0x055c,
21549afb8caSYoshihiro Shimoda 	[PFRCR]	= 0x0560,
21649afb8caSYoshihiro Shimoda 	[TPAUSER]	= 0x0564,
21749afb8caSYoshihiro Shimoda 	[GECMR]	= 0x05b0,
21849afb8caSYoshihiro Shimoda 	[BCULR]	= 0x05b4,
21949afb8caSYoshihiro Shimoda 	[MAHR]	= 0x05c0,
22049afb8caSYoshihiro Shimoda 	[MALR]	= 0x05c8,
22149afb8caSYoshihiro Shimoda 	[TROCR]	= 0x0700,
22249afb8caSYoshihiro Shimoda 	[CDCR]	= 0x0708,
22349afb8caSYoshihiro Shimoda 	[LCCR]	= 0x0710,
22449afb8caSYoshihiro Shimoda 	[CEFCR]	= 0x0740,
22549afb8caSYoshihiro Shimoda 	[FRECR]	= 0x0748,
22649afb8caSYoshihiro Shimoda 	[TSFRCR]	= 0x0750,
22749afb8caSYoshihiro Shimoda 	[TLFRCR]	= 0x0758,
22849afb8caSYoshihiro Shimoda 	[RFCR]	= 0x0760,
22949afb8caSYoshihiro Shimoda 	[CERCR]	= 0x0768,
23049afb8caSYoshihiro Shimoda 	[CEECR]	= 0x0770,
23149afb8caSYoshihiro Shimoda 	[MAFCR]	= 0x0778,
23249afb8caSYoshihiro Shimoda 	[RMII_MII] =  0x0790,
23349afb8caSYoshihiro Shimoda };
23449afb8caSYoshihiro Shimoda 
23549afb8caSYoshihiro Shimoda static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {
23649afb8caSYoshihiro Shimoda 	[ECMR]	= 0x0100,
23749afb8caSYoshihiro Shimoda 	[RFLR]	= 0x0108,
23849afb8caSYoshihiro Shimoda 	[ECSR]	= 0x0110,
23949afb8caSYoshihiro Shimoda 	[ECSIPR]	= 0x0118,
24049afb8caSYoshihiro Shimoda 	[PIR]	= 0x0120,
24149afb8caSYoshihiro Shimoda 	[PSR]	= 0x0128,
24249afb8caSYoshihiro Shimoda 	[RDMLR]	= 0x0140,
24349afb8caSYoshihiro Shimoda 	[IPGR]	= 0x0150,
24449afb8caSYoshihiro Shimoda 	[APR]	= 0x0154,
24549afb8caSYoshihiro Shimoda 	[MPR]	= 0x0158,
24649afb8caSYoshihiro Shimoda 	[TPAUSER]	= 0x0164,
24749afb8caSYoshihiro Shimoda 	[RFCF]	= 0x0160,
24849afb8caSYoshihiro Shimoda 	[TPAUSECR]	= 0x0168,
24949afb8caSYoshihiro Shimoda 	[BCFRR]	= 0x016c,
25049afb8caSYoshihiro Shimoda 	[MAHR]	= 0x01c0,
25149afb8caSYoshihiro Shimoda 	[MALR]	= 0x01c8,
25249afb8caSYoshihiro Shimoda 	[TROCR]	= 0x01d0,
25349afb8caSYoshihiro Shimoda 	[CDCR]	= 0x01d4,
25449afb8caSYoshihiro Shimoda 	[LCCR]	= 0x01d8,
25549afb8caSYoshihiro Shimoda 	[CNDCR]	= 0x01dc,
25649afb8caSYoshihiro Shimoda 	[CEFCR]	= 0x01e4,
25749afb8caSYoshihiro Shimoda 	[FRECR]	= 0x01e8,
25849afb8caSYoshihiro Shimoda 	[TSFRCR]	= 0x01ec,
25949afb8caSYoshihiro Shimoda 	[TLFRCR]	= 0x01f0,
26049afb8caSYoshihiro Shimoda 	[RFCR]	= 0x01f4,
26149afb8caSYoshihiro Shimoda 	[MAFCR]	= 0x01f8,
26249afb8caSYoshihiro Shimoda 	[RTRATE]	= 0x01fc,
26349afb8caSYoshihiro Shimoda 
26449afb8caSYoshihiro Shimoda 	[EDMR]	= 0x0000,
26549afb8caSYoshihiro Shimoda 	[EDTRR]	= 0x0008,
26649afb8caSYoshihiro Shimoda 	[EDRRR]	= 0x0010,
26749afb8caSYoshihiro Shimoda 	[TDLAR]	= 0x0018,
26849afb8caSYoshihiro Shimoda 	[RDLAR]	= 0x0020,
26949afb8caSYoshihiro Shimoda 	[EESR]	= 0x0028,
27049afb8caSYoshihiro Shimoda 	[EESIPR]	= 0x0030,
27149afb8caSYoshihiro Shimoda 	[TRSCER]	= 0x0038,
27249afb8caSYoshihiro Shimoda 	[RMFCR]	= 0x0040,
27349afb8caSYoshihiro Shimoda 	[TFTR]	= 0x0048,
27449afb8caSYoshihiro Shimoda 	[FDR]	= 0x0050,
27549afb8caSYoshihiro Shimoda 	[RMCR]	= 0x0058,
27649afb8caSYoshihiro Shimoda 	[TFUCR]	= 0x0064,
27749afb8caSYoshihiro Shimoda 	[RFOCR]	= 0x0068,
27849afb8caSYoshihiro Shimoda 	[FCFTR]	= 0x0070,
27949afb8caSYoshihiro Shimoda 	[RPADIR]	= 0x0078,
28049afb8caSYoshihiro Shimoda 	[TRIMD]	= 0x007c,
28149afb8caSYoshihiro Shimoda 	[RBWAR]	= 0x00c8,
28249afb8caSYoshihiro Shimoda 	[RDFAR]	= 0x00cc,
28349afb8caSYoshihiro Shimoda 	[TBRAR]	= 0x00d4,
28449afb8caSYoshihiro Shimoda 	[TDFAR]	= 0x00d8,
28549afb8caSYoshihiro Shimoda };
28649afb8caSYoshihiro Shimoda 
2879751ee09SNobuhiro Iwamatsu /* Register Address */
28849afb8caSYoshihiro Shimoda #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
28926235093SYoshihiro Shimoda #define SH_ETH_TYPE_GETHER
2909751ee09SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xfee00000
291903de461SYoshihiro Shimoda #elif defined(CONFIG_CPU_SH7757)
292631fea8fSYoshihiro Shimoda #if defined(CONFIG_SH_ETHER_USE_GETHER)
293631fea8fSYoshihiro Shimoda #define SH_ETH_TYPE_GETHER
294631fea8fSYoshihiro Shimoda #define BASE_IO_ADDR	0xfee00000
295631fea8fSYoshihiro Shimoda #else
29626235093SYoshihiro Shimoda #define SH_ETH_TYPE_ETHER
297903de461SYoshihiro Shimoda #define BASE_IO_ADDR	0xfef00000
298631fea8fSYoshihiro Shimoda #endif
2993bb4cc31SNobuhiro Iwamatsu #elif defined(CONFIG_CPU_SH7724)
30026235093SYoshihiro Shimoda #define SH_ETH_TYPE_ETHER
3013bb4cc31SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xA4600000
302*dcd5a593SNobuhiro Iwamatsu #elif defined(CONFIG_R8A7740)
303*dcd5a593SNobuhiro Iwamatsu #define SH_ETH_TYPE_GETHER
304*dcd5a593SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xE9A00000
305903de461SYoshihiro Shimoda #endif
306903de461SYoshihiro Shimoda 
3079751ee09SNobuhiro Iwamatsu /*
3089751ee09SNobuhiro Iwamatsu  * Register's bits
3099751ee09SNobuhiro Iwamatsu  * Copy from Linux driver source code
3109751ee09SNobuhiro Iwamatsu  */
31126235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
3129751ee09SNobuhiro Iwamatsu /* EDSR */
3139751ee09SNobuhiro Iwamatsu enum EDSR_BIT {
3149751ee09SNobuhiro Iwamatsu 	EDSR_ENT = 0x01, EDSR_ENR = 0x02,
3159751ee09SNobuhiro Iwamatsu };
3169751ee09SNobuhiro Iwamatsu #define EDSR_ENALL (EDSR_ENT|EDSR_ENR)
3179751ee09SNobuhiro Iwamatsu #endif
3189751ee09SNobuhiro Iwamatsu 
3199751ee09SNobuhiro Iwamatsu /* EDMR */
3209751ee09SNobuhiro Iwamatsu enum DMAC_M_BIT {
3219751ee09SNobuhiro Iwamatsu 	EDMR_DL1 = 0x20, EDMR_DL0 = 0x10,
32226235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
323ee6ec5d4SNobuhiro Iwamatsu 	EDMR_SRST	= 0x03, /* Receive/Send reset */
3249751ee09SNobuhiro Iwamatsu 	EMDR_DESC_R	= 0x30, /* Descriptor reserve size */
3259751ee09SNobuhiro Iwamatsu 	EDMR_EL		= 0x40, /* Litte endian */
32626235093SYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER)
327903de461SYoshihiro Shimoda 	EDMR_SRST	= 0x01,
328903de461SYoshihiro Shimoda 	EMDR_DESC_R	= 0x30, /* Descriptor reserve size */
329903de461SYoshihiro Shimoda 	EDMR_EL		= 0x40, /* Litte endian */
33026235093SYoshihiro Shimoda #else
3319751ee09SNobuhiro Iwamatsu 	EDMR_SRST = 0x01,
3329751ee09SNobuhiro Iwamatsu #endif
3339751ee09SNobuhiro Iwamatsu };
3349751ee09SNobuhiro Iwamatsu 
3359751ee09SNobuhiro Iwamatsu /* RFLR */
3369751ee09SNobuhiro Iwamatsu #define RFLR_RFL_MIN	0x05EE	/* Recv Frame length 1518 byte */
3379751ee09SNobuhiro Iwamatsu 
3389751ee09SNobuhiro Iwamatsu /* EDTRR */
3399751ee09SNobuhiro Iwamatsu enum DMAC_T_BIT {
34026235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
3419751ee09SNobuhiro Iwamatsu 	EDTRR_TRNS = 0x03,
3429751ee09SNobuhiro Iwamatsu #else
3439751ee09SNobuhiro Iwamatsu 	EDTRR_TRNS = 0x01,
3449751ee09SNobuhiro Iwamatsu #endif
3459751ee09SNobuhiro Iwamatsu };
3469751ee09SNobuhiro Iwamatsu 
3479751ee09SNobuhiro Iwamatsu /* GECMR */
3489751ee09SNobuhiro Iwamatsu enum GECMR_BIT {
349631fea8fSYoshihiro Shimoda #if defined(CONFIG_CPU_SH7757)
350631fea8fSYoshihiro Shimoda 	GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00,
351631fea8fSYoshihiro Shimoda #else
35209fcc8b5SSimon Munton 	GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00,
353631fea8fSYoshihiro Shimoda #endif
3549751ee09SNobuhiro Iwamatsu };
3559751ee09SNobuhiro Iwamatsu 
3569751ee09SNobuhiro Iwamatsu /* EDRRR*/
3579751ee09SNobuhiro Iwamatsu enum EDRRR_R_BIT {
3589751ee09SNobuhiro Iwamatsu 	EDRRR_R = 0x01,
3599751ee09SNobuhiro Iwamatsu };
3609751ee09SNobuhiro Iwamatsu 
3619751ee09SNobuhiro Iwamatsu /* TPAUSER */
3629751ee09SNobuhiro Iwamatsu enum TPAUSER_BIT {
3639751ee09SNobuhiro Iwamatsu 	TPAUSER_TPAUSE = 0x0000ffff,
3649751ee09SNobuhiro Iwamatsu 	TPAUSER_UNLIMITED = 0,
3659751ee09SNobuhiro Iwamatsu };
3669751ee09SNobuhiro Iwamatsu 
3679751ee09SNobuhiro Iwamatsu /* BCFR */
3689751ee09SNobuhiro Iwamatsu enum BCFR_BIT {
3699751ee09SNobuhiro Iwamatsu 	BCFR_RPAUSE = 0x0000ffff,
3709751ee09SNobuhiro Iwamatsu 	BCFR_UNLIMITED = 0,
3719751ee09SNobuhiro Iwamatsu };
3729751ee09SNobuhiro Iwamatsu 
3739751ee09SNobuhiro Iwamatsu /* PIR */
3749751ee09SNobuhiro Iwamatsu enum PIR_BIT {
3759751ee09SNobuhiro Iwamatsu 	PIR_MDI = 0x08, PIR_MDO = 0x04, PIR_MMD = 0x02, PIR_MDC = 0x01,
3769751ee09SNobuhiro Iwamatsu };
3779751ee09SNobuhiro Iwamatsu 
3789751ee09SNobuhiro Iwamatsu /* PSR */
3799751ee09SNobuhiro Iwamatsu enum PHY_STATUS_BIT { PHY_ST_LINK = 0x01, };
3809751ee09SNobuhiro Iwamatsu 
3819751ee09SNobuhiro Iwamatsu /* EESR */
3829751ee09SNobuhiro Iwamatsu enum EESR_BIT {
383ee6ec5d4SNobuhiro Iwamatsu 
38426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
3859751ee09SNobuhiro Iwamatsu 	EESR_TWB  = 0x40000000,
3869751ee09SNobuhiro Iwamatsu #else
3879751ee09SNobuhiro Iwamatsu 	EESR_TWB  = 0xC0000000,
3889751ee09SNobuhiro Iwamatsu 	EESR_TC1  = 0x20000000,
3899751ee09SNobuhiro Iwamatsu 	EESR_TUC  = 0x10000000,
3909751ee09SNobuhiro Iwamatsu 	EESR_ROC  = 0x80000000,
3919751ee09SNobuhiro Iwamatsu #endif
3929751ee09SNobuhiro Iwamatsu 	EESR_TABT = 0x04000000,
3939751ee09SNobuhiro Iwamatsu 	EESR_RABT = 0x02000000, EESR_RFRMER = 0x01000000,
39426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
3959751ee09SNobuhiro Iwamatsu 	EESR_ADE  = 0x00800000,
3969751ee09SNobuhiro Iwamatsu #endif
3979751ee09SNobuhiro Iwamatsu 	EESR_ECI  = 0x00400000,
3989751ee09SNobuhiro Iwamatsu 	EESR_FTC  = 0x00200000, EESR_TDE  = 0x00100000,
3999751ee09SNobuhiro Iwamatsu 	EESR_TFE  = 0x00080000, EESR_FRC  = 0x00040000,
4009751ee09SNobuhiro Iwamatsu 	EESR_RDE  = 0x00020000, EESR_RFE  = 0x00010000,
40126235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
4029751ee09SNobuhiro Iwamatsu 	EESR_CND  = 0x00000800,
4039751ee09SNobuhiro Iwamatsu #endif
4049751ee09SNobuhiro Iwamatsu 	EESR_DLC  = 0x00000400,
4059751ee09SNobuhiro Iwamatsu 	EESR_CD   = 0x00000200, EESR_RTO  = 0x00000100,
4069751ee09SNobuhiro Iwamatsu 	EESR_RMAF = 0x00000080, EESR_CEEF = 0x00000040,
4079751ee09SNobuhiro Iwamatsu 	EESR_CELF = 0x00000020, EESR_RRF  = 0x00000010,
4089751ee09SNobuhiro Iwamatsu 	rESR_RTLF = 0x00000008, EESR_RTSF = 0x00000004,
4099751ee09SNobuhiro Iwamatsu 	EESR_PRE  = 0x00000002, EESR_CERF = 0x00000001,
4109751ee09SNobuhiro Iwamatsu };
4119751ee09SNobuhiro Iwamatsu 
4129751ee09SNobuhiro Iwamatsu 
41326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
4149751ee09SNobuhiro Iwamatsu # define TX_CHECK (EESR_TC1 | EESR_FTC)
4159751ee09SNobuhiro Iwamatsu # define EESR_ERR_CHECK	(EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
4169751ee09SNobuhiro Iwamatsu 		| EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI)
4179751ee09SNobuhiro Iwamatsu # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE)
4189751ee09SNobuhiro Iwamatsu 
4199751ee09SNobuhiro Iwamatsu #else
4209751ee09SNobuhiro Iwamatsu # define TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO)
4219751ee09SNobuhiro Iwamatsu # define EESR_ERR_CHECK	(EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
4229751ee09SNobuhiro Iwamatsu 		| EESR_RFRMER | EESR_ADE | EESR_TFE | EESR_TDE | EESR_ECI)
4239751ee09SNobuhiro Iwamatsu # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | EESR_TFE)
4249751ee09SNobuhiro Iwamatsu #endif
4259751ee09SNobuhiro Iwamatsu 
4269751ee09SNobuhiro Iwamatsu /* EESIPR */
4279751ee09SNobuhiro Iwamatsu enum DMAC_IM_BIT {
4289751ee09SNobuhiro Iwamatsu 	DMAC_M_TWB = 0x40000000, DMAC_M_TABT = 0x04000000,
4299751ee09SNobuhiro Iwamatsu 	DMAC_M_RABT = 0x02000000,
4309751ee09SNobuhiro Iwamatsu 	DMAC_M_RFRMER = 0x01000000, DMAC_M_ADF = 0x00800000,
4319751ee09SNobuhiro Iwamatsu 	DMAC_M_ECI = 0x00400000, DMAC_M_FTC = 0x00200000,
4329751ee09SNobuhiro Iwamatsu 	DMAC_M_TDE = 0x00100000, DMAC_M_TFE = 0x00080000,
4339751ee09SNobuhiro Iwamatsu 	DMAC_M_FRC = 0x00040000, DMAC_M_RDE = 0x00020000,
4349751ee09SNobuhiro Iwamatsu 	DMAC_M_RFE = 0x00010000, DMAC_M_TINT4 = 0x00000800,
4359751ee09SNobuhiro Iwamatsu 	DMAC_M_TINT3 = 0x00000400, DMAC_M_TINT2 = 0x00000200,
4369751ee09SNobuhiro Iwamatsu 	DMAC_M_TINT1 = 0x00000100, DMAC_M_RINT8 = 0x00000080,
4379751ee09SNobuhiro Iwamatsu 	DMAC_M_RINT5 = 0x00000010, DMAC_M_RINT4 = 0x00000008,
4389751ee09SNobuhiro Iwamatsu 	DMAC_M_RINT3 = 0x00000004, DMAC_M_RINT2 = 0x00000002,
4399751ee09SNobuhiro Iwamatsu 	DMAC_M_RINT1 = 0x00000001,
4409751ee09SNobuhiro Iwamatsu };
4419751ee09SNobuhiro Iwamatsu 
4429751ee09SNobuhiro Iwamatsu /* Receive descriptor bit */
4439751ee09SNobuhiro Iwamatsu enum RD_STS_BIT {
4449751ee09SNobuhiro Iwamatsu 	RD_RACT = 0x80000000, RD_RDLE = 0x40000000,
4459751ee09SNobuhiro Iwamatsu 	RD_RFP1 = 0x20000000, RD_RFP0 = 0x10000000,
4469751ee09SNobuhiro Iwamatsu 	RD_RFE = 0x08000000, RD_RFS10 = 0x00000200,
4479751ee09SNobuhiro Iwamatsu 	RD_RFS9 = 0x00000100, RD_RFS8 = 0x00000080,
4489751ee09SNobuhiro Iwamatsu 	RD_RFS7 = 0x00000040, RD_RFS6 = 0x00000020,
4499751ee09SNobuhiro Iwamatsu 	RD_RFS5 = 0x00000010, RD_RFS4 = 0x00000008,
4509751ee09SNobuhiro Iwamatsu 	RD_RFS3 = 0x00000004, RD_RFS2 = 0x00000002,
4519751ee09SNobuhiro Iwamatsu 	RD_RFS1 = 0x00000001,
4529751ee09SNobuhiro Iwamatsu };
4539751ee09SNobuhiro Iwamatsu #define RDF1ST	RD_RFP1
4549751ee09SNobuhiro Iwamatsu #define RDFEND	RD_RFP0
4559751ee09SNobuhiro Iwamatsu #define RD_RFP	(RD_RFP1|RD_RFP0)
4569751ee09SNobuhiro Iwamatsu 
4579751ee09SNobuhiro Iwamatsu /* RDFFR*/
4589751ee09SNobuhiro Iwamatsu enum RDFFR_BIT {
4599751ee09SNobuhiro Iwamatsu 	RDFFR_RDLF = 0x01,
4609751ee09SNobuhiro Iwamatsu };
4619751ee09SNobuhiro Iwamatsu 
4629751ee09SNobuhiro Iwamatsu /* FCFTR */
4639751ee09SNobuhiro Iwamatsu enum FCFTR_BIT {
4649751ee09SNobuhiro Iwamatsu 	FCFTR_RFF2 = 0x00040000, FCFTR_RFF1 = 0x00020000,
4659751ee09SNobuhiro Iwamatsu 	FCFTR_RFF0 = 0x00010000, FCFTR_RFD2 = 0x00000004,
4669751ee09SNobuhiro Iwamatsu 	FCFTR_RFD1 = 0x00000002, FCFTR_RFD0 = 0x00000001,
4679751ee09SNobuhiro Iwamatsu };
4689751ee09SNobuhiro Iwamatsu #define FIFO_F_D_RFF	(FCFTR_RFF2|FCFTR_RFF1|FCFTR_RFF0)
4699751ee09SNobuhiro Iwamatsu #define FIFO_F_D_RFD	(FCFTR_RFD2|FCFTR_RFD1|FCFTR_RFD0)
4709751ee09SNobuhiro Iwamatsu 
4719751ee09SNobuhiro Iwamatsu /* Transfer descriptor bit */
4729751ee09SNobuhiro Iwamatsu enum TD_STS_BIT {
47326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_ETHER)
4749751ee09SNobuhiro Iwamatsu 	TD_TACT = 0x80000000,
4759751ee09SNobuhiro Iwamatsu #else
4769751ee09SNobuhiro Iwamatsu 	TD_TACT = 0x7fffffff,
4779751ee09SNobuhiro Iwamatsu #endif
4789751ee09SNobuhiro Iwamatsu 	TD_TDLE = 0x40000000, TD_TFP1 = 0x20000000,
4799751ee09SNobuhiro Iwamatsu 	TD_TFP0 = 0x10000000,
4809751ee09SNobuhiro Iwamatsu };
4819751ee09SNobuhiro Iwamatsu #define TDF1ST	TD_TFP1
4829751ee09SNobuhiro Iwamatsu #define TDFEND	TD_TFP0
4839751ee09SNobuhiro Iwamatsu #define TD_TFP	(TD_TFP1|TD_TFP0)
4849751ee09SNobuhiro Iwamatsu 
4859751ee09SNobuhiro Iwamatsu /* RMCR */
4869751ee09SNobuhiro Iwamatsu enum RECV_RST_BIT { RMCR_RST = 0x01, };
4879751ee09SNobuhiro Iwamatsu /* ECMR */
4889751ee09SNobuhiro Iwamatsu enum FELIC_MODE_BIT {
48926235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
4909751ee09SNobuhiro Iwamatsu 	ECMR_TRCCM=0x04000000, ECMR_RCSC= 0x00800000, ECMR_DPAD= 0x00200000,
4919751ee09SNobuhiro Iwamatsu 	ECMR_RZPF = 0x00100000,
4929751ee09SNobuhiro Iwamatsu #endif
4939751ee09SNobuhiro Iwamatsu 	ECMR_ZPF = 0x00080000, ECMR_PFR = 0x00040000, ECMR_RXF = 0x00020000,
4949751ee09SNobuhiro Iwamatsu 	ECMR_TXF = 0x00010000, ECMR_MCT = 0x00002000, ECMR_PRCEF = 0x00001000,
4959751ee09SNobuhiro Iwamatsu 	ECMR_PMDE = 0x00000200, ECMR_RE = 0x00000040, ECMR_TE = 0x00000020,
4969751ee09SNobuhiro Iwamatsu 	ECMR_ILB = 0x00000008, ECMR_ELB = 0x00000004, ECMR_DM = 0x00000002,
4979751ee09SNobuhiro Iwamatsu 	ECMR_PRM = 0x00000001,
4983bb4cc31SNobuhiro Iwamatsu #ifdef CONFIG_CPU_SH7724
4993bb4cc31SNobuhiro Iwamatsu 	ECMR_RTM = 0x00000010,
5003bb4cc31SNobuhiro Iwamatsu #endif
5013bb4cc31SNobuhiro Iwamatsu 
5029751ee09SNobuhiro Iwamatsu };
5039751ee09SNobuhiro Iwamatsu 
50426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
5059751ee09SNobuhiro Iwamatsu #define ECMR_CHG_DM	(ECMR_TRCCM | ECMR_RZPF | ECMR_ZPF | ECMR_PFR | ECMR_RXF | \
5069751ee09SNobuhiro Iwamatsu 						ECMR_TXF | ECMR_MCT)
50726235093SYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER)
5083bb4cc31SNobuhiro Iwamatsu #define ECMR_CHG_DM (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF)
5099751ee09SNobuhiro Iwamatsu #else
510903de461SYoshihiro Shimoda #define ECMR_CHG_DM	(ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF | ECMR_MCT)
5119751ee09SNobuhiro Iwamatsu #endif
5129751ee09SNobuhiro Iwamatsu 
5139751ee09SNobuhiro Iwamatsu /* ECSR */
5149751ee09SNobuhiro Iwamatsu enum ECSR_STATUS_BIT {
51526235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
5169751ee09SNobuhiro Iwamatsu 	ECSR_BRCRX = 0x20, ECSR_PSRTO = 0x10,
5179751ee09SNobuhiro Iwamatsu #endif
5189751ee09SNobuhiro Iwamatsu 	ECSR_LCHNG = 0x04,
5199751ee09SNobuhiro Iwamatsu 	ECSR_MPD = 0x02, ECSR_ICD = 0x01,
5209751ee09SNobuhiro Iwamatsu };
5219751ee09SNobuhiro Iwamatsu 
52226235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
5239751ee09SNobuhiro Iwamatsu # define ECSR_INIT (ECSR_ICD | ECSIPR_MPDIP)
5249751ee09SNobuhiro Iwamatsu #else
5259751ee09SNobuhiro Iwamatsu # define ECSR_INIT (ECSR_BRCRX | ECSR_PSRTO | \
5269751ee09SNobuhiro Iwamatsu 			ECSR_LCHNG | ECSR_ICD | ECSIPR_MPDIP)
5279751ee09SNobuhiro Iwamatsu #endif
5289751ee09SNobuhiro Iwamatsu 
5299751ee09SNobuhiro Iwamatsu /* ECSIPR */
5309751ee09SNobuhiro Iwamatsu enum ECSIPR_STATUS_MASK_BIT {
53126235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
532a6616efbSNobuhiro Iwamatsu 	ECSIPR_BRCRXIP = 0x20,
533ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_PSRTOIP = 0x10,
53426235093SYoshihiro Shimoda #elif defined(SH_ETY_TYPE_GETHER)
535ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_PSRTOIP = 0x10,
536ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_PHYIP = 0x08,
537a6616efbSNobuhiro Iwamatsu #endif
538ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_LCHNGIP = 0x04,
539ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_MPDIP = 0x02,
540ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_ICDIP = 0x01,
5419751ee09SNobuhiro Iwamatsu };
5429751ee09SNobuhiro Iwamatsu 
54326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
5449751ee09SNobuhiro Iwamatsu # define ECSIPR_INIT (ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP)
5459751ee09SNobuhiro Iwamatsu #else
5469751ee09SNobuhiro Iwamatsu # define ECSIPR_INIT (ECSIPR_BRCRXIP | ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | \
5479751ee09SNobuhiro Iwamatsu 				ECSIPR_ICDIP | ECSIPR_MPDIP)
5489751ee09SNobuhiro Iwamatsu #endif
5499751ee09SNobuhiro Iwamatsu 
5509751ee09SNobuhiro Iwamatsu /* APR */
5519751ee09SNobuhiro Iwamatsu enum APR_BIT {
5529751ee09SNobuhiro Iwamatsu 	APR_AP = 0x00000004,
5539751ee09SNobuhiro Iwamatsu };
5549751ee09SNobuhiro Iwamatsu 
5559751ee09SNobuhiro Iwamatsu /* MPR */
5569751ee09SNobuhiro Iwamatsu enum MPR_BIT {
5579751ee09SNobuhiro Iwamatsu 	MPR_MP = 0x00000006,
5589751ee09SNobuhiro Iwamatsu };
5599751ee09SNobuhiro Iwamatsu 
5609751ee09SNobuhiro Iwamatsu /* TRSCER */
5619751ee09SNobuhiro Iwamatsu enum DESC_I_BIT {
5629751ee09SNobuhiro Iwamatsu 	DESC_I_TINT4 = 0x0800, DESC_I_TINT3 = 0x0400, DESC_I_TINT2 = 0x0200,
5639751ee09SNobuhiro Iwamatsu 	DESC_I_TINT1 = 0x0100, DESC_I_RINT8 = 0x0080, DESC_I_RINT5 = 0x0010,
5649751ee09SNobuhiro Iwamatsu 	DESC_I_RINT4 = 0x0008, DESC_I_RINT3 = 0x0004, DESC_I_RINT2 = 0x0002,
5659751ee09SNobuhiro Iwamatsu 	DESC_I_RINT1 = 0x0001,
5669751ee09SNobuhiro Iwamatsu };
5679751ee09SNobuhiro Iwamatsu 
5689751ee09SNobuhiro Iwamatsu /* RPADIR */
5699751ee09SNobuhiro Iwamatsu enum RPADIR_BIT {
5709751ee09SNobuhiro Iwamatsu 	RPADIR_PADS1 = 0x20000, RPADIR_PADS0 = 0x10000,
5719751ee09SNobuhiro Iwamatsu 	RPADIR_PADR = 0x0003f,
5729751ee09SNobuhiro Iwamatsu };
5739751ee09SNobuhiro Iwamatsu 
57426235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
5759751ee09SNobuhiro Iwamatsu # define RPADIR_INIT (0x00)
5769751ee09SNobuhiro Iwamatsu #else
5779751ee09SNobuhiro Iwamatsu # define RPADIR_INIT (RPADIR_PADS1)
5789751ee09SNobuhiro Iwamatsu #endif
5799751ee09SNobuhiro Iwamatsu 
5809751ee09SNobuhiro Iwamatsu /* FDR */
5819751ee09SNobuhiro Iwamatsu enum FIFO_SIZE_BIT {
5829751ee09SNobuhiro Iwamatsu 	FIFO_SIZE_T = 0x00000700, FIFO_SIZE_R = 0x00000007,
5839751ee09SNobuhiro Iwamatsu };
58449afb8caSYoshihiro Shimoda 
58549afb8caSYoshihiro Shimoda static inline unsigned long sh_eth_reg_addr(struct sh_eth_dev *eth,
58649afb8caSYoshihiro Shimoda 					    int enum_index)
58749afb8caSYoshihiro Shimoda {
58849afb8caSYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
58949afb8caSYoshihiro Shimoda 	const u16 *reg_offset = sh_eth_offset_gigabit;
59049afb8caSYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER)
59149afb8caSYoshihiro Shimoda 	const u16 *reg_offset = sh_eth_offset_fast_sh4;
59249afb8caSYoshihiro Shimoda #else
59349afb8caSYoshihiro Shimoda #error
59449afb8caSYoshihiro Shimoda #endif
59549afb8caSYoshihiro Shimoda 	return BASE_IO_ADDR + reg_offset[enum_index] + 0x800 * eth->port;
59649afb8caSYoshihiro Shimoda }
59749afb8caSYoshihiro Shimoda 
59849afb8caSYoshihiro Shimoda static inline void sh_eth_write(struct sh_eth_dev *eth, unsigned long data,
59949afb8caSYoshihiro Shimoda 				int enum_index)
60049afb8caSYoshihiro Shimoda {
60149afb8caSYoshihiro Shimoda 	outl(data, sh_eth_reg_addr(eth, enum_index));
60249afb8caSYoshihiro Shimoda }
60349afb8caSYoshihiro Shimoda 
60449afb8caSYoshihiro Shimoda static inline unsigned long sh_eth_read(struct sh_eth_dev *eth,
60549afb8caSYoshihiro Shimoda 					int enum_index)
60649afb8caSYoshihiro Shimoda {
60749afb8caSYoshihiro Shimoda 	return inl(sh_eth_reg_addr(eth, enum_index));
60849afb8caSYoshihiro Shimoda }
609