1*2cd0c529SMike Karels /* $NetBSD: bcmgenetreg.h,v 1.2 2020/02/22 13:41:41 jmcneill Exp $ */ 2*2cd0c529SMike Karels 3*2cd0c529SMike Karels /* derived from NetBSD's bcmgenetreg.h */ 4*2cd0c529SMike Karels 5*2cd0c529SMike Karels /*- 6*2cd0c529SMike Karels * Copyright (c) 2020 Michael J Karels 7*2cd0c529SMike Karels * Copyright (c) 2020 Jared McNeill <jmcneill@invisible.ca> 8*2cd0c529SMike Karels * 9*2cd0c529SMike Karels * Redistribution and use in source and binary forms, with or without 10*2cd0c529SMike Karels * modification, are permitted provided that the following conditions 11*2cd0c529SMike Karels * are met: 12*2cd0c529SMike Karels * 1. Redistributions of source code must retain the above copyright 13*2cd0c529SMike Karels * notice, this list of conditions and the following disclaimer. 14*2cd0c529SMike Karels * 2. Redistributions in binary form must reproduce the above copyright 15*2cd0c529SMike Karels * notice, this list of conditions and the following disclaimer in the 16*2cd0c529SMike Karels * documentation and/or other materials provided with the distribution. 17*2cd0c529SMike Karels * 18*2cd0c529SMike Karels * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19*2cd0c529SMike Karels * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20*2cd0c529SMike Karels * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21*2cd0c529SMike Karels * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22*2cd0c529SMike Karels * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 23*2cd0c529SMike Karels * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24*2cd0c529SMike Karels * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 25*2cd0c529SMike Karels * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26*2cd0c529SMike Karels * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27*2cd0c529SMike Karels * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*2cd0c529SMike Karels * SUCH DAMAGE. 29*2cd0c529SMike Karels */ 30*2cd0c529SMike Karels 31*2cd0c529SMike Karels /* 32*2cd0c529SMike Karels * Broadcom GENETv5 33*2cd0c529SMike Karels */ 34*2cd0c529SMike Karels 35*2cd0c529SMike Karels #ifndef _BCMGENETREG_H 36*2cd0c529SMike Karels #define _BCMGENETREG_H 37*2cd0c529SMike Karels 38*2cd0c529SMike Karels #define GENET_SYS_REV_CTRL 0x000 39*2cd0c529SMike Karels #define SYS_REV_MAJOR __BITS(27,24) 40*2cd0c529SMike Karels #define SYS_REV_MINOR __BITS(19,16) 41*2cd0c529SMike Karels #define REV_MAJOR 0xf000000 42*2cd0c529SMike Karels #define REV_MAJOR_SHIFT 24 43*2cd0c529SMike Karels #define REV_MAJOR_V5 6 44*2cd0c529SMike Karels #define REV_MINOR 0xf0000 45*2cd0c529SMike Karels #define REV_MINOR_SHIFT 16 46*2cd0c529SMike Karels #define REV_PHY 0xffff 47*2cd0c529SMike Karels #define GENET_SYS_PORT_CTRL 0x004 48*2cd0c529SMike Karels #define GENET_SYS_PORT_MODE_EXT_GPHY 3 49*2cd0c529SMike Karels #define GENET_SYS_RBUF_FLUSH_CTRL 0x008 50*2cd0c529SMike Karels #define GENET_SYS_RBUF_FLUSH_RESET __BIT(1) 51*2cd0c529SMike Karels #define GENET_SYS_TBUF_FLUSH_CTRL 0x00c 52*2cd0c529SMike Karels #define GENET_EXT_RGMII_OOB_CTRL 0x08c 53*2cd0c529SMike Karels #define GENET_EXT_RGMII_OOB_ID_MODE_DISABLE __BIT(16) 54*2cd0c529SMike Karels #define GENET_EXT_RGMII_OOB_RGMII_MODE_EN __BIT(6) 55*2cd0c529SMike Karels #define GENET_EXT_RGMII_OOB_OOB_DISABLE __BIT(5) 56*2cd0c529SMike Karels #define GENET_EXT_RGMII_OOB_RGMII_LINK __BIT(4) 57*2cd0c529SMike Karels #define GENET_INTRL2_CPU_STAT 0x200 58*2cd0c529SMike Karels #define GENET_INTRL2_CPU_CLEAR 0x208 59*2cd0c529SMike Karels #define GENET_INTRL2_CPU_STAT_MASK 0x20c 60*2cd0c529SMike Karels #define GENET_INTRL2_CPU_SET_MASK 0x210 61*2cd0c529SMike Karels #define GENET_INTRL2_CPU_CLEAR_MASK 0x214 62*2cd0c529SMike Karels #define GENET_IRQ_MDIO_ERROR __BIT(24) 63*2cd0c529SMike Karels #define GENET_IRQ_MDIO_DONE __BIT(23) 64*2cd0c529SMike Karels #define GENET_IRQ_TXDMA_DONE __BIT(16) 65*2cd0c529SMike Karels #define GENET_IRQ_RXDMA_DONE __BIT(13) 66*2cd0c529SMike Karels #define GENET_RBUF_CTRL 0x300 67*2cd0c529SMike Karels #define GENET_RBUF_BAD_DIS __BIT(2) 68*2cd0c529SMike Karels #define GENET_RBUF_ALIGN_2B __BIT(1) 69*2cd0c529SMike Karels #define GENET_RBUF_64B_EN __BIT(0) 70*2cd0c529SMike Karels #define GENET_RBUF_CHECK_CTRL 0x314 71*2cd0c529SMike Karels #define GENET_RBUF_CHECK_CTRL_EN __BIT(0) 72*2cd0c529SMike Karels #define GENET_RBUF_CHECK_SKIP_FCS __BIT(4) 73*2cd0c529SMike Karels #define GENET_RBUF_TBUF_SIZE_CTRL 0x3b4 74*2cd0c529SMike Karels #define GENET_TBUF_CTRL 0x600 75*2cd0c529SMike Karels #define GENET_UMAC_CMD 0x808 76*2cd0c529SMike Karels #define GENET_UMAC_CMD_LCL_LOOP_EN __BIT(15) 77*2cd0c529SMike Karels #define GENET_UMAC_CMD_SW_RESET __BIT(13) 78*2cd0c529SMike Karels #define GENET_UMAC_CMD_PROMISC __BIT(4) 79*2cd0c529SMike Karels #ifdef __BITS 80*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED __BITS(3,2) 81*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED_10 0 82*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED_100 1 83*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED_1000 2 84*2cd0c529SMike Karels #else 85*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED (3 << 2) 86*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED_10 (0 << 2) 87*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED_100 (1 << 2) 88*2cd0c529SMike Karels #define GENET_UMAC_CMD_SPEED_1000 (2 << 2) 89*2cd0c529SMike Karels #define GENET_UMAC_CMD_CRC_FWD __BIT(6) 90*2cd0c529SMike Karels #endif 91*2cd0c529SMike Karels #define GENET_UMAC_CMD_RXEN __BIT(1) 92*2cd0c529SMike Karels #define GENET_UMAC_CMD_TXEN __BIT(0) 93*2cd0c529SMike Karels #define GENET_UMAC_MAC0 0x80c 94*2cd0c529SMike Karels #define GENET_UMAC_MAC1 0x810 95*2cd0c529SMike Karels #define GENET_UMAC_MAX_FRAME_LEN 0x814 96*2cd0c529SMike Karels #define GENET_UMAC_TX_FLUSH 0xb34 97*2cd0c529SMike Karels #define GENET_UMAC_MIB_CTRL 0xd80 98*2cd0c529SMike Karels #define GENET_UMAC_MIB_RESET_TX __BIT(2) 99*2cd0c529SMike Karels #define GENET_UMAC_MIB_RESET_RUNT __BIT(1) 100*2cd0c529SMike Karels #define GENET_UMAC_MIB_RESET_RX __BIT(0) 101*2cd0c529SMike Karels #define GENET_MDIO_CMD 0xe14 102*2cd0c529SMike Karels #define GENET_MDIO_START_BUSY __BIT(29) 103*2cd0c529SMike Karels #define GENET_MDIO_READ_FAILED __BIT(28) 104*2cd0c529SMike Karels #define GENET_MDIO_READ __BIT(27) 105*2cd0c529SMike Karels #define GENET_MDIO_WRITE __BIT(26) 106*2cd0c529SMike Karels #define GENET_MDIO_PMD __BITS(25,21) 107*2cd0c529SMike Karels #define GENET_MDIO_REG __BITS(20,16) 108*2cd0c529SMike Karels #define GENET_MDIO_ADDR_SHIFT 21 109*2cd0c529SMike Karels #define GENET_MDIO_REG_SHIFT 16 110*2cd0c529SMike Karels #define GENET_MDIO_VAL_MASK 0xffff 111*2cd0c529SMike Karels #define GENET_UMAC_MDF_CTRL 0xe50 112*2cd0c529SMike Karels #define GENET_UMAC_MDF_ADDR0(n) (0xe54 + (n) * 0x8) 113*2cd0c529SMike Karels #define GENET_UMAC_MDF_ADDR1(n) (0xe58 + (n) * 0x8) 114*2cd0c529SMike Karels #define GENET_MAX_MDF_FILTER 17 115*2cd0c529SMike Karels 116*2cd0c529SMike Karels #define GENET_DMA_DESC_COUNT 256 117*2cd0c529SMike Karels #define GENET_DMA_DESC_SIZE 12 118*2cd0c529SMike Karels #define GENET_DMA_DEFAULT_QUEUE 16 119*2cd0c529SMike Karels 120*2cd0c529SMike Karels #define GENET_DMA_RING_SIZE 0x40 121*2cd0c529SMike Karels #define GENET_DMA_RINGS_SIZE (GENET_DMA_RING_SIZE * (GENET_DMA_DEFAULT_QUEUE + 1)) 122*2cd0c529SMike Karels 123*2cd0c529SMike Karels #define GENET_RX_BASE 0x2000 124*2cd0c529SMike Karels #define GENET_TX_BASE 0x4000 125*2cd0c529SMike Karels 126*2cd0c529SMike Karels #define GENET_RX_DMA_RINGBASE(qid) (GENET_RX_BASE + 0xc00 + GENET_DMA_RING_SIZE * (qid)) 127*2cd0c529SMike Karels #define GENET_RX_DMA_WRITE_PTR_LO(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x00) 128*2cd0c529SMike Karels #define GENET_RX_DMA_WRITE_PTR_HI(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x04) 129*2cd0c529SMike Karels #define GENET_RX_DMA_PROD_INDEX(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x08) 130*2cd0c529SMike Karels #define GENET_RX_DMA_CONS_INDEX(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x0c) 131*2cd0c529SMike Karels #define GENET_RX_DMA_PROD_CONS_MASK 0xffff 132*2cd0c529SMike Karels #define GENET_RX_DMA_RING_BUF_SIZE(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x10) 133*2cd0c529SMike Karels #define GENET_RX_DMA_RING_BUF_SIZE_DESC_COUNT __BITS(31,16) 134*2cd0c529SMike Karels #define GENET_RX_DMA_RING_BUF_SIZE_BUF_LENGTH __BITS(15,0) 135*2cd0c529SMike Karels #define GENET_RX_DMA_RING_BUF_SIZE_DESC_SHIFT 16 136*2cd0c529SMike Karels #define GENET_RX_DMA_RING_BUF_SIZE_BUF_LEN_MASK 0xffff 137*2cd0c529SMike Karels #define GENET_RX_DMA_START_ADDR_LO(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x14) 138*2cd0c529SMike Karels #define GENET_RX_DMA_START_ADDR_HI(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x18) 139*2cd0c529SMike Karels #define GENET_RX_DMA_END_ADDR_LO(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x1c) 140*2cd0c529SMike Karels #define GENET_RX_DMA_END_ADDR_HI(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x20) 141*2cd0c529SMike Karels #define GENET_RX_DMA_XON_XOFF_THRES(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x28) 142*2cd0c529SMike Karels #define GENET_RX_DMA_XON_XOFF_THRES_LO __BITS(31,16) 143*2cd0c529SMike Karels #define GENET_RX_DMA_XON_XOFF_THRES_HI __BITS(15,0) 144*2cd0c529SMike Karels #define GENET_RX_DMA_XON_XOFF_THRES_LO_SHIFT 16 145*2cd0c529SMike Karels #define GENET_RX_DMA_READ_PTR_LO(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x2c) 146*2cd0c529SMike Karels #define GENET_RX_DMA_READ_PTR_HI(qid) (GENET_RX_DMA_RINGBASE(qid) + 0x30) 147*2cd0c529SMike Karels 148*2cd0c529SMike Karels #define GENET_TX_DMA_RINGBASE(qid) (GENET_TX_BASE + 0xc00 + GENET_DMA_RING_SIZE * (qid)) 149*2cd0c529SMike Karels #define GENET_TX_DMA_READ_PTR_LO(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x00) 150*2cd0c529SMike Karels #define GENET_TX_DMA_READ_PTR_HI(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x04) 151*2cd0c529SMike Karels #define GENET_TX_DMA_CONS_INDEX(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x08) 152*2cd0c529SMike Karels #define GENET_TX_DMA_PROD_INDEX(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x0c) 153*2cd0c529SMike Karels #define GENET_TX_DMA_PROD_CONS_MASK 0xffff 154*2cd0c529SMike Karels #define GENET_TX_DMA_RING_BUF_SIZE(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x10) 155*2cd0c529SMike Karels #define GENET_TX_DMA_RING_BUF_SIZE_DESC_COUNT __BITS(31,16) 156*2cd0c529SMike Karels #define GENET_TX_DMA_RING_BUF_SIZE_BUF_LENGTH __BITS(15,0) 157*2cd0c529SMike Karels #define GENET_TX_DMA_RING_BUF_SIZE_DESC_SHIFT 16 158*2cd0c529SMike Karels #define GENET_TX_DMA_RING_BUF_SIZE_BUF_LEN_MASK 0xffff 159*2cd0c529SMike Karels #define GENET_TX_DMA_START_ADDR_LO(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x14) 160*2cd0c529SMike Karels #define GENET_TX_DMA_START_ADDR_HI(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x18) 161*2cd0c529SMike Karels #define GENET_TX_DMA_END_ADDR_LO(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x1c) 162*2cd0c529SMike Karels #define GENET_TX_DMA_END_ADDR_HI(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x20) 163*2cd0c529SMike Karels #define GENET_TX_DMA_MBUF_DONE_THRES(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x24) 164*2cd0c529SMike Karels #define GENET_TX_DMA_FLOW_PERIOD(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x28) 165*2cd0c529SMike Karels #define GENET_TX_DMA_WRITE_PTR_LO(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x2c) 166*2cd0c529SMike Karels #define GENET_TX_DMA_WRITE_PTR_HI(qid) (GENET_TX_DMA_RINGBASE(qid) + 0x30) 167*2cd0c529SMike Karels 168*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS(idx) (GENET_RX_BASE + GENET_DMA_DESC_SIZE * (idx) + 0x00) 169*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_BUFLEN __BITS(27,16) 170*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_BUFLEN_MASK 0xfff0000 171*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_BUFLEN_SHIFT 16 172*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_OWN __BIT(15) /* ??? */ 173*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_CKSUM_OK __BIT(15) 174*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_EOP __BIT(14) 175*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_SOP __BIT(13) 176*2cd0c529SMike Karels #define GENET_RX_DESC_STATUS_RX_ERROR __BIT(2) 177*2cd0c529SMike Karels #define GENET_RX_DESC_ADDRESS_LO(idx) (GENET_RX_BASE + GENET_DMA_DESC_SIZE * (idx) + 0x04) 178*2cd0c529SMike Karels #define GENET_RX_DESC_ADDRESS_HI(idx) (GENET_RX_BASE + GENET_DMA_DESC_SIZE * (idx) + 0x08) 179*2cd0c529SMike Karels 180*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS(idx) (GENET_TX_BASE + GENET_DMA_DESC_SIZE * (idx) + 0x00) 181*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_BUFLEN __BITS(27,16) 182*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_OWN __BIT(15) 183*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_EOP __BIT(14) 184*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_SOP __BIT(13) 185*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_QTAG __BITS(12,7) 186*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_CRC __BIT(6) 187*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_CKSUM __BIT(4) 188*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_BUFLEN_SHIFT 16 189*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_BUFLEN_MASK 0x7ff0000 190*2cd0c529SMike Karels #define GENET_TX_DESC_STATUS_QTAG_MASK 0x1f80 191*2cd0c529SMike Karels #define GENET_TX_DESC_ADDRESS_LO(idx) (GENET_TX_BASE + GENET_DMA_DESC_SIZE * (idx) + 0x04) 192*2cd0c529SMike Karels #define GENET_TX_DESC_ADDRESS_HI(idx) (GENET_TX_BASE + GENET_DMA_DESC_SIZE * (idx) + 0x08) 193*2cd0c529SMike Karels 194*2cd0c529SMike Karels /* Status block prepended to tx/rx packets (optional) */ 195*2cd0c529SMike Karels struct statusblock { 196*2cd0c529SMike Karels u_int32_t status_buflen; 197*2cd0c529SMike Karels u_int32_t extstatus; 198*2cd0c529SMike Karels u_int32_t rxcsum; 199*2cd0c529SMike Karels u_int32_t spare1[9]; 200*2cd0c529SMike Karels u_int32_t txcsuminfo; 201*2cd0c529SMike Karels u_int32_t spare2[3]; 202*2cd0c529SMike Karels }; 203*2cd0c529SMike Karels 204*2cd0c529SMike Karels /* bits in txcsuminfo */ 205*2cd0c529SMike Karels #define TXCSUM_LEN_VALID __BIT(31) 206*2cd0c529SMike Karels #define TXCSUM_OFF_SHIFT 16 207*2cd0c529SMike Karels #define TXCSUM_UDP __BIT(15) 208*2cd0c529SMike Karels 209*2cd0c529SMike Karels #define GENET_RX_DMA_RING_CFG (GENET_RX_BASE + 0x1040 + 0x00) 210*2cd0c529SMike Karels #define GENET_RX_DMA_CTRL (GENET_RX_BASE + 0x1040 + 0x04) 211*2cd0c529SMike Karels #define GENET_RX_DMA_CTRL_RBUF_EN(qid) __BIT((qid) + 1) 212*2cd0c529SMike Karels #define GENET_RX_DMA_CTRL_EN __BIT(0) 213*2cd0c529SMike Karels #define GENET_RX_SCB_BURST_SIZE (GENET_RX_BASE + 0x1040 + 0x0c) 214*2cd0c529SMike Karels 215*2cd0c529SMike Karels #define GENET_TX_DMA_RING_CFG (GENET_TX_BASE + 0x1040 + 0x00) 216*2cd0c529SMike Karels #define GENET_TX_DMA_CTRL (GENET_TX_BASE + 0x1040 + 0x04) 217*2cd0c529SMike Karels #define GENET_TX_DMA_CTRL_RBUF_EN(qid) __BIT((qid) + 1) 218*2cd0c529SMike Karels #define GENET_TX_DMA_CTRL_EN __BIT(0) 219*2cd0c529SMike Karels #define GENET_TX_SCB_BURST_SIZE (GENET_TX_BASE + 0x1040 + 0x0c) 220*2cd0c529SMike Karels 221*2cd0c529SMike Karels #endif /* !_BCMGENETREG_H */ 222