Home | History | Annotate | Line # | Download | only in ti
      1  1.1  jmcneill /*-
      2  1.1  jmcneill  * Copyright (c) 2012 Damjan Marion <dmarion (at) Freebsd.org>
      3  1.1  jmcneill  * All rights reserved.
      4  1.1  jmcneill  *
      5  1.1  jmcneill  * Redistribution and use in source and binary forms, with or without
      6  1.1  jmcneill  * modification, are permitted provided that the following conditions
      7  1.1  jmcneill  * are met:
      8  1.1  jmcneill  * 1. Redistributions of source code must retain the above copyright
      9  1.1  jmcneill  *    notice, this list of conditions and the following disclaimer.
     10  1.1  jmcneill  * 2. Redistributions in binary form must reproduce the above copyright
     11  1.1  jmcneill  *    notice, this list of conditions and the following disclaimer in the
     12  1.1  jmcneill  *    documentation and/or other materials provided with the distribution.
     13  1.1  jmcneill  *
     14  1.1  jmcneill  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     15  1.1  jmcneill  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     16  1.1  jmcneill  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     17  1.1  jmcneill  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     18  1.1  jmcneill  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     19  1.1  jmcneill  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     20  1.1  jmcneill  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     21  1.1  jmcneill  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     22  1.1  jmcneill  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     23  1.1  jmcneill  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     24  1.1  jmcneill  * SUCH DAMAGE.
     25  1.1  jmcneill  *
     26  1.1  jmcneill  * $FreeBSD$
     27  1.1  jmcneill  */
     28  1.1  jmcneill 
     29  1.1  jmcneill #ifndef	_IF_CPSWREG_H
     30  1.1  jmcneill #define	_IF_CPSWREG_H
     31  1.1  jmcneill 
     32  1.1  jmcneill #define CPSW_ETH_PORTS			2
     33  1.1  jmcneill #define CPSW_CPPI_PORTS			1
     34  1.1  jmcneill 
     35  1.1  jmcneill #define CPSW_SS_OFFSET			0x0000
     36  1.1  jmcneill #define CPSW_SS_IDVER			(CPSW_SS_OFFSET + 0x00)
     37  1.1  jmcneill #define CPSW_SS_SOFT_RESET		(CPSW_SS_OFFSET + 0x08)
     38  1.1  jmcneill #define CPSW_SS_STAT_PORT_EN		(CPSW_SS_OFFSET + 0x0C)
     39  1.1  jmcneill #define CPSW_SS_PTYPE			(CPSW_SS_OFFSET + 0x10)
     40  1.1  jmcneill #define CPSW_SS_FLOW_CONTROL		(CPSW_SS_OFFSET + 0x24)
     41  1.1  jmcneill #define CPSW_SS_RGMII_CTL		(CPSW_SS_OFFSET + 0x88)
     42  1.1  jmcneill 
     43  1.1  jmcneill #define CPSW_PORT_OFFSET		0x0100
     44  1.1  jmcneill #define CPSW_PORT_P_TX_PRI_MAP(p)	(CPSW_PORT_OFFSET + 0x118 + ((p-1) * 0x100))
     45  1.1  jmcneill #define CPSW_PORT_P0_CPDMA_TX_PRI_MAP	(CPSW_PORT_OFFSET + 0x01C)
     46  1.1  jmcneill #define CPSW_PORT_P0_CPDMA_RX_CH_MAP	(CPSW_PORT_OFFSET + 0x020)
     47  1.1  jmcneill #define CPSW_PORT_P_SA_LO(p)		(CPSW_PORT_OFFSET + 0x120 + ((p-1) * 0x100))
     48  1.1  jmcneill #define CPSW_PORT_P_SA_HI(p)		(CPSW_PORT_OFFSET + 0x124 + ((p-1) * 0x100))
     49  1.1  jmcneill 
     50  1.1  jmcneill #define CPSW_GMII_SEL			0x0650
     51  1.1  jmcneill 
     52  1.1  jmcneill #define CPSW_CPDMA_OFFSET		0x0800
     53  1.1  jmcneill #define CPSW_CPDMA_TX_CONTROL		(CPSW_CPDMA_OFFSET + 0x04)
     54  1.1  jmcneill #define CPSW_CPDMA_TX_TEARDOWN		(CPSW_CPDMA_OFFSET + 0x08)
     55  1.1  jmcneill #define CPSW_CPDMA_RX_CONTROL		(CPSW_CPDMA_OFFSET + 0x14)
     56  1.1  jmcneill #define CPSW_CPDMA_RX_TEARDOWN		(CPSW_CPDMA_OFFSET + 0x18)
     57  1.1  jmcneill #define CPSW_CPDMA_SOFT_RESET		(CPSW_CPDMA_OFFSET + 0x1c)
     58  1.1  jmcneill #define CPSW_CPDMA_DMACONTROL		(CPSW_CPDMA_OFFSET + 0x20)
     59  1.1  jmcneill #define CPSW_CPDMA_DMASTATUS		(CPSW_CPDMA_OFFSET + 0x24)
     60  1.1  jmcneill #define CPSW_CPDMA_RX_BUFFER_OFFSET	(CPSW_CPDMA_OFFSET + 0x28)
     61  1.1  jmcneill #define CPSW_CPDMA_TX_INTSTAT_RAW	(CPSW_CPDMA_OFFSET + 0x80)
     62  1.1  jmcneill #define CPSW_CPDMA_TX_INTSTAT_MASKED	(CPSW_CPDMA_OFFSET + 0x84)
     63  1.1  jmcneill #define CPSW_CPDMA_TX_INTMASK_SET	(CPSW_CPDMA_OFFSET + 0x88)
     64  1.1  jmcneill #define CPSW_CPDMA_TX_INTMASK_CLEAR	(CPSW_CPDMA_OFFSET + 0x8C)
     65  1.1  jmcneill #define CPSW_CPDMA_CPDMA_EOI_VECTOR	(CPSW_CPDMA_OFFSET + 0x94)
     66  1.1  jmcneill #define CPSW_CPDMA_RX_INTSTAT_RAW	(CPSW_CPDMA_OFFSET + 0xA0)
     67  1.1  jmcneill #define CPSW_CPDMA_RX_INTSTAT_MASKED	(CPSW_CPDMA_OFFSET + 0xA4)
     68  1.1  jmcneill #define CPSW_CPDMA_RX_INTMASK_SET	(CPSW_CPDMA_OFFSET + 0xA8)
     69  1.1  jmcneill #define CPSW_CPDMA_RX_INTMASK_CLEAR	(CPSW_CPDMA_OFFSET + 0xAc)
     70  1.1  jmcneill #define CPSW_CPDMA_DMA_INTSTAT_RAW	(CPSW_CPDMA_OFFSET + 0xB0)
     71  1.1  jmcneill #define CPSW_CPDMA_DMA_INTSTAT_MASKED	(CPSW_CPDMA_OFFSET + 0xB4)
     72  1.1  jmcneill #define CPSW_CPDMA_DMA_INTMASK_SET	(CPSW_CPDMA_OFFSET + 0xB8)
     73  1.1  jmcneill #define CPSW_CPDMA_DMA_INTMASK_CLEAR	(CPSW_CPDMA_OFFSET + 0xBC)
     74  1.1  jmcneill #define CPSW_CPDMA_RX_FREEBUFFER(p)	(CPSW_CPDMA_OFFSET + 0x0e0 + ((p) * 0x04))
     75  1.1  jmcneill 
     76  1.1  jmcneill #define CPSW_STATS_OFFSET		0x0900
     77  1.1  jmcneill 
     78  1.1  jmcneill #define CPSW_STATERAM_OFFSET		0x0A00
     79  1.1  jmcneill #define CPSW_CPDMA_TX_HDP(p)		(CPSW_STATERAM_OFFSET + 0x00 + ((p) * 0x04))
     80  1.1  jmcneill #define CPSW_CPDMA_RX_HDP(p)		(CPSW_STATERAM_OFFSET + 0x20 + ((p) * 0x04))
     81  1.1  jmcneill #define CPSW_CPDMA_TX_CP(p)		(CPSW_STATERAM_OFFSET + 0x40 + ((p) * 0x04))
     82  1.1  jmcneill #define CPSW_CPDMA_RX_CP(p)		(CPSW_STATERAM_OFFSET + 0x60 + ((p) * 0x04))
     83  1.1  jmcneill 
     84  1.1  jmcneill #define CPSW_CPTS_OFFSET		0x0C00
     85  1.1  jmcneill 
     86  1.1  jmcneill #define CPSW_ALE_OFFSET			0x0D00
     87  1.1  jmcneill #define CPSW_ALE_CONTROL		(CPSW_ALE_OFFSET + 0x08)
     88  1.1  jmcneill #define CPSW_ALE_TBLCTL			(CPSW_ALE_OFFSET + 0x20)
     89  1.1  jmcneill #define CPSW_ALE_TBLW2			(CPSW_ALE_OFFSET + 0x34)
     90  1.1  jmcneill #define CPSW_ALE_TBLW1			(CPSW_ALE_OFFSET + 0x38)
     91  1.1  jmcneill #define CPSW_ALE_TBLW0			(CPSW_ALE_OFFSET + 0x3C)
     92  1.1  jmcneill #define CPSW_ALE_PORTCTL(p)		(CPSW_ALE_OFFSET + 0x40 + ((p) * 0x04))
     93  1.1  jmcneill 
     94  1.1  jmcneill #define CPSW_SL_OFFSET			0x0D80
     95  1.1  jmcneill #define CPSW_SL_IDVER(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x00)
     96  1.1  jmcneill #define CPSW_SL_MACCONTROL(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x04)
     97  1.1  jmcneill #define CPSW_SL_MACSTATUS(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x08)
     98  1.1  jmcneill #define CPSW_SL_SOFT_RESET(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x0C)
     99  1.1  jmcneill #define CPSW_SL_RX_MAXLEN(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x10)
    100  1.1  jmcneill #define CPSW_SL_BOFFTEST(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x14)
    101  1.1  jmcneill #define CPSW_SL_RX_PAUSE(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x18)
    102  1.1  jmcneill #define CPSW_SL_TX_PAUSE(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x1C)
    103  1.1  jmcneill #define CPSW_SL_EMCONTROL(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x20)
    104  1.1  jmcneill #define CPSW_SL_RX_PRI_MAP(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x24)
    105  1.1  jmcneill #define CPSW_SL_TX_GAP(p)		(CPSW_SL_OFFSET + (0x40 * (p)) + 0x28)
    106  1.1  jmcneill 
    107  1.1  jmcneill #define MDIO_OFFSET			0x1000
    108  1.1  jmcneill #define MDIOCONTROL			(MDIO_OFFSET + 0x04)
    109  1.1  jmcneill #define MDIOUSERACCESS0			(MDIO_OFFSET + 0x80)
    110  1.1  jmcneill #define MDIOUSERPHYSEL0			(MDIO_OFFSET + 0x84)
    111  1.1  jmcneill 
    112  1.1  jmcneill #define CPSW_WR_OFFSET			0x1200
    113  1.1  jmcneill #define CPSW_WR_SOFT_RESET		(CPSW_WR_OFFSET + 0x04)
    114  1.1  jmcneill #define CPSW_WR_CONTROL			(CPSW_WR_OFFSET + 0x08)
    115  1.1  jmcneill #define CPSW_WR_INT_CONTROL		(CPSW_WR_OFFSET + 0x0c)
    116  1.1  jmcneill #define CPSW_WR_C_RX_THRESH_EN(p)	(CPSW_WR_OFFSET + (0x10 * (p)) + 0x10)
    117  1.1  jmcneill #define CPSW_WR_C_RX_EN(p)		(CPSW_WR_OFFSET + (0x10 * (p)) + 0x14)
    118  1.1  jmcneill #define CPSW_WR_C_TX_EN(p)		(CPSW_WR_OFFSET + (0x10 * (p)) + 0x18)
    119  1.1  jmcneill #define CPSW_WR_C_MISC_EN(p)		(CPSW_WR_OFFSET + (0x10 * (p)) + 0x1C)
    120  1.1  jmcneill #define CPSW_WR_C_RX_THRESH_STAT(p)	(CPSW_WR_OFFSET + (0x10 * (p)) + 0x40)
    121  1.1  jmcneill #define CPSW_WR_C_RX_STAT(p)		(CPSW_WR_OFFSET + (0x10 * (p)) + 0x44)
    122  1.1  jmcneill #define CPSW_WR_C_TX_STAT(p)		(CPSW_WR_OFFSET + (0x10 * (p)) + 0x48)
    123  1.1  jmcneill #define CPSW_WR_C_MISC_STAT(p)		(CPSW_WR_OFFSET + (0x10 * (p)) + 0x4C)
    124  1.1  jmcneill 
    125  1.1  jmcneill #define CPSW_CPPI_RAM_OFFSET		0x2000
    126  1.1  jmcneill 
    127  1.1  jmcneill 
    128  1.1  jmcneill #define __BIT32(x) ((uint32_t)__BIT(x))
    129  1.1  jmcneill #define __BITS32(x, y) ((uint32_t)__BITS((x), (y)))
    130  1.1  jmcneill 
    131  1.1  jmcneill /* flags for descriptor word 3 */
    132  1.1  jmcneill #define CPDMA_BD_SOP		__BIT32(31)
    133  1.1  jmcneill #define CPDMA_BD_EOP		__BIT32(30)
    134  1.1  jmcneill #define CPDMA_BD_OWNER		__BIT32(29)
    135  1.1  jmcneill #define CPDMA_BD_EOQ		__BIT32(28)
    136  1.1  jmcneill #define CPDMA_BD_TDOWNCMPLT	__BIT32(27)
    137  1.1  jmcneill #define CPDMA_BD_PASSCRC	__BIT32(26)
    138  1.1  jmcneill 
    139  1.1  jmcneill #define CPDMA_BD_LONG		__BIT32(25) /* Rx descriptor only */
    140  1.1  jmcneill #define CPDMA_BD_SHORT		__BIT32(24)
    141  1.1  jmcneill #define CPDMA_BD_MAC_CTL	__BIT32(23)
    142  1.1  jmcneill #define CPDMA_BD_OVERRUN	__BIT32(22)
    143  1.1  jmcneill #define CPDMA_BD_PKT_ERR_MASK	__BITS32(21,20)
    144  1.1  jmcneill #define CPDMA_BD_RX_VLAN_ENCAP	__BIT32(19)
    145  1.1  jmcneill #define CPDMA_BD_FROM_PORT	__BITS32(18,16)
    146  1.1  jmcneill 
    147  1.1  jmcneill #define CPDMA_BD_TO_PORT_EN	__BIT32(20) /* Tx descriptor only */
    148  1.1  jmcneill #define CPDMA_BD_TO_PORT	__BITS32(17,16)
    149  1.1  jmcneill 
    150  1.1  jmcneill struct cpsw_cpdma_bd {
    151  1.1  jmcneill 	uint32_t word[4];
    152  1.1  jmcneill } __packed __aligned(4);
    153  1.1  jmcneill 
    154  1.1  jmcneill /* Interrupt offsets */
    155  1.1  jmcneill #define CPSW_INTROFF_RXTH	0
    156  1.1  jmcneill #define CPSW_INTROFF_RX		1
    157  1.1  jmcneill #define CPSW_INTROFF_TX		2
    158  1.1  jmcneill #define CPSW_INTROFF_MISC	3
    159  1.1  jmcneill 
    160  1.1  jmcneill /* MDIOCONTROL Register Field */
    161  1.1  jmcneill #define MDIOCTL_IDLE		__BIT32(31)
    162  1.1  jmcneill #define MDIOCTL_ENABLE		__BIT32(30)
    163  1.1  jmcneill #define MDIOCTL_HIGHEST_USER_CHANNEL(val)	((0xf & (val)) << 24)
    164  1.1  jmcneill #define MDIOCTL_PREAMBLE	__BIT32(20)
    165  1.1  jmcneill #define MDIOCTL_FAULT		__BIT32(19)
    166  1.1  jmcneill #define MDIOCTL_FAULTENB	__BIT32(18)
    167  1.1  jmcneill #define MDIOCTL_INTTESTENB	__BIT32(17)
    168  1.1  jmcneill #define MDIOCTL_CLKDIV(val)	(0xff & (val))
    169  1.1  jmcneill 
    170  1.1  jmcneill /* ALE Control Register Field */
    171  1.1  jmcneill #define ALECTL_ENABLE_ALE	__BIT32(31)
    172  1.1  jmcneill #define ALECTL_CLEAR_TABLE	__BIT32(30)
    173  1.1  jmcneill #define ALECTL_AGE_OUT_NOW	__BIT32(29)
    174  1.1  jmcneill #define ALECTL_EN_P0_UNI_FLOOD	__BIT32(8)
    175  1.1  jmcneill #define ALECTL_LEARN_NO_VID	__BIT32(7)
    176  1.1  jmcneill #define ALECTL_EN_VID0_MODE	__BIT32(6)
    177  1.1  jmcneill #define ALECTL_ENABLE_OUI_DENY	__BIT32(5)
    178  1.1  jmcneill #define ALECTL_BYPASS		__BIT32(4)
    179  1.1  jmcneill #define ALECTL_RATE_LIMIT_TX	__BIT32(3)
    180  1.1  jmcneill #define ALECTL_VLAN_AWARE	__BIT32(2)
    181  1.1  jmcneill #define ALECTL_ENABLE_AUTH_MODE	__BIT32(1)
    182  1.1  jmcneill #define ALECTL_ENABLE_RATE_LIMIT	__BIT32(0)
    183  1.1  jmcneill 
    184  1.1  jmcneill /* GMII_SEL Register Field */
    185  1.1  jmcneill #define GMIISEL_RMII2_IO_CLK_EN	__BIT32(7)
    186  1.1  jmcneill #define GMIISEL_RMII1_IO_CLK_EN	__BIT32(6)
    187  1.1  jmcneill #define GMIISEL_RGMII2_IDMODE	__BIT32(5)
    188  1.1  jmcneill #define GMIISEL_RGMII1_IDMODE	__BIT32(4)
    189  1.1  jmcneill #define GMIISEL_GMII2_SEL(val)	((0x3 & (val)) << 2)
    190  1.1  jmcneill #define GMIISEL_GMII1_SEL(val)	((0x3 & (val)) << 0)
    191  1.1  jmcneill #define GMII_MODE	0
    192  1.1  jmcneill #define RMII_MODE	1
    193  1.1  jmcneill #define RGMII_MODE	2
    194  1.1  jmcneill 
    195  1.1  jmcneill /* Sliver MACCONTROL Register Field */
    196  1.1  jmcneill #define SLMACCTL_RX_CMF_EN	__BIT32(24)
    197  1.1  jmcneill #define SLMACCTL_RX_CSF_EN	__BIT32(23)
    198  1.1  jmcneill #define SLMACCTL_RX_CEF_EN	__BIT32(22)
    199  1.1  jmcneill #define SLMACCTL_TX_SHORT_GAP_LIM_EN	__BIT32(21)
    200  1.1  jmcneill #define SLMACCTL_EXT_EN		__BIT32(18)
    201  1.1  jmcneill #define SLMACCTL_GIG_FORCE	__BIT32(17)
    202  1.1  jmcneill #define SLMACCTL_IFCTL_B	__BIT32(16)
    203  1.1  jmcneill #define SLMACCTL_IFCTL_A	__BIT32(15)
    204  1.1  jmcneill #define SLMACCTL_CMD_IDLE	__BIT32(11)
    205  1.1  jmcneill #define SLMACCTL_TX_SHORT_GAP_EN	__BIT32(10)
    206  1.1  jmcneill #define SLMACCTL_GIG		__BIT32(7)
    207  1.1  jmcneill #define SLMACCTL_TX_PACE	__BIT32(6)
    208  1.1  jmcneill #define SLMACCTL_GMII_EN	__BIT32(5)
    209  1.1  jmcneill #define SLMACCTL_TX_FLOW_EN	__BIT32(4)
    210  1.1  jmcneill #define SLMACCTL_RX_FLOW_EN	__BIT32(3)
    211  1.1  jmcneill #define SLMACCTL_MTEST		__BIT32(2)
    212  1.1  jmcneill #define SLMACCTL_LOOPBACK	__BIT32(1)
    213  1.1  jmcneill #define SLMACCTL_FULLDUPLEX	__BIT32(0)
    214  1.1  jmcneill 
    215  1.1  jmcneill /* ALE Address Table Entry Field */
    216  1.1  jmcneill typedef enum {
    217  1.1  jmcneill 	ALE_ENTRY_TYPE,
    218  1.1  jmcneill 	ALE_MCAST_FWD_STATE,
    219  1.1  jmcneill 	ALE_PORT_MASK,
    220  1.1  jmcneill 	ALE_PORT_NUMBER,
    221  1.1  jmcneill } ale_entry_field_t;
    222  1.1  jmcneill 
    223  1.1  jmcneill #define ALE_TYPE_FREE		0
    224  1.1  jmcneill #define ALE_TYPE_ADDRESS	1
    225  1.1  jmcneill #define ALE_TYPE_VLAN		2
    226  1.1  jmcneill #define ALE_TYPE_VLAN_ADDRESS	3
    227  1.1  jmcneill 
    228  1.1  jmcneill /*
    229  1.1  jmcneill  * The port state(s) required for the received port on a destination address lookup
    230  1.1  jmcneill  * in order for the multicast packet to be forwarded to the transmit port(s)
    231  1.1  jmcneill  */
    232  1.1  jmcneill #define ALE_FWSTATE_ALL		1	/* Blocking/Forwarding/Learning */
    233  1.1  jmcneill #define ALE_FWSTATE_NOBLOCK	2	/* Forwarding/Learning */
    234  1.1  jmcneill #define ALE_FWSTATE_FWONLY	3	/* Forwarding */
    235  1.1  jmcneill 
    236  1.1  jmcneill #define ALE_PORT_MASK_ALL	7
    237  1.1  jmcneill 
    238  1.1  jmcneill #endif /*_IF_CPSWREG_H */
    239