| From 9580649d1ff16687f32e01a89aebd17bf22141f7 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 18 Apr 2021 20:28:53 +0200 |
| Subject: net: ethernet: ixp4xx: Set the DMA masks explicitly |
| |
| From: Linus Walleij <linus.walleij@linaro.org> |
| |
| [ Upstream commit 8d892d60941b00c86d2029c8a99db24ab4979673 ] |
| |
| The former fix only papered over the actual problem: the |
| ethernet core expects the netdev .dev member to have the |
| proper DMA masks set, or there will be BUG_ON() triggered |
| in kernel/dma/mapping.c. |
| |
| Fix this by simply copying dma_mask and dma_mask_coherent |
| from the parent device. |
| |
| Fixes: e45d0fad4a5f ("net: ethernet: ixp4xx: Use parent dev for DMA pool") |
| Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/xscale/ixp4xx_eth.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c |
| index 2e5202923510..403358f2c853 100644 |
| --- a/drivers/net/ethernet/xscale/ixp4xx_eth.c |
| +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c |
| @@ -1086,7 +1086,7 @@ static int init_queues(struct port *port) |
| int i; |
| |
| if (!ports_open) { |
| - dma_pool = dma_pool_create(DRV_NAME, port->netdev->dev.parent, |
| + dma_pool = dma_pool_create(DRV_NAME, &port->netdev->dev, |
| POOL_ALLOC_SIZE, 32, 0); |
| if (!dma_pool) |
| return -ENOMEM; |
| @@ -1436,6 +1436,9 @@ static int ixp4xx_eth_probe(struct platform_device *pdev) |
| ndev->netdev_ops = &ixp4xx_netdev_ops; |
| ndev->ethtool_ops = &ixp4xx_ethtool_ops; |
| ndev->tx_queue_len = 100; |
| + /* Inherit the DMA masks from the platform device */ |
| + ndev->dev.dma_mask = dev->dma_mask; |
| + ndev->dev.coherent_dma_mask = dev->coherent_dma_mask; |
| |
| netif_napi_add(ndev, &port->napi, eth_poll, NAPI_WEIGHT); |
| |
| -- |
| 2.30.2 |
| |