All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 net-next 0/9] net: Korina improvements
@ 2021-04-14 15:29 Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 1/9] net: korina: Fix MDIO functions Thomas Bogendoerfer
                   ` (9 more replies)
  0 siblings, 10 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, linux-mips, linux-kernel, netdev

While converting Mikrotik RB532 support to use device tree I stumbled
over the korina ethernet driver, which used way too many MIPS specific
hacks. This series cleans this all up and adds support for device tree.

Changes in v2:
  - added device tree support to get rid of idt_cpu_freq
  - fixed compile test on 64bit archs
  - fixed descriptor current address handling by storing/using mapped
    dma addresses (dma controller modifies current address)

Thomas Bogendoerfer (9):
  net: korina: Fix MDIO functions
  net: korina: Use devres functions
  net: korina: Remove not needed cache flushes
  net: korina: Remove nested helpers
  net: korina: Use DMA API
  net: korina: Only pass mac address via platform data
  net: korina: Add support for device tree
  net: korina: Get mdio input clock via common clock framework
  net: korina: Make driver COMPILE_TESTable

 arch/mips/rb532/devices.c     |   5 +-
 drivers/net/ethernet/Kconfig  |   3 +-
 drivers/net/ethernet/korina.c | 603 ++++++++++++++++++++++++----------
 3 files changed, 439 insertions(+), 172 deletions(-)

-- 
2.29.2


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 1/9] net: korina: Fix MDIO functions
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 2/9] net: korina: Use devres functions Thomas Bogendoerfer
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

Fixed MDIO functions to work reliable and not just by accident.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/Kconfig  |  1 +
 drivers/net/ethernet/korina.c | 57 +++++++++++++++++++++++------------
 2 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
index ad04660b97b8..c059b4bd3f23 100644
--- a/drivers/net/ethernet/Kconfig
+++ b/drivers/net/ethernet/Kconfig
@@ -98,6 +98,7 @@ config JME
 config KORINA
 	tristate "Korina (IDT RC32434) Ethernet support"
 	depends on MIKROTIK_RB532
+	select MII
 	help
 	  If you have a Mikrotik RouterBoard 500 or IDT RC32434
 	  based system say Y. Otherwise say N.
diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index 925161959b9b..2266b18c1377 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -137,7 +137,6 @@ struct korina_private {
 	struct mii_if_info mii_if;
 	struct work_struct restart_task;
 	struct net_device *dev;
-	int phy_addr;
 };
 
 extern unsigned int idt_cpu_freq;
@@ -292,32 +291,50 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 	return NETDEV_TX_OK;
 }
 
-static int mdio_read(struct net_device *dev, int mii_id, int reg)
+static int korina_mdio_wait(struct korina_private *lp)
+{
+	int timeout = 1000;
+
+	while ((readl(&lp->eth_regs->miimind) & 1) && timeout-- > 0)
+		udelay(1);
+
+	if (timeout <= 0)
+		return -1;
+
+	return 0;
+}
+
+static int korina_mdio_read(struct net_device *dev, int phy, int reg)
 {
 	struct korina_private *lp = netdev_priv(dev);
 	int ret;
 
-	mii_id = ((lp->rx_irq == 0x2c ? 1 : 0) << 8);
+	if (korina_mdio_wait(lp))
+		return -1;
 
-	writel(0, &lp->eth_regs->miimcfg);
-	writel(0, &lp->eth_regs->miimcmd);
-	writel(mii_id | reg, &lp->eth_regs->miimaddr);
-	writel(ETH_MII_CMD_SCN, &lp->eth_regs->miimcmd);
+	writel(phy << 8 | reg, &lp->eth_regs->miimaddr);
+	writel(1, &lp->eth_regs->miimcmd);
 
-	ret = (int)(readl(&lp->eth_regs->miimrdd));
+	if (korina_mdio_wait(lp))
+		return -1;
+
+	if (readl(&lp->eth_regs->miimind) & 4)
+		return -1;
+
+	ret = readl(&lp->eth_regs->miimrdd);
+	writel(0, &lp->eth_regs->miimcmd);
 	return ret;
 }
 
-static void mdio_write(struct net_device *dev, int mii_id, int reg, int val)
+static void korina_mdio_write(struct net_device *dev, int phy, int reg, int val)
 {
 	struct korina_private *lp = netdev_priv(dev);
 
-	mii_id = ((lp->rx_irq == 0x2c ? 1 : 0) << 8);
+	if (korina_mdio_wait(lp))
+		return;
 
-	writel(0, &lp->eth_regs->miimcfg);
-	writel(1, &lp->eth_regs->miimcmd);
-	writel(mii_id | reg, &lp->eth_regs->miimaddr);
-	writel(ETH_MII_CMD_SCN, &lp->eth_regs->miimcmd);
+	writel(0, &lp->eth_regs->miimcmd);
+	writel(phy << 8 | reg, &lp->eth_regs->miimaddr);
 	writel(val, &lp->eth_regs->miimwtd);
 }
 
@@ -643,7 +660,7 @@ static void korina_check_media(struct net_device *dev, unsigned int init_media)
 {
 	struct korina_private *lp = netdev_priv(dev);
 
-	mii_check_media(&lp->mii_if, 0, init_media);
+	mii_check_media(&lp->mii_if, 1, init_media);
 
 	if (lp->mii_if.full_duplex)
 		writel(readl(&lp->eth_regs->ethmac2) | ETH_MAC2_FD,
@@ -869,12 +886,15 @@ static int korina_init(struct net_device *dev)
 	 * Clock independent setting */
 	writel(((idt_cpu_freq) / MII_CLOCK + 1) & ~1,
 			&lp->eth_regs->ethmcp);
+	writel(0, &lp->eth_regs->miimcfg);
 
 	/* don't transmit until fifo contains 48b */
 	writel(48, &lp->eth_regs->ethfifott);
 
 	writel(ETH_MAC1_RE, &lp->eth_regs->ethmac1);
 
+	korina_check_media(dev, 1);
+
 	napi_enable(&lp->napi);
 	netif_start_queue(dev);
 
@@ -1089,11 +1109,10 @@ static int korina_probe(struct platform_device *pdev)
 	dev->watchdog_timeo = TX_TIMEOUT;
 	netif_napi_add(dev, &lp->napi, korina_poll, NAPI_POLL_WEIGHT);
 
-	lp->phy_addr = (((lp->rx_irq == 0x2c? 1:0) << 8) | 0x05);
 	lp->mii_if.dev = dev;
-	lp->mii_if.mdio_read = mdio_read;
-	lp->mii_if.mdio_write = mdio_write;
-	lp->mii_if.phy_id = lp->phy_addr;
+	lp->mii_if.mdio_read = korina_mdio_read;
+	lp->mii_if.mdio_write = korina_mdio_write;
+	lp->mii_if.phy_id = 1;
 	lp->mii_if.phy_id_mask = 0x1f;
 	lp->mii_if.reg_num_mask = 0x1f;
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 2/9] net: korina: Use devres functions
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 1/9] net: korina: Fix MDIO functions Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 3/9] net: korina: Remove not needed cache flushes Thomas Bogendoerfer
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

Simplify probe/remove code by using devm_ functions.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/korina.c | 64 ++++++++++++-----------------------
 1 file changed, 21 insertions(+), 43 deletions(-)

diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index 2266b18c1377..3a454f6214b0 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -104,9 +104,9 @@ enum chain_status {
 
 /* Information that need to be kept for each board. */
 struct korina_private {
-	struct eth_regs *eth_regs;
-	struct dma_reg *rx_dma_regs;
-	struct dma_reg *tx_dma_regs;
+	struct eth_regs __iomem *eth_regs;
+	struct dma_reg __iomem *rx_dma_regs;
+	struct dma_reg __iomem *tx_dma_regs;
 	struct dma_desc *td_ring; /* transmit descriptor ring */
 	struct dma_desc *rd_ring; /* receive descriptor ring  */
 
@@ -1045,10 +1045,10 @@ static int korina_probe(struct platform_device *pdev)
 	struct korina_device *bif = platform_get_drvdata(pdev);
 	struct korina_private *lp;
 	struct net_device *dev;
-	struct resource *r;
+	void __iomem *p;
 	int rc;
 
-	dev = alloc_etherdev(sizeof(struct korina_private));
+	dev = devm_alloc_etherdev(&pdev->dev, sizeof(struct korina_private));
 	if (!dev)
 		return -ENOMEM;
 
@@ -1061,36 +1061,30 @@ static int korina_probe(struct platform_device *pdev)
 	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
 	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
 
-	r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "korina_regs");
-	dev->base_addr = r->start;
-	lp->eth_regs = ioremap(r->start, resource_size(r));
-	if (!lp->eth_regs) {
+	p = devm_platform_ioremap_resource_byname(pdev, "korina_regs");
+	if (!p) {
 		printk(KERN_ERR DRV_NAME ": cannot remap registers\n");
-		rc = -ENXIO;
-		goto probe_err_out;
+		return -ENOMEM;
 	}
+	lp->eth_regs = p;
 
-	r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "korina_dma_rx");
-	lp->rx_dma_regs = ioremap(r->start, resource_size(r));
-	if (!lp->rx_dma_regs) {
+	p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_rx");
+	if (!p) {
 		printk(KERN_ERR DRV_NAME ": cannot remap Rx DMA registers\n");
-		rc = -ENXIO;
-		goto probe_err_dma_rx;
+		return -ENOMEM;
 	}
+	lp->rx_dma_regs = p;
 
-	r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "korina_dma_tx");
-	lp->tx_dma_regs = ioremap(r->start, resource_size(r));
-	if (!lp->tx_dma_regs) {
+	p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_tx");
+	if (!p) {
 		printk(KERN_ERR DRV_NAME ": cannot remap Tx DMA registers\n");
-		rc = -ENXIO;
-		goto probe_err_dma_tx;
+		return -ENOMEM;
 	}
+	lp->tx_dma_regs = p;
 
 	lp->td_ring = kmalloc(TD_RING_SIZE + RD_RING_SIZE, GFP_KERNEL);
-	if (!lp->td_ring) {
-		rc = -ENXIO;
-		goto probe_err_td_ring;
-	}
+	if (!lp->td_ring)
+		return -ENOMEM;
 
 	dma_cache_inv((unsigned long)(lp->td_ring),
 			TD_RING_SIZE + RD_RING_SIZE);
@@ -1120,7 +1114,8 @@ static int korina_probe(struct platform_device *pdev)
 	if (rc < 0) {
 		printk(KERN_ERR DRV_NAME
 			": cannot register net device: %d\n", rc);
-		goto probe_err_register;
+		kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
+		return rc;
 	}
 	timer_setup(&lp->media_check_timer, korina_poll_media, 0);
 
@@ -1128,20 +1123,7 @@ static int korina_probe(struct platform_device *pdev)
 
 	printk(KERN_INFO "%s: " DRV_NAME "-" DRV_VERSION " " DRV_RELDATE "\n",
 			dev->name);
-out:
 	return rc;
-
-probe_err_register:
-	kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
-probe_err_td_ring:
-	iounmap(lp->tx_dma_regs);
-probe_err_dma_tx:
-	iounmap(lp->rx_dma_regs);
-probe_err_dma_rx:
-	iounmap(lp->eth_regs);
-probe_err_out:
-	free_netdev(dev);
-	goto out;
 }
 
 static int korina_remove(struct platform_device *pdev)
@@ -1149,13 +1131,9 @@ static int korina_remove(struct platform_device *pdev)
 	struct korina_device *bif = platform_get_drvdata(pdev);
 	struct korina_private *lp = netdev_priv(bif->dev);
 
-	iounmap(lp->eth_regs);
-	iounmap(lp->rx_dma_regs);
-	iounmap(lp->tx_dma_regs);
 	kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
 
 	unregister_netdev(bif->dev);
-	free_netdev(bif->dev);
 
 	return 0;
 }
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 3/9] net: korina: Remove not needed cache flushes
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 1/9] net: korina: Fix MDIO functions Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 2/9] net: korina: Use devres functions Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 4/9] net: korina: Remove nested helpers Thomas Bogendoerfer
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

Descriptors are mapped uncached so there is no need to do any cache
handling for them.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/korina.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index 3a454f6214b0..b6dcbb6d5e05 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -230,7 +230,6 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 	dma_cache_wback((u32)skb->data, skb->len);
 
 	/* Setup the transmit descriptor. */
-	dma_cache_inv((u32) td, sizeof(*td));
 	td->ca = CPHYSADDR(skb->data);
 	chain_prev = (lp->tx_chain_tail - 1) & KORINA_TDS_MASK;
 	chain_next = (lp->tx_chain_tail + 1) & KORINA_TDS_MASK;
@@ -283,7 +282,6 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 			lp->tx_chain_tail = chain_next;
 		}
 	}
-	dma_cache_wback((u32) td, sizeof(*td));
 
 	netif_trans_update(dev);
 	spin_unlock_irqrestore(&lp->lock, flags);
@@ -374,8 +372,6 @@ static int korina_rx(struct net_device *dev, int limit)
 	u32 devcs, pkt_len, dmas;
 	int count;
 
-	dma_cache_inv((u32)rd, sizeof(*rd));
-
 	for (count = 0; count < limit; count++) {
 		skb = lp->rx_skb[lp->rx_next_done];
 		skb_new = NULL;
@@ -454,7 +450,6 @@ static int korina_rx(struct net_device *dev, int limit)
 			~DMA_DESC_COD;
 
 		lp->rx_next_done = (lp->rx_next_done + 1) & KORINA_RDS_MASK;
-		dma_cache_wback((u32)rd, sizeof(*rd));
 		rd = &lp->rd_ring[lp->rx_next_done];
 		writel(~DMA_STAT_DONE, &lp->rx_dma_regs->dmas);
 	}
@@ -469,7 +464,6 @@ static int korina_rx(struct net_device *dev, int limit)
 		rd->devcs = 0;
 		skb = lp->rx_skb[lp->rx_next_done];
 		rd->ca = CPHYSADDR(skb->data);
-		dma_cache_wback((u32)rd, sizeof(*rd));
 		korina_chain_rx(lp, rd);
 	}
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 4/9] net: korina: Remove nested helpers
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (2 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 3/9] net: korina: Remove not needed cache flushes Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 5/9] net: korina: Use DMA API Thomas Bogendoerfer
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

Remove helpers, which are only used in one call site.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/korina.c | 28 +++-------------------------
 1 file changed, 3 insertions(+), 25 deletions(-)

diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index b6dcbb6d5e05..728c4baa3eee 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -141,12 +141,6 @@ struct korina_private {
 
 extern unsigned int idt_cpu_freq;
 
-static inline void korina_start_dma(struct dma_reg *ch, u32 dma_addr)
-{
-	writel(0, &ch->dmandptr);
-	writel(dma_addr, &ch->dmadptr);
-}
-
 static inline void korina_abort_dma(struct net_device *dev,
 					struct dma_reg *ch)
 {
@@ -163,11 +157,6 @@ static inline void korina_abort_dma(struct net_device *dev,
 	writel(0, &ch->dmandptr);
 }
 
-static inline void korina_chain_dma(struct dma_reg *ch, u32 dma_addr)
-{
-	writel(dma_addr, &ch->dmandptr);
-}
-
 static void korina_abort_tx(struct net_device *dev)
 {
 	struct korina_private *lp = netdev_priv(dev);
@@ -182,18 +171,6 @@ static void korina_abort_rx(struct net_device *dev)
 	korina_abort_dma(dev, lp->rx_dma_regs);
 }
 
-static void korina_start_rx(struct korina_private *lp,
-					struct dma_desc *rd)
-{
-	korina_start_dma(lp->rx_dma_regs, CPHYSADDR(rd));
-}
-
-static void korina_chain_rx(struct korina_private *lp,
-					struct dma_desc *rd)
-{
-	korina_chain_dma(lp->rx_dma_regs, CPHYSADDR(rd));
-}
-
 /* transmit packet */
 static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 {
@@ -464,7 +441,7 @@ static int korina_rx(struct net_device *dev, int limit)
 		rd->devcs = 0;
 		skb = lp->rx_skb[lp->rx_next_done];
 		rd->ca = CPHYSADDR(skb->data);
-		korina_chain_rx(lp, rd);
+		writel(CPHYSADDR(rd), &lp->rx_dma_regs->dmandptr);
 	}
 
 	return count;
@@ -841,7 +818,8 @@ static int korina_init(struct net_device *dev)
 
 	writel(0, &lp->rx_dma_regs->dmas);
 	/* Start Rx DMA */
-	korina_start_rx(lp, &lp->rd_ring[0]);
+	writel(0, &lp->rx_dma_regs->dmandptr);
+	writel(CPHYSADDR(&lp->rd_ring[0]), &lp->rx_dma_regs->dmadptr);
 
 	writel(readl(&lp->tx_dma_regs->dmasm) &
 			~(DMA_STAT_FINI | DMA_STAT_ERR),
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 5/9] net: korina: Use DMA API
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (3 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 4/9] net: korina: Remove nested helpers Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 6/9] net: korina: Only pass mac address via platform data Thomas Bogendoerfer
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

Instead of messing with MIPS specific macros use DMA API for mapping
descriptors and skbs.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/korina.c | 158 +++++++++++++++++++++-------------
 1 file changed, 98 insertions(+), 60 deletions(-)

diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index 728c4baa3eee..5e0fd9058701 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -109,10 +109,15 @@ struct korina_private {
 	struct dma_reg __iomem *tx_dma_regs;
 	struct dma_desc *td_ring; /* transmit descriptor ring */
 	struct dma_desc *rd_ring; /* receive descriptor ring  */
+	dma_addr_t td_dma;
+	dma_addr_t rd_dma;
 
 	struct sk_buff *tx_skb[KORINA_NUM_TDS];
 	struct sk_buff *rx_skb[KORINA_NUM_RDS];
 
+	dma_addr_t rx_skb_dma[KORINA_NUM_RDS];
+	dma_addr_t tx_skb_dma[KORINA_NUM_TDS];
+
 	int rx_next_done;
 	int rx_chain_head;
 	int rx_chain_tail;
@@ -137,10 +142,21 @@ struct korina_private {
 	struct mii_if_info mii_if;
 	struct work_struct restart_task;
 	struct net_device *dev;
+	struct device *dmadev;
 };
 
 extern unsigned int idt_cpu_freq;
 
+static dma_addr_t korina_tx_dma(struct korina_private *lp, int idx)
+{
+	return lp->td_dma + (idx * sizeof(struct dma_desc));
+}
+
+static dma_addr_t korina_rx_dma(struct korina_private *lp, int idx)
+{
+	return lp->rd_dma + (idx * sizeof(struct dma_desc));
+}
+
 static inline void korina_abort_dma(struct net_device *dev,
 					struct dma_reg *ch)
 {
@@ -175,14 +191,17 @@ static void korina_abort_rx(struct net_device *dev)
 static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 {
 	struct korina_private *lp = netdev_priv(dev);
-	unsigned long flags;
-	u32 length;
 	u32 chain_prev, chain_next;
+	unsigned long flags;
 	struct dma_desc *td;
+	dma_addr_t ca;
+	u32 length;
+	int idx;
 
 	spin_lock_irqsave(&lp->lock, flags);
 
-	td = &lp->td_ring[lp->tx_chain_tail];
+	idx = lp->tx_chain_tail;
+	td = &lp->td_ring[idx];
 
 	/* stop queue when full, drop pkts if queue already full */
 	if (lp->tx_count >= (KORINA_NUM_TDS - 2)) {
@@ -190,26 +209,26 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 
 		if (lp->tx_count == (KORINA_NUM_TDS - 2))
 			netif_stop_queue(dev);
-		else {
-			dev->stats.tx_dropped++;
-			dev_kfree_skb_any(skb);
-			spin_unlock_irqrestore(&lp->lock, flags);
-
-			return NETDEV_TX_OK;
-		}
+		else
+			goto drop_packet;
 	}
 
 	lp->tx_count++;
 
-	lp->tx_skb[lp->tx_chain_tail] = skb;
+	lp->tx_skb[idx] = skb;
 
 	length = skb->len;
-	dma_cache_wback((u32)skb->data, skb->len);
 
 	/* Setup the transmit descriptor. */
-	td->ca = CPHYSADDR(skb->data);
-	chain_prev = (lp->tx_chain_tail - 1) & KORINA_TDS_MASK;
-	chain_next = (lp->tx_chain_tail + 1) & KORINA_TDS_MASK;
+	ca = dma_map_single(lp->dmadev, skb->data, length, DMA_TO_DEVICE);
+	if (dma_mapping_error(lp->dmadev, ca))
+		goto drop_packet;
+
+	lp->tx_skb_dma[idx] = ca;
+	td->ca = ca;
+
+	chain_prev = (idx - 1) & KORINA_TDS_MASK;
+	chain_next = (idx + 1) & KORINA_TDS_MASK;
 
 	if (readl(&(lp->tx_dma_regs->dmandptr)) == 0) {
 		if (lp->tx_chain_status == desc_empty) {
@@ -219,8 +238,8 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 			/* Move tail */
 			lp->tx_chain_tail = chain_next;
 			/* Write to NDPTR */
-			writel(CPHYSADDR(&lp->td_ring[lp->tx_chain_head]),
-					&lp->tx_dma_regs->dmandptr);
+			writel(korina_tx_dma(lp, lp->tx_chain_head),
+			       &lp->tx_dma_regs->dmandptr);
 			/* Move head to tail */
 			lp->tx_chain_head = lp->tx_chain_tail;
 		} else {
@@ -231,12 +250,12 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 			lp->td_ring[chain_prev].control &=
 					~DMA_DESC_COF;
 			/* Link to prev */
-			lp->td_ring[chain_prev].link =  CPHYSADDR(td);
+			lp->td_ring[chain_prev].link = korina_tx_dma(lp, idx);
 			/* Move tail */
 			lp->tx_chain_tail = chain_next;
 			/* Write to NDPTR */
-			writel(CPHYSADDR(&lp->td_ring[lp->tx_chain_head]),
-					&(lp->tx_dma_regs->dmandptr));
+			writel(korina_tx_dma(lp, lp->tx_chain_head),
+			       &lp->tx_dma_regs->dmandptr);
 			/* Move head to tail */
 			lp->tx_chain_head = lp->tx_chain_tail;
 			lp->tx_chain_status = desc_empty;
@@ -255,7 +274,7 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 					DMA_DESC_COF | DMA_DESC_IOF;
 			lp->td_ring[chain_prev].control &=
 					~DMA_DESC_COF;
-			lp->td_ring[chain_prev].link =  CPHYSADDR(td);
+			lp->td_ring[chain_prev].link = korina_tx_dma(lp, idx);
 			lp->tx_chain_tail = chain_next;
 		}
 	}
@@ -263,6 +282,13 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)
 	netif_trans_update(dev);
 	spin_unlock_irqrestore(&lp->lock, flags);
 
+	return NETDEV_TX_OK;
+
+drop_packet:
+	dev->stats.tx_dropped++;
+	dev_kfree_skb_any(skb);
+	spin_unlock_irqrestore(&lp->lock, flags);
+
 	return NETDEV_TX_OK;
 }
 
@@ -345,8 +371,8 @@ static int korina_rx(struct net_device *dev, int limit)
 	struct korina_private *lp = netdev_priv(dev);
 	struct dma_desc *rd = &lp->rd_ring[lp->rx_next_done];
 	struct sk_buff *skb, *skb_new;
-	u8 *pkt_buf;
 	u32 devcs, pkt_len, dmas;
+	dma_addr_t ca;
 	int count;
 
 	for (count = 0; count < limit; count++) {
@@ -382,20 +408,22 @@ static int korina_rx(struct net_device *dev, int limit)
 			goto next;
 		}
 
-		pkt_len = RCVPKT_LENGTH(devcs);
-
-		/* must be the (first and) last
-		 * descriptor then */
-		pkt_buf = (u8 *)lp->rx_skb[lp->rx_next_done]->data;
-
-		/* invalidate the cache */
-		dma_cache_inv((unsigned long)pkt_buf, pkt_len - 4);
-
 		/* Malloc up new buffer. */
 		skb_new = netdev_alloc_skb_ip_align(dev, KORINA_RBSIZE);
-
 		if (!skb_new)
 			break;
+
+		ca = dma_map_single(lp->dmadev, skb_new->data, KORINA_RBSIZE,
+				    DMA_FROM_DEVICE);
+		if (dma_mapping_error(lp->dmadev, ca)) {
+			dev_kfree_skb_any(skb_new);
+			break;
+		}
+
+		pkt_len = RCVPKT_LENGTH(devcs);
+		dma_unmap_single(lp->dmadev, lp->rx_skb_dma[lp->rx_next_done],
+				 pkt_len, DMA_FROM_DEVICE);
+
 		/* Do not count the CRC */
 		skb_put(skb, pkt_len - 4);
 		skb->protocol = eth_type_trans(skb, dev);
@@ -410,15 +438,13 @@ static int korina_rx(struct net_device *dev, int limit)
 			dev->stats.multicast++;
 
 		lp->rx_skb[lp->rx_next_done] = skb_new;
+		lp->rx_skb_dma[lp->rx_next_done] = ca;
 
 next:
 		rd->devcs = 0;
 
 		/* Restore descriptor's curr_addr */
-		if (skb_new)
-			rd->ca = CPHYSADDR(skb_new->data);
-		else
-			rd->ca = CPHYSADDR(skb->data);
+		rd->ca = lp->rx_skb_dma[lp->rx_next_done];
 
 		rd->control = DMA_COUNT(KORINA_RBSIZE) |
 			DMA_DESC_COD | DMA_DESC_IOD;
@@ -439,9 +465,9 @@ static int korina_rx(struct net_device *dev, int limit)
 
 		lp->dma_halt_cnt++;
 		rd->devcs = 0;
-		skb = lp->rx_skb[lp->rx_next_done];
-		rd->ca = CPHYSADDR(skb->data);
-		writel(CPHYSADDR(rd), &lp->rx_dma_regs->dmandptr);
+		rd->ca = lp->rx_skb_dma[lp->rx_next_done];
+		writel(korina_rx_dma(lp, rd - lp->rd_ring),
+		       &lp->rx_dma_regs->dmandptr);
 	}
 
 	return count;
@@ -564,6 +590,10 @@ static void korina_tx(struct net_device *dev)
 
 		/* We must always free the original skb */
 		if (lp->tx_skb[lp->tx_next_done]) {
+			dma_unmap_single(lp->dmadev,
+					 lp->tx_skb_dma[lp->tx_next_done],
+					 lp->tx_skb[lp->tx_next_done]->len,
+					 DMA_TO_DEVICE);
 			dev_kfree_skb_any(lp->tx_skb[lp->tx_next_done]);
 			lp->tx_skb[lp->tx_next_done] = NULL;
 		}
@@ -610,8 +640,8 @@ korina_tx_dma_interrupt(int irq, void *dev_id)
 
 		if (lp->tx_chain_status == desc_filled &&
 			(readl(&(lp->tx_dma_regs->dmandptr)) == 0)) {
-			writel(CPHYSADDR(&lp->td_ring[lp->tx_chain_head]),
-				&(lp->tx_dma_regs->dmandptr));
+			writel(korina_tx_dma(lp, lp->tx_chain_head),
+			       &lp->tx_dma_regs->dmandptr);
 			lp->tx_chain_status = desc_empty;
 			lp->tx_chain_head = lp->tx_chain_tail;
 			netif_trans_update(dev);
@@ -731,6 +761,7 @@ static int korina_alloc_ring(struct net_device *dev)
 {
 	struct korina_private *lp = netdev_priv(dev);
 	struct sk_buff *skb;
+	dma_addr_t ca;
 	int i;
 
 	/* Initialize the transmit descriptors */
@@ -753,13 +784,18 @@ static int korina_alloc_ring(struct net_device *dev)
 		lp->rd_ring[i].control = DMA_DESC_IOD |
 				DMA_COUNT(KORINA_RBSIZE);
 		lp->rd_ring[i].devcs = 0;
-		lp->rd_ring[i].ca = CPHYSADDR(skb->data);
-		lp->rd_ring[i].link = CPHYSADDR(&lp->rd_ring[i+1]);
+		ca = dma_map_single(lp->dmadev, skb->data, KORINA_RBSIZE,
+				    DMA_FROM_DEVICE);
+		if (dma_mapping_error(lp->dmadev, ca))
+			return -ENOMEM;
+		lp->rd_ring[i].ca = ca;
+		lp->rx_skb_dma[i] = ca;
+		lp->rd_ring[i].link = korina_rx_dma(lp, i + 1);
 	}
 
 	/* loop back receive descriptors, so the last
 	 * descriptor points to the first one */
-	lp->rd_ring[i - 1].link = CPHYSADDR(&lp->rd_ring[0]);
+	lp->rd_ring[i - 1].link = lp->rd_dma;
 	lp->rd_ring[i - 1].control |= DMA_DESC_COD;
 
 	lp->rx_next_done  = 0;
@@ -777,16 +813,22 @@ static void korina_free_ring(struct net_device *dev)
 
 	for (i = 0; i < KORINA_NUM_RDS; i++) {
 		lp->rd_ring[i].control = 0;
-		if (lp->rx_skb[i])
+		if (lp->rx_skb[i]) {
+			dma_unmap_single(lp->dmadev, lp->rx_skb_dma[i],
+					 KORINA_RBSIZE, DMA_FROM_DEVICE);
 			dev_kfree_skb_any(lp->rx_skb[i]);
-		lp->rx_skb[i] = NULL;
+			lp->rx_skb[i] = NULL;
+		}
 	}
 
 	for (i = 0; i < KORINA_NUM_TDS; i++) {
 		lp->td_ring[i].control = 0;
-		if (lp->tx_skb[i])
+		if (lp->tx_skb[i]) {
+			dma_unmap_single(lp->dmadev, lp->tx_skb_dma[i],
+					 lp->tx_skb[i]->len, DMA_TO_DEVICE);
 			dev_kfree_skb_any(lp->tx_skb[i]);
-		lp->tx_skb[i] = NULL;
+			lp->tx_skb[i] = NULL;
+		}
 	}
 }
 
@@ -819,7 +861,7 @@ static int korina_init(struct net_device *dev)
 	writel(0, &lp->rx_dma_regs->dmas);
 	/* Start Rx DMA */
 	writel(0, &lp->rx_dma_regs->dmandptr);
-	writel(CPHYSADDR(&lp->rd_ring[0]), &lp->rx_dma_regs->dmadptr);
+	writel(korina_rx_dma(lp, 0), &lp->rx_dma_regs->dmadptr);
 
 	writel(readl(&lp->tx_dma_regs->dmasm) &
 			~(DMA_STAT_FINI | DMA_STAT_ERR),
@@ -1054,21 +1096,21 @@ static int korina_probe(struct platform_device *pdev)
 	}
 	lp->tx_dma_regs = p;
 
-	lp->td_ring = kmalloc(TD_RING_SIZE + RD_RING_SIZE, GFP_KERNEL);
+	lp->td_ring = dmam_alloc_coherent(&pdev->dev, TD_RING_SIZE,
+					  &lp->td_dma, GFP_KERNEL);
 	if (!lp->td_ring)
 		return -ENOMEM;
 
-	dma_cache_inv((unsigned long)(lp->td_ring),
-			TD_RING_SIZE + RD_RING_SIZE);
-
-	/* now convert TD_RING pointer to KSEG1 */
-	lp->td_ring = (struct dma_desc *)KSEG1ADDR(lp->td_ring);
-	lp->rd_ring = &lp->td_ring[KORINA_NUM_TDS];
+	lp->rd_ring = dmam_alloc_coherent(&pdev->dev, RD_RING_SIZE,
+					  &lp->rd_dma, GFP_KERNEL);
+	if (!lp->rd_ring)
+		return -ENOMEM;
 
 	spin_lock_init(&lp->lock);
 	/* just use the rx dma irq */
 	dev->irq = lp->rx_irq;
 	lp->dev = dev;
+	lp->dmadev = &pdev->dev;
 
 	dev->netdev_ops = &korina_netdev_ops;
 	dev->ethtool_ops = &netdev_ethtool_ops;
@@ -1086,7 +1128,6 @@ static int korina_probe(struct platform_device *pdev)
 	if (rc < 0) {
 		printk(KERN_ERR DRV_NAME
 			": cannot register net device: %d\n", rc);
-		kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
 		return rc;
 	}
 	timer_setup(&lp->media_check_timer, korina_poll_media, 0);
@@ -1101,9 +1142,6 @@ static int korina_probe(struct platform_device *pdev)
 static int korina_remove(struct platform_device *pdev)
 {
 	struct korina_device *bif = platform_get_drvdata(pdev);
-	struct korina_private *lp = netdev_priv(bif->dev);
-
-	kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
 
 	unregister_netdev(bif->dev);
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 6/9] net: korina: Only pass mac address via platform data
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (4 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 5/9] net: korina: Use DMA API Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 7/9] net: korina: Add support for device tree Thomas Bogendoerfer
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, linux-mips, linux-kernel, netdev

Get rid of access to struct korina_device by just passing the mac
address via platform data and use drvdata for passing netdev to remove
function.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/mips/rb532/devices.c     |  5 +++--
 drivers/net/ethernet/korina.c | 11 ++++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c
index dd34f1b32b79..5fc3c8ee4f31 100644
--- a/arch/mips/rb532/devices.c
+++ b/arch/mips/rb532/devices.c
@@ -105,6 +105,9 @@ static struct platform_device korina_dev0 = {
 	.name = "korina",
 	.resource = korina_dev0_res,
 	.num_resources = ARRAY_SIZE(korina_dev0_res),
+	.dev = {
+		.platform_data = &korina_dev0_data.mac,
+	}
 };
 
 static struct resource cf_slot0_res[] = {
@@ -299,8 +302,6 @@ static int __init plat_setup_devices(void)
 	/* set the uart clock to the current cpu frequency */
 	rb532_uart_res[0].uartclk = idt_cpu_freq;
 
-	dev_set_drvdata(&korina_dev0.dev, &korina_dev0_data);
-
 	gpiod_add_lookup_table(&cf_slot0_gpio_table);
 	return platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs));
 }
diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index 5e0fd9058701..69c8baa87a6e 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -1056,7 +1056,7 @@ static const struct net_device_ops korina_netdev_ops = {
 
 static int korina_probe(struct platform_device *pdev)
 {
-	struct korina_device *bif = platform_get_drvdata(pdev);
+	u8 *mac_addr = dev_get_platdata(&pdev->dev);
 	struct korina_private *lp;
 	struct net_device *dev;
 	void __iomem *p;
@@ -1069,8 +1069,7 @@ static int korina_probe(struct platform_device *pdev)
 	SET_NETDEV_DEV(dev, &pdev->dev);
 	lp = netdev_priv(dev);
 
-	bif->dev = dev;
-	memcpy(dev->dev_addr, bif->mac, ETH_ALEN);
+	memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
 
 	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
 	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
@@ -1124,6 +1123,8 @@ static int korina_probe(struct platform_device *pdev)
 	lp->mii_if.phy_id_mask = 0x1f;
 	lp->mii_if.reg_num_mask = 0x1f;
 
+	platform_set_drvdata(pdev, dev);
+
 	rc = register_netdev(dev);
 	if (rc < 0) {
 		printk(KERN_ERR DRV_NAME
@@ -1141,9 +1142,9 @@ static int korina_probe(struct platform_device *pdev)
 
 static int korina_remove(struct platform_device *pdev)
 {
-	struct korina_device *bif = platform_get_drvdata(pdev);
+	struct net_device *dev = platform_get_drvdata(pdev);
 
-	unregister_netdev(bif->dev);
+	unregister_netdev(dev);
 
 	return 0;
 }
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 7/9] net: korina: Add support for device tree
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (5 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 6/9] net: korina: Only pass mac address via platform data Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 18:33   ` Florian Fainelli
  2021-04-14 15:29 ` [PATCH v2 net-next 8/9] net: korina: Get mdio input clock via common clock framework Thomas Bogendoerfer
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

If there is no mac address passed via platform data try to get it via
device tree and fall back to a random mac address, if all fail.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/korina.c | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index 69c8baa87a6e..c4590b2c65aa 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -42,6 +42,8 @@
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/in.h>
+#include <linux/of_device.h>
+#include <linux/of_net.h>
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/delay.h>
@@ -1056,7 +1058,7 @@ static const struct net_device_ops korina_netdev_ops = {
 
 static int korina_probe(struct platform_device *pdev)
 {
-	u8 *mac_addr = dev_get_platdata(&pdev->dev);
+	const u8 *mac_addr = dev_get_platdata(&pdev->dev);
 	struct korina_private *lp;
 	struct net_device *dev;
 	void __iomem *p;
@@ -1069,7 +1071,15 @@ static int korina_probe(struct platform_device *pdev)
 	SET_NETDEV_DEV(dev, &pdev->dev);
 	lp = netdev_priv(dev);
 
-	memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
+	if (mac_addr) {
+		ether_addr_copy(dev->dev_addr, mac_addr);
+	} else {
+		mac_addr = of_get_mac_address(pdev->dev.of_node);
+		if (!IS_ERR(mac_addr))
+			ether_addr_copy(dev->dev_addr, mac_addr);
+		else
+			eth_hw_addr_random(dev);
+	}
 
 	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
 	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
@@ -1149,8 +1159,21 @@ static int korina_remove(struct platform_device *pdev)
 	return 0;
 }
 
+#ifdef CONFIG_OF
+static const struct of_device_id korina_match[] = {
+	{
+		.compatible = "korina",
+	},
+	{ }
+};
+MODULE_DEVICE_TABLE(of, korina_match);
+#endif
+
 static struct platform_driver korina_driver = {
-	.driver.name = "korina",
+	.driver = {
+		.name = "korina",
+		.of_match_table = of_match_ptr(korina_match),
+	},
 	.probe = korina_probe,
 	.remove = korina_remove,
 };
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 8/9] net: korina: Get mdio input clock via common clock framework
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (6 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 7/9] net: korina: Add support for device tree Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-14 15:29 ` [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable Thomas Bogendoerfer
  2021-04-14 21:10 ` [PATCH v2 net-next 0/9] net: Korina improvements David Miller
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

With device tree clock is provided via CCF. For non device tree
use a maximum clock value to not overclock the PHY. The non device
tree usage will go away after platform is converted to DT.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/korina.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index c4590b2c65aa..df75dd5d1638 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -56,14 +56,13 @@
 #include <linux/ethtool.h>
 #include <linux/crc32.h>
 #include <linux/pgtable.h>
+#include <linux/clk.h>
 
 #include <asm/bootinfo.h>
 #include <asm/bitops.h>
 #include <asm/io.h>
 #include <asm/dma.h>
 
-#include <asm/mach-rc32434/rb.h>
-#include <asm/mach-rc32434/rc32434.h>
 #include <asm/mach-rc32434/eth.h>
 #include <asm/mach-rc32434/dma_v.h>
 
@@ -145,10 +144,9 @@ struct korina_private {
 	struct work_struct restart_task;
 	struct net_device *dev;
 	struct device *dmadev;
+	int mii_clock_freq;
 };
 
-extern unsigned int idt_cpu_freq;
-
 static dma_addr_t korina_tx_dma(struct korina_private *lp, int idx)
 {
 	return lp->td_dma + (idx * sizeof(struct dma_desc));
@@ -900,8 +898,8 @@ static int korina_init(struct net_device *dev)
 
 	/* Management Clock Prescaler Divisor
 	 * Clock independent setting */
-	writel(((idt_cpu_freq) / MII_CLOCK + 1) & ~1,
-			&lp->eth_regs->ethmcp);
+	writel(((lp->mii_clock_freq) / MII_CLOCK + 1) & ~1,
+	       &lp->eth_regs->ethmcp);
 	writel(0, &lp->eth_regs->miimcfg);
 
 	/* don't transmit until fifo contains 48b */
@@ -1061,6 +1059,7 @@ static int korina_probe(struct platform_device *pdev)
 	const u8 *mac_addr = dev_get_platdata(&pdev->dev);
 	struct korina_private *lp;
 	struct net_device *dev;
+	struct clk *clk;
 	void __iomem *p;
 	int rc;
 
@@ -1081,6 +1080,14 @@ static int korina_probe(struct platform_device *pdev)
 			eth_hw_addr_random(dev);
 	}
 
+	clk = devm_clk_get(&pdev->dev, NULL);
+	if (!IS_ERR(clk)) {
+		clk_prepare_enable(clk);
+		lp->mii_clock_freq = clk_get_rate(clk);
+	} else {
+		lp->mii_clock_freq = 200000000; /* max possible input clk */
+	}
+
 	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
 	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
 
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (7 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 8/9] net: korina: Get mdio input clock via common clock framework Thomas Bogendoerfer
@ 2021-04-14 15:29 ` Thomas Bogendoerfer
  2021-04-15  2:48     ` kernel test robot
  2021-04-14 21:10 ` [PATCH v2 net-next 0/9] net: Korina improvements David Miller
  9 siblings, 1 reply; 14+ messages in thread
From: Thomas Bogendoerfer @ 2021-04-14 15:29 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski, netdev, linux-kernel

Move structs/defines for ethernet/dma register into driver, since they
are only used for this driver and remove any MIPS specific includes.
This makes it possible to COMPILE_TEST the driver.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 drivers/net/ethernet/Kconfig  |   2 +-
 drivers/net/ethernet/korina.c | 249 ++++++++++++++++++++++++++++++++--
 2 files changed, 239 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
index c059b4bd3f23..453d202a28c1 100644
--- a/drivers/net/ethernet/Kconfig
+++ b/drivers/net/ethernet/Kconfig
@@ -97,7 +97,7 @@ config JME
 
 config KORINA
 	tristate "Korina (IDT RC32434) Ethernet support"
-	depends on MIKROTIK_RB532
+	depends on MIKROTIK_RB532 || COMPILE_TEST
 	select MII
 	help
 	  If you have a Mikrotik RouterBoard 500 or IDT RC32434
diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
index df75dd5d1638..025f88ae99be 100644
--- a/drivers/net/ethernet/korina.c
+++ b/drivers/net/ethernet/korina.c
@@ -58,18 +58,244 @@
 #include <linux/pgtable.h>
 #include <linux/clk.h>
 
-#include <asm/bootinfo.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#include <asm/dma.h>
-
-#include <asm/mach-rc32434/eth.h>
-#include <asm/mach-rc32434/dma_v.h>
-
 #define DRV_NAME	"korina"
 #define DRV_VERSION	"0.20"
 #define DRV_RELDATE	"15Sep2017"
 
+struct eth_regs {
+	u32 ethintfc;
+	u32 ethfifott;
+	u32 etharc;
+	u32 ethhash0;
+	u32 ethhash1;
+	u32 ethu0[4];		/* Reserved. */
+	u32 ethpfs;
+	u32 ethmcp;
+	u32 eth_u1[10];		/* Reserved. */
+	u32 ethspare;
+	u32 eth_u2[42];		/* Reserved. */
+	u32 ethsal0;
+	u32 ethsah0;
+	u32 ethsal1;
+	u32 ethsah1;
+	u32 ethsal2;
+	u32 ethsah2;
+	u32 ethsal3;
+	u32 ethsah3;
+	u32 ethrbc;
+	u32 ethrpc;
+	u32 ethrupc;
+	u32 ethrfc;
+	u32 ethtbc;
+	u32 ethgpf;
+	u32 eth_u9[50];		/* Reserved. */
+	u32 ethmac1;
+	u32 ethmac2;
+	u32 ethipgt;
+	u32 ethipgr;
+	u32 ethclrt;
+	u32 ethmaxf;
+	u32 eth_u10;		/* Reserved. */
+	u32 ethmtest;
+	u32 miimcfg;
+	u32 miimcmd;
+	u32 miimaddr;
+	u32 miimwtd;
+	u32 miimrdd;
+	u32 miimind;
+	u32 eth_u11;		/* Reserved. */
+	u32 eth_u12;		/* Reserved. */
+	u32 ethcfsa0;
+	u32 ethcfsa1;
+	u32 ethcfsa2;
+};
+
+/* Ethernet interrupt registers */
+#define ETH_INT_FC_EN		BIT(0)
+#define ETH_INT_FC_ITS		BIT(1)
+#define ETH_INT_FC_RIP		BIT(2)
+#define ETH_INT_FC_JAM		BIT(3)
+#define ETH_INT_FC_OVR		BIT(4)
+#define ETH_INT_FC_UND		BIT(5)
+#define ETH_INT_FC_IOC		0x000000c0
+
+/* Ethernet FIFO registers */
+#define ETH_FIFI_TT_TTH_BIT	0
+#define ETH_FIFO_TT_TTH		0x0000007f
+
+/* Ethernet ARC/multicast registers */
+#define ETH_ARC_PRO		BIT(0)
+#define ETH_ARC_AM		BIT(1)
+#define ETH_ARC_AFM		BIT(2)
+#define ETH_ARC_AB		BIT(3)
+
+/* Ethernet SAL registers */
+#define ETH_SAL_BYTE_5		0x000000ff
+#define ETH_SAL_BYTE_4		0x0000ff00
+#define ETH_SAL_BYTE_3		0x00ff0000
+#define ETH_SAL_BYTE_2		0xff000000
+
+/* Ethernet SAH registers */
+#define ETH_SAH_BYTE1		0x000000ff
+#define ETH_SAH_BYTE0		0x0000ff00
+
+/* Ethernet GPF register */
+#define ETH_GPF_PTV		0x0000ffff
+
+/* Ethernet PFG register */
+#define ETH_PFS_PFD		BIT(0)
+
+/* Ethernet CFSA[0-3] registers */
+#define ETH_CFSA0_CFSA4		0x000000ff
+#define ETH_CFSA0_CFSA5		0x0000ff00
+#define ETH_CFSA1_CFSA2		0x000000ff
+#define ETH_CFSA1_CFSA3		0x0000ff00
+#define ETH_CFSA1_CFSA0		0x000000ff
+#define ETH_CFSA1_CFSA1		0x0000ff00
+
+/* Ethernet MAC1 registers */
+#define ETH_MAC1_RE		BIT(0)
+#define ETH_MAC1_PAF		BIT(1)
+#define ETH_MAC1_RFC		BIT(2)
+#define ETH_MAC1_TFC		BIT(3)
+#define ETH_MAC1_LB		BIT(4)
+#define ETH_MAC1_MR		BIT(31)
+
+/* Ethernet MAC2 registers */
+#define ETH_MAC2_FD		BIT(0)
+#define ETH_MAC2_FLC		BIT(1)
+#define ETH_MAC2_HFE		BIT(2)
+#define ETH_MAC2_DC		BIT(3)
+#define ETH_MAC2_CEN		BIT(4)
+#define ETH_MAC2_PE		BIT(5)
+#define ETH_MAC2_VPE		BIT(6)
+#define ETH_MAC2_APE		BIT(7)
+#define ETH_MAC2_PPE		BIT(8)
+#define ETH_MAC2_LPE		BIT(9)
+#define ETH_MAC2_NB		BIT(12)
+#define ETH_MAC2_BP		BIT(13)
+#define ETH_MAC2_ED		BIT(14)
+
+/* Ethernet IPGT register */
+#define ETH_IPGT		0x0000007f
+
+/* Ethernet IPGR registers */
+#define ETH_IPGR_IPGR2		0x0000007f
+#define ETH_IPGR_IPGR1		0x00007f00
+
+/* Ethernet CLRT registers */
+#define ETH_CLRT_MAX_RET	0x0000000f
+#define ETH_CLRT_COL_WIN	0x00003f00
+
+/* Ethernet MAXF register */
+#define ETH_MAXF		0x0000ffff
+
+/* Ethernet test registers */
+#define ETH_TEST_REG		BIT(2)
+#define ETH_MCP_DIV		0x000000ff
+
+/* MII registers */
+#define ETH_MII_CFG_RSVD	0x0000000c
+#define ETH_MII_CMD_RD		BIT(0)
+#define ETH_MII_CMD_SCN		BIT(1)
+#define ETH_MII_REG_ADDR	0x0000001f
+#define ETH_MII_PHY_ADDR	0x00001f00
+#define ETH_MII_WTD_DATA	0x0000ffff
+#define ETH_MII_RDD_DATA	0x0000ffff
+#define ETH_MII_IND_BSY		BIT(0)
+#define ETH_MII_IND_SCN		BIT(1)
+#define ETH_MII_IND_NV		BIT(2)
+
+/* Values for the DEVCS field of the Ethernet DMA Rx and Tx descriptors. */
+#define ETH_RX_FD		BIT(0)
+#define ETH_RX_LD		BIT(1)
+#define ETH_RX_ROK		BIT(2)
+#define ETH_RX_FM		BIT(3)
+#define ETH_RX_MP		BIT(4)
+#define ETH_RX_BP		BIT(5)
+#define ETH_RX_VLT		BIT(6)
+#define ETH_RX_CF		BIT(7)
+#define ETH_RX_OVR		BIT(8)
+#define ETH_RX_CRC		BIT(9)
+#define ETH_RX_CV		BIT(10)
+#define ETH_RX_DB		BIT(11)
+#define ETH_RX_LE		BIT(12)
+#define ETH_RX_LOR		BIT(13)
+#define ETH_RX_CES		BIT(14)
+#define ETH_RX_LEN_BIT		16
+#define ETH_RX_LEN		0xffff0000
+
+#define ETH_TX_FD		BIT(0)
+#define ETH_TX_LD		BIT(1)
+#define ETH_TX_OEN		BIT(2)
+#define ETH_TX_PEN		BIT(3)
+#define ETH_TX_CEN		BIT(4)
+#define ETH_TX_HEN		BIT(5)
+#define ETH_TX_TOK		BIT(6)
+#define ETH_TX_MP		BIT(7)
+#define ETH_TX_BP		BIT(8)
+#define ETH_TX_UND		BIT(9)
+#define ETH_TX_OF		BIT(10)
+#define ETH_TX_ED		BIT(11)
+#define ETH_TX_EC		BIT(12)
+#define ETH_TX_LC		BIT(13)
+#define ETH_TX_TD		BIT(14)
+#define ETH_TX_CRC		BIT(15)
+#define ETH_TX_LE		BIT(16)
+#define ETH_TX_CC		0x001E0000
+
+/* DMA descriptor (in physical memory). */
+struct dma_desc {
+	u32 control;			/* Control. use DMAD_* */
+	u32 ca;				/* Current Address. */
+	u32 devcs;			/* Device control and status. */
+	u32 link;			/* Next descriptor in chain. */
+};
+
+#define DMA_DESC_COUNT_BIT		0
+#define DMA_DESC_COUNT_MSK		0x0003ffff
+#define DMA_DESC_DS_BIT			20
+#define DMA_DESC_DS_MSK			0x00300000
+
+#define DMA_DESC_DEV_CMD_BIT		22
+#define DMA_DESC_DEV_CMD_MSK		0x01c00000
+
+/* DMA descriptors interrupts */
+#define DMA_DESC_COF			BIT(25) /* Chain on finished */
+#define DMA_DESC_COD			BIT(26) /* Chain on done */
+#define DMA_DESC_IOF			BIT(27) /* Interrupt on finished */
+#define DMA_DESC_IOD			BIT(28) /* Interrupt on done */
+#define DMA_DESC_TERM			BIT(29) /* Terminated */
+#define DMA_DESC_DONE			BIT(30) /* Done */
+#define DMA_DESC_FINI			BIT(31) /* Finished */
+
+/* DMA register (within Internal Register Map).  */
+struct dma_reg {
+	u32 dmac;		/* Control. */
+	u32 dmas;		/* Status. */
+	u32 dmasm;		/* Mask. */
+	u32 dmadptr;		/* Descriptor pointer. */
+	u32 dmandptr;		/* Next descriptor pointer. */
+};
+
+/* DMA channels specific registers */
+#define DMA_CHAN_RUN_BIT		BIT(0)
+#define DMA_CHAN_DONE_BIT		BIT(1)
+#define DMA_CHAN_MODE_BIT		BIT(2)
+#define DMA_CHAN_MODE_MSK		0x0000000c
+#define	 DMA_CHAN_MODE_AUTO		0
+#define	 DMA_CHAN_MODE_BURST		1
+#define	 DMA_CHAN_MODE_XFRT		2
+#define	 DMA_CHAN_MODE_RSVD		3
+#define DMA_CHAN_ACT_BIT		BIT(4)
+
+/* DMA status registers */
+#define DMA_STAT_FINI			BIT(0)
+#define DMA_STAT_DONE			BIT(1)
+#define DMA_STAT_CHAIN			BIT(2)
+#define DMA_STAT_ERR			BIT(3)
+#define DMA_STAT_HALT			BIT(4)
+
 #define STATION_ADDRESS_HIGH(dev) (((dev)->dev_addr[0] << 8) | \
 				   ((dev)->dev_addr[1]))
 #define STATION_ADDRESS_LOW(dev)  (((dev)->dev_addr[2] << 24) | \
