* [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.