2021-04-15 00:33:04

by Thomas Bogendoerfer

[permalink] [raw]
Subject: [PATCH v2 net-next 0/9] net: Korina improvements

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


2021-04-15 00:33:06

by Thomas Bogendoerfer

[permalink] [raw]
Subject: [PATCH v2 net-next 1/9] net: korina: Fix MDIO functions

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

Signed-off-by: Thomas Bogendoerfer <[email protected]>
---
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

2021-04-15 00:33:12

by Thomas Bogendoerfer

[permalink] [raw]
Subject: [PATCH v2 net-next 8/9] net: korina: Get mdio input clock via common clock framework

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 <[email protected]>
---
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

2021-04-15 00:34:52

by Thomas Bogendoerfer

[permalink] [raw]
Subject: [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable

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 <[email protected]>
---
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

2021-04-15 00:47:28

by David Miller

[permalink] [raw]
Subject: Re: [PATCH v2 net-next 0/9] net: Korina improvements

From: Thomas Bogendoerfer <[email protected]>
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.

2021-04-15 02:51:12

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v2 net-next 9/9] net: korina: Make driver COMPILE_TESTable

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 <[email protected]>

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/[email protected]


Attachments:
(No filename) (12.97 kB)
.config.gz (57.64 kB)
Download all attachments