diff options
Diffstat (limited to 'drivers/net/can')
| -rw-r--r-- | drivers/net/can/m_can/m_can_platform.c | 14 | ||||
| -rw-r--r-- | drivers/net/can/rcar/rcar_can.c | 20 | ||||
| -rw-r--r-- | drivers/net/can/sja1000/peak_pci.c | 9 | ||||
| -rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 8 | 
4 files changed, 31 insertions, 20 deletions
| diff --git a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can/m_can_platform.c index 308d4f2fff00..eee47bad0592 100644 --- a/drivers/net/can/m_can/m_can_platform.c +++ b/drivers/net/can/m_can/m_can_platform.c @@ -32,8 +32,13 @@ static u32 iomap_read_reg(struct m_can_classdev *cdev, int reg)  static int iomap_read_fifo(struct m_can_classdev *cdev, int offset, void *val, size_t val_count)  {  	struct m_can_plat_priv *priv = cdev_to_priv(cdev); +	void __iomem *src = priv->mram_base + offset; -	ioread32_rep(priv->mram_base + offset, val, val_count); +	while (val_count--) { +		*(unsigned int *)val = ioread32(src); +		val += 4; +		src += 4; +	}  	return 0;  } @@ -51,8 +56,13 @@ static int iomap_write_fifo(struct m_can_classdev *cdev, int offset,  			    const void *val, size_t val_count)  {  	struct m_can_plat_priv *priv = cdev_to_priv(cdev); +	void __iomem *dst = priv->mram_base + offset; -	iowrite32_rep(priv->base + offset, val, val_count); +	while (val_count--) { +		iowrite32(*(unsigned int *)val, dst); +		val += 4; +		dst += 4; +	}  	return 0;  } diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c index 00e4533c8bdd..8999ec9455ec 100644 --- a/drivers/net/can/rcar/rcar_can.c +++ b/drivers/net/can/rcar/rcar_can.c @@ -846,10 +846,12 @@ static int __maybe_unused rcar_can_suspend(struct device *dev)  	struct rcar_can_priv *priv = netdev_priv(ndev);  	u16 ctlr; -	if (netif_running(ndev)) { -		netif_stop_queue(ndev); -		netif_device_detach(ndev); -	} +	if (!netif_running(ndev)) +		return 0; + +	netif_stop_queue(ndev); +	netif_device_detach(ndev); +  	ctlr = readw(&priv->regs->ctlr);  	ctlr |= RCAR_CAN_CTLR_CANM_HALT;  	writew(ctlr, &priv->regs->ctlr); @@ -868,6 +870,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)  	u16 ctlr;  	int err; +	if (!netif_running(ndev)) +		return 0; +  	err = clk_enable(priv->clk);  	if (err) {  		netdev_err(ndev, "clk_enable() failed, error %d\n", err); @@ -881,10 +886,9 @@ static int __maybe_unused rcar_can_resume(struct device *dev)  	writew(ctlr, &priv->regs->ctlr);  	priv->can.state = CAN_STATE_ERROR_ACTIVE; -	if (netif_running(ndev)) { -		netif_device_attach(ndev); -		netif_start_queue(ndev); -	} +	netif_device_attach(ndev); +	netif_start_queue(ndev); +  	return 0;  } diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c index 6db90dc4bc9d..84f34020aafb 100644 --- a/drivers/net/can/sja1000/peak_pci.c +++ b/drivers/net/can/sja1000/peak_pci.c @@ -752,16 +752,15 @@ static void peak_pci_remove(struct pci_dev *pdev)  		struct net_device *prev_dev = chan->prev_dev;  		dev_info(&pdev->dev, "removing device %s\n", dev->name); +		/* do that only for first channel */ +		if (!prev_dev && chan->pciec_card) +			peak_pciec_remove(chan->pciec_card);  		unregister_sja1000dev(dev);  		free_sja1000dev(dev);  		dev = prev_dev; -		if (!dev) { -			/* do that only for first channel */ -			if (chan->pciec_card) -				peak_pciec_remove(chan->pciec_card); +		if (!dev)  			break; -		}  		priv = netdev_priv(dev);  		chan = priv->priv;  	} diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c index b11eabad575b..09029a3bad1a 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c @@ -551,11 +551,10 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,  	} else if (sm->channel_p_w_b & PUCAN_BUS_WARNING) {  		new_state = CAN_STATE_ERROR_WARNING;  	} else { -		/* no error bit (so, no error skb, back to active state) */ -		dev->can.state = CAN_STATE_ERROR_ACTIVE; +		/* back to (or still in) ERROR_ACTIVE state */ +		new_state = CAN_STATE_ERROR_ACTIVE;  		pdev->bec.txerr = 0;  		pdev->bec.rxerr = 0; -		return 0;  	}  	/* state hasn't changed */ @@ -568,8 +567,7 @@ static int pcan_usb_fd_decode_status(struct pcan_usb_fd_if *usb_if,  	/* allocate an skb to store the error frame */  	skb = alloc_can_err_skb(netdev, &cf); -	if (skb) -		can_change_state(netdev, cf, tx_state, rx_state); +	can_change_state(netdev, cf, tx_state, rx_state);  	/* things must be done even in case of OOM */  	if (new_state == CAN_STATE_BUS_OFF) |