Merge branch 'net-stmmac-cleanups-and-low-priority-fixes'
Russell King says: ==================== net: stmmac: cleanups and low priority fixes Further cleanups and a few low priority fixes: - Remove duplicated register definitions from header files - Fix harmless wrong definition used for PTP message type in descriptors - Fix norm_set_tx_desc_len_on_ring() off-by-one error (and make enh_set_tx_desc_len_on_ring() follow a similar pattern.) Document the buffer size limits. I believe we never call norm_set_tx_desc_len_on_ring() with 2KiB lengths. - use u32 rather than unsigned int for 32-bit quantities in descriptors - modernise: convert to use FIELD_PREP() rather than separate mask and shift definitions. - Reorganise register and register field definitions: registers defined in address offset order followed by their register field definitions. - Remove lots of unused register definitions. ==================== Link: https://patch.msgid.link/aV_q2Kneinrk3Z-W@shell.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>master
commit
d2f59bf975
|
|
@ -32,13 +32,11 @@
|
|||
#define RDES0_DESCRIPTOR_ERROR BIT(14)
|
||||
#define RDES0_ERROR_SUMMARY BIT(15)
|
||||
#define RDES0_FRAME_LEN_MASK GENMASK(29, 16)
|
||||
#define RDES0_FRAME_LEN_SHIFT 16
|
||||
#define RDES0_DA_FILTER_FAIL BIT(30)
|
||||
#define RDES0_OWN BIT(31)
|
||||
/* RDES1 */
|
||||
#define RDES1_BUFFER1_SIZE_MASK GENMASK(10, 0)
|
||||
#define RDES1_BUFFER2_SIZE_MASK GENMASK(21, 11)
|
||||
#define RDES1_BUFFER2_SIZE_SHIFT 11
|
||||
#define RDES1_SECOND_ADDRESS_CHAINED BIT(24)
|
||||
#define RDES1_END_RING BIT(25)
|
||||
#define RDES1_DISABLE_IC BIT(31)
|
||||
|
|
@ -53,7 +51,6 @@
|
|||
#define ERDES1_SECOND_ADDRESS_CHAINED BIT(14)
|
||||
#define ERDES1_END_RING BIT(15)
|
||||
#define ERDES1_BUFFER2_SIZE_MASK GENMASK(28, 16)
|
||||
#define ERDES1_BUFFER2_SIZE_SHIFT 16
|
||||
#define ERDES1_DISABLE_IC BIT(31)
|
||||
|
||||
/* Normal transmit descriptor defines */
|
||||
|
|
@ -77,14 +74,12 @@
|
|||
/* TDES1 */
|
||||
#define TDES1_BUFFER1_SIZE_MASK GENMASK(10, 0)
|
||||
#define TDES1_BUFFER2_SIZE_MASK GENMASK(21, 11)
|
||||
#define TDES1_BUFFER2_SIZE_SHIFT 11
|
||||
#define TDES1_TIME_STAMP_ENABLE BIT(22)
|
||||
#define TDES1_DISABLE_PADDING BIT(23)
|
||||
#define TDES1_SECOND_ADDRESS_CHAINED BIT(24)
|
||||
#define TDES1_END_RING BIT(25)
|
||||
#define TDES1_CRC_DISABLE BIT(26)
|
||||
#define TDES1_CHECKSUM_INSERTION_MASK GENMASK(28, 27)
|
||||
#define TDES1_CHECKSUM_INSERTION_SHIFT 27
|
||||
#define TDES1_FIRST_SEGMENT BIT(29)
|
||||
#define TDES1_LAST_SEGMENT BIT(30)
|
||||
#define TDES1_INTERRUPT BIT(31)
|
||||
|
|
@ -109,7 +104,6 @@
|
|||
#define ETDES0_SECOND_ADDRESS_CHAINED BIT(20)
|
||||
#define ETDES0_END_RING BIT(21)
|
||||
#define ETDES0_CHECKSUM_INSERTION_MASK GENMASK(23, 22)
|
||||
#define ETDES0_CHECKSUM_INSERTION_SHIFT 22
|
||||
#define ETDES0_TIME_STAMP_ENABLE BIT(25)
|
||||
#define ETDES0_DISABLE_PADDING BIT(26)
|
||||
#define ETDES0_CRC_DISABLE BIT(27)
|
||||
|
|
@ -120,7 +114,6 @@
|
|||
/* TDES1 */
|
||||
#define ETDES1_BUFFER1_SIZE_MASK GENMASK(12, 0)
|
||||
#define ETDES1_BUFFER2_SIZE_MASK GENMASK(28, 16)
|
||||
#define ETDES1_BUFFER2_SIZE_SHIFT 16
|
||||
|
||||
/* Extended Receive descriptor definitions */
|
||||
#define ERDES4_IP_PAYLOAD_TYPE_MASK GENMASK(6, 2)
|
||||
|
|
|
|||
|
|
@ -23,9 +23,8 @@ static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end,
|
|||
int bfsize)
|
||||
{
|
||||
if (bfsize == BUF_SIZE_16KiB)
|
||||
p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
|
||||
<< ERDES1_BUFFER2_SIZE_SHIFT)
|
||||
& ERDES1_BUFFER2_SIZE_MASK);
|
||||
p->des1 |= cpu_to_le32(FIELD_PREP(ERDES1_BUFFER2_SIZE_MASK,
|
||||
BUF_SIZE_8KiB));
|
||||
|
||||
if (end)
|
||||
p->des1 |= cpu_to_le32(ERDES1_END_RING);
|
||||
|
|
@ -39,15 +38,20 @@ static inline void enh_desc_end_tx_desc_on_ring(struct dma_desc *p, int end)
|
|||
p->des0 &= cpu_to_le32(~ETDES0_END_RING);
|
||||
}
|
||||
|
||||
/* The maximum buffer 1 size is 8KiB - 1. However, we limit to 4KiB. */
|
||||
static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
|
||||
{
|
||||
if (unlikely(len > BUF_SIZE_4KiB)) {
|
||||
p->des1 |= cpu_to_le32((((len - BUF_SIZE_4KiB)
|
||||
<< ETDES1_BUFFER2_SIZE_SHIFT)
|
||||
& ETDES1_BUFFER2_SIZE_MASK) | (BUF_SIZE_4KiB
|
||||
& ETDES1_BUFFER1_SIZE_MASK));
|
||||
} else
|
||||
p->des1 |= cpu_to_le32((len & ETDES1_BUFFER1_SIZE_MASK));
|
||||
unsigned int buffer1_max_length = BUF_SIZE_4KiB;
|
||||
|
||||
if (unlikely(len > buffer1_max_length)) {
|
||||
p->des1 |= cpu_to_le32(FIELD_PREP(ETDES1_BUFFER2_SIZE_MASK,
|
||||
len - buffer1_max_length) |
|
||||
FIELD_PREP(ETDES1_BUFFER1_SIZE_MASK,
|
||||
buffer1_max_length));
|
||||
} else {
|
||||
p->des1 |= cpu_to_le32(FIELD_PREP(ETDES1_BUFFER1_SIZE_MASK,
|
||||
len));
|
||||
}
|
||||
}
|
||||
|
||||
/* Normal descriptors */
|
||||
|
|
@ -57,8 +61,8 @@ static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end, int bfsize)
|
|||
int bfsize2;
|
||||
|
||||
bfsize2 = min(bfsize - BUF_SIZE_2KiB + 1, BUF_SIZE_2KiB - 1);
|
||||
p->des1 |= cpu_to_le32((bfsize2 << RDES1_BUFFER2_SIZE_SHIFT)
|
||||
& RDES1_BUFFER2_SIZE_MASK);
|
||||
p->des1 |= cpu_to_le32(FIELD_PREP(RDES1_BUFFER2_SIZE_MASK,
|
||||
bfsize2));
|
||||
}
|
||||
|
||||
if (end)
|
||||
|
|
@ -73,16 +77,20 @@ static inline void ndesc_end_tx_desc_on_ring(struct dma_desc *p, int end)
|
|||
p->des1 &= cpu_to_le32(~TDES1_END_RING);
|
||||
}
|
||||
|
||||
/* The maximum buffer 1 size is 2KiB - 1, limited by the mask width */
|
||||
static inline void norm_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
|
||||
{
|
||||
if (unlikely(len > BUF_SIZE_2KiB)) {
|
||||
unsigned int buffer1 = (BUF_SIZE_2KiB - 1)
|
||||
& TDES1_BUFFER1_SIZE_MASK;
|
||||
p->des1 |= cpu_to_le32((((len - buffer1)
|
||||
<< TDES1_BUFFER2_SIZE_SHIFT)
|
||||
& TDES1_BUFFER2_SIZE_MASK) | buffer1);
|
||||
} else
|
||||
p->des1 |= cpu_to_le32((len & TDES1_BUFFER1_SIZE_MASK));
|
||||
unsigned int buffer1_max_length = BUF_SIZE_2KiB - 1;
|
||||
|
||||
if (unlikely(len > buffer1_max_length)) {
|
||||
p->des1 |= cpu_to_le32(FIELD_PREP(TDES1_BUFFER2_SIZE_MASK,
|
||||
len - buffer1_max_length) |
|
||||
FIELD_PREP(TDES1_BUFFER1_SIZE_MASK,
|
||||
buffer1_max_length));
|
||||
} else {
|
||||
p->des1 |= cpu_to_le32(FIELD_PREP(TDES1_BUFFER1_SIZE_MASK,
|
||||
len));
|
||||
}
|
||||
}
|
||||
|
||||
/* Specific functions used for Chain mode */
|
||||
|
|
|
|||
|
|
@ -192,9 +192,8 @@ static void loongson_dwmac_dma_init_channel(struct stmmac_priv *priv,
|
|||
value |= DMA_BUS_MODE_MAXPBL;
|
||||
|
||||
value |= DMA_BUS_MODE_USP;
|
||||
value &= ~(DMA_BUS_MODE_PBL_MASK | DMA_BUS_MODE_RPBL_MASK);
|
||||
value |= (txpbl << DMA_BUS_MODE_PBL_SHIFT);
|
||||
value |= (rxpbl << DMA_BUS_MODE_RPBL_SHIFT);
|
||||
value = u32_replace_bits(value, txpbl, DMA_BUS_MODE_PBL_MASK);
|
||||
value = u32_replace_bits(value, rxpbl, DMA_BUS_MODE_RPBL_MASK);
|
||||
|
||||
/* Set the Fixed burst mode */
|
||||
if (dma_cfg->fixed_burst)
|
||||
|
|
|
|||
|
|
@ -367,9 +367,8 @@ static int smtg_crosststamp(ktime_t *device, struct system_counterval_t *system,
|
|||
.use_nsecs = false,
|
||||
};
|
||||
|
||||
num_snapshot = (readl(ioaddr + XGMAC_TIMESTAMP_STATUS) &
|
||||
XGMAC_TIMESTAMP_ATSNS_MASK) >>
|
||||
XGMAC_TIMESTAMP_ATSNS_SHIFT;
|
||||
num_snapshot = FIELD_GET(XGMAC_TIMESTAMP_ATSNS_MASK,
|
||||
readl(ioaddr + XGMAC_TIMESTAMP_STATUS));
|
||||
|
||||
/* Repeat until the timestamps are from the FIFO last segment */
|
||||
for (i = 0; i < num_snapshot; i++) {
|
||||
|
|
|
|||
|
|
@ -30,62 +30,30 @@
|
|||
#define MAC_VLAN2 0x00000024 /* VLAN2 Tag */
|
||||
|
||||
/* MAC CTRL defines */
|
||||
#define MAC_CONTROL_RA 0x80000000 /* Receive All Mode */
|
||||
#define MAC_CONTROL_BLE 0x40000000 /* Endian Mode */
|
||||
#define MAC_CONTROL_HBD 0x10000000 /* Heartbeat Disable */
|
||||
#define MAC_CONTROL_PS 0x08000000 /* Port Select */
|
||||
#define MAC_CONTROL_DRO 0x00800000 /* Disable Receive Own */
|
||||
#define MAC_CONTROL_EXT_LOOPBACK 0x00400000 /* Reserved (ext loopback?) */
|
||||
#define MAC_CONTROL_OM 0x00200000 /* Loopback Operating Mode */
|
||||
#define MAC_CONTROL_F 0x00100000 /* Full Duplex Mode */
|
||||
#define MAC_CONTROL_PM 0x00080000 /* Pass All Multicast */
|
||||
#define MAC_CONTROL_PR 0x00040000 /* Promiscuous Mode */
|
||||
#define MAC_CONTROL_IF 0x00020000 /* Inverse Filtering */
|
||||
#define MAC_CONTROL_PB 0x00010000 /* Pass Bad Frames */
|
||||
#define MAC_CONTROL_HO 0x00008000 /* Hash Only Filtering Mode */
|
||||
#define MAC_CONTROL_HP 0x00002000 /* Hash/Perfect Filtering Mode */
|
||||
#define MAC_CONTROL_LCC 0x00001000 /* Late Collision Control */
|
||||
#define MAC_CONTROL_DBF 0x00000800 /* Disable Broadcast Frames */
|
||||
#define MAC_CONTROL_DRTY 0x00000400 /* Disable Retry */
|
||||
#define MAC_CONTROL_ASTP 0x00000100 /* Automatic Pad Stripping */
|
||||
#define MAC_CONTROL_BOLMT_10 0x00000000 /* Back Off Limit 10 */
|
||||
#define MAC_CONTROL_BOLMT_8 0x00000040 /* Back Off Limit 8 */
|
||||
#define MAC_CONTROL_BOLMT_4 0x00000080 /* Back Off Limit 4 */
|
||||
#define MAC_CONTROL_BOLMT_1 0x000000c0 /* Back Off Limit 1 */
|
||||
#define MAC_CONTROL_DC 0x00000020 /* Deferral Check */
|
||||
#define MAC_CONTROL_TE 0x00000008 /* Transmitter Enable */
|
||||
#define MAC_CONTROL_RE 0x00000004 /* Receiver Enable */
|
||||
|
||||
#define MAC_CORE_INIT (MAC_CONTROL_HBD)
|
||||
|
||||
/* MAC FLOW CTRL defines */
|
||||
#define MAC_FLOW_CTRL_PT_MASK 0xffff0000 /* Pause Time Mask */
|
||||
#define MAC_FLOW_CTRL_PT_SHIFT 16
|
||||
#define MAC_FLOW_CTRL_PASS 0x00000004 /* Pass Control Frames */
|
||||
#define MAC_FLOW_CTRL_PT_MASK GENMASK(31, 16) /* Pause Time Mask */
|
||||
#define MAC_FLOW_CTRL_ENABLE 0x00000002 /* Flow Control Enable */
|
||||
#define MAC_FLOW_CTRL_PAUSE 0x00000001 /* Flow Control Busy ... */
|
||||
|
||||
/* MII ADDR defines */
|
||||
#define MAC_MII_ADDR_WRITE 0x00000002 /* MII Write */
|
||||
#define MAC_MII_ADDR_BUSY 0x00000001 /* MII Busy */
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* DMA BLOCK defines
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
/* DMA Bus Mode register defines */
|
||||
#define DMA_BUS_MODE_DBO 0x00100000 /* Descriptor Byte Ordering */
|
||||
#define DMA_BUS_MODE_BLE 0x00000080 /* Big Endian/Little Endian */
|
||||
#define DMA_BUS_MODE_PBL_MASK 0x00003f00 /* Programmable Burst Len */
|
||||
#define DMA_BUS_MODE_PBL_SHIFT 8
|
||||
#define DMA_BUS_MODE_DSL_MASK 0x0000007c /* Descriptor Skip Length */
|
||||
#define DMA_BUS_MODE_DSL_SHIFT 2 /* (in DWORDS) */
|
||||
#define DMA_BUS_MODE_BAR_BUS 0x00000002 /* Bar-Bus Arbitration */
|
||||
#define DMA_BUS_MODE_PBL_MASK GENMASK(13, 8) /* Programmable Burst Len */
|
||||
#define DMA_BUS_MODE_DEFAULT 0x00000000
|
||||
|
||||
/* DMA Control register defines */
|
||||
#define DMA_CONTROL_SF 0x00200000 /* Store And Forward */
|
||||
|
||||
/* Transmit Threshold Control */
|
||||
enum ttc_control {
|
||||
DMA_CONTROL_TTC_DEFAULT = 0x00000000, /* Threshold is 32 DWORDS */
|
||||
|
|
|
|||
|
|
@ -20,15 +20,11 @@
|
|||
#define GMAC_FLOW_CTRL 0x00000018 /* Flow Control */
|
||||
#define GMAC_VLAN_TAG 0x0000001c /* VLAN Tag */
|
||||
#define GMAC_DEBUG 0x00000024 /* GMAC debug register */
|
||||
#define GMAC_WAKEUP_FILTER 0x00000028 /* Wake-up Frame Filter */
|
||||
|
||||
#define GMAC_INT_STATUS 0x00000038 /* interrupt status register */
|
||||
#define GMAC_INT_STATUS_PMT BIT(3)
|
||||
#define GMAC_INT_STATUS_MMCIS BIT(4)
|
||||
#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_TSTAMP BIT(9)
|
||||
#define GMAC_INT_STATUS_LPIIS BIT(10)
|
||||
|
||||
/* interrupt mask register */
|
||||
|
|
@ -76,7 +72,6 @@ enum power_event {
|
|||
/* SGMII/RGMII status register */
|
||||
#define GMAC_RGSMIIIS_LNKMODE BIT(0)
|
||||
#define GMAC_RGSMIIIS_SPEED GENMASK(2, 1)
|
||||
#define GMAC_RGSMIIIS_SPEED_SHIFT 1
|
||||
#define GMAC_RGSMIIIS_LNKSTS BIT(3)
|
||||
#define GMAC_RGSMIIIS_JABTO BIT(4)
|
||||
#define GMAC_RGSMIIIS_FALSECARDET BIT(5)
|
||||
|
|
@ -90,8 +85,6 @@ enum power_event {
|
|||
|
||||
/* GMAC Configuration defines */
|
||||
#define GMAC_CONTROL_2K 0x08000000 /* IEEE 802.3as 2K packets */
|
||||
#define GMAC_CONTROL_TC 0x01000000 /* Transmit Conf. in RGMII/SGMII */
|
||||
#define GMAC_CONTROL_WD 0x00800000 /* Disable Watchdog on receive */
|
||||
#define GMAC_CONTROL_JD 0x00400000 /* Jabber disable */
|
||||
#define GMAC_CONTROL_BE 0x00200000 /* Frame Burst Enable */
|
||||
#define GMAC_CONTROL_JE 0x00100000 /* Jumbo frame */
|
||||
|
|
@ -103,42 +96,25 @@ enum inter_frame_gap {
|
|||
#define GMAC_CONTROL_DCRS 0x00010000 /* Disable carrier sense */
|
||||
#define GMAC_CONTROL_PS 0x00008000 /* Port Select 0:GMI 1:MII */
|
||||
#define GMAC_CONTROL_FES 0x00004000 /* Speed 0:10 1:100 */
|
||||
#define GMAC_CONTROL_DO 0x00002000 /* Disable Rx Own */
|
||||
#define GMAC_CONTROL_LM 0x00001000 /* Loop-back mode */
|
||||
#define GMAC_CONTROL_DM 0x00000800 /* Duplex Mode */
|
||||
#define GMAC_CONTROL_IPC 0x00000400 /* Checksum Offload */
|
||||
#define GMAC_CONTROL_DR 0x00000200 /* Disable Retry */
|
||||
#define GMAC_CONTROL_LUD 0x00000100 /* Link up/down */
|
||||
#define GMAC_CONTROL_ACS 0x00000080 /* Auto Pad/FCS Stripping */
|
||||
#define GMAC_CONTROL_DC 0x00000010 /* Deferral Check */
|
||||
#define GMAC_CONTROL_TE 0x00000008 /* Transmitter Enable */
|
||||
#define GMAC_CONTROL_RE 0x00000004 /* Receiver Enable */
|
||||
|
||||
#define GMAC_CORE_INIT (GMAC_CONTROL_JD | GMAC_CONTROL_PS | \
|
||||
GMAC_CONTROL_BE | GMAC_CONTROL_DCRS)
|
||||
|
||||
/* GMAC Frame Filter defines */
|
||||
#define GMAC_FRAME_FILTER_PR 0x00000001 /* Promiscuous Mode */
|
||||
#define GMAC_FRAME_FILTER_HUC 0x00000002 /* Hash Unicast */
|
||||
#define GMAC_FRAME_FILTER_HMC 0x00000004 /* Hash Multicast */
|
||||
#define GMAC_FRAME_FILTER_DAIF 0x00000008 /* DA Inverse Filtering */
|
||||
#define GMAC_FRAME_FILTER_PM 0x00000010 /* Pass all multicast */
|
||||
#define GMAC_FRAME_FILTER_DBF 0x00000020 /* Disable Broadcast frames */
|
||||
#define GMAC_FRAME_FILTER_PCF 0x00000080 /* Pass Control frames */
|
||||
#define GMAC_FRAME_FILTER_SAIF 0x00000100 /* Inverse Filtering */
|
||||
#define GMAC_FRAME_FILTER_SAF 0x00000200 /* Source Address Filter */
|
||||
#define GMAC_FRAME_FILTER_HPF 0x00000400 /* Hash or perfect Filter */
|
||||
#define GMAC_FRAME_FILTER_RA 0x80000000 /* Receive all mode */
|
||||
/* GMII ADDR defines */
|
||||
#define GMAC_MII_ADDR_WRITE 0x00000002 /* MII Write */
|
||||
#define GMAC_MII_ADDR_BUSY 0x00000001 /* MII Busy */
|
||||
/* GMAC FLOW CTRL defines */
|
||||
#define GMAC_FLOW_CTRL_PT_MASK 0xffff0000 /* Pause Time Mask */
|
||||
#define GMAC_FLOW_CTRL_PT_SHIFT 16
|
||||
#define GMAC_FLOW_CTRL_PT_MASK GENMASK(31, 16) /* Pause Time Mask */
|
||||
#define GMAC_FLOW_CTRL_UP 0x00000008 /* Unicast pause frame enable */
|
||||
#define GMAC_FLOW_CTRL_RFE 0x00000004 /* Rx Flow Control Enable */
|
||||
#define GMAC_FLOW_CTRL_TFE 0x00000002 /* Tx Flow Control Enable */
|
||||
#define GMAC_FLOW_CTRL_FCB_BPA 0x00000001 /* Flow Control Busy ... */
|
||||
|
||||
/* DEBUG Register defines */
|
||||
/* MTL TxStatus FIFO */
|
||||
|
|
@ -147,29 +123,23 @@ enum inter_frame_gap {
|
|||
#define GMAC_DEBUG_TWCSTS BIT(22) /* MTL Tx FIFO Write Controller */
|
||||
/* MTL Tx FIFO Read Controller Status */
|
||||
#define GMAC_DEBUG_TRCSTS_MASK GENMASK(21, 20)
|
||||
#define GMAC_DEBUG_TRCSTS_SHIFT 20
|
||||
#define GMAC_DEBUG_TRCSTS_IDLE 0
|
||||
#define GMAC_DEBUG_TRCSTS_READ 1
|
||||
#define GMAC_DEBUG_TRCSTS_TXW 2
|
||||
#define GMAC_DEBUG_TRCSTS_WRITE 3
|
||||
#define GMAC_DEBUG_TXPAUSED BIT(19) /* MAC Transmitter in PAUSE */
|
||||
/* MAC Transmit Frame Controller Status */
|
||||
#define GMAC_DEBUG_TFCSTS_MASK GENMASK(18, 17)
|
||||
#define GMAC_DEBUG_TFCSTS_SHIFT 17
|
||||
#define GMAC_DEBUG_TFCSTS_IDLE 0
|
||||
#define GMAC_DEBUG_TFCSTS_WAIT 1
|
||||
#define GMAC_DEBUG_TFCSTS_GEN_PAUSE 2
|
||||
#define GMAC_DEBUG_TFCSTS_XFER 3
|
||||
/* MAC GMII or MII Transmit Protocol Engine Status */
|
||||
#define GMAC_DEBUG_TPESTS BIT(16)
|
||||
#define GMAC_DEBUG_RXFSTS_MASK GENMASK(9, 8) /* MTL Rx FIFO Fill-level */
|
||||
#define GMAC_DEBUG_RXFSTS_SHIFT 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) /* MTL Rx FIFO Read Controller */
|
||||
#define GMAC_DEBUG_RRCSTS_SHIFT 5
|
||||
#define GMAC_DEBUG_RRCSTS_IDLE 0
|
||||
#define GMAC_DEBUG_RRCSTS_RDATA 1
|
||||
#define GMAC_DEBUG_RRCSTS_RSTAT 2
|
||||
|
|
@ -177,18 +147,13 @@ enum inter_frame_gap {
|
|||
#define GMAC_DEBUG_RWCSTS BIT(4) /* MTL Rx FIFO Write Controller Active */
|
||||
/* MAC Receive Frame Controller FIFO Status */
|
||||
#define GMAC_DEBUG_RFCFCSTS_MASK GENMASK(2, 1)
|
||||
#define GMAC_DEBUG_RFCFCSTS_SHIFT 1
|
||||
/* MAC GMII or MII Receive Protocol Engine Status */
|
||||
#define GMAC_DEBUG_RPESTS BIT(0)
|
||||
|
||||
/*--- DMA BLOCK defines ---*/
|
||||
/* DMA Bus Mode register defines */
|
||||
#define DMA_BUS_MODE_DA 0x00000002 /* Arbitration scheme */
|
||||
#define DMA_BUS_MODE_DSL_MASK 0x0000007c /* Descriptor Skip Length */
|
||||
#define DMA_BUS_MODE_DSL_SHIFT 2 /* (in DWORDS) */
|
||||
/* Programmable burst length (passed thorugh platform)*/
|
||||
#define DMA_BUS_MODE_PBL_MASK 0x00003f00 /* Programmable Burst Len */
|
||||
#define DMA_BUS_MODE_PBL_SHIFT 8
|
||||
#define DMA_BUS_MODE_PBL_MASK GENMASK(13, 8) /* Programmable Burst Len */
|
||||
#define DMA_BUS_MODE_ATDS 0x00000080 /* Alternate Descriptor Size */
|
||||
|
||||
enum rx_tx_priority_ratio {
|
||||
|
|
@ -199,23 +164,15 @@ enum rx_tx_priority_ratio {
|
|||
|
||||
#define DMA_BUS_MODE_FB 0x00010000 /* Fixed burst */
|
||||
#define DMA_BUS_MODE_MB 0x04000000 /* Mixed burst */
|
||||
#define DMA_BUS_MODE_RPBL_MASK 0x007e0000 /* Rx-Programmable Burst Len */
|
||||
#define DMA_BUS_MODE_RPBL_SHIFT 17
|
||||
#define DMA_BUS_MODE_RPBL_MASK GENMASK(22, 17) /* Rx-Programmable Burst Len */
|
||||
#define DMA_BUS_MODE_USP 0x00800000
|
||||
#define DMA_BUS_MODE_MAXPBL 0x01000000
|
||||
#define DMA_BUS_MODE_AAL 0x02000000
|
||||
|
||||
/* DMA CRS Control and Status Register Mapping */
|
||||
#define DMA_HOST_TX_DESC 0x00001048 /* Current Host Tx descriptor */
|
||||
#define DMA_HOST_RX_DESC 0x0000104c /* Current Host Rx descriptor */
|
||||
/* DMA Bus Mode register defines */
|
||||
#define DMA_BUS_PR_RATIO_MASK 0x0000c000 /* Rx/Tx priority ratio */
|
||||
#define DMA_BUS_PR_RATIO_SHIFT 14
|
||||
#define DMA_BUS_FB 0x00010000 /* Fixed Burst */
|
||||
|
||||
/* DMA operation mode defines (start/stop tx/rx are placed in common header)*/
|
||||
/* Disable Drop TCP/IP csum error */
|
||||
#define DMA_CONTROL_DT 0x04000000
|
||||
#define DMA_CONTROL_RSF 0x02000000 /* Receive Store and Forward */
|
||||
#define DMA_CONTROL_DFF 0x01000000 /* Disaable flushing */
|
||||
/* Threshold for Activating the FC */
|
||||
|
|
@ -247,8 +204,6 @@ enum ttc_control {
|
|||
#define DMA_CONTROL_TC_TX_MASK 0xfffe3fff
|
||||
|
||||
#define DMA_CONTROL_EFC 0x00000100
|
||||
#define DMA_CONTROL_FEF 0x00000080
|
||||
#define DMA_CONTROL_FUF 0x00000040
|
||||
|
||||
/* Receive flow control activation field
|
||||
* RFA field in DMA control register, bits 23,10:9
|
||||
|
|
@ -285,20 +240,8 @@ enum ttc_control {
|
|||
*/
|
||||
|
||||
#define RFA_FULL_MINUS_1K 0x00000000
|
||||
#define RFA_FULL_MINUS_2K 0x00000200
|
||||
#define RFA_FULL_MINUS_3K 0x00000400
|
||||
#define RFA_FULL_MINUS_4K 0x00000600
|
||||
#define RFA_FULL_MINUS_5K 0x00800000
|
||||
#define RFA_FULL_MINUS_6K 0x00800200
|
||||
#define RFA_FULL_MINUS_7K 0x00800400
|
||||
|
||||
#define RFD_FULL_MINUS_1K 0x00000000
|
||||
#define RFD_FULL_MINUS_2K 0x00000800
|
||||
#define RFD_FULL_MINUS_3K 0x00001000
|
||||
#define RFD_FULL_MINUS_4K 0x00001800
|
||||
#define RFD_FULL_MINUS_5K 0x00400000
|
||||
#define RFD_FULL_MINUS_6K 0x00400800
|
||||
#define RFD_FULL_MINUS_7K 0x00401000
|
||||
|
||||
enum rtc_control {
|
||||
DMA_CONTROL_RTC_64 = 0x00000000,
|
||||
|
|
@ -311,16 +254,11 @@ enum rtc_control {
|
|||
#define DMA_CONTROL_OSF 0x00000004 /* Operate on second frame */
|
||||
|
||||
/* MMC registers offset */
|
||||
#define GMAC_MMC_CTRL 0x100
|
||||
#define GMAC_MMC_RX_INTR 0x104
|
||||
#define GMAC_MMC_TX_INTR 0x108
|
||||
#define GMAC_MMC_RX_CSUM_OFFLOAD 0x208
|
||||
#define GMAC_EXTHASH_BASE 0x500
|
||||
|
||||
/* PTP and timestamping registers */
|
||||
|
||||
#define GMAC3_X_ATSNS GENMASK(29, 25)
|
||||
#define GMAC3_X_ATSNS_SHIFT 25
|
||||
|
||||
#define GMAC_PTP_TCR_ATSFC BIT(24)
|
||||
#define GMAC_PTP_TCR_ATSEN0 BIT(25)
|
||||
|
|
|
|||
|
|
@ -242,7 +242,7 @@ static void dwmac1000_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
|
|||
|
||||
if (duplex) {
|
||||
pr_debug("\tduplex mode: PAUSE %d\n", pause_time);
|
||||
flow |= (pause_time << GMAC_FLOW_CTRL_PT_SHIFT);
|
||||
flow |= FIELD_PREP(GMAC_FLOW_CTRL_PT_MASK, pause_time);
|
||||
}
|
||||
|
||||
writel(flow, ioaddr + GMAC_FLOW_CTRL);
|
||||
|
|
@ -378,8 +378,8 @@ static void dwmac1000_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
if (value & GMAC_DEBUG_TWCSTS)
|
||||
x->mmtl_fifo_ctrl++;
|
||||
if (value & GMAC_DEBUG_TRCSTS_MASK) {
|
||||
u32 trcsts = (value & GMAC_DEBUG_TRCSTS_MASK)
|
||||
>> GMAC_DEBUG_TRCSTS_SHIFT;
|
||||
u32 trcsts = FIELD_GET(GMAC_DEBUG_TRCSTS_MASK, value);
|
||||
|
||||
if (trcsts == GMAC_DEBUG_TRCSTS_WRITE)
|
||||
x->mtl_tx_fifo_read_ctrl_write++;
|
||||
else if (trcsts == GMAC_DEBUG_TRCSTS_TXW)
|
||||
|
|
@ -392,8 +392,7 @@ static void dwmac1000_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
if (value & GMAC_DEBUG_TXPAUSED)
|
||||
x->mac_tx_in_pause++;
|
||||
if (value & GMAC_DEBUG_TFCSTS_MASK) {
|
||||
u32 tfcsts = (value & GMAC_DEBUG_TFCSTS_MASK)
|
||||
>> GMAC_DEBUG_TFCSTS_SHIFT;
|
||||
u32 tfcsts = FIELD_GET(GMAC_DEBUG_TFCSTS_MASK, value);
|
||||
|
||||
if (tfcsts == GMAC_DEBUG_TFCSTS_XFER)
|
||||
x->mac_tx_frame_ctrl_xfer++;
|
||||
|
|
@ -407,8 +406,7 @@ static void dwmac1000_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
if (value & GMAC_DEBUG_TPESTS)
|
||||
x->mac_gmii_tx_proto_engine++;
|
||||
if (value & GMAC_DEBUG_RXFSTS_MASK) {
|
||||
u32 rxfsts = (value & GMAC_DEBUG_RXFSTS_MASK)
|
||||
>> GMAC_DEBUG_RRCSTS_SHIFT;
|
||||
u32 rxfsts = FIELD_GET(GMAC_DEBUG_RXFSTS_MASK, value);
|
||||
|
||||
if (rxfsts == GMAC_DEBUG_RXFSTS_FULL)
|
||||
x->mtl_rx_fifo_fill_level_full++;
|
||||
|
|
@ -420,8 +418,7 @@ static void dwmac1000_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
x->mtl_rx_fifo_fill_level_empty++;
|
||||
}
|
||||
if (value & GMAC_DEBUG_RRCSTS_MASK) {
|
||||
u32 rrcsts = (value & GMAC_DEBUG_RRCSTS_MASK) >>
|
||||
GMAC_DEBUG_RRCSTS_SHIFT;
|
||||
u32 rrcsts = FIELD_GET(GMAC_DEBUG_RRCSTS_MASK, value);
|
||||
|
||||
if (rrcsts == GMAC_DEBUG_RRCSTS_FLUSH)
|
||||
x->mtl_rx_fifo_read_ctrl_flush++;
|
||||
|
|
@ -435,8 +432,8 @@ static void dwmac1000_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
if (value & GMAC_DEBUG_RWCSTS)
|
||||
x->mtl_rx_fifo_ctrl_active++;
|
||||
if (value & GMAC_DEBUG_RFCFCSTS_MASK)
|
||||
x->mac_rx_frame_ctrl_fifo = (value & GMAC_DEBUG_RFCFCSTS_MASK)
|
||||
>> GMAC_DEBUG_RFCFCSTS_SHIFT;
|
||||
x->mac_rx_frame_ctrl_fifo = FIELD_GET(GMAC_DEBUG_RFCFCSTS_MASK,
|
||||
value);
|
||||
if (value & GMAC_DEBUG_RPESTS)
|
||||
x->mac_gmii_rx_proto_engine++;
|
||||
}
|
||||
|
|
@ -534,7 +531,7 @@ void dwmac1000_timestamp_interrupt(struct stmmac_priv *priv)
|
|||
if (!(priv->plat->flags & STMMAC_FLAG_EXT_SNAPSHOT_EN))
|
||||
return;
|
||||
|
||||
num_snapshot = (ts_status & GMAC3_X_ATSNS) >> GMAC3_X_ATSNS_SHIFT;
|
||||
num_snapshot = FIELD_GET(GMAC3_X_ATSNS, ts_status);
|
||||
|
||||
for (i = 0; i < num_snapshot; i++) {
|
||||
read_lock_irqsave(&priv->ptp_lock, flags);
|
||||
|
|
|
|||
|
|
@ -28,13 +28,10 @@ static void dwmac1000_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi)
|
|||
if (axi->axi_xit_frm)
|
||||
value |= DMA_AXI_LPI_XIT_FRM;
|
||||
|
||||
value &= ~DMA_AXI_WR_OSR_LMT;
|
||||
value |= (axi->axi_wr_osr_lmt & DMA_AXI_WR_OSR_LMT_MASK) <<
|
||||
DMA_AXI_WR_OSR_LMT_SHIFT;
|
||||
|
||||
value &= ~DMA_AXI_RD_OSR_LMT;
|
||||
value |= (axi->axi_rd_osr_lmt & DMA_AXI_RD_OSR_LMT_MASK) <<
|
||||
DMA_AXI_RD_OSR_LMT_SHIFT;
|
||||
value = u32_replace_bits(value, axi->axi_wr_osr_lmt,
|
||||
DMA_AXI_WR_OSR_LMT);
|
||||
value = u32_replace_bits(value, axi->axi_rd_osr_lmt,
|
||||
DMA_AXI_RD_OSR_LMT);
|
||||
|
||||
/* Depending on the UNDEF bit the Master AXI will perform any burst
|
||||
* length according to the BLEN programmed (by default all BLEN are
|
||||
|
|
@ -64,9 +61,8 @@ static void dwmac1000_dma_init_channel(struct stmmac_priv *priv,
|
|||
if (dma_cfg->pblx8)
|
||||
value |= DMA_BUS_MODE_MAXPBL;
|
||||
value |= DMA_BUS_MODE_USP;
|
||||
value &= ~(DMA_BUS_MODE_PBL_MASK | DMA_BUS_MODE_RPBL_MASK);
|
||||
value |= (txpbl << DMA_BUS_MODE_PBL_SHIFT);
|
||||
value |= (rxpbl << DMA_BUS_MODE_RPBL_SHIFT);
|
||||
value = u32_replace_bits(value, txpbl, DMA_BUS_MODE_PBL_MASK);
|
||||
value = u32_replace_bits(value, rxpbl, DMA_BUS_MODE_RPBL_MASK);
|
||||
|
||||
/* Set the Fixed burst mode */
|
||||
if (dma_cfg->fixed_burst)
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ static void dwmac100_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
|
|||
unsigned int flow = MAC_FLOW_CTRL_ENABLE;
|
||||
|
||||
if (duplex)
|
||||
flow |= (pause_time << MAC_FLOW_CTRL_PT_SHIFT);
|
||||
flow |= FIELD_PREP(MAC_FLOW_CTRL_PT_MASK, pause_time);
|
||||
writel(flow, ioaddr + MAC_FLOW_CTRL);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ static void dwmac100_dma_init(void __iomem *ioaddr,
|
|||
struct stmmac_dma_cfg *dma_cfg)
|
||||
{
|
||||
/* Enable Application Access by writing to DMA CSR0 */
|
||||
writel(DMA_BUS_MODE_DEFAULT | (dma_cfg->pbl << DMA_BUS_MODE_PBL_SHIFT),
|
||||
writel(DMA_BUS_MODE_DEFAULT |
|
||||
FIELD_PREP(DMA_BUS_MODE_PBL_MASK, dma_cfg->pbl),
|
||||
ioaddr + DMA_BUS_MODE);
|
||||
|
||||
/* Mask interrupts by writing to CSR7 */
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@
|
|||
|
||||
/* MAC Flow Control TX */
|
||||
#define GMAC_TX_FLOW_CTRL_TFE BIT(1)
|
||||
#define GMAC_TX_FLOW_CTRL_PT_SHIFT 16
|
||||
#define GMAC_TX_FLOW_CTRL_PT_MASK GENMASK(31, 16)
|
||||
|
||||
/* MAC Interrupt bitmap*/
|
||||
#define GMAC_INT_RGSMIIS BIT(0)
|
||||
|
|
@ -142,23 +142,19 @@ enum power_event {
|
|||
|
||||
/* MAC Debug bitmap */
|
||||
#define GMAC_DEBUG_TFCSTS_MASK GENMASK(18, 17)
|
||||
#define GMAC_DEBUG_TFCSTS_SHIFT 17
|
||||
#define GMAC_DEBUG_TFCSTS_IDLE 0
|
||||
#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_RFCFCSTS_MASK GENMASK(2, 1)
|
||||
#define GMAC_DEBUG_RFCFCSTS_SHIFT 1
|
||||
#define GMAC_DEBUG_RPESTS BIT(0)
|
||||
|
||||
/* MAC config */
|
||||
#define GMAC_CONFIG_ARPEN BIT(31)
|
||||
#define GMAC_CONFIG_SARC GENMASK(30, 28)
|
||||
#define GMAC_CONFIG_SARC_SHIFT 28
|
||||
#define GMAC_CONFIG_IPC BIT(27)
|
||||
#define GMAC_CONFIG_IPG GENMASK(26, 24)
|
||||
#define GMAC_CONFIG_IPG_SHIFT 24
|
||||
#define GMAC_CONFIG_2K BIT(22)
|
||||
#define GMAC_CONFIG_ACS BIT(20)
|
||||
#define GMAC_CONFIG_BE BIT(18)
|
||||
|
|
@ -166,7 +162,6 @@ enum power_event {
|
|||
#define GMAC_CONFIG_JE BIT(16)
|
||||
#define GMAC_CONFIG_PS BIT(15)
|
||||
#define GMAC_CONFIG_FES BIT(14)
|
||||
#define GMAC_CONFIG_FES_SHIFT 14
|
||||
#define GMAC_CONFIG_DM BIT(13)
|
||||
#define GMAC_CONFIG_LM BIT(12)
|
||||
#define GMAC_CONFIG_DCRS BIT(9)
|
||||
|
|
@ -175,11 +170,9 @@ enum power_event {
|
|||
|
||||
/* MAC extended config */
|
||||
#define GMAC_CONFIG_EIPG GENMASK(29, 25)
|
||||
#define GMAC_CONFIG_EIPG_SHIFT 25
|
||||
#define GMAC_CONFIG_EIPG_EN BIT(24)
|
||||
#define GMAC_CONFIG_HDSMS GENMASK(22, 20)
|
||||
#define GMAC_CONFIG_HDSMS_SHIFT 20
|
||||
#define GMAC_CONFIG_HDSMS_256 (0x2 << GMAC_CONFIG_HDSMS_SHIFT)
|
||||
#define GMAC_CONFIG_HDSMS_256 FIELD_PREP_CONST(GMAC_CONFIG_HDSMS, 0x2)
|
||||
|
||||
/* MAC HW features0 bitmap */
|
||||
#define GMAC_HW_FEAT_SAVLANINS BIT(27)
|
||||
|
|
@ -242,7 +235,6 @@ enum power_event {
|
|||
|
||||
/* MAC HW ADDR regs */
|
||||
#define GMAC_HI_DCS GENMASK(18, 16)
|
||||
#define GMAC_HI_DCS_SHIFT 16
|
||||
#define GMAC_HI_REG_AE BIT(31)
|
||||
|
||||
/* L3/L4 Filters regs */
|
||||
|
|
@ -257,7 +249,6 @@ enum power_event {
|
|||
#define GMAC_L3SAM0 BIT(2)
|
||||
#define GMAC_L3PEN0 BIT(0)
|
||||
#define GMAC_L4DP0 GENMASK(31, 16)
|
||||
#define GMAC_L4DP0_SHIFT 16
|
||||
#define GMAC_L4SP0 GENMASK(15, 0)
|
||||
|
||||
/* MAC Timestamp Status */
|
||||
|
|
@ -314,39 +305,32 @@ static inline u32 mtl_chanx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
#define MTL_OP_MODE_TSF BIT(1)
|
||||
|
||||
#define MTL_OP_MODE_TQS_MASK GENMASK(24, 16)
|
||||
#define MTL_OP_MODE_TQS_SHIFT 16
|
||||
|
||||
#define MTL_OP_MODE_TTC_MASK 0x70
|
||||
#define MTL_OP_MODE_TTC_SHIFT 4
|
||||
|
||||
#define MTL_OP_MODE_TTC_32 0
|
||||
#define MTL_OP_MODE_TTC_64 (1 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_96 (2 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_128 (3 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_192 (4 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_256 (5 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_384 (6 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_512 (7 << MTL_OP_MODE_TTC_SHIFT)
|
||||
#define MTL_OP_MODE_TTC_MASK GENMASK(6, 4)
|
||||
#define MTL_OP_MODE_TTC_32 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 0)
|
||||
#define MTL_OP_MODE_TTC_64 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 1)
|
||||
#define MTL_OP_MODE_TTC_96 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 2)
|
||||
#define MTL_OP_MODE_TTC_128 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 3)
|
||||
#define MTL_OP_MODE_TTC_192 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 4)
|
||||
#define MTL_OP_MODE_TTC_256 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 5)
|
||||
#define MTL_OP_MODE_TTC_384 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 6)
|
||||
#define MTL_OP_MODE_TTC_512 FIELD_PREP(MTL_OP_MODE_TTC_MASK, 7)
|
||||
|
||||
#define MTL_OP_MODE_RQS_MASK GENMASK(29, 20)
|
||||
#define MTL_OP_MODE_RQS_SHIFT 20
|
||||
|
||||
#define MTL_OP_MODE_RFD_MASK GENMASK(19, 14)
|
||||
#define MTL_OP_MODE_RFD_SHIFT 14
|
||||
|
||||
#define MTL_OP_MODE_RFA_MASK GENMASK(13, 8)
|
||||
#define MTL_OP_MODE_RFA_SHIFT 8
|
||||
|
||||
#define MTL_OP_MODE_EHFC BIT(7)
|
||||
#define MTL_OP_MODE_DIS_TCP_EF BIT(6)
|
||||
|
||||
#define MTL_OP_MODE_RTC_MASK GENMASK(1, 0)
|
||||
#define MTL_OP_MODE_RTC_SHIFT 0
|
||||
|
||||
#define MTL_OP_MODE_RTC_32 (1 << MTL_OP_MODE_RTC_SHIFT)
|
||||
#define MTL_OP_MODE_RTC_64 0
|
||||
#define MTL_OP_MODE_RTC_96 (2 << MTL_OP_MODE_RTC_SHIFT)
|
||||
#define MTL_OP_MODE_RTC_128 (3 << MTL_OP_MODE_RTC_SHIFT)
|
||||
#define MTL_OP_MODE_RTC_32 FIELD_PREP(MTL_OP_MODE_RTC_MASK, 1)
|
||||
#define MTL_OP_MODE_RTC_64 FIELD_PREP(MTL_OP_MODE_RTC_MASK, 0)
|
||||
#define MTL_OP_MODE_RTC_96 FIELD_PREP(MTL_OP_MODE_RTC_MASK, 2)
|
||||
#define MTL_OP_MODE_RTC_128 FIELD_PREP(MTL_OP_MODE_RTC_MASK, 3)
|
||||
|
||||
/* MTL ETS Control register */
|
||||
#define MTL_ETS_CTRL_BASE_ADDR 0x00000d10
|
||||
|
|
@ -451,7 +435,6 @@ static inline u32 mtl_low_credx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
|
||||
/* MTL debug: Tx FIFO Read Controller Status */
|
||||
#define MTL_DEBUG_TRCSTS_MASK GENMASK(2, 1)
|
||||
#define MTL_DEBUG_TRCSTS_SHIFT 1
|
||||
#define MTL_DEBUG_TRCSTS_IDLE 0
|
||||
#define MTL_DEBUG_TRCSTS_READ 1
|
||||
#define MTL_DEBUG_TRCSTS_TXW 2
|
||||
|
|
@ -460,13 +443,11 @@ static inline u32 mtl_low_credx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
|
||||
/* MAC debug: GMII or MII Transmit Protocol Engine Status */
|
||||
#define MTL_DEBUG_RXFSTS_MASK GENMASK(5, 4)
|
||||
#define MTL_DEBUG_RXFSTS_SHIFT 4
|
||||
#define MTL_DEBUG_RXFSTS_EMPTY 0
|
||||
#define MTL_DEBUG_RXFSTS_BT 1
|
||||
#define MTL_DEBUG_RXFSTS_AT 2
|
||||
#define MTL_DEBUG_RXFSTS_FULL 3
|
||||
#define MTL_DEBUG_RRCSTS_MASK GENMASK(2, 1)
|
||||
#define MTL_DEBUG_RRCSTS_SHIFT 1
|
||||
#define MTL_DEBUG_RRCSTS_IDLE 0
|
||||
#define MTL_DEBUG_RRCSTS_RDATA 1
|
||||
#define MTL_DEBUG_RRCSTS_RSTAT 2
|
||||
|
|
@ -485,42 +466,12 @@ static inline u32 mtl_low_credx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
/* To dump the core regs excluding the Address Registers */
|
||||
#define GMAC_REG_NUM 132
|
||||
|
||||
/* MTL debug */
|
||||
#define MTL_DEBUG_TXSTSFSTS BIT(5)
|
||||
#define MTL_DEBUG_TXFSTS BIT(4)
|
||||
#define MTL_DEBUG_TWCSTS BIT(3)
|
||||
|
||||
/* MTL debug: Tx FIFO Read Controller Status */
|
||||
#define MTL_DEBUG_TRCSTS_MASK GENMASK(2, 1)
|
||||
#define MTL_DEBUG_TRCSTS_SHIFT 1
|
||||
#define MTL_DEBUG_TRCSTS_IDLE 0
|
||||
#define MTL_DEBUG_TRCSTS_READ 1
|
||||
#define MTL_DEBUG_TRCSTS_TXW 2
|
||||
#define MTL_DEBUG_TRCSTS_WRITE 3
|
||||
#define MTL_DEBUG_TXPAUSED BIT(0)
|
||||
|
||||
/* MAC debug: GMII or MII Transmit Protocol Engine Status */
|
||||
#define MTL_DEBUG_RXFSTS_MASK GENMASK(5, 4)
|
||||
#define MTL_DEBUG_RXFSTS_SHIFT 4
|
||||
#define MTL_DEBUG_RXFSTS_EMPTY 0
|
||||
#define MTL_DEBUG_RXFSTS_BT 1
|
||||
#define MTL_DEBUG_RXFSTS_AT 2
|
||||
#define MTL_DEBUG_RXFSTS_FULL 3
|
||||
#define MTL_DEBUG_RRCSTS_MASK GENMASK(2, 1)
|
||||
#define MTL_DEBUG_RRCSTS_SHIFT 1
|
||||
#define MTL_DEBUG_RRCSTS_IDLE 0
|
||||
#define MTL_DEBUG_RRCSTS_RDATA 1
|
||||
#define MTL_DEBUG_RRCSTS_RSTAT 2
|
||||
#define MTL_DEBUG_RRCSTS_FLUSH 3
|
||||
#define MTL_DEBUG_RWCSTS BIT(0)
|
||||
|
||||
/* SGMII/RGMII status register */
|
||||
#define GMAC_PHYIF_CTRLSTATUS_TC BIT(0)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_LUD BIT(1)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_SMIDRXS BIT(4)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_LNKMOD BIT(16)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_SPEED GENMASK(18, 17)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_SPEED_SHIFT 17
|
||||
#define GMAC_PHYIF_CTRLSTATUS_LNKSTS BIT(19)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_JABTO BIT(20)
|
||||
#define GMAC_PHYIF_CTRLSTATUS_FALSECARDET BIT(21)
|
||||
|
|
|
|||
|
|
@ -572,8 +572,8 @@ static void dwmac4_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
|
|||
flow = GMAC_TX_FLOW_CTRL_TFE;
|
||||
|
||||
if (duplex)
|
||||
flow |=
|
||||
(pause_time << GMAC_TX_FLOW_CTRL_PT_SHIFT);
|
||||
flow |= FIELD_PREP(GMAC_TX_FLOW_CTRL_PT_MASK,
|
||||
pause_time);
|
||||
|
||||
writel(flow, ioaddr + GMAC_QX_TX_FLOW_CTRL(queue));
|
||||
}
|
||||
|
|
@ -681,8 +681,8 @@ static void dwmac4_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
if (value & MTL_DEBUG_TWCSTS)
|
||||
x->mmtl_fifo_ctrl++;
|
||||
if (value & MTL_DEBUG_TRCSTS_MASK) {
|
||||
u32 trcsts = (value & MTL_DEBUG_TRCSTS_MASK)
|
||||
>> MTL_DEBUG_TRCSTS_SHIFT;
|
||||
u32 trcsts = FIELD_GET(MTL_DEBUG_TRCSTS_MASK, value);
|
||||
|
||||
if (trcsts == MTL_DEBUG_TRCSTS_WRITE)
|
||||
x->mtl_tx_fifo_read_ctrl_write++;
|
||||
else if (trcsts == MTL_DEBUG_TRCSTS_TXW)
|
||||
|
|
@ -700,8 +700,7 @@ static void dwmac4_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
value = readl(ioaddr + MTL_CHAN_RX_DEBUG(dwmac4_addrs, queue));
|
||||
|
||||
if (value & MTL_DEBUG_RXFSTS_MASK) {
|
||||
u32 rxfsts = (value & MTL_DEBUG_RXFSTS_MASK)
|
||||
>> MTL_DEBUG_RRCSTS_SHIFT;
|
||||
u32 rxfsts = FIELD_GET(MTL_DEBUG_RXFSTS_MASK, value);
|
||||
|
||||
if (rxfsts == MTL_DEBUG_RXFSTS_FULL)
|
||||
x->mtl_rx_fifo_fill_level_full++;
|
||||
|
|
@ -713,8 +712,7 @@ static void dwmac4_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
x->mtl_rx_fifo_fill_level_empty++;
|
||||
}
|
||||
if (value & MTL_DEBUG_RRCSTS_MASK) {
|
||||
u32 rrcsts = (value & MTL_DEBUG_RRCSTS_MASK) >>
|
||||
MTL_DEBUG_RRCSTS_SHIFT;
|
||||
u32 rrcsts = FIELD_GET(MTL_DEBUG_RRCSTS_MASK, value);
|
||||
|
||||
if (rrcsts == MTL_DEBUG_RRCSTS_FLUSH)
|
||||
x->mtl_rx_fifo_read_ctrl_flush++;
|
||||
|
|
@ -733,8 +731,7 @@ static void dwmac4_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
value = readl(ioaddr + GMAC_DEBUG);
|
||||
|
||||
if (value & GMAC_DEBUG_TFCSTS_MASK) {
|
||||
u32 tfcsts = (value & GMAC_DEBUG_TFCSTS_MASK)
|
||||
>> GMAC_DEBUG_TFCSTS_SHIFT;
|
||||
u32 tfcsts = FIELD_GET(GMAC_DEBUG_TFCSTS_MASK, value);
|
||||
|
||||
if (tfcsts == GMAC_DEBUG_TFCSTS_XFER)
|
||||
x->mac_tx_frame_ctrl_xfer++;
|
||||
|
|
@ -748,8 +745,8 @@ static void dwmac4_debug(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
if (value & GMAC_DEBUG_TPESTS)
|
||||
x->mac_gmii_tx_proto_engine++;
|
||||
if (value & GMAC_DEBUG_RFCFCSTS_MASK)
|
||||
x->mac_rx_frame_ctrl_fifo = (value & GMAC_DEBUG_RFCFCSTS_MASK)
|
||||
>> GMAC_DEBUG_RFCFCSTS_SHIFT;
|
||||
x->mac_rx_frame_ctrl_fifo = FIELD_GET(GMAC_DEBUG_RFCFCSTS_MASK,
|
||||
value);
|
||||
if (value & GMAC_DEBUG_RPESTS)
|
||||
x->mac_gmii_rx_proto_engine++;
|
||||
}
|
||||
|
|
@ -770,8 +767,7 @@ static void dwmac4_sarc_configure(void __iomem *ioaddr, int val)
|
|||
{
|
||||
u32 value = readl(ioaddr + GMAC_CONFIG);
|
||||
|
||||
value &= ~GMAC_CONFIG_SARC;
|
||||
value |= val << GMAC_CONFIG_SARC_SHIFT;
|
||||
value = u32_replace_bits(value, val, GMAC_CONFIG_SARC);
|
||||
|
||||
writel(value, ioaddr + GMAC_CONFIG);
|
||||
}
|
||||
|
|
@ -879,9 +875,9 @@ static int dwmac4_config_l4_filter(struct mac_device_info *hw, u32 filter_no,
|
|||
writel(value, ioaddr + GMAC_L3L4_CTRL(filter_no));
|
||||
|
||||
if (sa) {
|
||||
value = match & GMAC_L4SP0;
|
||||
value = FIELD_PREP(GMAC_L4SP0, match);
|
||||
} else {
|
||||
value = (match << GMAC_L4DP0_SHIFT) & GMAC_L4DP0;
|
||||
value = FIELD_PREP(GMAC_L4DP0, match);
|
||||
}
|
||||
|
||||
writel(value, ioaddr + GMAC_L4_ADDR(filter_no));
|
||||
|
|
|
|||
|
|
@ -17,11 +17,9 @@ static int dwmac4_wrback_get_tx_status(struct stmmac_extra_stats *x,
|
|||
struct dma_desc *p,
|
||||
void __iomem *ioaddr)
|
||||
{
|
||||
unsigned int tdes3;
|
||||
u32 tdes3 = le32_to_cpu(p->des3);
|
||||
int ret = tx_done;
|
||||
|
||||
tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
/* Get tx owner first */
|
||||
if (unlikely(tdes3 & TDES3_OWN))
|
||||
return tx_dma_own;
|
||||
|
|
@ -46,8 +44,7 @@ static int dwmac4_wrback_get_tx_status(struct stmmac_extra_stats *x,
|
|||
if (unlikely((tdes3 & TDES3_LATE_COLLISION) ||
|
||||
(tdes3 & TDES3_EXCESSIVE_COLLISION)))
|
||||
x->tx_collision +=
|
||||
(tdes3 & TDES3_COLLISION_COUNT_MASK)
|
||||
>> TDES3_COLLISION_COUNT_SHIFT;
|
||||
FIELD_GET(TDES3_COLLISION_COUNT_MASK, tdes3);
|
||||
|
||||
if (unlikely(tdes3 & TDES3_EXCESSIVE_DEFERRAL))
|
||||
x->tx_deferred++;
|
||||
|
|
@ -73,9 +70,9 @@ static int dwmac4_wrback_get_tx_status(struct stmmac_extra_stats *x,
|
|||
static int dwmac4_wrback_get_rx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
unsigned int rdes1 = le32_to_cpu(p->des1);
|
||||
unsigned int rdes2 = le32_to_cpu(p->des2);
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
u32 rdes1 = le32_to_cpu(p->des1);
|
||||
u32 rdes2 = le32_to_cpu(p->des2);
|
||||
u32 rdes3 = le32_to_cpu(p->des3);
|
||||
int message_type;
|
||||
int ret = good_frame;
|
||||
|
||||
|
|
@ -108,7 +105,7 @@ static int dwmac4_wrback_get_rx_status(struct stmmac_extra_stats *x,
|
|||
ret = discard_frame;
|
||||
}
|
||||
|
||||
message_type = (rdes1 & ERDES4_MSG_TYPE_MASK) >> 8;
|
||||
message_type = FIELD_GET(RDES1_PTP_MSG_TYPE_MASK, rdes1);
|
||||
|
||||
if (rdes1 & RDES1_IP_HDR_ERROR) {
|
||||
x->ip_hdr_err++;
|
||||
|
|
@ -168,8 +165,7 @@ static int dwmac4_wrback_get_rx_status(struct stmmac_extra_stats *x,
|
|||
x->l3_filter_match++;
|
||||
if (rdes2 & RDES2_L4_FILTER_MATCH)
|
||||
x->l4_filter_match++;
|
||||
if ((rdes2 & RDES2_L3_L4_FILT_NB_MATCH_MASK)
|
||||
>> RDES2_L3_L4_FILT_NB_MATCH_SHIFT)
|
||||
if (rdes2 & RDES2_L3_L4_FILT_NB_MATCH_MASK)
|
||||
x->l3_l4_filter_no_match++;
|
||||
|
||||
return ret;
|
||||
|
|
@ -255,15 +251,14 @@ static inline void dwmac4_get_timestamp(void *desc, u32 ats, u64 *ts)
|
|||
static int dwmac4_rx_check_timestamp(void *desc)
|
||||
{
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
unsigned int rdes0 = le32_to_cpu(p->des0);
|
||||
unsigned int rdes1 = le32_to_cpu(p->des1);
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
u32 own, ctxt;
|
||||
u32 rdes0 = le32_to_cpu(p->des0);
|
||||
u32 rdes1 = le32_to_cpu(p->des1);
|
||||
u32 rdes3 = le32_to_cpu(p->des3);
|
||||
bool own, ctxt;
|
||||
int ret = 1;
|
||||
|
||||
own = rdes3 & RDES3_OWN;
|
||||
ctxt = ((rdes3 & RDES3_CONTEXT_DESCRIPTOR)
|
||||
>> RDES3_CONTEXT_DESCRIPTOR_SHIFT);
|
||||
ctxt = rdes3 & RDES3_CONTEXT_DESCRIPTOR;
|
||||
|
||||
if (likely(!own && ctxt)) {
|
||||
if ((rdes0 == 0xffffffff) && (rdes1 == 0xffffffff))
|
||||
|
|
@ -327,7 +322,7 @@ static void dwmac4_rd_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls, unsigned int tot_pkt_len)
|
||||
{
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
u32 tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
p->des2 |= cpu_to_le32(len & TDES2_BUFFER1_SIZE_MASK);
|
||||
|
||||
|
|
@ -337,10 +332,8 @@ static void dwmac4_rd_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
else
|
||||
tdes3 &= ~TDES3_FIRST_DESCRIPTOR;
|
||||
|
||||
if (likely(csum_flag))
|
||||
tdes3 |= (TX_CIC_FULL << TDES3_CHECKSUM_INSERTION_SHIFT);
|
||||
else
|
||||
tdes3 &= ~(TX_CIC_FULL << TDES3_CHECKSUM_INSERTION_SHIFT);
|
||||
tdes3 = u32_replace_bits(tdes3, csum_flag ? TX_CIC_FULL : 0,
|
||||
TDES3_CHECKSUM_INSERTION_MASK);
|
||||
|
||||
if (ls)
|
||||
tdes3 |= TDES3_LAST_DESCRIPTOR;
|
||||
|
|
@ -366,21 +359,21 @@ static void dwmac4_rd_prepare_tso_tx_desc(struct dma_desc *p, int is_fs,
|
|||
bool ls, unsigned int tcphdrlen,
|
||||
unsigned int tcppayloadlen)
|
||||
{
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
u32 tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
if (len1)
|
||||
p->des2 |= cpu_to_le32((len1 & TDES2_BUFFER1_SIZE_MASK));
|
||||
p->des2 |= cpu_to_le32(FIELD_PREP(TDES2_BUFFER1_SIZE_MASK,
|
||||
len1));
|
||||
|
||||
if (len2)
|
||||
p->des2 |= cpu_to_le32((len2 << TDES2_BUFFER2_SIZE_MASK_SHIFT)
|
||||
& TDES2_BUFFER2_SIZE_MASK);
|
||||
p->des2 |= cpu_to_le32(FIELD_PREP(TDES2_BUFFER2_SIZE_MASK,
|
||||
len2));
|
||||
|
||||
if (is_fs) {
|
||||
tdes3 |= TDES3_FIRST_DESCRIPTOR |
|
||||
TDES3_TCP_SEGMENTATION_ENABLE |
|
||||
((tcphdrlen << TDES3_HDR_LEN_SHIFT) &
|
||||
TDES3_SLOT_NUMBER_MASK) |
|
||||
((tcppayloadlen & TDES3_TCP_PKT_PAYLOAD_MASK));
|
||||
FIELD_PREP(TDES3_SLOT_NUMBER_MASK, tcphdrlen) |
|
||||
FIELD_PREP(TDES3_TCP_PKT_PAYLOAD_MASK, tcppayloadlen);
|
||||
} else {
|
||||
tdes3 &= ~TDES3_FIRST_DESCRIPTOR;
|
||||
}
|
||||
|
|
@ -491,9 +484,8 @@ static void dwmac4_clear(struct dma_desc *p)
|
|||
|
||||
static void dwmac4_set_sarc(struct dma_desc *p, u32 sarc_type)
|
||||
{
|
||||
sarc_type <<= TDES3_SA_INSERT_CTRL_SHIFT;
|
||||
|
||||
p->des3 |= cpu_to_le32(sarc_type & TDES3_SA_INSERT_CTRL_MASK);
|
||||
p->des3 |= cpu_to_le32(FIELD_PREP(TDES3_SA_INSERT_CTRL_MASK,
|
||||
sarc_type));
|
||||
}
|
||||
|
||||
static int set_16kib_bfsize(int mtu)
|
||||
|
|
@ -515,14 +507,9 @@ static void dwmac4_set_vlan_tag(struct dma_desc *p, u16 tag, u16 inner_tag,
|
|||
|
||||
/* Inner VLAN */
|
||||
if (inner_type) {
|
||||
u32 des = inner_tag << TDES2_IVT_SHIFT;
|
||||
|
||||
des &= TDES2_IVT_MASK;
|
||||
p->des2 = cpu_to_le32(des);
|
||||
|
||||
des = inner_type << TDES3_IVTIR_SHIFT;
|
||||
des &= TDES3_IVTIR_MASK;
|
||||
p->des3 = cpu_to_le32(des | TDES3_IVLTV);
|
||||
p->des2 = cpu_to_le32(FIELD_PREP(TDES2_IVT_MASK, inner_tag));
|
||||
p->des3 = cpu_to_le32(FIELD_PREP(TDES3_IVTIR_MASK, inner_type) |
|
||||
TDES3_IVLTV);
|
||||
}
|
||||
|
||||
/* Outer VLAN */
|
||||
|
|
@ -534,8 +521,7 @@ static void dwmac4_set_vlan_tag(struct dma_desc *p, u16 tag, u16 inner_tag,
|
|||
|
||||
static void dwmac4_set_vlan(struct dma_desc *p, u32 type)
|
||||
{
|
||||
type <<= TDES2_VLAN_TAG_SHIFT;
|
||||
p->des2 |= cpu_to_le32(type & TDES2_VLAN_TAG_MASK);
|
||||
p->des2 |= cpu_to_le32(FIELD_PREP(TDES2_VLAN_TAG_MASK, type));
|
||||
}
|
||||
|
||||
static void dwmac4_get_rx_header_len(struct dma_desc *p, unsigned int *len)
|
||||
|
|
|
|||
|
|
@ -18,15 +18,11 @@
|
|||
/* TDES2 (read format) */
|
||||
#define TDES2_BUFFER1_SIZE_MASK GENMASK(13, 0)
|
||||
#define TDES2_VLAN_TAG_MASK GENMASK(15, 14)
|
||||
#define TDES2_VLAN_TAG_SHIFT 14
|
||||
#define TDES2_BUFFER2_SIZE_MASK GENMASK(29, 16)
|
||||
#define TDES2_BUFFER2_SIZE_MASK_SHIFT 16
|
||||
#define TDES3_IVTIR_MASK GENMASK(19, 18)
|
||||
#define TDES3_IVTIR_SHIFT 18
|
||||
#define TDES3_IVLTV BIT(17)
|
||||
#define TDES2_TIMESTAMP_ENABLE BIT(30)
|
||||
#define TDES2_IVT_MASK GENMASK(31, 16)
|
||||
#define TDES2_IVT_SHIFT 16
|
||||
#define TDES2_INTERRUPT_ON_COMPLETION BIT(31)
|
||||
|
||||
/* TDES3 (read format) */
|
||||
|
|
@ -34,13 +30,10 @@
|
|||
#define TDES3_VLAN_TAG GENMASK(15, 0)
|
||||
#define TDES3_VLTV BIT(16)
|
||||
#define TDES3_CHECKSUM_INSERTION_MASK GENMASK(17, 16)
|
||||
#define TDES3_CHECKSUM_INSERTION_SHIFT 16
|
||||
#define TDES3_TCP_PKT_PAYLOAD_MASK GENMASK(17, 0)
|
||||
#define TDES3_TCP_SEGMENTATION_ENABLE BIT(18)
|
||||
#define TDES3_HDR_LEN_SHIFT 19
|
||||
#define TDES3_SLOT_NUMBER_MASK GENMASK(22, 19)
|
||||
#define TDES3_SA_INSERT_CTRL_MASK GENMASK(25, 23)
|
||||
#define TDES3_SA_INSERT_CTRL_SHIFT 23
|
||||
#define TDES3_CRC_PAD_CTRL_MASK GENMASK(27, 26)
|
||||
|
||||
/* TDES3 (write back format) */
|
||||
|
|
@ -49,7 +42,6 @@
|
|||
#define TDES3_UNDERFLOW_ERROR BIT(2)
|
||||
#define TDES3_EXCESSIVE_DEFERRAL BIT(3)
|
||||
#define TDES3_COLLISION_COUNT_MASK GENMASK(7, 4)
|
||||
#define TDES3_COLLISION_COUNT_SHIFT 4
|
||||
#define TDES3_EXCESSIVE_COLLISION BIT(8)
|
||||
#define TDES3_LATE_COLLISION BIT(9)
|
||||
#define TDES3_NO_CARRIER BIT(10)
|
||||
|
|
|
|||
|
|
@ -27,13 +27,10 @@ static void dwmac4_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi)
|
|||
if (axi->axi_xit_frm)
|
||||
value |= DMA_AXI_LPI_XIT_FRM;
|
||||
|
||||
value &= ~DMA_AXI_WR_OSR_LMT;
|
||||
value |= (axi->axi_wr_osr_lmt & DMA_AXI_OSR_MAX) <<
|
||||
DMA_AXI_WR_OSR_LMT_SHIFT;
|
||||
|
||||
value &= ~DMA_AXI_RD_OSR_LMT;
|
||||
value |= (axi->axi_rd_osr_lmt & DMA_AXI_OSR_MAX) <<
|
||||
DMA_AXI_RD_OSR_LMT_SHIFT;
|
||||
value = u32_replace_bits(value, axi->axi_wr_osr_lmt,
|
||||
DMA_AXI_WR_OSR_LMT);
|
||||
value = u32_replace_bits(value, axi->axi_rd_osr_lmt,
|
||||
DMA_AXI_RD_OSR_LMT);
|
||||
|
||||
/* Depending on the UNDEF bit the Master AXI will perform any burst
|
||||
* length according to the BLEN programmed (by default all BLEN are
|
||||
|
|
@ -55,7 +52,7 @@ static void dwmac4_dma_init_rx_chan(struct stmmac_priv *priv,
|
|||
u32 rxpbl = dma_cfg->rxpbl ?: dma_cfg->pbl;
|
||||
|
||||
value = readl(ioaddr + DMA_CHAN_RX_CONTROL(dwmac4_addrs, chan));
|
||||
value = value | (rxpbl << DMA_BUS_MODE_RPBL_SHIFT);
|
||||
value = value | FIELD_PREP(DMA_BUS_MODE_RPBL_MASK, rxpbl);
|
||||
writel(value, ioaddr + DMA_CHAN_RX_CONTROL(dwmac4_addrs, chan));
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) && likely(dma_cfg->eame))
|
||||
|
|
@ -76,7 +73,7 @@ static void dwmac4_dma_init_tx_chan(struct stmmac_priv *priv,
|
|||
u32 txpbl = dma_cfg->txpbl ?: dma_cfg->pbl;
|
||||
|
||||
value = readl(ioaddr + DMA_CHAN_TX_CONTROL(dwmac4_addrs, chan));
|
||||
value = value | (txpbl << DMA_BUS_MODE_PBL_SHIFT);
|
||||
value = value | FIELD_PREP(DMA_BUS_MODE_PBL, txpbl);
|
||||
|
||||
/* Enable OSP to get best performance */
|
||||
value |= DMA_CONTROL_OSP;
|
||||
|
|
@ -151,10 +148,9 @@ static void dwmac4_dma_init(void __iomem *ioaddr,
|
|||
|
||||
value = readl(ioaddr + DMA_BUS_MODE);
|
||||
|
||||
if (dma_cfg->multi_msi_en) {
|
||||
value &= ~DMA_BUS_MODE_INTM_MASK;
|
||||
value |= (DMA_BUS_MODE_INTM_MODE1 << DMA_BUS_MODE_INTM_SHIFT);
|
||||
}
|
||||
if (dma_cfg->multi_msi_en)
|
||||
value = u32_replace_bits(value, DMA_BUS_MODE_INTM_MODE1,
|
||||
DMA_BUS_MODE_INTM_MASK);
|
||||
|
||||
if (dma_cfg->dche)
|
||||
value |= DMA_BUS_MODE_DCHE;
|
||||
|
|
@ -264,7 +260,7 @@ static void dwmac4_dma_rx_chan_op_mode(struct stmmac_priv *priv,
|
|||
}
|
||||
|
||||
mtl_rx_op &= ~MTL_OP_MODE_RQS_MASK;
|
||||
mtl_rx_op |= rqs << MTL_OP_MODE_RQS_SHIFT;
|
||||
mtl_rx_op |= FIELD_PREP(MTL_OP_MODE_RQS_MASK, rqs);
|
||||
|
||||
/* Enable flow control only if each channel gets 4 KiB or more FIFO and
|
||||
* only if channel is not an AVB channel.
|
||||
|
|
@ -295,11 +291,10 @@ static void dwmac4_dma_rx_chan_op_mode(struct stmmac_priv *priv,
|
|||
break;
|
||||
}
|
||||
|
||||
mtl_rx_op &= ~MTL_OP_MODE_RFD_MASK;
|
||||
mtl_rx_op |= rfd << MTL_OP_MODE_RFD_SHIFT;
|
||||
|
||||
mtl_rx_op &= ~MTL_OP_MODE_RFA_MASK;
|
||||
mtl_rx_op |= rfa << MTL_OP_MODE_RFA_SHIFT;
|
||||
mtl_rx_op = u32_replace_bits(mtl_rx_op, rfd,
|
||||
MTL_OP_MODE_RFD_MASK);
|
||||
mtl_rx_op = u32_replace_bits(mtl_rx_op, rfa,
|
||||
MTL_OP_MODE_RFA_MASK);
|
||||
}
|
||||
|
||||
writel(mtl_rx_op, ioaddr + MTL_CHAN_RX_OP_MODE(dwmac4_addrs, channel));
|
||||
|
|
@ -354,8 +349,8 @@ static void dwmac4_dma_tx_chan_op_mode(struct stmmac_priv *priv,
|
|||
mtl_tx_op |= MTL_OP_MODE_TXQEN;
|
||||
else
|
||||
mtl_tx_op |= MTL_OP_MODE_TXQEN_AV;
|
||||
mtl_tx_op &= ~MTL_OP_MODE_TQS_MASK;
|
||||
mtl_tx_op |= tqs << MTL_OP_MODE_TQS_SHIFT;
|
||||
|
||||
mtl_tx_op = u32_replace_bits(mtl_tx_op, tqs, MTL_OP_MODE_TQS_MASK);
|
||||
|
||||
writel(mtl_tx_op, ioaddr + MTL_CHAN_TX_OP_MODE(dwmac4_addrs, channel));
|
||||
}
|
||||
|
|
@ -496,8 +491,7 @@ static void dwmac4_set_bfsize(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
const struct dwmac4_addrs *dwmac4_addrs = priv->plat->dwmac4_addrs;
|
||||
u32 value = readl(ioaddr + DMA_CHAN_RX_CONTROL(dwmac4_addrs, chan));
|
||||
|
||||
value &= ~DMA_RBSZ_MASK;
|
||||
value |= (bfsize << DMA_RBSZ_SHIFT) & DMA_RBSZ_MASK;
|
||||
value = u32_replace_bits(value, bfsize, DMA_RBSZ_MASK);
|
||||
|
||||
writel(value, ioaddr + DMA_CHAN_RX_CONTROL(dwmac4_addrs, chan));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,69 +16,35 @@
|
|||
#define DMA_CHANNEL_NB_MAX 1
|
||||
|
||||
#define DMA_BUS_MODE 0x00001000
|
||||
#define DMA_SYS_BUS_MODE 0x00001004
|
||||
#define DMA_STATUS 0x00001008
|
||||
#define DMA_DEBUG_STATUS_0 0x0000100c
|
||||
#define DMA_DEBUG_STATUS_1 0x00001010
|
||||
#define DMA_DEBUG_STATUS_2 0x00001014
|
||||
#define DMA_AXI_BUS_MODE 0x00001028
|
||||
#define DMA_TBS_CTRL 0x00001050
|
||||
|
||||
/* DMA Bus Mode bitmap */
|
||||
#define DMA_BUS_MODE_DCHE BIT(19)
|
||||
#define DMA_BUS_MODE_INTM_MASK GENMASK(17, 16)
|
||||
#define DMA_BUS_MODE_INTM_SHIFT 16
|
||||
#define DMA_BUS_MODE_INTM_MODE1 0x1
|
||||
#define DMA_BUS_MODE_SFT_RESET BIT(0)
|
||||
|
||||
/* DMA SYS Bus Mode bitmap */
|
||||
#define DMA_BUS_MODE_SPH BIT(24)
|
||||
#define DMA_SYS_BUS_MODE 0x00001004
|
||||
|
||||
#define DMA_BUS_MODE_PBL BIT(16)
|
||||
#define DMA_BUS_MODE_PBL_SHIFT 16
|
||||
#define DMA_BUS_MODE_RPBL_SHIFT 16
|
||||
#define DMA_BUS_MODE_RPBL_MASK GENMASK(21, 16)
|
||||
#define DMA_BUS_MODE_MB BIT(14)
|
||||
#define DMA_BUS_MODE_FB BIT(0)
|
||||
|
||||
/* DMA Interrupt top status */
|
||||
#define DMA_STATUS_MAC BIT(17)
|
||||
#define DMA_STATUS_MTL BIT(16)
|
||||
#define DMA_STATUS_CHAN7 BIT(7)
|
||||
#define DMA_STATUS_CHAN6 BIT(6)
|
||||
#define DMA_STATUS_CHAN5 BIT(5)
|
||||
#define DMA_STATUS_CHAN4 BIT(4)
|
||||
#define DMA_STATUS_CHAN3 BIT(3)
|
||||
#define DMA_STATUS_CHAN2 BIT(2)
|
||||
#define DMA_STATUS_CHAN1 BIT(1)
|
||||
#define DMA_STATUS_CHAN0 BIT(0)
|
||||
#define DMA_STATUS 0x00001008
|
||||
|
||||
/* DMA debug status bitmap */
|
||||
#define DMA_DEBUG_STATUS_TS_MASK 0xf
|
||||
#define DMA_DEBUG_STATUS_RS_MASK 0xf
|
||||
#define DMA_AXI_BUS_MODE 0x00001028
|
||||
|
||||
/* DMA AXI bitmap */
|
||||
#define DMA_AXI_EN_LPI BIT(31)
|
||||
#define DMA_AXI_LPI_XIT_FRM BIT(30)
|
||||
#define DMA_AXI_WR_OSR_LMT GENMASK(27, 24)
|
||||
#define DMA_AXI_WR_OSR_LMT_SHIFT 24
|
||||
#define DMA_AXI_RD_OSR_LMT GENMASK(19, 16)
|
||||
#define DMA_AXI_RD_OSR_LMT_SHIFT 16
|
||||
|
||||
#define DMA_AXI_OSR_MAX 0xf
|
||||
#define DMA_AXI_MAX_OSR_LIMIT ((DMA_AXI_OSR_MAX << DMA_AXI_WR_OSR_LMT_SHIFT) | \
|
||||
(DMA_AXI_OSR_MAX << DMA_AXI_RD_OSR_LMT_SHIFT))
|
||||
|
||||
#define DMA_SYS_BUS_MB BIT(14)
|
||||
#define DMA_AXI_1KBBE BIT(13)
|
||||
#define DMA_SYS_BUS_AAL DMA_AXI_AAL
|
||||
#define DMA_SYS_BUS_EAME BIT(11)
|
||||
#define DMA_SYS_BUS_FB BIT(0)
|
||||
|
||||
#define DMA_BURST_LEN_DEFAULT (DMA_AXI_BLEN256 | DMA_AXI_BLEN128 | \
|
||||
DMA_AXI_BLEN64 | DMA_AXI_BLEN32 | \
|
||||
DMA_AXI_BLEN16 | DMA_AXI_BLEN8 | \
|
||||
DMA_AXI_BLEN4)
|
||||
#define DMA_TBS_CTRL 0x00001050
|
||||
|
||||
/* DMA TBS Control */
|
||||
#define DMA_TBS_FTOS GENMASK(31, 8)
|
||||
#define DMA_TBS_FTOV BIT(0)
|
||||
#define DMA_TBS_DEF_FTOS (DMA_TBS_FTOS | DMA_TBS_FTOV)
|
||||
|
|
@ -100,11 +66,22 @@ static inline u32 dma_chanx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
return addr;
|
||||
}
|
||||
|
||||
#define DMA_CHAN_REG_NUMBER 17
|
||||
|
||||
#define DMA_CHAN_CONTROL(addrs, x) dma_chanx_base_addr(addrs, x)
|
||||
|
||||
#define DMA_CONTROL_SPH BIT(24)
|
||||
|
||||
#define DMA_CHAN_TX_CONTROL(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x4)
|
||||
|
||||
#define DMA_CONTROL_EDSE BIT(28)
|
||||
#define DMA_CONTROL_TSE BIT(12)
|
||||
#define DMA_CONTROL_OSP BIT(4)
|
||||
#define DMA_CONTROL_ST BIT(0)
|
||||
|
||||
#define DMA_CHAN_RX_CONTROL(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x8)
|
||||
|
||||
#define DMA_CONTROL_SR BIT(0)
|
||||
#define DMA_RBSZ_MASK GENMASK(14, 1)
|
||||
|
||||
#define DMA_CHAN_TX_BASE_ADDR_HI(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x10)
|
||||
#define DMA_CHAN_TX_BASE_ADDR(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x14)
|
||||
#define DMA_CHAN_RX_BASE_ADDR_HI(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x18)
|
||||
|
|
@ -113,7 +90,41 @@ static inline u32 dma_chanx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
#define DMA_CHAN_RX_END_ADDR(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x28)
|
||||
#define DMA_CHAN_TX_RING_LEN(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x2c)
|
||||
#define DMA_CHAN_RX_RING_LEN(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x30)
|
||||
|
||||
#define DMA_CHAN_INTR_ENA(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x34)
|
||||
|
||||
#define DMA_CHAN_INTR_ENA_NIE BIT(16)
|
||||
#define DMA_CHAN_INTR_ENA_AIE BIT(15)
|
||||
#define DMA_CHAN_INTR_ENA_NIE_4_10 BIT(15)
|
||||
#define DMA_CHAN_INTR_ENA_AIE_4_10 BIT(14)
|
||||
#define DMA_CHAN_INTR_ENA_FBE BIT(12)
|
||||
#define DMA_CHAN_INTR_ENA_RIE BIT(6)
|
||||
#define DMA_CHAN_INTR_ENA_TIE BIT(0)
|
||||
|
||||
#define DMA_CHAN_INTR_NORMAL (DMA_CHAN_INTR_ENA_NIE | \
|
||||
DMA_CHAN_INTR_ENA_RIE | \
|
||||
DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_INTR_ABNORMAL (DMA_CHAN_INTR_ENA_AIE | \
|
||||
DMA_CHAN_INTR_ENA_FBE)
|
||||
/* DMA default interrupt mask for 4.00 */
|
||||
#define DMA_CHAN_INTR_DEFAULT_MASK (DMA_CHAN_INTR_NORMAL | \
|
||||
DMA_CHAN_INTR_ABNORMAL)
|
||||
#define DMA_CHAN_INTR_DEFAULT_RX (DMA_CHAN_INTR_ENA_RIE)
|
||||
#define DMA_CHAN_INTR_DEFAULT_TX (DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_INTR_NORMAL_4_10 (DMA_CHAN_INTR_ENA_NIE_4_10 | \
|
||||
DMA_CHAN_INTR_ENA_RIE | \
|
||||
DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_INTR_ABNORMAL_4_10 (DMA_CHAN_INTR_ENA_AIE_4_10 | \
|
||||
DMA_CHAN_INTR_ENA_FBE)
|
||||
/* DMA default interrupt mask for 4.10a */
|
||||
#define DMA_CHAN_INTR_DEFAULT_MASK_4_10 (DMA_CHAN_INTR_NORMAL_4_10 | \
|
||||
DMA_CHAN_INTR_ABNORMAL_4_10)
|
||||
#define DMA_CHAN_INTR_DEFAULT_RX_4_10 (DMA_CHAN_INTR_ENA_RIE)
|
||||
#define DMA_CHAN_INTR_DEFAULT_TX_4_10 (DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_RX_WATCHDOG(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x38)
|
||||
#define DMA_CHAN_SLOT_CTRL_STATUS(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x3c)
|
||||
#define DMA_CHAN_CUR_TX_DESC(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x44)
|
||||
|
|
@ -124,26 +135,8 @@ static inline u32 dma_chanx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
#define DMA_CHAN_CUR_RX_BUF_ADDR(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x5c)
|
||||
#define DMA_CHAN_STATUS(addrs, x) (dma_chanx_base_addr(addrs, x) + 0x60)
|
||||
|
||||
/* DMA Control X */
|
||||
#define DMA_CONTROL_SPH BIT(24)
|
||||
#define DMA_CONTROL_MSS_MASK GENMASK(13, 0)
|
||||
|
||||
/* DMA Tx Channel X Control register defines */
|
||||
#define DMA_CONTROL_EDSE BIT(28)
|
||||
#define DMA_CONTROL_TSE BIT(12)
|
||||
#define DMA_CONTROL_OSP BIT(4)
|
||||
#define DMA_CONTROL_ST BIT(0)
|
||||
|
||||
/* DMA Rx Channel X Control register defines */
|
||||
#define DMA_CONTROL_SR BIT(0)
|
||||
#define DMA_RBSZ_MASK GENMASK(14, 1)
|
||||
#define DMA_RBSZ_SHIFT 1
|
||||
|
||||
/* Interrupt status per channel */
|
||||
#define DMA_CHAN_STATUS_REB GENMASK(21, 19)
|
||||
#define DMA_CHAN_STATUS_REB_SHIFT 19
|
||||
#define DMA_CHAN_STATUS_TEB GENMASK(18, 16)
|
||||
#define DMA_CHAN_STATUS_TEB_SHIFT 16
|
||||
#define DMA_CHAN_STATUS_NIS BIT(15)
|
||||
#define DMA_CHAN_STATUS_AIS BIT(14)
|
||||
#define DMA_CHAN_STATUS_CDE BIT(13)
|
||||
|
|
@ -177,53 +170,6 @@ static inline u32 dma_chanx_base_addr(const struct dwmac4_addrs *addrs,
|
|||
DMA_CHAN_STATUS_TI | \
|
||||
DMA_CHAN_STATUS_MSK_COMMON)
|
||||
|
||||
/* Interrupt enable bits per channel */
|
||||
#define DMA_CHAN_INTR_ENA_NIE BIT(16)
|
||||
#define DMA_CHAN_INTR_ENA_AIE BIT(15)
|
||||
#define DMA_CHAN_INTR_ENA_NIE_4_10 BIT(15)
|
||||
#define DMA_CHAN_INTR_ENA_AIE_4_10 BIT(14)
|
||||
#define DMA_CHAN_INTR_ENA_CDE BIT(13)
|
||||
#define DMA_CHAN_INTR_ENA_FBE BIT(12)
|
||||
#define DMA_CHAN_INTR_ENA_ERE BIT(11)
|
||||
#define DMA_CHAN_INTR_ENA_ETE BIT(10)
|
||||
#define DMA_CHAN_INTR_ENA_RWE BIT(9)
|
||||
#define DMA_CHAN_INTR_ENA_RSE BIT(8)
|
||||
#define DMA_CHAN_INTR_ENA_RBUE BIT(7)
|
||||
#define DMA_CHAN_INTR_ENA_RIE BIT(6)
|
||||
#define DMA_CHAN_INTR_ENA_TBUE BIT(2)
|
||||
#define DMA_CHAN_INTR_ENA_TSE BIT(1)
|
||||
#define DMA_CHAN_INTR_ENA_TIE BIT(0)
|
||||
|
||||
#define DMA_CHAN_INTR_NORMAL (DMA_CHAN_INTR_ENA_NIE | \
|
||||
DMA_CHAN_INTR_ENA_RIE | \
|
||||
DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_INTR_ABNORMAL (DMA_CHAN_INTR_ENA_AIE | \
|
||||
DMA_CHAN_INTR_ENA_FBE)
|
||||
/* DMA default interrupt mask for 4.00 */
|
||||
#define DMA_CHAN_INTR_DEFAULT_MASK (DMA_CHAN_INTR_NORMAL | \
|
||||
DMA_CHAN_INTR_ABNORMAL)
|
||||
#define DMA_CHAN_INTR_DEFAULT_RX (DMA_CHAN_INTR_ENA_RIE)
|
||||
#define DMA_CHAN_INTR_DEFAULT_TX (DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_INTR_NORMAL_4_10 (DMA_CHAN_INTR_ENA_NIE_4_10 | \
|
||||
DMA_CHAN_INTR_ENA_RIE | \
|
||||
DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_CHAN_INTR_ABNORMAL_4_10 (DMA_CHAN_INTR_ENA_AIE_4_10 | \
|
||||
DMA_CHAN_INTR_ENA_FBE)
|
||||
/* DMA default interrupt mask for 4.10a */
|
||||
#define DMA_CHAN_INTR_DEFAULT_MASK_4_10 (DMA_CHAN_INTR_NORMAL_4_10 | \
|
||||
DMA_CHAN_INTR_ABNORMAL_4_10)
|
||||
#define DMA_CHAN_INTR_DEFAULT_RX_4_10 (DMA_CHAN_INTR_ENA_RIE)
|
||||
#define DMA_CHAN_INTR_DEFAULT_TX_4_10 (DMA_CHAN_INTR_ENA_TIE)
|
||||
|
||||
/* channel 0 specific fields */
|
||||
#define DMA_CHAN0_DBG_STAT_TPS GENMASK(15, 12)
|
||||
#define DMA_CHAN0_DBG_STAT_TPS_SHIFT 12
|
||||
#define DMA_CHAN0_DBG_STAT_RPS GENMASK(11, 8)
|
||||
#define DMA_CHAN0_DBG_STAT_RPS_SHIFT 8
|
||||
|
||||
int dwmac4_dma_reset(void __iomem *ioaddr);
|
||||
void dwmac4_enable_dma_irq(struct stmmac_priv *priv, void __iomem *ioaddr,
|
||||
u32 chan, bool rx, bool tx);
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ void stmmac_dwmac4_set_mac_addr(void __iomem *ioaddr, const u8 addr[6],
|
|||
* bit that has no effect on the High Reg 0 where the bit 31 (MO)
|
||||
* is RO.
|
||||
*/
|
||||
data |= (STMMAC_CHAN0 << GMAC_HI_DCS_SHIFT);
|
||||
data |= FIELD_PREP(GMAC_HI_DCS, STMMAC_CHAN0);
|
||||
writel(data | GMAC_HI_REG_AE, ioaddr + high);
|
||||
data = (addr[3] << 24) | (addr[2] << 16) | (addr[1] << 8) | addr[0];
|
||||
writel(data, ioaddr + low);
|
||||
|
|
|
|||
|
|
@ -13,13 +13,86 @@
|
|||
|
||||
/* DMA CRS Control and Status Register Mapping */
|
||||
#define DMA_BUS_MODE 0x00001000 /* Bus Mode */
|
||||
|
||||
#define DMA_BUS_MODE_SFT_RESET 0x00000001 /* Software Reset */
|
||||
|
||||
#define DMA_XMT_POLL_DEMAND 0x00001004 /* Transmit Poll Demand */
|
||||
#define DMA_RCV_POLL_DEMAND 0x00001008 /* Received Poll Demand */
|
||||
#define DMA_RCV_BASE_ADDR 0x0000100c /* Receive List Base */
|
||||
#define DMA_TX_BASE_ADDR 0x00001010 /* Transmit List Base */
|
||||
|
||||
#define DMA_STATUS 0x00001014 /* Status Register */
|
||||
#define DMA_STATUS_GPI 0x10000000 /* PMT interrupt */
|
||||
#define DMA_STATUS_GMI 0x08000000 /* MMC interrupt */
|
||||
#define DMA_STATUS_GLI 0x04000000 /* GMAC Line interface int */
|
||||
#define DMA_STATUS_TS_MASK GENMASK(22, 20) /* Transmit Process State */
|
||||
#define DMA_STATUS_RS_MASK GENMASK(19, 17) /* Receive Process State */
|
||||
#define DMA_STATUS_NIS 0x00010000 /* Normal Interrupt Summary */
|
||||
#define DMA_STATUS_AIS 0x00008000 /* Abnormal Interrupt Summary */
|
||||
#define DMA_STATUS_ERI 0x00004000 /* Early Receive Interrupt */
|
||||
#define DMA_STATUS_FBI 0x00002000 /* Fatal Bus Error Interrupt */
|
||||
#define DMA_STATUS_ETI 0x00000400 /* Early Transmit Interrupt */
|
||||
#define DMA_STATUS_RWT 0x00000200 /* Receive Watchdog Timeout */
|
||||
#define DMA_STATUS_RPS 0x00000100 /* Receive Process Stopped */
|
||||
#define DMA_STATUS_RU 0x00000080 /* Receive Buffer Unavailable */
|
||||
#define DMA_STATUS_RI 0x00000040 /* Receive Interrupt */
|
||||
#define DMA_STATUS_UNF 0x00000020 /* Transmit Underflow */
|
||||
#define DMA_STATUS_OVF 0x00000010 /* Receive Overflow */
|
||||
#define DMA_STATUS_TJT 0x00000008 /* Transmit Jabber Timeout */
|
||||
#define DMA_STATUS_TU 0x00000004 /* Transmit Buffer Unavailable */
|
||||
#define DMA_STATUS_TPS 0x00000002 /* Transmit Process Stopped */
|
||||
#define DMA_STATUS_TI 0x00000001 /* Transmit Interrupt */
|
||||
|
||||
#define DMA_STATUS_MSK_COMMON (DMA_STATUS_NIS | \
|
||||
DMA_STATUS_AIS | \
|
||||
DMA_STATUS_FBI)
|
||||
|
||||
#define DMA_STATUS_MSK_RX (DMA_STATUS_ERI | \
|
||||
DMA_STATUS_RWT | \
|
||||
DMA_STATUS_RPS | \
|
||||
DMA_STATUS_RU | \
|
||||
DMA_STATUS_RI | \
|
||||
DMA_STATUS_OVF | \
|
||||
DMA_STATUS_MSK_COMMON)
|
||||
|
||||
#define DMA_STATUS_MSK_TX (DMA_STATUS_ETI | \
|
||||
DMA_STATUS_UNF | \
|
||||
DMA_STATUS_TJT | \
|
||||
DMA_STATUS_TU | \
|
||||
DMA_STATUS_TPS | \
|
||||
DMA_STATUS_TI | \
|
||||
DMA_STATUS_MSK_COMMON)
|
||||
|
||||
#define DMA_CONTROL 0x00001018 /* Ctrl (Operational Mode) */
|
||||
|
||||
/* DMA Control register defines */
|
||||
#define DMA_CONTROL_FTF 0x00100000 /* Flush transmit FIFO */
|
||||
#define DMA_CONTROL_ST 0x00002000 /* Start/Stop Transmission */
|
||||
#define DMA_CONTROL_SR 0x00000002 /* Start/Stop Receive */
|
||||
|
||||
#define DMA_INTR_ENA 0x0000101c /* Interrupt Enable */
|
||||
|
||||
/* DMA Normal interrupt */
|
||||
#define DMA_INTR_ENA_NIE 0x00010000 /* Normal Summary */
|
||||
#define DMA_INTR_ENA_TIE 0x00000001 /* Transmit Interrupt */
|
||||
#define DMA_INTR_ENA_RIE 0x00000040 /* Receive Interrupt */
|
||||
|
||||
#define DMA_INTR_NORMAL (DMA_INTR_ENA_NIE | DMA_INTR_ENA_RIE | \
|
||||
DMA_INTR_ENA_TIE)
|
||||
|
||||
/* DMA Abnormal interrupt */
|
||||
#define DMA_INTR_ENA_AIE 0x00008000 /* Abnormal Summary */
|
||||
#define DMA_INTR_ENA_FBE 0x00002000 /* Fatal Bus Error */
|
||||
#define DMA_INTR_ENA_UNE 0x00000020 /* Tx Underflow */
|
||||
|
||||
#define DMA_INTR_ABNORMAL (DMA_INTR_ENA_AIE | DMA_INTR_ENA_FBE | \
|
||||
DMA_INTR_ENA_UNE)
|
||||
|
||||
/* DMA default interrupt mask */
|
||||
#define DMA_INTR_DEFAULT_MASK (DMA_INTR_NORMAL | DMA_INTR_ABNORMAL)
|
||||
#define DMA_INTR_DEFAULT_RX (DMA_INTR_ENA_RIE)
|
||||
#define DMA_INTR_DEFAULT_TX (DMA_INTR_ENA_TIE)
|
||||
|
||||
#define DMA_MISSED_FRAME_CTR 0x00001020 /* Missed Frame Counter */
|
||||
|
||||
/* Following DMA defines are channels oriented */
|
||||
|
|
@ -42,13 +115,9 @@ static inline u32 dma_chan_base_addr(u32 base, u32 chan)
|
|||
#define DMA_CHAN_STATUS(chan) dma_chan_base_addr(DMA_STATUS, chan)
|
||||
#define DMA_CHAN_CONTROL(chan) dma_chan_base_addr(DMA_CONTROL, chan)
|
||||
#define DMA_CHAN_INTR_ENA(chan) dma_chan_base_addr(DMA_INTR_ENA, chan)
|
||||
#define DMA_CHAN_MISSED_FRAME_CTR(chan) \
|
||||
dma_chan_base_addr(DMA_MISSED_FRAME_CTR, chan)
|
||||
#define DMA_CHAN_RX_WATCHDOG(chan) \
|
||||
dma_chan_base_addr(DMA_RX_WATCHDOG, chan)
|
||||
|
||||
/* SW Reset */
|
||||
#define DMA_BUS_MODE_SFT_RESET 0x00000001 /* Software Reset */
|
||||
|
||||
/* Rx watchdog register */
|
||||
#define DMA_RX_WATCHDOG 0x00001024
|
||||
|
|
@ -59,19 +128,7 @@ static inline u32 dma_chan_base_addr(u32 base, u32 chan)
|
|||
#define DMA_AXI_EN_LPI BIT(31)
|
||||
#define DMA_AXI_LPI_XIT_FRM BIT(30)
|
||||
#define DMA_AXI_WR_OSR_LMT GENMASK(23, 20)
|
||||
#define DMA_AXI_WR_OSR_LMT_SHIFT 20
|
||||
#define DMA_AXI_WR_OSR_LMT_MASK 0xf
|
||||
#define DMA_AXI_RD_OSR_LMT GENMASK(19, 16)
|
||||
#define DMA_AXI_RD_OSR_LMT_SHIFT 16
|
||||
#define DMA_AXI_RD_OSR_LMT_MASK 0xf
|
||||
|
||||
#define DMA_AXI_OSR_MAX 0xf
|
||||
#define DMA_AXI_MAX_OSR_LIMIT ((DMA_AXI_OSR_MAX << DMA_AXI_WR_OSR_LMT_SHIFT) | \
|
||||
(DMA_AXI_OSR_MAX << DMA_AXI_RD_OSR_LMT_SHIFT))
|
||||
#define DMA_BURST_LEN_DEFAULT (DMA_AXI_BLEN256 | DMA_AXI_BLEN128 | \
|
||||
DMA_AXI_BLEN64 | DMA_AXI_BLEN32 | \
|
||||
DMA_AXI_BLEN16 | DMA_AXI_BLEN8 | \
|
||||
DMA_AXI_BLEN4)
|
||||
|
||||
#define DMA_AXI_1KBBE BIT(13)
|
||||
|
||||
|
|
@ -81,89 +138,6 @@ static inline u32 dma_chan_base_addr(u32 base, u32 chan)
|
|||
#define DMA_CUR_RX_BUF_ADDR 0x00001054 /* Current Host Rx Buffer */
|
||||
#define DMA_HW_FEATURE 0x00001058 /* HW Feature Register */
|
||||
|
||||
/* DMA Control register defines */
|
||||
#define DMA_CONTROL_ST 0x00002000 /* Start/Stop Transmission */
|
||||
#define DMA_CONTROL_SR 0x00000002 /* Start/Stop Receive */
|
||||
|
||||
/* DMA Normal interrupt */
|
||||
#define DMA_INTR_ENA_NIE 0x00010000 /* Normal Summary */
|
||||
#define DMA_INTR_ENA_TIE 0x00000001 /* Transmit Interrupt */
|
||||
#define DMA_INTR_ENA_TUE 0x00000004 /* Transmit Buffer Unavailable */
|
||||
#define DMA_INTR_ENA_RIE 0x00000040 /* Receive Interrupt */
|
||||
#define DMA_INTR_ENA_ERE 0x00004000 /* Early Receive */
|
||||
|
||||
#define DMA_INTR_NORMAL (DMA_INTR_ENA_NIE | DMA_INTR_ENA_RIE | \
|
||||
DMA_INTR_ENA_TIE)
|
||||
|
||||
/* DMA Abnormal interrupt */
|
||||
#define DMA_INTR_ENA_AIE 0x00008000 /* Abnormal Summary */
|
||||
#define DMA_INTR_ENA_FBE 0x00002000 /* Fatal Bus Error */
|
||||
#define DMA_INTR_ENA_ETE 0x00000400 /* Early Transmit */
|
||||
#define DMA_INTR_ENA_RWE 0x00000200 /* Receive Watchdog */
|
||||
#define DMA_INTR_ENA_RSE 0x00000100 /* Receive Stopped */
|
||||
#define DMA_INTR_ENA_RUE 0x00000080 /* Receive Buffer Unavailable */
|
||||
#define DMA_INTR_ENA_UNE 0x00000020 /* Tx Underflow */
|
||||
#define DMA_INTR_ENA_OVE 0x00000010 /* Receive Overflow */
|
||||
#define DMA_INTR_ENA_TJE 0x00000008 /* Transmit Jabber */
|
||||
#define DMA_INTR_ENA_TSE 0x00000002 /* Transmit Stopped */
|
||||
|
||||
#define DMA_INTR_ABNORMAL (DMA_INTR_ENA_AIE | DMA_INTR_ENA_FBE | \
|
||||
DMA_INTR_ENA_UNE)
|
||||
|
||||
/* DMA default interrupt mask */
|
||||
#define DMA_INTR_DEFAULT_MASK (DMA_INTR_NORMAL | DMA_INTR_ABNORMAL)
|
||||
#define DMA_INTR_DEFAULT_RX (DMA_INTR_ENA_RIE)
|
||||
#define DMA_INTR_DEFAULT_TX (DMA_INTR_ENA_TIE)
|
||||
|
||||
/* DMA Status register defines */
|
||||
#define DMA_STATUS_GLPII 0x40000000 /* GMAC LPI interrupt */
|
||||
#define DMA_STATUS_GPI 0x10000000 /* PMT interrupt */
|
||||
#define DMA_STATUS_GMI 0x08000000 /* MMC interrupt */
|
||||
#define DMA_STATUS_GLI 0x04000000 /* GMAC Line interface int */
|
||||
#define DMA_STATUS_EB_MASK 0x00380000 /* Error Bits Mask */
|
||||
#define DMA_STATUS_EB_TX_ABORT 0x00080000 /* Error Bits - TX Abort */
|
||||
#define DMA_STATUS_EB_RX_ABORT 0x00100000 /* Error Bits - RX Abort */
|
||||
#define DMA_STATUS_TS_MASK 0x00700000 /* Transmit Process State */
|
||||
#define DMA_STATUS_TS_SHIFT 20
|
||||
#define DMA_STATUS_RS_MASK 0x000e0000 /* Receive Process State */
|
||||
#define DMA_STATUS_RS_SHIFT 17
|
||||
#define DMA_STATUS_NIS 0x00010000 /* Normal Interrupt Summary */
|
||||
#define DMA_STATUS_AIS 0x00008000 /* Abnormal Interrupt Summary */
|
||||
#define DMA_STATUS_ERI 0x00004000 /* Early Receive Interrupt */
|
||||
#define DMA_STATUS_FBI 0x00002000 /* Fatal Bus Error Interrupt */
|
||||
#define DMA_STATUS_ETI 0x00000400 /* Early Transmit Interrupt */
|
||||
#define DMA_STATUS_RWT 0x00000200 /* Receive Watchdog Timeout */
|
||||
#define DMA_STATUS_RPS 0x00000100 /* Receive Process Stopped */
|
||||
#define DMA_STATUS_RU 0x00000080 /* Receive Buffer Unavailable */
|
||||
#define DMA_STATUS_RI 0x00000040 /* Receive Interrupt */
|
||||
#define DMA_STATUS_UNF 0x00000020 /* Transmit Underflow */
|
||||
#define DMA_STATUS_OVF 0x00000010 /* Receive Overflow */
|
||||
#define DMA_STATUS_TJT 0x00000008 /* Transmit Jabber Timeout */
|
||||
#define DMA_STATUS_TU 0x00000004 /* Transmit Buffer Unavailable */
|
||||
#define DMA_STATUS_TPS 0x00000002 /* Transmit Process Stopped */
|
||||
#define DMA_STATUS_TI 0x00000001 /* Transmit Interrupt */
|
||||
#define DMA_CONTROL_FTF 0x00100000 /* Flush transmit FIFO */
|
||||
|
||||
#define DMA_STATUS_MSK_COMMON (DMA_STATUS_NIS | \
|
||||
DMA_STATUS_AIS | \
|
||||
DMA_STATUS_FBI)
|
||||
|
||||
#define DMA_STATUS_MSK_RX (DMA_STATUS_ERI | \
|
||||
DMA_STATUS_RWT | \
|
||||
DMA_STATUS_RPS | \
|
||||
DMA_STATUS_RU | \
|
||||
DMA_STATUS_RI | \
|
||||
DMA_STATUS_OVF | \
|
||||
DMA_STATUS_MSK_COMMON)
|
||||
|
||||
#define DMA_STATUS_MSK_TX (DMA_STATUS_ETI | \
|
||||
DMA_STATUS_UNF | \
|
||||
DMA_STATUS_TJT | \
|
||||
DMA_STATUS_TU | \
|
||||
DMA_STATUS_TPS | \
|
||||
DMA_STATUS_TI | \
|
||||
DMA_STATUS_MSK_COMMON)
|
||||
|
||||
#define NUM_DWMAC100_DMA_REGS 9
|
||||
#define NUM_DWMAC1000_DMA_REGS 23
|
||||
#define NUM_DWMAC4_DMA_REGS 27
|
||||
|
|
|
|||
|
|
@ -97,10 +97,7 @@ void dwmac_dma_stop_rx(struct stmmac_priv *priv, void __iomem *ioaddr, u32 chan)
|
|||
#ifdef DWMAC_DMA_DEBUG
|
||||
static void show_tx_process_state(unsigned int status)
|
||||
{
|
||||
unsigned int state;
|
||||
state = (status & DMA_STATUS_TS_MASK) >> DMA_STATUS_TS_SHIFT;
|
||||
|
||||
switch (state) {
|
||||
switch (FIELD_GET(DMA_STATUS_TS_MASK, status)) {
|
||||
case 0:
|
||||
pr_debug("- TX (Stopped): Reset or Stop command\n");
|
||||
break;
|
||||
|
|
@ -128,10 +125,7 @@ static void show_tx_process_state(unsigned int status)
|
|||
|
||||
static void show_rx_process_state(unsigned int status)
|
||||
{
|
||||
unsigned int state;
|
||||
state = (status & DMA_STATUS_RS_MASK) >> DMA_STATUS_RS_SHIFT;
|
||||
|
||||
switch (state) {
|
||||
switch (FIELD_GET(DMA_STATUS_RS_MASK, status)) {
|
||||
case 0:
|
||||
pr_debug("- RX (Stopped): Reset or Stop command\n");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -24,17 +24,15 @@
|
|||
#define XGMAC_CONFIG_SS_2500 (0x6 << XGMAC_CONFIG_SS_OFF)
|
||||
#define XGMAC_CONFIG_SS_10_MII (0x7 << XGMAC_CONFIG_SS_OFF)
|
||||
#define XGMAC_CONFIG_SARC GENMASK(22, 20)
|
||||
#define XGMAC_CONFIG_SARC_SHIFT 20
|
||||
#define XGMAC_CONFIG_JD BIT(16)
|
||||
#define XGMAC_CONFIG_TE BIT(0)
|
||||
#define XGMAC_CORE_INIT_TX (XGMAC_CONFIG_JD)
|
||||
#define XGMAC_RX_CONFIG 0x00000004
|
||||
#define XGMAC_CONFIG_ARPEN BIT(31)
|
||||
#define XGMAC_CONFIG_GPSL GENMASK(29, 16)
|
||||
#define XGMAC_CONFIG_GPSL_SHIFT 16
|
||||
#define XGMAC_CONFIG_HDSMS GENMASK(14, 12)
|
||||
#define XGMAC_CONFIG_HDSMS_SHIFT 12
|
||||
#define XGMAC_CONFIG_HDSMS_256 (0x2 << XGMAC_CONFIG_HDSMS_SHIFT)
|
||||
#define XGMAC_CONFIG_HDSMS_256 FIELD_PREP(XGMAC_CONFIG_HDSMS, 0x2)
|
||||
#define XGMAC_CONFIG_S2KP BIT(11)
|
||||
#define XGMAC_CONFIG_LM BIT(10)
|
||||
#define XGMAC_CONFIG_IPC BIT(9)
|
||||
|
|
@ -44,8 +42,10 @@
|
|||
#define XGMAC_CONFIG_CST BIT(2)
|
||||
#define XGMAC_CONFIG_ACS BIT(1)
|
||||
#define XGMAC_CONFIG_RE BIT(0)
|
||||
#define XGMAC_CORE_INIT_RX (XGMAC_CONFIG_GPSLCE | XGMAC_CONFIG_WD | \
|
||||
(XGMAC_JUMBO_LEN << XGMAC_CONFIG_GPSL_SHIFT))
|
||||
#define XGMAC_CORE_INIT_RX (XGMAC_CONFIG_GPSLCE | \
|
||||
XGMAC_CONFIG_WD | \
|
||||
FIELD_PREP(XGMAC_CONFIG_GPSL, \
|
||||
XGMAC_JUMBO_LEN))
|
||||
#define XGMAC_PACKET_FILTER 0x00000008
|
||||
#define XGMAC_FILTER_RA BIT(31)
|
||||
#define XGMAC_FILTER_IPFE BIT(20)
|
||||
|
|
@ -90,7 +90,6 @@
|
|||
#define XGMAC_INT_DEFAULT_EN (XGMAC_LPIIE | XGMAC_PMTIE)
|
||||
#define XGMAC_Qx_TX_FLOW_CTRL(x) (0x00000070 + (x) * 4)
|
||||
#define XGMAC_PT GENMASK(31, 16)
|
||||
#define XGMAC_PT_SHIFT 16
|
||||
#define XGMAC_TFE BIT(1)
|
||||
#define XGMAC_RX_FLOW_CTRL 0x00000090
|
||||
#define XGMAC_RFE BIT(0)
|
||||
|
|
@ -180,12 +179,11 @@
|
|||
#define XGMAC_ADDR_MAX 32
|
||||
#define XGMAC_AE BIT(31)
|
||||
#define XGMAC_DCS GENMASK(19, 16)
|
||||
#define XGMAC_DCS_SHIFT 16
|
||||
#define XGMAC_ADDRx_LOW(x) (0x00000304 + (x) * 0x8)
|
||||
#define XGMAC_L3L4_ADDR_CTRL 0x00000c00
|
||||
#define XGMAC_IDDR GENMASK(16, 8)
|
||||
#define XGMAC_IDDR_SHIFT 8
|
||||
#define XGMAC_IDDR_FNUM 4
|
||||
#define XGMAC_IDDR_FNUM_MASK GENMASK(7, 4) /* FNUM within IDDR */
|
||||
#define XGMAC_IDDR_REG_MASK GENMASK(3, 0) /* REG within IDDR */
|
||||
#define XGMAC_TT BIT(1)
|
||||
#define XGMAC_XB BIT(0)
|
||||
#define XGMAC_L3L4_DATA 0x00000c04
|
||||
|
|
@ -204,7 +202,6 @@
|
|||
#define XGMAC_L3PEN0 BIT(0)
|
||||
#define XGMAC_L4_ADDR 0x1
|
||||
#define XGMAC_L4DP0 GENMASK(31, 16)
|
||||
#define XGMAC_L4DP0_SHIFT 16
|
||||
#define XGMAC_L4SP0 GENMASK(15, 0)
|
||||
#define XGMAC_L3_ADDR0 0x4
|
||||
#define XGMAC_L3_ADDR1 0x5
|
||||
|
|
@ -224,7 +221,6 @@
|
|||
#define XGMAC_RSS_DATA 0x00000c8c
|
||||
#define XGMAC_TIMESTAMP_STATUS 0x00000d20
|
||||
#define XGMAC_TIMESTAMP_ATSNS_MASK GENMASK(29, 25)
|
||||
#define XGMAC_TIMESTAMP_ATSNS_SHIFT 25
|
||||
#define XGMAC_TXTSC BIT(15)
|
||||
#define XGMAC_TXTIMESTAMP_NSEC 0x00000d30
|
||||
#define XGMAC_TXTSSTSLO GENMASK(30, 0)
|
||||
|
|
@ -290,13 +286,9 @@
|
|||
#define XGMAC_DPP_DISABLE BIT(0)
|
||||
#define XGMAC_MTL_TXQ_OPMODE(x) (0x00001100 + (0x80 * (x)))
|
||||
#define XGMAC_TQS GENMASK(25, 16)
|
||||
#define XGMAC_TQS_SHIFT 16
|
||||
#define XGMAC_Q2TCMAP GENMASK(10, 8)
|
||||
#define XGMAC_Q2TCMAP_SHIFT 8
|
||||
#define XGMAC_TTC GENMASK(6, 4)
|
||||
#define XGMAC_TTC_SHIFT 4
|
||||
#define XGMAC_TXQEN GENMASK(3, 2)
|
||||
#define XGMAC_TXQEN_SHIFT 2
|
||||
#define XGMAC_TSF BIT(1)
|
||||
#define XGMAC_MTL_TCx_ETS_CONTROL(x) (0x00001110 + (0x80 * (x)))
|
||||
#define XGMAC_MTL_TCx_QUANTUM_WEIGHT(x) (0x00001118 + (0x80 * (x)))
|
||||
|
|
@ -310,16 +302,12 @@
|
|||
#define XGMAC_ETS (0x2 << 0)
|
||||
#define XGMAC_MTL_RXQ_OPMODE(x) (0x00001140 + (0x80 * (x)))
|
||||
#define XGMAC_RQS GENMASK(25, 16)
|
||||
#define XGMAC_RQS_SHIFT 16
|
||||
#define XGMAC_EHFC BIT(7)
|
||||
#define XGMAC_RSF BIT(5)
|
||||
#define XGMAC_RTC GENMASK(1, 0)
|
||||
#define XGMAC_RTC_SHIFT 0
|
||||
#define XGMAC_MTL_RXQ_FLOW_CONTROL(x) (0x00001150 + (0x80 * (x)))
|
||||
#define XGMAC_RFD GENMASK(31, 17)
|
||||
#define XGMAC_RFD_SHIFT 17
|
||||
#define XGMAC_RFA GENMASK(15, 1)
|
||||
#define XGMAC_RFA_SHIFT 1
|
||||
#define XGMAC_MTL_QINTEN(x) (0x00001170 + (0x80 * (x)))
|
||||
#define XGMAC_RXOIE BIT(16)
|
||||
#define XGMAC_MTL_QINT_STATUS(x) (0x00001174 + (0x80 * (x)))
|
||||
|
|
@ -333,9 +321,7 @@
|
|||
#define XGMAC_SWR BIT(0)
|
||||
#define XGMAC_DMA_SYSBUS_MODE 0x00003004
|
||||
#define XGMAC_WR_OSR_LMT GENMASK(29, 24)
|
||||
#define XGMAC_WR_OSR_LMT_SHIFT 24
|
||||
#define XGMAC_RD_OSR_LMT GENMASK(21, 16)
|
||||
#define XGMAC_RD_OSR_LMT_SHIFT 16
|
||||
#define XGMAC_EN_LPI BIT(15)
|
||||
#define XGMAC_LPI_XIT_PKT BIT(14)
|
||||
#define XGMAC_AAL DMA_AXI_AAL
|
||||
|
|
@ -370,15 +356,12 @@
|
|||
#define XGMAC_DMA_CH_TX_CONTROL(x) (0x00003104 + (0x80 * (x)))
|
||||
#define XGMAC_EDSE BIT(28)
|
||||
#define XGMAC_TxPBL GENMASK(21, 16)
|
||||
#define XGMAC_TxPBL_SHIFT 16
|
||||
#define XGMAC_TSE BIT(12)
|
||||
#define XGMAC_OSP BIT(4)
|
||||
#define XGMAC_TXST BIT(0)
|
||||
#define XGMAC_DMA_CH_RX_CONTROL(x) (0x00003108 + (0x80 * (x)))
|
||||
#define XGMAC_RxPBL GENMASK(21, 16)
|
||||
#define XGMAC_RxPBL_SHIFT 16
|
||||
#define XGMAC_RBSZ GENMASK(14, 1)
|
||||
#define XGMAC_RBSZ_SHIFT 1
|
||||
#define XGMAC_RXST BIT(0)
|
||||
#define XGMAC_DMA_CH_TxDESC_HADDR(x) (0x00003110 + (0x80 * (x)))
|
||||
#define XGMAC_DMA_CH_TxDESC_LADDR(x) (0x00003114 + (0x80 * (x)))
|
||||
|
|
@ -423,32 +406,24 @@
|
|||
#define XGMAC_TDES0_LT GENMASK(7, 0)
|
||||
#define XGMAC_TDES1_LT GENMASK(31, 8)
|
||||
#define XGMAC_TDES2_IVT GENMASK(31, 16)
|
||||
#define XGMAC_TDES2_IVT_SHIFT 16
|
||||
#define XGMAC_TDES2_IOC BIT(31)
|
||||
#define XGMAC_TDES2_TTSE BIT(30)
|
||||
#define XGMAC_TDES2_B2L GENMASK(29, 16)
|
||||
#define XGMAC_TDES2_B2L_SHIFT 16
|
||||
#define XGMAC_TDES2_VTIR GENMASK(15, 14)
|
||||
#define XGMAC_TDES2_VTIR_SHIFT 14
|
||||
#define XGMAC_TDES2_B1L GENMASK(13, 0)
|
||||
#define XGMAC_TDES3_OWN BIT(31)
|
||||
#define XGMAC_TDES3_CTXT BIT(30)
|
||||
#define XGMAC_TDES3_FD BIT(29)
|
||||
#define XGMAC_TDES3_LD BIT(28)
|
||||
#define XGMAC_TDES3_CPC GENMASK(27, 26)
|
||||
#define XGMAC_TDES3_CPC_SHIFT 26
|
||||
#define XGMAC_TDES3_TCMSSV BIT(26)
|
||||
#define XGMAC_TDES3_SAIC GENMASK(25, 23)
|
||||
#define XGMAC_TDES3_SAIC_SHIFT 23
|
||||
#define XGMAC_TDES3_TBSV BIT(24)
|
||||
#define XGMAC_TDES3_THL GENMASK(22, 19)
|
||||
#define XGMAC_TDES3_THL_SHIFT 19
|
||||
#define XGMAC_TDES3_IVTIR GENMASK(19, 18)
|
||||
#define XGMAC_TDES3_IVTIR_SHIFT 18
|
||||
#define XGMAC_TDES3_TSE BIT(18)
|
||||
#define XGMAC_TDES3_IVLTV BIT(17)
|
||||
#define XGMAC_TDES3_CIC GENMASK(17, 16)
|
||||
#define XGMAC_TDES3_CIC_SHIFT 16
|
||||
#define XGMAC_TDES3_TPL GENMASK(17, 0)
|
||||
#define XGMAC_TDES3_VLTV BIT(16)
|
||||
#define XGMAC_TDES3_VT GENMASK(15, 0)
|
||||
|
|
@ -461,7 +436,6 @@
|
|||
#define XGMAC_RDES3_CDA BIT(27)
|
||||
#define XGMAC_RDES3_RSV BIT(26)
|
||||
#define XGMAC_RDES3_L34T GENMASK(23, 20)
|
||||
#define XGMAC_RDES3_L34T_SHIFT 20
|
||||
#define XGMAC_RDES3_ET_LT GENMASK(19, 16)
|
||||
#define XGMAC_L34T_IP4TCP 0x1
|
||||
#define XGMAC_L34T_IP4UDP 0x2
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ static void dwxgmac2_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
|
|||
u32 value = XGMAC_TFE;
|
||||
|
||||
if (duplex)
|
||||
value |= pause_time << XGMAC_PT_SHIFT;
|
||||
value |= FIELD_PREP(XGMAC_PT, pause_time);
|
||||
|
||||
writel(value, ioaddr + XGMAC_Qx_TX_FLOW_CTRL(i));
|
||||
}
|
||||
|
|
@ -1226,8 +1226,7 @@ static void dwxgmac2_sarc_configure(void __iomem *ioaddr, int val)
|
|||
{
|
||||
u32 value = readl(ioaddr + XGMAC_TX_CONFIG);
|
||||
|
||||
value &= ~XGMAC_CONFIG_SARC;
|
||||
value |= val << XGMAC_CONFIG_SARC_SHIFT;
|
||||
value = u32_replace_bits(value, val, XGMAC_CONFIG_SARC);
|
||||
|
||||
writel(value, ioaddr + XGMAC_TX_CONFIG);
|
||||
}
|
||||
|
|
@ -1247,14 +1246,16 @@ static int dwxgmac2_filter_read(struct mac_device_info *hw, u32 filter_no,
|
|||
u8 reg, u32 *data)
|
||||
{
|
||||
void __iomem *ioaddr = hw->pcsr;
|
||||
u32 value;
|
||||
u32 value, iddr;
|
||||
int ret;
|
||||
|
||||
ret = dwxgmac2_filter_wait(hw);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
value = ((filter_no << XGMAC_IDDR_FNUM) | reg) << XGMAC_IDDR_SHIFT;
|
||||
iddr = FIELD_PREP(XGMAC_IDDR_FNUM_MASK, filter_no) |
|
||||
FIELD_PREP(XGMAC_IDDR_REG_MASK, reg);
|
||||
value = FIELD_PREP(XGMAC_IDDR, iddr);
|
||||
value |= XGMAC_TT | XGMAC_XB;
|
||||
writel(value, ioaddr + XGMAC_L3L4_ADDR_CTRL);
|
||||
|
||||
|
|
@ -1270,7 +1271,7 @@ static int dwxgmac2_filter_write(struct mac_device_info *hw, u32 filter_no,
|
|||
u8 reg, u32 data)
|
||||
{
|
||||
void __iomem *ioaddr = hw->pcsr;
|
||||
u32 value;
|
||||
u32 value, iddr;
|
||||
int ret;
|
||||
|
||||
ret = dwxgmac2_filter_wait(hw);
|
||||
|
|
@ -1279,7 +1280,9 @@ static int dwxgmac2_filter_write(struct mac_device_info *hw, u32 filter_no,
|
|||
|
||||
writel(data, ioaddr + XGMAC_L3L4_DATA);
|
||||
|
||||
value = ((filter_no << XGMAC_IDDR_FNUM) | reg) << XGMAC_IDDR_SHIFT;
|
||||
iddr = FIELD_PREP(XGMAC_IDDR_FNUM_MASK, filter_no) |
|
||||
FIELD_PREP(XGMAC_IDDR_REG_MASK, reg);
|
||||
value = FIELD_PREP(XGMAC_IDDR, iddr);
|
||||
value |= XGMAC_XB;
|
||||
writel(value, ioaddr + XGMAC_L3L4_ADDR_CTRL);
|
||||
|
||||
|
|
@ -1388,13 +1391,13 @@ static int dwxgmac2_config_l4_filter(struct mac_device_info *hw, u32 filter_no,
|
|||
return ret;
|
||||
|
||||
if (sa) {
|
||||
value = match & XGMAC_L4SP0;
|
||||
value = FIELD_PREP(XGMAC_L4SP0, match);
|
||||
|
||||
ret = dwxgmac2_filter_write(hw, filter_no, XGMAC_L4_ADDR, value);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else {
|
||||
value = (match << XGMAC_L4DP0_SHIFT) & XGMAC_L4DP0;
|
||||
value = FIELD_PREP(XGMAC_L4DP0, match);
|
||||
|
||||
ret = dwxgmac2_filter_write(hw, filter_no, XGMAC_L4_ADDR, value);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
static int dwxgmac2_get_tx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p, void __iomem *ioaddr)
|
||||
{
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
u32 tdes3 = le32_to_cpu(p->des3);
|
||||
int ret = tx_done;
|
||||
|
||||
if (unlikely(tdes3 & XGMAC_TDES3_OWN))
|
||||
|
|
@ -26,7 +26,7 @@ static int dwxgmac2_get_tx_status(struct stmmac_extra_stats *x,
|
|||
static int dwxgmac2_get_rx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
u32 rdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
if (unlikely(rdes3 & XGMAC_RDES3_OWN))
|
||||
return dma_own;
|
||||
|
|
@ -114,7 +114,7 @@ static inline void dwxgmac2_get_timestamp(void *desc, u32 ats, u64 *ts)
|
|||
static int dwxgmac2_rx_check_timestamp(void *desc)
|
||||
{
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
u32 rdes3 = le32_to_cpu(p->des3);
|
||||
bool desc_valid, ts_valid;
|
||||
|
||||
dma_rmb();
|
||||
|
|
@ -135,7 +135,7 @@ static int dwxgmac2_get_rx_timestamp_status(void *desc, void *next_desc,
|
|||
u32 ats)
|
||||
{
|
||||
struct dma_desc *p = (struct dma_desc *)desc;
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
u32 rdes3 = le32_to_cpu(p->des3);
|
||||
int ret = -EBUSY;
|
||||
|
||||
if (likely(rdes3 & XGMAC_RDES3_CDA))
|
||||
|
|
@ -162,7 +162,7 @@ static void dwxgmac2_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls, unsigned int tot_pkt_len)
|
||||
{
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
u32 tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
p->des2 |= cpu_to_le32(len & XGMAC_TDES2_B1L);
|
||||
|
||||
|
|
@ -173,7 +173,7 @@ static void dwxgmac2_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
tdes3 &= ~XGMAC_TDES3_FD;
|
||||
|
||||
if (csum_flag)
|
||||
tdes3 |= 0x3 << XGMAC_TDES3_CIC_SHIFT;
|
||||
tdes3 |= FIELD_PREP(XGMAC_TDES3_CIC, 0x3);
|
||||
else
|
||||
tdes3 &= ~XGMAC_TDES3_CIC;
|
||||
|
||||
|
|
@ -201,18 +201,16 @@ static void dwxgmac2_prepare_tso_tx_desc(struct dma_desc *p, int is_fs,
|
|||
bool ls, unsigned int tcphdrlen,
|
||||
unsigned int tcppayloadlen)
|
||||
{
|
||||
unsigned int tdes3 = le32_to_cpu(p->des3);
|
||||
u32 tdes3 = le32_to_cpu(p->des3);
|
||||
|
||||
if (len1)
|
||||
p->des2 |= cpu_to_le32(len1 & XGMAC_TDES2_B1L);
|
||||
if (len2)
|
||||
p->des2 |= cpu_to_le32((len2 << XGMAC_TDES2_B2L_SHIFT) &
|
||||
XGMAC_TDES2_B2L);
|
||||
p->des2 |= cpu_to_le32(FIELD_PREP(XGMAC_TDES2_B2L, len2));
|
||||
if (is_fs) {
|
||||
tdes3 |= XGMAC_TDES3_FD | XGMAC_TDES3_TSE;
|
||||
tdes3 |= (tcphdrlen << XGMAC_TDES3_THL_SHIFT) &
|
||||
XGMAC_TDES3_THL;
|
||||
tdes3 |= tcppayloadlen & XGMAC_TDES3_TPL;
|
||||
tdes3 |= FIELD_PREP(XGMAC_TDES3_THL, tcphdrlen);
|
||||
tdes3 |= FIELD_PREP(XGMAC_TDES3_TPL, tcppayloadlen);
|
||||
} else {
|
||||
tdes3 &= ~XGMAC_TDES3_FD;
|
||||
}
|
||||
|
|
@ -274,11 +272,11 @@ static void dwxgmac2_clear(struct dma_desc *p)
|
|||
static int dwxgmac2_get_rx_hash(struct dma_desc *p, u32 *hash,
|
||||
enum pkt_hash_types *type)
|
||||
{
|
||||
unsigned int rdes3 = le32_to_cpu(p->des3);
|
||||
u32 rdes3 = le32_to_cpu(p->des3);
|
||||
u32 ptype;
|
||||
|
||||
if (rdes3 & XGMAC_RDES3_RSV) {
|
||||
ptype = (rdes3 & XGMAC_RDES3_L34T) >> XGMAC_RDES3_L34T_SHIFT;
|
||||
ptype = FIELD_GET(XGMAC_RDES3_L34T, rdes3);
|
||||
|
||||
switch (ptype) {
|
||||
case XGMAC_L34T_IP4TCP:
|
||||
|
|
@ -313,9 +311,7 @@ static void dwxgmac2_set_sec_addr(struct dma_desc *p, dma_addr_t addr, bool is_v
|
|||
|
||||
static void dwxgmac2_set_sarc(struct dma_desc *p, u32 sarc_type)
|
||||
{
|
||||
sarc_type <<= XGMAC_TDES3_SAIC_SHIFT;
|
||||
|
||||
p->des3 |= cpu_to_le32(sarc_type & XGMAC_TDES3_SAIC);
|
||||
p->des3 |= cpu_to_le32(FIELD_PREP(XGMAC_TDES3_SAIC, sarc_type));
|
||||
}
|
||||
|
||||
static void dwxgmac2_set_vlan_tag(struct dma_desc *p, u16 tag, u16 inner_tag,
|
||||
|
|
@ -328,13 +324,11 @@ static void dwxgmac2_set_vlan_tag(struct dma_desc *p, u16 tag, u16 inner_tag,
|
|||
|
||||
/* Inner VLAN */
|
||||
if (inner_type) {
|
||||
u32 des = inner_tag << XGMAC_TDES2_IVT_SHIFT;
|
||||
u32 des = FIELD_PREP(XGMAC_TDES2_IVT, inner_tag);
|
||||
|
||||
des &= XGMAC_TDES2_IVT;
|
||||
p->des2 = cpu_to_le32(des);
|
||||
|
||||
des = inner_type << XGMAC_TDES3_IVTIR_SHIFT;
|
||||
des &= XGMAC_TDES3_IVTIR;
|
||||
des = FIELD_PREP(XGMAC_TDES3_IVTIR, inner_type);
|
||||
p->des3 = cpu_to_le32(des | XGMAC_TDES3_IVLTV);
|
||||
}
|
||||
|
||||
|
|
@ -347,8 +341,7 @@ static void dwxgmac2_set_vlan_tag(struct dma_desc *p, u16 tag, u16 inner_tag,
|
|||
|
||||
static void dwxgmac2_set_vlan(struct dma_desc *p, u32 type)
|
||||
{
|
||||
type <<= XGMAC_TDES2_VTIR_SHIFT;
|
||||
p->des2 |= cpu_to_le32(type & XGMAC_TDES2_VTIR);
|
||||
p->des2 |= cpu_to_le32(FIELD_PREP(XGMAC_TDES2_VTIR, type));
|
||||
}
|
||||
|
||||
static void dwxgmac2_set_tbs(struct dma_edesc *p, u32 sec, u32 nsec)
|
||||
|
|
|
|||
|
|
@ -55,8 +55,7 @@ static void dwxgmac2_dma_init_rx_chan(struct stmmac_priv *priv,
|
|||
u32 value;
|
||||
|
||||
value = readl(ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan));
|
||||
value &= ~XGMAC_RxPBL;
|
||||
value |= (rxpbl << XGMAC_RxPBL_SHIFT) & XGMAC_RxPBL;
|
||||
value = u32_replace_bits(value, rxpbl, XGMAC_RxPBL);
|
||||
writel(value, ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan));
|
||||
|
||||
writel(upper_32_bits(phy), ioaddr + XGMAC_DMA_CH_RxDESC_HADDR(chan));
|
||||
|
|
@ -72,9 +71,7 @@ static void dwxgmac2_dma_init_tx_chan(struct stmmac_priv *priv,
|
|||
u32 value;
|
||||
|
||||
value = readl(ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan));
|
||||
value &= ~XGMAC_TxPBL;
|
||||
value |= (txpbl << XGMAC_TxPBL_SHIFT) & XGMAC_TxPBL;
|
||||
value |= XGMAC_OSP;
|
||||
value = u32_replace_bits(value, txpbl, XGMAC_TxPBL);
|
||||
writel(value, ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan));
|
||||
|
||||
writel(upper_32_bits(phy), ioaddr + XGMAC_DMA_CH_TxDESC_HADDR(chan));
|
||||
|
|
@ -90,13 +87,8 @@ static void dwxgmac2_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi)
|
|||
if (axi->axi_xit_frm)
|
||||
value |= XGMAC_LPI_XIT_PKT;
|
||||
|
||||
value &= ~XGMAC_WR_OSR_LMT;
|
||||
value |= (axi->axi_wr_osr_lmt << XGMAC_WR_OSR_LMT_SHIFT) &
|
||||
XGMAC_WR_OSR_LMT;
|
||||
|
||||
value &= ~XGMAC_RD_OSR_LMT;
|
||||
value |= (axi->axi_rd_osr_lmt << XGMAC_RD_OSR_LMT_SHIFT) &
|
||||
XGMAC_RD_OSR_LMT;
|
||||
value = u32_replace_bits(value, axi->axi_wr_osr_lmt, XGMAC_WR_OSR_LMT);
|
||||
value = u32_replace_bits(value, axi->axi_rd_osr_lmt, XGMAC_RD_OSR_LMT);
|
||||
|
||||
if (!axi->axi_fb)
|
||||
value |= XGMAC_UNDEF;
|
||||
|
|
@ -127,23 +119,24 @@ static void dwxgmac2_dma_rx_mode(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
{
|
||||
u32 value = readl(ioaddr + XGMAC_MTL_RXQ_OPMODE(channel));
|
||||
unsigned int rqs = fifosz / 256 - 1;
|
||||
unsigned int rtc;
|
||||
|
||||
if (mode == SF_DMA_MODE) {
|
||||
value |= XGMAC_RSF;
|
||||
} else {
|
||||
value &= ~XGMAC_RSF;
|
||||
value &= ~XGMAC_RTC;
|
||||
|
||||
if (mode <= 64)
|
||||
value |= 0x0 << XGMAC_RTC_SHIFT;
|
||||
rtc = 0x0;
|
||||
else if (mode <= 96)
|
||||
value |= 0x2 << XGMAC_RTC_SHIFT;
|
||||
rtc = 0x2;
|
||||
else
|
||||
value |= 0x3 << XGMAC_RTC_SHIFT;
|
||||
rtc = 0x3;
|
||||
|
||||
value = u32_replace_bits(value, rtc, XGMAC_RTC);
|
||||
}
|
||||
|
||||
value &= ~XGMAC_RQS;
|
||||
value |= (rqs << XGMAC_RQS_SHIFT) & XGMAC_RQS;
|
||||
value = u32_replace_bits(value, rqs, XGMAC_RQS);
|
||||
|
||||
if ((fifosz >= 4096) && (qmode != MTL_QUEUE_AVB)) {
|
||||
u32 flow = readl(ioaddr + XGMAC_MTL_RXQ_FLOW_CONTROL(channel));
|
||||
|
|
@ -172,11 +165,8 @@ static void dwxgmac2_dma_rx_mode(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
break;
|
||||
}
|
||||
|
||||
flow &= ~XGMAC_RFD;
|
||||
flow |= rfd << XGMAC_RFD_SHIFT;
|
||||
|
||||
flow &= ~XGMAC_RFA;
|
||||
flow |= rfa << XGMAC_RFA_SHIFT;
|
||||
flow = u32_replace_bits(flow, rfd, XGMAC_RFD);
|
||||
flow = u32_replace_bits(flow, rfa, XGMAC_RFA);
|
||||
|
||||
writel(flow, ioaddr + XGMAC_MTL_RXQ_FLOW_CONTROL(channel));
|
||||
}
|
||||
|
|
@ -189,40 +179,41 @@ static void dwxgmac2_dma_tx_mode(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
{
|
||||
u32 value = readl(ioaddr + XGMAC_MTL_TXQ_OPMODE(channel));
|
||||
unsigned int tqs = fifosz / 256 - 1;
|
||||
unsigned int ttc, txqen;
|
||||
|
||||
if (mode == SF_DMA_MODE) {
|
||||
value |= XGMAC_TSF;
|
||||
} else {
|
||||
value &= ~XGMAC_TSF;
|
||||
value &= ~XGMAC_TTC;
|
||||
|
||||
if (mode <= 64)
|
||||
value |= 0x0 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x0;
|
||||
else if (mode <= 96)
|
||||
value |= 0x2 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x2;
|
||||
else if (mode <= 128)
|
||||
value |= 0x3 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x3;
|
||||
else if (mode <= 192)
|
||||
value |= 0x4 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x4;
|
||||
else if (mode <= 256)
|
||||
value |= 0x5 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x5;
|
||||
else if (mode <= 384)
|
||||
value |= 0x6 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x6;
|
||||
else
|
||||
value |= 0x7 << XGMAC_TTC_SHIFT;
|
||||
ttc = 0x7;
|
||||
|
||||
value = u32_replace_bits(value, ttc, XGMAC_TTC);
|
||||
}
|
||||
|
||||
/* Use static TC to Queue mapping */
|
||||
value |= (channel << XGMAC_Q2TCMAP_SHIFT) & XGMAC_Q2TCMAP;
|
||||
value |= FIELD_PREP(XGMAC_Q2TCMAP, channel);
|
||||
|
||||
value &= ~XGMAC_TXQEN;
|
||||
if (qmode != MTL_QUEUE_AVB)
|
||||
value |= 0x2 << XGMAC_TXQEN_SHIFT;
|
||||
txqen = 0x2;
|
||||
else
|
||||
value |= 0x1 << XGMAC_TXQEN_SHIFT;
|
||||
txqen = 0x1;
|
||||
|
||||
value &= ~XGMAC_TQS;
|
||||
value |= (tqs << XGMAC_TQS_SHIFT) & XGMAC_TQS;
|
||||
value = u32_replace_bits(value, txqen, XGMAC_TXQEN);
|
||||
value = u32_replace_bits(value, tqs, XGMAC_TQS);
|
||||
|
||||
writel(value, ioaddr + XGMAC_MTL_TXQ_OPMODE(channel));
|
||||
}
|
||||
|
|
@ -526,16 +517,17 @@ static void dwxgmac2_qmode(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
{
|
||||
u32 value = readl(ioaddr + XGMAC_MTL_TXQ_OPMODE(channel));
|
||||
u32 flow = readl(ioaddr + XGMAC_RX_FLOW_CTRL);
|
||||
unsigned int txqen;
|
||||
|
||||
value &= ~XGMAC_TXQEN;
|
||||
if (qmode != MTL_QUEUE_AVB) {
|
||||
value |= 0x2 << XGMAC_TXQEN_SHIFT;
|
||||
txqen = 0x2;
|
||||
writel(0, ioaddr + XGMAC_MTL_TCx_ETS_CONTROL(channel));
|
||||
} else {
|
||||
value |= 0x1 << XGMAC_TXQEN_SHIFT;
|
||||
txqen = 0x1;
|
||||
writel(flow & (~XGMAC_RFE), ioaddr + XGMAC_RX_FLOW_CTRL);
|
||||
}
|
||||
|
||||
value = u32_replace_bits(value, txqen, XGMAC_TXQEN);
|
||||
writel(value, ioaddr + XGMAC_MTL_TXQ_OPMODE(channel));
|
||||
}
|
||||
|
||||
|
|
@ -545,8 +537,7 @@ static void dwxgmac2_set_bfsize(struct stmmac_priv *priv, void __iomem *ioaddr,
|
|||
u32 value;
|
||||
|
||||
value = readl(ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan));
|
||||
value &= ~XGMAC_RBSZ;
|
||||
value |= bfsize << XGMAC_RBSZ_SHIFT;
|
||||
value = u32_replace_bits(value, bfsize, XGMAC_RBSZ);
|
||||
writel(value, ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
static int enh_desc_get_tx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p, void __iomem *ioaddr)
|
||||
{
|
||||
unsigned int tdes0 = le32_to_cpu(p->des0);
|
||||
u32 tdes0 = le32_to_cpu(p->des0);
|
||||
int ret = tx_done;
|
||||
|
||||
/* Get tx owner first */
|
||||
|
|
@ -44,7 +44,7 @@ static int enh_desc_get_tx_status(struct stmmac_extra_stats *x,
|
|||
if (unlikely((tdes0 & ETDES0_LATE_COLLISION) ||
|
||||
(tdes0 & ETDES0_EXCESSIVE_COLLISIONS)))
|
||||
x->tx_collision +=
|
||||
(tdes0 & ETDES0_COLLISION_COUNT_MASK) >> 3;
|
||||
FIELD_GET(ETDES0_COLLISION_COUNT_MASK, tdes0);
|
||||
|
||||
if (unlikely(tdes0 & ETDES0_EXCESSIVE_DEFERRAL))
|
||||
x->tx_deferred++;
|
||||
|
|
@ -117,11 +117,11 @@ static int enh_desc_coe_rdes0(int ipc_err, int type, int payload_err)
|
|||
static void enh_desc_get_ext_status(struct stmmac_extra_stats *x,
|
||||
struct dma_extended_desc *p)
|
||||
{
|
||||
unsigned int rdes0 = le32_to_cpu(p->basic.des0);
|
||||
unsigned int rdes4 = le32_to_cpu(p->des4);
|
||||
u32 rdes0 = le32_to_cpu(p->basic.des0);
|
||||
u32 rdes4 = le32_to_cpu(p->des4);
|
||||
|
||||
if (unlikely(rdes0 & ERDES0_RX_MAC_ADDR)) {
|
||||
int message_type = (rdes4 & ERDES4_MSG_TYPE_MASK) >> 8;
|
||||
int message_type = FIELD_GET(ERDES4_MSG_TYPE_MASK, rdes4);
|
||||
|
||||
if (rdes4 & ERDES4_IP_HDR_ERR)
|
||||
x->ip_hdr_err++;
|
||||
|
|
@ -167,13 +167,13 @@ static void enh_desc_get_ext_status(struct stmmac_extra_stats *x,
|
|||
x->av_pkt_rcvd++;
|
||||
if (rdes4 & ERDES4_AV_TAGGED_PKT_RCVD)
|
||||
x->av_tagged_pkt_rcvd++;
|
||||
if ((rdes4 & ERDES4_VLAN_TAG_PRI_VAL_MASK) >> 18)
|
||||
if (rdes4 & ERDES4_VLAN_TAG_PRI_VAL_MASK)
|
||||
x->vlan_tag_priority_val++;
|
||||
if (rdes4 & ERDES4_L3_FILTER_MATCH)
|
||||
x->l3_filter_match++;
|
||||
if (rdes4 & ERDES4_L4_FILTER_MATCH)
|
||||
x->l4_filter_match++;
|
||||
if ((rdes4 & ERDES4_L3_L4_FILT_NO_MATCH_MASK) >> 26)
|
||||
if (rdes4 & ERDES4_L3_L4_FILT_NO_MATCH_MASK)
|
||||
x->l3_l4_filter_no_match++;
|
||||
}
|
||||
}
|
||||
|
|
@ -181,7 +181,7 @@ static void enh_desc_get_ext_status(struct stmmac_extra_stats *x,
|
|||
static int enh_desc_get_rx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
unsigned int rdes0 = le32_to_cpu(p->des0);
|
||||
u32 rdes0 = le32_to_cpu(p->des0);
|
||||
int ret = good_frame;
|
||||
|
||||
if (unlikely(rdes0 & RDES0_OWN))
|
||||
|
|
@ -312,7 +312,7 @@ static void enh_desc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls, unsigned int tot_pkt_len)
|
||||
{
|
||||
unsigned int tdes0 = le32_to_cpu(p->des0);
|
||||
u32 tdes0 = le32_to_cpu(p->des0);
|
||||
|
||||
if (mode == STMMAC_CHAIN_MODE)
|
||||
enh_set_tx_desc_len_on_chain(p, len);
|
||||
|
|
@ -324,10 +324,8 @@ static void enh_desc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
else
|
||||
tdes0 &= ~ETDES0_FIRST_SEGMENT;
|
||||
|
||||
if (likely(csum_flag))
|
||||
tdes0 |= (TX_CIC_FULL << ETDES0_CHECKSUM_INSERTION_SHIFT);
|
||||
else
|
||||
tdes0 &= ~(TX_CIC_FULL << ETDES0_CHECKSUM_INSERTION_SHIFT);
|
||||
tdes0 = u32_replace_bits(tdes0, csum_flag ? TX_CIC_FULL : 0,
|
||||
ETDES0_CHECKSUM_INSERTION_MASK);
|
||||
|
||||
if (ls)
|
||||
tdes0 |= ETDES0_LAST_SEGMENT;
|
||||
|
|
@ -363,8 +361,7 @@ static int enh_desc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
|
|||
if (rx_coe_type == STMMAC_RX_COE_TYPE1)
|
||||
csum = 2;
|
||||
|
||||
return (((le32_to_cpu(p->des0) & RDES0_FRAME_LEN_MASK)
|
||||
>> RDES0_FRAME_LEN_SHIFT) - csum);
|
||||
return FIELD_GET(RDES0_FRAME_LEN_MASK, le32_to_cpu(p->des0)) - csum;
|
||||
}
|
||||
|
||||
static void enh_desc_enable_tx_timestamp(struct dma_desc *p)
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@
|
|||
static int ndesc_get_tx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p, void __iomem *ioaddr)
|
||||
{
|
||||
unsigned int tdes0 = le32_to_cpu(p->des0);
|
||||
unsigned int tdes1 = le32_to_cpu(p->des1);
|
||||
u32 tdes0 = le32_to_cpu(p->des0);
|
||||
u32 tdes1 = le32_to_cpu(p->des1);
|
||||
int ret = tx_done;
|
||||
|
||||
/* Get tx owner first */
|
||||
|
|
@ -40,10 +40,8 @@ static int ndesc_get_tx_status(struct stmmac_extra_stats *x,
|
|||
if (unlikely((tdes0 & TDES0_EXCESSIVE_DEFERRAL) ||
|
||||
(tdes0 & TDES0_EXCESSIVE_COLLISIONS) ||
|
||||
(tdes0 & TDES0_LATE_COLLISION))) {
|
||||
unsigned int collisions;
|
||||
|
||||
collisions = (tdes0 & TDES0_COLLISION_COUNT_MASK) >> 3;
|
||||
x->tx_collision += collisions;
|
||||
x->tx_collision +=
|
||||
FIELD_GET(TDES0_COLLISION_COUNT_MASK, tdes0);
|
||||
}
|
||||
ret = tx_err;
|
||||
}
|
||||
|
|
@ -69,8 +67,8 @@ static int ndesc_get_tx_len(struct dma_desc *p)
|
|||
static int ndesc_get_rx_status(struct stmmac_extra_stats *x,
|
||||
struct dma_desc *p)
|
||||
{
|
||||
u32 rdes0 = le32_to_cpu(p->des0);
|
||||
int ret = good_frame;
|
||||
unsigned int rdes0 = le32_to_cpu(p->des0);
|
||||
|
||||
if (unlikely(rdes0 & RDES0_OWN))
|
||||
return dma_own;
|
||||
|
|
@ -178,17 +176,15 @@ static void ndesc_prepare_tx_desc(struct dma_desc *p, int is_fs, int len,
|
|||
bool csum_flag, int mode, bool tx_own,
|
||||
bool ls, unsigned int tot_pkt_len)
|
||||
{
|
||||
unsigned int tdes1 = le32_to_cpu(p->des1);
|
||||
u32 tdes1 = le32_to_cpu(p->des1);
|
||||
|
||||
if (is_fs)
|
||||
tdes1 |= TDES1_FIRST_SEGMENT;
|
||||
else
|
||||
tdes1 &= ~TDES1_FIRST_SEGMENT;
|
||||
|
||||
if (likely(csum_flag))
|
||||
tdes1 |= (TX_CIC_FULL) << TDES1_CHECKSUM_INSERTION_SHIFT;
|
||||
else
|
||||
tdes1 &= ~(TX_CIC_FULL << TDES1_CHECKSUM_INSERTION_SHIFT);
|
||||
tdes1 = u32_replace_bits(tdes1, csum_flag ? TX_CIC_FULL : 0,
|
||||
TDES1_CHECKSUM_INSERTION_MASK);
|
||||
|
||||
if (ls)
|
||||
tdes1 |= TDES1_LAST_SEGMENT;
|
||||
|
|
@ -222,10 +218,7 @@ static int ndesc_get_rx_frame_len(struct dma_desc *p, int rx_coe_type)
|
|||
if (rx_coe_type == STMMAC_RX_COE_TYPE1)
|
||||
csum = 2;
|
||||
|
||||
return (((le32_to_cpu(p->des0) & RDES0_FRAME_LEN_MASK)
|
||||
>> RDES0_FRAME_LEN_SHIFT) -
|
||||
csum);
|
||||
|
||||
return FIELD_GET(RDES0_FRAME_LEN_MASK, le32_to_cpu(p->des0)) - csum;
|
||||
}
|
||||
|
||||
static void ndesc_enable_tx_timestamp(struct dma_desc *p)
|
||||
|
|
|
|||
Loading…
Reference in New Issue