/* SPDX-License-Identifier: GPL-2.0 */
/*
 * PKUnity Ultra Media Access Layer (UMAL) Ethernet MAC Registers
 */

/* MAC module of UMAL */
/* UMAL's MAC module includes G/MII interface, several additional PHY
 * interfaces, and MAC control sub-layer, which provides support for control
 * frames (e.g. PAUSE frames).
 */
/*
 * TX/RX reset and control UMAL_CFG1
 */
#define UMAL_CFG1		(PKUNITY_UMAL_BASE + 0x0000)
/*
 * MAC interface mode control UMAL_CFG2
 */
#define UMAL_CFG2		(PKUNITY_UMAL_BASE + 0x0004)
/*
 * Inter Packet/Frame Gap UMAL_IPGIFG
 */
#define UMAL_IPGIFG		(PKUNITY_UMAL_BASE + 0x0008)
/*
 * Collision retry or backoff UMAL_HALFDUPLEX
 */
#define UMAL_HALFDUPLEX		(PKUNITY_UMAL_BASE + 0x000c)
/*
 * Maximum Frame Length UMAL_MAXFRAME
 */
#define UMAL_MAXFRAME		(PKUNITY_UMAL_BASE + 0x0010)
/*
 * Test Regsiter UMAL_TESTREG
 */
#define UMAL_TESTREG		(PKUNITY_UMAL_BASE + 0x001c)
/*
 * MII Management Configure UMAL_MIICFG
 */
#define UMAL_MIICFG		(PKUNITY_UMAL_BASE + 0x0020)
/*
 * MII Management Command UMAL_MIICMD
 */
#define UMAL_MIICMD		(PKUNITY_UMAL_BASE + 0x0024)
/*
 * MII Management Address UMAL_MIIADDR
 */
#define UMAL_MIIADDR		(PKUNITY_UMAL_BASE + 0x0028)
/*
 * MII Management Control UMAL_MIICTRL
 */
#define UMAL_MIICTRL		(PKUNITY_UMAL_BASE + 0x002c)
/*
 * MII Management Status UMAL_MIISTATUS
 */
#define UMAL_MIISTATUS		(PKUNITY_UMAL_BASE + 0x0030)
/*
 * MII Management Indicator UMAL_MIIIDCT
 */
#define UMAL_MIIIDCT		(PKUNITY_UMAL_BASE + 0x0034)
/*
 * Interface Control UMAL_IFCTRL
 */
#define UMAL_IFCTRL		(PKUNITY_UMAL_BASE + 0x0038)
/*
 * Interface Status UMAL_IFSTATUS
 */
#define UMAL_IFSTATUS		(PKUNITY_UMAL_BASE + 0x003c)
/*
 * MAC address (high 4 bytes) UMAL_STADDR1
 */
#define UMAL_STADDR1		(PKUNITY_UMAL_BASE + 0x0040)
/*
 * MAC address (low 2 bytes) UMAL_STADDR2
 */
#define UMAL_STADDR2		(PKUNITY_UMAL_BASE + 0x0044)

/* FIFO MODULE OF UMAL */
/* UMAL's FIFO module provides data queuing for increased system level
 * throughput
 */
#define UMAL_FIFOCFG0		(PKUNITY_UMAL_BASE + 0x0048)
#define UMAL_FIFOCFG1		(PKUNITY_UMAL_BASE + 0x004c)
#define UMAL_FIFOCFG2		(PKUNITY_UMAL_BASE + 0x0050)
#define UMAL_FIFOCFG3		(PKUNITY_UMAL_BASE + 0x0054)
#define UMAL_FIFOCFG4		(PKUNITY_UMAL_BASE + 0x0058)
#define UMAL_FIFOCFG5		(PKUNITY_UMAL_BASE + 0x005c)
#define UMAL_FIFORAM0		(PKUNITY_UMAL_BASE + 0x0060)
#define UMAL_FIFORAM1		(PKUNITY_UMAL_BASE + 0x0064)
#define UMAL_FIFORAM2		(PKUNITY_UMAL_BASE + 0x0068)
#define UMAL_FIFORAM3		(PKUNITY_UMAL_BASE + 0x006c)
#define UMAL_FIFORAM4		(PKUNITY_UMAL_BASE + 0x0070)
#define UMAL_FIFORAM5		(PKUNITY_UMAL_BASE + 0x0074)
#define UMAL_FIFORAM6		(PKUNITY_UMAL_BASE + 0x0078)
#define UMAL_FIFORAM7		(PKUNITY_UMAL_BASE + 0x007c)

/* MAHBE MODULE OF UMAL */
/* UMAL's MAHBE module interfaces to the host system through 32-bit AHB Master
 * and Slave ports.Registers within the M-AHBE provide Control and Status
 * information concerning these transfers.
 */
/*
 * Transmit Control UMAL_DMATxCtrl
 */
#define UMAL_DMATxCtrl		(PKUNITY_UMAL_BASE + 0x0180)
/*
 * Pointer to TX Descripter UMAL_DMATxDescriptor
 */
#define UMAL_DMATxDescriptor	(PKUNITY_UMAL_BASE + 0x0184)
/*
 * Status of Tx Packet Transfers UMAL_DMATxStatus
 */
#define UMAL_DMATxStatus	(PKUNITY_UMAL_BASE + 0x0188)
/*
 * Receive Control UMAL_DMARxCtrl
 */
#define UMAL_DMARxCtrl		(PKUNITY_UMAL_BASE + 0x018c)
/*
 * Pointer to Rx Descriptor UMAL_DMARxDescriptor
 */
