| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701 |
- /*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: fxmac_hw.h
- * Date: 2022-04-06 14:46:52
- * LastEditTime: 2022-04-06 14:46:58
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
- #ifndef BSP_DRIVERS_ETH_FMAC_HW_H
- #define BSP_DRIVERS_ETH_FMAC_HW_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "fparameters.h"
- #include "fio.h"
- #include "ftypes.h"
- #include "fkernel.h"
- #define FXMAC_RX_BUF_SIZE 1536U /* Specify the receive buffer size in \
- bytes, 64, 128, ... 10240 */
- #define FXMAC_RX_BUF_SIZE_JUMBO 10240U
- #define FXMAC_RX_BUF_UNIT 64U /* Number of receive buffer bytes as a \
- unit, this is HW setup */
- #define FXMAC_MAX_RXBD 128U /* Size of RX buffer descriptor queues */
- #define FXMAC_MAX_TXBD 128U /* Size of TX buffer descriptor queues */
- #define FXMAC_MAX_HASH_BITS 64U /* Maximum value for hash bits. 2**6 */
- /************************** Constant Definitions *****************************/
- #define FXMAC_MAX_MAC_ADDR 4U /* Maxmum number of mac address \
- supported */
- #define FXMAC_MAX_TYPE_ID 4U /* Maxmum number of type id supported */
- #ifdef __aarch64__
- #define FXMAC_BD_ALIGNMENT 64U /* Minimum buffer descriptor alignment \
- on the local bus */
- #else
- #define FXMAC_BD_ALIGNMENT 4U /* Minimum buffer descriptor alignment \
- on the local bus */
- #endif
- #define FXMAC_RX_BUF_ALIGNMENT 4U /* Minimum buffer alignment when using \
- options that impose alignment \
- restrictions on the buffer data on \
- the local bus */
- #define FXMAC_NWCTRL_OFFSET 0x00000000U /* Network Control reg */
- #define FXMAC_NWCFG_OFFSET 0x00000004U /* Network Config reg */
- #define FXMAC_NWSR_OFFSET 0x00000008U /* Network Status reg */
- #define FXMAC_DMACR_OFFSET 0x00000010U /* DMA Control reg */
- #define FXMAC_TXSR_OFFSET 0x00000014U /* TX Status reg */
- #define FXMAC_RXQBASE_OFFSET 0x00000018U /* RX Q Base address reg */
- #define FXMAC_TXQBASE_OFFSET 0x0000001CU /* TX Q Base address reg */
- #define FXMAC_RXSR_OFFSET 0x00000020U /* RX Status reg */
- #define FXMAC_ISR_OFFSET 0x00000024U /* Interrupt Status reg */
- #define FXMAC_IER_OFFSET 0x00000028U /* Interrupt Enable reg */
- #define FXMAC_IDR_OFFSET 0x0000002CU /* Interrupt Disable reg */
- #define FXMAC_IMR_OFFSET 0x00000030U /* Interrupt Mask reg */
- #define FXMAC_PHYMNTNC_OFFSET 0x00000034U /* Phy Maintaince reg */
- #define FXMAC_RXPAUSE_OFFSET 0x00000038U /* RX Pause Time reg */
- #define FXMAC_TXPAUSE_OFFSET 0x0000003CU /* TX Pause Time reg */
- #define FXMAC_JUMBOMAXLEN_OFFSET 0x00000048U /* Jumbo max length reg */
- #define FXMAC_GEM_HSMAC 0x0050 /* Hs mac config register*/
- #define FXMAC_RXWATERMARK_OFFSET 0x0000007CU /* RX watermark reg */
- #define FXMAC_HASHL_OFFSET 0x00000080U /* Hash Low address reg */
- #define FXMAC_HASHH_OFFSET 0x00000084U /* Hash High address reg */
- #define FXMAC_GEM_SA1B 0x0088 /* Specific1 Bottom */
- #define FXMAC_GEM_SA1T 0x008C /* Specific1 Top */
- #define FXMAC_GEM_SA2B 0x0090 /* Specific2 Bottom */
- #define FXMAC_GEM_SA2T 0x0094 /* Specific2 Top */
- #define FXMAC_GEM_SA3B 0x0098 /* Specific3 Bottom */
- #define FXMAC_GEM_SA3T 0x009C /* Specific3 Top */
- #define FXMAC_GEM_SA4B 0x00A0 /* Specific4 Bottom */
- #define FXMAC_GEM_SA4T 0x00A4 /* Specific4 Top */
- #define FXMAC_MATCH1_OFFSET 0x000000A8U /* Type ID1 Match reg */
- #define FXMAC_MATCH2_OFFSET 0x000000ACU /* Type ID2 Match reg */
- #define FXMAC_MATCH3_OFFSET 0x000000B0U /* Type ID3 Match reg */
- #define FXMAC_MATCH4_OFFSET 0x000000B4U /* Type ID4 Match reg */
- #define FXMAC_STRETCH_OFFSET 0x000000BCU /* IPG Stretch reg */
- #define FXMAC_REVISION_REG_OFFSET 0x000000FCU /* identification number and module revision */
- #define FXMAC_OCTTXL_OFFSET 0x00000100U /* Octects transmitted Low \
- reg */
- #define FXMAC_OCTTXH_OFFSET 0x00000104U /* Octects transmitted High \
- reg */
- #define FXMAC_TXCNT_OFFSET 0x00000108U /* Error-free Frmaes \
- transmitted counter */
- #define FXMAC_TXBCCNT_OFFSET 0x0000010CU /* Error-free Broadcast \
- Frames counter*/
- #define FXMAC_TXMCCNT_OFFSET 0x00000110U /* Error-free Multicast \
- Frame counter */
- #define FXMAC_TXPAUSECNT_OFFSET 0x00000114U /* Pause Frames Transmitted \
- Counter */
- #define FXMAC_TX64CNT_OFFSET 0x00000118U /* Error-free 64 byte Frames \
- Transmitted counter */
- #define FXMAC_TX65CNT_OFFSET 0x0000011CU /* Error-free 65-127 byte \
- Frames Transmitted \
- counter */
- #define FXMAC_TX128CNT_OFFSET 0x00000120U /* Error-free 128-255 byte \
- Frames Transmitted \
- counter*/
- #define FXMAC_TX256CNT_OFFSET 0x00000124U /* Error-free 256-511 byte \
- Frames transmitted \
- counter */
- #define FXMAC_TX512CNT_OFFSET 0x00000128U /* Error-free 512-1023 byte \
- Frames transmitted \
- counter */
- #define FXMAC_TX1024CNT_OFFSET 0x0000012CU /* Error-free 1024-1518 byte \
- Frames transmitted \
- counter */
- #define FXMAC_TX1519CNT_OFFSET 0x00000130U /* Error-free larger than \
- 1519 byte Frames \
- transmitted counter */
- #define FXMAC_TXURUNCNT_OFFSET 0x00000134U /* TX under run error \
- counter */
- #define FXMAC_SNGLCOLLCNT_OFFSET 0x00000138U /* Single Collision Frame \
- Counter */
- #define FXMAC_MULTICOLLCNT_OFFSET 0x0000013CU /* Multiple Collision Frame \
- Counter */
- #define FXMAC_EXCESSCOLLCNT_OFFSET 0x00000140U /* Excessive Collision Frame \
- Counter */
- #define FXMAC_LATECOLLCNT_OFFSET 0x00000144U /* Late Collision Frame \
- Counter */
- #define FXMAC_TXDEFERCNT_OFFSET 0x00000148U /* Deferred Transmission \
- Frame Counter */
- #define FXMAC_TXCSENSECNT_OFFSET 0x0000014CU /* Transmit Carrier Sense \
- Error Counter */
- #define FXMAC_OCTRXL_OFFSET 0x00000150U /* Octects Received register \
- Low */
- #define FXMAC_OCTRXH_OFFSET 0x00000154U /* Octects Received register \
- High */
- #define FXMAC_RXCNT_OFFSET 0x00000158U /* Error-free Frames \
- Received Counter */
- #define FXMAC_RXBROADCNT_OFFSET 0x0000015CU /* Error-free Broadcast \
- Frames Received Counter */
- #define FXMAC_RXMULTICNT_OFFSET 0x00000160U /* Error-free Multicast \
- Frames Received Counter */
- #define FXMAC_RXPAUSECNT_OFFSET 0x00000164U /* Pause Frames \
- Received Counter */
- #define FXMAC_RX64CNT_OFFSET 0x00000168U /* Error-free 64 byte Frames \
- Received Counter */
- #define FXMAC_RX65CNT_OFFSET 0x0000016CU /* Error-free 65-127 byte \
- Frames Received Counter */
- #define FXMAC_RX128CNT_OFFSET 0x00000170U /* Error-free 128-255 byte \
- Frames Received Counter */
- #define FXMAC_RX256CNT_OFFSET 0x00000174U /* Error-free 256-512 byte \
- Frames Received Counter */
- #define FXMAC_RX512CNT_OFFSET 0x00000178U /* Error-free 512-1023 byte \
- Frames Received Counter */
- #define FXMAC_RX1024CNT_OFFSET 0x0000017CU /* Error-free 1024-1518 byte \
- Frames Received Counter */
- #define FXMAC_RX1519CNT_OFFSET 0x00000180U /* Error-free 1519-max byte \
- Frames Received Counter */
- #define FXMAC_RXUNDRCNT_OFFSET 0x00000184U /* Undersize Frames Received \
- Counter */
- #define FXMAC_RXOVRCNT_OFFSET 0x00000188U /* Oversize Frames Received \
- Counter */
- #define FXMAC_RXJABCNT_OFFSET 0x0000018CU /* Jabbers Received \
- Counter */
- #define FXMAC_RXFCSCNT_OFFSET 0x00000190U /* Frame Check Sequence \
- Error Counter */
- #define FXMAC_RXLENGTHCNT_OFFSET 0x00000194U /* Length Field Error \
- Counter */
- #define FXMAC_RXSYMBCNT_OFFSET 0x00000198U /* Symbol Error Counter */
- #define FXMAC_RXALIGNCNT_OFFSET 0x0000019CU /* Alignment Error Counter */
- #define FXMAC_RXRESERRCNT_OFFSET 0x000001A0U /* Receive Resource Error \
- Counter */
- #define FXMAC_RXORCNT_OFFSET 0x000001A4U /* Receive Overrun Counter */
- #define FXMAC_RXIPCCNT_OFFSET 0x000001A8U /* IP header Checksum Error \
- Counter */
- #define FXMAC_RXTCPCCNT_OFFSET 0x000001ACU /* TCP Checksum Error \
- Counter */
- #define FXMAC_RXUDPCCNT_OFFSET 0x000001B0U /* UDP Checksum Error \
- Counter */
- #define FXMAC_LAST_OFFSET 0x000001B4U /* Last statistic counter \
- offset, for clearing */
- #define FXMAC_1588_SEC_OFFSET 0x000001D0U /* 1588 second counter */
- #define FXMAC_1588_NANOSEC_OFFSET 0x000001D4U /* 1588 nanosecond counter */
- #define FXMAC_1588_ADJ_OFFSET 0x000001D8U /* 1588 nanosecond \
- adjustment counter */
- #define FXMAC_1588_INC_OFFSET 0x000001DCU /* 1588 nanosecond \
- increment counter */
- #define FXMAC_PTP_TXSEC_OFFSET 0x000001E0U /* 1588 PTP transmit second \
- counter */
- #define FXMAC_PTP_TXNANOSEC_OFFSET 0x000001E4U /* 1588 PTP transmit \
- nanosecond counter */
- #define FXMAC_PTP_RXSEC_OFFSET 0x000001E8U /* 1588 PTP receive second \
- counter */
- #define FXMAC_PTP_RXNANOSEC_OFFSET 0x000001ECU /* 1588 PTP receive \
- nanosecond counter */
- #define FXMAC_PTPP_TXSEC_OFFSET 0x000001F0U /* 1588 PTP peer transmit \
- second counter */
- #define FXMAC_PTPP_TXNANOSEC_OFFSET 0x000001F4U /* 1588 PTP peer transmit \
- nanosecond counter */
- #define FXMAC_PTPP_RXSEC_OFFSET 0x000001F8U /* 1588 PTP peer receive \
- second counter */
- #define FXMAC_PTPP_RXNANOSEC_OFFSET 0x000001FCU /* 1588 PTP peer receive \
- nanosecond counter */
- #define FXMAC_PCS_CONTROL_OFFSET 0x00000200U /* All PCS registers */
- #define FXMAC_PCS_STATUS_OFFSET 0x00000204U /* All PCS status */
- #define FXMAC_PCS_AN_LP_OFFSET 0x00000214U /* All PCS link partner's base page */
- #define FXMAC_DESIGNCFG_DEBUG1_OFFSET 0x00000280U /* Design Configuration Register 1 */
- #define FXMAC_DESIGNCFG_DEBUG2_OFFSET 0x00000284U /* Design Configuration Register 2 */
- #define FXMAC_INTQ1_STS_OFFSET 0x00000400U /* Interrupt Q1 Status reg */
- #define FXMAC_TXQ1BASE_OFFSET 0x00000440U /* TX Q1 Base address \
- reg */
- #define FXMAC_RXQ1BASE_OFFSET 0x00000480U /* RX Q1 Base address \
- reg */
- #define FXMAC_RXBUFQ1_SIZE_OFFSET 0x000004a0U /* Receive Buffer Size */
- #define FXMAC_RXBUFQX_SIZE_OFFSET(x) (FXMAC_RXBUFQ1_SIZE_OFFSET + (x << 2))
- #define FXMAC_RXBUFQX_SIZE_MASK GENMASK(7, 0)
- #define FXMAC_MSBBUF_TXQBASE_OFFSET 0x000004C8U /* MSB Buffer TX Q Base reg */
- #define FXMAC_MSBBUF_RXQBASE_OFFSET 0x000004D4U /* MSB Buffer RX Q Base \
- reg */
- #define FXMAC_INTQ1_IER_OFFSET 0x00000600U /* Interrupt Q1 Enable reg */
- #define FXMAC_INTQX_IER_SIZE_OFFSET(x) (FXMAC_INTQ1_IER_OFFSET + (x << 2))
- #define FXMAC_INTQ1_IDR_OFFSET 0x00000620U /* Interrupt Q1 Disable reg */
- #define FXMAC_INTQX_IDR_SIZE_OFFSET(x) (FXMAC_INTQ1_IDR_OFFSET + (x << 2))
- #define FXMAC_INTQ1_IMR_OFFSET 0x00000640U /* Interrupt Q1 Mask \
- reg */
- #define FXMAC_GEM_USX_CONTROL_OFFSET 0x0A80 /* High speed PCS control register */
- #define FXMAC_TEST_CONTROL_OFFSET 0X0A84 /* USXGMII Test Control Register */
- #define FXMAC_GEM_SRC_SEL_LN 0x1C04
- #define FXMAC_GEM_DIV_SEL0_LN 0x1C08
- #define FXMAC_GEM_DIV_SEL1_LN 0x1C0C
- #define FXMAC_GEM_PMA_XCVR_POWER_STATE 0x1C10
- #define FXMAC_GEM_SPEED_MODE 0x1C14
- #define FXMAC_GEM_MII_SELECT 0x1C18
- #define FXMAC_GEM_SEL_MII_ON_RGMII 0x1C1C
- #define FXMAC_GEM_TX_CLK_SEL0 0x1C20
- #define FXMAC_GEM_TX_CLK_SEL1 0x1C24
- #define FXMAC_GEM_TX_CLK_SEL2 0x1C28
- #define FXMAC_GEM_TX_CLK_SEL3 0x1C2C
- #define FXMAC_GEM_RX_CLK_SEL0 0x1C30
- #define FXMAC_GEM_RX_CLK_SEL1 0x1C34
- #define FXMAC_GEM_CLK_250M_DIV10_DIV100_SEL 0x1C38
- #define FXMAC_GEM_TX_CLK_SEL5 0x1C3C
- #define FXMAC_GEM_TX_CLK_SEL6 0x1C40
- #define FXMAC_GEM_RX_CLK_SEL4 0x1C44
- #define FXMAC_GEM_RX_CLK_SEL5 0x1C48
- #define FXMAC_GEM_TX_CLK_SEL3_0 0x1C70
- #define FXMAC_GEM_TX_CLK_SEL4_0 0x1C74
- #define FXMAC_GEM_RX_CLK_SEL3_0 0x1C78
- #define FXMAC_GEM_RX_CLK_SEL4_0 0x1C7C
- #define FXMAC_GEM_RGMII_TX_CLK_SEL0 0x1C80
- #define FXMAC_GEM_RGMII_TX_CLK_SEL1 0x1C84
- #define FXMAC_GEM_MODE_SEL_OFFSET 0xDC00
- #define FXMAC_LOOPBACK_SEL_OFFSET 0xDC04
- /**
- * @name interrupts bit definitions
- * Bits definitions are same in FXMAC_ISR_OFFSET,
- * FXMAC_IER_OFFSET, FXMAC_IDR_OFFSET, and FXMAC_IMR_OFFSET
- * @{
- */
- #define FXMAC_IXR_PTPPSTX_MASK BIT(25) /* PTP Pdelay_resp TXed */
- #define FXMAC_IXR_PTPPDRTX_MASK BIT(24) /* PTP Pdelay_req TXed */
- #define FXMAC_IXR_PTPPSRX_MASK BIT(23) /* PTP Pdelay_resp RXed */
- #define FXMAC_IXR_PTPPDRRX_MASK BIT(22) /* PTP Pdelay_req RXed */
- #define FXMAC_IXR_PTPSTX_MASK BIT(21) /* PTP Sync TXed */
- #define FXMAC_IXR_PTPDRTX_MASK BIT(20) /* PTP Delay_req TXed */
- #define FXMAC_IXR_PTPSRX_MASK BIT(19) /* PTP Sync RXed */
- #define FXMAC_IXR_PTPDRRX_MASK BIT(18) /* PTP Delay_req RXed */
- #define FXMAC_IXR_PAUSETX_MASK BIT(14) /* Pause frame transmitted */
- #define FXMAC_IXR_PAUSEZERO_MASK BIT(13) /* Pause time has reached zero */
- #define FXMAC_IXR_PAUSENZERO_MASK BIT(12) /* Pause frame received */
- #define FXMAC_IXR_HRESPNOK_MASK BIT(11) /* hresp not ok */
- #define FXMAC_IXR_RXOVR_MASK BIT(10) /* Receive overrun occurred */
- #define FXMAC_IXR_LINKCHANGE_MASK BIT(9) /* link status change */
- #define FXMAC_IXR_TXCOMPL_MASK BIT(7) /* Frame transmitted ok */
- #define FXMAC_IXR_TXEXH_MASK BIT(6) /* Transmit err occurred or \
- no buffers*/
- #define FXMAC_IXR_RETRY_MASK BIT(5) /* Retry limit exceeded */
- #define FXMAC_IXR_URUN_MASK BIT(4) /* Transmit underrun */
- #define FXMAC_IXR_TXUSED_MASK BIT(3) /* Tx buffer used bit read */
- #define FXMAC_IXR_RXUSED_MASK BIT(2) /* Rx buffer used bit read */
- #define FXMAC_IXR_RXCOMPL_MASK BIT(1) /* Frame received ok */
- #define FXMAC_IXR_MGMNT_MASK BIT(0) /* PHY management complete */
- #define FXMAC_IXR_ALL_MASK GENMASK(14, 0) /* Everything! */
- #define FXMAC_IXR_TX_ERR_MASK ((u32)FXMAC_IXR_TXEXH_MASK | \
- (u32)FXMAC_IXR_RETRY_MASK | \
- (u32)FXMAC_IXR_URUN_MASK)
- #define FXMAC_IXR_RX_ERR_MASK ((u32)FXMAC_IXR_HRESPNOK_MASK | \
- (u32)FXMAC_IXR_RXUSED_MASK | \
- (u32)FXMAC_IXR_RXOVR_MASK)
- /** @name network control register bit definitions
- * @{
- */
- #define FXMAC_NWCTRL_ENABLE_HS_MAC_MASK BIT(31)
- #define FXMAC_NWCTRL_TWO_PT_FIVE_GIG_MASK BIT(29) /* 2.5G operation selected */
- #define FXMAC_NWCTRL_FLUSH_DPRAM_MASK BIT(18) /* Flush a packet from \
- Rx SRAM */
- #define FXMAC_NWCTRL_ZEROPAUSETX_MASK BIT(11) /* Transmit zero quantum \
- pause frame */
- #define FXMAC_NWCTRL_PAUSETX_MASK BIT(11) /* Transmit pause frame */
- #define FXMAC_NWCTRL_HALTTX_MASK BIT(10) /* Halt transmission \
- after current frame */
- #define FXMAC_NWCTRL_STARTTX_MASK BIT(9) /* Start tx (tx_go) */
- #define FXMAC_NWCTRL_STATWEN_MASK BIT(7) /* Enable writing to \
- stat counters */
- #define FXMAC_NWCTRL_STATINC_MASK BIT(6) /* Increment statistic \
- registers */
- #define FXMAC_NWCTRL_STATCLR_MASK BIT(5) /* Clear statistic \
- registers */
- #define FXMAC_NWCTRL_MDEN_MASK BIT(4) /* Enable MDIO port */
- #define FXMAC_NWCTRL_TXEN_MASK BIT(3) /* Enable transmit */
- #define FXMAC_NWCTRL_RXEN_MASK BIT(2) /* Enable receive */
- #define FXMAC_NWCTRL_LOOPEN_MASK BIT(1) /* local loopback */
- /* External address match enable */
- #define FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK BIT(27) /* SGMII mode enable */
- #define FXMAC_NWCFG_BUS_WIDTH_32_MASK (0U << 21)
- #define FXMAC_NWCFG_BUS_WIDTH_64_MASK (1U << 21)
- #define FXMAC_NWCFG_BUS_WIDTH_128_MASK (2U << 21)
- #define FXMAC_NWCFG_CLOCK_DIV224_MASK (7U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV128_MASK (6U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV96_MASK (5U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV64_MASK (4U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV48_MASK (3U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV32_MASK (2U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV16_MASK (1U << 18)
- #define FXMAC_NWCFG_CLOCK_DIV8_MASK (0U << 18)
- #define FXMAC_NWCFG_FCS_REMOVE BIT(17) /* FCS remove - setting this bit will cause received frames to be written to memory without their frame check sequence (last 4 bytes). */
- #define FXMAC_NWCFG_PAUSE_ENABLE BIT(13) /* Pause enable - when set, transmission will pause if a non-zero 802.3 classic pause frame is received and PFC has not been negotiated. */
- #define FXMAC_NWCFG_PCSSEL_MASK BIT(11) /* PCS Select */
- #define FXMAC_NWCFG_1000_MASK BIT(10) /* Gigabit mode enable */
- #define FXMAC_NWCFG_1536RXEN_MASK BIT(8) /* Enable 1536 byte \
- frames reception */
- #define FXMAC_NWCFG_UCASTHASHEN_MASK BIT(7) /* Receive unicast hash \
- frames */
- #define FXMAC_NWCFG_MCASTHASHEN_MASK BIT(6) /* Receive multicast hash \
- frames */
- #define FXMAC_NWCFG_BCASTDI_MASK BIT(5) /* Do not receive \
- broadcast frames */
- #define FXMAC_NWCFG_COPYALLEN_MASK BIT(4) /* Copy all frames */
- #define FXMAC_NWCFG_JUMBO_MASK BIT(3) /* Jumbo frames */
- #define FXMAC_NWCFG_NVLANDISC_MASK BIT(2) /* Receive only VLAN \
- frames */
- #define FXMAC_NWCFG_FDEN_MASK BIT(1) /* full duplex */
- #define FXMAC_NWCFG_100_MASK BIT(0) /* 100 Mbps */
- #define FXMAC_NWCFG_RESET_MASK BIT(19) /* reset value */
- /* Receive buffer descriptor status words bit positions.
- * Receive buffer descriptor consists of two 32-bit registers,
- * the first - word0 contains a 32-bit word aligned address pointing to the
- * address of the buffer. The lower two bits make up the wrap bit indicating
- * the last descriptor and the ownership bit to indicate it has been used by
- * the xmac.
- * The following register - word1, contains status information regarding why
- * the frame was received (the filter match condition) as well as other
- * useful info.
- * @{
- */
- #define FXMAC_RXBUF_BCAST_MASK BIT(31) /* Broadcast frame */
- #define FXMAC_RXBUF_MULTIHASH_MASK BIT(30) /* Multicast hashed frame */
- #define FXMAC_RXBUF_UNIHASH_MASK BIT(29) /* Unicast hashed frame */
- #define FXMAC_RXBUF_EXH_MASK BIT(27) /* buffer exhausted */
- #define FXMAC_RXBUF_AMATCH_MASK GENMASK(26, 25) /* Specific address \
- matched */
- #define FXMAC_RXBUF_IDFOUND_MASK BIT(24) /* Type ID matched */
- #define FXMAC_RXBUF_IDMATCH_MASK GENMASK(23, 22) /* ID matched mask */
- #define FXMAC_RXBUF_VLAN_MASK BIT(21) /* VLAN tagged */
- #define FXMAC_RXBUF_PRI_MASK BIT(20) /* Priority tagged */
- #define FXMAC_RXBUF_VPRI_MASK GENMASK(19, 17) /* Vlan priority */
- #define FXMAC_RXBUF_CFI_MASK BIT(16) /* CFI frame */
- #define FXMAC_RXBUF_EOF_MASK BIT(15) /* End of frame. */
- #define FXMAC_RXBUF_SOF_MASK BIT(14) /* Start of frame. */
- #define FXMAC_RXBUF_FCS_STATUS_MASK BIT(13) /* Status of fcs. */
- #define FXMAC_RXBUF_LEN_MASK GENMASK(12, 0) /* Mask for length field */
- #define FXMAC_RXBUF_LEN_JUMBO_MASK GENMASK(13, 0) /* Mask for jumbo length */
- #define FXMAC_RXBUF_WRAP_MASK BIT(1) /* Wrap bit, last BD */
- #define FXMAC_RXBUF_NEW_MASK BIT(0) /* Used bit.. */
- #define FXMAC_RXBUF_ADD_MASK GENMASK(31, 2) /* Mask for address */
- /*
- * @}
- */
- /* Transmit buffer descriptor status words bit positions.
- * Transmit buffer descriptor consists of two 32-bit registers,
- * the first - word0 contains a 32-bit address pointing to the location of
- * the transmit data.
- * The following register - word1, consists of various information to control
- * the xmac transmit process. After transmit, this is updated with status
- * information, whether the frame was transmitted OK or why it had failed.
- * @{
- */
- #define FXMAC_TXBUF_USED_MASK BIT(31) /* Used bit. */
- #define FXMAC_TXBUF_WRAP_MASK BIT(30) /* Wrap bit, last descriptor */
- #define FXMAC_TXBUF_RETRY_MASK BIT(29) /* Retry limit exceeded */
- #define FXMAC_TXBUF_URUN_MASK BIT(28) /* Transmit underrun occurred */
- #define FXMAC_TXBUF_EXH_MASK BIT(27) /* Buffers exhausted */
- #define FXMAC_TXBUF_TCP_MASK BIT(26) /* Late collision. */
- #define FXMAC_TXBUF_NOCRC_MASK BIT(16) /* No CRC */
- #define FXMAC_TXBUF_LAST_MASK BIT(15) /* Last buffer */
- #define FXMAC_TXBUF_LEN_MASK GENMASK(13, 0) /* Mask for length field */
- /*
- * @}
- */
- /** @name network configuration register bit definitions
- * @{
- */
- #define FXMAC_NWCFG_BADPREAMBEN_MASK BIT(29) /* disable rejection of \
- non-standard preamble */
- #define FXMAC_NWCFG_IPDSTRETCH_MASK BIT(28) /* enable transmit IPG */
- #define FXMAC_NWCFG_SGMIIEN_MASK BIT(27) /* SGMII Enable */
- #define FXMAC_NWCFG_FCSIGNORE_MASK BIT(26) /* disable rejection of \
- FCS error */
- #define FXMAC_NWCFG_HDRXEN_MASK BIT(25) /* RX half duplex */
- #define FXMAC_NWCFG_RXCHKSUMEN_MASK BIT(24) /* enable RX checksum \
- offload */
- #define FXMAC_NWCFG_PAUSECOPYDI_MASK BIT(23) /* Do not copy pause \
- Frames to memory */
- #define FXMAC_NWCFG_DWIDTH_64_MASK BIT(21) /* 64 bit Data bus width */
- #define FXMAC_NWCFG_MDC_SHIFT_MASK 18U /* shift bits for MDC */
- #define FXMAC_NWCFG_MDCCLKDIV_MASK GENMASK(20, 18) /* MDC Mask PCLK divisor */
- #define FXMAC_NWCFG_FCSREM_MASK BIT(17) /* Discard FCS from \
- received frames */
- #define FXMAC_NWCFG_LENERRDSCRD_MASK BIT(16)
- /* RX length error discard */
- #define FXMAC_NWCFG_RXOFFS_MASK GENMASK(15) /* RX buffer offset */
- #define FXMAC_NWCFG_PAUSEEN_MASK BIT(13) /* Enable pause RX */
- #define FXMAC_NWCFG_RETRYTESTEN_MASK BIT(12) /* Retry test */
- #define FXMAC_NWCFG_XTADDMACHEN_MASK BIT(9)
- #define FXMAC_NWCFG_LOOPBACK_LOCAL_MASK BIT(1) /* Loopback local */
- /* External address match enable */
- /**
- * @name receive status register bit definitions
- * @{
- */
- #define FXMAC_RXSR_HRESPNOK_MASK BIT(3) /* Receive hresp not OK */
- #define FXMAC_RXSR_RXOVR_MASK BIT(2) /* Receive overrun */
- #define FXMAC_RXSR_FRAMERX_MASK BIT(1) /* Frame received OK */
- #define FXMAC_RXSR_BUFFNA_MASK BIT(0) /* RX buffer used bit set */
- #define FXMAC_RXSR_ERROR_MASK ((u32)FXMAC_RXSR_HRESPNOK_MASK | \
- (u32)FXMAC_RXSR_RXOVR_MASK | \
- (u32)FXMAC_RXSR_BUFFNA_MASK)
- #define FXMAC_SR_ALL_MASK GENMASK(31, 0) /* Mask for full register */
- /** @name DMA control register bit definitions
- * @{
- */
- #define FXMAC_DMACR_ADDR_WIDTH_64 BIT(30) /* 64 bit address bus */
- #define FXMAC_DMACR_TXEXTEND_MASK BIT(29) /* Tx Extended desc mode */
- #define FXMAC_DMACR_RXEXTEND_MASK BIT(28) /* Rx Extended desc mode */
- #define FXMAC_DMACR_ORCE_DISCARD_ON_ERR_MASK BIT(24) /* Auto Discard RX frames during lack of resource. */
- #define FXMAC_DMACR_RXBUF_MASK GENMASK(23, 16) /* Mask bit for RX buffer \
- size */
- #define FXMAC_DMACR_RXBUF_SHIFT 16U /* Shift bit for RX buffer \
- size */
- #define FXMAC_DMACR_TCPCKSUM_MASK BIT(11) /* enable/disable TX \
- checksum offload */
- #define FXMAC_DMACR_TXSIZE_MASK BIT(10) /* TX buffer memory size bit[10] */
- #define FXMAC_DMACR_RXSIZE_MASK GENMASK(9, 8) /* RX buffer memory size bit[9:8] */
- #define FXMAC_DMACR_ENDIAN_MASK BIT(7) /* endian configuration */
- #define FXMAC_DMACR_SWAP_MANAGEMENT_MASK BIT(6) /* When clear, selects little endian mode */
- #define FXMAC_DMACR_BLENGTH_MASK GENMASK(4, 0) /* buffer burst length */
- #define FXMAC_DMACR_SINGLE_AHB_AXI_BURST BIT(0) /* single AHB_AXI bursts */
- #define FXMAC_DMACR_INCR4_AHB_AXI_BURST BIT(2) /* 4 bytes AHB_AXI bursts */
- #define FXMAC_DMACR_INCR8_AHB_AXI_BURST BIT(3) /* 8 bytes AHB_AXI bursts */
- #define FXMAC_DMACR_INCR16_AHB_AXI_BURST BIT(4) /* 16 bytes AHB_AXI bursts */
- /* This register indicates module identification number and module revision. */
- #define FXMAC_REVISION_MODULE_MASK GENMASK(15, 0) /* Module revision */
- #define FXMAC_IDENTIFICATION_MASK GENMASK(27, 16) /* Module identification number */
- #define FXMAC_FIX_NUM_MASK GENMASK(31, 28) /* Fix number - incremented for fix releases */
- /** @name network status register bit definitaions
- * @{
- */
- #define FXMAC_NWSR_MDIOIDLE_MASK BIT(2) /* PHY management idle */
- #define FXMAC_NWSR_MDIO_MASK BIT(1) /* Status of mdio_in */
- #define FXMAC_NWSR_PCS_LINK_STATE_MASK BIT(0)
- /** @name PHY Maintenance bit definitions
- * @{
- */
- #define FXMAC_PHYMNTNC_OP_MASK (BIT(17) | BIT(30)) /* operation mask bits */
- #define FXMAC_PHYMNTNC_OP_R_MASK BIT(29) /* read operation */
- #define FXMAC_PHYMNTNC_OP_W_MASK BIT(28) /* write operation */
- #define FXMAC_PHYMNTNC_ADDR_MASK GENMASK(27, 23) /* Address bits */
- #define FXMAC_PHYMNTNC_REG_MASK GENMASK(22, 18) /* register bits */
- #define FXMAC_PHYMNTNC_DATA_MASK GENMASK(11, 0) /* data bits */
- #define FXMAC_PHYMNTNC_PHAD_SHFT_MSK 23U /* Shift bits for PHYAD */
- #define FXMAC_PHYMNTNC_PREG_SHFT_MSK 18U /* Shift bits for PHREG */
- /** @name transmit status register bit definitions
- * @{
- */
- #define FXMAC_TXSR_HRESPNOK_MASK BIT(8) /* Transmit hresp not OK */
- #define FXMAC_TXSR_URUN_MASK BIT(6) /* Transmit underrun */
- #define FXMAC_TXSR_TXCOMPL_MASK BIT(5) /* Transmit completed OK */
- #define FXMAC_TXSR_BUFEXH_MASK BIT(4) /* Transmit buffs exhausted \
- mid frame */
- #define FXMAC_TXSR_TXGO_MASK BIT(3) /* Status of go flag */
- #define FXMAC_TXSR_RXOVR_MASK BIT(2) /* Retry limit exceeded */
- #define FXMAC_TXSR_FRAMERX_MASK BIT(1) /* Collision tx frame */
- #define FXMAC_TXSR_USEDREAD_MASK BIT(0) /* TX buffer used bit set */
- #define FXMAC_TXSR_ERROR_MASK ((u32)FXMAC_TXSR_HRESPNOK_MASK | \
- (u32)FXMAC_TXSR_URUN_MASK | \
- (u32)FXMAC_TXSR_BUFEXH_MASK | \
- (u32)FXMAC_TXSR_RXOVR_MASK | \
- (u32)FXMAC_TXSR_FRAMERX_MASK | \
- (u32)FXMAC_TXSR_USEDREAD_MASK)
- /**
- * @name Interrupt Q1 status register bit definitions
- * @{
- */
- #define FXMAC_INTQ1SR_TXCOMPL_MASK BIT(7) /* Transmit completed OK */
- #define FXMAC_INTQ1SR_TXERR_MASK BIT(6) /* Transmit AMBA Error */
- #define FXMAC_INTQ1_IXR_ALL_MASK ((u32)FXMAC_INTQ1SR_TXCOMPL_MASK | \
- (u32)FXMAC_INTQ1SR_TXERR_MASK)
- /**
- * @name Interrupt QUEUE status register bit definitions
- * @{
- */
- #define FXMAC_INTQUESR_TXCOMPL_MASK BIT(7) /* Transmit completed OK */
- #define FXMAC_INTQUESR_TXERR_MASK BIT(6) /* Transmit AMBA Error */
- #define FXMAC_INTQUESR_RCOMP_MASK BIT(1)
- #define FXMAC_INTQUESR_RXUBR_MASK BIT(2)
- #define FXMAC_INTQUE_IXR_ALL_MASK ((u32)FXMAC_INTQUESR_TXCOMPL_MASK | \
- (u32)FXMAC_INTQUESR_TXERR_MASK)
- #define FXMAC_QUEUE_REGISTER_OFFSET(base_addr, queue_id) ((u32)base_addr + (queue_id - 1) * 4)
- /* Design Configuration Register 1 - The GEM has many parameterisation options to configure the IP during compilation stage. */
- #define FXMAC_DESIGNCFG_DEBUG1_BUS_WIDTH_MASK GENMASK(27, 25)
- /*GEM hs mac config register bitfields*/
- #define FXMAC_GEM_HSMACSPEED_OFFSET 0
- #define FXMAC_GEM_HSMACSPEED_SIZE 3
- #define FXMAC_GEM_HSMACSPEED_MASK 0x7
- /* Transmit buffer descriptor status words offset
- * @{
- */
- #define FXMAC_BD_ADDR_OFFSET 0x00000000U /* word 0/addr of BDs */
- #define FXMAC_BD_STAT_OFFSET 4 /* word 1/status of BDs, 4 bytes */
- #define FXMAC_BD_ADDR_HI_OFFSET BIT(3) /* word 2/addr of BDs */
- /** @name MAC address register word 1 mask
- * @{
- */
- #define FXMAC_GEM_SAB_MASK GENMASK(15, 0) /* Address bits[47:32] \
- bit[31:0] are in BOTTOM */
- /* USXGMII control register */
- #define FXMAC_GEM_USX_HS_MAC_SPEED_100M (0x0 << 14) /* 100M operation */
- #define FXMAC_GEM_USX_HS_MAC_SPEED_1G (0x1 << 14) /* 1G operation */
- #define FXMAC_GEM_USX_HS_MAC_SPEED_2_5G (0x2 << 14) /* 2.5G operation */
- #define FXMAC_GEM_USX_HS_MAC_SPEED_10G (0x4 << 14) /* 10G operation */
- #define FXMAC_GEM_USX_TX_SCR_BYPASS BIT(8) /* RX Scrambler Bypass. Set high to bypass the receive descrambler. */
- #define FXMAC_GEM_USX_RX_SCR_BYPASS BIT(9) /* TX Scrambler Bypass. Set high to bypass the transmit scrambler. */
- #define FXMAC_GEM_USX_RX_SYNC_RESET BIT(2) /* RX Reset. Set high to reset the receive datapath. When low the receive datapath is enabled. */
- #define FXMAC_GEM_USX_TX_DATAPATH_EN BIT(1) /* TX Datapath Enable. */
- #define FXMAC_GEM_USX_SIGNAL_OK BIT(0) /* Enable the USXGMII/BASE-R receive PCS. */
- /* All PCS registers */
- #define FXMAC_PCS_CONTROL_ENABLE_AUTO_NEG BIT(12) /* Enable auto-negotiation - when set active high, autonegotiation operation is enabled. */
- /* FXMAC_PCS_STATUS_OFFSET */
- #define FXMAC_PCS_STATUS_LINK_STATUS_OFFSET 2
- #define FXMAC_PCS_STATUS_LINK_STATUS BIT(FXMAC_PCS_STATUS_LINK_STATUS_OFFSET) /* Link status - indicates the status of the physical connection to the link partner. When set to logic 1 the link is up, and when set to logic 0, the link is down. */
- /* FXMAC_PCS_AN_LP_OFFSET */
- #define FXMAC_PCS_AN_LP_SPEED_OFFSET 10
- #define FXMAC_PCS_AN_LP_SPEED (0x3U << FXMAC_PCS_AN_LP_SPEED_OFFSET) /* SGMII 11 : Reserved 10 : 1000 Mbps 01 : 100Mbps 00 : 10 Mbps */
- #define FXMAC_PCS_AN_LP_DUPLEX_OFFSET 12
- #define FXMAC_PCS_AN_LP_DUPLEX (0x3U << FXMAC_PCS_AN_LP_DUPLEX_OFFSET) /* SGMII Bit 13: Reserved. read as 0. Bit 12 : 0 : half-duplex. 1: Full Duplex." */
- #define FXMAC_PCS_LINK_PARTNER_NEXT_PAGE_STATUS (1U<<15) /* In sgmii mode, 0 is link down . 1 is link up */
- /***************** Macros (Inline Functions) Definitions *********************/
- #define FXMAC_READREG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset)
- #define FXMAC_WRITEREG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value)
- #define FXMAC_SetBit32(addr, reg_offset, reg_value) FtSetBit32(addr + (u32)reg_offset, (u32)reg_value)
- #define FXMAC_ClearBit32(addr, reg_offset, reg_value) FtClearBit32(addr + (u32)reg_offset, (u32)reg_value)
- /****************************************************************************/
- /**
- *
- * Enable interrupts specified in <i>Mask</i>. The corresponding interrupt for
- * each bit set to 1 in <i>Mask</i>, will be enabled.
- *
- * @param instance_p is a pointer to the instance to be worked on.
- * @param Mask contains a bit mask of interrupts to enable. The mask can
- * be formed using a set of bitwise or'd values.
- *
- * @note
- * The state of the transmitter and receiver are not modified by this function.
- * C-style signature
- * void FXMAC_INT_ENABLE(FXmac *instance_p, u32 Mask)
- *
- *****************************************************************************/
- #define FXMAC_INT_ENABLE(instance_p, Mask) \
- FXMAC_WRITEREG32((instance_p)->config.base_address, \
- FXMAC_IER_OFFSET, \
- ((Mask)&FXMAC_IXR_ALL_MASK));
- /****************************************************************************/
- /**
- *
- * Enable interrupts specified in <i>Mask</i>. The corresponding interrupt for
- * each bit set to 1 in <i>Mask</i>, will be enabled.
- *
- * @param instance_p is a pointer to the instance to be worked on.
- * @param Mask contains a bit mask of interrupts to enable. The mask can
- * be formed using a set of bitwise or'd values.
- *
- * @note
- * The state of the transmitter and receiver are not modified by this function.
- * C-style signature
- * void FXMAC_INT_Q1ENABLE(FXmac *instance_p, u32 Mask)
- *
- *****************************************************************************/
- #define FXMAC_INT_Q1ENABLE(instance_p, Mask) \
- FXMAC_WRITEREG32((instance_p)->config.base_address, \
- FXMAC_INTQ1_IER_OFFSET, \
- ((Mask)&FXMAC_INTQ1_IXR_ALL_MASK));
- #ifdef __cplusplus
- }
- #endif
- #endif // !
|