--- v5
+++ v3
@@ -13,11 +13,11 @@
drivers/net/ethernet/engleder/tsnep.h | 171 +++
drivers/net/ethernet/engleder/tsnep_ethtool.c | 288 ++++
drivers/net/ethernet/engleder/tsnep_hw.h | 230 +++
- drivers/net/ethernet/engleder/tsnep_main.c | 1255 +++++++++++++++++
+ drivers/net/ethernet/engleder/tsnep_main.c | 1252 +++++++++++++++++
drivers/net/ethernet/engleder/tsnep_ptp.c | 221 +++
- drivers/net/ethernet/engleder/tsnep_tc.c | 443 ++++++
+ drivers/net/ethernet/engleder/tsnep_tc.c | 442 ++++++
drivers/net/ethernet/engleder/tsnep_test.c | 811 +++++++++++
- 11 files changed, 3459 insertions(+)
+ 11 files changed, 3455 insertions(+)
create mode 100644 drivers/net/ethernet/engleder/Kconfig
create mode 100644 drivers/net/ethernet/engleder/Makefile
create mode 100644 drivers/net/ethernet/engleder/tsnep.h
@@ -104,7 +104,7 @@
+ tsnep_test.o
diff --git a/drivers/net/ethernet/engleder/tsnep.h b/drivers/net/ethernet/engleder/tsnep.h
new file mode 100644
-index 000000000000..edd6fa7dafd7
+index 000000000000..aa7d51d80ff1
--- /dev/null
+++ b/drivers/net/ethernet/engleder/tsnep.h
@@ -0,0 +1,171 @@
@@ -134,7 +134,7 @@
+#define TSNEP_QUEUES 1
+
+struct tsnep_gcl {
-+ void __iomem *addr;
++ void *addr;
+
+ u64 base_time;
+ u64 cycle_time;
@@ -164,7 +164,7 @@
+
+struct tsnep_tx {
+ struct tsnep_adapter *adapter;
-+ void __iomem *addr;
++ void *addr;
+
+ void *page[TSNEP_RING_PAGE_COUNT];
+ dma_addr_t page_dma[TSNEP_RING_PAGE_COUNT];
@@ -196,7 +196,7 @@
+
+struct tsnep_rx {
+ struct tsnep_adapter *adapter;
-+ void __iomem *addr;
++ void *addr;
+
+ void *page[TSNEP_RING_PAGE_COUNT];
+ dma_addr_t page_dma[TSNEP_RING_PAGE_COUNT];
@@ -234,7 +234,7 @@
+
+ struct platform_device *pdev;
+ struct device *dmadev;
-+ void __iomem *addr;
++ void *addr;
+ unsigned long size;
+ int irq;
+
@@ -575,7 +575,7 @@
+};
diff --git a/drivers/net/ethernet/engleder/tsnep_hw.h b/drivers/net/ethernet/engleder/tsnep_hw.h
new file mode 100644
-index 000000000000..71cc8577d640
+index 000000000000..1a9327a23510
--- /dev/null
+++ b/drivers/net/ethernet/engleder/tsnep_hw.h
@@ -0,0 +1,230 @@
@@ -756,11 +756,11 @@
+
+/* tsnep TX descriptor */
+struct tsnep_tx_desc {
-+ __le32 properties;
-+ __le32 more_properties;
-+ __le32 reserved[2];
-+ __le64 next;
-+ __le64 tx;
++ u32 properties;
++ u32 more_properties;
++ u32 reserved[2];
++ u64 next;
++ u64 tx;
+};
+
+#define TSNEP_TX_DESC_OWNER_MASK 0xE0000000
@@ -770,11 +770,11 @@
+
+/* tsnep TX descriptor writeback */
+struct tsnep_tx_desc_wb {
-+ __le32 properties;
-+ __le32 reserved1[3];
-+ __le64 timestamp;
-+ __le32 dma_delay;
-+ __le32 reserved2;
++ u32 properties;
++ u32 reserved1[3];
++ u64 timestamp;
++ u32 dma_delay;
++ u32 reserved2;
+};
+
+#define TSNEP_TX_DESC_UNDERRUN_ERROR_FLAG 0x00010000
@@ -786,24 +786,24 @@
+
+/* tsnep RX descriptor */
+struct tsnep_rx_desc {
-+ __le32 properties;
-+ __le32 reserved[3];
-+ __le64 next;
-+ __le64 rx;
++ u32 properties;
++ u32 reserved[3];
++ u64 next;
++ u64 rx;
+};
+
+#define TSNEP_RX_DESC_BUFFER_SIZE_MASK 0x00003FFC
+
+/* tsnep RX descriptor writeback */
+struct tsnep_rx_desc_wb {
-+ __le32 properties;
-+ __le32 reserved[7];
++ u32 properties;
++ u32 reserved[7];
+};
+
+/* tsnep RX inline meta */
+struct tsnep_rx_inline {
-+ __le64 reserved;
-+ __le64 timestamp;
++ u64 reserved;
++ u64 timestamp;
+};
+
+#define TSNEP_RX_INLINE_METADATA_SIZE (sizeof(struct tsnep_rx_inline))
@@ -811,10 +811,10 @@
+#endif /* _TSNEP_HW_H */
diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c
new file mode 100644
-index 000000000000..86d488821a65
+index 000000000000..27e5e1055027
--- /dev/null
+++ b/drivers/net/ethernet/engleder/tsnep_main.c
-@@ -0,0 +1,1255 @@
+@@ -0,0 +1,1252 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2021 Gerhard Engleder <gerhard@engleder-embedded.com> */
+
@@ -1048,7 +1048,7 @@
+ for (i = 0; i < TSNEP_RING_SIZE; i++) {
+ entry = &tx->entry[i];
+ next_entry = &tx->entry[(i + 1) % TSNEP_RING_SIZE];
-+ entry->desc->next = __cpu_to_le64(next_entry->desc_dma);
++ entry->desc->next = next_entry->desc_dma;
+ }
+
+ return 0;
@@ -1105,12 +1105,11 @@
+ TSNEP_DESC_OWNER_COUNTER_MASK;
+ if (entry->owner_user_flag)
+ entry->properties |= TSNEP_TX_DESC_OWNER_USER_FLAG;
-+ entry->desc->more_properties =
-+ __cpu_to_le32(entry->len & TSNEP_DESC_LENGTH_MASK);
++ entry->desc->more_properties = entry->len & TSNEP_DESC_LENGTH_MASK;
+
+ dma_wmb();
+
-+ entry->desc->properties = __cpu_to_le32(entry->properties);
++ entry->desc->properties = entry->properties;
+}
+
+static int tsnep_tx_desc_available(struct tsnep_tx *tx)
@@ -1148,7 +1147,7 @@
+ dma_unmap_len_set(entry, len, len);
+ dma_unmap_addr_set(entry, dma, dma);
+
-+ entry->desc->tx = __cpu_to_le64(dma);
++ entry->desc->tx = dma;
+ }
+
+ return 0;
@@ -1265,7 +1264,7 @@
+ break;
+
+ entry = &tx->entry[tx->read];
-+ if ((__le32_to_cpu(entry->desc_wb->properties) &
++ if ((entry->desc_wb->properties &
+ TSNEP_TX_DESC_OWNER_MASK) !=
+ (entry->properties & TSNEP_TX_DESC_OWNER_MASK))
+ break;
@@ -1279,14 +1278,13 @@
+ tsnep_tx_unmap(tx, count);
+
+ if ((skb_shinfo(entry->skb)->tx_flags & SKBTX_IN_PROGRESS) &&
-+ (__le32_to_cpu(entry->desc_wb->properties) &
++ (entry->desc_wb->properties &
+ TSNEP_DESC_EXTENDED_WRITEBACK_FLAG)) {
+ struct skb_shared_hwtstamps hwtstamps;
-+ u64 timestamp =
-+ __le64_to_cpu(entry->desc_wb->timestamp);
+
+ memset(&hwtstamps, 0, sizeof(hwtstamps));
-+ hwtstamps.hwtstamp = ns_to_ktime(timestamp);
++ hwtstamps.hwtstamp =
++ ns_to_ktime(entry->desc_wb->timestamp);
+
+ skb_tstamp_tx(entry->skb, &hwtstamps);
+ }
@@ -1313,7 +1311,7 @@
+ return (budget != 0);
+}
+
-+static int tsnep_tx_open(struct tsnep_adapter *adapter, void __iomem *addr,
++static int tsnep_tx_open(struct tsnep_adapter *adapter, void *addr,
+ struct tsnep_tx *tx)
+{
+ dma_addr_t dma;
@@ -1400,7 +1398,7 @@
+ entry->skb = skb;
+ dma_unmap_len_set(entry, len, RX_SKB_LENGTH);
+ dma_unmap_addr_set(entry, dma, dma);
-+ entry->desc->rx = __cpu_to_le64(dma);
++ entry->desc->rx = dma;
+
+ return 0;
+}
@@ -1433,7 +1431,7 @@
+ for (i = 0; i < TSNEP_RING_SIZE; i++) {
+ entry = &rx->entry[i];
+ next_entry = &rx->entry[(i + 1) % TSNEP_RING_SIZE];
-+ entry->desc->next = __cpu_to_le64(next_entry->desc_dma);
++ entry->desc->next = next_entry->desc_dma;
+
+ retval = tsnep_rx_alloc_and_map_skb(rx, entry);
+ if (retval)
@@ -1468,7 +1466,7 @@
+
+ dma_wmb();
+
-+ entry->desc->properties = __cpu_to_le32(entry->properties);
++ entry->desc->properties = entry->properties;
+}
+
+static int tsnep_rx_poll(struct tsnep_rx *rx, struct napi_struct *napi,
@@ -1485,7 +1483,7 @@
+
+ while (likely(done < budget)) {
+ entry = &rx->entry[rx->read];
-+ if ((__le32_to_cpu(entry->desc_wb->properties) &
++ if ((entry->desc_wb->properties &
+ TSNEP_DESC_OWNER_COUNTER_MASK) !=
+ (entry->properties & TSNEP_DESC_OWNER_COUNTER_MASK))
+ break;
@@ -1503,7 +1501,7 @@
+ if (!retval) {
+ dma_unmap_single(dmadev, dma, len, DMA_FROM_DEVICE);
+
-+ length = __le32_to_cpu(entry->desc_wb->properties) &
++ length = entry->desc_wb->properties &
+ TSNEP_DESC_LENGTH_MASK;
+ skb_put(skb, length - ETH_FCS_LEN);
+ if (rx->adapter->hwtstamp_config.rx_filter ==
@@ -1512,11 +1510,10 @@
+ skb_hwtstamps(skb);
+ struct tsnep_rx_inline *rx_inline =
+ (struct tsnep_rx_inline *)skb->data;
-+ u64 timestamp =
-+ __le64_to_cpu(rx_inline->timestamp);
+
+ memset(hwtstamps, 0, sizeof(*hwtstamps));
-+ hwtstamps->hwtstamp = ns_to_ktime(timestamp);
++ hwtstamps->hwtstamp =
++ ns_to_ktime(rx_inline->timestamp);
+ }
+ skb_pull(skb, TSNEP_RX_INLINE_METADATA_SIZE);
+ skb->protocol = eth_type_trans(skb,
@@ -1542,7 +1539,7 @@
+ return done;
+}
+
-+static int tsnep_rx_open(struct tsnep_adapter *adapter, void __iomem *addr,
++static int tsnep_rx_open(struct tsnep_adapter *adapter, void *addr,
+ struct tsnep_rx *rx)
+{
+ dma_addr_t dma;
@@ -1613,7 +1610,7 @@
+{
+ struct tsnep_adapter *adapter = netdev_priv(netdev);
+ int i;
-+ void __iomem *addr;
++ void *addr;
+ int tx_queue_index = 0;
+ int rx_queue_index = 0;
+ int retval;
@@ -2299,10 +2296,10 @@
+}
diff --git a/drivers/net/ethernet/engleder/tsnep_tc.c b/drivers/net/ethernet/engleder/tsnep_tc.c
new file mode 100644
-index 000000000000..c4c6e1357317
+index 000000000000..2b88c1e2eb2c
--- /dev/null
+++ b/drivers/net/ethernet/engleder/tsnep_tc.c
-@@ -0,0 +1,443 @@
+@@ -0,0 +1,442 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2021 Gerhard Engleder <gerhard@engleder-embedded.com> */
+
@@ -2343,8 +2340,7 @@
+static void tsnep_write_gcl_operation(struct tsnep_gcl *gcl, int index,
+ u32 properties, u32 interval, bool flush)
+{
-+ void __iomem *addr = gcl->addr +
-+ sizeof(struct tsnep_gcl_operation) * index;
++ void *addr = gcl->addr + sizeof(struct tsnep_gcl_operation) * index;
+
+ gcl->operation[index].properties = properties;
+ gcl->operation[index].interval = interval;
@@ -2475,8 +2471,8 @@
+
+ /* optionally change to new list with additional operation in between */
+ if (insert) {
-+ void __iomem *addr = gcl->addr +
-+ sizeof(struct tsnep_gcl_operation) * index;
++ void *addr = gcl->addr +
++ sizeof(struct tsnep_gcl_operation) * index;
+
+ gcl->operation[index].properties |= TSNEP_GCL_INSERT;
+ iowrite32(gcl->operation[index].properties, addr);
@@ -2489,7 +2485,7 @@
+{
+ int i;
+ u32 mask = TSNEP_GCL_LAST | TSNEP_GCL_MASK;
-+ void __iomem *addr;
++ void *addr;
+
+ /* search for insert operation and reset properties */
+ for (i = 0; i < gcl->count; i++) {