#define UMAL_DMARxDescriptor	(PKUNITY_UMAL_BASE + 0x0190)
/*
 * Status of Rx Packet Transfers UMAL_DMARxStatus
 */
#define UMAL_DMARxStatus	(PKUNITY_UMAL_BASE + 0x0194)
/*
 * Interrupt Mask UMAL_DMAIntrMask
 */
#define UMAL_DMAIntrMask	(PKUNITY_UMAL_BASE + 0x0198)
/*
 * Interrupts, read only UMAL_DMAInterrupt
 */
#define UMAL_DMAInterrupt	(PKUNITY_UMAL_BASE + 0x019c)

/*
 * Commands for UMAL_CFG1 register
 */
#define UMAL_CFG1_TXENABLE	FIELD(1, 1, 0)
#define UMAL_CFG1_RXENABLE	FIELD(1, 1, 2)
#define UMAL_CFG1_TXFLOWCTL	FIELD(1, 1, 4)
#define UMAL_CFG1_RXFLOWCTL	FIELD(1, 1, 5)
#define UMAL_CFG1_CONFLPBK	FIELD(1, 1, 8)
#define UMAL_CFG1_RESET		FIELD(1, 1, 31)
#define UMAL_CFG1_CONFFLCTL	(MAC_TX_FLOW_CTL | MAC_RX_FLOW_CTL)

/*
 * Commands for UMAL_CFG2 register
 */
#define UMAL_CFG2_FULLDUPLEX	FIELD(1, 1, 0)
#define UMAL_CFG2_CRCENABLE	FIELD(1, 1, 1)
#define UMAL_CFG2_PADCRC	FIELD(1, 1, 2)
#define UMAL_CFG2_LENGTHCHECK	FIELD(1, 1, 4)
#define UMAL_CFG2_MODEMASK	FMASK(2, 8)
#define UMAL_CFG2_NIBBLEMODE	FIELD(1, 2, 8)
#define UMAL_CFG2_BYTEMODE	FIELD(2, 2, 8)
#define UMAL_CFG2_PREAMBLENMASK	FMASK(4, 12)
#define UMAL_CFG2_DEFPREAMBLEN	FIELD(7, 4, 12)
#define UMAL_CFG2_FD100		(UMAL_CFG2_DEFPREAMBLEN | UMAL_CFG2_NIBBLEMODE \
				| UMAL_CFG2_LENGTHCHECK | UMAL_CFG2_PADCRC \
				| UMAL_CFG2_CRCENABLE | UMAL_CFG2_FULLDUPLEX)
#define UMAL_CFG2_FD1000	(UMAL_CFG2_DEFPREAMBLEN | UMAL_CFG2_BYTEMODE \
				| UMAL_CFG2_LENGTHCHECK | UMAL_CFG2_PADCRC \
				| UMAL_CFG2_CRCENABLE | UMAL_CFG2_FULLDUPLEX)
#define UMAL_CFG2_HD100		(UMAL_CFG2_DEFPREAMBLEN | UMAL_CFG2_NIBBLEMODE \
				| UMAL_CFG2_LENGTHCHECK | UMAL_CFG2_PADCRC \
				| UMAL_CFG2_CRCENABLE)

/*
 * Command for UMAL_IFCTRL register
 */
#define UMAL_IFCTRL_RESET	FIELD(1, 1, 31)

/*
 * Command for UMAL_MIICFG register
 */
#define UMAL_MIICFG_RESET	FIELD(1, 1, 31)

/*
 * Command for UMAL_MIICMD register
 */
#define UMAL_MIICMD_READ	FIELD(1, 1, 0)

/*
 * Command for UMAL_MIIIDCT register
 */
#define UMAL_MIIIDCT_BUSY	FIELD(1, 1, 0)
#define UMAL_MIIIDCT_NOTVALID	FIELD(1, 1, 2)

/*
 * Commands for DMATxCtrl regesters
 */
#define UMAL_DMA_Enable		FIELD(1, 1, 0)

/*
 * Commands for DMARxCtrl regesters
 */
#define UMAL_DMAIntrMask_ENABLEHALFWORD	FIELD(1, 1, 16)

/*
 * Command for DMARxStatus
 */
#define CLR_RX_BUS_ERR		FIELD(1, 1, 3)
#define CLR_RX_OVERFLOW		FIELD(1, 1, 2)
#define CLR_RX_PKT		FIELD(1, 1, 0)

/*
 * Command for DMATxStatus
 */
#define CLR_TX_BUS_ERR		FIELD(1, 1, 3)
#define CLR_TX_UNDERRUN		FIELD(1, 1, 1)
#define CLR_TX_PKT		FIELD(1, 1, 0)

/*
 * Commands for DMAIntrMask and DMAInterrupt register
 */
#define INT_RX_MASK		FIELD(0xd, 4, 4)
#define INT_TX_MASK		FIELD(0xb, 4, 0)

#define INT_RX_BUS_ERR		FIELD(1, 1, 7)
#define INT_RX_OVERFLOW		FIELD(1, 1, 6)
#define INT_RX_PKT		FIELD(1, 1, 4)
#define INT_TX_BUS_ERR		FIELD(1, 1, 3)
#define INT_TX_UNDERRUN		FIELD(1, 1, 1)
#define INT_TX_PKT		FIELD(1, 1, 0)

/*
 * MARCOS of UMAL's descriptors
 */
#define UMAL_DESC_PACKETSIZE_EMPTY	FIELD(1, 1, 31)
#define UMAL_DESC_PACKETSIZE_NONEMPTY	FIELD(0, 1, 31)
#define UMAL_DESC_PACKETSIZE_SIZEMASK	FMASK(12, 0)

