Commit 87ab2079 authored by Alex Williams's avatar Alex Williams Committed by David S. Miller

net: nixge: Separate ctrl and dma resources

The DMA engine is a separate entity altogether, and this allows the DMA
controller's address to float elsewhere in the FPGA's map.
Signed-off-by: default avatarAlex Williams <alex.williams@ni.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5ea25b12
...@@ -105,6 +105,12 @@ ...@@ -105,6 +105,12 @@
#define NIXGE_MAX_JUMBO_FRAME_SIZE \ #define NIXGE_MAX_JUMBO_FRAME_SIZE \
(NIXGE_JUMBO_MTU + NIXGE_HDR_SIZE + NIXGE_TRL_SIZE) (NIXGE_JUMBO_MTU + NIXGE_HDR_SIZE + NIXGE_TRL_SIZE)
enum nixge_version {
NIXGE_V2,
NIXGE_V3,
NIXGE_VERSION_COUNT
};
struct nixge_hw_dma_bd { struct nixge_hw_dma_bd {
u32 next_lo; u32 next_lo;
u32 next_hi; u32 next_hi;
...@@ -1225,11 +1231,59 @@ static void *nixge_get_nvmem_address(struct device *dev) ...@@ -1225,11 +1231,59 @@ static void *nixge_get_nvmem_address(struct device *dev)
return mac; return mac;
} }
/* Match table for of_platform binding */
static const struct of_device_id nixge_dt_ids[] = {
{ .compatible = "ni,xge-enet-2.00", .data = (void *)NIXGE_V2 },
{ .compatible = "ni,xge-enet-3.00", .data = (void *)NIXGE_V3 },
{},
};
MODULE_DEVICE_TABLE(of, nixge_dt_ids);
static int nixge_of_get_resources(struct platform_device *pdev)
{
const struct of_device_id *of_id;
enum nixge_version version;
struct resource *ctrlres;
struct resource *dmares;
struct net_device *ndev;
struct nixge_priv *priv;
ndev = platform_get_drvdata(pdev);
priv = netdev_priv(ndev);
of_id = of_match_node(nixge_dt_ids, pdev->dev.of_node);
if (!of_id)
return -ENODEV;
version = (enum nixge_version)of_id->data;
if (version <= NIXGE_V2)
dmares = platform_get_resource(pdev, IORESOURCE_MEM, 0);
else
dmares = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"dma");
priv->dma_regs = devm_ioremap_resource(&pdev->dev, dmares);
if (IS_ERR(priv->dma_regs)) {
netdev_err(ndev, "failed to map dma regs\n");
return PTR_ERR(priv->dma_regs);
}
if (version <= NIXGE_V2) {
priv->ctrl_regs = priv->dma_regs + NIXGE_REG_CTRL_OFFSET;
} else {
ctrlres = platform_get_resource_byname(pdev, IORESOURCE_MEM,
"ctrl");
priv->ctrl_regs = devm_ioremap_resource(&pdev->dev, ctrlres);
}
if (IS_ERR(priv->ctrl_regs)) {
netdev_err(ndev, "failed to map ctrl regs\n");
return PTR_ERR(priv->ctrl_regs);
}
return 0;
}
static int nixge_probe(struct platform_device *pdev) static int nixge_probe(struct platform_device *pdev)
{ {
struct nixge_priv *priv; struct nixge_priv *priv;
struct net_device *ndev; struct net_device *ndev;
struct resource *dmares;
const u8 *mac_addr; const u8 *mac_addr;
int err; int err;
...@@ -1261,14 +1315,9 @@ static int nixge_probe(struct platform_device *pdev) ...@@ -1261,14 +1315,9 @@ static int nixge_probe(struct platform_device *pdev)
priv->dev = &pdev->dev; priv->dev = &pdev->dev;
netif_napi_add(ndev, &priv->napi, nixge_poll, NAPI_POLL_WEIGHT); netif_napi_add(ndev, &priv->napi, nixge_poll, NAPI_POLL_WEIGHT);
err = nixge_of_get_resources(pdev);
dmares = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (err)
priv->dma_regs = devm_ioremap_resource(&pdev->dev, dmares); return err;
if (IS_ERR(priv->dma_regs)) {
netdev_err(ndev, "failed to map dma regs\n");
return PTR_ERR(priv->dma_regs);
}
priv->ctrl_regs = priv->dma_regs + NIXGE_REG_CTRL_OFFSET;
__nixge_hw_set_mac_address(ndev); __nixge_hw_set_mac_address(ndev);
priv->tx_irq = platform_get_irq_byname(pdev, "tx"); priv->tx_irq = platform_get_irq_byname(pdev, "tx");
...@@ -1337,13 +1386,6 @@ static int nixge_remove(struct platform_device *pdev) ...@@ -1337,13 +1386,6 @@ static int nixge_remove(struct platform_device *pdev)
return 0; return 0;
} }
/* Match table for of_platform binding */
static const struct of_device_id nixge_dt_ids[] = {
{ .compatible = "ni,xge-enet-2.00", },
{},
};
MODULE_DEVICE_TABLE(of, nixge_dt_ids);
static struct platform_driver nixge_driver = { static struct platform_driver nixge_driver = {
.probe = nixge_probe, .probe = nixge_probe,
.remove = nixge_remove, .remove = nixge_remove,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment