Skip to content

Commit a317079

Browse files
committed
realtek: eth: rename ring steering bits
A network interface card (NIC) hardware ring of the Realtek Otto switch SoCs is nothing more than a list of pointers to the ring headers. I.E. address | content | comment --------+-----------+------------------------ x + 0 | pointer 0 | points to ring header 0 x + 4 | pointer 1 | points to ring header 1 ... x + 4*n | pointer n | points to ring header n Headers must be 4 byte aligend. So the lower two bits of the pointers are unused. Hardware designers desided to give them special meanings. - Bit 0: Owner of this ring entry, 1 = hardware, 0 = software - Bit 1: Wrap, 1 = last ring pointer, 0 = normal ring pointer The driver uses constant defines with slightly confusing naming. Replace OWN_CPU with OWN_HW to make clear what it is about. Align prefix and make the defines bitmasks for better readability. Link: openwrt/openwrt#23676 Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
1 parent ecdf250 commit a317079

1 file changed

Lines changed: 12 additions & 10 deletions

File tree

  • target/linux/realtek/files-6.18/drivers/net/ethernet

target/linux/realtek/files-6.18/drivers/net/ethernet/rtl838x_eth.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@
2626

2727
#include "rtl838x_eth.h"
2828

29+
#define RING_OWN_HW BIT(0)
30+
#define RING_WRAP BIT(1)
31+
2932
#define RTETH_SKB_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN)
30-
#define RTETH_OWN_CPU 1
3133
#define RTETH_RX_RING_SIZE 128
3234
#define RTETH_RX_RINGS 2
3335
#define RTETH_TX_RING_SIZE 16
@@ -39,7 +41,6 @@
3941
#define RX_TRUNCATE_EN_93XX BIT(6)
4042
#define RX_TRUNCATE_EN_83XX BIT(4)
4143
#define TX_PAD_EN_838X BIT(5)
42-
#define WRAP 0x2
4344
#define RING_BUFFER 1600
4445

4546
/* Define page pool that holds 2KB fragments in 4KB pages and has 8 safety pages */
@@ -681,10 +682,10 @@ static int rteth_setup_ring_buffer(struct rteth_ctrl *ctrl)
681682
sizeof(struct rteth_rx) * r +
682683
offsetof(struct rteth_rx, packet) +
683684
sizeof(struct rteth_packet) * i +
684-
RTETH_OWN_CPU;
685+
RING_OWN_HW;
685686
}
686687

687-
ctrl->rx_data[r].ring[RTETH_RX_RING_SIZE - 1] |= WRAP;
688+
ctrl->rx_data[r].ring[RTETH_RX_RING_SIZE - 1] |= RING_WRAP;
688689
ctrl->rx_data[r].slot = 0;
689690
}
690691

@@ -697,7 +698,7 @@ static int rteth_setup_ring_buffer(struct rteth_ctrl *ctrl)
697698
sizeof(struct rteth_packet) * i;
698699
}
699700

700-
ctrl->tx_data[r].ring[RTETH_TX_RING_SIZE - 1] |= WRAP;
701+
ctrl->tx_data[r].ring[RTETH_TX_RING_SIZE - 1] |= RING_WRAP;
701702
ctrl->tx_data[r].slot = 0;
702703
}
703704

@@ -714,7 +715,8 @@ static void rteth_839x_setup_notify_ring_buffer(struct rteth_ctrl *ctrl)
714715
struct notify_b *b = ctrl->membase;
715716

716717
for (int i = 0; i < NOTIFY_BLOCKS; i++)
717-
b->ring[i] = KSEG1ADDR(&b->blocks[i]) | 1 | (i == (NOTIFY_BLOCKS - 1) ? WRAP : 0);
718+
b->ring[i] = KSEG1ADDR(&b->blocks[i]) | RING_OWN_HW;
719+
b->ring[NOTIFY_BLOCKS - 1] |= RING_WRAP;
718720

719721
regmap_write(ctrl->map, RTL839X_DMA_IF_NBUF_BASE_DESC_ADDR_CTRL, (u32)b->ring);
720722
regmap_update_bits(ctrl->map, RTL839X_L2_NOTIFICATION_CTRL, 0x3ff << 2, 100 << 2);
@@ -1031,7 +1033,7 @@ static int rteth_start_xmit(struct sk_buff *skb, struct net_device *dev)
10311033
packet = &ctrl->tx_data[ring].packet[slot];
10321034
packet_dma = ctrl->tx_data[ring].ring[slot];
10331035

1034-
if (unlikely(packet_dma & RTETH_OWN_CPU)) {
1036+
if (unlikely(packet_dma & RING_OWN_HW)) {
10351037
netif_stop_subqueue(dev, ring);
10361038
if (net_ratelimit())
10371039
netdev_warn(dev, "tx ring %d busy, waiting for slot %d\n", ring, slot);
@@ -1061,7 +1063,7 @@ static int rteth_start_xmit(struct sk_buff *skb, struct net_device *dev)
10611063
packet->len = len;
10621064
packet->skb = skb;
10631065
dma_wmb();
1064-
ctrl->tx_data[ring].ring[slot] = packet_dma | RTETH_OWN_CPU;
1066+
ctrl->tx_data[ring].ring[slot] = packet_dma | RING_OWN_HW;
10651067
ctrl->tx_data[ring].slot = (slot + 1) % RTETH_TX_RING_SIZE;
10661068
wmb();
10671069

@@ -1103,7 +1105,7 @@ static int rteth_hw_receive(struct net_device *dev, int ring, int budget)
11031105
packet_dma = ctrl->rx_data[ring].ring[slot];
11041106
rmb();
11051107

1106-
if (packet_dma & RTETH_OWN_CPU)
1108+
if (packet_dma & RING_OWN_HW)
11071109
break;
11081110

11091111
packet = &ctrl->rx_data[ring].packet[slot];
@@ -1170,7 +1172,7 @@ static int rteth_hw_receive(struct net_device *dev, int ring, int budget)
11701172

11711173
recycle:
11721174
dma_wmb();
1173-
ctrl->rx_data[ring].ring[slot] = packet_dma | RTETH_OWN_CPU;
1175+
ctrl->rx_data[ring].ring[slot] = packet_dma | RING_OWN_HW;
11741176
ctrl->rx_data[ring].slot = (slot + 1) % RTETH_RX_RING_SIZE;
11751177
work_done++;
11761178
}

0 commit comments

Comments
 (0)