@@ -99,6 +325,7 @@ enum chain_status {
 	desc_empty
 };
 
+#define DMA_COUNT(count)	((count) & DMA_DESC_COUNT_MSK)
 #define IS_DMA_FINISHED(X)	(((X) & (DMA_DESC_FINI)) != 0)
 #define IS_DMA_DONE(X)		(((X) & (DMA_DESC_DONE)) != 0)
 #define RCVPKT_LENGTH(X)	(((X) & ETH_RX_LEN) >> ETH_RX_LEN_BIT)
@@ -454,14 +681,14 @@ static int korina_rx(struct net_device *dev, int limit)
 
 		lp->rx_next_done = (lp->rx_next_done + 1) & KORINA_RDS_MASK;
 		rd = &lp->rd_ring[lp->rx_next_done];
-		writel(~DMA_STAT_DONE, &lp->rx_dma_regs->dmas);
+		writel((u32)~DMA_STAT_DONE, &lp->rx_dma_regs->dmas);
 	}
 
 	dmas = readl(&lp->rx_dma_regs->dmas);
 
 	if (dmas & DMA_STAT_HALT) {
-		writel(~(DMA_STAT_HALT | DMA_STAT_ERR),
-				&lp->rx_dma_regs->dmas);
+		writel((u32)~(DMA_STAT_HALT | DMA_STAT_ERR),
+		       &lp->rx_dma_regs->dmas);
 
 		lp->dma_halt_cnt++;
 		rd->devcs = 0;
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 net-next 7/9] net: korina: Add support for device tree
  2021-04-14 15:29 ` [PATCH v2 net-next 7/9] net: korina: Add support for device tree Thomas Bogendoerfer
@ 2021-04-14 18:33   ` Florian Fainelli
  0 siblings, 0 replies; 14+ messages in thread
