Skip to content

Commit

Permalink
net: korina: Add support for device tree
Browse files Browse the repository at this point in the history
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Thomas Bogendoerfer authored and David S. Miller committed Apr 19, 2021
1 parent af80425 commit 10b26f0
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 22 deletions.
20 changes: 5 additions & 15 deletions arch/mips/rb532/devices.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,37 +58,27 @@ EXPORT_SYMBOL(get_latch_u5);

static struct resource korina_dev0_res[] = {
{
.name = "korina_regs",
.name = "emac",
.start = ETH0_BASE_ADDR,
.end = ETH0_BASE_ADDR + sizeof(struct eth_regs),
.flags = IORESOURCE_MEM,
}, {
.name = "korina_rx",
.name = "rx",
.start = ETH0_DMA_RX_IRQ,
.end = ETH0_DMA_RX_IRQ,
.flags = IORESOURCE_IRQ
}, {
.name = "korina_tx",
.name = "tx",
.start = ETH0_DMA_TX_IRQ,
.end = ETH0_DMA_TX_IRQ,
.flags = IORESOURCE_IRQ
}, {
.name = "korina_ovr",
.start = ETH0_RX_OVR_IRQ,
.end = ETH0_RX_OVR_IRQ,
.flags = IORESOURCE_IRQ
}, {
.name = "korina_und",
.start = ETH0_TX_UND_IRQ,
.end = ETH0_TX_UND_IRQ,
.flags = IORESOURCE_IRQ
}, {
.name = "korina_dma_rx",
.name = "dma_rx",
.start = ETH0_RX_DMA_ADDR,
.end = ETH0_RX_DMA_ADDR + DMA_CHAN_OFFSET - 1,
.flags = IORESOURCE_MEM,
}, {
.name = "korina_dma_tx",
.name = "dma_tx",
.start = ETH0_TX_DMA_ADDR,
.end = ETH0_TX_DMA_ADDR + DMA_CHAN_OFFSET - 1,
.flags = IORESOURCE_MEM,
Expand Down
32 changes: 25 additions & 7 deletions drivers/net/ethernet/korina.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
#include <linux/ioport.h>
#include <linux/iopoll.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>
Expand Down Expand Up @@ -1068,26 +1070,29 @@ 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 if (of_get_mac_address(pdev->dev.of_node, dev->dev_addr) < 0)
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");
lp->rx_irq = platform_get_irq_byname(pdev, "rx");
lp->tx_irq = platform_get_irq_byname(pdev, "tx");

p = devm_platform_ioremap_resource_byname(pdev, "korina_regs");
p = devm_platform_ioremap_resource_byname(pdev, "emac");
if (!p) {
printk(KERN_ERR DRV_NAME ": cannot remap registers\n");
return -ENOMEM;
}
lp->eth_regs = p;

p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_rx");
p = devm_platform_ioremap_resource_byname(pdev, "dma_rx");
if (!p) {
printk(KERN_ERR DRV_NAME ": cannot remap Rx DMA registers\n");
return -ENOMEM;
}
lp->rx_dma_regs = p;

p = devm_platform_ioremap_resource_byname(pdev, "korina_dma_tx");
p = devm_platform_ioremap_resource_byname(pdev, "dma_tx");
if (!p) {
printk(KERN_ERR DRV_NAME ": cannot remap Tx DMA registers\n");
return -ENOMEM;
Expand Down Expand Up @@ -1148,8 +1153,21 @@ static int korina_remove(struct platform_device *pdev)
return 0;
}

#ifdef CONFIG_OF
static const struct of_device_id korina_match[] = {
{
.compatible = "idt,3243x-emac",
},
{ }
};
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,
};
Expand Down

0 comments on commit 10b26f0

Please sign in to comment.