xref: /rk3399_rockchip-uboot/drivers/net/sh_eth.h (revision 62cbddc493e5f4c6c1e1ba62bdf36f3df4708a16)
19751ee09SNobuhiro Iwamatsu /*
2903de461SYoshihiro Shimoda  * sh_eth.h - Driver for Renesas SuperH ethernet controler.
39751ee09SNobuhiro Iwamatsu  *
4dcd5a593SNobuhiro Iwamatsu  * Copyright (C) 2008 - 2012 Renesas Solutions Corp.
5dcd5a593SNobuhiro Iwamatsu  * Copyright (c) 2008 - 2012 Nobuhiro Iwamatsu
69751ee09SNobuhiro Iwamatsu  * Copyright (c) 2007 Carlos Munoz <carlos@kenati.com>
79751ee09SNobuhiro Iwamatsu  *
81a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
99751ee09SNobuhiro Iwamatsu  */
109751ee09SNobuhiro Iwamatsu 
11bd3980ccSNobuhiro Iwamatsu #include <netdev.h>
129751ee09SNobuhiro Iwamatsu #include <asm/types.h>
139751ee09SNobuhiro Iwamatsu 
149751ee09SNobuhiro Iwamatsu #define SHETHER_NAME "sh_eth"
159751ee09SNobuhiro Iwamatsu 
16dcd5a593SNobuhiro Iwamatsu #if defined(CONFIG_SH)
179751ee09SNobuhiro Iwamatsu /* Malloc returns addresses in the P1 area (cacheable). However we need to
189751ee09SNobuhiro Iwamatsu    use area P2 (non-cacheable) */
199751ee09SNobuhiro Iwamatsu #define ADDR_TO_P2(addr)	((((int)(addr) & ~0xe0000000) | 0xa0000000))
209751ee09SNobuhiro Iwamatsu 
219751ee09SNobuhiro Iwamatsu /* The ethernet controller needs to use physical addresses */
22903de461SYoshihiro Shimoda #if defined(CONFIG_SH_32BIT)
23903de461SYoshihiro Shimoda #define ADDR_TO_PHY(addr)	((((int)(addr) & ~0xe0000000) | 0x40000000))
24903de461SYoshihiro Shimoda #else
259751ee09SNobuhiro Iwamatsu #define ADDR_TO_PHY(addr)	((int)(addr) & ~0xe0000000)
26903de461SYoshihiro Shimoda #endif
27dcd5a593SNobuhiro Iwamatsu #elif defined(CONFIG_ARM)
28dcd5a593SNobuhiro Iwamatsu #define inl		readl
29dcd5a593SNobuhiro Iwamatsu #define outl	writel
30dcd5a593SNobuhiro Iwamatsu #define ADDR_TO_PHY(addr)	((int)(addr))
31dcd5a593SNobuhiro Iwamatsu #define ADDR_TO_P2(addr)	(addr)
32dcd5a593SNobuhiro Iwamatsu #endif /* defined(CONFIG_SH) */
339751ee09SNobuhiro Iwamatsu 
34f8b7507dSNobuhiro Iwamatsu /* base padding size is 16 */
35f8b7507dSNobuhiro Iwamatsu #ifndef CONFIG_SH_ETHER_ALIGNE_SIZE
36f8b7507dSNobuhiro Iwamatsu #define CONFIG_SH_ETHER_ALIGNE_SIZE 16
37f8b7507dSNobuhiro Iwamatsu #endif
38f8b7507dSNobuhiro Iwamatsu 
399751ee09SNobuhiro Iwamatsu /* Number of supported ports */
409751ee09SNobuhiro Iwamatsu #define MAX_PORT_NUM	2
419751ee09SNobuhiro Iwamatsu 
429751ee09SNobuhiro Iwamatsu /* Buffers must be big enough to hold the largest ethernet frame. Also, rx
439751ee09SNobuhiro Iwamatsu    buffers must be a multiple of 32 bytes */
449751ee09SNobuhiro Iwamatsu #define MAX_BUF_SIZE	(48 * 32)
459751ee09SNobuhiro Iwamatsu 
469751ee09SNobuhiro Iwamatsu /* The number of tx descriptors must be large enough to point to 5 or more
479751ee09SNobuhiro Iwamatsu    frames. If each frame uses 2 descriptors, at least 10 descriptors are needed.
489751ee09SNobuhiro Iwamatsu    We use one descriptor per frame */
499751ee09SNobuhiro Iwamatsu #define NUM_TX_DESC		8
509751ee09SNobuhiro Iwamatsu 
519751ee09SNobuhiro Iwamatsu /* The size of the tx descriptor is determined by how much padding is used.
529751ee09SNobuhiro Iwamatsu    4, 20, or 52 bytes of padding can be used */
53f8b7507dSNobuhiro Iwamatsu #define TX_DESC_PADDING	(CONFIG_SH_ETHER_ALIGNE_SIZE - 12)
54f8b7507dSNobuhiro Iwamatsu /* same as CONFIG_SH_ETHER_ALIGNE_SIZE */
559751ee09SNobuhiro Iwamatsu #define TX_DESC_SIZE	(12 + TX_DESC_PADDING)
569751ee09SNobuhiro Iwamatsu 
57bd3980ccSNobuhiro Iwamatsu /* Tx descriptor. We always use 3 bytes of padding */
589751ee09SNobuhiro Iwamatsu struct tx_desc_s {
599751ee09SNobuhiro Iwamatsu 	volatile u32 td0;
609751ee09SNobuhiro Iwamatsu 	u32 td1;
619751ee09SNobuhiro Iwamatsu 	u32 td2;		/* Buffer start */
62f8b7507dSNobuhiro Iwamatsu 	u8 padding[TX_DESC_PADDING];	/* aligned cache line size */
639751ee09SNobuhiro Iwamatsu };
649751ee09SNobuhiro Iwamatsu 
659751ee09SNobuhiro Iwamatsu /* There is no limitation in the number of rx descriptors */
669751ee09SNobuhiro Iwamatsu #define NUM_RX_DESC	8
679751ee09SNobuhiro Iwamatsu 
689751ee09SNobuhiro Iwamatsu /* The size of the rx descriptor is determined by how much padding is used.
699751ee09SNobuhiro Iwamatsu    4, 20, or 52 bytes of padding can be used */
70f8b7507dSNobuhiro Iwamatsu #define RX_DESC_PADDING	(CONFIG_SH_ETHER_ALIGNE_SIZE - 12)
71f8b7507dSNobuhiro Iwamatsu /* same as CONFIG_SH_ETHER_ALIGNE_SIZE */
729751ee09SNobuhiro Iwamatsu #define RX_DESC_SIZE		(12 + RX_DESC_PADDING)
73f8b7507dSNobuhiro Iwamatsu /* aligned cache line size */
74f8b7507dSNobuhiro Iwamatsu #define RX_BUF_ALIGNE_SIZE	(CONFIG_SH_ETHER_ALIGNE_SIZE > 32 ? 64 : 32)
759751ee09SNobuhiro Iwamatsu 
769751ee09SNobuhiro Iwamatsu /* Rx descriptor. We always use 4 bytes of padding */
779751ee09SNobuhiro Iwamatsu struct rx_desc_s {
789751ee09SNobuhiro Iwamatsu 	volatile u32 rd0;
799751ee09SNobuhiro Iwamatsu 	volatile u32 rd1;
809751ee09SNobuhiro Iwamatsu 	u32 rd2;		/* Buffer start */
81f8b7507dSNobuhiro Iwamatsu 	u8 padding[TX_DESC_PADDING];	/* aligned cache line size */
829751ee09SNobuhiro Iwamatsu };
839751ee09SNobuhiro Iwamatsu 
84bd3980ccSNobuhiro Iwamatsu struct sh_eth_info {
859751ee09SNobuhiro Iwamatsu 	struct tx_desc_s *tx_desc_malloc;
869751ee09SNobuhiro Iwamatsu 	struct tx_desc_s *tx_desc_base;
879751ee09SNobuhiro Iwamatsu 	struct tx_desc_s *tx_desc_cur;
889751ee09SNobuhiro Iwamatsu 	struct rx_desc_s *rx_desc_malloc;
899751ee09SNobuhiro Iwamatsu 	struct rx_desc_s *rx_desc_base;
909751ee09SNobuhiro Iwamatsu 	struct rx_desc_s *rx_desc_cur;
919751ee09SNobuhiro Iwamatsu 	u8 *rx_buf_malloc;
929751ee09SNobuhiro Iwamatsu 	u8 *rx_buf_base;
939751ee09SNobuhiro Iwamatsu 	u8 mac_addr[6];
949751ee09SNobuhiro Iwamatsu 	u8 phy_addr;
95bd3980ccSNobuhiro Iwamatsu 	struct eth_device *dev;
96bd1024b0SYoshihiro Shimoda 	struct phy_device *phydev;
979751ee09SNobuhiro Iwamatsu };
989751ee09SNobuhiro Iwamatsu 
99bd3980ccSNobuhiro Iwamatsu struct sh_eth_dev {
1009751ee09SNobuhiro Iwamatsu 	int port;
101bd3980ccSNobuhiro Iwamatsu 	struct sh_eth_info port_info[MAX_PORT_NUM];
1029751ee09SNobuhiro Iwamatsu };
1039751ee09SNobuhiro Iwamatsu 
10449afb8caSYoshihiro Shimoda /* from linux/drivers/net/ethernet/renesas/sh_eth.h */
10549afb8caSYoshihiro Shimoda enum {
10649afb8caSYoshihiro Shimoda 	/* E-DMAC registers */
10749afb8caSYoshihiro Shimoda 	EDSR = 0,
10849afb8caSYoshihiro Shimoda 	EDMR,
10949afb8caSYoshihiro Shimoda 	EDTRR,
11049afb8caSYoshihiro Shimoda 	EDRRR,
11149afb8caSYoshihiro Shimoda 	EESR,
11249afb8caSYoshihiro Shimoda 	EESIPR,
11349afb8caSYoshihiro Shimoda 	TDLAR,
11449afb8caSYoshihiro Shimoda 	TDFAR,
11549afb8caSYoshihiro Shimoda 	TDFXR,
11649afb8caSYoshihiro Shimoda 	TDFFR,
11749afb8caSYoshihiro Shimoda 	RDLAR,
11849afb8caSYoshihiro Shimoda 	RDFAR,
11949afb8caSYoshihiro Shimoda 	RDFXR,
12049afb8caSYoshihiro Shimoda 	RDFFR,
12149afb8caSYoshihiro Shimoda 	TRSCER,
12249afb8caSYoshihiro Shimoda 	RMFCR,
12349afb8caSYoshihiro Shimoda 	TFTR,
12449afb8caSYoshihiro Shimoda 	FDR,
12549afb8caSYoshihiro Shimoda 	RMCR,
12649afb8caSYoshihiro Shimoda 	EDOCR,
12749afb8caSYoshihiro Shimoda 	TFUCR,
12849afb8caSYoshihiro Shimoda 	RFOCR,
12949afb8caSYoshihiro Shimoda 	FCFTR,
13049afb8caSYoshihiro Shimoda 	RPADIR,
13149afb8caSYoshihiro Shimoda 	TRIMD,
13249afb8caSYoshihiro Shimoda 	RBWAR,
13349afb8caSYoshihiro Shimoda 	TBRAR,
13449afb8caSYoshihiro Shimoda 
13549afb8caSYoshihiro Shimoda 	/* Ether registers */
13649afb8caSYoshihiro Shimoda 	ECMR,
13749afb8caSYoshihiro Shimoda 	ECSR,
13849afb8caSYoshihiro Shimoda 	ECSIPR,
13949afb8caSYoshihiro Shimoda 	PIR,
14049afb8caSYoshihiro Shimoda 	PSR,
14149afb8caSYoshihiro Shimoda 	RDMLR,
14249afb8caSYoshihiro Shimoda 	PIPR,
14349afb8caSYoshihiro Shimoda 	RFLR,
14449afb8caSYoshihiro Shimoda 	IPGR,
14549afb8caSYoshihiro Shimoda 	APR,
14649afb8caSYoshihiro Shimoda 	MPR,
14749afb8caSYoshihiro Shimoda 	PFTCR,
14849afb8caSYoshihiro Shimoda 	PFRCR,
14949afb8caSYoshihiro Shimoda 	RFCR,
15049afb8caSYoshihiro Shimoda 	RFCF,
15149afb8caSYoshihiro Shimoda 	TPAUSER,
15249afb8caSYoshihiro Shimoda 	TPAUSECR,
15349afb8caSYoshihiro Shimoda 	BCFR,
15449afb8caSYoshihiro Shimoda 	BCFRR,
15549afb8caSYoshihiro Shimoda 	GECMR,
15649afb8caSYoshihiro Shimoda 	BCULR,
15749afb8caSYoshihiro Shimoda 	MAHR,
15849afb8caSYoshihiro Shimoda 	MALR,
15949afb8caSYoshihiro Shimoda 	TROCR,
16049afb8caSYoshihiro Shimoda 	CDCR,
16149afb8caSYoshihiro Shimoda 	LCCR,
16249afb8caSYoshihiro Shimoda 	CNDCR,
16349afb8caSYoshihiro Shimoda 	CEFCR,
16449afb8caSYoshihiro Shimoda 	FRECR,
16549afb8caSYoshihiro Shimoda 	TSFRCR,
16649afb8caSYoshihiro Shimoda 	TLFRCR,
16749afb8caSYoshihiro Shimoda 	CERCR,
16849afb8caSYoshihiro Shimoda 	CEECR,
1698707678cSNobuhiro Iwamatsu 	RMIIMR, /* R8A7790 */
17049afb8caSYoshihiro Shimoda 	MAFCR,
17149afb8caSYoshihiro Shimoda 	RTRATE,
17249afb8caSYoshihiro Shimoda 	CSMR,
17349afb8caSYoshihiro Shimoda 	RMII_MII,
17449afb8caSYoshihiro Shimoda 
17549afb8caSYoshihiro Shimoda 	/* This value must be written at last. */
17649afb8caSYoshihiro Shimoda 	SH_ETH_MAX_REGISTER_OFFSET,
17749afb8caSYoshihiro Shimoda };
17849afb8caSYoshihiro Shimoda 
17949afb8caSYoshihiro Shimoda static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
18049afb8caSYoshihiro Shimoda 	[EDSR]	= 0x0000,
18149afb8caSYoshihiro Shimoda 	[EDMR]	= 0x0400,
18249afb8caSYoshihiro Shimoda 	[EDTRR]	= 0x0408,
18349afb8caSYoshihiro Shimoda 	[EDRRR]	= 0x0410,
18449afb8caSYoshihiro Shimoda 	[EESR]	= 0x0428,
18549afb8caSYoshihiro Shimoda 	[EESIPR]	= 0x0430,
18649afb8caSYoshihiro Shimoda 	[TDLAR]	= 0x0010,
18749afb8caSYoshihiro Shimoda 	[TDFAR]	= 0x0014,
18849afb8caSYoshihiro Shimoda 	[TDFXR]	= 0x0018,
18949afb8caSYoshihiro Shimoda 	[TDFFR]	= 0x001c,
19049afb8caSYoshihiro Shimoda 	[RDLAR]	= 0x0030,
19149afb8caSYoshihiro Shimoda 	[RDFAR]	= 0x0034,
19249afb8caSYoshihiro Shimoda 	[RDFXR]	= 0x0038,
19349afb8caSYoshihiro Shimoda 	[RDFFR]	= 0x003c,
19449afb8caSYoshihiro Shimoda 	[TRSCER]	= 0x0438,
19549afb8caSYoshihiro Shimoda 	[RMFCR]	= 0x0440,
19649afb8caSYoshihiro Shimoda 	[TFTR]	= 0x0448,
19749afb8caSYoshihiro Shimoda 	[FDR]	= 0x0450,
19849afb8caSYoshihiro Shimoda 	[RMCR]	= 0x0458,
19949afb8caSYoshihiro Shimoda 	[RPADIR]	= 0x0460,
20049afb8caSYoshihiro Shimoda 	[FCFTR]	= 0x0468,
20149afb8caSYoshihiro Shimoda 	[CSMR] = 0x04E4,
20249afb8caSYoshihiro Shimoda 
20349afb8caSYoshihiro Shimoda 	[ECMR]	= 0x0500,
20449afb8caSYoshihiro Shimoda 	[ECSR]	= 0x0510,
20549afb8caSYoshihiro Shimoda 	[ECSIPR]	= 0x0518,
20649afb8caSYoshihiro Shimoda 	[PIR]	= 0x0520,
20749afb8caSYoshihiro Shimoda 	[PSR]	= 0x0528,
20849afb8caSYoshihiro Shimoda 	[PIPR]	= 0x052c,
20949afb8caSYoshihiro Shimoda 	[RFLR]	= 0x0508,
21049afb8caSYoshihiro Shimoda 	[APR]	= 0x0554,
21149afb8caSYoshihiro Shimoda 	[MPR]	= 0x0558,
21249afb8caSYoshihiro Shimoda 	[PFTCR]	= 0x055c,
21349afb8caSYoshihiro Shimoda 	[PFRCR]	= 0x0560,
21449afb8caSYoshihiro Shimoda 	[TPAUSER]	= 0x0564,
21549afb8caSYoshihiro Shimoda 	[GECMR]	= 0x05b0,
21649afb8caSYoshihiro Shimoda 	[BCULR]	= 0x05b4,
21749afb8caSYoshihiro Shimoda 	[MAHR]	= 0x05c0,
21849afb8caSYoshihiro Shimoda 	[MALR]	= 0x05c8,
21949afb8caSYoshihiro Shimoda 	[TROCR]	= 0x0700,
22049afb8caSYoshihiro Shimoda 	[CDCR]	= 0x0708,
22149afb8caSYoshihiro Shimoda 	[LCCR]	= 0x0710,
22249afb8caSYoshihiro Shimoda 	[CEFCR]	= 0x0740,
22349afb8caSYoshihiro Shimoda 	[FRECR]	= 0x0748,
22449afb8caSYoshihiro Shimoda 	[TSFRCR]	= 0x0750,
22549afb8caSYoshihiro Shimoda 	[TLFRCR]	= 0x0758,
22649afb8caSYoshihiro Shimoda 	[RFCR]	= 0x0760,
22749afb8caSYoshihiro Shimoda 	[CERCR]	= 0x0768,
22849afb8caSYoshihiro Shimoda 	[CEECR]	= 0x0770,
22949afb8caSYoshihiro Shimoda 	[MAFCR]	= 0x0778,
23049afb8caSYoshihiro Shimoda 	[RMII_MII] =  0x0790,
23149afb8caSYoshihiro Shimoda };
23249afb8caSYoshihiro Shimoda 
233*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_RZ)
234*62cbddc4SNobuhiro Iwamatsu static const u16 sh_eth_offset_rz[SH_ETH_MAX_REGISTER_OFFSET] = {
235*62cbddc4SNobuhiro Iwamatsu 	[EDSR]	= 0x0000,
236*62cbddc4SNobuhiro Iwamatsu 	[EDMR]	= 0x0400,
237*62cbddc4SNobuhiro Iwamatsu 	[EDTRR]	= 0x0408,
238*62cbddc4SNobuhiro Iwamatsu 	[EDRRR]	= 0x0410,
239*62cbddc4SNobuhiro Iwamatsu 	[EESR]	= 0x0428,
240*62cbddc4SNobuhiro Iwamatsu 	[EESIPR]	= 0x0430,
241*62cbddc4SNobuhiro Iwamatsu 	[TDLAR]	= 0x0010,
242*62cbddc4SNobuhiro Iwamatsu 	[TDFAR]	= 0x0014,
243*62cbddc4SNobuhiro Iwamatsu 	[TDFXR]	= 0x0018,
244*62cbddc4SNobuhiro Iwamatsu 	[TDFFR]	= 0x001c,
245*62cbddc4SNobuhiro Iwamatsu 	[RDLAR]	= 0x0030,
246*62cbddc4SNobuhiro Iwamatsu 	[RDFAR]	= 0x0034,
247*62cbddc4SNobuhiro Iwamatsu 	[RDFXR]	= 0x0038,
248*62cbddc4SNobuhiro Iwamatsu 	[RDFFR]	= 0x003c,
249*62cbddc4SNobuhiro Iwamatsu 	[TRSCER]	= 0x0438,
250*62cbddc4SNobuhiro Iwamatsu 	[RMFCR]	= 0x0440,
251*62cbddc4SNobuhiro Iwamatsu 	[TFTR]	= 0x0448,
252*62cbddc4SNobuhiro Iwamatsu 	[FDR]	= 0x0450,
253*62cbddc4SNobuhiro Iwamatsu 	[RMCR]	= 0x0458,
254*62cbddc4SNobuhiro Iwamatsu 	[RPADIR]	= 0x0460,
255*62cbddc4SNobuhiro Iwamatsu 	[FCFTR]	= 0x0468,
256*62cbddc4SNobuhiro Iwamatsu 	[CSMR] = 0x04E4,
257*62cbddc4SNobuhiro Iwamatsu 
258*62cbddc4SNobuhiro Iwamatsu 	[ECMR]	= 0x0500,
259*62cbddc4SNobuhiro Iwamatsu 	[ECSR]	= 0x0510,
260*62cbddc4SNobuhiro Iwamatsu 	[ECSIPR]	= 0x0518,
261*62cbddc4SNobuhiro Iwamatsu 	[PSR]	= 0x0528,
262*62cbddc4SNobuhiro Iwamatsu 	[PIPR]	= 0x052c,
263*62cbddc4SNobuhiro Iwamatsu 	[RFLR]	= 0x0508,
264*62cbddc4SNobuhiro Iwamatsu 	[APR]	= 0x0554,
265*62cbddc4SNobuhiro Iwamatsu 	[MPR]	= 0x0558,
266*62cbddc4SNobuhiro Iwamatsu 	[PFTCR]	= 0x055c,
267*62cbddc4SNobuhiro Iwamatsu 	[PFRCR]	= 0x0560,
268*62cbddc4SNobuhiro Iwamatsu 	[TPAUSER]	= 0x0564,
269*62cbddc4SNobuhiro Iwamatsu 	[GECMR]	= 0x05b0,
270*62cbddc4SNobuhiro Iwamatsu 	[BCULR]	= 0x05b4,
271*62cbddc4SNobuhiro Iwamatsu 	[MAHR]	= 0x05c0,
272*62cbddc4SNobuhiro Iwamatsu 	[MALR]	= 0x05c8,
273*62cbddc4SNobuhiro Iwamatsu 	[TROCR]	= 0x0700,
274*62cbddc4SNobuhiro Iwamatsu 	[CDCR]	= 0x0708,
275*62cbddc4SNobuhiro Iwamatsu 	[LCCR]	= 0x0710,
276*62cbddc4SNobuhiro Iwamatsu 	[CEFCR]	= 0x0740,
277*62cbddc4SNobuhiro Iwamatsu 	[FRECR]	= 0x0748,
278*62cbddc4SNobuhiro Iwamatsu 	[TSFRCR]	= 0x0750,
279*62cbddc4SNobuhiro Iwamatsu 	[TLFRCR]	= 0x0758,
280*62cbddc4SNobuhiro Iwamatsu 	[RFCR]	= 0x0760,
281*62cbddc4SNobuhiro Iwamatsu 	[CERCR]	= 0x0768,
282*62cbddc4SNobuhiro Iwamatsu 	[CEECR]	= 0x0770,
283*62cbddc4SNobuhiro Iwamatsu 	[MAFCR]	= 0x0778,
284*62cbddc4SNobuhiro Iwamatsu 	[RMII_MII] =  0x0790,
285*62cbddc4SNobuhiro Iwamatsu };
286*62cbddc4SNobuhiro Iwamatsu #endif
287*62cbddc4SNobuhiro Iwamatsu 
28849afb8caSYoshihiro Shimoda static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {
28949afb8caSYoshihiro Shimoda 	[ECMR]	= 0x0100,
29049afb8caSYoshihiro Shimoda 	[RFLR]	= 0x0108,
29149afb8caSYoshihiro Shimoda 	[ECSR]	= 0x0110,
29249afb8caSYoshihiro Shimoda 	[ECSIPR]	= 0x0118,
29349afb8caSYoshihiro Shimoda 	[PIR]	= 0x0120,
29449afb8caSYoshihiro Shimoda 	[PSR]	= 0x0128,
29549afb8caSYoshihiro Shimoda 	[RDMLR]	= 0x0140,
29649afb8caSYoshihiro Shimoda 	[IPGR]	= 0x0150,
29749afb8caSYoshihiro Shimoda 	[APR]	= 0x0154,
29849afb8caSYoshihiro Shimoda 	[MPR]	= 0x0158,
29949afb8caSYoshihiro Shimoda 	[TPAUSER]	= 0x0164,
30049afb8caSYoshihiro Shimoda 	[RFCF]	= 0x0160,
30149afb8caSYoshihiro Shimoda 	[TPAUSECR]	= 0x0168,
30249afb8caSYoshihiro Shimoda 	[BCFRR]	= 0x016c,
30349afb8caSYoshihiro Shimoda 	[MAHR]	= 0x01c0,
30449afb8caSYoshihiro Shimoda 	[MALR]	= 0x01c8,
30549afb8caSYoshihiro Shimoda 	[TROCR]	= 0x01d0,
30649afb8caSYoshihiro Shimoda 	[CDCR]	= 0x01d4,
30749afb8caSYoshihiro Shimoda 	[LCCR]	= 0x01d8,
30849afb8caSYoshihiro Shimoda 	[CNDCR]	= 0x01dc,
30949afb8caSYoshihiro Shimoda 	[CEFCR]	= 0x01e4,
31049afb8caSYoshihiro Shimoda 	[FRECR]	= 0x01e8,
31149afb8caSYoshihiro Shimoda 	[TSFRCR]	= 0x01ec,
31249afb8caSYoshihiro Shimoda 	[TLFRCR]	= 0x01f0,
31349afb8caSYoshihiro Shimoda 	[RFCR]	= 0x01f4,
31449afb8caSYoshihiro Shimoda 	[MAFCR]	= 0x01f8,
31549afb8caSYoshihiro Shimoda 	[RTRATE]	= 0x01fc,
31649afb8caSYoshihiro Shimoda 
31749afb8caSYoshihiro Shimoda 	[EDMR]	= 0x0000,
31849afb8caSYoshihiro Shimoda 	[EDTRR]	= 0x0008,
31949afb8caSYoshihiro Shimoda 	[EDRRR]	= 0x0010,
32049afb8caSYoshihiro Shimoda 	[TDLAR]	= 0x0018,
32149afb8caSYoshihiro Shimoda 	[RDLAR]	= 0x0020,
32249afb8caSYoshihiro Shimoda 	[EESR]	= 0x0028,
32349afb8caSYoshihiro Shimoda 	[EESIPR]	= 0x0030,
32449afb8caSYoshihiro Shimoda 	[TRSCER]	= 0x0038,
32549afb8caSYoshihiro Shimoda 	[RMFCR]	= 0x0040,
32649afb8caSYoshihiro Shimoda 	[TFTR]	= 0x0048,
32749afb8caSYoshihiro Shimoda 	[FDR]	= 0x0050,
32849afb8caSYoshihiro Shimoda 	[RMCR]	= 0x0058,
32949afb8caSYoshihiro Shimoda 	[TFUCR]	= 0x0064,
33049afb8caSYoshihiro Shimoda 	[RFOCR]	= 0x0068,
3318707678cSNobuhiro Iwamatsu 	[RMIIMR] = 0x006C,
33249afb8caSYoshihiro Shimoda 	[FCFTR]	= 0x0070,
33349afb8caSYoshihiro Shimoda 	[RPADIR]	= 0x0078,
33449afb8caSYoshihiro Shimoda 	[TRIMD]	= 0x007c,
33549afb8caSYoshihiro Shimoda 	[RBWAR]	= 0x00c8,
33649afb8caSYoshihiro Shimoda 	[RDFAR]	= 0x00cc,
33749afb8caSYoshihiro Shimoda 	[TBRAR]	= 0x00d4,
33849afb8caSYoshihiro Shimoda 	[TDFAR]	= 0x00d8,
33949afb8caSYoshihiro Shimoda };
34049afb8caSYoshihiro Shimoda 
3419751ee09SNobuhiro Iwamatsu /* Register Address */
34249afb8caSYoshihiro Shimoda #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
34326235093SYoshihiro Shimoda #define SH_ETH_TYPE_GETHER
3449751ee09SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xfee00000
3453067f81fSYoshihiro Shimoda #elif defined(CONFIG_CPU_SH7757) || \
3463067f81fSYoshihiro Shimoda 	defined(CONFIG_CPU_SH7752) || \
3473067f81fSYoshihiro Shimoda 	defined(CONFIG_CPU_SH7753)
348631fea8fSYoshihiro Shimoda #if defined(CONFIG_SH_ETHER_USE_GETHER)
349631fea8fSYoshihiro Shimoda #define SH_ETH_TYPE_GETHER
350631fea8fSYoshihiro Shimoda #define BASE_IO_ADDR	0xfee00000
351631fea8fSYoshihiro Shimoda #else
35226235093SYoshihiro Shimoda #define SH_ETH_TYPE_ETHER
353903de461SYoshihiro Shimoda #define BASE_IO_ADDR	0xfef00000
354631fea8fSYoshihiro Shimoda #endif
3553bb4cc31SNobuhiro Iwamatsu #elif defined(CONFIG_CPU_SH7724)
35626235093SYoshihiro Shimoda #define SH_ETH_TYPE_ETHER
3573bb4cc31SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xA4600000
358dcd5a593SNobuhiro Iwamatsu #elif defined(CONFIG_R8A7740)
359dcd5a593SNobuhiro Iwamatsu #define SH_ETH_TYPE_GETHER
360dcd5a593SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xE9A00000
36147ce8890SNobuhiro Iwamatsu #elif defined(CONFIG_R8A7790) || defined(CONFIG_R8A7791)
3628707678cSNobuhiro Iwamatsu #define SH_ETH_TYPE_ETHER
3638707678cSNobuhiro Iwamatsu #define BASE_IO_ADDR	0xEE700200
364*62cbddc4SNobuhiro Iwamatsu #elif defined(CONFIG_R7S72100)
365*62cbddc4SNobuhiro Iwamatsu #define SH_ETH_TYPE_RZ
366*62cbddc4SNobuhiro Iwamatsu #define BASE_IO_ADDR	0xE8203000
367903de461SYoshihiro Shimoda #endif
368903de461SYoshihiro Shimoda 
3699751ee09SNobuhiro Iwamatsu /*
3709751ee09SNobuhiro Iwamatsu  * Register's bits
3719751ee09SNobuhiro Iwamatsu  * Copy from Linux driver source code
3729751ee09SNobuhiro Iwamatsu  */
373*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
3749751ee09SNobuhiro Iwamatsu /* EDSR */
3759751ee09SNobuhiro Iwamatsu enum EDSR_BIT {
3769751ee09SNobuhiro Iwamatsu 	EDSR_ENT = 0x01, EDSR_ENR = 0x02,
3779751ee09SNobuhiro Iwamatsu };
3789751ee09SNobuhiro Iwamatsu #define EDSR_ENALL (EDSR_ENT|EDSR_ENR)
3799751ee09SNobuhiro Iwamatsu #endif
3809751ee09SNobuhiro Iwamatsu 
3819751ee09SNobuhiro Iwamatsu /* EDMR */
3829751ee09SNobuhiro Iwamatsu enum DMAC_M_BIT {
3839751ee09SNobuhiro Iwamatsu 	EDMR_DL1 = 0x20, EDMR_DL0 = 0x10,
384*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
385ee6ec5d4SNobuhiro Iwamatsu 	EDMR_SRST	= 0x03, /* Receive/Send reset */
3869751ee09SNobuhiro Iwamatsu 	EMDR_DESC_R	= 0x30, /* Descriptor reserve size */
3879751ee09SNobuhiro Iwamatsu 	EDMR_EL		= 0x40, /* Litte endian */
38826235093SYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER)
389903de461SYoshihiro Shimoda 	EDMR_SRST	= 0x01,
390903de461SYoshihiro Shimoda 	EMDR_DESC_R	= 0x30, /* Descriptor reserve size */
391903de461SYoshihiro Shimoda 	EDMR_EL		= 0x40, /* Litte endian */
39226235093SYoshihiro Shimoda #else
3939751ee09SNobuhiro Iwamatsu 	EDMR_SRST = 0x01,
3949751ee09SNobuhiro Iwamatsu #endif
3959751ee09SNobuhiro Iwamatsu };
3969751ee09SNobuhiro Iwamatsu 
397f8b7507dSNobuhiro Iwamatsu #if CONFIG_SH_ETHER_ALIGNE_SIZE == 64
398f8b7507dSNobuhiro Iwamatsu # define EMDR_DESC EDMR_DL1
399f8b7507dSNobuhiro Iwamatsu #elif CONFIG_SH_ETHER_ALIGNE_SIZE == 32
400f8b7507dSNobuhiro Iwamatsu # define EMDR_DESC EDMR_DL0
401f8b7507dSNobuhiro Iwamatsu #elif CONFIG_SH_ETHER_ALIGNE_SIZE == 16 /* Default */
402f8b7507dSNobuhiro Iwamatsu # define EMDR_DESC 0
403f8b7507dSNobuhiro Iwamatsu #endif
404f8b7507dSNobuhiro Iwamatsu 
4059751ee09SNobuhiro Iwamatsu /* RFLR */
4069751ee09SNobuhiro Iwamatsu #define RFLR_RFL_MIN	0x05EE	/* Recv Frame length 1518 byte */
4079751ee09SNobuhiro Iwamatsu 
4089751ee09SNobuhiro Iwamatsu /* EDTRR */
4099751ee09SNobuhiro Iwamatsu enum DMAC_T_BIT {
410*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
4119751ee09SNobuhiro Iwamatsu 	EDTRR_TRNS = 0x03,
4129751ee09SNobuhiro Iwamatsu #else
4139751ee09SNobuhiro Iwamatsu 	EDTRR_TRNS = 0x01,
4149751ee09SNobuhiro Iwamatsu #endif
4159751ee09SNobuhiro Iwamatsu };
4169751ee09SNobuhiro Iwamatsu 
4179751ee09SNobuhiro Iwamatsu /* GECMR */
4189751ee09SNobuhiro Iwamatsu enum GECMR_BIT {
4193067f81fSYoshihiro Shimoda #if defined(CONFIG_CPU_SH7757) || \
4203067f81fSYoshihiro Shimoda 	defined(CONFIG_CPU_SH7752) || \
4213067f81fSYoshihiro Shimoda 	defined(CONFIG_CPU_SH7753)
422631fea8fSYoshihiro Shimoda 	GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00,
423631fea8fSYoshihiro Shimoda #else
42409fcc8b5SSimon Munton 	GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00,
425631fea8fSYoshihiro Shimoda #endif
4269751ee09SNobuhiro Iwamatsu };
4279751ee09SNobuhiro Iwamatsu 
4289751ee09SNobuhiro Iwamatsu /* EDRRR*/
4299751ee09SNobuhiro Iwamatsu enum EDRRR_R_BIT {
4309751ee09SNobuhiro Iwamatsu 	EDRRR_R = 0x01,
4319751ee09SNobuhiro Iwamatsu };
4329751ee09SNobuhiro Iwamatsu 
4339751ee09SNobuhiro Iwamatsu /* TPAUSER */
4349751ee09SNobuhiro Iwamatsu enum TPAUSER_BIT {
4359751ee09SNobuhiro Iwamatsu 	TPAUSER_TPAUSE = 0x0000ffff,
4369751ee09SNobuhiro Iwamatsu 	TPAUSER_UNLIMITED = 0,
4379751ee09SNobuhiro Iwamatsu };
4389751ee09SNobuhiro Iwamatsu 
4399751ee09SNobuhiro Iwamatsu /* BCFR */
4409751ee09SNobuhiro Iwamatsu enum BCFR_BIT {
4419751ee09SNobuhiro Iwamatsu 	BCFR_RPAUSE = 0x0000ffff,
4429751ee09SNobuhiro Iwamatsu 	BCFR_UNLIMITED = 0,
4439751ee09SNobuhiro Iwamatsu };
4449751ee09SNobuhiro Iwamatsu 
4459751ee09SNobuhiro Iwamatsu /* PIR */
4469751ee09SNobuhiro Iwamatsu enum PIR_BIT {
4479751ee09SNobuhiro Iwamatsu 	PIR_MDI = 0x08, PIR_MDO = 0x04, PIR_MMD = 0x02, PIR_MDC = 0x01,
4489751ee09SNobuhiro Iwamatsu };
4499751ee09SNobuhiro Iwamatsu 
4509751ee09SNobuhiro Iwamatsu /* PSR */
4519751ee09SNobuhiro Iwamatsu enum PHY_STATUS_BIT { PHY_ST_LINK = 0x01, };
4529751ee09SNobuhiro Iwamatsu 
4539751ee09SNobuhiro Iwamatsu /* EESR */
4549751ee09SNobuhiro Iwamatsu enum EESR_BIT {
455ee6ec5d4SNobuhiro Iwamatsu 
45626235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
4579751ee09SNobuhiro Iwamatsu 	EESR_TWB  = 0x40000000,
4589751ee09SNobuhiro Iwamatsu #else
4599751ee09SNobuhiro Iwamatsu 	EESR_TWB  = 0xC0000000,
4609751ee09SNobuhiro Iwamatsu 	EESR_TC1  = 0x20000000,
4619751ee09SNobuhiro Iwamatsu 	EESR_TUC  = 0x10000000,
4629751ee09SNobuhiro Iwamatsu 	EESR_ROC  = 0x80000000,
4639751ee09SNobuhiro Iwamatsu #endif
4649751ee09SNobuhiro Iwamatsu 	EESR_TABT = 0x04000000,
4659751ee09SNobuhiro Iwamatsu 	EESR_RABT = 0x02000000, EESR_RFRMER = 0x01000000,
46626235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
4679751ee09SNobuhiro Iwamatsu 	EESR_ADE  = 0x00800000,
4689751ee09SNobuhiro Iwamatsu #endif
4699751ee09SNobuhiro Iwamatsu 	EESR_ECI  = 0x00400000,
4709751ee09SNobuhiro Iwamatsu 	EESR_FTC  = 0x00200000, EESR_TDE  = 0x00100000,
4719751ee09SNobuhiro Iwamatsu 	EESR_TFE  = 0x00080000, EESR_FRC  = 0x00040000,
4729751ee09SNobuhiro Iwamatsu 	EESR_RDE  = 0x00020000, EESR_RFE  = 0x00010000,
47326235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
4749751ee09SNobuhiro Iwamatsu 	EESR_CND  = 0x00000800,
4759751ee09SNobuhiro Iwamatsu #endif
4769751ee09SNobuhiro Iwamatsu 	EESR_DLC  = 0x00000400,
4779751ee09SNobuhiro Iwamatsu 	EESR_CD   = 0x00000200, EESR_RTO  = 0x00000100,
4789751ee09SNobuhiro Iwamatsu 	EESR_RMAF = 0x00000080, EESR_CEEF = 0x00000040,
4799751ee09SNobuhiro Iwamatsu 	EESR_CELF = 0x00000020, EESR_RRF  = 0x00000010,
4809751ee09SNobuhiro Iwamatsu 	rESR_RTLF = 0x00000008, EESR_RTSF = 0x00000004,
4819751ee09SNobuhiro Iwamatsu 	EESR_PRE  = 0x00000002, EESR_CERF = 0x00000001,
4829751ee09SNobuhiro Iwamatsu };
4839751ee09SNobuhiro Iwamatsu 
4849751ee09SNobuhiro Iwamatsu 
485*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
4869751ee09SNobuhiro Iwamatsu # define TX_CHECK (EESR_TC1 | EESR_FTC)
4879751ee09SNobuhiro Iwamatsu # define EESR_ERR_CHECK	(EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
4889751ee09SNobuhiro Iwamatsu 		| EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI)
4899751ee09SNobuhiro Iwamatsu # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE)
4909751ee09SNobuhiro Iwamatsu 
4919751ee09SNobuhiro Iwamatsu #else
4929751ee09SNobuhiro Iwamatsu # define TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO)
4939751ee09SNobuhiro Iwamatsu # define EESR_ERR_CHECK	(EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
4949751ee09SNobuhiro Iwamatsu 		| EESR_RFRMER | EESR_ADE | EESR_TFE | EESR_TDE | EESR_ECI)
4959751ee09SNobuhiro Iwamatsu # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | EESR_TFE)
4969751ee09SNobuhiro Iwamatsu #endif
4979751ee09SNobuhiro Iwamatsu 
4989751ee09SNobuhiro Iwamatsu /* EESIPR */
4999751ee09SNobuhiro Iwamatsu enum DMAC_IM_BIT {
5009751ee09SNobuhiro Iwamatsu 	DMAC_M_TWB = 0x40000000, DMAC_M_TABT = 0x04000000,
5019751ee09SNobuhiro Iwamatsu 	DMAC_M_RABT = 0x02000000,
5029751ee09SNobuhiro Iwamatsu 	DMAC_M_RFRMER = 0x01000000, DMAC_M_ADF = 0x00800000,
5039751ee09SNobuhiro Iwamatsu 	DMAC_M_ECI = 0x00400000, DMAC_M_FTC = 0x00200000,
5049751ee09SNobuhiro Iwamatsu 	DMAC_M_TDE = 0x00100000, DMAC_M_TFE = 0x00080000,
5059751ee09SNobuhiro Iwamatsu 	DMAC_M_FRC = 0x00040000, DMAC_M_RDE = 0x00020000,
5069751ee09SNobuhiro Iwamatsu 	DMAC_M_RFE = 0x00010000, DMAC_M_TINT4 = 0x00000800,
5079751ee09SNobuhiro Iwamatsu 	DMAC_M_TINT3 = 0x00000400, DMAC_M_TINT2 = 0x00000200,
5089751ee09SNobuhiro Iwamatsu 	DMAC_M_TINT1 = 0x00000100, DMAC_M_RINT8 = 0x00000080,
5099751ee09SNobuhiro Iwamatsu 	DMAC_M_RINT5 = 0x00000010, DMAC_M_RINT4 = 0x00000008,
5109751ee09SNobuhiro Iwamatsu 	DMAC_M_RINT3 = 0x00000004, DMAC_M_RINT2 = 0x00000002,
5119751ee09SNobuhiro Iwamatsu 	DMAC_M_RINT1 = 0x00000001,
5129751ee09SNobuhiro Iwamatsu };
5139751ee09SNobuhiro Iwamatsu 
5149751ee09SNobuhiro Iwamatsu /* Receive descriptor bit */
5159751ee09SNobuhiro Iwamatsu enum RD_STS_BIT {
5169751ee09SNobuhiro Iwamatsu 	RD_RACT = 0x80000000, RD_RDLE = 0x40000000,
5179751ee09SNobuhiro Iwamatsu 	RD_RFP1 = 0x20000000, RD_RFP0 = 0x10000000,
5189751ee09SNobuhiro Iwamatsu 	RD_RFE = 0x08000000, RD_RFS10 = 0x00000200,
5199751ee09SNobuhiro Iwamatsu 	RD_RFS9 = 0x00000100, RD_RFS8 = 0x00000080,
5209751ee09SNobuhiro Iwamatsu 	RD_RFS7 = 0x00000040, RD_RFS6 = 0x00000020,
5219751ee09SNobuhiro Iwamatsu 	RD_RFS5 = 0x00000010, RD_RFS4 = 0x00000008,
5229751ee09SNobuhiro Iwamatsu 	RD_RFS3 = 0x00000004, RD_RFS2 = 0x00000002,
5239751ee09SNobuhiro Iwamatsu 	RD_RFS1 = 0x00000001,
5249751ee09SNobuhiro Iwamatsu };
5259751ee09SNobuhiro Iwamatsu #define RDF1ST	RD_RFP1
5269751ee09SNobuhiro Iwamatsu #define RDFEND	RD_RFP0
5279751ee09SNobuhiro Iwamatsu #define RD_RFP	(RD_RFP1|RD_RFP0)
5289751ee09SNobuhiro Iwamatsu 
5299751ee09SNobuhiro Iwamatsu /* RDFFR*/
5309751ee09SNobuhiro Iwamatsu enum RDFFR_BIT {
5319751ee09SNobuhiro Iwamatsu 	RDFFR_RDLF = 0x01,
5329751ee09SNobuhiro Iwamatsu };
5339751ee09SNobuhiro Iwamatsu 
5349751ee09SNobuhiro Iwamatsu /* FCFTR */
5359751ee09SNobuhiro Iwamatsu enum FCFTR_BIT {
5369751ee09SNobuhiro Iwamatsu 	FCFTR_RFF2 = 0x00040000, FCFTR_RFF1 = 0x00020000,
5379751ee09SNobuhiro Iwamatsu 	FCFTR_RFF0 = 0x00010000, FCFTR_RFD2 = 0x00000004,
5389751ee09SNobuhiro Iwamatsu 	FCFTR_RFD1 = 0x00000002, FCFTR_RFD0 = 0x00000001,
5399751ee09SNobuhiro Iwamatsu };
5409751ee09SNobuhiro Iwamatsu #define FIFO_F_D_RFF	(FCFTR_RFF2|FCFTR_RFF1|FCFTR_RFF0)
5419751ee09SNobuhiro Iwamatsu #define FIFO_F_D_RFD	(FCFTR_RFD2|FCFTR_RFD1|FCFTR_RFD0)
5429751ee09SNobuhiro Iwamatsu 
5439751ee09SNobuhiro Iwamatsu /* Transfer descriptor bit */
5449751ee09SNobuhiro Iwamatsu enum TD_STS_BIT {
545*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_ETHER) || \
546*62cbddc4SNobuhiro Iwamatsu 	defined(SH_ETH_TYPE_RZ)
5479751ee09SNobuhiro Iwamatsu 	TD_TACT = 0x80000000,
5489751ee09SNobuhiro Iwamatsu #else
5499751ee09SNobuhiro Iwamatsu 	TD_TACT = 0x7fffffff,
5509751ee09SNobuhiro Iwamatsu #endif
5519751ee09SNobuhiro Iwamatsu 	TD_TDLE = 0x40000000, TD_TFP1 = 0x20000000,
5529751ee09SNobuhiro Iwamatsu 	TD_TFP0 = 0x10000000,
5539751ee09SNobuhiro Iwamatsu };
5549751ee09SNobuhiro Iwamatsu #define TDF1ST	TD_TFP1
5559751ee09SNobuhiro Iwamatsu #define TDFEND	TD_TFP0
5569751ee09SNobuhiro Iwamatsu #define TD_TFP	(TD_TFP1|TD_TFP0)
5579751ee09SNobuhiro Iwamatsu 
5589751ee09SNobuhiro Iwamatsu /* RMCR */
5599751ee09SNobuhiro Iwamatsu enum RECV_RST_BIT { RMCR_RST = 0x01, };
5609751ee09SNobuhiro Iwamatsu /* ECMR */
5619751ee09SNobuhiro Iwamatsu enum FELIC_MODE_BIT {
562*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
5639751ee09SNobuhiro Iwamatsu 	ECMR_TRCCM=0x04000000, ECMR_RCSC= 0x00800000, ECMR_DPAD= 0x00200000,
5649751ee09SNobuhiro Iwamatsu 	ECMR_RZPF = 0x00100000,
5659751ee09SNobuhiro Iwamatsu #endif
5669751ee09SNobuhiro Iwamatsu 	ECMR_ZPF = 0x00080000, ECMR_PFR = 0x00040000, ECMR_RXF = 0x00020000,
5679751ee09SNobuhiro Iwamatsu 	ECMR_TXF = 0x00010000, ECMR_MCT = 0x00002000, ECMR_PRCEF = 0x00001000,
5689751ee09SNobuhiro Iwamatsu 	ECMR_PMDE = 0x00000200, ECMR_RE = 0x00000040, ECMR_TE = 0x00000020,
5699751ee09SNobuhiro Iwamatsu 	ECMR_ILB = 0x00000008, ECMR_ELB = 0x00000004, ECMR_DM = 0x00000002,
5709751ee09SNobuhiro Iwamatsu 	ECMR_PRM = 0x00000001,
5713bb4cc31SNobuhiro Iwamatsu #ifdef CONFIG_CPU_SH7724
5723bb4cc31SNobuhiro Iwamatsu 	ECMR_RTM = 0x00000010,
57347ce8890SNobuhiro Iwamatsu #elif defined(CONFIG_R8A7790) || defined(CONFIG_R8A7791)
5748707678cSNobuhiro Iwamatsu 	ECMR_RTM = 0x00000004,
5753bb4cc31SNobuhiro Iwamatsu #endif
5763bb4cc31SNobuhiro Iwamatsu 
5779751ee09SNobuhiro Iwamatsu };
5789751ee09SNobuhiro Iwamatsu 
579*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
5809751ee09SNobuhiro Iwamatsu #define ECMR_CHG_DM	(ECMR_TRCCM | ECMR_RZPF | ECMR_ZPF | ECMR_PFR | ECMR_RXF | \
5819751ee09SNobuhiro Iwamatsu 						ECMR_TXF | ECMR_MCT)
58226235093SYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER)
5833bb4cc31SNobuhiro Iwamatsu #define ECMR_CHG_DM (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF)
5849751ee09SNobuhiro Iwamatsu #else
585903de461SYoshihiro Shimoda #define ECMR_CHG_DM	(ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF | ECMR_MCT)
5869751ee09SNobuhiro Iwamatsu #endif
5879751ee09SNobuhiro Iwamatsu 
5889751ee09SNobuhiro Iwamatsu /* ECSR */
5899751ee09SNobuhiro Iwamatsu enum ECSR_STATUS_BIT {
59026235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
5919751ee09SNobuhiro Iwamatsu 	ECSR_BRCRX = 0x20, ECSR_PSRTO = 0x10,
5929751ee09SNobuhiro Iwamatsu #endif
5939751ee09SNobuhiro Iwamatsu 	ECSR_LCHNG = 0x04,
5949751ee09SNobuhiro Iwamatsu 	ECSR_MPD = 0x02, ECSR_ICD = 0x01,
5959751ee09SNobuhiro Iwamatsu };
5969751ee09SNobuhiro Iwamatsu 
597*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
5989751ee09SNobuhiro Iwamatsu # define ECSR_INIT (ECSR_ICD | ECSIPR_MPDIP)
5999751ee09SNobuhiro Iwamatsu #else
6009751ee09SNobuhiro Iwamatsu # define ECSR_INIT (ECSR_BRCRX | ECSR_PSRTO | \
6019751ee09SNobuhiro Iwamatsu 			ECSR_LCHNG | ECSR_ICD | ECSIPR_MPDIP)
6029751ee09SNobuhiro Iwamatsu #endif
6039751ee09SNobuhiro Iwamatsu 
6049751ee09SNobuhiro Iwamatsu /* ECSIPR */
6059751ee09SNobuhiro Iwamatsu enum ECSIPR_STATUS_MASK_BIT {
60626235093SYoshihiro Shimoda #if defined(SH_ETH_TYPE_ETHER)
607a6616efbSNobuhiro Iwamatsu 	ECSIPR_BRCRXIP = 0x20,
608ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_PSRTOIP = 0x10,
60926235093SYoshihiro Shimoda #elif defined(SH_ETY_TYPE_GETHER)
610ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_PSRTOIP = 0x10,
611ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_PHYIP = 0x08,
612a6616efbSNobuhiro Iwamatsu #endif
613ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_LCHNGIP = 0x04,
614ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_MPDIP = 0x02,
615ee6ec5d4SNobuhiro Iwamatsu 	ECSIPR_ICDIP = 0x01,
6169751ee09SNobuhiro Iwamatsu };
6179751ee09SNobuhiro Iwamatsu 
618*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
6199751ee09SNobuhiro Iwamatsu # define ECSIPR_INIT (ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP)
6209751ee09SNobuhiro Iwamatsu #else
6219751ee09SNobuhiro Iwamatsu # define ECSIPR_INIT (ECSIPR_BRCRXIP | ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | \
6229751ee09SNobuhiro Iwamatsu 				ECSIPR_ICDIP | ECSIPR_MPDIP)
6239751ee09SNobuhiro Iwamatsu #endif
6249751ee09SNobuhiro Iwamatsu 
6259751ee09SNobuhiro Iwamatsu /* APR */
6269751ee09SNobuhiro Iwamatsu enum APR_BIT {
6279751ee09SNobuhiro Iwamatsu 	APR_AP = 0x00000004,
6289751ee09SNobuhiro Iwamatsu };
6299751ee09SNobuhiro Iwamatsu 
6309751ee09SNobuhiro Iwamatsu /* MPR */
6319751ee09SNobuhiro Iwamatsu enum MPR_BIT {
6329751ee09SNobuhiro Iwamatsu 	MPR_MP = 0x00000006,
6339751ee09SNobuhiro Iwamatsu };
6349751ee09SNobuhiro Iwamatsu 
6359751ee09SNobuhiro Iwamatsu /* TRSCER */
6369751ee09SNobuhiro Iwamatsu enum DESC_I_BIT {
6379751ee09SNobuhiro Iwamatsu 	DESC_I_TINT4 = 0x0800, DESC_I_TINT3 = 0x0400, DESC_I_TINT2 = 0x0200,
6389751ee09SNobuhiro Iwamatsu 	DESC_I_TINT1 = 0x0100, DESC_I_RINT8 = 0x0080, DESC_I_RINT5 = 0x0010,
6399751ee09SNobuhiro Iwamatsu 	DESC_I_RINT4 = 0x0008, DESC_I_RINT3 = 0x0004, DESC_I_RINT2 = 0x0002,
6409751ee09SNobuhiro Iwamatsu 	DESC_I_RINT1 = 0x0001,
6419751ee09SNobuhiro Iwamatsu };
6429751ee09SNobuhiro Iwamatsu 
6439751ee09SNobuhiro Iwamatsu /* RPADIR */
6449751ee09SNobuhiro Iwamatsu enum RPADIR_BIT {
6459751ee09SNobuhiro Iwamatsu 	RPADIR_PADS1 = 0x20000, RPADIR_PADS0 = 0x10000,
6469751ee09SNobuhiro Iwamatsu 	RPADIR_PADR = 0x0003f,
6479751ee09SNobuhiro Iwamatsu };
6489751ee09SNobuhiro Iwamatsu 
649*62cbddc4SNobuhiro Iwamatsu #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
6509751ee09SNobuhiro Iwamatsu # define RPADIR_INIT (0x00)
6519751ee09SNobuhiro Iwamatsu #else
6529751ee09SNobuhiro Iwamatsu # define RPADIR_INIT (RPADIR_PADS1)
6539751ee09SNobuhiro Iwamatsu #endif
6549751ee09SNobuhiro Iwamatsu 
6559751ee09SNobuhiro Iwamatsu /* FDR */
6569751ee09SNobuhiro Iwamatsu enum FIFO_SIZE_BIT {
6579751ee09SNobuhiro Iwamatsu 	FIFO_SIZE_T = 0x00000700, FIFO_SIZE_R = 0x00000007,
6589751ee09SNobuhiro Iwamatsu };
65949afb8caSYoshihiro Shimoda 
66049afb8caSYoshihiro Shimoda static inline unsigned long sh_eth_reg_addr(struct sh_eth_dev *eth,
66149afb8caSYoshihiro Shimoda 					    int enum_index)
66249afb8caSYoshihiro Shimoda {
66349afb8caSYoshihiro Shimoda #if defined(SH_ETH_TYPE_GETHER)
66449afb8caSYoshihiro Shimoda 	const u16 *reg_offset = sh_eth_offset_gigabit;
66549afb8caSYoshihiro Shimoda #elif defined(SH_ETH_TYPE_ETHER)
66649afb8caSYoshihiro Shimoda 	const u16 *reg_offset = sh_eth_offset_fast_sh4;
667*62cbddc4SNobuhiro Iwamatsu #elif defined(SH_ETH_TYPE_RZ)
668*62cbddc4SNobuhiro Iwamatsu 	const u16 *reg_offset = sh_eth_offset_rz;
66949afb8caSYoshihiro Shimoda #else
67049afb8caSYoshihiro Shimoda #error
67149afb8caSYoshihiro Shimoda #endif
67249afb8caSYoshihiro Shimoda 	return BASE_IO_ADDR + reg_offset[enum_index] + 0x800 * eth->port;
67349afb8caSYoshihiro Shimoda }
67449afb8caSYoshihiro Shimoda 
67549afb8caSYoshihiro Shimoda static inline void sh_eth_write(struct sh_eth_dev *eth, unsigned long data,
67649afb8caSYoshihiro Shimoda 				int enum_index)
67749afb8caSYoshihiro Shimoda {
67849afb8caSYoshihiro Shimoda 	outl(data, sh_eth_reg_addr(eth, enum_index));
67949afb8caSYoshihiro Shimoda }
68049afb8caSYoshihiro Shimoda 
68149afb8caSYoshihiro Shimoda static inline unsigned long sh_eth_read(struct sh_eth_dev *eth,
68249afb8caSYoshihiro Shimoda 					int enum_index)
68349afb8caSYoshihiro Shimoda {
68449afb8caSYoshihiro Shimoda 	return inl(sh_eth_reg_addr(eth, enum_index));
68549afb8caSYoshihiro Shimoda }
686