Message ID | 20140317144244.6d2e09f9@marrow.netinsight.se (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Simon Kågström <simon.kagstrom@netinsight.net> writes: > +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c > @@ -1426,6 +1426,10 @@ static int eth_init_one(struct platform_device *pdev) > port->netdev = dev; > port->id = pdev->id; > > + err = dma_set_coherent_mask(&dev->dev, DMA_BIT_MASK(32)); > + if (err < 0) > + goto err_free; > + Yeah. One could also set both masks with the new single call. The driver uses both streaming and coherent mapping.
On Tue, Mar 18, 2014 at 08:43:09AM +0100, Krzysztof Ha?asa wrote: > Simon Kågström <simon.kagstrom@netinsight.net> writes: > > > +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c > > @@ -1426,6 +1426,10 @@ static int eth_init_one(struct platform_device *pdev) > > port->netdev = dev; > > port->id = pdev->id; > > > > + err = dma_set_coherent_mask(&dev->dev, DMA_BIT_MASK(32)); > > + if (err < 0) > > + goto err_free; > > + > > Yeah. One could also set both masks with the new single call. The driver > uses both streaming and coherent mapping. The other issue with this patch set is (from DMA-API-HOWTO.txt): The coherent coherent mask will always be able to set the same or a smaller mask as the streaming mask. and code in places assumes that's true.
diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c index 25283f1..e540e51 100644 --- a/drivers/net/ethernet/xscale/ixp4xx_eth.c +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c @@ -1426,6 +1426,10 @@ static int eth_init_one(struct platform_device *pdev) port->netdev = dev; port->id = pdev->id; + err = dma_set_coherent_mask(&dev->dev, DMA_BIT_MASK(32)); + if (err < 0) + goto err_free; + switch (port->id) { case IXP4XX_ETH_NPEA: port->regs = (struct eth_regs __iomem *)IXP4XX_EthA_BASE_VIRT;
This driver has been broken since commit 1a4901177574083c35fafc24c4d151c2a7c7647c ixp4xx_eth: avoid calling dma_pool_create() with NULL dev in 3.7 and would fail with [ 33.055473] net eth1: coherent DMA mask is unset [ 33.055523] net eth1: coherent allocation too big (requested 0x1000 mask 0x0) Fix by setting up the DMA mask to the entire 32-bit range. Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net> --- drivers/net/ethernet/xscale/ixp4xx_eth.c | 4 ++++ 1 file changed, 4 insertions(+)