From: Florian Fainelli @ 2021-04-14 18:33 UTC (permalink / raw)
  To: Thomas Bogendoerfer, David S. Miller, Jakub Kicinski, netdev,
	linux-kernel



On 4/14/2021 8:29 AM, Thomas Bogendoerfer wrote:
> If there is no mac address passed via platform data try to get it via
> device tree and fall back to a random mac address, if all fail.
> 
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> ---
>  drivers/net/ethernet/korina.c | 29 ++++++++++++++++++++++++++---
>  1 file changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
> index 69c8baa87a6e..c4590b2c65aa 100644
> --- a/drivers/net/ethernet/korina.c
> +++ b/drivers/net/ethernet/korina.c
> @@ -42,6 +42,8 @@
>  #include <linux/interrupt.h>
>  #include <linux/ioport.h>
>  #include <linux/in.h>
> +#include <linux/of_device.h>
> +#include <linux/of_net.h>
>  #include <linux/slab.h>
>  #include <linux/string.h>
>  #include <linux/delay.h>
> @@ -1056,7 +1058,7 @@ static const struct net_device_ops korina_netdev_ops = {
>  
>  static int korina_probe(struct platform_device *pdev)
>  {
> -	u8 *mac_addr = dev_get_platdata(&pdev->dev);
> +	const u8 *mac_addr = dev_get_platdata(&pdev->dev);
>  	struct korina_private *lp;
>  	struct net_device *dev;
>  	void __iomem *p;
> @@ -1069,7 +1071,15 @@ static int korina_probe(struct platform_device *pdev)
>  	SET_NETDEV_DEV(dev, &pdev->dev);
>  	lp = netdev_priv(dev);
>  
> -	memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
> +	if (mac_addr) {
> +		ether_addr_copy(dev->dev_addr, mac_addr);
> +	} else {
> +		mac_addr = of_get_mac_address(pdev->dev.of_node);
> +		if (!IS_ERR(mac_addr))
> +			ether_addr_copy(dev->dev_addr, mac_addr);
> +		else
> +			eth_hw_addr_random(dev);
> +	}
>  
>  	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
>  	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
> @@ -1149,8 +1159,21 @@ static int korina_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> +#ifdef CONFIG_OF
> +static const struct of_device_id korina_match[] = {
> +	{
> +		.compatible = "korina",
> +	},

If you add Device Tree, you might as well provide a binding document for
this controller and possibly pick up a better name than what this driver
had to begin with (in hindsight rb532 is also a bad name since it was
just one board instance), how about using idt,rc32434-emac or something
along these lines?
-- 
Florian

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 net-next 0/9] net: Korina improvements
  2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
                   ` (8 preceding siblings ...)
  2021-04-14 15:29 ` [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable Thomas Bogendoerfer
@ 2021-04-14 21:10 ` David Miller
  9 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2021-04-14 21:10 UTC (permalink / raw)
  To: tsbogend; +Cc: kuba, linux-mips, linux-kernel, netdev

From: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Date: Wed, 14 Apr 2021 17:29:36 +0200

> While converting Mikrotik RB532 support to use device tree I stumbled
> over the korina ethernet driver, which used way too many MIPS specific
> hacks. This series cleans this all up and adds support for device tree.
> 
> Changes in v2:
>   - added device tree support to get rid of idt_cpu_freq
>   - fixed compile test on 64bit archs
>   - fixed descriptor current address handling by storing/using mapped
>     dma addresses (dma controller modifies current address)

The last patch causes compile failures.  Incorrect number of
arguments to of_get_mac_address(), please fix this and resubmit,
thanks.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable
  2021-04-14 15:29 ` [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable Thomas Bogendoerfer
@ 2021-04-15  2:48     ` kernel test robot
  0 siblings, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-04-15  2:48 UTC (permalink / raw)
  To: Thomas Bogendoerfer, David S. Miller, Jakub Kicinski, linux-kernel
  Cc: kbuild-all, netdev

[-- Attachment #1: Type: text/plain, Size: 13133 bytes --]

Hi Thomas,

I love your patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Thomas-Bogendoerfer/net-Korina-improvements/20210414-233326
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 5871d0c6b8ea805916c3135d0c53b095315bc674
config: nios2-allyesconfig (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/a7d955bacb53b068d30f7527c6bafaf4ca2419e7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Thomas-Bogendoerfer/net-Korina-improvements/20210414-233326
        git checkout a7d955bacb53b068d30f7527c6bafaf4ca2419e7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=nios2 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/net/ethernet/korina.c: In function 'korina_probe':
>> drivers/net/ethernet/korina.c:1303:14: error: too few arguments to function 'of_get_mac_address'
    1303 |   mac_addr = of_get_mac_address(pdev->dev.of_node);
         |              ^~~~~~~~~~~~~~~~~~
   In file included from drivers/net/ethernet/korina.c:46:
   include/linux/of_net.h:16:12: note: declared here
      16 | extern int of_get_mac_address(struct device_node *np, u8 *mac);
         |            ^~~~~~~~~~~~~~~~~~


vim +/of_get_mac_address +1303 drivers/net/ethernet/korina.c

52b031ff3987a0 drivers/net/korina.c          Alexander Beregalov 2009-04-15  1283  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1284  static int korina_probe(struct platform_device *pdev)
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1285  {
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1286  	const u8 *mac_addr = dev_get_platdata(&pdev->dev);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1287  	struct korina_private *lp;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1288  	struct net_device *dev;
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1289  	struct clk *clk;
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1290  	void __iomem *p;
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1291  	int rc;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1292  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1293  	dev = devm_alloc_etherdev(&pdev->dev, sizeof(struct korina_private));
41de8d4cff21a2 drivers/net/ethernet/korina.c Joe Perches         2012-01-29  1294  	if (!dev)
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1295  		return -ENOMEM;
41de8d4cff21a2 drivers/net/ethernet/korina.c Joe Perches         2012-01-29  1296  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1297  	SET_NETDEV_DEV(dev, &pdev->dev);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1298  	lp = netdev_priv(dev);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1299  
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1300  	if (mac_addr) {
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1301  		ether_addr_copy(dev->dev_addr, mac_addr);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1302  	} else {
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14 @1303  		mac_addr = of_get_mac_address(pdev->dev.of_node);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1304  		if (!IS_ERR(mac_addr))
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1305  			ether_addr_copy(dev->dev_addr, mac_addr);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1306  		else
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1307  			eth_hw_addr_random(dev);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1308  	}
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1309  
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1310  	clk = devm_clk_get(&pdev->dev, NULL);
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1311  	if (!IS_ERR(clk)) {
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1312  		clk_prepare_enable(clk);
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1313  		lp->mii_clock_freq = clk_get_rate(clk);
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1314  	} else {
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1315  		lp->mii_clock_freq = 200000000; /* max possible input clk */
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1316  	}
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1317  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1318  	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1319  	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1320  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1321  	p = devm_platform_ioremap_resource_byname(pdev, "korina_regs");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1322  	if (!p) {
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1323  		printk(KERN_ERR DRV_NAME ": cannot remap registers\n");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1324  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1325  	}
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1326  	lp->eth_regs = p;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1327  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1328  	p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_rx");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1329  	if (!p) {
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1330  		printk(KERN_ERR DRV_NAME ": cannot remap Rx DMA registers\n");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1331  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1332  	}
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1333  	lp->rx_dma_regs = p;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1334  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1335  	p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_tx");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1336  	if (!p) {
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1337  		printk(KERN_ERR DRV_NAME ": cannot remap Tx DMA registers\n");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1338  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1339  	}
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1340  	lp->tx_dma_regs = p;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1341  
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1342  	lp->td_ring = dmam_alloc_coherent(&pdev->dev, TD_RING_SIZE,
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1343  					  &lp->td_dma, GFP_KERNEL);
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1344  	if (!lp->td_ring)
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1345  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1346  
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1347  	lp->rd_ring = dmam_alloc_coherent(&pdev->dev, RD_RING_SIZE,
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1348  					  &lp->rd_dma, GFP_KERNEL);
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1349  	if (!lp->rd_ring)
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1350  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1351  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1352  	spin_lock_init(&lp->lock);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1353  	/* just use the rx dma irq */
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1354  	dev->irq = lp->rx_irq;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1355  	lp->dev = dev;
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1356  	lp->dmadev = &pdev->dev;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1357  
52b031ff3987a0 drivers/net/korina.c          Alexander Beregalov 2009-04-15  1358  	dev->netdev_ops = &korina_netdev_ops;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1359  	dev->ethtool_ops = &netdev_ethtool_ops;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1360  	dev->watchdog_timeo = TX_TIMEOUT;
d609d2893c25a3 drivers/net/ethernet/korina.c Roman Yeryomin      2017-09-17  1361  	netif_napi_add(dev, &lp->napi, korina_poll, NAPI_POLL_WEIGHT);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1362  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1363  	lp->mii_if.dev = dev;
f645a16ba85561 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1364  	lp->mii_if.mdio_read = korina_mdio_read;
f645a16ba85561 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1365  	lp->mii_if.mdio_write = korina_mdio_write;
f645a16ba85561 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1366  	lp->mii_if.phy_id = 1;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1367  	lp->mii_if.phy_id_mask = 0x1f;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1368  	lp->mii_if.reg_num_mask = 0x1f;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1369  
2d6c00ed2bbd38 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1370  	platform_set_drvdata(pdev, dev);
2d6c00ed2bbd38 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1371  
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1372  	rc = register_netdev(dev);
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1373  	if (rc < 0) {
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1374  		printk(KERN_ERR DRV_NAME
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1375  			": cannot register net device: %d\n", rc);
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1376  		return rc;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1377  	}
34309b36e4f1ab drivers/net/ethernet/korina.c Kees Cook           2017-10-26  1378  	timer_setup(&lp->media_check_timer, korina_poll_media, 0);
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1379  
ceb3d239453254 drivers/net/korina.c          Phil Sutter         2010-05-29  1380  	INIT_WORK(&lp->restart_task, korina_restart_task);
ceb3d239453254 drivers/net/korina.c          Phil Sutter         2010-05-29  1381  
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1382  	printk(KERN_INFO "%s: " DRV_NAME "-" DRV_VERSION " " DRV_RELDATE "\n",
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1383  			dev->name);
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1384  	return rc;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1385  }
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1386  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 59024 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable
@ 2021-04-15  2:48     ` kernel test robot
  0 siblings, 0 replies; 14+ messages in thread
From: kernel test robot @ 2021-04-15  2:48 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 13280 bytes --]

Hi Thomas,

I love your patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Thomas-Bogendoerfer/net-Korina-improvements/20210414-233326
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 5871d0c6b8ea805916c3135d0c53b095315bc674
config: nios2-allyesconfig (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/a7d955bacb53b068d30f7527c6bafaf4ca2419e7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Thomas-Bogendoerfer/net-Korina-improvements/20210414-233326
        git checkout a7d955bacb53b068d30f7527c6bafaf4ca2419e7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=nios2 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/net/ethernet/korina.c: In function 'korina_probe':
>> drivers/net/ethernet/korina.c:1303:14: error: too few arguments to function 'of_get_mac_address'
    1303 |   mac_addr = of_get_mac_address(pdev->dev.of_node);
         |              ^~~~~~~~~~~~~~~~~~
   In file included from drivers/net/ethernet/korina.c:46:
   include/linux/of_net.h:16:12: note: declared here
      16 | extern int of_get_mac_address(struct device_node *np, u8 *mac);
         |            ^~~~~~~~~~~~~~~~~~


vim +/of_get_mac_address +1303 drivers/net/ethernet/korina.c

52b031ff3987a0 drivers/net/korina.c          Alexander Beregalov 2009-04-15  1283  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1284  static int korina_probe(struct platform_device *pdev)
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1285  {
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1286  	const u8 *mac_addr = dev_get_platdata(&pdev->dev);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1287  	struct korina_private *lp;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1288  	struct net_device *dev;
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1289  	struct clk *clk;
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1290  	void __iomem *p;
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1291  	int rc;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1292  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1293  	dev = devm_alloc_etherdev(&pdev->dev, sizeof(struct korina_private));
41de8d4cff21a2 drivers/net/ethernet/korina.c Joe Perches         2012-01-29  1294  	if (!dev)
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1295  		return -ENOMEM;
41de8d4cff21a2 drivers/net/ethernet/korina.c Joe Perches         2012-01-29  1296  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1297  	SET_NETDEV_DEV(dev, &pdev->dev);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1298  	lp = netdev_priv(dev);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1299  
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1300  	if (mac_addr) {
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1301  		ether_addr_copy(dev->dev_addr, mac_addr);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1302  	} else {
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14 @1303  		mac_addr = of_get_mac_address(pdev->dev.of_node);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1304  		if (!IS_ERR(mac_addr))
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1305  			ether_addr_copy(dev->dev_addr, mac_addr);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1306  		else
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1307  			eth_hw_addr_random(dev);
a53164fb8ec50c drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1308  	}
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1309  
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1310  	clk = devm_clk_get(&pdev->dev, NULL);
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1311  	if (!IS_ERR(clk)) {
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1312  		clk_prepare_enable(clk);
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1313  		lp->mii_clock_freq = clk_get_rate(clk);
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1314  	} else {
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1315  		lp->mii_clock_freq = 200000000; /* max possible input clk */
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1316  	}
0bc4efb1d82bd4 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1317  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1318  	lp->rx_irq = platform_get_irq_byname(pdev, "korina_rx");
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1319  	lp->tx_irq = platform_get_irq_byname(pdev, "korina_tx");
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1320  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1321  	p = devm_platform_ioremap_resource_byname(pdev, "korina_regs");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1322  	if (!p) {
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1323  		printk(KERN_ERR DRV_NAME ": cannot remap registers\n");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1324  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1325  	}
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1326  	lp->eth_regs = p;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1327  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1328  	p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_rx");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1329  	if (!p) {
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1330  		printk(KERN_ERR DRV_NAME ": cannot remap Rx DMA registers\n");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1331  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1332  	}
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1333  	lp->rx_dma_regs = p;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1334  
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1335  	p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_tx");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1336  	if (!p) {
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1337  		printk(KERN_ERR DRV_NAME ": cannot remap Tx DMA registers\n");
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1338  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1339  	}
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1340  	lp->tx_dma_regs = p;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1341  
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1342  	lp->td_ring = dmam_alloc_coherent(&pdev->dev, TD_RING_SIZE,
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1343  					  &lp->td_dma, GFP_KERNEL);
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1344  	if (!lp->td_ring)
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1345  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1346  
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1347  	lp->rd_ring = dmam_alloc_coherent(&pdev->dev, RD_RING_SIZE,
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1348  					  &lp->rd_dma, GFP_KERNEL);
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1349  	if (!lp->rd_ring)
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1350  		return -ENOMEM;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1351  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1352  	spin_lock_init(&lp->lock);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1353  	/* just use the rx dma irq */
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1354  	dev->irq = lp->rx_irq;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1355  	lp->dev = dev;
df997a5caa5ebe drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1356  	lp->dmadev = &pdev->dev;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1357  
52b031ff3987a0 drivers/net/korina.c          Alexander Beregalov 2009-04-15  1358  	dev->netdev_ops = &korina_netdev_ops;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1359  	dev->ethtool_ops = &netdev_ethtool_ops;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1360  	dev->watchdog_timeo = TX_TIMEOUT;
d609d2893c25a3 drivers/net/ethernet/korina.c Roman Yeryomin      2017-09-17  1361  	netif_napi_add(dev, &lp->napi, korina_poll, NAPI_POLL_WEIGHT);
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1362  
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1363  	lp->mii_if.dev = dev;
f645a16ba85561 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1364  	lp->mii_if.mdio_read = korina_mdio_read;
f645a16ba85561 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1365  	lp->mii_if.mdio_write = korina_mdio_write;
f645a16ba85561 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1366  	lp->mii_if.phy_id = 1;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1367  	lp->mii_if.phy_id_mask = 0x1f;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1368  	lp->mii_if.reg_num_mask = 0x1f;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1369  
2d6c00ed2bbd38 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1370  	platform_set_drvdata(pdev, dev);
2d6c00ed2bbd38 drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1371  
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1372  	rc = register_netdev(dev);
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1373  	if (rc < 0) {
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1374  		printk(KERN_ERR DRV_NAME
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1375  			": cannot register net device: %d\n", rc);
1857bf0ef3562f drivers/net/ethernet/korina.c Thomas Bogendoerfer 2021-04-14  1376  		return rc;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1377  	}
34309b36e4f1ab drivers/net/ethernet/korina.c Kees Cook           2017-10-26  1378  	timer_setup(&lp->media_check_timer, korina_poll_media, 0);
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1379  
ceb3d239453254 drivers/net/korina.c          Phil Sutter         2010-05-29  1380  	INIT_WORK(&lp->restart_task, korina_restart_task);
ceb3d239453254 drivers/net/korina.c          Phil Sutter         2010-05-29  1381  
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1382  	printk(KERN_INFO "%s: " DRV_NAME "-" DRV_VERSION " " DRV_RELDATE "\n",
f16aea4d201018 drivers/net/korina.c          Phil Sutter         2009-08-12  1383  			dev->name);
e3152ab901bcec drivers/net/korina.c          Francois Romieu     2008-04-20  1384  	return rc;
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1385  }
ef11291bcd5f96 drivers/net/korina.c          Florian Fainelli    2008-03-19  1386  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 59024 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2021-04-15  2:49 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-14 15:29 [PATCH v2 net-next 0/9] net: Korina improvements Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 1/9] net: korina: Fix MDIO functions Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 2/9] net: korina: Use devres functions Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 3/9] net: korina: Remove not needed cache flushes Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 4/9] net: korina: Remove nested helpers Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 5/9] net: korina: Use DMA API Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 6/9] net: korina: Only pass mac address via platform data Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 7/9] net: korina: Add support for device tree Thomas Bogendoerfer
2021-04-14 18:33   ` Florian Fainelli
2021-04-14 15:29 ` [PATCH v2 net-next 8/9] net: korina: Get mdio input clock via common clock framework Thomas Bogendoerfer
2021-04-14 15:29 ` [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable Thomas Bogendoerfer
2021-04-15  2:48   ` kernel test robot
2021-04-15  2:48     ` kernel test robot
2021-04-14 21:10 ` [PATCH v2 net-next 0/9] net: Korina improvements David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.