summaryrefslogtreecommitdiff
path: root/bsp/dm365/drivers/davinci_emac.h
diff options
context:
space:
mode:
Diffstat (limited to 'bsp/dm365/drivers/davinci_emac.h')
-rw-r--r--bsp/dm365/drivers/davinci_emac.h640
1 files changed, 320 insertions, 320 deletions
diff --git a/bsp/dm365/drivers/davinci_emac.h b/bsp/dm365/drivers/davinci_emac.h
index 2b07834583..1d80c754c9 100644
--- a/bsp/dm365/drivers/davinci_emac.h
+++ b/bsp/dm365/drivers/davinci_emac.h
@@ -4,8 +4,8 @@
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
- * Date Author Notes
- * 2013-01-30 weety first version
+ * Date Author Notes
+ * 2013-01-30 weety first version
*/
#ifndef _DAVINCI_EMAC_H
@@ -17,249 +17,249 @@
#endif
enum {
- EMAC_VERSION_1, /* DM644x */
- EMAC_VERSION_2, /* DM646x */
+ EMAC_VERSION_1, /* DM644x */
+ EMAC_VERSION_2, /* DM646x */
};
#define __iomem
-#define BIT(nr) (1UL << (nr))
+#define BIT(nr) (1UL << (nr))
/* Configuration items */
-#define EMAC_DEF_PASS_CRC (0) /* Do not pass CRC upto frames */
-#define EMAC_DEF_QOS_EN (0) /* EMAC proprietary QoS disabled */
-#define EMAC_DEF_NO_BUFF_CHAIN (0) /* No buffer chain */
-#define EMAC_DEF_MACCTRL_FRAME_EN (0) /* Discard Maccontrol frames */
-#define EMAC_DEF_SHORT_FRAME_EN (0) /* Discard short frames */
-#define EMAC_DEF_ERROR_FRAME_EN (0) /* Discard error frames */
-#define EMAC_DEF_PROM_EN (0) /* Promiscous disabled */
-#define EMAC_DEF_PROM_CH (0) /* Promiscous channel is 0 */
-#define EMAC_DEF_BCAST_EN (1) /* Broadcast enabled */
-#define EMAC_DEF_BCAST_CH (0) /* Broadcast channel is 0 */
-#define EMAC_DEF_MCAST_EN (1) /* Multicast enabled */
-#define EMAC_DEF_MCAST_CH (0) /* Multicast channel is 0 */
+#define EMAC_DEF_PASS_CRC (0) /* Do not pass CRC upto frames */
+#define EMAC_DEF_QOS_EN (0) /* EMAC proprietary QoS disabled */
+#define EMAC_DEF_NO_BUFF_CHAIN (0) /* No buffer chain */
+#define EMAC_DEF_MACCTRL_FRAME_EN (0) /* Discard Maccontrol frames */
+#define EMAC_DEF_SHORT_FRAME_EN (0) /* Discard short frames */
+#define EMAC_DEF_ERROR_FRAME_EN (0) /* Discard error frames */
+#define EMAC_DEF_PROM_EN (0) /* Promiscous disabled */
+#define EMAC_DEF_PROM_CH (0) /* Promiscous channel is 0 */
+#define EMAC_DEF_BCAST_EN (1) /* Broadcast enabled */
+#define EMAC_DEF_BCAST_CH (0) /* Broadcast channel is 0 */
+#define EMAC_DEF_MCAST_EN (1) /* Multicast enabled */
+#define EMAC_DEF_MCAST_CH (0) /* Multicast channel is 0 */
-#define EMAC_DEF_TXPRIO_FIXED (1) /* TX Priority is fixed */
-#define EMAC_DEF_TXPACING_EN (0) /* TX pacing NOT supported*/
+#define EMAC_DEF_TXPRIO_FIXED (1) /* TX Priority is fixed */
+#define EMAC_DEF_TXPACING_EN (0) /* TX pacing NOT supported*/
-#define EMAC_DEF_BUFFER_OFFSET (0) /* Buffer offset to DMA (future) */
-#define EMAC_DEF_MIN_ETHPKTSIZE (60) /* Minimum ethernet pkt size */
-#define EMAC_DEF_MAX_FRAME_SIZE (1500 + 14 + 4 + 4)
-#define EMAC_DEF_TX_CH (0) /* Default 0th channel */
-#define EMAC_DEF_RX_CH (0) /* Default 0th channel */
-#define EMAC_DEF_MDIO_TICK_MS (10) /* typically 1 tick=1 ms) */
-#define EMAC_DEF_MAX_TX_CH (1) /* Max TX channels configured */
-#define EMAC_DEF_MAX_RX_CH (1) /* Max RX channels configured */
-#define EMAC_POLL_WEIGHT (64) /* Default NAPI poll weight */
+#define EMAC_DEF_BUFFER_OFFSET (0) /* Buffer offset to DMA (future) */
+#define EMAC_DEF_MIN_ETHPKTSIZE (60) /* Minimum ethernet pkt size */
+#define EMAC_DEF_MAX_FRAME_SIZE (1500 + 14 + 4 + 4)
+#define EMAC_DEF_TX_CH (0) /* Default 0th channel */
+#define EMAC_DEF_RX_CH (0) /* Default 0th channel */
+#define EMAC_DEF_MDIO_TICK_MS (10) /* typically 1 tick=1 ms) */
+#define EMAC_DEF_MAX_TX_CH (1) /* Max TX channels configured */
+#define EMAC_DEF_MAX_RX_CH (1) /* Max RX channels configured */
+#define EMAC_POLL_WEIGHT (64) /* Default NAPI poll weight */
/* Buffer descriptor parameters */
-#define EMAC_DEF_TX_MAX_SERVICE (32) /* TX max service BD's */
-#define EMAC_DEF_RX_MAX_SERVICE (64) /* should = netdev->weight */
+#define EMAC_DEF_TX_MAX_SERVICE (32) /* TX max service BD's */
+#define EMAC_DEF_RX_MAX_SERVICE (64) /* should = netdev->weight */
/* EMAC register related defines */
-#define EMAC_ALL_MULTI_REG_VALUE (0xFFFFFFFF)
-#define EMAC_NUM_MULTICAST_BITS (64)
-#define EMAC_TEARDOWN_VALUE (0xFFFFFFFC)
-#define EMAC_TX_CONTROL_TX_ENABLE_VAL (0x1)
-#define EMAC_RX_CONTROL_RX_ENABLE_VAL (0x1)
-#define EMAC_MAC_HOST_ERR_INTMASK_VAL (0x2)
-#define EMAC_RX_UNICAST_CLEAR_ALL (0xFF)
-#define EMAC_INT_MASK_CLEAR (0xFF)
+#define EMAC_ALL_MULTI_REG_VALUE (0xFFFFFFFF)
+#define EMAC_NUM_MULTICAST_BITS (64)
+#define EMAC_TEARDOWN_VALUE (0xFFFFFFFC)
+#define EMAC_TX_CONTROL_TX_ENABLE_VAL (0x1)
+#define EMAC_RX_CONTROL_RX_ENABLE_VAL (0x1)
+#define EMAC_MAC_HOST_ERR_INTMASK_VAL (0x2)
+#define EMAC_RX_UNICAST_CLEAR_ALL (0xFF)
+#define EMAC_INT_MASK_CLEAR (0xFF)
/* RX MBP register bit positions */
-#define EMAC_RXMBP_PASSCRC_MASK BIT(30)
-#define EMAC_RXMBP_QOSEN_MASK BIT(29)
-#define EMAC_RXMBP_NOCHAIN_MASK BIT(28)
-#define EMAC_RXMBP_CMFEN_MASK BIT(24)
-#define EMAC_RXMBP_CSFEN_MASK BIT(23)
-#define EMAC_RXMBP_CEFEN_MASK BIT(22)
-#define EMAC_RXMBP_CAFEN_MASK BIT(21)
-#define EMAC_RXMBP_PROMCH_SHIFT (16)
-#define EMAC_RXMBP_PROMCH_MASK (0x7 << 16)
-#define EMAC_RXMBP_BROADEN_MASK BIT(13)
-#define EMAC_RXMBP_BROADCH_SHIFT (8)
-#define EMAC_RXMBP_BROADCH_MASK (0x7 << 8)
-#define EMAC_RXMBP_MULTIEN_MASK BIT(5)
-#define EMAC_RXMBP_MULTICH_SHIFT (0)
-#define EMAC_RXMBP_MULTICH_MASK (0x7)
-#define EMAC_RXMBP_CHMASK (0x7)
+#define EMAC_RXMBP_PASSCRC_MASK BIT(30)
+#define EMAC_RXMBP_QOSEN_MASK BIT(29)
+#define EMAC_RXMBP_NOCHAIN_MASK BIT(28)
+#define EMAC_RXMBP_CMFEN_MASK BIT(24)
+#define EMAC_RXMBP_CSFEN_MASK BIT(23)
+#define EMAC_RXMBP_CEFEN_MASK BIT(22)
+#define EMAC_RXMBP_CAFEN_MASK BIT(21)
+#define EMAC_RXMBP_PROMCH_SHIFT (16)
+#define EMAC_RXMBP_PROMCH_MASK (0x7 << 16)
+#define EMAC_RXMBP_BROADEN_MASK BIT(13)
+#define EMAC_RXMBP_BROADCH_SHIFT (8)
+#define EMAC_RXMBP_BROADCH_MASK (0x7 << 8)
+#define EMAC_RXMBP_MULTIEN_MASK BIT(5)
+#define EMAC_RXMBP_MULTICH_SHIFT (0)
+#define EMAC_RXMBP_MULTICH_MASK (0x7)
+#define EMAC_RXMBP_CHMASK (0x7)
/* EMAC register definitions/bit maps used */
-# define EMAC_MBP_RXPROMISC (0x00200000)
-# define EMAC_MBP_PROMISCCH(ch) (((ch) & 0x7) << 16)
-# define EMAC_MBP_RXBCAST (0x00002000)
-# define EMAC_MBP_BCASTCHAN(ch) (((ch) & 0x7) << 8)
-# define EMAC_MBP_RXMCAST (0x00000020)
-# define EMAC_MBP_MCASTCHAN(ch) ((ch) & 0x7)
+# define EMAC_MBP_RXPROMISC (0x00200000)
+# define EMAC_MBP_PROMISCCH(ch) (((ch) & 0x7) << 16)
+# define EMAC_MBP_RXBCAST (0x00002000)
+# define EMAC_MBP_BCASTCHAN(ch) (((ch) & 0x7) << 8)
+# define EMAC_MBP_RXMCAST (0x00000020)
+# define EMAC_MBP_MCASTCHAN(ch) ((ch) & 0x7)
/* EMAC mac_control register */
-#define EMAC_MACCONTROL_TXPTYPE BIT(9)
-#define EMAC_MACCONTROL_TXPACEEN BIT(6)
-#define EMAC_MACCONTROL_GMIIEN BIT(5)
-#define EMAC_MACCONTROL_GIGABITEN BIT(7)
-#define EMAC_MACCONTROL_FULLDUPLEXEN BIT(0)
-#define EMAC_MACCONTROL_RMIISPEED_MASK BIT(15)
+#define EMAC_MACCONTROL_TXPTYPE BIT(9)
+#define EMAC_MACCONTROL_TXPACEEN BIT(6)
+#define EMAC_MACCONTROL_GMIIEN BIT(5)
+#define EMAC_MACCONTROL_GIGABITEN BIT(7)
+#define EMAC_MACCONTROL_FULLDUPLEXEN BIT(0)
+#define EMAC_MACCONTROL_RMIISPEED_MASK BIT(15)
/* GIGABIT MODE related bits */
-#define EMAC_DM646X_MACCONTORL_GIG BIT(7)
-#define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
+#define EMAC_DM646X_MACCONTORL_GIG BIT(7)
+#define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
/* EMAC mac_status register */
-#define EMAC_MACSTATUS_TXERRCODE_MASK (0xF00000)
-#define EMAC_MACSTATUS_TXERRCODE_SHIFT (20)
-#define EMAC_MACSTATUS_TXERRCH_MASK (0x7)
-#define EMAC_MACSTATUS_TXERRCH_SHIFT (16)
-#define EMAC_MACSTATUS_RXERRCODE_MASK (0xF000)
-#define EMAC_MACSTATUS_RXERRCODE_SHIFT (12)
-#define EMAC_MACSTATUS_RXERRCH_MASK (0x7)
-#define EMAC_MACSTATUS_RXERRCH_SHIFT (8)
+#define EMAC_MACSTATUS_TXERRCODE_MASK (0xF00000)
+#define EMAC_MACSTATUS_TXERRCODE_SHIFT (20)
+#define EMAC_MACSTATUS_TXERRCH_MASK (0x7)
+#define EMAC_MACSTATUS_TXERRCH_SHIFT (16)
+#define EMAC_MACSTATUS_RXERRCODE_MASK (0xF000)
+#define EMAC_MACSTATUS_RXERRCODE_SHIFT (12)
+#define EMAC_MACSTATUS_RXERRCH_MASK (0x7)
+#define EMAC_MACSTATUS_RXERRCH_SHIFT (8)
/* EMAC RX register masks */
-#define EMAC_RX_MAX_LEN_MASK (0xFFFF)
-#define EMAC_RX_BUFFER_OFFSET_MASK (0xFFFF)
+#define EMAC_RX_MAX_LEN_MASK (0xFFFF)
+#define EMAC_RX_BUFFER_OFFSET_MASK (0xFFFF)
/* MAC_IN_VECTOR (0x180) register bit fields */
-#define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT BIT(17)
-#define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT BIT(16)
-#define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC BIT(8)
-#define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC BIT(0)
+#define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT BIT(17)
+#define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT BIT(16)
+#define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC BIT(8)
+#define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC BIT(0)
/** NOTE:: For DM646x the IN_VECTOR has changed */
-#define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC BIT(EMAC_DEF_RX_CH)
-#define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC BIT(16 + EMAC_DEF_TX_CH)
-#define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT BIT(26)
-#define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT BIT(27)
+#define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC BIT(EMAC_DEF_RX_CH)
+#define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC BIT(16 + EMAC_DEF_TX_CH)
+#define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT BIT(26)
+#define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT BIT(27)
/* CPPI bit positions */
-#define EMAC_CPPI_SOP_BIT BIT(31)
-#define EMAC_CPPI_EOP_BIT BIT(30)
-#define EMAC_CPPI_OWNERSHIP_BIT BIT(29)
-#define EMAC_CPPI_EOQ_BIT BIT(28)
+#define EMAC_CPPI_SOP_BIT BIT(31)
+#define EMAC_CPPI_EOP_BIT BIT(30)
+#define EMAC_CPPI_OWNERSHIP_BIT BIT(29)
+#define EMAC_CPPI_EOQ_BIT BIT(28)
#define EMAC_CPPI_TEARDOWN_COMPLETE_BIT BIT(27)
-#define EMAC_CPPI_PASS_CRC_BIT BIT(26)
-#define EMAC_RX_BD_BUF_SIZE (0xFFFF)
-#define EMAC_BD_LENGTH_FOR_CACHE (16) /* only CPPI bytes */
-#define EMAC_RX_BD_PKT_LENGTH_MASK (0xFFFF)
+#define EMAC_CPPI_PASS_CRC_BIT BIT(26)
+#define EMAC_RX_BD_BUF_SIZE (0xFFFF)
+#define EMAC_BD_LENGTH_FOR_CACHE (16) /* only CPPI bytes */
+#define EMAC_RX_BD_PKT_LENGTH_MASK (0xFFFF)
/* Max hardware defines */
-#define EMAC_MAX_TXRX_CHANNELS (8) /* Max hardware channels */
+#define EMAC_MAX_TXRX_CHANNELS (8) /* Max hardware channels */
#define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64) /* Max mcast addr's */
/* EMAC Peripheral Device Register Memory Layout structure */
-#define EMAC_TXIDVER 0x0
-#define EMAC_TXCONTROL 0x4
-#define EMAC_TXTEARDOWN 0x8
-#define EMAC_RXIDVER 0x10
-#define EMAC_RXCONTROL 0x14
-#define EMAC_RXTEARDOWN 0x18
-#define EMAC_TXINTSTATRAW 0x80
-#define EMAC_TXINTSTATMASKED 0x84
-#define EMAC_TXINTMASKSET 0x88
-#define EMAC_TXINTMASKCLEAR 0x8C
-#define EMAC_MACINVECTOR 0x90
+#define EMAC_TXIDVER 0x0
+#define EMAC_TXCONTROL 0x4
+#define EMAC_TXTEARDOWN 0x8
+#define EMAC_RXIDVER 0x10
+#define EMAC_RXCONTROL 0x14
+#define EMAC_RXTEARDOWN 0x18
+#define EMAC_TXINTSTATRAW 0x80
+#define EMAC_TXINTSTATMASKED 0x84
+#define EMAC_TXINTMASKSET 0x88
+#define EMAC_TXINTMASKCLEAR 0x8C
+#define EMAC_MACINVECTOR 0x90
-#define EMAC_DM646X_MACEOIVECTOR 0x94
+#define EMAC_DM646X_MACEOIVECTOR 0x94
-#define EMAC_RXINTSTATRAW 0xA0
-#define EMAC_RXINTSTATMASKED 0xA4
-#define EMAC_RXINTMASKSET 0xA8
-#define EMAC_RXINTMASKCLEAR 0xAC
-#define EMAC_MACINTSTATRAW 0xB0
-#define EMAC_MACINTSTATMASKED 0xB4
-#define EMAC_MACINTMASKSET 0xB8
-#define EMAC_MACINTMASKCLEAR 0xBC
+#define EMAC_RXINTSTATRAW 0xA0
+#define EMAC_RXINTSTATMASKED 0xA4
+#define EMAC_RXINTMASKSET 0xA8
+#define EMAC_RXINTMASKCLEAR 0xAC
+#define EMAC_MACINTSTATRAW 0xB0
+#define EMAC_MACINTSTATMASKED 0xB4
+#define EMAC_MACINTMASKSET 0xB8
+#define EMAC_MACINTMASKCLEAR 0xBC
-#define EMAC_RXMBPENABLE 0x100
-#define EMAC_RXUNICASTSET 0x104
-#define EMAC_RXUNICASTCLEAR 0x108
-#define EMAC_RXMAXLEN 0x10C
-#define EMAC_RXBUFFEROFFSET 0x110
-#define EMAC_RXFILTERLOWTHRESH 0x114
+#define EMAC_RXMBPENABLE 0x100
+#define EMAC_RXUNICASTSET 0x104
+#define EMAC_RXUNICASTCLEAR 0x108
+#define EMAC_RXMAXLEN 0x10C
+#define EMAC_RXBUFFEROFFSET 0x110
+#define EMAC_RXFILTERLOWTHRESH 0x114
-#define EMAC_MACCONTROL 0x160
-#define EMAC_MACSTATUS 0x164
-#define EMAC_EMCONTROL 0x168
-#define EMAC_FIFOCONTROL 0x16C
-#define EMAC_MACCONFIG 0x170
-#define EMAC_SOFTRESET 0x174
-#define EMAC_MACSRCADDRLO 0x1D0
-#define EMAC_MACSRCADDRHI 0x1D4
-#define EMAC_MACHASH1 0x1D8
-#define EMAC_MACHASH2 0x1DC
-#define EMAC_MACADDRLO 0x500
-#define EMAC_MACADDRHI 0x504
-#define EMAC_MACINDEX 0x508
+#define EMAC_MACCONTROL 0x160
+#define EMAC_MACSTATUS 0x164
+#define EMAC_EMCONTROL 0x168
+#define EMAC_FIFOCONTROL 0x16C
+#define EMAC_MACCONFIG 0x170
+#define EMAC_SOFTRESET 0x174
+#define EMAC_MACSRCADDRLO 0x1D0
+#define EMAC_MACSRCADDRHI 0x1D4
+#define EMAC_MACHASH1 0x1D8
+#define EMAC_MACHASH2 0x1DC
+#define EMAC_MACADDRLO 0x500
+#define EMAC_MACADDRHI 0x504
+#define EMAC_MACINDEX 0x508
/* EMAC HDP and Completion registors */
-#define EMAC_TXHDP(ch) (0x600 + (ch * 4))
-#define EMAC_RXHDP(ch) (0x620 + (ch * 4))
-#define EMAC_TXCP(ch) (0x640 + (ch * 4))
-#define EMAC_RXCP(ch) (0x660 + (ch * 4))
+#define EMAC_TXHDP(ch) (0x600 + (ch * 4))
+#define EMAC_RXHDP(ch) (0x620 + (ch * 4))
+#define EMAC_TXCP(ch) (0x640 + (ch * 4))
+#define EMAC_RXCP(ch) (0x660 + (ch * 4))
/* EMAC statistics registers */
-#define EMAC_RXGOODFRAMES 0x200
-#define EMAC_RXBCASTFRAMES 0x204
-#define EMAC_RXMCASTFRAMES 0x208
-#define EMAC_RXPAUSEFRAMES 0x20C
-#define EMAC_RXCRCERRORS 0x210
-#define EMAC_RXALIGNCODEERRORS 0x214
-#define EMAC_RXOVERSIZED 0x218
-#define EMAC_RXJABBER 0x21C
-#define EMAC_RXUNDERSIZED 0x220
-#define EMAC_RXFRAGMENTS 0x224
-#define EMAC_RXFILTERED 0x228
-#define EMAC_RXQOSFILTERED 0x22C
-#define EMAC_RXOCTETS 0x230
-#define EMAC_TXGOODFRAMES 0x234
-#define EMAC_TXBCASTFRAMES 0x238
-#define EMAC_TXMCASTFRAMES 0x23C
-#define EMAC_TXPAUSEFRAMES 0x240
-#define EMAC_TXDEFERRED 0x244
-#define EMAC_TXCOLLISION 0x248
-#define EMAC_TXSINGLECOLL 0x24C
-#define EMAC_TXMULTICOLL 0x250
-#define EMAC_TXEXCESSIVECOLL 0x254
-#define EMAC_TXLATECOLL 0x258
-#define EMAC_TXUNDERRUN 0x25C
-#define EMAC_TXCARRIERSENSE 0x260
-#define EMAC_TXOCTETS 0x264
-#define EMAC_NETOCTETS 0x280
-#define EMAC_RXSOFOVERRUNS 0x284
-#define EMAC_RXMOFOVERRUNS 0x288
-#define EMAC_RXDMAOVERRUNS 0x28C
+#define EMAC_RXGOODFRAMES 0x200
+#define EMAC_RXBCASTFRAMES 0x204
+#define EMAC_RXMCASTFRAMES 0x208
+#define EMAC_RXPAUSEFRAMES 0x20C
+#define EMAC_RXCRCERRORS 0x210
+#define EMAC_RXALIGNCODEERRORS 0x214
+#define EMAC_RXOVERSIZED 0x218
+#define EMAC_RXJABBER 0x21C
+#define EMAC_RXUNDERSIZED 0x220
+#define EMAC_RXFRAGMENTS 0x224
+#define EMAC_RXFILTERED 0x228
+#define EMAC_RXQOSFILTERED 0x22C
+#define EMAC_RXOCTETS 0x230
+#define EMAC_TXGOODFRAMES 0x234
+#define EMAC_TXBCASTFRAMES 0x238
+#define EMAC_TXMCASTFRAMES 0x23C
+#define EMAC_TXPAUSEFRAMES 0x240
+#define EMAC_TXDEFERRED 0x244
+#define EMAC_TXCOLLISION 0x248
+#define EMAC_TXSINGLECOLL 0x24C
+#define EMAC_TXMULTICOLL 0x250
+#define EMAC_TXEXCESSIVECOLL 0x254
+#define EMAC_TXLATECOLL 0x258
+#define EMAC_TXUNDERRUN 0x25C
+#define EMAC_TXCARRIERSENSE 0x260
+#define EMAC_TXOCTETS 0x264
+#define EMAC_NETOCTETS 0x280
+#define EMAC_RXSOFOVERRUNS 0x284
+#define EMAC_RXMOFOVERRUNS 0x288
+#define EMAC_RXDMAOVERRUNS 0x28C
/* EMAC DM644x control registers */
-#define EMAC_CTRL_EWCTL (0x4)
-#define EMAC_CTRL_EWINTTCNT (0x8)
+#define EMAC_CTRL_EWCTL (0x4)
+#define EMAC_CTRL_EWINTTCNT (0x8)
/* EMAC MDIO related */
/* Mask & Control defines */
-#define MDIO_CONTROL_CLKDIV (0xFF)
-#define MDIO_CONTROL_ENABLE BIT(30)
-#define MDIO_USERACCESS_GO BIT(31)
-#define MDIO_USERACCESS_WRITE BIT(30)
-#define MDIO_USERACCESS_READ (0)
-#define MDIO_USERACCESS_REGADR (0x1F << 21)
-#define MDIO_USERACCESS_PHYADR (0x1F << 16)
-#define MDIO_USERACCESS_DATA (0xFFFF)
-#define MDIO_USERPHYSEL_LINKSEL BIT(7)
-#define MDIO_VER_MODID (0xFFFF << 16)
-#define MDIO_VER_REVMAJ (0xFF << 8)
-#define MDIO_VER_REVMIN (0xFF)
+#define MDIO_CONTROL_CLKDIV (0xFF)
+#define MDIO_CONTROL_ENABLE BIT(30)
+#define MDIO_USERACCESS_GO BIT(31)
+#define MDIO_USERACCESS_WRITE BIT(30)
+#define MDIO_USERACCESS_READ (0)
+#define MDIO_USERACCESS_REGADR (0x1F << 21)
+#define MDIO_USERACCESS_PHYADR (0x1F << 16)
+#define MDIO_USERACCESS_DATA (0xFFFF)
+#define MDIO_USERPHYSEL_LINKSEL BIT(7)
+#define MDIO_VER_MODID (0xFFFF << 16)
+#define MDIO_VER_REVMAJ (0xFF << 8)
+#define MDIO_VER_REVMIN (0xFF)
-#define MDIO_USERACCESS(inst) (0x80 + (inst * 8))
-#define MDIO_USERPHYSEL(inst) (0x84 + (inst * 8))
-#define MDIO_CONTROL (0x04)
+#define MDIO_USERACCESS(inst) (0x80 + (inst * 8))
+#define MDIO_USERPHYSEL(inst) (0x84 + (inst * 8))
+#define MDIO_CONTROL (0x04)
/* EMAC DM646X control module registers */
-#define EMAC_DM646X_CMRXINTEN (0x14)
-#define EMAC_DM646X_CMTXINTEN (0x18)
+#define EMAC_DM646X_CMRXINTEN (0x14)
+#define EMAC_DM646X_CMTXINTEN (0x18)
/* EMAC EOI codes for C0 */
-#define EMAC_DM646X_MAC_EOI_C0_RXEN (0x01)
-#define EMAC_DM646X_MAC_EOI_C0_TXEN (0x02)
+#define EMAC_DM646X_MAC_EOI_C0_RXEN (0x01)
+#define EMAC_DM646X_MAC_EOI_C0_TXEN (0x02)
/* EMAC Stats Clear Mask */
#define EMAC_STATS_CLR_MASK (0xFFFFFFFF)
@@ -269,9 +269,9 @@ enum {
* EMAC network buffer data structure
*/
struct emac_netbufobj {
- void *buf_token;
- char *data_ptr;
- int length;
+ void *buf_token;
+ char *data_ptr;
+ int length;
};
/** net_pkt_obj: EMAC network packet data structure
@@ -279,10 +279,10 @@ struct emac_netbufobj {
* EMAC network packet data structure - supports buffer list (for future)
*/
struct emac_netpktobj {
- void *pkt_token; /* data token may hold tx/rx chan id */
- struct emac_netbufobj *buf_list; /* array of network buffer objects */
- int num_bufs;
- int pkt_length;
+ void *pkt_token; /* data token may hold tx/rx chan id */
+ struct emac_netbufobj *buf_list; /* array of network buffer objects */
+ int num_bufs;
+ int pkt_length;
};
/** emac_tx_bd: EMAC TX Buffer descriptor data structure
@@ -290,12 +290,12 @@ struct emac_netpktobj {
* EMAC TX Buffer descriptor data structure
*/
struct emac_tx_bd {
- int h_next;
- int buff_ptr;
- int off_b_len;
- int mode; /* SOP, EOP, ownership, EOQ, teardown,Qstarv, length */
- struct emac_tx_bd __iomem *next;
- void *buf_token;
+ int h_next;
+ int buff_ptr;
+ int off_b_len;
+ int mode; /* SOP, EOP, ownership, EOQ, teardown,Qstarv, length */
+ struct emac_tx_bd __iomem *next;
+ void *buf_token;
};
/** emac_txch: EMAC TX Channel data structure
@@ -303,29 +303,29 @@ struct emac_tx_bd {
* EMAC TX Channel data structure
*/
struct emac_txch {
- /* Config related */
- rt_uint32_t num_bd;
- rt_uint32_t service_max;
+ /* Config related */
+ rt_uint32_t num_bd;
+ rt_uint32_t service_max;
- /* CPPI specific */
- rt_uint32_t alloc_size;
- void __iomem *bd_mem;
- struct emac_tx_bd __iomem *bd_pool_head;
- struct emac_tx_bd __iomem *active_queue_head;
- struct emac_tx_bd __iomem *active_queue_tail;
- struct emac_tx_bd __iomem *last_hw_bdprocessed;
- rt_uint32_t queue_active;
- rt_uint32_t teardown_pending;
- rt_uint32_t *tx_complete;
+ /* CPPI specific */
+ rt_uint32_t alloc_size;
+ void __iomem *bd_mem;
+ struct emac_tx_bd __iomem *bd_pool_head;
+ struct emac_tx_bd __iomem *active_queue_head;
+ struct emac_tx_bd __iomem *active_queue_tail;
+ struct emac_tx_bd __iomem *last_hw_bdprocessed;
+ rt_uint32_t queue_active;
+ rt_uint32_t teardown_pending;
+ rt_uint32_t *tx_complete;
- /** statistics */
- rt_uint32_t proc_count; /* TX: # of times emac_tx_bdproc is called */
- rt_uint32_t mis_queued_packets;
- rt_uint32_t queue_reinit;
- rt_uint32_t end_of_queue_add;
- rt_uint32_t out_of_tx_bd;
- rt_uint32_t no_active_pkts; /* IRQ when there were no packets to process */
- rt_uint32_t active_queue_count;
+ /** statistics */
+ rt_uint32_t proc_count; /* TX: # of times emac_tx_bdproc is called */
+ rt_uint32_t mis_queued_packets;
+ rt_uint32_t queue_reinit;
+ rt_uint32_t end_of_queue_add;
+ rt_uint32_t out_of_tx_bd;
+ rt_uint32_t no_active_pkts; /* IRQ when there were no packets to process */
+ rt_uint32_t active_queue_count;
};
/** emac_rx_bd: EMAC RX Buffer descriptor data structure
@@ -333,13 +333,13 @@ struct emac_txch {
* EMAC RX Buffer descriptor data structure
*/
struct emac_rx_bd {
- int h_next;
- int buff_ptr;
- int off_b_len;
- int mode;
- struct emac_rx_bd __iomem *next;
- void *data_ptr;
- void *buf_token;
+ int h_next;
+ int buff_ptr;
+ int off_b_len;
+ int mode;
+ struct emac_rx_bd __iomem *next;
+ void *data_ptr;
+ void *buf_token;
};
/** emac_rxch: EMAC RX Channel data structure
@@ -347,68 +347,68 @@ struct emac_rx_bd {
* EMAC RX Channel data structure
*/
struct emac_rxch {
- /* configuration info */
- rt_uint32_t num_bd;
- rt_uint32_t service_max;
- rt_uint32_t buf_size;
- char mac_addr[6];
+ /* configuration info */
+ rt_uint32_t num_bd;
+ rt_uint32_t service_max;
+ rt_uint32_t buf_size;
+ char mac_addr[6];
- /** CPPI specific */
- rt_uint32_t alloc_size;
- void __iomem *bd_mem;
- struct emac_rx_bd __iomem *bd_pool_head;
- struct emac_rx_bd __iomem *active_queue_head;
- struct emac_rx_bd __iomem *active_queue_tail;
- rt_uint32_t queue_active;
- rt_uint32_t teardown_pending;
+ /** CPPI specific */
+ rt_uint32_t alloc_size;
+ void __iomem *bd_mem;
+ struct emac_rx_bd __iomem *bd_pool_head;
+ struct emac_rx_bd __iomem *active_queue_head;
+ struct emac_rx_bd __iomem *active_queue_tail;
+ rt_uint32_t queue_active;
+ rt_uint32_t teardown_pending;
- /* packet and buffer objects */
- struct emac_netpktobj pkt_queue;
- struct emac_netbufobj buf_queue;
+ /* packet and buffer objects */
+ struct emac_netpktobj pkt_queue;
+ struct emac_netbufobj buf_queue;
- /** statistics */
- rt_uint32_t proc_count; /* number of times emac_rx_bdproc is called */
- rt_uint32_t processed_bd;
- rt_uint32_t recycled_bd;
- rt_uint32_t out_of_rx_bd;
- rt_uint32_t out_of_rx_buffers;
- rt_uint32_t queue_reinit;
- rt_uint32_t end_of_queue_add;
- rt_uint32_t end_of_queue;
- rt_uint32_t mis_queued_packets;
+ /** statistics */
+ rt_uint32_t proc_count; /* number of times emac_rx_bdproc is called */
+ rt_uint32_t processed_bd;
+ rt_uint32_t recycled_bd;
+ rt_uint32_t out_of_rx_bd;
+ rt_uint32_t out_of_rx_buffers;
+ rt_uint32_t queue_reinit;
+ rt_uint32_t end_of_queue_add;
+ rt_uint32_t end_of_queue;
+ rt_uint32_t mis_queued_packets;
};
struct net_device_stats
{
- unsigned long rx_packets; /* total packets received */
- unsigned long tx_packets; /* total packets transmitted */
- unsigned long rx_bytes; /* total bytes received */
- unsigned long tx_bytes; /* total bytes transmitted */
- unsigned long rx_errors; /* bad packets received */
- unsigned long tx_errors; /* packet transmit problems */
- unsigned long rx_dropped; /* no space in linux buffers */
- unsigned long tx_dropped; /* no space available in linux */
- unsigned long multicast; /* multicast packets received */
- unsigned long collisions;
+ unsigned long rx_packets; /* total packets received */
+ unsigned long tx_packets; /* total packets transmitted */
+ unsigned long rx_bytes; /* total bytes received */
+ unsigned long tx_bytes; /* total bytes transmitted */
+ unsigned long rx_errors; /* bad packets received */
+ unsigned long tx_errors; /* packet transmit problems */
+ unsigned long rx_dropped; /* no space in linux buffers */
+ unsigned long tx_dropped; /* no space available in linux */
+ unsigned long multicast; /* multicast packets received */
+ unsigned long collisions;
- /* detailed rx_errors: */
- unsigned long rx_length_errors;
- unsigned long rx_over_errors; /* receiver ring buff overflow */
- unsigned long rx_crc_errors; /* recved pkt with crc error */
- unsigned long rx_frame_errors; /* recv'd frame alignment error */
- unsigned long rx_fifo_errors; /* recv'r fifo overrun */
- unsigned long rx_missed_errors; /* receiver missed packet */
+ /* detailed rx_errors: */
+ unsigned long rx_length_errors;
+ unsigned long rx_over_errors; /* receiver ring buff overflow */
+ unsigned long rx_crc_errors; /* recved pkt with crc error */
+ unsigned long rx_frame_errors; /* recv'd frame alignment error */
+ unsigned long rx_fifo_errors; /* recv'r fifo overrun */
+ unsigned long rx_missed_errors; /* receiver missed packet */
- /* detailed tx_errors */
- unsigned long tx_aborted_errors;
- unsigned long tx_carrier_errors;
- unsigned long tx_fifo_errors;
- unsigned long tx_heartbeat_errors;
- unsigned long tx_window_errors;
-
- /* for cslip etc */
- unsigned long rx_compressed;
- unsigned long tx_compressed;
+ /* detailed tx_errors */
+ unsigned long tx_aborted_errors;
+ unsigned long tx_carrier_errors;
+ unsigned long tx_fifo_errors;
+ unsigned long tx_heartbeat_errors;
+ unsigned long tx_window_errors;
+
+ /* for cslip etc */
+ unsigned long rx_compressed;
+ unsigned long tx_compressed;
};
@@ -419,44 +419,44 @@ struct net_device_stats
#define MAX_ADDR_LEN 6
struct emac_priv {
- /* inherit from ethernet device */
- struct eth_device parent;
+ /* inherit from ethernet device */
+ struct eth_device parent;
+
+ /* interface address info. */
+ rt_uint8_t mac_addr[MAX_ADDR_LEN]; /* hw address */
+ unsigned short phy_addr;
- /* interface address info. */
- rt_uint8_t mac_addr[MAX_ADDR_LEN]; /* hw address */
- unsigned short phy_addr;
-
- struct rt_semaphore tx_lock;
- struct rt_semaphore rx_lock;
- void __iomem *remap_addr;
- rt_uint32_t emac_base_phys;
- void __iomem *emac_base;
- void __iomem *ctrl_base;
- void __iomem *emac_ctrl_ram;
- void __iomem *mdio_base;
- rt_uint32_t ctrl_ram_size;
- rt_uint32_t hw_ram_addr;
- struct emac_txch *txch[EMAC_DEF_MAX_TX_CH];
- struct emac_rxch *rxch[EMAC_DEF_MAX_RX_CH];
- rt_uint32_t link; /* 1=link on, 0=link off */
- rt_uint32_t speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
- rt_uint32_t duplex; /* Link duplex: 0=Half, 1=Full */
- rt_uint32_t rx_buf_size;
- rt_uint32_t isr_count;
- rt_uint8_t rmii_en;
- rt_uint8_t version;
- struct net_device_stats net_dev_stats;
- rt_uint32_t mac_hash1;
- rt_uint32_t mac_hash2;
- rt_uint32_t multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
- rt_uint32_t rx_addr_type;
- /* periodic timer required for MDIO polling */
- struct rt_timer timer;
- rt_uint32_t periodic_ticks;
- rt_uint32_t timer_active;
- rt_uint32_t phy_mask;
- /* mii_bus,phy members */
- struct rt_semaphore lock;
+ struct rt_semaphore tx_lock;
+ struct rt_semaphore rx_lock;
+ void __iomem *remap_addr;
+ rt_uint32_t emac_base_phys;
+ void __iomem *emac_base;
+ void __iomem *ctrl_base;
+ void __iomem *emac_ctrl_ram;
+ void __iomem *mdio_base;
+ rt_uint32_t ctrl_ram_size;
+ rt_uint32_t hw_ram_addr;
+ struct emac_txch *txch[EMAC_DEF_MAX_TX_CH];
+ struct emac_rxch *rxch[EMAC_DEF_MAX_RX_CH];
+ rt_uint32_t link; /* 1=link on, 0=link off */
+ rt_uint32_t speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
+ rt_uint32_t duplex; /* Link duplex: 0=Half, 1=Full */
+ rt_uint32_t rx_buf_size;
+ rt_uint32_t isr_count;
+ rt_uint8_t rmii_en;
+ rt_uint8_t version;
+ struct net_device_stats net_dev_stats;
+ rt_uint32_t mac_hash1;
+ rt_uint32_t mac_hash2;
+ rt_uint32_t multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
+ rt_uint32_t rx_addr_type;
+ /* periodic timer required for MDIO polling */
+ struct rt_timer timer;
+ rt_uint32_t periodic_ticks;
+ rt_uint32_t timer_active;
+ rt_uint32_t phy_mask;
+ /* mii_bus,phy members */
+ struct rt_semaphore lock;
};