#ifndef __DWMAC1000_H__
#define __DWMAC1000_H__
#include <linux/phy.h>
#include "common.h"
#define GMAC_CONTROL 0x00000000
#define GMAC_FRAME_FILTER 0x00000004
#define GMAC_HASH_HIGH 0x00000008
#define GMAC_HASH_LOW 0x0000000c
#define GMAC_MII_ADDR 0x00000010
#define GMAC_MII_DATA 0x00000014
#define GMAC_FLOW_CTRL 0x00000018
#define GMAC_VLAN_TAG 0x0000001c
#define GMAC_DEBUG 0x00000024
#define GMAC_INT_STATUS 0x00000038
#define GMAC_INT_STATUS_MMCRIS BIT(5)
#define GMAC_INT_STATUS_MMCTIS BIT(6)
#define GMAC_INT_STATUS_MMCCSUM BIT(7)
#define GMAC_INT_STATUS_LPIIS BIT(10)
#define GMAC_INT_MASK 0x0000003c
#define GMAC_INT_DISABLE_RGMII BIT(0)
#define GMAC_INT_DISABLE_PCSLINK BIT(1)
#define GMAC_INT_DISABLE_PCSAN BIT(2)
#define GMAC_INT_DISABLE_PMT BIT(3)
#define GMAC_INT_DISABLE_TIMESTAMP BIT(9)
#define GMAC_INT_DEFAULT_MASK (GMAC_INT_DISABLE_RGMII | \
GMAC_INT_DISABLE_PCSLINK | \
GMAC_INT_DISABLE_PCSAN | \
GMAC_INT_DISABLE_TIMESTAMP)
#define GMAC_PMT 0x0000002c
enum power_event {
pointer_reset = 0x80000000,
global_unicast = 0x00000200,
wake_up_rx_frame = 0x00000040,
magic_frame = 0x00000020,
wake_up_frame_en = 0x00000004,
magic_pkt_en = 0x00000002,
power_down = 0x00000001,
};
#define LPI_CTRL_STATUS 0x0030
#define LPI_TIMER_CTRL 0x0034
#define GMAC_ADDR_HIGH(reg) ((reg > 15) ? 0x00000800 + (reg - 16) * 8 : \
0x00000040 + (reg * 8))
#define GMAC_ADDR_LOW(reg) ((reg > 15) ? 0x00000804 + (reg - 16) * 8 : \
0x00000044 + (reg * 8))
#define GMAC_MAX_PERFECT_ADDRESSES 1
#define GMAC_PCS_BASE 0x000000c0
#define GMAC_RGSMIIIS 0x000000d8
#define GMAC_RSGMIIIS_MASK GENMASK(15, 0)
#define GMAC_RGSMIIIS_SMIDRXS BIT(16)
#define GMAC_CONTROL_2K 0x08000000
#define GMAC_CONTROL_JD 0x00400000
#define GMAC_CONTROL_BE 0x00200000
#define GMAC_CONTROL_JE 0x00100000
enum inter_frame_gap {
GMAC_CONTROL_IFG_88 = 0x00040000,
GMAC_CONTROL_IFG_80 = 0x00020000,
GMAC_CONTROL_IFG_40 = 0x000e0000,
};
#define GMAC_CONTROL_DCRS 0x00010000
#define GMAC_CONTROL_PS 0x00008000
#define GMAC_CONTROL_FES 0x00004000
#define GMAC_CONTROL_LM 0x00001000
#define GMAC_CONTROL_DM 0x00000800
#define GMAC_CONTROL_IPC 0x00000400
#define GMAC_CORE_INIT (GMAC_CONTROL_JD | GMAC_CONTROL_PS | \
GMAC_CONTROL_BE | GMAC_CONTROL_DCRS)
#define GMAC_FRAME_FILTER_PR 0x00000001
#define GMAC_FRAME_FILTER_HMC 0x00000004
#define GMAC_FRAME_FILTER_PM 0x00000010
#define GMAC_FRAME_FILTER_PCF 0x00000080
#define GMAC_FRAME_FILTER_HPF 0x00000400
#define GMAC_FRAME_FILTER_RA 0x80000000
#define GMAC_FLOW_CTRL_PT_MASK GENMASK(31, 16)
#define GMAC_FLOW_CTRL_UP 0x00000008
#define GMAC_FLOW_CTRL_RFE 0x00000004
#define GMAC_FLOW_CTRL_TFE 0x00000002
#define GMAC_DEBUG_TXSTSFSTS BIT(25)
#define GMAC_DEBUG_TXFSTS BIT(24)
#define GMAC_DEBUG_TWCSTS BIT(22)
#define GMAC_DEBUG_TRCSTS_MASK GENMASK(21, 20)
#define GMAC_DEBUG_TRCSTS_READ 1
#define GMAC_DEBUG_TRCSTS_TXW 2
#define GMAC_DEBUG_TRCSTS_WRITE 3
#define GMAC_DEBUG_TXPAUSED BIT(19)
#define GMAC_DEBUG_TFCSTS_MASK GENMASK(18, 17)
#define GMAC_DEBUG_TFCSTS_WAIT 1
#define GMAC_DEBUG_TFCSTS_GEN_PAUSE 2
#define GMAC_DEBUG_TFCSTS_XFER 3
#define GMAC_DEBUG_TPESTS BIT(16)
#define GMAC_DEBUG_RXFSTS_MASK GENMASK(9, 8)
#define GMAC_DEBUG_RXFSTS_EMPTY 0
#define GMAC_DEBUG_RXFSTS_BT 1
#define GMAC_DEBUG_RXFSTS_AT 2
#define GMAC_DEBUG_RXFSTS_FULL 3
#define GMAC_DEBUG_RRCSTS_MASK GENMASK(6, 5)
#define GMAC_DEBUG_RRCSTS_IDLE 0
#define GMAC_DEBUG_RRCSTS_RDATA 1
#define GMAC_DEBUG_RRCSTS_RSTAT 2
#define GMAC_DEBUG_RRCSTS_FLUSH 3
#define GMAC_DEBUG_RWCSTS BIT(4)
#define GMAC_DEBUG_RFCFCSTS_MASK GENMASK(2, 1)
#define GMAC_DEBUG_RPESTS BIT(0)
#define DMA_BUS_MODE_PBL_MASK GENMASK(13, 8)
#define DMA_BUS_MODE_ATDS 0x00000080
enum rx_tx_priority_ratio {
double_ratio = 0x00004000,
triple_ratio = 0x00008000,
quadruple_ratio = 0x0000c000,
};
#define DMA_BUS_MODE_FB 0x00010000
#define DMA_BUS_MODE_MB 0x04000000
#define DMA_BUS_MODE_RPBL_MASK GENMASK(22, 17)
#define DMA_BUS_MODE_USP 0x00800000
#define DMA_BUS_MODE_MAXPBL 0x01000000
#define DMA_BUS_MODE_AAL 0x02000000
#define DMA_CONTROL_RSF 0x02000000
#define DMA_CONTROL_DFF 0x01000000
enum rfa {
act_full_minus_1 = 0x00800000,
act_full_minus_2 = 0x00800200,
act_full_minus_3 = 0x00800400,
act_full_minus_4 = 0x00800600,
};
enum rfd {
deac_full_minus_1 = 0x00400000,
deac_full_minus_2 = 0x00400800,
deac_full_minus_3 = 0x00401000,
deac_full_minus_4 = 0x00401800,
};
#define DMA_CONTROL_TSF 0x00200000
enum ttc_control {
DMA_CONTROL_TTC_64 = 0x00000000,
DMA_CONTROL_TTC_128 = 0x00004000,
DMA_CONTROL_TTC_192 = 0x00008000,
DMA_CONTROL_TTC_256 = 0x0000c000,
DMA_CONTROL_TTC_40 = 0x00010000,
DMA_CONTROL_TTC_32 = 0x00014000,
DMA_CONTROL_TTC_24 = 0x00018000,
DMA_CONTROL_TTC_16 = 0x0001c000,
};
#define DMA_CONTROL_TC_TX_MASK 0xfffe3fff
#define DMA_CONTROL_EFC 0x00000100
#define DMA_CONTROL_RFA_MASK 0x00800600
#define DMA_CONTROL_RFD_MASK 0x00401800
#define RFA_FULL_MINUS_1K 0x00000000
#define RFD_FULL_MINUS_2K 0x00000800
enum rtc_control {
DMA_CONTROL_RTC_64 = 0x00000000,
DMA_CONTROL_RTC_32 = 0x00000008,
DMA_CONTROL_RTC_96 = 0x00000010,
DMA_CONTROL_RTC_128 = 0x00000018,
};
#define DMA_CONTROL_TC_RX_MASK 0xffffffe7
#define DMA_CONTROL_OSF 0x00000004
#define GMAC_EXTHASH_BASE 0x500
#define GMAC3_X_ATSNS GENMASK(29, 25)
#define GMAC_PTP_TCR_ATSFC BIT(24)
#define GMAC_PTP_TCR_ATSEN0 BIT(25)
#define GMAC3_X_TIMESTAMP_STATUS 0x28
#define GMAC_PTP_ATNR 0x30
#define GMAC_PTP_ATSR 0x34
extern const struct stmmac_dma_ops dwmac1000_dma_ops;
#endif